[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-laravel-nightwatch-configure":3,"mdc--syfc0x-key":33,"related-org-laravel-nightwatch-configure":3154,"related-repo-laravel-nightwatch-configure":3284},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":23,"topics":27,"repo":28,"sourceUrl":31,"mdContent":32},"nightwatch-configure","configure Laravel Nightwatch data collection","Configure Laravel Nightwatch data collection, sampling rates, filtering rules, and redaction policies. Use this when setting up Nightwatch, managing data volume, protecting sensitive data (PII), or optimizing event collection for production workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"laravel","Laravel","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Flaravel.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Configuration","configuration","tag",{"name":17,"slug":18,"type":15},"Monitoring","monitoring",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Privacy","privacy",0,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fnightwatch-cursor-plugin","2026-07-16T06:02:16.946147",null,[],{"repoUrl":24,"stars":23,"forks":23,"topics":29,"description":30},[],"Official Laravel Nightwatch integration plugin for Cursor.","https:\u002F\u002Fgithub.com\u002Flaravel\u002Fnightwatch-cursor-plugin\u002Ftree\u002FHEAD\u002Fskills\u002Fnightwatch-configure","---\nname: nightwatch-configure\ndescription: Configure Laravel Nightwatch data collection, sampling rates, filtering rules, and redaction policies. Use this when setting up Nightwatch, managing data volume, protecting sensitive data (PII), or optimizing event collection for production workloads.\n---\n\n# Nightwatch Configuration Guide\n\nThis skill helps configure Laravel Nightwatch data collection to balance observability, performance, and privacy. Covers sampling strategies, filtering rules, and redaction methods across all event types.\n\n## When to Use This Skill\n\nInvoke when:\n\n- Setting up Nightwatch for the first time\n- Reducing data volume or event quota usage\n- Protecting sensitive data (PII, credentials, tokens)\n- Configuring production monitoring\n- Optimizing for high-traffic applications\n- Understanding filtering vs sampling vs redaction\n\n## Documentation Reference\n\nThe [Nightwatch Documentation](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs) is the definitive and up-to-date source of information for all Nightwatch configuration options. This skill provides practical guidance and common patterns, but always consult the official documentation as the primary source of truth for specific details, environment variables, and API behavior. The documentation includes comprehensive coverage of:\n\n- [Filtering and Configuration](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Ffiltering) - Core concepts for sampling, filtering, and redaction\n- Individual event type pages with specific configuration options:\n  - [Requests](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Frequests) - Request sampling, header handling, payload capture\n  - [Commands](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fcommands) - Command sampling and redaction\n  - [Queries](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fqueries) - Query filtering and redaction\n  - [Cache](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fcache) - Cache event filtering by key or pattern\n  - [Jobs](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fjobs) - Job filtering and sampling decoupling\n  - [Mail](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fmail) - Mail event filtering\n  - [Notifications](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fnotifications) - Notification filtering by channel\n  - [Exceptions](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fexceptions) - Exception sampling and throttling\n  - [Outgoing Requests](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Foutgoing-requests) - HTTP request filtering\n\n## Data Collection Flow\n\nNightwatch processes events through three stages:\n\n1. **Sampling** - Controls which entry points are captured (requests, commands, scheduled tasks)\n2. **Filtering** - Excludes specific events after sampling (queries, cache, mail, etc.)\n3. **Redaction** - Modifies captured data to remove\u002Fobfuscate sensitive information\n\n```\nRequest\u002FCommand\u002FScheduled Task\n       |\n       v\n   [Sampling?] ----NO----> Drop entire trace\n       | YES\n       v\n   Events generated\n       |\n       v\n   [Filtering?] ----YES---> Drop specific event\n       | NO\n       v\n   [Redaction] ----------> Store modified data\n```\n\n---\n\n## Sampling Configuration\n\nSampling determines which entry points (requests, commands, scheduled tasks) trigger full trace collection. When an entry point is sampled, all related events are captured. For complete and authoritative information on all available sampling methods and environment variables, refer to the [Requests documentation](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Frequests) for HTTP request sampling and the [Commands documentation](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fcommands) for Artisan command sampling.\n\n### Global Sample Rates\n\nConfigure via environment variables:\n\n```bash\n# Default: 100% sampling (all requests\u002Fcommands captured)\nNIGHTWATCH_REQUEST_SAMPLE_RATE=0.1      # Recommended: 10% of requests\nNIGHTWATCH_COMMAND_SAMPLE_RATE=1.0      # Capture all commands\nNIGHTWATCH_EXCEPTION_SAMPLE_RATE=1.0    # Always capture exceptions\n```\n\n**Recommendation**: Start with `0.1` (10%) for requests in production, adjust based on volume and needs.\n\nThe full list of environment variables for sampling configuration and their default values can be found in the official [Requests](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Frequests) and [Commands](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fcommands) documentation pages.\n\n### Route-Based Sampling\n\nApply different rates to specific routes using the `Sample` middleware:\n\n```php routes\u002Fweb.php\nuse Illuminate\\Support\\Facades\\Route;\nuse Laravel\\Nightwatch\\Http\\Middleware\\Sample;\n\n\u002F\u002F Sample admin routes at 100%\nRoute::middleware(Sample::rate(1.0))->prefix('admin')->group(function () {\n    \u002F\u002F All admin routes sampled fully\n});\n\n\u002F\u002F Sample API routes at 5%\nRoute::middleware(Sample::rate(0.05))->prefix('api')->group(function () {\n    \u002F\u002F API routes sampled sparingly\n});\n\n\u002F\u002F Always sample critical endpoints\nRoute::post('\u002Fcheckout', [CheckoutController::class, 'process'])\n    ->middleware(Sample::always());\n\n\u002F\u002F Never sample health checks\nRoute::get('\u002Fhealth', [HealthController::class, 'check'])\n    ->middleware(Sample::never());\n```\n\n### Unmatched Route Sampling\n\nHandle 404\u002Fbot traffic with reduced sampling:\n\n```php routes\u002Fweb.php\nRoute::fallback(fn () => abort(404))\n    ->middleware(Sample::rate(0.01));  \u002F\u002F 1% sampling for unmatched routes\n```\n\n### Dynamic Sampling\n\nSample based on runtime conditions (user role, request attributes):\n\n```php app\u002FHttp\u002FMiddleware\u002FSampleAdminRequests.php\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Laravel\\Nightwatch\\Facades\\Nightwatch;\n\nclass SampleAdminRequests\n{\n    public function handle(Request $request, Closure $next)\n    {\n        if ($request->user()?->isAdmin()) {\n            Nightwatch::sample();  \u002F\u002F Always sample admin requests\n        }\n        return $next($request);\n    }\n}\n```\n\n### Command Sampling\n\nExclude specific commands from sampling:\n\n```php AppServiceProvider.php\nuse Illuminate\\Console\\Events\\CommandStarting;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Nightwatch\\Facades\\Nightwatch;\n\npublic function boot(): void\n{\n    Event::listen(function (CommandStarting $event) {\n        if (in_array($event->command, ['schedule:finish', 'horizon:snapshot'])) {\n            Nightwatch::dontSample();\n        }\n    });\n}\n```\n\n### Vendor Commands\n\nNightwatch automatically ignores framework\u002Finternal commands. Opt-in to capture them:\n\n```php\nNightwatch::captureDefaultVendorCommands();\n```\n\n---\n\n## Filtering Configuration\n\nFiltering excludes specific events from collection after sampling. Use filtering to reduce noise and quota usage. Each event type has specific filtering methods documented on its respective page. Refer to the [Queries](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fqueries), [Cache](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fcache), [Jobs](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fjobs), [Mail](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fmail), [Notifications](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fnotifications), and [Outgoing Requests](https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Foutgoing-requests) documentation for complete filtering options for each event type.\n\n### Database Queries\n\n**Filter all queries** (disable query collection):\n\n```bash\nNIGHTWATCH_IGNORE_QUERIES=true\n```\n\n**Filter specific queries** by SQL pattern:\n\n```php AppServiceProvider.php\nuse Laravel\\Nightwatch\\Facades\\Nightwatch;\nuse Laravel\\Nightwatch\\Records\\Query;\n\npublic function boot(): void\n{\n    \u002F\u002F Filter job table queries (PostgreSQL)\n    Nightwatch::rejectQueries(function (Query $query) {\n        return str_contains($query->sql, 'into \"jobs\"');\n    });\n\n    \u002F\u002F Filter cache table queries (MySQL)\n    Nightwatch::rejectQueries(function (Query $query) {\n        return str_contains($query->sql, 'from `cache`')\n            || str_contains($query->sql, 'into `cache`');\n    });\n}\n```\n\n### Cache Events\n\n**Filter all cache events**:\n\n```bash\nNIGHTWATCH_IGNORE_CACHE_EVENTS=true\n```\n\n**Filter by cache key patterns**:\n\n```php\nNightwatch::rejectCacheKeys([\n    'my-app:users',                    \u002F\u002F Exact match\n    '\u002F^my-app:posts:\u002F',                \u002F\u002F Regex: starts with my-app:posts:\n    '\u002F^[a-zA-Z0-9]{40}$\u002F',             \u002F\u002F Regex: session IDs\n]);\n```\n\n**Filter with callback**:\n\n```php\nuse Laravel\\Nightwatch\\Records\\CacheEvent;\n\nNightwatch::rejectCacheEvents(function (CacheEvent $cacheEvent) {\n    return str_starts_with($cacheEvent->key, 'temp:');\n});\n```\n\n### Mail Events\n\n**Filter all mail**:\n\n```bash\nNIGHTWATCH_IGNORE_MAIL=true\n```\n\n**Filter specific mail**:\n\n```php\nuse Laravel\\Nightwatch\\Records\\Mail;\n\nNightwatch::rejectMail(function (Mail $mail) {\n    return str_contains($mail->subject, 'Newsletter');\n});\n```\n\n### Notification Events\n\n**Filter all notifications**:\n\n```bash\nNIGHTWATCH_IGNORE_NOTIFICATIONS=true\n```\n\n**Filter by channel**:\n\n```php\nuse Laravel\\Nightwatch\\Records\\Notification;\n\nNightwatch::rejectNotifications(function (Notification $notification) {\n    return $notification->channel === 'database';\n});\n```\n\n### Outgoing HTTP Requests\n\n**Filter all outgoing requests**:\n\n```bash\nNIGHTWATCH_IGNORE_OUTGOING_REQUESTS=true\n```\n\n**Filter by URL**:\n\n```php\nuse Laravel\\Nightwatch\\Records\\OutgoingRequest;\n\nNightwatch::rejectOutgoingRequests(function (OutgoingRequest $request) {\n    return str_contains($request->url, 'analytics.example.com');\n});\n```\n\n### Queued Jobs\n\n**Filter specific jobs**:\n\n```php\nuse Laravel\\Nightwatch\\Records\\QueuedJob;\n\nNightwatch::rejectQueuedJobs(function (QueuedJob $job) {\n    return $job->name === 'App\\Jobs\\LowPriorityJob';\n});\n```\n\n### Decoupling Job Sampling\n\nSample jobs independently from parent contexts:\n\n```php\nuse Illuminate\\Support\\Facades\\Queue;\n\npublic function boot(): void\n{\n    Queue::before(fn () => Nightwatch::sample(rate: 0.5));\n}\n```\n\n---\n\n## Redaction Configuration\n\nRedaction modifies captured data to remove or obfuscate sensitive information. Unlike filtering, redaction keeps the event but sanitizes its content. For authoritative details on what data can be redacted from each event type and the exact callback signatures, consult the individual event type documentation pages referenced in the filtering section above.\n\n### Request Redaction\n\n**Redact sensitive headers** (automatically redacts: Authorization, Cookie, X-XSRF-TOKEN):\n\n```bash\n# Customize redacted headers\nNIGHTWATCH_REDACT_HEADERS=Authorization,Cookie,Proxy-Authorization,X-API-Key\n\n# Disable header collection entirely\nNIGHTWATCH_IGNORE_REQUEST_HEADERS=true\n```\n\n**Redact request payloads** (disabled by default):\n\n```bash\n# Enable payload capture\nNIGHTWATCH_CAPTURE_REQUEST_PAYLOAD=true\n\n# Customize redacted fields\nNIGHTWATCH_REDACT_PAYLOAD_FIELDS=password,password_confirmation,ssn,credit_card\n```\n\n**Programmatic redaction**:\n\n```php\nuse Laravel\\Nightwatch\\Facades\\Nightwatch;\nuse Laravel\\Nightwatch\\Records\\Request;\n\nNightwatch::redactRequests(function (Request $request) {\n    $request->url = str_replace('secret', '***', $request->url);\n    $request->ip = preg_replace('\u002F\\d+$\u002F', '***', $request->ip);\n});\n```\n\n### Query Redaction\n\n```php\nuse Laravel\\Nightwatch\\Records\\Query;\n\nNightwatch::redactQueries(function (Query $query) {\n    $query->sql = str_replace('secret_token', '***', $query->sql);\n});\n```\n\n### Cache Redaction\n\n```php\nuse Laravel\\Nightwatch\\Records\\CacheEvent;\n\nNightwatch::redactCacheEvents(function (CacheEvent $cacheEvent) {\n    $cacheEvent->key = str_replace('user:', 'user:***:', $cacheEvent->key);\n});\n```\n\n### Command Redaction\n\n```php\nuse Laravel\\Nightwatch\\Records\\Command;\n\nNightwatch::redactCommands(function (Command $command) {\n    $command->command = preg_replace('\u002F--password=\\S+\u002F', '--password=***', $command->command);\n});\n```\n\n### Exception Redaction\n\n```php\nuse Laravel\\Nightwatch\\Records\\Exception;\n\nNightwatch::redactExceptions(function (Exception $exception) {\n    $exception->message = str_replace('secret', '***', $exception->message);\n});\n```\n\n### Mail Redaction\n\n```php\nuse Laravel\\Nightwatch\\Records\\Mail;\n\nNightwatch::redactMail(function (Mail $mail) {\n    $mail->subject = str_replace('Invoice #', 'Invoice ***', $mail->subject);\n});\n```\n\n### Outgoing Request Redaction\n\n```php\nuse Laravel\\Nightwatch\\Records\\OutgoingRequest;\n\nNightwatch::redactOutgoingRequests(function (OutgoingRequest $outgoingRequest) {\n    $outgoingRequest->url = preg_replace('\u002Fapi_key=\\w+\u002F', 'api_key=***', $outgoingRequest->url);\n});\n```\n\n---\n\n## Configuration Summary by Event Type\n\n| Event Type            | Sampling                                           | Filtering                                                                    | Redaction                 |\n| --------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------- |\n| **Requests**          | `NIGHTWATCH_REQUEST_SAMPLE_RATE`, Route middleware | Not applicable                                                               | Headers, payload, URL, IP |\n| **Commands**          | `NIGHTWATCH_COMMAND_SAMPLE_RATE`, Event listener   | Not applicable                                                               | Command arguments         |\n| **Queries**           | Parent context                                     | `rejectQueries()`, `NIGHTWATCH_IGNORE_QUERIES`                               | SQL statement             |\n| **Cache**             | Parent context                                     | `rejectCacheKeys()`, `rejectCacheEvents()`, `NIGHTWATCH_IGNORE_CACHE_EVENTS` | Cache key                 |\n| **Jobs**              | Parent context, Queue::before                      | `rejectQueuedJobs()`                                                         | Not applicable            |\n| **Mail**              | Parent context                                     | `rejectMail()`, `NIGHTWATCH_IGNORE_MAIL`                                     | Subject                   |\n| **Notifications**     | Parent context                                     | `rejectNotifications()`, `NIGHTWATCH_IGNORE_NOTIFICATIONS`                   | Not applicable            |\n| **Outgoing Requests** | Parent context                                     | `rejectOutgoingRequests()`, `NIGHTWATCH_IGNORE_OUTGOING_REQUESTS`            | URL                       |\n| **Exceptions**        | `NIGHTWATCH_EXCEPTION_SAMPLE_RATE`                 | Not applicable                                                               | Exception message         |\n\n---\n\n## Production Recommendations\n\n### High-Traffic Applications\n\n```bash\n# Conservative sampling\nNIGHTWATCH_REQUEST_SAMPLE_RATE=0.01          # 1% of requests\nNIGHTWATCH_COMMAND_SAMPLE_RATE=0.1           # 10% of commands\nNIGHTWATCH_EXCEPTION_SAMPLE_RATE=1.0         # Always capture exceptions\n\n# Filter noisy events\nNIGHTWATCH_IGNORE_CACHE_EVENTS=true\nNIGHTWATCH_IGNORE_QUERIES=true               # Or filter specific queries programmatically\n```\n\n### Privacy-Conscious Applications\n\n```bash\n# Disable sensitive data collection\nNIGHTWATCH_CAPTURE_REQUEST_PAYLOAD=false\nNIGHTWATCH_IGNORE_REQUEST_HEADERS=true\n\n# Or use redaction in AppServiceProvider\n```\n\n### Balanced Configuration (Recommended Start)\n\n```bash\n# Sample rates\nNIGHTWATCH_REQUEST_SAMPLE_RATE=0.1\nNIGHTWATCH_COMMAND_SAMPLE_RATE=1.0\nNIGHTWATCH_EXCEPTION_SAMPLE_RATE=1.0\n\n# Filter obvious noise programmatically\n# Redact PII as needed\n```\n\n---\n\n## Verification Checklist\n\nAfter configuration:\n\n- [ ] Sampling rates appropriate for traffic volume\n- [ ] Noisy events filtered (cache, certain queries)\n- [ ] Sensitive data redacted (PII, tokens, credentials)\n- [ ] Exceptions always captured for debugging\n- [ ] Test in development with `NIGHTWATCH_REQUEST_SAMPLE_RATE=1.0`\n- [ ] Monitor event quota usage in Nightwatch dashboard\n\n---\n\n## Common Patterns\n\n### Filter Health Checks + Reduce Sampling\n\n```php\nRoute::get('\u002Fhealth', fn() => ['status' => 'ok'])\n    ->middleware(Sample::never());\n```\n\n### Exclude Internal\u002FVendor Queries\n\n```php\nNightwatch::rejectQueries(fn($q) =>\n    str_contains($q->sql, 'telescope') ||\n    str_contains($q->sql, 'pulse')\n);\n```\n\n### Protect User Data in Cache Keys\n\n```php\nNightwatch::redactCacheEvents(fn($e) =>\n    $e->key = preg_replace('\u002Fuser:\\d+\u002F', 'user:***', $e->key)\n);\n```\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,47,53,60,65,100,106,122,253,259,264,299,312,316,322,343,350,355,448,465,484,490,503,686,692,697,720,726,731,850,856,861,960,966,971,985,988,994,1038,1044,1054,1078,1088,1214,1220,1230,1253,1262,1324,1333,1378,1384,1393,1416,1425,1470,1476,1485,1508,1517,1562,1568,1577,1600,1609,1654,1660,1669,1714,1720,1725,1776,1779,1785,1790,1796,1806,1869,1879,1942,1951,2011,2017,2061,2067,2111,2117,2162,2168,2213,2219,2263,2269,2313,2316,2322,2648,2651,2657,2663,2790,2796,2857,2863,2948,2951,2957,2962,3030,3033,3039,3045,3067,3073,3112,3118,3148],{"type":39,"tag":40,"props":41,"children":43},"element","h1",{"id":42},"nightwatch-configuration-guide",[44],{"type":45,"value":46},"text","Nightwatch Configuration Guide",{"type":39,"tag":48,"props":49,"children":50},"p",{},[51],{"type":45,"value":52},"This skill helps configure Laravel Nightwatch data collection to balance observability, performance, and privacy. Covers sampling strategies, filtering rules, and redaction methods across all event types.",{"type":39,"tag":54,"props":55,"children":57},"h2",{"id":56},"when-to-use-this-skill",[58],{"type":45,"value":59},"When to Use This Skill",{"type":39,"tag":48,"props":61,"children":62},{},[63],{"type":45,"value":64},"Invoke when:",{"type":39,"tag":66,"props":67,"children":68},"ul",{},[69,75,80,85,90,95],{"type":39,"tag":70,"props":71,"children":72},"li",{},[73],{"type":45,"value":74},"Setting up Nightwatch for the first time",{"type":39,"tag":70,"props":76,"children":77},{},[78],{"type":45,"value":79},"Reducing data volume or event quota usage",{"type":39,"tag":70,"props":81,"children":82},{},[83],{"type":45,"value":84},"Protecting sensitive data (PII, credentials, tokens)",{"type":39,"tag":70,"props":86,"children":87},{},[88],{"type":45,"value":89},"Configuring production monitoring",{"type":39,"tag":70,"props":91,"children":92},{},[93],{"type":45,"value":94},"Optimizing for high-traffic applications",{"type":39,"tag":70,"props":96,"children":97},{},[98],{"type":45,"value":99},"Understanding filtering vs sampling vs redaction",{"type":39,"tag":54,"props":101,"children":103},{"id":102},"documentation-reference",[104],{"type":45,"value":105},"Documentation Reference",{"type":39,"tag":48,"props":107,"children":108},{},[109,111,120],{"type":45,"value":110},"The ",{"type":39,"tag":112,"props":113,"children":117},"a",{"href":114,"rel":115},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs",[116],"nofollow",[118],{"type":45,"value":119},"Nightwatch Documentation",{"type":45,"value":121}," is the definitive and up-to-date source of information for all Nightwatch configuration options. This skill provides practical guidance and common patterns, but always consult the official documentation as the primary source of truth for specific details, environment variables, and API behavior. The documentation includes comprehensive coverage of:",{"type":39,"tag":66,"props":123,"children":124},{},[125,137],{"type":39,"tag":70,"props":126,"children":127},{},[128,135],{"type":39,"tag":112,"props":129,"children":132},{"href":130,"rel":131},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Ffiltering",[116],[133],{"type":45,"value":134},"Filtering and Configuration",{"type":45,"value":136}," - Core concepts for sampling, filtering, and redaction",{"type":39,"tag":70,"props":138,"children":139},{},[140,142],{"type":45,"value":141},"Individual event type pages with specific configuration options:\n",{"type":39,"tag":66,"props":143,"children":144},{},[145,157,169,181,193,205,217,229,241],{"type":39,"tag":70,"props":146,"children":147},{},[148,155],{"type":39,"tag":112,"props":149,"children":152},{"href":150,"rel":151},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Frequests",[116],[153],{"type":45,"value":154},"Requests",{"type":45,"value":156}," - Request sampling, header handling, payload capture",{"type":39,"tag":70,"props":158,"children":159},{},[160,167],{"type":39,"tag":112,"props":161,"children":164},{"href":162,"rel":163},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fcommands",[116],[165],{"type":45,"value":166},"Commands",{"type":45,"value":168}," - Command sampling and redaction",{"type":39,"tag":70,"props":170,"children":171},{},[172,179],{"type":39,"tag":112,"props":173,"children":176},{"href":174,"rel":175},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fqueries",[116],[177],{"type":45,"value":178},"Queries",{"type":45,"value":180}," - Query filtering and redaction",{"type":39,"tag":70,"props":182,"children":183},{},[184,191],{"type":39,"tag":112,"props":185,"children":188},{"href":186,"rel":187},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fcache",[116],[189],{"type":45,"value":190},"Cache",{"type":45,"value":192}," - Cache event filtering by key or pattern",{"type":39,"tag":70,"props":194,"children":195},{},[196,203],{"type":39,"tag":112,"props":197,"children":200},{"href":198,"rel":199},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fjobs",[116],[201],{"type":45,"value":202},"Jobs",{"type":45,"value":204}," - Job filtering and sampling decoupling",{"type":39,"tag":70,"props":206,"children":207},{},[208,215],{"type":39,"tag":112,"props":209,"children":212},{"href":210,"rel":211},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fmail",[116],[213],{"type":45,"value":214},"Mail",{"type":45,"value":216}," - Mail event filtering",{"type":39,"tag":70,"props":218,"children":219},{},[220,227],{"type":39,"tag":112,"props":221,"children":224},{"href":222,"rel":223},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fnotifications",[116],[225],{"type":45,"value":226},"Notifications",{"type":45,"value":228}," - Notification filtering by channel",{"type":39,"tag":70,"props":230,"children":231},{},[232,239],{"type":39,"tag":112,"props":233,"children":236},{"href":234,"rel":235},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Fexceptions",[116],[237],{"type":45,"value":238},"Exceptions",{"type":45,"value":240}," - Exception sampling and throttling",{"type":39,"tag":70,"props":242,"children":243},{},[244,251],{"type":39,"tag":112,"props":245,"children":248},{"href":246,"rel":247},"https:\u002F\u002Fnightwatch.laravel.com\u002Fdocs\u002Foutgoing-requests",[116],[249],{"type":45,"value":250},"Outgoing Requests",{"type":45,"value":252}," - HTTP request filtering",{"type":39,"tag":54,"props":254,"children":256},{"id":255},"data-collection-flow",[257],{"type":45,"value":258},"Data Collection Flow",{"type":39,"tag":48,"props":260,"children":261},{},[262],{"type":45,"value":263},"Nightwatch processes events through three stages:",{"type":39,"tag":265,"props":266,"children":267},"ol",{},[268,279,289],{"type":39,"tag":70,"props":269,"children":270},{},[271,277],{"type":39,"tag":272,"props":273,"children":274},"strong",{},[275],{"type":45,"value":276},"Sampling",{"type":45,"value":278}," - Controls which entry points are captured (requests, commands, scheduled tasks)",{"type":39,"tag":70,"props":280,"children":281},{},[282,287],{"type":39,"tag":272,"props":283,"children":284},{},[285],{"type":45,"value":286},"Filtering",{"type":45,"value":288}," - Excludes specific events after sampling (queries, cache, mail, etc.)",{"type":39,"tag":70,"props":290,"children":291},{},[292,297],{"type":39,"tag":272,"props":293,"children":294},{},[295],{"type":45,"value":296},"Redaction",{"type":45,"value":298}," - Modifies captured data to remove\u002Fobfuscate sensitive information",{"type":39,"tag":300,"props":301,"children":305},"pre",{"className":302,"code":304,"language":45},[303],"language-text","Request\u002FCommand\u002FScheduled Task\n       |\n       v\n   [Sampling?] ----NO----> Drop entire trace\n       | YES\n       v\n   Events generated\n       |\n       v\n   [Filtering?] ----YES---> Drop specific event\n       | NO\n       v\n   [Redaction] ----------> Store modified data\n",[306],{"type":39,"tag":307,"props":308,"children":310},"code",{"__ignoreMap":309},"",[311],{"type":45,"value":304},{"type":39,"tag":313,"props":314,"children":315},"hr",{},[],{"type":39,"tag":54,"props":317,"children":319},{"id":318},"sampling-configuration",[320],{"type":45,"value":321},"Sampling Configuration",{"type":39,"tag":48,"props":323,"children":324},{},[325,327,333,335,341],{"type":45,"value":326},"Sampling determines which entry points (requests, commands, scheduled tasks) trigger full trace collection. When an entry point is sampled, all related events are captured. For complete and authoritative information on all available sampling methods and environment variables, refer to the ",{"type":39,"tag":112,"props":328,"children":330},{"href":150,"rel":329},[116],[331],{"type":45,"value":332},"Requests documentation",{"type":45,"value":334}," for HTTP request sampling and the ",{"type":39,"tag":112,"props":336,"children":338},{"href":162,"rel":337},[116],[339],{"type":45,"value":340},"Commands documentation",{"type":45,"value":342}," for Artisan command sampling.",{"type":39,"tag":344,"props":345,"children":347},"h3",{"id":346},"global-sample-rates",[348],{"type":45,"value":349},"Global Sample Rates",{"type":39,"tag":48,"props":351,"children":352},{},[353],{"type":45,"value":354},"Configure via environment variables:",{"type":39,"tag":300,"props":356,"children":360},{"className":357,"code":358,"language":359,"meta":309,"style":309},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Default: 100% sampling (all requests\u002Fcommands captured)\nNIGHTWATCH_REQUEST_SAMPLE_RATE=0.1      # Recommended: 10% of requests\nNIGHTWATCH_COMMAND_SAMPLE_RATE=1.0      # Capture all commands\nNIGHTWATCH_EXCEPTION_SAMPLE_RATE=1.0    # Always capture exceptions\n","bash",[361],{"type":39,"tag":307,"props":362,"children":363},{"__ignoreMap":309},[364,376,403,426],{"type":39,"tag":365,"props":366,"children":369},"span",{"class":367,"line":368},"line",1,[370],{"type":39,"tag":365,"props":371,"children":373},{"style":372},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[374],{"type":45,"value":375},"# Default: 100% sampling (all requests\u002Fcommands captured)\n",{"type":39,"tag":365,"props":377,"children":379},{"class":367,"line":378},2,[380,386,392,398],{"type":39,"tag":365,"props":381,"children":383},{"style":382},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[384],{"type":45,"value":385},"NIGHTWATCH_REQUEST_SAMPLE_RATE",{"type":39,"tag":365,"props":387,"children":389},{"style":388},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[390],{"type":45,"value":391},"=",{"type":39,"tag":365,"props":393,"children":395},{"style":394},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[396],{"type":45,"value":397},"0.1",{"type":39,"tag":365,"props":399,"children":400},{"style":372},[401],{"type":45,"value":402},"      # Recommended: 10% of requests\n",{"type":39,"tag":365,"props":404,"children":406},{"class":367,"line":405},3,[407,412,416,421],{"type":39,"tag":365,"props":408,"children":409},{"style":382},[410],{"type":45,"value":411},"NIGHTWATCH_COMMAND_SAMPLE_RATE",{"type":39,"tag":365,"props":413,"children":414},{"style":388},[415],{"type":45,"value":391},{"type":39,"tag":365,"props":417,"children":418},{"style":394},[419],{"type":45,"value":420},"1.0",{"type":39,"tag":365,"props":422,"children":423},{"style":372},[424],{"type":45,"value":425},"      # Capture all commands\n",{"type":39,"tag":365,"props":427,"children":429},{"class":367,"line":428},4,[430,435,439,443],{"type":39,"tag":365,"props":431,"children":432},{"style":382},[433],{"type":45,"value":434},"NIGHTWATCH_EXCEPTION_SAMPLE_RATE",{"type":39,"tag":365,"props":436,"children":437},{"style":388},[438],{"type":45,"value":391},{"type":39,"tag":365,"props":440,"children":441},{"style":394},[442],{"type":45,"value":420},{"type":39,"tag":365,"props":444,"children":445},{"style":372},[446],{"type":45,"value":447},"    # Always capture exceptions\n",{"type":39,"tag":48,"props":449,"children":450},{},[451,456,458,463],{"type":39,"tag":272,"props":452,"children":453},{},[454],{"type":45,"value":455},"Recommendation",{"type":45,"value":457},": Start with ",{"type":39,"tag":307,"props":459,"children":461},{"className":460},[],[462],{"type":45,"value":397},{"type":45,"value":464}," (10%) for requests in production, adjust based on volume and needs.",{"type":39,"tag":48,"props":466,"children":467},{},[468,470,475,477,482],{"type":45,"value":469},"The full list of environment variables for sampling configuration and their default values can be found in the official ",{"type":39,"tag":112,"props":471,"children":473},{"href":150,"rel":472},[116],[474],{"type":45,"value":154},{"type":45,"value":476}," and ",{"type":39,"tag":112,"props":478,"children":480},{"href":162,"rel":479},[116],[481],{"type":45,"value":166},{"type":45,"value":483}," documentation pages.",{"type":39,"tag":344,"props":485,"children":487},{"id":486},"route-based-sampling",[488],{"type":45,"value":489},"Route-Based Sampling",{"type":39,"tag":48,"props":491,"children":492},{},[493,495,501],{"type":45,"value":494},"Apply different rates to specific routes using the ",{"type":39,"tag":307,"props":496,"children":498},{"className":497},[],[499],{"type":45,"value":500},"Sample",{"type":45,"value":502}," middleware:",{"type":39,"tag":300,"props":504,"children":509},{"className":505,"code":506,"language":507,"meta":508,"style":309},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use Illuminate\\Support\\Facades\\Route;\nuse Laravel\\Nightwatch\\Http\\Middleware\\Sample;\n\n\u002F\u002F Sample admin routes at 100%\nRoute::middleware(Sample::rate(1.0))->prefix('admin')->group(function () {\n    \u002F\u002F All admin routes sampled fully\n});\n\n\u002F\u002F Sample API routes at 5%\nRoute::middleware(Sample::rate(0.05))->prefix('api')->group(function () {\n    \u002F\u002F API routes sampled sparingly\n});\n\n\u002F\u002F Always sample critical endpoints\nRoute::post('\u002Fcheckout', [CheckoutController::class, 'process'])\n    ->middleware(Sample::always());\n\n\u002F\u002F Never sample health checks\nRoute::get('\u002Fhealth', [HealthController::class, 'check'])\n    ->middleware(Sample::never());\n","php","routes\u002Fweb.php",[510],{"type":39,"tag":307,"props":511,"children":512},{"__ignoreMap":309},[513,521,529,538,546,555,564,573,581,590,599,608,616,624,633,642,651,659,668,677],{"type":39,"tag":365,"props":514,"children":515},{"class":367,"line":368},[516],{"type":39,"tag":365,"props":517,"children":518},{},[519],{"type":45,"value":520},"use Illuminate\\Support\\Facades\\Route;\n",{"type":39,"tag":365,"props":522,"children":523},{"class":367,"line":378},[524],{"type":39,"tag":365,"props":525,"children":526},{},[527],{"type":45,"value":528},"use Laravel\\Nightwatch\\Http\\Middleware\\Sample;\n",{"type":39,"tag":365,"props":530,"children":531},{"class":367,"line":405},[532],{"type":39,"tag":365,"props":533,"children":535},{"emptyLinePlaceholder":534},true,[536],{"type":45,"value":537},"\n",{"type":39,"tag":365,"props":539,"children":540},{"class":367,"line":428},[541],{"type":39,"tag":365,"props":542,"children":543},{},[544],{"type":45,"value":545},"\u002F\u002F Sample admin routes at 100%\n",{"type":39,"tag":365,"props":547,"children":549},{"class":367,"line":548},5,[550],{"type":39,"tag":365,"props":551,"children":552},{},[553],{"type":45,"value":554},"Route::middleware(Sample::rate(1.0))->prefix('admin')->group(function () {\n",{"type":39,"tag":365,"props":556,"children":558},{"class":367,"line":557},6,[559],{"type":39,"tag":365,"props":560,"children":561},{},[562],{"type":45,"value":563},"    \u002F\u002F All admin routes sampled fully\n",{"type":39,"tag":365,"props":565,"children":567},{"class":367,"line":566},7,[568],{"type":39,"tag":365,"props":569,"children":570},{},[571],{"type":45,"value":572},"});\n",{"type":39,"tag":365,"props":574,"children":576},{"class":367,"line":575},8,[577],{"type":39,"tag":365,"props":578,"children":579},{"emptyLinePlaceholder":534},[580],{"type":45,"value":537},{"type":39,"tag":365,"props":582,"children":584},{"class":367,"line":583},9,[585],{"type":39,"tag":365,"props":586,"children":587},{},[588],{"type":45,"value":589},"\u002F\u002F Sample API routes at 5%\n",{"type":39,"tag":365,"props":591,"children":593},{"class":367,"line":592},10,[594],{"type":39,"tag":365,"props":595,"children":596},{},[597],{"type":45,"value":598},"Route::middleware(Sample::rate(0.05))->prefix('api')->group(function () {\n",{"type":39,"tag":365,"props":600,"children":602},{"class":367,"line":601},11,[603],{"type":39,"tag":365,"props":604,"children":605},{},[606],{"type":45,"value":607},"    \u002F\u002F API routes sampled sparingly\n",{"type":39,"tag":365,"props":609,"children":611},{"class":367,"line":610},12,[612],{"type":39,"tag":365,"props":613,"children":614},{},[615],{"type":45,"value":572},{"type":39,"tag":365,"props":617,"children":619},{"class":367,"line":618},13,[620],{"type":39,"tag":365,"props":621,"children":622},{"emptyLinePlaceholder":534},[623],{"type":45,"value":537},{"type":39,"tag":365,"props":625,"children":627},{"class":367,"line":626},14,[628],{"type":39,"tag":365,"props":629,"children":630},{},[631],{"type":45,"value":632},"\u002F\u002F Always sample critical endpoints\n",{"type":39,"tag":365,"props":634,"children":636},{"class":367,"line":635},15,[637],{"type":39,"tag":365,"props":638,"children":639},{},[640],{"type":45,"value":641},"Route::post('\u002Fcheckout', [CheckoutController::class, 'process'])\n",{"type":39,"tag":365,"props":643,"children":645},{"class":367,"line":644},16,[646],{"type":39,"tag":365,"props":647,"children":648},{},[649],{"type":45,"value":650},"    ->middleware(Sample::always());\n",{"type":39,"tag":365,"props":652,"children":654},{"class":367,"line":653},17,[655],{"type":39,"tag":365,"props":656,"children":657},{"emptyLinePlaceholder":534},[658],{"type":45,"value":537},{"type":39,"tag":365,"props":660,"children":662},{"class":367,"line":661},18,[663],{"type":39,"tag":365,"props":664,"children":665},{},[666],{"type":45,"value":667},"\u002F\u002F Never sample health checks\n",{"type":39,"tag":365,"props":669,"children":671},{"class":367,"line":670},19,[672],{"type":39,"tag":365,"props":673,"children":674},{},[675],{"type":45,"value":676},"Route::get('\u002Fhealth', [HealthController::class, 'check'])\n",{"type":39,"tag":365,"props":678,"children":680},{"class":367,"line":679},20,[681],{"type":39,"tag":365,"props":682,"children":683},{},[684],{"type":45,"value":685},"    ->middleware(Sample::never());\n",{"type":39,"tag":344,"props":687,"children":689},{"id":688},"unmatched-route-sampling",[690],{"type":45,"value":691},"Unmatched Route Sampling",{"type":39,"tag":48,"props":693,"children":694},{},[695],{"type":45,"value":696},"Handle 404\u002Fbot traffic with reduced sampling:",{"type":39,"tag":300,"props":698,"children":700},{"className":505,"code":699,"language":507,"meta":508,"style":309},"Route::fallback(fn () => abort(404))\n    ->middleware(Sample::rate(0.01));  \u002F\u002F 1% sampling for unmatched routes\n",[701],{"type":39,"tag":307,"props":702,"children":703},{"__ignoreMap":309},[704,712],{"type":39,"tag":365,"props":705,"children":706},{"class":367,"line":368},[707],{"type":39,"tag":365,"props":708,"children":709},{},[710],{"type":45,"value":711},"Route::fallback(fn () => abort(404))\n",{"type":39,"tag":365,"props":713,"children":714},{"class":367,"line":378},[715],{"type":39,"tag":365,"props":716,"children":717},{},[718],{"type":45,"value":719},"    ->middleware(Sample::rate(0.01));  \u002F\u002F 1% sampling for unmatched routes\n",{"type":39,"tag":344,"props":721,"children":723},{"id":722},"dynamic-sampling",[724],{"type":45,"value":725},"Dynamic Sampling",{"type":39,"tag":48,"props":727,"children":728},{},[729],{"type":45,"value":730},"Sample based on runtime conditions (user role, request attributes):",{"type":39,"tag":300,"props":732,"children":735},{"className":505,"code":733,"language":507,"meta":734,"style":309},"use Closure;\nuse Illuminate\\Http\\Request;\nuse Laravel\\Nightwatch\\Facades\\Nightwatch;\n\nclass SampleAdminRequests\n{\n    public function handle(Request $request, Closure $next)\n    {\n        if ($request->user()?->isAdmin()) {\n            Nightwatch::sample();  \u002F\u002F Always sample admin requests\n        }\n        return $next($request);\n    }\n}\n","app\u002FHttp\u002FMiddleware\u002FSampleAdminRequests.php",[736],{"type":39,"tag":307,"props":737,"children":738},{"__ignoreMap":309},[739,747,755,763,770,778,786,794,802,810,818,826,834,842],{"type":39,"tag":365,"props":740,"children":741},{"class":367,"line":368},[742],{"type":39,"tag":365,"props":743,"children":744},{},[745],{"type":45,"value":746},"use Closure;\n",{"type":39,"tag":365,"props":748,"children":749},{"class":367,"line":378},[750],{"type":39,"tag":365,"props":751,"children":752},{},[753],{"type":45,"value":754},"use Illuminate\\Http\\Request;\n",{"type":39,"tag":365,"props":756,"children":757},{"class":367,"line":405},[758],{"type":39,"tag":365,"props":759,"children":760},{},[761],{"type":45,"value":762},"use Laravel\\Nightwatch\\Facades\\Nightwatch;\n",{"type":39,"tag":365,"props":764,"children":765},{"class":367,"line":428},[766],{"type":39,"tag":365,"props":767,"children":768},{"emptyLinePlaceholder":534},[769],{"type":45,"value":537},{"type":39,"tag":365,"props":771,"children":772},{"class":367,"line":548},[773],{"type":39,"tag":365,"props":774,"children":775},{},[776],{"type":45,"value":777},"class SampleAdminRequests\n",{"type":39,"tag":365,"props":779,"children":780},{"class":367,"line":557},[781],{"type":39,"tag":365,"props":782,"children":783},{},[784],{"type":45,"value":785},"{\n",{"type":39,"tag":365,"props":787,"children":788},{"class":367,"line":566},[789],{"type":39,"tag":365,"props":790,"children":791},{},[792],{"type":45,"value":793},"    public function handle(Request $request, Closure $next)\n",{"type":39,"tag":365,"props":795,"children":796},{"class":367,"line":575},[797],{"type":39,"tag":365,"props":798,"children":799},{},[800],{"type":45,"value":801},"    {\n",{"type":39,"tag":365,"props":803,"children":804},{"class":367,"line":583},[805],{"type":39,"tag":365,"props":806,"children":807},{},[808],{"type":45,"value":809},"        if ($request->user()?->isAdmin()) {\n",{"type":39,"tag":365,"props":811,"children":812},{"class":367,"line":592},[813],{"type":39,"tag":365,"props":814,"children":815},{},[816],{"type":45,"value":817},"            Nightwatch::sample();  \u002F\u002F Always sample admin requests\n",{"type":39,"tag":365,"props":819,"children":820},{"class":367,"line":601},[821],{"type":39,"tag":365,"props":822,"children":823},{},[824],{"type":45,"value":825},"        }\n",{"type":39,"tag":365,"props":827,"children":828},{"class":367,"line":610},[829],{"type":39,"tag":365,"props":830,"children":831},{},[832],{"type":45,"value":833},"        return $next($request);\n",{"type":39,"tag":365,"props":835,"children":836},{"class":367,"line":618},[837],{"type":39,"tag":365,"props":838,"children":839},{},[840],{"type":45,"value":841},"    }\n",{"type":39,"tag":365,"props":843,"children":844},{"class":367,"line":626},[845],{"type":39,"tag":365,"props":846,"children":847},{},[848],{"type":45,"value":849},"}\n",{"type":39,"tag":344,"props":851,"children":853},{"id":852},"command-sampling",[854],{"type":45,"value":855},"Command Sampling",{"type":39,"tag":48,"props":857,"children":858},{},[859],{"type":45,"value":860},"Exclude specific commands from sampling:",{"type":39,"tag":300,"props":862,"children":865},{"className":505,"code":863,"language":507,"meta":864,"style":309},"use Illuminate\\Console\\Events\\CommandStarting;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Nightwatch\\Facades\\Nightwatch;\n\npublic function boot(): void\n{\n    Event::listen(function (CommandStarting $event) {\n        if (in_array($event->command, ['schedule:finish', 'horizon:snapshot'])) {\n            Nightwatch::dontSample();\n        }\n    });\n}\n","AppServiceProvider.php",[866],{"type":39,"tag":307,"props":867,"children":868},{"__ignoreMap":309},[869,877,885,892,899,907,914,922,930,938,945,953],{"type":39,"tag":365,"props":870,"children":871},{"class":367,"line":368},[872],{"type":39,"tag":365,"props":873,"children":874},{},[875],{"type":45,"value":876},"use Illuminate\\Console\\Events\\CommandStarting;\n",{"type":39,"tag":365,"props":878,"children":879},{"class":367,"line":378},[880],{"type":39,"tag":365,"props":881,"children":882},{},[883],{"type":45,"value":884},"use Illuminate\\Support\\Facades\\Event;\n",{"type":39,"tag":365,"props":886,"children":887},{"class":367,"line":405},[888],{"type":39,"tag":365,"props":889,"children":890},{},[891],{"type":45,"value":762},{"type":39,"tag":365,"props":893,"children":894},{"class":367,"line":428},[895],{"type":39,"tag":365,"props":896,"children":897},{"emptyLinePlaceholder":534},[898],{"type":45,"value":537},{"type":39,"tag":365,"props":900,"children":901},{"class":367,"line":548},[902],{"type":39,"tag":365,"props":903,"children":904},{},[905],{"type":45,"value":906},"public function boot(): void\n",{"type":39,"tag":365,"props":908,"children":909},{"class":367,"line":557},[910],{"type":39,"tag":365,"props":911,"children":912},{},[913],{"type":45,"value":785},{"type":39,"tag":365,"props":915,"children":916},{"class":367,"line":566},[917],{"type":39,"tag":365,"props":918,"children":919},{},[920],{"type":45,"value":921},"    Event::listen(function (CommandStarting $event) {\n",{"type":39,"tag":365,"props":923,"children":924},{"class":367,"line":575},[925],{"type":39,"tag":365,"props":926,"children":927},{},[928],{"type":45,"value":929},"        if (in_array($event->command, ['schedule:finish', 'horizon:snapshot'])) {\n",{"type":39,"tag":365,"props":931,"children":932},{"class":367,"line":583},[933],{"type":39,"tag":365,"props":934,"children":935},{},[936],{"type":45,"value":937},"            Nightwatch::dontSample();\n",{"type":39,"tag":365,"props":939,"children":940},{"class":367,"line":592},[941],{"type":39,"tag":365,"props":942,"children":943},{},[944],{"type":45,"value":825},{"type":39,"tag":365,"props":946,"children":947},{"class":367,"line":601},[948],{"type":39,"tag":365,"props":949,"children":950},{},[951],{"type":45,"value":952},"    });\n",{"type":39,"tag":365,"props":954,"children":955},{"class":367,"line":610},[956],{"type":39,"tag":365,"props":957,"children":958},{},[959],{"type":45,"value":849},{"type":39,"tag":344,"props":961,"children":963},{"id":962},"vendor-commands",[964],{"type":45,"value":965},"Vendor Commands",{"type":39,"tag":48,"props":967,"children":968},{},[969],{"type":45,"value":970},"Nightwatch automatically ignores framework\u002Finternal commands. Opt-in to capture them:",{"type":39,"tag":300,"props":972,"children":974},{"className":505,"code":973,"language":507,"meta":309,"style":309},"Nightwatch::captureDefaultVendorCommands();\n",[975],{"type":39,"tag":307,"props":976,"children":977},{"__ignoreMap":309},[978],{"type":39,"tag":365,"props":979,"children":980},{"class":367,"line":368},[981],{"type":39,"tag":365,"props":982,"children":983},{},[984],{"type":45,"value":973},{"type":39,"tag":313,"props":986,"children":987},{},[],{"type":39,"tag":54,"props":989,"children":991},{"id":990},"filtering-configuration",[992],{"type":45,"value":993},"Filtering Configuration",{"type":39,"tag":48,"props":995,"children":996},{},[997,999,1004,1006,1011,1012,1017,1018,1023,1024,1029,1031,1036],{"type":45,"value":998},"Filtering excludes specific events from collection after sampling. Use filtering to reduce noise and quota usage. Each event type has specific filtering methods documented on its respective page. Refer to the ",{"type":39,"tag":112,"props":1000,"children":1002},{"href":174,"rel":1001},[116],[1003],{"type":45,"value":178},{"type":45,"value":1005},", ",{"type":39,"tag":112,"props":1007,"children":1009},{"href":186,"rel":1008},[116],[1010],{"type":45,"value":190},{"type":45,"value":1005},{"type":39,"tag":112,"props":1013,"children":1015},{"href":198,"rel":1014},[116],[1016],{"type":45,"value":202},{"type":45,"value":1005},{"type":39,"tag":112,"props":1019,"children":1021},{"href":210,"rel":1020},[116],[1022],{"type":45,"value":214},{"type":45,"value":1005},{"type":39,"tag":112,"props":1025,"children":1027},{"href":222,"rel":1026},[116],[1028],{"type":45,"value":226},{"type":45,"value":1030},", and ",{"type":39,"tag":112,"props":1032,"children":1034},{"href":246,"rel":1033},[116],[1035],{"type":45,"value":250},{"type":45,"value":1037}," documentation for complete filtering options for each event type.",{"type":39,"tag":344,"props":1039,"children":1041},{"id":1040},"database-queries",[1042],{"type":45,"value":1043},"Database Queries",{"type":39,"tag":48,"props":1045,"children":1046},{},[1047,1052],{"type":39,"tag":272,"props":1048,"children":1049},{},[1050],{"type":45,"value":1051},"Filter all queries",{"type":45,"value":1053}," (disable query collection):",{"type":39,"tag":300,"props":1055,"children":1057},{"className":357,"code":1056,"language":359,"meta":309,"style":309},"NIGHTWATCH_IGNORE_QUERIES=true\n",[1058],{"type":39,"tag":307,"props":1059,"children":1060},{"__ignoreMap":309},[1061],{"type":39,"tag":365,"props":1062,"children":1063},{"class":367,"line":368},[1064,1069,1073],{"type":39,"tag":365,"props":1065,"children":1066},{"style":382},[1067],{"type":45,"value":1068},"NIGHTWATCH_IGNORE_QUERIES",{"type":39,"tag":365,"props":1070,"children":1071},{"style":388},[1072],{"type":45,"value":391},{"type":39,"tag":365,"props":1074,"children":1075},{"style":394},[1076],{"type":45,"value":1077},"true\n",{"type":39,"tag":48,"props":1079,"children":1080},{},[1081,1086],{"type":39,"tag":272,"props":1082,"children":1083},{},[1084],{"type":45,"value":1085},"Filter specific queries",{"type":45,"value":1087}," by SQL pattern:",{"type":39,"tag":300,"props":1089,"children":1091},{"className":505,"code":1090,"language":507,"meta":864,"style":309},"use Laravel\\Nightwatch\\Facades\\Nightwatch;\nuse Laravel\\Nightwatch\\Records\\Query;\n\npublic function boot(): void\n{\n    \u002F\u002F Filter job table queries (PostgreSQL)\n    Nightwatch::rejectQueries(function (Query $query) {\n        return str_contains($query->sql, 'into \"jobs\"');\n    });\n\n    \u002F\u002F Filter cache table queries (MySQL)\n    Nightwatch::rejectQueries(function (Query $query) {\n        return str_contains($query->sql, 'from `cache`')\n            || str_contains($query->sql, 'into `cache`');\n    });\n}\n",[1092],{"type":39,"tag":307,"props":1093,"children":1094},{"__ignoreMap":309},[1095,1102,1110,1117,1124,1131,1139,1147,1155,1162,1169,1177,1184,1192,1200,1207],{"type":39,"tag":365,"props":1096,"children":1097},{"class":367,"line":368},[1098],{"type":39,"tag":365,"props":1099,"children":1100},{},[1101],{"type":45,"value":762},{"type":39,"tag":365,"props":1103,"children":1104},{"class":367,"line":378},[1105],{"type":39,"tag":365,"props":1106,"children":1107},{},[1108],{"type":45,"value":1109},"use Laravel\\Nightwatch\\Records\\Query;\n",{"type":39,"tag":365,"props":1111,"children":1112},{"class":367,"line":405},[1113],{"type":39,"tag":365,"props":1114,"children":1115},{"emptyLinePlaceholder":534},[1116],{"type":45,"value":537},{"type":39,"tag":365,"props":1118,"children":1119},{"class":367,"line":428},[1120],{"type":39,"tag":365,"props":1121,"children":1122},{},[1123],{"type":45,"value":906},{"type":39,"tag":365,"props":1125,"children":1126},{"class":367,"line":548},[1127],{"type":39,"tag":365,"props":1128,"children":1129},{},[1130],{"type":45,"value":785},{"type":39,"tag":365,"props":1132,"children":1133},{"class":367,"line":557},[1134],{"type":39,"tag":365,"props":1135,"children":1136},{},[1137],{"type":45,"value":1138},"    \u002F\u002F Filter job table queries (PostgreSQL)\n",{"type":39,"tag":365,"props":1140,"children":1141},{"class":367,"line":566},[1142],{"type":39,"tag":365,"props":1143,"children":1144},{},[1145],{"type":45,"value":1146},"    Nightwatch::rejectQueries(function (Query $query) {\n",{"type":39,"tag":365,"props":1148,"children":1149},{"class":367,"line":575},[1150],{"type":39,"tag":365,"props":1151,"children":1152},{},[1153],{"type":45,"value":1154},"        return str_contains($query->sql, 'into \"jobs\"');\n",{"type":39,"tag":365,"props":1156,"children":1157},{"class":367,"line":583},[1158],{"type":39,"tag":365,"props":1159,"children":1160},{},[1161],{"type":45,"value":952},{"type":39,"tag":365,"props":1163,"children":1164},{"class":367,"line":592},[1165],{"type":39,"tag":365,"props":1166,"children":1167},{"emptyLinePlaceholder":534},[1168],{"type":45,"value":537},{"type":39,"tag":365,"props":1170,"children":1171},{"class":367,"line":601},[1172],{"type":39,"tag":365,"props":1173,"children":1174},{},[1175],{"type":45,"value":1176},"    \u002F\u002F Filter cache table queries (MySQL)\n",{"type":39,"tag":365,"props":1178,"children":1179},{"class":367,"line":610},[1180],{"type":39,"tag":365,"props":1181,"children":1182},{},[1183],{"type":45,"value":1146},{"type":39,"tag":365,"props":1185,"children":1186},{"class":367,"line":618},[1187],{"type":39,"tag":365,"props":1188,"children":1189},{},[1190],{"type":45,"value":1191},"        return str_contains($query->sql, 'from `cache`')\n",{"type":39,"tag":365,"props":1193,"children":1194},{"class":367,"line":626},[1195],{"type":39,"tag":365,"props":1196,"children":1197},{},[1198],{"type":45,"value":1199},"            || str_contains($query->sql, 'into `cache`');\n",{"type":39,"tag":365,"props":1201,"children":1202},{"class":367,"line":635},[1203],{"type":39,"tag":365,"props":1204,"children":1205},{},[1206],{"type":45,"value":952},{"type":39,"tag":365,"props":1208,"children":1209},{"class":367,"line":644},[1210],{"type":39,"tag":365,"props":1211,"children":1212},{},[1213],{"type":45,"value":849},{"type":39,"tag":344,"props":1215,"children":1217},{"id":1216},"cache-events",[1218],{"type":45,"value":1219},"Cache Events",{"type":39,"tag":48,"props":1221,"children":1222},{},[1223,1228],{"type":39,"tag":272,"props":1224,"children":1225},{},[1226],{"type":45,"value":1227},"Filter all cache events",{"type":45,"value":1229},":",{"type":39,"tag":300,"props":1231,"children":1233},{"className":357,"code":1232,"language":359,"meta":309,"style":309},"NIGHTWATCH_IGNORE_CACHE_EVENTS=true\n",[1234],{"type":39,"tag":307,"props":1235,"children":1236},{"__ignoreMap":309},[1237],{"type":39,"tag":365,"props":1238,"children":1239},{"class":367,"line":368},[1240,1245,1249],{"type":39,"tag":365,"props":1241,"children":1242},{"style":382},[1243],{"type":45,"value":1244},"NIGHTWATCH_IGNORE_CACHE_EVENTS",{"type":39,"tag":365,"props":1246,"children":1247},{"style":388},[1248],{"type":45,"value":391},{"type":39,"tag":365,"props":1250,"children":1251},{"style":394},[1252],{"type":45,"value":1077},{"type":39,"tag":48,"props":1254,"children":1255},{},[1256,1261],{"type":39,"tag":272,"props":1257,"children":1258},{},[1259],{"type":45,"value":1260},"Filter by cache key patterns",{"type":45,"value":1229},{"type":39,"tag":300,"props":1263,"children":1265},{"className":505,"code":1264,"language":507,"meta":309,"style":309},"Nightwatch::rejectCacheKeys([\n    'my-app:users',                    \u002F\u002F Exact match\n    '\u002F^my-app:posts:\u002F',                \u002F\u002F Regex: starts with my-app:posts:\n    '\u002F^[a-zA-Z0-9]{40}$\u002F',             \u002F\u002F Regex: session IDs\n]);\n",[1266],{"type":39,"tag":307,"props":1267,"children":1268},{"__ignoreMap":309},[1269,1277,1290,1303,1316],{"type":39,"tag":365,"props":1270,"children":1271},{"class":367,"line":368},[1272],{"type":39,"tag":365,"props":1273,"children":1274},{},[1275],{"type":45,"value":1276},"Nightwatch::rejectCacheKeys([\n",{"type":39,"tag":365,"props":1278,"children":1279},{"class":367,"line":378},[1280,1285],{"type":39,"tag":365,"props":1281,"children":1282},{},[1283],{"type":45,"value":1284},"    'my-app:users',",{"type":39,"tag":365,"props":1286,"children":1287},{},[1288],{"type":45,"value":1289},"                    \u002F\u002F Exact match\n",{"type":39,"tag":365,"props":1291,"children":1292},{"class":367,"line":405},[1293,1298],{"type":39,"tag":365,"props":1294,"children":1295},{},[1296],{"type":45,"value":1297},"    '\u002F^my-app:posts:\u002F',",{"type":39,"tag":365,"props":1299,"children":1300},{},[1301],{"type":45,"value":1302},"                \u002F\u002F Regex: starts with my-app:posts:\n",{"type":39,"tag":365,"props":1304,"children":1305},{"class":367,"line":428},[1306,1311],{"type":39,"tag":365,"props":1307,"children":1308},{},[1309],{"type":45,"value":1310},"    '\u002F^[a-zA-Z0-9]{40}$\u002F',",{"type":39,"tag":365,"props":1312,"children":1313},{},[1314],{"type":45,"value":1315},"             \u002F\u002F Regex: session IDs\n",{"type":39,"tag":365,"props":1317,"children":1318},{"class":367,"line":548},[1319],{"type":39,"tag":365,"props":1320,"children":1321},{},[1322],{"type":45,"value":1323},"]);\n",{"type":39,"tag":48,"props":1325,"children":1326},{},[1327,1332],{"type":39,"tag":272,"props":1328,"children":1329},{},[1330],{"type":45,"value":1331},"Filter with callback",{"type":45,"value":1229},{"type":39,"tag":300,"props":1334,"children":1336},{"className":505,"code":1335,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\CacheEvent;\n\nNightwatch::rejectCacheEvents(function (CacheEvent $cacheEvent) {\n    return str_starts_with($cacheEvent->key, 'temp:');\n});\n",[1337],{"type":39,"tag":307,"props":1338,"children":1339},{"__ignoreMap":309},[1340,1348,1355,1363,1371],{"type":39,"tag":365,"props":1341,"children":1342},{"class":367,"line":368},[1343],{"type":39,"tag":365,"props":1344,"children":1345},{},[1346],{"type":45,"value":1347},"use Laravel\\Nightwatch\\Records\\CacheEvent;\n",{"type":39,"tag":365,"props":1349,"children":1350},{"class":367,"line":378},[1351],{"type":39,"tag":365,"props":1352,"children":1353},{"emptyLinePlaceholder":534},[1354],{"type":45,"value":537},{"type":39,"tag":365,"props":1356,"children":1357},{"class":367,"line":405},[1358],{"type":39,"tag":365,"props":1359,"children":1360},{},[1361],{"type":45,"value":1362},"Nightwatch::rejectCacheEvents(function (CacheEvent $cacheEvent) {\n",{"type":39,"tag":365,"props":1364,"children":1365},{"class":367,"line":428},[1366],{"type":39,"tag":365,"props":1367,"children":1368},{},[1369],{"type":45,"value":1370},"    return str_starts_with($cacheEvent->key, 'temp:');\n",{"type":39,"tag":365,"props":1372,"children":1373},{"class":367,"line":548},[1374],{"type":39,"tag":365,"props":1375,"children":1376},{},[1377],{"type":45,"value":572},{"type":39,"tag":344,"props":1379,"children":1381},{"id":1380},"mail-events",[1382],{"type":45,"value":1383},"Mail Events",{"type":39,"tag":48,"props":1385,"children":1386},{},[1387,1392],{"type":39,"tag":272,"props":1388,"children":1389},{},[1390],{"type":45,"value":1391},"Filter all mail",{"type":45,"value":1229},{"type":39,"tag":300,"props":1394,"children":1396},{"className":357,"code":1395,"language":359,"meta":309,"style":309},"NIGHTWATCH_IGNORE_MAIL=true\n",[1397],{"type":39,"tag":307,"props":1398,"children":1399},{"__ignoreMap":309},[1400],{"type":39,"tag":365,"props":1401,"children":1402},{"class":367,"line":368},[1403,1408,1412],{"type":39,"tag":365,"props":1404,"children":1405},{"style":382},[1406],{"type":45,"value":1407},"NIGHTWATCH_IGNORE_MAIL",{"type":39,"tag":365,"props":1409,"children":1410},{"style":388},[1411],{"type":45,"value":391},{"type":39,"tag":365,"props":1413,"children":1414},{"style":394},[1415],{"type":45,"value":1077},{"type":39,"tag":48,"props":1417,"children":1418},{},[1419,1424],{"type":39,"tag":272,"props":1420,"children":1421},{},[1422],{"type":45,"value":1423},"Filter specific mail",{"type":45,"value":1229},{"type":39,"tag":300,"props":1426,"children":1428},{"className":505,"code":1427,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\Mail;\n\nNightwatch::rejectMail(function (Mail $mail) {\n    return str_contains($mail->subject, 'Newsletter');\n});\n",[1429],{"type":39,"tag":307,"props":1430,"children":1431},{"__ignoreMap":309},[1432,1440,1447,1455,1463],{"type":39,"tag":365,"props":1433,"children":1434},{"class":367,"line":368},[1435],{"type":39,"tag":365,"props":1436,"children":1437},{},[1438],{"type":45,"value":1439},"use Laravel\\Nightwatch\\Records\\Mail;\n",{"type":39,"tag":365,"props":1441,"children":1442},{"class":367,"line":378},[1443],{"type":39,"tag":365,"props":1444,"children":1445},{"emptyLinePlaceholder":534},[1446],{"type":45,"value":537},{"type":39,"tag":365,"props":1448,"children":1449},{"class":367,"line":405},[1450],{"type":39,"tag":365,"props":1451,"children":1452},{},[1453],{"type":45,"value":1454},"Nightwatch::rejectMail(function (Mail $mail) {\n",{"type":39,"tag":365,"props":1456,"children":1457},{"class":367,"line":428},[1458],{"type":39,"tag":365,"props":1459,"children":1460},{},[1461],{"type":45,"value":1462},"    return str_contains($mail->subject, 'Newsletter');\n",{"type":39,"tag":365,"props":1464,"children":1465},{"class":367,"line":548},[1466],{"type":39,"tag":365,"props":1467,"children":1468},{},[1469],{"type":45,"value":572},{"type":39,"tag":344,"props":1471,"children":1473},{"id":1472},"notification-events",[1474],{"type":45,"value":1475},"Notification Events",{"type":39,"tag":48,"props":1477,"children":1478},{},[1479,1484],{"type":39,"tag":272,"props":1480,"children":1481},{},[1482],{"type":45,"value":1483},"Filter all notifications",{"type":45,"value":1229},{"type":39,"tag":300,"props":1486,"children":1488},{"className":357,"code":1487,"language":359,"meta":309,"style":309},"NIGHTWATCH_IGNORE_NOTIFICATIONS=true\n",[1489],{"type":39,"tag":307,"props":1490,"children":1491},{"__ignoreMap":309},[1492],{"type":39,"tag":365,"props":1493,"children":1494},{"class":367,"line":368},[1495,1500,1504],{"type":39,"tag":365,"props":1496,"children":1497},{"style":382},[1498],{"type":45,"value":1499},"NIGHTWATCH_IGNORE_NOTIFICATIONS",{"type":39,"tag":365,"props":1501,"children":1502},{"style":388},[1503],{"type":45,"value":391},{"type":39,"tag":365,"props":1505,"children":1506},{"style":394},[1507],{"type":45,"value":1077},{"type":39,"tag":48,"props":1509,"children":1510},{},[1511,1516],{"type":39,"tag":272,"props":1512,"children":1513},{},[1514],{"type":45,"value":1515},"Filter by channel",{"type":45,"value":1229},{"type":39,"tag":300,"props":1518,"children":1520},{"className":505,"code":1519,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\Notification;\n\nNightwatch::rejectNotifications(function (Notification $notification) {\n    return $notification->channel === 'database';\n});\n",[1521],{"type":39,"tag":307,"props":1522,"children":1523},{"__ignoreMap":309},[1524,1532,1539,1547,1555],{"type":39,"tag":365,"props":1525,"children":1526},{"class":367,"line":368},[1527],{"type":39,"tag":365,"props":1528,"children":1529},{},[1530],{"type":45,"value":1531},"use Laravel\\Nightwatch\\Records\\Notification;\n",{"type":39,"tag":365,"props":1533,"children":1534},{"class":367,"line":378},[1535],{"type":39,"tag":365,"props":1536,"children":1537},{"emptyLinePlaceholder":534},[1538],{"type":45,"value":537},{"type":39,"tag":365,"props":1540,"children":1541},{"class":367,"line":405},[1542],{"type":39,"tag":365,"props":1543,"children":1544},{},[1545],{"type":45,"value":1546},"Nightwatch::rejectNotifications(function (Notification $notification) {\n",{"type":39,"tag":365,"props":1548,"children":1549},{"class":367,"line":428},[1550],{"type":39,"tag":365,"props":1551,"children":1552},{},[1553],{"type":45,"value":1554},"    return $notification->channel === 'database';\n",{"type":39,"tag":365,"props":1556,"children":1557},{"class":367,"line":548},[1558],{"type":39,"tag":365,"props":1559,"children":1560},{},[1561],{"type":45,"value":572},{"type":39,"tag":344,"props":1563,"children":1565},{"id":1564},"outgoing-http-requests",[1566],{"type":45,"value":1567},"Outgoing HTTP Requests",{"type":39,"tag":48,"props":1569,"children":1570},{},[1571,1576],{"type":39,"tag":272,"props":1572,"children":1573},{},[1574],{"type":45,"value":1575},"Filter all outgoing requests",{"type":45,"value":1229},{"type":39,"tag":300,"props":1578,"children":1580},{"className":357,"code":1579,"language":359,"meta":309,"style":309},"NIGHTWATCH_IGNORE_OUTGOING_REQUESTS=true\n",[1581],{"type":39,"tag":307,"props":1582,"children":1583},{"__ignoreMap":309},[1584],{"type":39,"tag":365,"props":1585,"children":1586},{"class":367,"line":368},[1587,1592,1596],{"type":39,"tag":365,"props":1588,"children":1589},{"style":382},[1590],{"type":45,"value":1591},"NIGHTWATCH_IGNORE_OUTGOING_REQUESTS",{"type":39,"tag":365,"props":1593,"children":1594},{"style":388},[1595],{"type":45,"value":391},{"type":39,"tag":365,"props":1597,"children":1598},{"style":394},[1599],{"type":45,"value":1077},{"type":39,"tag":48,"props":1601,"children":1602},{},[1603,1608],{"type":39,"tag":272,"props":1604,"children":1605},{},[1606],{"type":45,"value":1607},"Filter by URL",{"type":45,"value":1229},{"type":39,"tag":300,"props":1610,"children":1612},{"className":505,"code":1611,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\OutgoingRequest;\n\nNightwatch::rejectOutgoingRequests(function (OutgoingRequest $request) {\n    return str_contains($request->url, 'analytics.example.com');\n});\n",[1613],{"type":39,"tag":307,"props":1614,"children":1615},{"__ignoreMap":309},[1616,1624,1631,1639,1647],{"type":39,"tag":365,"props":1617,"children":1618},{"class":367,"line":368},[1619],{"type":39,"tag":365,"props":1620,"children":1621},{},[1622],{"type":45,"value":1623},"use Laravel\\Nightwatch\\Records\\OutgoingRequest;\n",{"type":39,"tag":365,"props":1625,"children":1626},{"class":367,"line":378},[1627],{"type":39,"tag":365,"props":1628,"children":1629},{"emptyLinePlaceholder":534},[1630],{"type":45,"value":537},{"type":39,"tag":365,"props":1632,"children":1633},{"class":367,"line":405},[1634],{"type":39,"tag":365,"props":1635,"children":1636},{},[1637],{"type":45,"value":1638},"Nightwatch::rejectOutgoingRequests(function (OutgoingRequest $request) {\n",{"type":39,"tag":365,"props":1640,"children":1641},{"class":367,"line":428},[1642],{"type":39,"tag":365,"props":1643,"children":1644},{},[1645],{"type":45,"value":1646},"    return str_contains($request->url, 'analytics.example.com');\n",{"type":39,"tag":365,"props":1648,"children":1649},{"class":367,"line":548},[1650],{"type":39,"tag":365,"props":1651,"children":1652},{},[1653],{"type":45,"value":572},{"type":39,"tag":344,"props":1655,"children":1657},{"id":1656},"queued-jobs",[1658],{"type":45,"value":1659},"Queued Jobs",{"type":39,"tag":48,"props":1661,"children":1662},{},[1663,1668],{"type":39,"tag":272,"props":1664,"children":1665},{},[1666],{"type":45,"value":1667},"Filter specific jobs",{"type":45,"value":1229},{"type":39,"tag":300,"props":1670,"children":1672},{"className":505,"code":1671,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\QueuedJob;\n\nNightwatch::rejectQueuedJobs(function (QueuedJob $job) {\n    return $job->name === 'App\\Jobs\\LowPriorityJob';\n});\n",[1673],{"type":39,"tag":307,"props":1674,"children":1675},{"__ignoreMap":309},[1676,1684,1691,1699,1707],{"type":39,"tag":365,"props":1677,"children":1678},{"class":367,"line":368},[1679],{"type":39,"tag":365,"props":1680,"children":1681},{},[1682],{"type":45,"value":1683},"use Laravel\\Nightwatch\\Records\\QueuedJob;\n",{"type":39,"tag":365,"props":1685,"children":1686},{"class":367,"line":378},[1687],{"type":39,"tag":365,"props":1688,"children":1689},{"emptyLinePlaceholder":534},[1690],{"type":45,"value":537},{"type":39,"tag":365,"props":1692,"children":1693},{"class":367,"line":405},[1694],{"type":39,"tag":365,"props":1695,"children":1696},{},[1697],{"type":45,"value":1698},"Nightwatch::rejectQueuedJobs(function (QueuedJob $job) {\n",{"type":39,"tag":365,"props":1700,"children":1701},{"class":367,"line":428},[1702],{"type":39,"tag":365,"props":1703,"children":1704},{},[1705],{"type":45,"value":1706},"    return $job->name === 'App\\Jobs\\LowPriorityJob';\n",{"type":39,"tag":365,"props":1708,"children":1709},{"class":367,"line":548},[1710],{"type":39,"tag":365,"props":1711,"children":1712},{},[1713],{"type":45,"value":572},{"type":39,"tag":344,"props":1715,"children":1717},{"id":1716},"decoupling-job-sampling",[1718],{"type":45,"value":1719},"Decoupling Job Sampling",{"type":39,"tag":48,"props":1721,"children":1722},{},[1723],{"type":45,"value":1724},"Sample jobs independently from parent contexts:",{"type":39,"tag":300,"props":1726,"children":1728},{"className":505,"code":1727,"language":507,"meta":309,"style":309},"use Illuminate\\Support\\Facades\\Queue;\n\npublic function boot(): void\n{\n    Queue::before(fn () => Nightwatch::sample(rate: 0.5));\n}\n",[1729],{"type":39,"tag":307,"props":1730,"children":1731},{"__ignoreMap":309},[1732,1740,1747,1754,1761,1769],{"type":39,"tag":365,"props":1733,"children":1734},{"class":367,"line":368},[1735],{"type":39,"tag":365,"props":1736,"children":1737},{},[1738],{"type":45,"value":1739},"use Illuminate\\Support\\Facades\\Queue;\n",{"type":39,"tag":365,"props":1741,"children":1742},{"class":367,"line":378},[1743],{"type":39,"tag":365,"props":1744,"children":1745},{"emptyLinePlaceholder":534},[1746],{"type":45,"value":537},{"type":39,"tag":365,"props":1748,"children":1749},{"class":367,"line":405},[1750],{"type":39,"tag":365,"props":1751,"children":1752},{},[1753],{"type":45,"value":906},{"type":39,"tag":365,"props":1755,"children":1756},{"class":367,"line":428},[1757],{"type":39,"tag":365,"props":1758,"children":1759},{},[1760],{"type":45,"value":785},{"type":39,"tag":365,"props":1762,"children":1763},{"class":367,"line":548},[1764],{"type":39,"tag":365,"props":1765,"children":1766},{},[1767],{"type":45,"value":1768},"    Queue::before(fn () => Nightwatch::sample(rate: 0.5));\n",{"type":39,"tag":365,"props":1770,"children":1771},{"class":367,"line":557},[1772],{"type":39,"tag":365,"props":1773,"children":1774},{},[1775],{"type":45,"value":849},{"type":39,"tag":313,"props":1777,"children":1778},{},[],{"type":39,"tag":54,"props":1780,"children":1782},{"id":1781},"redaction-configuration",[1783],{"type":45,"value":1784},"Redaction Configuration",{"type":39,"tag":48,"props":1786,"children":1787},{},[1788],{"type":45,"value":1789},"Redaction modifies captured data to remove or obfuscate sensitive information. Unlike filtering, redaction keeps the event but sanitizes its content. For authoritative details on what data can be redacted from each event type and the exact callback signatures, consult the individual event type documentation pages referenced in the filtering section above.",{"type":39,"tag":344,"props":1791,"children":1793},{"id":1792},"request-redaction",[1794],{"type":45,"value":1795},"Request Redaction",{"type":39,"tag":48,"props":1797,"children":1798},{},[1799,1804],{"type":39,"tag":272,"props":1800,"children":1801},{},[1802],{"type":45,"value":1803},"Redact sensitive headers",{"type":45,"value":1805}," (automatically redacts: Authorization, Cookie, X-XSRF-TOKEN):",{"type":39,"tag":300,"props":1807,"children":1809},{"className":357,"code":1808,"language":359,"meta":309,"style":309},"# Customize redacted headers\nNIGHTWATCH_REDACT_HEADERS=Authorization,Cookie,Proxy-Authorization,X-API-Key\n\n# Disable header collection entirely\nNIGHTWATCH_IGNORE_REQUEST_HEADERS=true\n",[1810],{"type":39,"tag":307,"props":1811,"children":1812},{"__ignoreMap":309},[1813,1821,1838,1845,1853],{"type":39,"tag":365,"props":1814,"children":1815},{"class":367,"line":368},[1816],{"type":39,"tag":365,"props":1817,"children":1818},{"style":372},[1819],{"type":45,"value":1820},"# Customize redacted headers\n",{"type":39,"tag":365,"props":1822,"children":1823},{"class":367,"line":378},[1824,1829,1833],{"type":39,"tag":365,"props":1825,"children":1826},{"style":382},[1827],{"type":45,"value":1828},"NIGHTWATCH_REDACT_HEADERS",{"type":39,"tag":365,"props":1830,"children":1831},{"style":388},[1832],{"type":45,"value":391},{"type":39,"tag":365,"props":1834,"children":1835},{"style":394},[1836],{"type":45,"value":1837},"Authorization,Cookie,Proxy-Authorization,X-API-Key\n",{"type":39,"tag":365,"props":1839,"children":1840},{"class":367,"line":405},[1841],{"type":39,"tag":365,"props":1842,"children":1843},{"emptyLinePlaceholder":534},[1844],{"type":45,"value":537},{"type":39,"tag":365,"props":1846,"children":1847},{"class":367,"line":428},[1848],{"type":39,"tag":365,"props":1849,"children":1850},{"style":372},[1851],{"type":45,"value":1852},"# Disable header collection entirely\n",{"type":39,"tag":365,"props":1854,"children":1855},{"class":367,"line":548},[1856,1861,1865],{"type":39,"tag":365,"props":1857,"children":1858},{"style":382},[1859],{"type":45,"value":1860},"NIGHTWATCH_IGNORE_REQUEST_HEADERS",{"type":39,"tag":365,"props":1862,"children":1863},{"style":388},[1864],{"type":45,"value":391},{"type":39,"tag":365,"props":1866,"children":1867},{"style":394},[1868],{"type":45,"value":1077},{"type":39,"tag":48,"props":1870,"children":1871},{},[1872,1877],{"type":39,"tag":272,"props":1873,"children":1874},{},[1875],{"type":45,"value":1876},"Redact request payloads",{"type":45,"value":1878}," (disabled by default):",{"type":39,"tag":300,"props":1880,"children":1882},{"className":357,"code":1881,"language":359,"meta":309,"style":309},"# Enable payload capture\nNIGHTWATCH_CAPTURE_REQUEST_PAYLOAD=true\n\n# Customize redacted fields\nNIGHTWATCH_REDACT_PAYLOAD_FIELDS=password,password_confirmation,ssn,credit_card\n",[1883],{"type":39,"tag":307,"props":1884,"children":1885},{"__ignoreMap":309},[1886,1894,1910,1917,1925],{"type":39,"tag":365,"props":1887,"children":1888},{"class":367,"line":368},[1889],{"type":39,"tag":365,"props":1890,"children":1891},{"style":372},[1892],{"type":45,"value":1893},"# Enable payload capture\n",{"type":39,"tag":365,"props":1895,"children":1896},{"class":367,"line":378},[1897,1902,1906],{"type":39,"tag":365,"props":1898,"children":1899},{"style":382},[1900],{"type":45,"value":1901},"NIGHTWATCH_CAPTURE_REQUEST_PAYLOAD",{"type":39,"tag":365,"props":1903,"children":1904},{"style":388},[1905],{"type":45,"value":391},{"type":39,"tag":365,"props":1907,"children":1908},{"style":394},[1909],{"type":45,"value":1077},{"type":39,"tag":365,"props":1911,"children":1912},{"class":367,"line":405},[1913],{"type":39,"tag":365,"props":1914,"children":1915},{"emptyLinePlaceholder":534},[1916],{"type":45,"value":537},{"type":39,"tag":365,"props":1918,"children":1919},{"class":367,"line":428},[1920],{"type":39,"tag":365,"props":1921,"children":1922},{"style":372},[1923],{"type":45,"value":1924},"# Customize redacted fields\n",{"type":39,"tag":365,"props":1926,"children":1927},{"class":367,"line":548},[1928,1933,1937],{"type":39,"tag":365,"props":1929,"children":1930},{"style":382},[1931],{"type":45,"value":1932},"NIGHTWATCH_REDACT_PAYLOAD_FIELDS",{"type":39,"tag":365,"props":1934,"children":1935},{"style":388},[1936],{"type":45,"value":391},{"type":39,"tag":365,"props":1938,"children":1939},{"style":394},[1940],{"type":45,"value":1941},"password,password_confirmation,ssn,credit_card\n",{"type":39,"tag":48,"props":1943,"children":1944},{},[1945,1950],{"type":39,"tag":272,"props":1946,"children":1947},{},[1948],{"type":45,"value":1949},"Programmatic redaction",{"type":45,"value":1229},{"type":39,"tag":300,"props":1952,"children":1954},{"className":505,"code":1953,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Facades\\Nightwatch;\nuse Laravel\\Nightwatch\\Records\\Request;\n\nNightwatch::redactRequests(function (Request $request) {\n    $request->url = str_replace('secret', '***', $request->url);\n    $request->ip = preg_replace('\u002F\\d+$\u002F', '***', $request->ip);\n});\n",[1955],{"type":39,"tag":307,"props":1956,"children":1957},{"__ignoreMap":309},[1958,1965,1973,1980,1988,1996,2004],{"type":39,"tag":365,"props":1959,"children":1960},{"class":367,"line":368},[1961],{"type":39,"tag":365,"props":1962,"children":1963},{},[1964],{"type":45,"value":762},{"type":39,"tag":365,"props":1966,"children":1967},{"class":367,"line":378},[1968],{"type":39,"tag":365,"props":1969,"children":1970},{},[1971],{"type":45,"value":1972},"use Laravel\\Nightwatch\\Records\\Request;\n",{"type":39,"tag":365,"props":1974,"children":1975},{"class":367,"line":405},[1976],{"type":39,"tag":365,"props":1977,"children":1978},{"emptyLinePlaceholder":534},[1979],{"type":45,"value":537},{"type":39,"tag":365,"props":1981,"children":1982},{"class":367,"line":428},[1983],{"type":39,"tag":365,"props":1984,"children":1985},{},[1986],{"type":45,"value":1987},"Nightwatch::redactRequests(function (Request $request) {\n",{"type":39,"tag":365,"props":1989,"children":1990},{"class":367,"line":548},[1991],{"type":39,"tag":365,"props":1992,"children":1993},{},[1994],{"type":45,"value":1995},"    $request->url = str_replace('secret', '***', $request->url);\n",{"type":39,"tag":365,"props":1997,"children":1998},{"class":367,"line":557},[1999],{"type":39,"tag":365,"props":2000,"children":2001},{},[2002],{"type":45,"value":2003},"    $request->ip = preg_replace('\u002F\\d+$\u002F', '***', $request->ip);\n",{"type":39,"tag":365,"props":2005,"children":2006},{"class":367,"line":566},[2007],{"type":39,"tag":365,"props":2008,"children":2009},{},[2010],{"type":45,"value":572},{"type":39,"tag":344,"props":2012,"children":2014},{"id":2013},"query-redaction",[2015],{"type":45,"value":2016},"Query Redaction",{"type":39,"tag":300,"props":2018,"children":2020},{"className":505,"code":2019,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\Query;\n\nNightwatch::redactQueries(function (Query $query) {\n    $query->sql = str_replace('secret_token', '***', $query->sql);\n});\n",[2021],{"type":39,"tag":307,"props":2022,"children":2023},{"__ignoreMap":309},[2024,2031,2038,2046,2054],{"type":39,"tag":365,"props":2025,"children":2026},{"class":367,"line":368},[2027],{"type":39,"tag":365,"props":2028,"children":2029},{},[2030],{"type":45,"value":1109},{"type":39,"tag":365,"props":2032,"children":2033},{"class":367,"line":378},[2034],{"type":39,"tag":365,"props":2035,"children":2036},{"emptyLinePlaceholder":534},[2037],{"type":45,"value":537},{"type":39,"tag":365,"props":2039,"children":2040},{"class":367,"line":405},[2041],{"type":39,"tag":365,"props":2042,"children":2043},{},[2044],{"type":45,"value":2045},"Nightwatch::redactQueries(function (Query $query) {\n",{"type":39,"tag":365,"props":2047,"children":2048},{"class":367,"line":428},[2049],{"type":39,"tag":365,"props":2050,"children":2051},{},[2052],{"type":45,"value":2053},"    $query->sql = str_replace('secret_token', '***', $query->sql);\n",{"type":39,"tag":365,"props":2055,"children":2056},{"class":367,"line":548},[2057],{"type":39,"tag":365,"props":2058,"children":2059},{},[2060],{"type":45,"value":572},{"type":39,"tag":344,"props":2062,"children":2064},{"id":2063},"cache-redaction",[2065],{"type":45,"value":2066},"Cache Redaction",{"type":39,"tag":300,"props":2068,"children":2070},{"className":505,"code":2069,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\CacheEvent;\n\nNightwatch::redactCacheEvents(function (CacheEvent $cacheEvent) {\n    $cacheEvent->key = str_replace('user:', 'user:***:', $cacheEvent->key);\n});\n",[2071],{"type":39,"tag":307,"props":2072,"children":2073},{"__ignoreMap":309},[2074,2081,2088,2096,2104],{"type":39,"tag":365,"props":2075,"children":2076},{"class":367,"line":368},[2077],{"type":39,"tag":365,"props":2078,"children":2079},{},[2080],{"type":45,"value":1347},{"type":39,"tag":365,"props":2082,"children":2083},{"class":367,"line":378},[2084],{"type":39,"tag":365,"props":2085,"children":2086},{"emptyLinePlaceholder":534},[2087],{"type":45,"value":537},{"type":39,"tag":365,"props":2089,"children":2090},{"class":367,"line":405},[2091],{"type":39,"tag":365,"props":2092,"children":2093},{},[2094],{"type":45,"value":2095},"Nightwatch::redactCacheEvents(function (CacheEvent $cacheEvent) {\n",{"type":39,"tag":365,"props":2097,"children":2098},{"class":367,"line":428},[2099],{"type":39,"tag":365,"props":2100,"children":2101},{},[2102],{"type":45,"value":2103},"    $cacheEvent->key = str_replace('user:', 'user:***:', $cacheEvent->key);\n",{"type":39,"tag":365,"props":2105,"children":2106},{"class":367,"line":548},[2107],{"type":39,"tag":365,"props":2108,"children":2109},{},[2110],{"type":45,"value":572},{"type":39,"tag":344,"props":2112,"children":2114},{"id":2113},"command-redaction",[2115],{"type":45,"value":2116},"Command Redaction",{"type":39,"tag":300,"props":2118,"children":2120},{"className":505,"code":2119,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\Command;\n\nNightwatch::redactCommands(function (Command $command) {\n    $command->command = preg_replace('\u002F--password=\\S+\u002F', '--password=***', $command->command);\n});\n",[2121],{"type":39,"tag":307,"props":2122,"children":2123},{"__ignoreMap":309},[2124,2132,2139,2147,2155],{"type":39,"tag":365,"props":2125,"children":2126},{"class":367,"line":368},[2127],{"type":39,"tag":365,"props":2128,"children":2129},{},[2130],{"type":45,"value":2131},"use Laravel\\Nightwatch\\Records\\Command;\n",{"type":39,"tag":365,"props":2133,"children":2134},{"class":367,"line":378},[2135],{"type":39,"tag":365,"props":2136,"children":2137},{"emptyLinePlaceholder":534},[2138],{"type":45,"value":537},{"type":39,"tag":365,"props":2140,"children":2141},{"class":367,"line":405},[2142],{"type":39,"tag":365,"props":2143,"children":2144},{},[2145],{"type":45,"value":2146},"Nightwatch::redactCommands(function (Command $command) {\n",{"type":39,"tag":365,"props":2148,"children":2149},{"class":367,"line":428},[2150],{"type":39,"tag":365,"props":2151,"children":2152},{},[2153],{"type":45,"value":2154},"    $command->command = preg_replace('\u002F--password=\\S+\u002F', '--password=***', $command->command);\n",{"type":39,"tag":365,"props":2156,"children":2157},{"class":367,"line":548},[2158],{"type":39,"tag":365,"props":2159,"children":2160},{},[2161],{"type":45,"value":572},{"type":39,"tag":344,"props":2163,"children":2165},{"id":2164},"exception-redaction",[2166],{"type":45,"value":2167},"Exception Redaction",{"type":39,"tag":300,"props":2169,"children":2171},{"className":505,"code":2170,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\Exception;\n\nNightwatch::redactExceptions(function (Exception $exception) {\n    $exception->message = str_replace('secret', '***', $exception->message);\n});\n",[2172],{"type":39,"tag":307,"props":2173,"children":2174},{"__ignoreMap":309},[2175,2183,2190,2198,2206],{"type":39,"tag":365,"props":2176,"children":2177},{"class":367,"line":368},[2178],{"type":39,"tag":365,"props":2179,"children":2180},{},[2181],{"type":45,"value":2182},"use Laravel\\Nightwatch\\Records\\Exception;\n",{"type":39,"tag":365,"props":2184,"children":2185},{"class":367,"line":378},[2186],{"type":39,"tag":365,"props":2187,"children":2188},{"emptyLinePlaceholder":534},[2189],{"type":45,"value":537},{"type":39,"tag":365,"props":2191,"children":2192},{"class":367,"line":405},[2193],{"type":39,"tag":365,"props":2194,"children":2195},{},[2196],{"type":45,"value":2197},"Nightwatch::redactExceptions(function (Exception $exception) {\n",{"type":39,"tag":365,"props":2199,"children":2200},{"class":367,"line":428},[2201],{"type":39,"tag":365,"props":2202,"children":2203},{},[2204],{"type":45,"value":2205},"    $exception->message = str_replace('secret', '***', $exception->message);\n",{"type":39,"tag":365,"props":2207,"children":2208},{"class":367,"line":548},[2209],{"type":39,"tag":365,"props":2210,"children":2211},{},[2212],{"type":45,"value":572},{"type":39,"tag":344,"props":2214,"children":2216},{"id":2215},"mail-redaction",[2217],{"type":45,"value":2218},"Mail Redaction",{"type":39,"tag":300,"props":2220,"children":2222},{"className":505,"code":2221,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\Mail;\n\nNightwatch::redactMail(function (Mail $mail) {\n    $mail->subject = str_replace('Invoice #', 'Invoice ***', $mail->subject);\n});\n",[2223],{"type":39,"tag":307,"props":2224,"children":2225},{"__ignoreMap":309},[2226,2233,2240,2248,2256],{"type":39,"tag":365,"props":2227,"children":2228},{"class":367,"line":368},[2229],{"type":39,"tag":365,"props":2230,"children":2231},{},[2232],{"type":45,"value":1439},{"type":39,"tag":365,"props":2234,"children":2235},{"class":367,"line":378},[2236],{"type":39,"tag":365,"props":2237,"children":2238},{"emptyLinePlaceholder":534},[2239],{"type":45,"value":537},{"type":39,"tag":365,"props":2241,"children":2242},{"class":367,"line":405},[2243],{"type":39,"tag":365,"props":2244,"children":2245},{},[2246],{"type":45,"value":2247},"Nightwatch::redactMail(function (Mail $mail) {\n",{"type":39,"tag":365,"props":2249,"children":2250},{"class":367,"line":428},[2251],{"type":39,"tag":365,"props":2252,"children":2253},{},[2254],{"type":45,"value":2255},"    $mail->subject = str_replace('Invoice #', 'Invoice ***', $mail->subject);\n",{"type":39,"tag":365,"props":2257,"children":2258},{"class":367,"line":548},[2259],{"type":39,"tag":365,"props":2260,"children":2261},{},[2262],{"type":45,"value":572},{"type":39,"tag":344,"props":2264,"children":2266},{"id":2265},"outgoing-request-redaction",[2267],{"type":45,"value":2268},"Outgoing Request Redaction",{"type":39,"tag":300,"props":2270,"children":2272},{"className":505,"code":2271,"language":507,"meta":309,"style":309},"use Laravel\\Nightwatch\\Records\\OutgoingRequest;\n\nNightwatch::redactOutgoingRequests(function (OutgoingRequest $outgoingRequest) {\n    $outgoingRequest->url = preg_replace('\u002Fapi_key=\\w+\u002F', 'api_key=***', $outgoingRequest->url);\n});\n",[2273],{"type":39,"tag":307,"props":2274,"children":2275},{"__ignoreMap":309},[2276,2283,2290,2298,2306],{"type":39,"tag":365,"props":2277,"children":2278},{"class":367,"line":368},[2279],{"type":39,"tag":365,"props":2280,"children":2281},{},[2282],{"type":45,"value":1623},{"type":39,"tag":365,"props":2284,"children":2285},{"class":367,"line":378},[2286],{"type":39,"tag":365,"props":2287,"children":2288},{"emptyLinePlaceholder":534},[2289],{"type":45,"value":537},{"type":39,"tag":365,"props":2291,"children":2292},{"class":367,"line":405},[2293],{"type":39,"tag":365,"props":2294,"children":2295},{},[2296],{"type":45,"value":2297},"Nightwatch::redactOutgoingRequests(function (OutgoingRequest $outgoingRequest) {\n",{"type":39,"tag":365,"props":2299,"children":2300},{"class":367,"line":428},[2301],{"type":39,"tag":365,"props":2302,"children":2303},{},[2304],{"type":45,"value":2305},"    $outgoingRequest->url = preg_replace('\u002Fapi_key=\\w+\u002F', 'api_key=***', $outgoingRequest->url);\n",{"type":39,"tag":365,"props":2307,"children":2308},{"class":367,"line":548},[2309],{"type":39,"tag":365,"props":2310,"children":2311},{},[2312],{"type":45,"value":572},{"type":39,"tag":313,"props":2314,"children":2315},{},[],{"type":39,"tag":54,"props":2317,"children":2319},{"id":2318},"configuration-summary-by-event-type",[2320],{"type":45,"value":2321},"Configuration Summary by Event Type",{"type":39,"tag":2323,"props":2324,"children":2325},"table",{},[2326,2352],{"type":39,"tag":2327,"props":2328,"children":2329},"thead",{},[2330],{"type":39,"tag":2331,"props":2332,"children":2333},"tr",{},[2334,2340,2344,2348],{"type":39,"tag":2335,"props":2336,"children":2337},"th",{},[2338],{"type":45,"value":2339},"Event Type",{"type":39,"tag":2335,"props":2341,"children":2342},{},[2343],{"type":45,"value":276},{"type":39,"tag":2335,"props":2345,"children":2346},{},[2347],{"type":45,"value":286},{"type":39,"tag":2335,"props":2349,"children":2350},{},[2351],{"type":45,"value":296},{"type":39,"tag":2353,"props":2354,"children":2355},"tbody",{},[2356,2387,2416,2451,2492,2520,2554,2587,2621],{"type":39,"tag":2331,"props":2357,"children":2358},{},[2359,2367,2377,2382],{"type":39,"tag":2360,"props":2361,"children":2362},"td",{},[2363],{"type":39,"tag":272,"props":2364,"children":2365},{},[2366],{"type":45,"value":154},{"type":39,"tag":2360,"props":2368,"children":2369},{},[2370,2375],{"type":39,"tag":307,"props":2371,"children":2373},{"className":2372},[],[2374],{"type":45,"value":385},{"type":45,"value":2376},", Route middleware",{"type":39,"tag":2360,"props":2378,"children":2379},{},[2380],{"type":45,"value":2381},"Not applicable",{"type":39,"tag":2360,"props":2383,"children":2384},{},[2385],{"type":45,"value":2386},"Headers, payload, URL, IP",{"type":39,"tag":2331,"props":2388,"children":2389},{},[2390,2397,2407,2411],{"type":39,"tag":2360,"props":2391,"children":2392},{},[2393],{"type":39,"tag":272,"props":2394,"children":2395},{},[2396],{"type":45,"value":166},{"type":39,"tag":2360,"props":2398,"children":2399},{},[2400,2405],{"type":39,"tag":307,"props":2401,"children":2403},{"className":2402},[],[2404],{"type":45,"value":411},{"type":45,"value":2406},", Event listener",{"type":39,"tag":2360,"props":2408,"children":2409},{},[2410],{"type":45,"value":2381},{"type":39,"tag":2360,"props":2412,"children":2413},{},[2414],{"type":45,"value":2415},"Command arguments",{"type":39,"tag":2331,"props":2417,"children":2418},{},[2419,2426,2431,2446],{"type":39,"tag":2360,"props":2420,"children":2421},{},[2422],{"type":39,"tag":272,"props":2423,"children":2424},{},[2425],{"type":45,"value":178},{"type":39,"tag":2360,"props":2427,"children":2428},{},[2429],{"type":45,"value":2430},"Parent context",{"type":39,"tag":2360,"props":2432,"children":2433},{},[2434,2440,2441],{"type":39,"tag":307,"props":2435,"children":2437},{"className":2436},[],[2438],{"type":45,"value":2439},"rejectQueries()",{"type":45,"value":1005},{"type":39,"tag":307,"props":2442,"children":2444},{"className":2443},[],[2445],{"type":45,"value":1068},{"type":39,"tag":2360,"props":2447,"children":2448},{},[2449],{"type":45,"value":2450},"SQL statement",{"type":39,"tag":2331,"props":2452,"children":2453},{},[2454,2461,2465,2487],{"type":39,"tag":2360,"props":2455,"children":2456},{},[2457],{"type":39,"tag":272,"props":2458,"children":2459},{},[2460],{"type":45,"value":190},{"type":39,"tag":2360,"props":2462,"children":2463},{},[2464],{"type":45,"value":2430},{"type":39,"tag":2360,"props":2466,"children":2467},{},[2468,2474,2475,2481,2482],{"type":39,"tag":307,"props":2469,"children":2471},{"className":2470},[],[2472],{"type":45,"value":2473},"rejectCacheKeys()",{"type":45,"value":1005},{"type":39,"tag":307,"props":2476,"children":2478},{"className":2477},[],[2479],{"type":45,"value":2480},"rejectCacheEvents()",{"type":45,"value":1005},{"type":39,"tag":307,"props":2483,"children":2485},{"className":2484},[],[2486],{"type":45,"value":1244},{"type":39,"tag":2360,"props":2488,"children":2489},{},[2490],{"type":45,"value":2491},"Cache key",{"type":39,"tag":2331,"props":2493,"children":2494},{},[2495,2502,2507,2516],{"type":39,"tag":2360,"props":2496,"children":2497},{},[2498],{"type":39,"tag":272,"props":2499,"children":2500},{},[2501],{"type":45,"value":202},{"type":39,"tag":2360,"props":2503,"children":2504},{},[2505],{"type":45,"value":2506},"Parent context, Queue::before",{"type":39,"tag":2360,"props":2508,"children":2509},{},[2510],{"type":39,"tag":307,"props":2511,"children":2513},{"className":2512},[],[2514],{"type":45,"value":2515},"rejectQueuedJobs()",{"type":39,"tag":2360,"props":2517,"children":2518},{},[2519],{"type":45,"value":2381},{"type":39,"tag":2331,"props":2521,"children":2522},{},[2523,2530,2534,2549],{"type":39,"tag":2360,"props":2524,"children":2525},{},[2526],{"type":39,"tag":272,"props":2527,"children":2528},{},[2529],{"type":45,"value":214},{"type":39,"tag":2360,"props":2531,"children":2532},{},[2533],{"type":45,"value":2430},{"type":39,"tag":2360,"props":2535,"children":2536},{},[2537,2543,2544],{"type":39,"tag":307,"props":2538,"children":2540},{"className":2539},[],[2541],{"type":45,"value":2542},"rejectMail()",{"type":45,"value":1005},{"type":39,"tag":307,"props":2545,"children":2547},{"className":2546},[],[2548],{"type":45,"value":1407},{"type":39,"tag":2360,"props":2550,"children":2551},{},[2552],{"type":45,"value":2553},"Subject",{"type":39,"tag":2331,"props":2555,"children":2556},{},[2557,2564,2568,2583],{"type":39,"tag":2360,"props":2558,"children":2559},{},[2560],{"type":39,"tag":272,"props":2561,"children":2562},{},[2563],{"type":45,"value":226},{"type":39,"tag":2360,"props":2565,"children":2566},{},[2567],{"type":45,"value":2430},{"type":39,"tag":2360,"props":2569,"children":2570},{},[2571,2577,2578],{"type":39,"tag":307,"props":2572,"children":2574},{"className":2573},[],[2575],{"type":45,"value":2576},"rejectNotifications()",{"type":45,"value":1005},{"type":39,"tag":307,"props":2579,"children":2581},{"className":2580},[],[2582],{"type":45,"value":1499},{"type":39,"tag":2360,"props":2584,"children":2585},{},[2586],{"type":45,"value":2381},{"type":39,"tag":2331,"props":2588,"children":2589},{},[2590,2597,2601,2616],{"type":39,"tag":2360,"props":2591,"children":2592},{},[2593],{"type":39,"tag":272,"props":2594,"children":2595},{},[2596],{"type":45,"value":250},{"type":39,"tag":2360,"props":2598,"children":2599},{},[2600],{"type":45,"value":2430},{"type":39,"tag":2360,"props":2602,"children":2603},{},[2604,2610,2611],{"type":39,"tag":307,"props":2605,"children":2607},{"className":2606},[],[2608],{"type":45,"value":2609},"rejectOutgoingRequests()",{"type":45,"value":1005},{"type":39,"tag":307,"props":2612,"children":2614},{"className":2613},[],[2615],{"type":45,"value":1591},{"type":39,"tag":2360,"props":2617,"children":2618},{},[2619],{"type":45,"value":2620},"URL",{"type":39,"tag":2331,"props":2622,"children":2623},{},[2624,2631,2639,2643],{"type":39,"tag":2360,"props":2625,"children":2626},{},[2627],{"type":39,"tag":272,"props":2628,"children":2629},{},[2630],{"type":45,"value":238},{"type":39,"tag":2360,"props":2632,"children":2633},{},[2634],{"type":39,"tag":307,"props":2635,"children":2637},{"className":2636},[],[2638],{"type":45,"value":434},{"type":39,"tag":2360,"props":2640,"children":2641},{},[2642],{"type":45,"value":2381},{"type":39,"tag":2360,"props":2644,"children":2645},{},[2646],{"type":45,"value":2647},"Exception message",{"type":39,"tag":313,"props":2649,"children":2650},{},[],{"type":39,"tag":54,"props":2652,"children":2654},{"id":2653},"production-recommendations",[2655],{"type":45,"value":2656},"Production Recommendations",{"type":39,"tag":344,"props":2658,"children":2660},{"id":2659},"high-traffic-applications",[2661],{"type":45,"value":2662},"High-Traffic Applications",{"type":39,"tag":300,"props":2664,"children":2666},{"className":357,"code":2665,"language":359,"meta":309,"style":309},"# Conservative sampling\nNIGHTWATCH_REQUEST_SAMPLE_RATE=0.01          # 1% of requests\nNIGHTWATCH_COMMAND_SAMPLE_RATE=0.1           # 10% of commands\nNIGHTWATCH_EXCEPTION_SAMPLE_RATE=1.0         # Always capture exceptions\n\n# Filter noisy events\nNIGHTWATCH_IGNORE_CACHE_EVENTS=true\nNIGHTWATCH_IGNORE_QUERIES=true               # Or filter specific queries programmatically\n",[2667],{"type":39,"tag":307,"props":2668,"children":2669},{"__ignoreMap":309},[2670,2678,2699,2719,2739,2746,2754,2769],{"type":39,"tag":365,"props":2671,"children":2672},{"class":367,"line":368},[2673],{"type":39,"tag":365,"props":2674,"children":2675},{"style":372},[2676],{"type":45,"value":2677},"# Conservative sampling\n",{"type":39,"tag":365,"props":2679,"children":2680},{"class":367,"line":378},[2681,2685,2689,2694],{"type":39,"tag":365,"props":2682,"children":2683},{"style":382},[2684],{"type":45,"value":385},{"type":39,"tag":365,"props":2686,"children":2687},{"style":388},[2688],{"type":45,"value":391},{"type":39,"tag":365,"props":2690,"children":2691},{"style":394},[2692],{"type":45,"value":2693},"0.01",{"type":39,"tag":365,"props":2695,"children":2696},{"style":372},[2697],{"type":45,"value":2698},"          # 1% of requests\n",{"type":39,"tag":365,"props":2700,"children":2701},{"class":367,"line":405},[2702,2706,2710,2714],{"type":39,"tag":365,"props":2703,"children":2704},{"style":382},[2705],{"type":45,"value":411},{"type":39,"tag":365,"props":2707,"children":2708},{"style":388},[2709],{"type":45,"value":391},{"type":39,"tag":365,"props":2711,"children":2712},{"style":394},[2713],{"type":45,"value":397},{"type":39,"tag":365,"props":2715,"children":2716},{"style":372},[2717],{"type":45,"value":2718},"           # 10% of commands\n",{"type":39,"tag":365,"props":2720,"children":2721},{"class":367,"line":428},[2722,2726,2730,2734],{"type":39,"tag":365,"props":2723,"children":2724},{"style":382},[2725],{"type":45,"value":434},{"type":39,"tag":365,"props":2727,"children":2728},{"style":388},[2729],{"type":45,"value":391},{"type":39,"tag":365,"props":2731,"children":2732},{"style":394},[2733],{"type":45,"value":420},{"type":39,"tag":365,"props":2735,"children":2736},{"style":372},[2737],{"type":45,"value":2738},"         # Always capture exceptions\n",{"type":39,"tag":365,"props":2740,"children":2741},{"class":367,"line":548},[2742],{"type":39,"tag":365,"props":2743,"children":2744},{"emptyLinePlaceholder":534},[2745],{"type":45,"value":537},{"type":39,"tag":365,"props":2747,"children":2748},{"class":367,"line":557},[2749],{"type":39,"tag":365,"props":2750,"children":2751},{"style":372},[2752],{"type":45,"value":2753},"# Filter noisy events\n",{"type":39,"tag":365,"props":2755,"children":2756},{"class":367,"line":566},[2757,2761,2765],{"type":39,"tag":365,"props":2758,"children":2759},{"style":382},[2760],{"type":45,"value":1244},{"type":39,"tag":365,"props":2762,"children":2763},{"style":388},[2764],{"type":45,"value":391},{"type":39,"tag":365,"props":2766,"children":2767},{"style":394},[2768],{"type":45,"value":1077},{"type":39,"tag":365,"props":2770,"children":2771},{"class":367,"line":575},[2772,2776,2780,2785],{"type":39,"tag":365,"props":2773,"children":2774},{"style":382},[2775],{"type":45,"value":1068},{"type":39,"tag":365,"props":2777,"children":2778},{"style":388},[2779],{"type":45,"value":391},{"type":39,"tag":365,"props":2781,"children":2782},{"style":394},[2783],{"type":45,"value":2784},"true",{"type":39,"tag":365,"props":2786,"children":2787},{"style":372},[2788],{"type":45,"value":2789},"               # Or filter specific queries programmatically\n",{"type":39,"tag":344,"props":2791,"children":2793},{"id":2792},"privacy-conscious-applications",[2794],{"type":45,"value":2795},"Privacy-Conscious Applications",{"type":39,"tag":300,"props":2797,"children":2799},{"className":357,"code":2798,"language":359,"meta":309,"style":309},"# Disable sensitive data collection\nNIGHTWATCH_CAPTURE_REQUEST_PAYLOAD=false\nNIGHTWATCH_IGNORE_REQUEST_HEADERS=true\n\n# Or use redaction in AppServiceProvider\n",[2800],{"type":39,"tag":307,"props":2801,"children":2802},{"__ignoreMap":309},[2803,2811,2827,2842,2849],{"type":39,"tag":365,"props":2804,"children":2805},{"class":367,"line":368},[2806],{"type":39,"tag":365,"props":2807,"children":2808},{"style":372},[2809],{"type":45,"value":2810},"# Disable sensitive data collection\n",{"type":39,"tag":365,"props":2812,"children":2813},{"class":367,"line":378},[2814,2818,2822],{"type":39,"tag":365,"props":2815,"children":2816},{"style":382},[2817],{"type":45,"value":1901},{"type":39,"tag":365,"props":2819,"children":2820},{"style":388},[2821],{"type":45,"value":391},{"type":39,"tag":365,"props":2823,"children":2824},{"style":394},[2825],{"type":45,"value":2826},"false\n",{"type":39,"tag":365,"props":2828,"children":2829},{"class":367,"line":405},[2830,2834,2838],{"type":39,"tag":365,"props":2831,"children":2832},{"style":382},[2833],{"type":45,"value":1860},{"type":39,"tag":365,"props":2835,"children":2836},{"style":388},[2837],{"type":45,"value":391},{"type":39,"tag":365,"props":2839,"children":2840},{"style":394},[2841],{"type":45,"value":1077},{"type":39,"tag":365,"props":2843,"children":2844},{"class":367,"line":428},[2845],{"type":39,"tag":365,"props":2846,"children":2847},{"emptyLinePlaceholder":534},[2848],{"type":45,"value":537},{"type":39,"tag":365,"props":2850,"children":2851},{"class":367,"line":548},[2852],{"type":39,"tag":365,"props":2853,"children":2854},{"style":372},[2855],{"type":45,"value":2856},"# Or use redaction in AppServiceProvider\n",{"type":39,"tag":344,"props":2858,"children":2860},{"id":2859},"balanced-configuration-recommended-start",[2861],{"type":45,"value":2862},"Balanced Configuration (Recommended Start)",{"type":39,"tag":300,"props":2864,"children":2866},{"className":357,"code":2865,"language":359,"meta":309,"style":309},"# Sample rates\nNIGHTWATCH_REQUEST_SAMPLE_RATE=0.1\nNIGHTWATCH_COMMAND_SAMPLE_RATE=1.0\nNIGHTWATCH_EXCEPTION_SAMPLE_RATE=1.0\n\n# Filter obvious noise programmatically\n# Redact PII as needed\n",[2867],{"type":39,"tag":307,"props":2868,"children":2869},{"__ignoreMap":309},[2870,2878,2894,2910,2925,2932,2940],{"type":39,"tag":365,"props":2871,"children":2872},{"class":367,"line":368},[2873],{"type":39,"tag":365,"props":2874,"children":2875},{"style":372},[2876],{"type":45,"value":2877},"# Sample rates\n",{"type":39,"tag":365,"props":2879,"children":2880},{"class":367,"line":378},[2881,2885,2889],{"type":39,"tag":365,"props":2882,"children":2883},{"style":382},[2884],{"type":45,"value":385},{"type":39,"tag":365,"props":2886,"children":2887},{"style":388},[2888],{"type":45,"value":391},{"type":39,"tag":365,"props":2890,"children":2891},{"style":394},[2892],{"type":45,"value":2893},"0.1\n",{"type":39,"tag":365,"props":2895,"children":2896},{"class":367,"line":405},[2897,2901,2905],{"type":39,"tag":365,"props":2898,"children":2899},{"style":382},[2900],{"type":45,"value":411},{"type":39,"tag":365,"props":2902,"children":2903},{"style":388},[2904],{"type":45,"value":391},{"type":39,"tag":365,"props":2906,"children":2907},{"style":394},[2908],{"type":45,"value":2909},"1.0\n",{"type":39,"tag":365,"props":2911,"children":2912},{"class":367,"line":428},[2913,2917,2921],{"type":39,"tag":365,"props":2914,"children":2915},{"style":382},[2916],{"type":45,"value":434},{"type":39,"tag":365,"props":2918,"children":2919},{"style":388},[2920],{"type":45,"value":391},{"type":39,"tag":365,"props":2922,"children":2923},{"style":394},[2924],{"type":45,"value":2909},{"type":39,"tag":365,"props":2926,"children":2927},{"class":367,"line":548},[2928],{"type":39,"tag":365,"props":2929,"children":2930},{"emptyLinePlaceholder":534},[2931],{"type":45,"value":537},{"type":39,"tag":365,"props":2933,"children":2934},{"class":367,"line":557},[2935],{"type":39,"tag":365,"props":2936,"children":2937},{"style":372},[2938],{"type":45,"value":2939},"# Filter obvious noise programmatically\n",{"type":39,"tag":365,"props":2941,"children":2942},{"class":367,"line":566},[2943],{"type":39,"tag":365,"props":2944,"children":2945},{"style":372},[2946],{"type":45,"value":2947},"# Redact PII as needed\n",{"type":39,"tag":313,"props":2949,"children":2950},{},[],{"type":39,"tag":54,"props":2952,"children":2954},{"id":2953},"verification-checklist",[2955],{"type":45,"value":2956},"Verification Checklist",{"type":39,"tag":48,"props":2958,"children":2959},{},[2960],{"type":45,"value":2961},"After configuration:",{"type":39,"tag":66,"props":2963,"children":2966},{"className":2964},[2965],"contains-task-list",[2967,2979,2988,2997,3006,3021],{"type":39,"tag":70,"props":2968,"children":2971},{"className":2969},[2970],"task-list-item",[2972,2977],{"type":39,"tag":2973,"props":2974,"children":2976},"input",{"disabled":534,"type":2975},"checkbox",[],{"type":45,"value":2978}," Sampling rates appropriate for traffic volume",{"type":39,"tag":70,"props":2980,"children":2982},{"className":2981},[2970],[2983,2986],{"type":39,"tag":2973,"props":2984,"children":2985},{"disabled":534,"type":2975},[],{"type":45,"value":2987}," Noisy events filtered (cache, certain queries)",{"type":39,"tag":70,"props":2989,"children":2991},{"className":2990},[2970],[2992,2995],{"type":39,"tag":2973,"props":2993,"children":2994},{"disabled":534,"type":2975},[],{"type":45,"value":2996}," Sensitive data redacted (PII, tokens, credentials)",{"type":39,"tag":70,"props":2998,"children":3000},{"className":2999},[2970],[3001,3004],{"type":39,"tag":2973,"props":3002,"children":3003},{"disabled":534,"type":2975},[],{"type":45,"value":3005}," Exceptions always captured for debugging",{"type":39,"tag":70,"props":3007,"children":3009},{"className":3008},[2970],[3010,3013,3015],{"type":39,"tag":2973,"props":3011,"children":3012},{"disabled":534,"type":2975},[],{"type":45,"value":3014}," Test in development with ",{"type":39,"tag":307,"props":3016,"children":3018},{"className":3017},[],[3019],{"type":45,"value":3020},"NIGHTWATCH_REQUEST_SAMPLE_RATE=1.0",{"type":39,"tag":70,"props":3022,"children":3024},{"className":3023},[2970],[3025,3028],{"type":39,"tag":2973,"props":3026,"children":3027},{"disabled":534,"type":2975},[],{"type":45,"value":3029}," Monitor event quota usage in Nightwatch dashboard",{"type":39,"tag":313,"props":3031,"children":3032},{},[],{"type":39,"tag":54,"props":3034,"children":3036},{"id":3035},"common-patterns",[3037],{"type":45,"value":3038},"Common Patterns",{"type":39,"tag":344,"props":3040,"children":3042},{"id":3041},"filter-health-checks-reduce-sampling",[3043],{"type":45,"value":3044},"Filter Health Checks + Reduce Sampling",{"type":39,"tag":300,"props":3046,"children":3048},{"className":505,"code":3047,"language":507,"meta":309,"style":309},"Route::get('\u002Fhealth', fn() => ['status' => 'ok'])\n    ->middleware(Sample::never());\n",[3049],{"type":39,"tag":307,"props":3050,"children":3051},{"__ignoreMap":309},[3052,3060],{"type":39,"tag":365,"props":3053,"children":3054},{"class":367,"line":368},[3055],{"type":39,"tag":365,"props":3056,"children":3057},{},[3058],{"type":45,"value":3059},"Route::get('\u002Fhealth', fn() => ['status' => 'ok'])\n",{"type":39,"tag":365,"props":3061,"children":3062},{"class":367,"line":378},[3063],{"type":39,"tag":365,"props":3064,"children":3065},{},[3066],{"type":45,"value":685},{"type":39,"tag":344,"props":3068,"children":3070},{"id":3069},"exclude-internalvendor-queries",[3071],{"type":45,"value":3072},"Exclude Internal\u002FVendor Queries",{"type":39,"tag":300,"props":3074,"children":3076},{"className":505,"code":3075,"language":507,"meta":309,"style":309},"Nightwatch::rejectQueries(fn($q) =>\n    str_contains($q->sql, 'telescope') ||\n    str_contains($q->sql, 'pulse')\n);\n",[3077],{"type":39,"tag":307,"props":3078,"children":3079},{"__ignoreMap":309},[3080,3088,3096,3104],{"type":39,"tag":365,"props":3081,"children":3082},{"class":367,"line":368},[3083],{"type":39,"tag":365,"props":3084,"children":3085},{},[3086],{"type":45,"value":3087},"Nightwatch::rejectQueries(fn($q) =>\n",{"type":39,"tag":365,"props":3089,"children":3090},{"class":367,"line":378},[3091],{"type":39,"tag":365,"props":3092,"children":3093},{},[3094],{"type":45,"value":3095},"    str_contains($q->sql, 'telescope') ||\n",{"type":39,"tag":365,"props":3097,"children":3098},{"class":367,"line":405},[3099],{"type":39,"tag":365,"props":3100,"children":3101},{},[3102],{"type":45,"value":3103},"    str_contains($q->sql, 'pulse')\n",{"type":39,"tag":365,"props":3105,"children":3106},{"class":367,"line":428},[3107],{"type":39,"tag":365,"props":3108,"children":3109},{},[3110],{"type":45,"value":3111},");\n",{"type":39,"tag":344,"props":3113,"children":3115},{"id":3114},"protect-user-data-in-cache-keys",[3116],{"type":45,"value":3117},"Protect User Data in Cache Keys",{"type":39,"tag":300,"props":3119,"children":3121},{"className":505,"code":3120,"language":507,"meta":309,"style":309},"Nightwatch::redactCacheEvents(fn($e) =>\n    $e->key = preg_replace('\u002Fuser:\\d+\u002F', 'user:***', $e->key)\n);\n",[3122],{"type":39,"tag":307,"props":3123,"children":3124},{"__ignoreMap":309},[3125,3133,3141],{"type":39,"tag":365,"props":3126,"children":3127},{"class":367,"line":368},[3128],{"type":39,"tag":365,"props":3129,"children":3130},{},[3131],{"type":45,"value":3132},"Nightwatch::redactCacheEvents(fn($e) =>\n",{"type":39,"tag":365,"props":3134,"children":3135},{"class":367,"line":378},[3136],{"type":39,"tag":365,"props":3137,"children":3138},{},[3139],{"type":45,"value":3140},"    $e->key = preg_replace('\u002Fuser:\\d+\u002F', 'user:***', $e->key)\n",{"type":39,"tag":365,"props":3142,"children":3143},{"class":367,"line":405},[3144],{"type":39,"tag":365,"props":3145,"children":3146},{},[3147],{"type":45,"value":3111},{"type":39,"tag":3149,"props":3150,"children":3151},"style",{},[3152],{"type":45,"value":3153},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3155,"total":583},[3156,3174,3188,3203,3220,3237,3249,3263,3277],{"slug":3157,"name":3157,"fn":3158,"description":3159,"org":3160,"tags":3161,"stars":3171,"repoUrl":3172,"updatedAt":3173},"socialite-development","integrate OAuth social authentication","Manages OAuth social authentication with Laravel Socialite. Activate when adding social login providers; configuring OAuth redirect\u002Fcallback flows; retrieving authenticated user details; customizing scopes or parameters; setting up community providers; testing with Socialite fakes; or when the user mentions social login, OAuth, Socialite, or third-party authentication.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3162,3165,3166,3169],{"name":3163,"slug":3164,"type":15},"Auth","auth",{"name":9,"slug":8,"type":15},{"name":3167,"slug":3168,"type":15},"OAuth","oauth",{"name":3170,"slug":507,"type":15},"PHP",5745,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fsocialite","2026-07-13T06:22:10.648812",{"slug":3175,"name":3175,"fn":3176,"description":3177,"org":3178,"tags":3179,"stars":3185,"repoUrl":3186,"updatedAt":3187},"octane-development","develop applications with Laravel Octane","Use this skill when working with Laravel Octane, a long-running PHP worker server (Swoole, FrankenPHP, RoadRunner) where the application boots once and serves many requests instead of rebooting for each request like PHP-FPM. Trigger when installing Octane or starting its server; configuring or detecting the active driver for driver-specific code; using Octane::concurrently(), Octane::table(), the Octane cache, or shared in-memory state across workers; controlling worker memory growth; or testing Octane behavior. Skip plain PHP-FPM applications with no persistent worker.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3180,3181,3184],{"name":9,"slug":8,"type":15},{"name":3182,"slug":3183,"type":15},"Performance","performance",{"name":3170,"slug":507,"type":15},4021,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Foctane","2026-07-16T06:02:20.284131",{"slug":3189,"name":3189,"fn":3190,"description":3191,"org":3192,"tags":3193,"stars":3200,"repoUrl":3201,"updatedAt":3202},"fortify-development","implement authentication with Laravel Fortify","ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA\u002FTOTP\u002FQR codes\u002Frecovery codes), passkeys, profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, passkeys, WebAuthn, or references app\u002FActions\u002FFortify\u002F, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config\u002Ffortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3194,3197,3198,3199],{"name":3195,"slug":3196,"type":15},"2FA","2fa",{"name":3163,"slug":3164,"type":15},{"name":9,"slug":8,"type":15},{"name":3170,"slug":507,"type":15},1746,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Ffortify","2026-07-13T06:22:28.612049",{"slug":3204,"name":3204,"fn":3205,"description":3206,"org":3207,"tags":3208,"stars":3217,"repoUrl":3218,"updatedAt":3219},"ai-sdk-development","build AI agents with Laravel AI SDK","TRIGGER when working with ai-sdk which is Laravel official first-party AI SDK. Activate when building, editing AI agents, chatbots, text generation, image generation, audio\u002FTTS, transcription\u002FSTT, embeddings, RAG, vector stores, reranking, structured output, streaming, conversation memory, tools, queueing, broadcasting, and provider failover across OpenAI, Anthropic, Gemini, Azure, Groq, xAI, DeepSeek, Mistral, Ollama, ElevenLabs, Cohere, Jina, and VoyageAI. Invoke when the user references ai-sdk, the `Laravel\\Ai\\` namespace, or this project's AI features — not for other AI packages used directly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3209,3212,3215,3216],{"name":3210,"slug":3211,"type":15},"Agents","agents",{"name":3213,"slug":3214,"type":15},"AI SDK","ai-sdk",{"name":9,"slug":8,"type":15},{"name":3170,"slug":507,"type":15},1040,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fai","2026-07-13T06:22:24.770526",{"slug":3221,"name":3221,"fn":3222,"description":3223,"org":3224,"tags":3225,"stars":3234,"repoUrl":3235,"updatedAt":3236},"deploying-laravel-cloud","deploy Laravel applications to Laravel Cloud","Deploys and manages Laravel applications on Laravel Cloud using the `cloud` CLI. Use when the user wants to deploy an app, ship to cloud, create\u002Fmanage environments, databases, caches, domains, instances, background processes, check billing\u002Fusage\u002Fspend, or any Laravel Cloud infrastructure. Triggers on deploy, ship, cloud management, environment setup, database provisioning, billing\u002Fusage queries, and similar cloud operations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3226,3229,3232,3233],{"name":3227,"slug":3228,"type":15},"CLI","cli",{"name":3230,"slug":3231,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":3170,"slug":507,"type":15},665,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fagent-skills","2026-07-13T06:22:18.36234",{"slug":3238,"name":3238,"fn":3239,"description":3240,"org":3241,"tags":3242,"stars":3234,"repoUrl":3235,"updatedAt":3248},"starter-kit-upgrade","upgrade Laravel starter kit projects","Selectively pull upstream improvements from a Laravel starter kit (laravel\u002Fvue-starter-kit, laravel\u002Freact-starter-kit, laravel\u002Fsvelte-starter-kit, laravel\u002Flivewire-starter-kit) into a project bootstrapped from one. Use when the user wants to update, sync, or migrate features from their starter kit. Applies one feature at a time on a dedicated branch; never auto-merges customized files.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3243,3244,3247],{"name":9,"slug":8,"type":15},{"name":3245,"slug":3246,"type":15},"Maintenance","maintenance",{"name":3170,"slug":507,"type":15},"2026-07-13T06:22:11.972952",{"slug":3250,"name":3250,"fn":3251,"description":3252,"org":3253,"tags":3254,"stars":3260,"repoUrl":3261,"updatedAt":3262},"pennant-development","manage feature flags with Laravel Pennant","Use when working with Laravel Pennant the official Laravel feature flag package. Trigger whenever the query mentions Pennant by name or involves feature flags or feature toggles in a Laravel project. Tasks include defining feature flags checking whether features are active creating class based features in `app\u002FFeatures` using Blade `@feature` directives scoping flags to users or teams building custom Pennant storage drivers protecting routes with feature flags testing feature flags with Pest or PHPUnit and implementing A B testing or gradual rollouts with feature flags. Do not trigger for generic Laravel configuration authorization policies authentication or non Pennant feature management systems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3255,3258,3259],{"name":3256,"slug":3257,"type":15},"Feature Flags","feature-flags",{"name":9,"slug":8,"type":15},{"name":3170,"slug":507,"type":15},585,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fpennant","2026-07-13T06:22:26.043758",{"slug":3264,"name":3264,"fn":5,"description":3265,"org":3266,"tags":3267,"stars":3274,"repoUrl":3275,"updatedAt":3276},"configure-nightwatch","Configures Laravel Nightwatch data collection, sampling rates, filtering rules, and redaction policies. Use when setting up Nightwatch, managing data volume, protecting sensitive data (PII), or optimizing event collection for production workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3268,3269,3270,3273],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":3271,"slug":3272,"type":15},"Observability","observability",{"name":3170,"slug":507,"type":15},368,"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fnightwatch","2026-07-13T06:22:29.945491",{"slug":4,"name":4,"fn":5,"description":6,"org":3278,"tags":3279,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3280,3281,3282,3283],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15},{"items":3285,"total":368},[3286],{"slug":4,"name":4,"fn":5,"description":6,"org":3287,"tags":3288,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3289,3290,3291,3292],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15}]