2026-03-18 10:56:35 +02:00
|
|
|
<?php
|
|
|
|
|
|
2026-03-19 18:42:19 +02:00
|
|
|
use App\Http\Controllers\Api\V1\WebsiteController as ApiWebsiteController;
|
2026-03-18 10:56:35 +02:00
|
|
|
use App\Http\Controllers\CollectController;
|
|
|
|
|
use App\Http\Controllers\TrackingScriptController;
|
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
|
|
2026-05-25 13:21:46 +03:00
|
|
|
// Legacy /collect endpoint alias (used in tests and older integrations)
|
|
|
|
|
Route::post('/collect', [CollectController::class, 'store'])
|
|
|
|
|
->middleware(['collect.cors', 'throttle:collect'])
|
|
|
|
|
->name('collect.legacy');
|
|
|
|
|
|
|
|
|
|
Route::get('/collect/pixel/{trackingId}', [CollectController::class, 'pixel'])
|
|
|
|
|
->middleware(['collect.cors', 'throttle:collect'])
|
|
|
|
|
->name('collect.pixel.legacy');
|
|
|
|
|
|
|
|
|
|
Route::get('/pixel', [CollectController::class, 'pixel'])
|
|
|
|
|
->middleware(['collect.cors', 'throttle:collect'])
|
|
|
|
|
->name('collect.pixel.query');
|
|
|
|
|
|
2026-03-24 22:42:31 +02:00
|
|
|
// Original endpoints (kept for backward compatibility)
|
2026-03-18 10:56:35 +02:00
|
|
|
Route::get('/t/{trackingId}.js', [TrackingScriptController::class, 'script'])
|
2026-03-19 12:21:01 +02:00
|
|
|
->middleware('collect.cors')
|
2026-03-18 10:56:35 +02:00
|
|
|
->name('tracking.script');
|
|
|
|
|
|
2026-03-19 12:21:01 +02:00
|
|
|
Route::middleware('collect.cors')->group(function () {
|
2026-03-22 17:53:20 +02:00
|
|
|
Route::post('/e', [CollectController::class, 'store'])
|
2026-03-19 12:21:01 +02:00
|
|
|
->middleware('throttle:collect')
|
|
|
|
|
->name('collect.store');
|
|
|
|
|
|
2026-03-22 17:53:20 +02:00
|
|
|
Route::get('/p', [CollectController::class, 'pixel'])
|
2026-03-19 12:21:01 +02:00
|
|
|
->middleware('throttle:collect')
|
|
|
|
|
->name('collect.pixel');
|
|
|
|
|
});
|
2026-03-19 18:42:19 +02:00
|
|
|
|
2026-03-24 22:42:31 +02:00
|
|
|
// Ad-blocker resistant endpoints (use these in production)
|
|
|
|
|
Route::get('/cdn/resources/{trackingId}.js', [TrackingScriptController::class, 'script'])
|
|
|
|
|
->middleware('collect.cors')
|
|
|
|
|
->name('tracking.script.alt');
|
|
|
|
|
|
|
|
|
|
Route::middleware('collect.cors')->group(function () {
|
|
|
|
|
Route::post('/cdn/feedback', [CollectController::class, 'store'])
|
|
|
|
|
->middleware('throttle:collect')
|
|
|
|
|
->name('collect.store.alt');
|
|
|
|
|
|
|
|
|
|
Route::get('/cdn/status.gif', [CollectController::class, 'pixel'])
|
|
|
|
|
->middleware('throttle:collect')
|
|
|
|
|
->name('collect.pixel.alt');
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-19 18:42:19 +02:00
|
|
|
Route::prefix('v1')->middleware(['auth:sanctum', 'throttle:api'])->name('api.v1.')->group(function () {
|
|
|
|
|
Route::get('websites', [ApiWebsiteController::class, 'index'])->name('websites.index');
|
|
|
|
|
Route::get('websites/{website}/stats', [ApiWebsiteController::class, 'stats'])->name('websites.stats');
|
|
|
|
|
Route::get('websites/{website}/pages', [ApiWebsiteController::class, 'pages'])->name('websites.pages');
|
|
|
|
|
Route::get('websites/{website}/referrers', [ApiWebsiteController::class, 'referrers'])->name('websites.referrers');
|
|
|
|
|
Route::get('websites/{website}/events', [ApiWebsiteController::class, 'events'])->name('websites.events');
|
|
|
|
|
Route::get('websites/{website}/visitors', [ApiWebsiteController::class, 'visitors'])->name('websites.visitors');
|
|
|
|
|
});
|