ronu/laravel-app-context

Multi-channel application context management for Laravel with JWT and API Key authentication

Installs: 52

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 7

pkg:composer/ronu/laravel-app-context

1.2.1 2026-02-06 12:18 UTC

README

Latest Version on Packagist Total Downloads License

Multi-channel application context management for Laravel (JWT + API key auth) with channel detection, context-aware rate limiting, and audit logging.

Requirements

  • PHP 8.2+
  • Laravel 11.x or 12.x
  • php-open-source-saver/jwt-auth 2.x

Installation

composer require ronu/laravel-app-context

Publish config:

php artisan vendor:publish --tag=app-context-config

Quickstart

  1. Configure a channel in config/app-context.php:
'channels' => [
    'site' => [
        'subdomains' => ['www', null],
        'path_prefixes' => ['/site'],
        'auth_mode' => 'jwt_or_anonymous',
        'jwt_audience' => 'site',
        'allowed_scopes' => ['site:*', 'catalog:browse'],
        'public_scopes' => ['catalog:browse'],
        'rate_limit_profile' => 'site',
        'tenant_mode' => 'single',
        'features' => [
            'allow_anonymous' => true,
        ],
    ],
],
  1. Apply the middleware group:
use Illuminate\Support\Facades\Route;
use Ronu\AppContext\Facades\AppContext;

Route::middleware(['app-context'])->group(function () {
    Route::get('/site/profile', function () {
        return response()->json([
            'channel' => AppContext::getAppId(),
            'auth_mode' => AppContext::getAuthMode(),
            'scopes' => AppContext::getScopes(),
        ]);
    });
});

Configuration

Common scenarios

1) Mobile app with JWT scopes

Route::middleware(['app-context', 'app.requires:mobile:orders:read'])->group(function () {
    Route::get('/mobile/orders', fn () => ['ok' => true]);
});

2) Partner API with API keys

Route::middleware(['app-context', 'app.requires:partner:orders:read'])->group(function () {
    Route::get('/partner/orders', fn () => ['ok' => true]);
});

3) Admin dashboard (subdomain detection)

Route::middleware(['app-context', 'app.scope:admin:*'])->group(function () {
    Route::get('/api/admin/metrics', fn () => ['ok' => true]);
});

More scenarios: documentation/03-usage/02-scenarios.md

Edge scenarios

Common edge cases include config caching, queue workers, burst traffic, tenant mismatches, and JWT blacklist races.

See: documentation/03-usage/03-edge-and-extreme-scenarios.md

API reference

Troubleshooting

Start here: documentation/05-quality/02-troubleshooting.md

Contributing / Security

Start here: documentation/index.md