Retail-API Middleware Architecture
Retail-API is a Laravel application with a comprehensive middleware architecture containing 40+ custom middleware components. This documentation is organized by functional categories for easier navigation.
Request Flow
Section titled “Request Flow”Request Flow:┌─────────────────────────────────────────────────────────────────┐│ Global Middleware ││ (InjectTraceId → TrustProxies → CORS → Cache → Accept/UA) │└─────────────────────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────────────────────┐│ Middleware Groups ││ web: Session + Auth + Locality + CircuitBreaker + Lock ││ api: Throttle + Bindings + Locality + Lock ││ webhooks: Throttle + Lock ││ internal: Throttle(120/min) + Lock │└─────────────────────────────────────────────────────────────────┘ ↓┌─────────────────────────────────────────────────────────────────┐│ Route Middleware (Aliases) ││ auth, guest, scope, feature, privilege, user_type, etc. │└─────────────────────────────────────────────────────────────────┘Topic Documents
Section titled “Topic Documents”| Document | Description |
|---|---|
| [global.md](../global/ | Global middleware applied to every request |
| [authentication.md](../authentication/ | Session, token, and internal service authentication |
| [authorization.md](../authorization/ | Scopes, privileges, roles, and user type validation |
| [rate-limiting.md](../rate-limiting/ | Rate limiting and circuit breaker protection |
| [locality-context.md](../locality-context/ | Advisor, household, organization context management |
| [feature-flags.md](../feature-flags/ | Feature flag middleware at various levels |
| [partner-api.md](../partner-api/ | Partner API versioning and access control |
| [impersonation.md](../impersonation/ | Employee impersonation and permission controls |
| [distributed-lock.md](../distributed-lock/ | Distributed request locking mechanism |
| [packages.md](../packages/ | Package-level middleware (APM, caching, Sentry) |
Code Locations
Section titled “Code Locations”| Category | Path |
|---|---|
| Kernel | app/Http/Kernel.php |
| Core Middleware | app/Http/Middleware/ (38 files) |
| Partner API | app/Http/Middleware/Partner/ |
| Attributes | app/Http/Middleware/Attributes/ |
| Extended Framework | app/Extensions/Illuminate/ |
| Distributed Lock | app/Support/DistributedLock/ |
| Rate Limiters | app/Providers/RateLimiterServiceProvider.php |
| Locality | app/Locality/ |
Middleware Groups
Section titled “Middleware Groups”web Group
Section titled “web Group”'web' => [ AddQueuedCookiesToResponse::class, // Cookie handling StartSession::class, // Session initialization AddXRightCapitalUserInfoHeader::class, // User context headers InitializeLocality::class, // Advisor/household context from URL SubstituteBindings::class, // Route model binding AddXRightCapitalCalculationId::class, // Calculation tracking header RequestCircuitBreaker::class, // Circuit breaker protection CheckImpersonatorEmployeePermission::class, // Impersonation validation LockRequestMiddleware::class, // Distributed request locking]api Group
Section titled “api Group”'api' => [ ThrottleRequests::class . ':api', // 600 requests/minute SubstituteBindings::class, InitializeLocality::class, LockRequestMiddleware::class,]webhooks Group
Section titled “webhooks Group”'webhooks' => [ ThrottleRequests::class . ':webhooks', // 600 requests/minute per IP LockRequestMiddleware::class,]internal Group
Section titled “internal Group”'internal' => [ ThrottleRequests::class . ':120,1', // 120 requests/minute (fixed) LockRequestMiddleware::class,]Middleware Priority
Section titled “Middleware Priority”protected $middlewarePriority = [ StartSession::class, // 1. Session first ShareErrorsFromSession::class, // 2. Error sharing Authenticate::class, // 3. Authentication ThrottleRequests::class, // 4. Rate limiting (early) AuthenticateSession::class, // 5. Session auth InitializeLocality::class, // 6. Context setup UserType::class, // 7. User type check SubstituteBindings::class, // 8. Model binding (late) Authorize::class, // 9. Authorization (last)];Middleware Aliases Quick Reference
Section titled “Middleware Aliases Quick Reference”| Alias | Class | Category |
|---|---|---|
auth |
Authenticate |
[Authentication](../authentication/ |
auth.internal |
AuthenticateInternalApplication |
[Authentication](../authentication/ |
guest |
Unauthenticated |
[Authentication](../authentication/ |
azure_ad |
CheckAzureAd |
[Authentication](../authentication/ |
scope |
CheckForAnyScope |
[Authorization](../authorization/ |
scopes |
CheckScopes |
[Authorization](../authorization/ |
privilege |
Privilege |
[Authorization](../authorization/ |
advisor_role |
CheckAdvisorRole |
[Authorization](../authorization/ |
user_type |
UserType |
[Authorization](../authorization/ |
can |
Authorize |
[Authorization](../authorization/ |
throttle |
ThrottleRequests |
[Rate Limiting](../rate-limiting/ |
feature |
Feature |
[Feature Flags](../feature-flags/ |
organization.feature |
OrganizationFeature |
[Feature Flags](../feature-flags/ |
partner.access_permission |
Partner\CheckAccessPermission |
[Partner API](../partner-api/ |
partner.supported_versions |
Partner\CheckEndpointVersion |
[Partner API](../partner-api/ |
prevent_privileged_impersonation |
PreventPrivilegedImpersonation |
[Impersonation](../impersonation/ |
Response Headers
Section titled “Response Headers”| Header | Middleware | Purpose |
|---|---|---|
Trace-Id |
InjectTraceId |
APM trace correlation |
X-RightCapital-UserID |
AddXRightCapitalUserInfoHeader |
Access log user tracking |
X-RightCapital-Employee-Email |
AddXRightCapitalUserInfoHeader |
Impersonation tracking |
X-RightCapital-CalculationID |
AddXRightCapitalCalculationId |
Calculation tracking |
X-RightCapital-EngineVersion |
SetCalcEngineVersion |
Engine version (staging) |