gitextract_0yr_cv_n/ ├── .editorconfig ├── .gitattributes ├── .github/ │ └── workflows/ │ ├── code-style.yml │ ├── image.yml │ ├── package-quality.yml │ ├── release-image.yml │ └── tests.yml ├── .gitignore ├── Dockerfile ├── LICENSE.md ├── README.md ├── SECURITY.md ├── app/ │ ├── Console/ │ │ └── Kernel.php │ ├── Exceptions/ │ │ └── Handler.php │ ├── Http/ │ │ ├── Controllers/ │ │ │ └── Controller.php │ │ ├── Kernel.php │ │ └── Middleware/ │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ ├── ValidateSignature.php │ │ └── VerifyCsrfToken.php │ ├── Providers/ │ │ ├── AppServiceProvider.php │ │ ├── AuthServiceProvider.php │ │ ├── BroadcastServiceProvider.php │ │ ├── EventServiceProvider.php │ │ ├── FortifyServiceProvider.php │ │ ├── HorizonServiceProvider.php │ │ ├── JetstreamServiceProvider.php │ │ └── RouteServiceProvider.php │ └── View/ │ └── Components/ │ ├── AppLayout.php │ └── GuestLayout.php ├── artisan ├── bootstrap/ │ ├── app.php │ └── cache/ │ └── .gitignore ├── composer.json ├── config/ │ ├── app.php │ ├── auth.php │ ├── broadcasting.php │ ├── cache.php │ ├── cors.php │ ├── database.php │ ├── filesystems.php │ ├── fortify.php │ ├── hashing.php │ ├── horizon.php │ ├── jetstream.php │ ├── livewire.php │ ├── logging.php │ ├── mail.php │ ├── queue.php │ ├── sanctum.php │ ├── services.php │ ├── session.php │ └── view.php ├── database/ │ ├── .gitignore │ ├── migrations/ │ │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php │ │ ├── 2024_02_18_184745_create_sessions_table.php │ │ └── 2024_03_23_092656_create_notifications_table.php │ └── seeders/ │ └── DatabaseSeeder.php ├── docker/ │ ├── crontab │ ├── entrypoint.sh │ ├── horizon-entrypoint.sh │ ├── nginx.conf │ ├── php-fpm.ini │ ├── preload.php │ ├── supervisor/ │ │ └── supervisor.conf │ └── www.conf ├── docker-compose.yml ├── package.json ├── packages/ │ ├── certificates/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── certificates.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2025_04_08_200000_create_create_certificate_monitors_table.php │ │ │ └── 2025_04_12_090000_create_create_certificate_monitor_history_table.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ └── empty-states/ │ │ │ │ └── monitors.blade.php │ │ │ ├── index.blade.php │ │ │ ├── livewire/ │ │ │ │ ├── certificate-monitor-form.blade.php │ │ │ │ └── monitor/ │ │ │ │ └── dashboard.blade.php │ │ │ └── monitor/ │ │ │ └── index.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ └── CheckCertificate.php │ │ │ ├── Commands/ │ │ │ │ ├── CheckCertificateCommand.php │ │ │ │ └── CheckCertificatesCommand.php │ │ │ ├── Http/ │ │ │ │ └── Controllers/ │ │ │ │ └── CertificateMonitorController.php │ │ │ ├── Jobs/ │ │ │ │ └── CheckCertificateJob.php │ │ │ ├── Livewire/ │ │ │ │ ├── CertificateMonitorForm.php │ │ │ │ ├── Forms/ │ │ │ │ │ └── CertificateMonitorForm.php │ │ │ │ ├── Monitor/ │ │ │ │ │ └── Dashboard.php │ │ │ │ └── Tables/ │ │ │ │ ├── CertificateMonitorHistoryTable.php │ │ │ │ └── CertificateMonitorsTable.php │ │ │ ├── Models/ │ │ │ │ ├── CertificateMonitor.php │ │ │ │ └── CertificateMonitorHistory.php │ │ │ ├── Notifications/ │ │ │ │ ├── CertificateChangedNotification.php │ │ │ │ ├── CertificateExpiredNotification.php │ │ │ │ ├── CertificateExpiresInDaysNotification.php │ │ │ │ ├── Conditions/ │ │ │ │ │ └── DaysCondition.php │ │ │ │ └── UnableToResolveCertificateNotification.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ └── TestCase.php │ ├── core/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── core.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ └── navigation.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ └── ResolveDataRetention.php │ │ │ ├── Concerns/ │ │ │ │ └── HasDataRetention.php │ │ │ ├── Contracts/ │ │ │ │ └── ResolvesDataRetention.php │ │ │ ├── Data/ │ │ │ │ └── Data.php │ │ │ ├── Facades/ │ │ │ │ └── Navigation.php │ │ │ ├── Http/ │ │ │ │ └── Middleware/ │ │ │ │ └── TeamMiddleware.php │ │ │ ├── Navigation/ │ │ │ │ ├── Navigation.php │ │ │ │ └── NavigationItem.php │ │ │ ├── Policies/ │ │ │ │ └── AllowAllPolicy.php │ │ │ ├── Scopes/ │ │ │ │ └── TeamScope.php │ │ │ ├── ServiceProvider.php │ │ │ ├── Services/ │ │ │ │ └── TeamService.php │ │ │ ├── Validation/ │ │ │ │ └── CanEnableRule.php │ │ │ └── helpers.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ └── TestCase.php │ ├── crawler/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── crawler.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2024_09_06_213000_create_web_crawlers_table.php │ │ │ ├── 2024_09_06_220000_create_web_crawled_urls_table.php │ │ │ ├── 2025_01_18_220000_crawled_urls_url_length.php │ │ │ ├── 2025_02_01_183000_web_crawlers_enabled_field.php │ │ │ ├── 2025_04_07_200000_web_crawled_urls_url_hash.php │ │ │ ├── 2025_09_28_100000_create_web_crawler_ignored_urls_table.php │ │ │ └── 2025_09_29_190000_web_crawled_urls_ignored_field.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ └── empty-states/ │ │ │ │ └── crawlers.blade.php │ │ │ ├── crawler/ │ │ │ │ └── index.blade.php │ │ │ ├── crawlers.blade.php │ │ │ └── livewire/ │ │ │ ├── crawler/ │ │ │ │ └── dashboard.blade.php │ │ │ └── crawler-form.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ ├── CollectCrawlerStats.php │ │ │ │ ├── CrawlUrl.php │ │ │ │ ├── ImportSitemaps.php │ │ │ │ ├── ProcessCrawlerState.php │ │ │ │ └── StartCrawler.php │ │ │ ├── Commands/ │ │ │ │ ├── CollectCrawlerStatsCommand.php │ │ │ │ ├── CrawlUrlsCommand.php │ │ │ │ ├── ProcessCrawlerStatesCommand.php │ │ │ │ ├── ScheduleCrawlersCommand.php │ │ │ │ └── StartCrawlerCommand.php │ │ │ ├── Enums/ │ │ │ │ ├── State.php │ │ │ │ └── Status.php │ │ │ ├── Events/ │ │ │ │ └── CrawlerFinishedEvent.php │ │ │ ├── Exports/ │ │ │ │ └── IssuesExport.php │ │ │ ├── Http/ │ │ │ │ └── Controllers/ │ │ │ │ └── CrawlerController.php │ │ │ ├── Jobs/ │ │ │ │ ├── CollectCrawlerStatsJob.php │ │ │ │ ├── CrawUrlJob.php │ │ │ │ ├── ImportSitemapsJob.php │ │ │ │ ├── ProcessCrawlerStateJob.php │ │ │ │ └── StartCrawlerJob.php │ │ │ ├── Listeners/ │ │ │ │ └── CrawlerFinishedListener.php │ │ │ ├── Livewire/ │ │ │ │ ├── Crawler/ │ │ │ │ │ └── Dashboard.php │ │ │ │ ├── CrawlerForm.php │ │ │ │ ├── Crawlers.php │ │ │ │ ├── Forms/ │ │ │ │ │ └── CrawlerForm.php │ │ │ │ └── Tables/ │ │ │ │ ├── CrawledUrlsTable.php │ │ │ │ ├── CrawlerTable.php │ │ │ │ └── IssuesTable.php │ │ │ ├── Models/ │ │ │ │ ├── CrawledUrl.php │ │ │ │ ├── Crawler.php │ │ │ │ └── IgnoredUrl.php │ │ │ ├── Notifications/ │ │ │ │ ├── RatelimitedNotification.php │ │ │ │ └── UrlIssuesNotification.php │ │ │ ├── Observers/ │ │ │ │ ├── CrawledUrlObserver.php │ │ │ │ ├── CrawlerObserver.php │ │ │ │ └── IgnoredUrlObserver.php │ │ │ ├── ServiceProvider.php │ │ │ └── Validation/ │ │ │ ├── EqualDomainRule.php │ │ │ └── ValidRegexLines.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ ├── Actions/ │ │ │ ├── CrawUrlTest.php │ │ │ ├── ProcessCrawlerStateTest.php │ │ │ └── StartCrawlerTest.php │ │ └── TestCase.php │ ├── cve/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── cve.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2025_04_18_090000_create_cves_table.php │ │ │ ├── 2025_04_18_100000_create_cve_monitors_table.php │ │ │ ├── 2025_04_18_103000_create_cve_monitor_matches_table.php │ │ │ ├── 2025_10_04_135717_add_fulltext_index_to_cves_description.php │ │ │ └── 2025_10_04_135739_add_unique_index_to_cve_monitor_matches.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ └── empty-states/ │ │ │ │ └── monitors.blade.php │ │ │ ├── cve.blade.php │ │ │ ├── index.blade.php │ │ │ ├── livewire/ │ │ │ │ └── cve-monitor-form.blade.php │ │ │ └── monitor.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ ├── ImportAllCves.php │ │ │ │ ├── ImportCve.php │ │ │ │ ├── ImportCves.php │ │ │ │ ├── MatchCve.php │ │ │ │ └── MatchExistingCves.php │ │ │ ├── Commands/ │ │ │ │ ├── ImportAllCvesCommand.php │ │ │ │ ├── ImportCvesCommand.php │ │ │ │ ├── MatchCveCommand.php │ │ │ │ └── MatchExistingCvesCommand.php │ │ │ ├── Http/ │ │ │ │ └── Controllers/ │ │ │ │ ├── CveController.php │ │ │ │ └── CveMonitorController.php │ │ │ ├── Jobs/ │ │ │ │ ├── ImportAllCvesJob.php │ │ │ │ ├── ImportCvesJob.php │ │ │ │ ├── MatchCveJob.php │ │ │ │ ├── MatchCveMonitorsJob.php │ │ │ │ └── MatchExistingCvesJob.php │ │ │ ├── Livewire/ │ │ │ │ ├── CveMonitorForm.php │ │ │ │ ├── Forms/ │ │ │ │ │ └── CveMonitorForm.php │ │ │ │ └── Tables/ │ │ │ │ ├── CveMonitorMatchesTable.php │ │ │ │ └── CveMonitorTable.php │ │ │ ├── Models/ │ │ │ │ ├── Cve.php │ │ │ │ ├── CveMonitor.php │ │ │ │ └── CveMonitorMatch.php │ │ │ ├── Notifications/ │ │ │ │ ├── Conditions/ │ │ │ │ │ ├── KeywordCondition.php │ │ │ │ │ └── ScoreCondition.php │ │ │ │ └── CveMatchedNotification.php │ │ │ ├── Observers/ │ │ │ │ └── CveMonitorObserver.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ ├── Actions/ │ │ │ ├── ImportAllCvesTest.php │ │ │ ├── ImportCveTest.php │ │ │ ├── ImportCvesTest.php │ │ │ └── MatchCveTest.php │ │ ├── Models/ │ │ │ ├── CveMonitorMatchTest.php │ │ │ ├── CveMonitorTest.php │ │ │ └── CveTest.php │ │ ├── Notifications/ │ │ │ └── CveMatchedNotificationTest.php │ │ └── TestCase.php │ ├── dns/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── dns.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2024_07_16_073000_create_dns_monitors_table.php │ │ │ ├── 2024_07_16_073500_create_dns_monitor_history_table.php │ │ │ ├── 2025_01_23_220000_dns_monitor_value_field_size.php │ │ │ ├── 2025_02_01_180000_dns_monitor_enabled_field.php │ │ │ └── 2025_03_22_090000_dns_monitor_value_field_nullable.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ └── empty-states/ │ │ │ │ └── monitors.blade.php │ │ │ └── livewire/ │ │ │ ├── dns-monitor-form.blade.php │ │ │ ├── import.blade.php │ │ │ ├── monitor/ │ │ │ │ └── dashboard.blade.php │ │ │ ├── monitor-history.blade.php │ │ │ └── monitors.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ ├── CheckDnsRecord.php │ │ │ │ ├── ResolveGeoIp.php │ │ │ │ └── ResolveRecord.php │ │ │ ├── Client/ │ │ │ │ └── DnsClient.php │ │ │ ├── Commands/ │ │ │ │ ├── CheckAllDnsRecordsCommand.php │ │ │ │ ├── CheckDnsRecordCommand.php │ │ │ │ └── ResolveGeoIpCommand.php │ │ │ ├── Enums/ │ │ │ │ └── Type.php │ │ │ ├── Http/ │ │ │ │ └── Controllers/ │ │ │ │ └── DnsMonitorController.php │ │ │ ├── Jobs/ │ │ │ │ ├── CheckDnsRecordJob.php │ │ │ │ └── ResolveGeoIpJob.php │ │ │ ├── Livewire/ │ │ │ │ ├── DnsImport.php │ │ │ │ ├── DnsMonitorForm.php │ │ │ │ ├── DnsMonitorHistory.php │ │ │ │ ├── DnsMonitors.php │ │ │ │ ├── Forms/ │ │ │ │ │ └── DnsMonitorForm.php │ │ │ │ ├── Monitor/ │ │ │ │ │ └── Dashboard.php │ │ │ │ └── Tables/ │ │ │ │ ├── DnsMonitorHistoryTable.php │ │ │ │ └── DnsMonitorTable.php │ │ │ ├── Models/ │ │ │ │ ├── DnsMonitor.php │ │ │ │ └── DnsMonitorHistory.php │ │ │ ├── Notifications/ │ │ │ │ ├── Conditions/ │ │ │ │ │ └── RecordTypeCondition.php │ │ │ │ ├── RecordChangedNotification.php │ │ │ │ └── RecordNotResolvedNotification.php │ │ │ ├── Observers/ │ │ │ │ └── GeoipObserver.php │ │ │ ├── RecordParsers/ │ │ │ │ ├── A.php │ │ │ │ ├── AAAA.php │ │ │ │ ├── CAA.php │ │ │ │ ├── CNAME.php │ │ │ │ ├── MX.php │ │ │ │ ├── NS.php │ │ │ │ ├── RecordParser.php │ │ │ │ ├── SOA.php │ │ │ │ └── TXT.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ ├── Actions/ │ │ │ └── CheckDnsRecordTest.php │ │ └── TestCase.php │ ├── frontend/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ ├── card.blade.php │ │ │ │ ├── empty-state.blade.php │ │ │ │ ├── mdash.blade.php │ │ │ │ ├── modal/ │ │ │ │ │ ├── body.blade.php │ │ │ │ │ ├── footer.blade.php │ │ │ │ │ └── header.blade.php │ │ │ │ ├── modal.blade.php │ │ │ │ ├── page-header/ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ └── index.blade.php │ │ │ │ │ └── mobile-actions/ │ │ │ │ │ └── index.blade.php │ │ │ │ ├── stats-card.blade.php │ │ │ │ └── tabs/ │ │ │ │ ├── container.blade.php │ │ │ │ ├── navigation.blade.php │ │ │ │ ├── panel.blade.php │ │ │ │ └── panels.blade.php │ │ │ ├── integrations/ │ │ │ │ └── table/ │ │ │ │ ├── actions-column.blade.php │ │ │ │ ├── chart-column.blade.php │ │ │ │ ├── geoip-column.blade.php │ │ │ │ ├── hover-column.blade.php │ │ │ │ ├── link-column.blade.php │ │ │ │ └── status-column.blade.php │ │ │ └── livewire/ │ │ │ └── charts/ │ │ │ ├── base-chart-placeholder.blade.php │ │ │ └── base-chart.blade.php │ │ ├── src/ │ │ │ ├── Concerns/ │ │ │ │ └── DisplaysAlerts.php │ │ │ ├── Enums/ │ │ │ │ └── AlertType.php │ │ │ ├── Http/ │ │ │ │ └── Livewire/ │ │ │ │ └── BaseChart.php │ │ │ ├── Integrations/ │ │ │ │ └── Table/ │ │ │ │ ├── Actions/ │ │ │ │ │ └── InlineAction.php │ │ │ │ ├── ActionsColumn.php │ │ │ │ ├── BaseTable.php │ │ │ │ ├── ChartColumn.php │ │ │ │ ├── Concerns/ │ │ │ │ │ └── HasInlineActions.php │ │ │ │ ├── DateColumn.php │ │ │ │ ├── Enums/ │ │ │ │ │ └── Status.php │ │ │ │ ├── GeoIpColumn.php │ │ │ │ ├── HoverColumn.php │ │ │ │ ├── LinkColumn.php │ │ │ │ └── StatusColumn.php │ │ │ ├── ServiceProvider.php │ │ │ ├── Traits/ │ │ │ │ └── CanBeInline.php │ │ │ └── Validation/ │ │ │ ├── CleanDomainValidator.php │ │ │ ├── CountryCode.php │ │ │ ├── CronExpression.php │ │ │ └── Fqdn.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ └── TestCase.php │ ├── healthchecks/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── healthchecks.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2025_11_06_200000_create_healthchecks_table.php │ │ │ ├── 2025_11_06_201000_create_healthcheck_results_table.php │ │ │ ├── 2025_11_06_202000_create_healthcheck_metrics_table.php │ │ │ └── 2025_11_23_150400_update_healthcheck_results_columns.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ └── empty-states/ │ │ │ │ └── healthchecks.blade.php │ │ │ ├── healthcheck/ │ │ │ │ └── view.blade.php │ │ │ ├── livewire/ │ │ │ │ ├── charts/ │ │ │ │ │ └── metric-chart.blade.php │ │ │ │ ├── healthcheck-dashboard.blade.php │ │ │ │ ├── healthcheck-form.blade.php │ │ │ │ ├── healthcheck-setup.blade.php │ │ │ │ ├── healthcheck-token-editor.blade.php │ │ │ │ └── healthchecks.blade.php │ │ │ └── platforms/ │ │ │ ├── drupal.blade.php │ │ │ ├── endpoint.blade.php │ │ │ ├── joomla.blade.php │ │ │ ├── laravel.blade.php │ │ │ ├── magento.blade.php │ │ │ ├── statamic.blade.php │ │ │ └── wordpress.blade.php │ │ ├── routes/ │ │ │ ├── api.php │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ ├── AggregateMetrics.php │ │ │ │ ├── CheckHealth.php │ │ │ │ ├── CheckMetric.php │ │ │ │ └── CheckResult.php │ │ │ ├── Checks/ │ │ │ │ ├── Checker.php │ │ │ │ ├── Endpoint.php │ │ │ │ └── Module.php │ │ │ ├── Commands/ │ │ │ │ ├── AggregateMetricsCommand.php │ │ │ │ ├── CheckHealthcheckCommand.php │ │ │ │ └── ScheduleHealthchecksCommand.php │ │ │ ├── Enums/ │ │ │ │ ├── Status.php │ │ │ │ └── Type.php │ │ │ ├── Http/ │ │ │ │ ├── Controllers/ │ │ │ │ │ └── HealthcheckController.php │ │ │ │ └── Livewire/ │ │ │ │ └── Charts/ │ │ │ │ └── MetricChart.php │ │ │ ├── Jobs/ │ │ │ │ ├── AggregateMetricsJob.php │ │ │ │ ├── CheckHealthcheckJob.php │ │ │ │ ├── CheckMetricJob.php │ │ │ │ └── CheckResultJob.php │ │ │ ├── Livewire/ │ │ │ │ ├── Forms/ │ │ │ │ │ └── HealthcheckForm.php │ │ │ │ ├── HealthcheckDashboard.php │ │ │ │ ├── HealthcheckForm.php │ │ │ │ ├── HealthcheckSetup.php │ │ │ │ ├── HealthcheckTokenEditor.php │ │ │ │ ├── Healthchecks.php │ │ │ │ └── Tables/ │ │ │ │ ├── HealthcheckTable.php │ │ │ │ └── ResultTable.php │ │ │ ├── Models/ │ │ │ │ ├── Healthcheck.php │ │ │ │ ├── Metric.php │ │ │ │ └── Result.php │ │ │ ├── Notifications/ │ │ │ │ ├── Conditions/ │ │ │ │ │ ├── CheckKeyCondition.php │ │ │ │ │ ├── DiskFullInCondition.php │ │ │ │ │ ├── MetricIncreaseNewValueCondition.php │ │ │ │ │ ├── MetricIncreasePercentCondition.php │ │ │ │ │ ├── MetricIncreaseTimeframeCondition.php │ │ │ │ │ ├── MetricKeyCondition.php │ │ │ │ │ ├── MetricUnitCondition.php │ │ │ │ │ ├── MetricValueCondition.php │ │ │ │ │ └── StatusCondition.php │ │ │ │ ├── DiskUsageNotification.php │ │ │ │ ├── HealthCheckFailedNotification.php │ │ │ │ ├── MetricIncreasingNotification.php │ │ │ │ ├── MetricNotification.php │ │ │ │ └── MetricSpikeNotification.php │ │ │ ├── Observers/ │ │ │ │ └── HealthcheckObserver.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ ├── Actions/ │ │ │ ├── AggregateMetricsTest.php │ │ │ ├── CheckMetricTest.php │ │ │ └── CheckResultTest.php │ │ └── TestCase.php │ ├── lighthouse/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── lighthouse.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2024_05_11_105500_create_lighthouse_sites_table.php │ │ │ ├── 2024_05_11_120000_create_lighthouse_results_table.php │ │ │ ├── 2024_05_17_073000_lighthouse_results_aggregated_field_table.php │ │ │ ├── 2024_06_22_160000_create_lighthouse_result_audits_table.php │ │ │ ├── 2024_07_13_200000_lighthouse_site_rename_table.php │ │ │ ├── 2025_02_01_173000_lighthouse_monitors_enabled_field.php │ │ │ ├── 2025_02_03_190000_lighthouse_monitors_next_run_field.php │ │ │ ├── 2025_02_07_210000_lighthouse_monitors_batch_fields.php │ │ │ └── 2025_03_19_200000_lighthouse_monitors_run_started_at_field.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ ├── average-difference.blade.php │ │ │ │ └── empty-states/ │ │ │ │ └── monitors.blade.php │ │ │ ├── lighthouse/ │ │ │ │ └── index.blade.php │ │ │ ├── livewire/ │ │ │ │ ├── lighthouse-site-form.blade.php │ │ │ │ ├── lighthouse-sites.blade.php │ │ │ │ └── monitor/ │ │ │ │ └── dashboard.blade.php │ │ │ └── result/ │ │ │ └── index.blade.php │ │ ├── routes/ │ │ │ ├── api.php │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ ├── AggregateLighthouseBatch.php │ │ │ │ ├── AggregateResults.php │ │ │ │ ├── CalculateTimeDifference.php │ │ │ │ ├── CheckLighthouseResult.php │ │ │ │ ├── CheckLighthouseResultAudit.php │ │ │ │ ├── ProcessLighthouseResult.php │ │ │ │ └── RunLighthouse.php │ │ │ ├── Commands/ │ │ │ │ ├── AggregateLighthouseBatchCommand.php │ │ │ │ ├── AggregateLighthouseResultsCommand.php │ │ │ │ ├── CheckLighthouseCommand.php │ │ │ │ ├── LighthouseCommand.php │ │ │ │ └── ScheduleLighthouseCommand.php │ │ │ ├── Data/ │ │ │ │ └── CategoryResultDifferenceData.php │ │ │ ├── Http/ │ │ │ │ └── Controllers/ │ │ │ │ ├── LighthouseCallbackController.php │ │ │ │ ├── LighthouseMonitorController.php │ │ │ │ └── LighthouseResultController.php │ │ │ ├── Jobs/ │ │ │ │ ├── AggregateLighthouseBatchJob.php │ │ │ │ ├── AggregateLighthouseResultsJob.php │ │ │ │ ├── CheckLighthouseResultJob.php │ │ │ │ └── RunLighthouseJob.php │ │ │ ├── Livewire/ │ │ │ │ ├── Charts/ │ │ │ │ │ ├── LighthouseCategoriesChart.php │ │ │ │ │ └── NumericLighthouseChart.php │ │ │ │ ├── Forms/ │ │ │ │ │ └── LighthouseSiteForm.php │ │ │ │ ├── LighthouseSiteForm.php │ │ │ │ ├── LighthouseSites.php │ │ │ │ ├── Monitor/ │ │ │ │ │ └── Dashboard.php │ │ │ │ └── Tables/ │ │ │ │ ├── LighthouseMonitorsTable.php │ │ │ │ ├── LighthouseResultAuditsTable.php │ │ │ │ └── LighthouseResultsTable.php │ │ │ ├── Models/ │ │ │ │ ├── LighthouseMonitor.php │ │ │ │ ├── LighthouseResult.php │ │ │ │ └── LighthouseResultAudit.php │ │ │ ├── Notifications/ │ │ │ │ ├── CategoryScoreChangedNotification.php │ │ │ │ ├── Conditions/ │ │ │ │ │ ├── Audit/ │ │ │ │ │ │ ├── AuditChangesCondition.php │ │ │ │ │ │ ├── AuditDecreasesCondition.php │ │ │ │ │ │ ├── AuditIncreasesCondition.php │ │ │ │ │ │ ├── AuditPercentCondition.php │ │ │ │ │ │ ├── AuditTypeCondition.php │ │ │ │ │ │ └── AuditValueCondition.php │ │ │ │ │ └── Category/ │ │ │ │ │ ├── AccessibilityPercentScoreCondition.php │ │ │ │ │ ├── AccessibilityScoreDecreasesCondition.php │ │ │ │ │ ├── AccessibilityScoreIncreasesCondition.php │ │ │ │ │ ├── AccessibilityScoreValueCondition.php │ │ │ │ │ ├── AverageScoreChangesCondition.php │ │ │ │ │ ├── AverageScoreCondition.php │ │ │ │ │ ├── AverageScoreDecreasesCondition.php │ │ │ │ │ ├── AverageScoreIncreasesCondition.php │ │ │ │ │ ├── AverageScoreValueCondition.php │ │ │ │ │ ├── BestPracticesPercentScoreCondition.php │ │ │ │ │ ├── BestPracticesScoreDecreasesCondition.php │ │ │ │ │ ├── BestPracticesScoreIncreasesCondition.php │ │ │ │ │ ├── BestPracticesScoreValueCondition.php │ │ │ │ │ ├── PerformancePercentScoreCondition.php │ │ │ │ │ ├── PerformanceScoreDecreasesCondition.php │ │ │ │ │ ├── PerformanceScoreIncreasesCondition.php │ │ │ │ │ ├── PerformanceScoreValueCondition.php │ │ │ │ │ ├── ScoreCondition.php │ │ │ │ │ ├── SeoPercentPercentScoreCondition.php │ │ │ │ │ ├── SeoScoreDecreasesCondition.php │ │ │ │ │ ├── SeoScoreIncreasesCondition.php │ │ │ │ │ └── SeoScoreValueCondition.php │ │ │ │ └── NumericAuditChangedNotification.php │ │ │ ├── Observers/ │ │ │ │ └── LighthouseMonitorObserver.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ ├── Actions/ │ │ │ ├── AggregateResultsTest.php │ │ │ ├── CalculateTimeDifferenceTest.php │ │ │ ├── CheckLighthouseResultAuditTest.php │ │ │ ├── CheckLighthouseResultTest.php │ │ │ └── RunLighthouseTest.php │ │ ├── Data/ │ │ │ └── CategoryResultDifferenceDataTest.php │ │ ├── Notifications/ │ │ │ └── Conditions/ │ │ │ ├── Audit/ │ │ │ │ ├── AuditChangeConditionsTest.php │ │ │ │ └── AuditValueConditionTest.php │ │ │ └── Category/ │ │ │ ├── AverageScoreChangeConditionsTest.php │ │ │ ├── AverageScoreValueConditionTest.php │ │ │ └── PerformanceScoreValueConditionTest.php │ │ └── TestCase.php │ ├── notifications/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── notifications.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2024_02_25_110000_create_notification_triggers_table.php │ │ │ ├── 2024_02_25_111000_create_notification_channels_table.php │ │ │ ├── 2024_02_25_111000_create_notification_triggers_channels_table.php │ │ │ ├── 2024_02_25_112000_create_notification_history_table.php │ │ │ ├── 2024_04_04_193000_notification_trigger_all_channels_field.php │ │ │ ├── 2024_04_12_193000_notification_enabled_field.php │ │ │ ├── 2024_09_22_113000_notification_cooldown_field.php │ │ │ ├── 2026_01_02_150000_add_name_to_notification_channels_table.php │ │ │ └── 2026_01_02_151500_backfill_notification_channel_names.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── channels.blade.php │ │ │ ├── components/ │ │ │ │ ├── condition-builder/ │ │ │ │ │ ├── condition.blade.php │ │ │ │ │ ├── group.blade.php │ │ │ │ │ └── type/ │ │ │ │ │ ├── number.blade.php │ │ │ │ │ ├── select.blade.php │ │ │ │ │ ├── static.blade.php │ │ │ │ │ └── text.blade.php │ │ │ │ └── empty-states/ │ │ │ │ └── channels.blade.php │ │ │ ├── history.blade.php │ │ │ ├── livewire/ │ │ │ │ ├── channels/ │ │ │ │ │ ├── configuration/ │ │ │ │ │ │ ├── discord.blade.php │ │ │ │ │ │ ├── google-chat.blade.php │ │ │ │ │ │ ├── mail.blade.php │ │ │ │ │ │ ├── microsoft-teams.blade.php │ │ │ │ │ │ ├── ntfy.blade.php │ │ │ │ │ │ ├── slack.blade.php │ │ │ │ │ │ ├── telegram.blade.php │ │ │ │ │ │ └── webhook.blade.php │ │ │ │ │ └── form.blade.php │ │ │ │ └── notifications/ │ │ │ │ ├── condition-builder.blade.php │ │ │ │ └── form.blade.php │ │ │ ├── mails/ │ │ │ │ └── notification.blade.php │ │ │ └── notifications.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ ├── CheckBurst.php │ │ │ │ ├── CheckCooldown.php │ │ │ │ └── CreateNotifications.php │ │ │ ├── Channels/ │ │ │ │ ├── DiscordChannel.php │ │ │ │ ├── GoogleChatChannel.php │ │ │ │ ├── MailChannel.php │ │ │ │ ├── MicrosoftTeamsChannel.php │ │ │ │ ├── NotificationChannel.php │ │ │ │ ├── NtfyChannel.php │ │ │ │ ├── SlackChannel.php │ │ │ │ ├── TelegramChannel.php │ │ │ │ └── WebhookChannel.php │ │ │ ├── Commands/ │ │ │ │ ├── CreateNotificationsCommand.php │ │ │ │ ├── RenameConditionClassesCommand.php │ │ │ │ └── TestNotificationCommand.php │ │ │ ├── Concerns/ │ │ │ │ └── NotificationFake.php │ │ │ ├── Conditions/ │ │ │ │ ├── Condition.php │ │ │ │ ├── ConditionEngine.php │ │ │ │ ├── FalseCondition.php │ │ │ │ ├── SelectCondition.php │ │ │ │ ├── StaticCondition.php │ │ │ │ └── TrueCondition.php │ │ │ ├── Contracts/ │ │ │ │ └── HasSite.php │ │ │ ├── Enums/ │ │ │ │ ├── ConditionType.php │ │ │ │ └── Level.php │ │ │ ├── Facades/ │ │ │ │ └── NotificationRegistry.php │ │ │ ├── Http/ │ │ │ │ ├── Controllers/ │ │ │ │ │ └── ChannelController.php │ │ │ │ └── Livewire/ │ │ │ │ ├── ChannelForm.php │ │ │ │ ├── Channels/ │ │ │ │ │ └── Configuration/ │ │ │ │ │ ├── ChannelConfiguration.php │ │ │ │ │ ├── Discord.php │ │ │ │ │ ├── GoogleChat.php │ │ │ │ │ ├── Mail.php │ │ │ │ │ ├── MicrosoftTeams.php │ │ │ │ │ ├── Ntfy.php │ │ │ │ │ ├── Slack.php │ │ │ │ │ ├── Telegram.php │ │ │ │ │ └── Webhook.php │ │ │ │ ├── Forms/ │ │ │ │ │ ├── CreateChannelForm.php │ │ │ │ │ └── CreateNotificationForm.php │ │ │ │ ├── NotificationForm.php │ │ │ │ ├── Notifications/ │ │ │ │ │ └── Conditions/ │ │ │ │ │ └── ConditionBuilder.php │ │ │ │ └── Tables/ │ │ │ │ ├── ChannelTable.php │ │ │ │ ├── HistoryTable.php │ │ │ │ └── NotificationTable.php │ │ │ ├── Jobs/ │ │ │ │ ├── CreateNotificationsJob.php │ │ │ │ └── SendNotificationJob.php │ │ │ ├── Mail/ │ │ │ │ └── NotificationMail.php │ │ │ ├── Models/ │ │ │ │ ├── Channel.php │ │ │ │ ├── History.php │ │ │ │ └── Trigger.php │ │ │ ├── Notifications/ │ │ │ │ ├── Notification.php │ │ │ │ ├── NotificationRegistry.php │ │ │ │ └── TestNotification.php │ │ │ ├── Observers/ │ │ │ │ ├── ChannelObserver.php │ │ │ │ └── TriggerObserver.php │ │ │ ├── Scopes/ │ │ │ │ └── HistoryTeamScope.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ ├── Channels/ │ │ │ ├── NtfyChannelTest.php │ │ │ └── TelegramChannelTest.php │ │ ├── Conditions/ │ │ │ └── ConditionEngineTest.php │ │ ├── Fakes/ │ │ │ ├── Conditions/ │ │ │ │ ├── FalseCondition.php │ │ │ │ └── TrueCondition.php │ │ │ ├── FakeChannel.php │ │ │ └── FakeNotification.php │ │ ├── Models/ │ │ │ └── ChannelTest.php │ │ ├── Notifications/ │ │ │ ├── NotificationRegistryTest.php │ │ │ └── NotificationTest.php │ │ └── TestCase.php │ ├── onboarding/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── onboarding.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ └── 2024_09_29_210000_create_team_onboarding_step_table.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ └── views/ │ │ │ ├── complete.blade.php │ │ │ ├── import-domains.blade.php │ │ │ └── notification-channel.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ └── ShouldOnboard.php │ │ │ ├── Http/ │ │ │ │ └── Middleware/ │ │ │ │ ├── OnlyOnboarding.php │ │ │ │ └── RedirectToOnboard.php │ │ │ ├── Livewire/ │ │ │ │ ├── Complete.php │ │ │ │ ├── ImportDomains.php │ │ │ │ └── NotificationChannel.php │ │ │ ├── Models/ │ │ │ │ └── OnboardingStep.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ └── TestCase.php │ ├── settings/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── settings.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ └── views/ │ │ │ ├── index.blade.php │ │ │ └── tabs/ │ │ │ ├── profile.blade.php │ │ │ ├── security.blade.php │ │ │ └── team.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Livewire/ │ │ │ │ ├── Forms/ │ │ │ │ │ ├── ProfileForm.php │ │ │ │ │ └── UpdatePasswordForm.php │ │ │ │ ├── Settings.php │ │ │ │ └── Tabs/ │ │ │ │ ├── Profile.php │ │ │ │ ├── Security.php │ │ │ │ └── Team.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ └── TestCase.php │ ├── sites/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── sites.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ └── 2024_02_20_170000_create_sites_table.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ ├── empty-states/ │ │ │ │ │ └── no-monitors.blade.php │ │ │ │ └── site-card.blade.php │ │ │ ├── livewire/ │ │ │ │ ├── form.blade.php │ │ │ │ ├── import.blade.php │ │ │ │ ├── sites.blade.php │ │ │ │ └── tabs/ │ │ │ │ ├── certificate-monitor.blade.php │ │ │ │ ├── crawler.blade.php │ │ │ │ ├── dns-monitors.blade.php │ │ │ │ ├── healthcheck-monitor.blade.php │ │ │ │ ├── lighthouse-monitor.blade.php │ │ │ │ └── uptime-monitor.blade.php │ │ │ └── sites/ │ │ │ └── view.blade.php │ │ ├── routes/ │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ └── ImportSite.php │ │ │ ├── Conditions/ │ │ │ │ └── SiteCondition.php │ │ │ ├── Http/ │ │ │ │ ├── Controllers/ │ │ │ │ │ └── SiteController.php │ │ │ │ └── Livewire/ │ │ │ │ ├── Forms/ │ │ │ │ │ └── CreateSiteForm.php │ │ │ │ ├── ImportSites.php │ │ │ │ ├── SiteForm.php │ │ │ │ ├── Sites.php │ │ │ │ ├── Tables/ │ │ │ │ │ └── SiteTable.php │ │ │ │ └── Tabs/ │ │ │ │ ├── CertificateMonitor.php │ │ │ │ ├── Crawler.php │ │ │ │ ├── DnsMonitors.php │ │ │ │ ├── HealthcheckMonitor.php │ │ │ │ ├── LighthouseMonitors.php │ │ │ │ └── UptimeMonitor.php │ │ │ ├── Jobs/ │ │ │ │ └── ImportSiteJob.php │ │ │ ├── Models/ │ │ │ │ └── Site.php │ │ │ ├── Observers/ │ │ │ │ └── SiteObserver.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ └── TestCase.php │ ├── uptime/ │ │ ├── .gitignore │ │ ├── composer.json │ │ ├── config/ │ │ │ └── uptime.php │ │ ├── database/ │ │ │ ├── factories/ │ │ │ │ └── MonitorFactory.php │ │ │ └── migrations/ │ │ │ ├── 2024_02_21_190000_create_uptime_monitors_table.php │ │ │ ├── 2024_02_21_190100_create_uptime_results_table.php │ │ │ ├── 2024_02_21_190200_create_uptime_downtimes_table.php │ │ │ ├── 2024_02_22_073000_create_uptime_results_aggregates_table.php │ │ │ ├── 2024_05_21_170200_uptime_downtimes_data_field.php │ │ │ ├── 2025_02_01_170000_uptime_monitors_enabled_field.php │ │ │ ├── 2025_05_06_190000_uptime_monitors_schedule_fields.php │ │ │ ├── 2025_10_05_080000_create_uptime_outposts_table.php │ │ │ ├── 2025_10_06_181706_add_country_to_uptime_results_tables.php │ │ │ ├── 2025_10_06_183423_add_location_to_uptime_monitors_table.php │ │ │ ├── 2025_10_06_184619_add_country_to_uptime_monitors_table.php │ │ │ ├── 2025_10_07_180857_add_geoip_fetched_at_to_uptime_monitors_table.php │ │ │ ├── 2025_10_08_100000_add_closest_outpost_id_to_uptime_monitors_table.php │ │ │ ├── 2025_10_19_152447_add_unavailable_at_to_uptime_outposts_table.php │ │ │ ├── 2025_12_23_192903_add_geoip_automatic_to_uptime_monitors_table.php │ │ │ ├── 2025_12_23_193500_add_geoip_automatic_to_uptime_outposts_table.php │ │ │ └── 2025_12_27_142900_update_ping_monitor_types.php │ │ ├── phpstan.neon │ │ ├── phpunit.xml │ │ ├── resources/ │ │ │ ├── navigation.php │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ └── empty-states/ │ │ │ │ └── monitors.blade.php │ │ │ ├── livewire/ │ │ │ │ ├── charts/ │ │ │ │ │ ├── column-latency-chart.blade.php │ │ │ │ │ └── latency-chart.blade.php │ │ │ │ ├── monitor/ │ │ │ │ │ ├── dashboard.blade.php │ │ │ │ │ └── form.blade.php │ │ │ │ └── uptime-monitors.blade.php │ │ │ └── monitor/ │ │ │ └── view.blade.php │ │ ├── routes/ │ │ │ ├── api.php │ │ │ └── web.php │ │ ├── src/ │ │ │ ├── Actions/ │ │ │ │ ├── AggregateResults.php │ │ │ │ ├── CalculateUptimePercentage.php │ │ │ │ ├── CheckLatency.php │ │ │ │ ├── CheckUptime.php │ │ │ │ ├── FetchGeolocation.php │ │ │ │ └── Outpost/ │ │ │ │ ├── DetermineOutpost.php │ │ │ │ ├── GenerateOutpostCertificate.php │ │ │ │ ├── GenerateRootCertificate.php │ │ │ │ └── RegisterOutpost.php │ │ │ ├── Commands/ │ │ │ │ ├── AggregateResultsCommand.php │ │ │ │ ├── CheckLatencyCommand.php │ │ │ │ ├── CheckUnavailableOutpostsCommand.php │ │ │ │ ├── CheckUptimeCommand.php │ │ │ │ ├── GenerateRootCaCommand.php │ │ │ │ └── ScheduleUptimeChecksCommand.php │ │ │ ├── Data/ │ │ │ │ └── UptimeResult.php │ │ │ ├── Enums/ │ │ │ │ ├── OutpostStatus.php │ │ │ │ ├── State.php │ │ │ │ └── Type.php │ │ │ ├── Events/ │ │ │ │ ├── DowntimeEndEvent.php │ │ │ │ ├── DowntimeStartEvent.php │ │ │ │ └── UptimeCheckedEvent.php │ │ │ ├── Http/ │ │ │ │ ├── Controllers/ │ │ │ │ │ ├── Api/ │ │ │ │ │ │ ├── OutpostController.php │ │ │ │ │ │ └── OutpostIpController.php │ │ │ │ │ └── UptimeMonitorController.php │ │ │ │ ├── Livewire/ │ │ │ │ │ ├── Charts/ │ │ │ │ │ │ ├── ColumnLatencyChart.php │ │ │ │ │ │ └── LatencyChart.php │ │ │ │ │ ├── Forms/ │ │ │ │ │ │ └── CreateUptimeMonitorForm.php │ │ │ │ │ ├── Monitor/ │ │ │ │ │ │ └── Dashboard.php │ │ │ │ │ ├── Tables/ │ │ │ │ │ │ ├── DowntimeTable.php │ │ │ │ │ │ └── MonitorTable.php │ │ │ │ │ ├── UptimeMonitorForm.php │ │ │ │ │ └── UptimeMonitors.php │ │ │ │ └── Middleware/ │ │ │ │ ├── ExternalOutpostMiddleware.php │ │ │ │ └── OutpostAuthMiddleware.php │ │ │ ├── Jobs/ │ │ │ │ ├── AggregateResultsJob.php │ │ │ │ ├── CheckUnavailableOutpostJob.php │ │ │ │ ├── CheckUptimeJob.php │ │ │ │ └── UpdateMonitorLocationJob.php │ │ │ ├── Listeners/ │ │ │ │ ├── CheckLatencyListener.php │ │ │ │ ├── DowntimeEndNotificationListener.php │ │ │ │ └── DowntimeStartNotificationListener.php │ │ │ ├── Models/ │ │ │ │ ├── Downtime.php │ │ │ │ ├── Monitor.php │ │ │ │ ├── Outpost.php │ │ │ │ ├── Result.php │ │ │ │ └── ResultAggregate.php │ │ │ ├── Notifications/ │ │ │ │ ├── Conditions/ │ │ │ │ │ ├── ClosestCountryCondition.php │ │ │ │ │ ├── CountryCondition.php │ │ │ │ │ ├── LatencyMsCondition.php │ │ │ │ │ └── LatencyPercentCondition.php │ │ │ │ ├── DowntimeEndNotification.php │ │ │ │ ├── DowntimeStartNotification.php │ │ │ │ ├── LatencyChangedNotification.php │ │ │ │ └── LatencyPeakNotification.php │ │ │ ├── Observers/ │ │ │ │ ├── MonitorObserver.php │ │ │ │ └── OutpostObserver.php │ │ │ └── ServiceProvider.php │ │ ├── testbench.yaml │ │ └── tests/ │ │ ├── Fakes/ │ │ │ └── HandlerStatsResponse.php │ │ ├── Feature/ │ │ │ ├── AggregateResultsTest.php │ │ │ ├── DowntimeTest.php │ │ │ └── UptimeTest.php │ │ ├── TestCase.php │ │ └── Unit/ │ │ ├── CalculateUptimePercentageTest.php │ │ ├── DetermineOutpostPerformanceTest.php │ │ ├── DetermineOutpostTest.php │ │ ├── Enums/ │ │ │ └── TypeTest.php │ │ ├── ExternalOutpostMiddlewareTest.php │ │ ├── FetchGeolocationTest.php │ │ ├── GenerateOutpostCertificateTest.php │ │ ├── OutpostAuthMiddlewareTest.php │ │ └── RegisterOutpostTest.php │ └── users/ │ ├── .gitignore │ ├── composer.json │ ├── config/ │ │ └── users.php │ ├── database/ │ │ ├── factories/ │ │ │ ├── TeamFactory.php │ │ │ └── UserFactory.php │ │ └── migrations/ │ │ ├── 2014_10_12_000000_create_users_table.php │ │ ├── 2014_10_12_100000_create_password_reset_tokens_table.php │ │ ├── 2014_10_12_200000_add_two_factor_columns_to_users_table.php │ │ ├── 2020_05_21_100000_create_teams_table.php │ │ ├── 2020_05_21_200000_create_team_user_table.php │ │ ├── 2020_05_21_300000_create_team_invitations_table.php │ │ └── 2024_05_18_100000_team_timezone_field.php │ ├── phpstan.neon │ ├── phpunit.xml │ ├── routes/ │ │ ├── auth.php │ │ └── web.php │ ├── src/ │ │ ├── Actions/ │ │ │ ├── Fortify/ │ │ │ │ ├── CreateNewUser.php │ │ │ │ ├── PasswordValidationRules.php │ │ │ │ ├── ResetUserPassword.php │ │ │ │ ├── UpdateUserPassword.php │ │ │ │ └── UpdateUserProfileInformation.php │ │ │ └── Jetstream/ │ │ │ ├── AddTeamMember.php │ │ │ ├── CreateTeam.php │ │ │ ├── DeleteTeam.php │ │ │ ├── DeleteUser.php │ │ │ ├── InviteTeamMember.php │ │ │ ├── RemoveTeamMember.php │ │ │ └── UpdateTeamName.php │ │ ├── Http/ │ │ │ ├── Controllers/ │ │ │ │ └── SocialiteController.php │ │ │ └── Middleware/ │ │ │ ├── EnsureEmailIsVerified.php │ │ │ └── NoUserMiddleware.php │ │ ├── Models/ │ │ │ ├── Membership.php │ │ │ ├── Team.php │ │ │ ├── TeamInvitation.php │ │ │ └── User.php │ │ ├── Notifications/ │ │ │ └── VerifyEmail.php │ │ ├── Observers/ │ │ │ └── TeamObserver.php │ │ ├── Policies/ │ │ │ └── TeamPolicy.php │ │ ├── ServiceProvider.php │ │ └── Validators/ │ │ └── RegistrationEnabledValidator.php │ ├── testbench.yaml │ └── tests/ │ └── TestCase.php ├── phpunit.xml ├── postcss.config.js ├── public/ │ ├── .htaccess │ ├── index.php │ ├── robots.txt │ └── site.webmanifest ├── resources/ │ ├── css/ │ │ ├── app.css │ │ └── tailwind.sources.css │ ├── js/ │ │ ├── app.js │ │ └── bootstrap.js │ ├── lang/ │ │ └── en/ │ │ └── validation.php │ ├── markdown/ │ │ ├── policy.md │ │ └── terms.md │ ├── navigation.php │ └── views/ │ ├── api/ │ │ ├── api-token-manager.blade.php │ │ └── index.blade.php │ ├── auth/ │ │ ├── confirm-password.blade.php │ │ ├── forgot-password.blade.php │ │ ├── login.blade.php │ │ ├── register.blade.php │ │ ├── reset-password.blade.php │ │ ├── two-factor-challenge.blade.php │ │ └── verify-email.blade.php │ ├── components/ │ │ ├── action-message.blade.php │ │ ├── action-section.blade.php │ │ ├── alert.blade.php │ │ ├── alerts/ │ │ │ ├── danger.blade.php │ │ │ ├── info.blade.php │ │ │ ├── success.blade.php │ │ │ └── warning.blade.php │ │ ├── application-logo.blade.php │ │ ├── application-mark.blade.php │ │ ├── authentication-card-logo.blade.php │ │ ├── authentication-card.blade.php │ │ ├── banner.blade.php │ │ ├── button.blade.php │ │ ├── card.blade.php │ │ ├── checkbox.blade.php │ │ ├── confirmation-modal.blade.php │ │ ├── confirms-password.blade.php │ │ ├── create-button-dropdown.blade.php │ │ ├── create-button.blade.php │ │ ├── danger-button.blade.php │ │ ├── dialog-modal.blade.php │ │ ├── dropdown-link.blade.php │ │ ├── dropdown.blade.php │ │ ├── form/ │ │ │ ├── button.blade.php │ │ │ ├── checkbox.blade.php │ │ │ ├── dropdown-button.blade.php │ │ │ ├── header.blade.php │ │ │ ├── number.blade.php │ │ │ ├── password.blade.php │ │ │ ├── select.blade.php │ │ │ ├── submit-button.blade.php │ │ │ ├── text-list.blade.php │ │ │ ├── text.blade.php │ │ │ ├── textarea.blade.php │ │ │ └── time.blade.php │ │ ├── form-section.blade.php │ │ ├── input-error.blade.php │ │ ├── input.blade.php │ │ ├── label.blade.php │ │ ├── layout/ │ │ │ ├── sidebar/ │ │ │ │ ├── menu.blade.php │ │ │ │ └── mobile-menu.blade.php │ │ │ ├── sidebar.blade.php │ │ │ ├── topbar.blade.php │ │ │ └── user-profile-dropdown.blade.php │ │ ├── modal.blade.php │ │ ├── nav-link.blade.php │ │ ├── page-header.blade.php │ │ ├── password-group.blade.php │ │ ├── responsive-nav-link.blade.php │ │ ├── secondary-button.blade.php │ │ ├── section-border.blade.php │ │ ├── section-title.blade.php │ │ ├── switchable-team.blade.php │ │ └── validation-errors.blade.php │ ├── dashboard.blade.php │ ├── emails/ │ │ └── team-invitation.blade.php │ ├── errors/ │ │ ├── 401.blade.php │ │ ├── 402.blade.php │ │ ├── 403.blade.php │ │ ├── 404.blade.php │ │ ├── 419.blade.php │ │ ├── 429.blade.php │ │ ├── 500.blade.php │ │ ├── 503.blade.php │ │ ├── layout.blade.php │ │ └── minimal.blade.php │ ├── layouts/ │ │ ├── app.blade.php │ │ └── guest.blade.php │ ├── policy.blade.php │ ├── profile/ │ │ ├── delete-user-form.blade.php │ │ ├── logout-other-browser-sessions-form.blade.php │ │ ├── two-factor-authentication-form.blade.php │ │ ├── update-password-form.blade.php │ │ └── update-profile-information-form.blade.php │ ├── teams/ │ │ ├── create-team-form.blade.php │ │ ├── create.blade.php │ │ ├── delete-team-form.blade.php │ │ ├── show.blade.php │ │ ├── team-member-manager.blade.php │ │ └── update-team-name-form.blade.php │ ├── terms.blade.php │ └── vendor/ │ ├── livewire-table/ │ │ ├── columns/ │ │ │ ├── buttons/ │ │ │ │ └── copy.blade.php │ │ │ ├── content/ │ │ │ │ ├── action.blade.php │ │ │ │ ├── boolean.blade.php │ │ │ │ ├── default.blade.php │ │ │ │ └── image.blade.php │ │ │ ├── footer/ │ │ │ │ └── default.blade.php │ │ │ ├── header/ │ │ │ │ └── default.blade.php │ │ │ └── search/ │ │ │ ├── boolean.blade.php │ │ │ ├── date.blade.php │ │ │ ├── default.blade.php │ │ │ └── select.blade.php │ │ ├── components/ │ │ │ ├── button.blade.php │ │ │ ├── dropdown/ │ │ │ │ ├── content.blade.php │ │ │ │ ├── divider.blade.php │ │ │ │ ├── footer.blade.php │ │ │ │ ├── header.blade.php │ │ │ │ ├── index.blade.php │ │ │ │ ├── menu/ │ │ │ │ │ ├── index.blade.php │ │ │ │ │ └── item.blade.php │ │ │ │ └── section.blade.php │ │ │ ├── form/ │ │ │ │ ├── checkbox.blade.php │ │ │ │ ├── group.blade.php │ │ │ │ ├── input.blade.php │ │ │ │ └── select.blade.php │ │ │ ├── icon.blade.php │ │ │ ├── notification/ │ │ │ │ ├── button.blade.php │ │ │ │ └── index.blade.php │ │ │ └── table/ │ │ │ ├── index.blade.php │ │ │ ├── message.blade.php │ │ │ ├── tbody.blade.php │ │ │ ├── td.blade.php │ │ │ ├── tfoot.blade.php │ │ │ ├── th.blade.php │ │ │ ├── thead.blade.php │ │ │ └── tr.blade.php │ │ ├── filters/ │ │ │ ├── boolean.blade.php │ │ │ ├── date.blade.php │ │ │ ├── filter.blade.php │ │ │ └── select.blade.php │ │ ├── icons/ │ │ │ ├── arrow-path.blade.php │ │ │ ├── backspace.blade.php │ │ │ ├── check-circle.blade.php │ │ │ ├── check.blade.php │ │ │ ├── chevron-down.blade.php │ │ │ ├── chevron-left.blade.php │ │ │ ├── chevron-right.blade.php │ │ │ ├── chevron-up-down.blade.php │ │ │ ├── chevron-up.blade.php │ │ │ ├── clipboard-document-check.blade.php │ │ │ ├── clipboard-document.blade.php │ │ │ ├── clock.blade.php │ │ │ ├── cog-6-tooth.blade.php │ │ │ ├── ellipsis-vertical.blade.php │ │ │ ├── eye.blade.php │ │ │ ├── funnel.blade.php │ │ │ ├── information-circle.blade.php │ │ │ ├── list-bullet.blade.php │ │ │ ├── magnifying-glass.blade.php │ │ │ ├── min.blade.php │ │ │ ├── play.blade.php │ │ │ ├── plus.blade.php │ │ │ ├── queue-list.blade.php │ │ │ ├── view-columns.blade.php │ │ │ └── x-mark.blade.php │ │ ├── livewire/ │ │ │ └── livewire-table.blade.php │ │ ├── pagination/ │ │ │ └── pagination.blade.php │ │ ├── table/ │ │ │ └── table.blade.php │ │ └── toolbar/ │ │ ├── buttons/ │ │ │ ├── clear-search.blade.php │ │ │ └── reordering.blade.php │ │ ├── dropdowns/ │ │ │ ├── actions.blade.php │ │ │ ├── configuration.blade.php │ │ │ ├── sections/ │ │ │ │ ├── actions.blade.php │ │ │ │ ├── columns.blade.php │ │ │ │ ├── configuration.blade.php │ │ │ │ ├── filters.blade.php │ │ │ │ ├── polling.blade.php │ │ │ │ ├── results.blade.php │ │ │ │ ├── suggestions.blade.php │ │ │ │ └── trashed.blade.php │ │ │ └── suggestions.blade.php │ │ ├── loader.blade.php │ │ ├── notification.blade.php │ │ ├── search.blade.php │ │ └── toolbar.blade.php │ └── mail/ │ ├── html/ │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── subcopy.blade.php │ │ ├── table.blade.php │ │ └── themes/ │ │ └── default.css │ └── text/ │ ├── button.blade.php │ ├── footer.blade.php │ ├── header.blade.php │ ├── layout.blade.php │ ├── message.blade.php │ ├── panel.blade.php │ ├── subcopy.blade.php │ └── table.blade.php ├── routes/ │ ├── api.php │ ├── channels.php │ ├── console.php │ └── web.php ├── scripts/ │ ├── generate-tailwind-sources.mjs │ └── package-quality.sh ├── storage/ │ ├── app/ │ │ └── .gitignore │ ├── framework/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── sessions/ │ │ │ └── .gitignore │ │ ├── testing/ │ │ │ └── .gitignore │ │ └── views/ │ │ └── .gitignore │ └── logs/ │ └── .gitignore ├── tests/ │ ├── Browser/ │ │ ├── Notifications/ │ │ │ ├── ChannelsFormTest.php │ │ │ ├── ChannelsIndexTest.php │ │ │ ├── NotificationsFormTest.php │ │ │ └── NotificationsIndexTest.php │ │ ├── Pages/ │ │ │ ├── HomePage.php │ │ │ └── Page.php │ │ ├── Sites/ │ │ │ ├── SitesFormTest.php │ │ │ └── SitesIndexTest.php │ │ ├── Uptime/ │ │ │ ├── UptimeFormTest.php │ │ │ └── UptimeIndexTest.php │ │ ├── console/ │ │ │ └── .gitignore │ │ ├── screenshots/ │ │ │ └── .gitignore │ │ └── source/ │ │ └── .gitignore │ ├── CreatesApplication.php │ ├── DuskTestCase.php │ ├── Feature/ │ │ └── .gitkeep │ ├── TestCase.php │ └── Unit/ │ └── .gitkeep └── vite.config.js