Conversation
- Add demo limiter: 150 req/min, burst 50 (up from anonymous 40/10) - Demo users still use IP-based limiting (shared account) - Separate from anonymous limiter to avoid affecting unauthenticated traffic
- Add SnmpQueryCredential parameter to scan_udp_ports() and test_snmp_service() so port 161 detection uses configured credentials instead of hardcoded "public" community string - When credential provided, use snmp::session::create_session() (consistent with all other SNMP functions) - When no credential, fall back to "public" (preserves behavior for unconfigured networks) - Pass existing snmp_credential from deep_scan_host() through to scan_udp_ports() in network.rs - Remove unused scan_ports_and_endpoints() function
- Add show_label metadata field to SubnetType (false for Unknown/None) - Use metadata to conditionally show type name in topology node labels - Use metadata to conditionally show type tag in inspector panel - Add show_label to SubnetTypeMetadata TypeScript interface
- Guard single and bulk delete endpoints to reject deletion when it would leave the org with zero networks - Re-create a default network after organization reset so the org is never left empty
- Skip PostHog init on /share/*/embed routes to prevent session recordings - Gate demo topology iframe behind isCloud so self-hosted users don't see it - Remove duplicate frontend org_created event (backend already captures with richer data) - Add backon retry (2 attempts, 100-500ms backoff) to PostHog capture/identify/group_identify
- Fix validation bug: hidden fields (daemonUrl, daemonPort) no longer block form submission when mode switches back to daemon_poll. Added visibleFields filter to validateForm() and getVisibleFieldIds() helper. - Remove separate API Key wizard step: inline key source choice on Configure step for daemon_poll; auto-generate silently for server_poll and first daemon flows. Delete ApiKeyStep.svelte. - Add installation feedback loop: "I've installed it" and "I'm having trouble" CTAs on install step. Waiting/connected/trouble states with org query polling for FirstDaemonRegistered detection. 2-min timeout to trouble state with SupportOptions panel. - Extract SupportOptions.svelte from SupportModal for reuse in troubleshooting contexts (docs, Discord, bug report, email). - Integrate daemon setup store with GettingStartedChecklist: "Having trouble?" tag appears on daemon step while waiting, with inline troubleshooting. Checklist polls org query independently. - Add onCopy callback to CodeContainer; track copy analytics events. - Delete deprecated ScanProgressIndicator.svelte (unused). - Remove unused i18n keys from all locale files.
- Rewrite Internet and Remote Network subnet descriptions to explain their purpose (representing un-scannable services) and how to use them (create interfaces on the subnet)
…mo iframe, remove duplicate org_created, add PostHog retries
… default on org reset
…ls through UDP port scanner
…l feedback with waiting state and troubleshooting
- Add org field help text explaining that the organization is the user's account containing all networks, hosts, and team members - Add per-use-case network field help text explaining that networks are scannable environments, replacing the MSP-only help text
… default on org reset
- Extract all hard-coded labels, descriptions, and placeholders from UseCaseConfig into paraglide message keys - Add orgHelp and networkHelp fields to UseCaseConfig - Convert USE_CASES constant to getUseCases() function so i18n strings are resolved at render time
… default on org reset
- Homelab: "What should we call your setup?" -> "your organization?" - MSP: "Your company name" -> "Your organization name"
- Update errors_entity_delete_forbidden i18n template to show the reason, so users see "Cannot delete this Network: Organizations must have at least one network" instead of just "Cannot delete this Network"
- Fix connection-detected-success: capture startedAsFirstDaemon on
modal open so isFirstDaemon reactivity doesn't flip showWaitingUI
to false when FirstDaemonRegistered appears in onboarding
- Move install CTAs ("I've run the install command", "I'm having
trouble") from inline content to modal footer for first daemon flow
- "I'm having trouble" now toggles troubleshooting panel via parent
state instead of being a no-op
- Update step labels: "Download the binary/executable" and "Run the
install command" for clearer user guidance
- Add InlineInfo on Configure step when API key will be auto-generated
(first daemon and server_poll flows)
- Remove unused i18n keys: daemons_downloadDaemon, daemons_runDaemon
…l feedback with waiting state and troubleshooting
… default on org reset
- When no SNMP credential is configured but port 161 is detected, construct a default "public" credential and use it to collect SNMP system info, ifTable, LLDP/CDP neighbors - Previously, hosts responding to "public" would show port 161 but have no SNMP data collected because the None credential gate skipped all SNMP queries
- Share pages are public/unauthenticated so analytics tracking is unnecessary
- Dynamic footer CTA: "I've started the Docker container" for Docker, "I've run the install command" for binary installs. Lift linuxMethod state to modal for footer access. - PowerShell step label: "Run install command in PowerShell as Admin" - Add confetti on daemon connection success in modal - Guard checklist confetti to only fire on #home tab - Auto-scroll to troubleshooting panel when "I'm having trouble" clicked - Update API key info copy: "...automatically generated for this daemon..."
- Port detection tries custom credential first, falls back to "public" - Data collection builds ordered credential list, uses first that succeeds - Deduplicates when custom credential IS "public" - Update UI messaging to reflect additive behavior (not either/or) - Add French translations for updated SNMP strings
…mo iframe, remove duplicate org_created, add PostHog retries
…l feedback with waiting state and troubleshooting
…ls through UDP port scanner
- Random 0-2s jitter staggers retries so concurrent 429'd queries don't all retry at the same instant and re-trigger rate limiting
- Gate middleware delays all requests when any 429 is received - Persist rate limit state to sessionStorage across page refreshes - TanStack retries immediately (100ms) so gate controls the timing - Stagger recovery with per-request jitter to prevent stampedes - SSE reconnects respect the global rate limit window
Random jitter (0-2s) allowed multiple requests to pick similar delays and re-stampede. Now each request gets a sequential position (position * 200ms) so they trickle out one at a time. Counter resets when a new rate limit event is detected.
- Replace position counter with lastGateRelease timestamp — each request releases 200ms after the previous, not affected by gatePosition resetting on every 429 - Enforce 3s minimum rate limit wait (Retry-After: 1 is too optimistic for 15+ concurrent requests) - Re-check gate after sleeping to handle extended windows
- 200ms stagger (5 req/s) re-exhausted the rate limit after ~12 requests. 500ms (2 req/s) is conservative enough for any limit. - After sleeping, re-check if a new 429 extended the window while waiting — prevents releasing into an active rate limit.
- Limit concurrent requests to 6 via custom fetch wrapper instead of middleware-based gate that couldn't prevent initial burst stampede - When a 429 arrives, gate is set BEFORE slot is released, so queued requests see the gate and wait instead of all firing at once - Stagger releases (500ms) during recovery to avoid re-triggering - Remove rateLimitGateMiddleware (replaced by rateLimitedFetch)
Multiple acquireSlot calls each scheduled their own setTimeout, all firing at once when the gate expired and defeating the stagger. Now a single drainTimer ensures only one drain is ever pending, so requests release one at a time with 500ms gaps during recovery.
- Add ModalStepper component with numbered circles, connecting lines, and checkmarks for completed steps - GenericModal gains tabStyle prop to switch between tabs and stepper - Create/wizard flows use stepper; edit modals keep normal tabs - Make Next button more prominent with arrow icon and larger size - CreateDaemonModal: Advanced is now a sub-view, not a sequential tab - OsSelector: add afterLabel/afterButtons snippet props for composition - CodeContainer: add maxHeight prop to control scroll behavior - EdgeStyleForm: add horizontal layout with side-by-side cards - GroupEditModal: add InlineInfo explaining service bindings
- Unified readiness signal: delete DaemonStatusPayload, use DaemonStatus everywhere with new ready_for_work field (default true for backcompat). Server only dispatches work when daemon reports ready. - Subscriber no longer dispatches immediately on Started events — poll cycle handles dispatch when daemon is ready. - Report pre-start failures: network, self-report, and docker discovery now initialize a minimal session and call finish_discovery on pre-start errors instead of silently swallowing them. - Fix stall detection: transition_session_to_starting sets session_last_updated; sessions with no timestamps are treated as stalled unless still Pending.
9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.