Skip to content

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:
┌─────────────────────────────────────────────────────────────────┐
│ 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. │
└─────────────────────────────────────────────────────────────────┘
DocumentDescription
[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)
CategoryPath
Kernelapp/Http/Kernel.php
Core Middlewareapp/Http/Middleware/ (38 files)
Partner APIapp/Http/Middleware/Partner/
Attributesapp/Http/Middleware/Attributes/
Extended Frameworkapp/Extensions/Illuminate/
Distributed Lockapp/Support/DistributedLock/
Rate Limitersapp/Providers/RateLimiterServiceProvider.php
Localityapp/Locality/
'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' => [
ThrottleRequests::class . ':api', // 600 requests/minute
SubstituteBindings::class,
InitializeLocality::class,
LockRequestMiddleware::class,
]
'webhooks' => [
ThrottleRequests::class . ':webhooks', // 600 requests/minute per IP
LockRequestMiddleware::class,
]
'internal' => [
ThrottleRequests::class . ':120,1', // 120 requests/minute (fixed)
LockRequestMiddleware::class,
]
app/Http/Kernel.php
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)
];
AliasClassCategory
authAuthenticate[Authentication](../authentication/
auth.internalAuthenticateInternalApplication[Authentication](../authentication/
guestUnauthenticated[Authentication](../authentication/
azure_adCheckAzureAd[Authentication](../authentication/
scopeCheckForAnyScope[Authorization](../authorization/
scopesCheckScopes[Authorization](../authorization/
privilegePrivilege[Authorization](../authorization/
advisor_roleCheckAdvisorRole[Authorization](../authorization/
user_typeUserType[Authorization](../authorization/
canAuthorize[Authorization](../authorization/
throttleThrottleRequests[Rate Limiting](../rate-limiting/
featureFeature[Feature Flags](../feature-flags/
organization.featureOrganizationFeature[Feature Flags](../feature-flags/
partner.access_permissionPartner\CheckAccessPermission[Partner API](../partner-api/
partner.supported_versionsPartner\CheckEndpointVersion[Partner API](../partner-api/
prevent_privileged_impersonationPreventPrivilegedImpersonation[Impersonation](../impersonation/
HeaderMiddlewarePurpose
Trace-IdInjectTraceIdAPM trace correlation
X-RightCapital-UserIDAddXRightCapitalUserInfoHeaderAccess log user tracking
X-RightCapital-Employee-EmailAddXRightCapitalUserInfoHeaderImpersonation tracking
X-RightCapital-CalculationIDAddXRightCapitalCalculationIdCalculation tracking
X-RightCapital-EngineVersionSetCalcEngineVersionEngine version (staging)