feat(webhook): add config + Boot — route registration, cron trigger config

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Snider 2026-03-12 14:25:17 +00:00
parent a1de171871
commit 0e038ff350
2 changed files with 101 additions and 0 deletions

36
src/Core/Webhook/Boot.php Normal file
View file

@ -0,0 +1,36 @@
<?php
/*
* Core PHP Framework
*
* Licensed under the European Union Public Licence (EUPL) v1.2.
* See LICENSE file for details.
*/
declare(strict_types=1);
namespace Core\Webhook;
use Core\Events\ApiRoutesRegistering;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
class Boot extends ServiceProvider
{
public static array $listens = [
ApiRoutesRegistering::class => 'onApiRoutes',
];
public function register(): void
{
$this->mergeConfigFrom(__DIR__.'/config.php', 'webhook');
}
public function onApiRoutes(ApiRoutesRegistering $event): void
{
$event->routes(fn () => Route::post(
'/webhooks/{source}',
[WebhookController::class, 'handle']
)->where('source', '[a-z0-9\-]+'));
}
}

View file

@ -0,0 +1,65 @@
<?php
declare(strict_types=1);
return [
/*
|--------------------------------------------------------------------------
| Webhook Secrets
|--------------------------------------------------------------------------
|
| Per-source signing secrets for signature verification.
| Modules register WebhookVerifier implementations per source.
|
*/
'secrets' => [
'altum-biolinks' => env('ALTUM_BIOLINKS_WEBHOOK_SECRET'),
'altum-analytics' => env('ALTUM_ANALYTICS_WEBHOOK_SECRET'),
'altum-pusher' => env('ALTUM_PUSHER_WEBHOOK_SECRET'),
'altum-socialproof' => env('ALTUM_SOCIALPROOF_WEBHOOK_SECRET'),
],
/*
|--------------------------------------------------------------------------
| Cron Triggers
|--------------------------------------------------------------------------
|
| Outbound HTTP triggers that replace Docker cron containers.
| The CronTrigger action hits these endpoints every minute.
|
*/
'cron_triggers' => [
'altum-biolinks' => [
'base_url' => env('ALTUM_BIOLINKS_URL'),
'key' => env('ALTUM_BIOLINKS_CRON_KEY'),
'endpoints' => ['/cron', '/cron/email_reports', '/cron/broadcasts', '/cron/push_notifications'],
'stagger_seconds' => 15,
'offset_seconds' => 5,
],
'altum-analytics' => [
'base_url' => env('ALTUM_ANALYTICS_URL'),
'key' => env('ALTUM_ANALYTICS_CRON_KEY'),
'endpoints' => ['/cron', '/cron/email_reports', '/cron/broadcasts', '/cron/push_notifications'],
'stagger_seconds' => 15,
'offset_seconds' => 0,
],
'altum-pusher' => [
'base_url' => env('ALTUM_PUSHER_URL'),
'key' => env('ALTUM_PUSHER_CRON_KEY'),
'endpoints' => [
'/cron/reset', '/cron/broadcasts', '/cron/campaigns',
'/cron/flows', '/cron/flows_notifications', '/cron/personal_notifications',
'/cron/rss_automations', '/cron/recurring_campaigns', '/cron/push_notifications',
],
'stagger_seconds' => 7,
'offset_seconds' => 7,
],
'altum-socialproof' => [
'base_url' => env('ALTUM_SOCIALPROOF_URL'),
'key' => env('ALTUM_SOCIALPROOF_CRON_KEY'),
'endpoints' => ['/cron', '/cron/email_reports', '/cron/broadcasts', '/cron/push_notifications'],
'stagger_seconds' => 15,
'offset_seconds' => 10,
],
],
];