c413004930
Dependency: - minishlink/web-push v10 (VAPID JWT + aes128gcm payload encryption) - Dockerfile: add curl, mbstring, gmp extensions (web-push needs ext-curl) VAPID: - config/webpush.php from env; `php artisan push:vapid` generates keypair - Shared platform keypair; .env.example has empty placeholders Schema: - push_subscriptions (user/company, endpoint unique, p256dh, auth, encoding) WebPushService: - send / sendToUser / dispatch via WebPush::flush - Auto-prunes subscriptions reported expired (404/410) Subscribe flow: - POST /push/subscribe + /push/unsubscribe (auth, tenant) - Tenant panel JS subscribes after SW registration with VAPID public key Service worker (/sw.js): - Cache v2, push listener → showNotification, notificationclick → focus/open Install prompt: - Floating "Instalează aplicația" button wired to beforeinstallprompt Staff push: - WorkOrder master_id change → push to assigned mechanic - Settings "Test notificare push" action Tests (6 new): - subscribe stores + upserts; requires auth (401); validation (422); service configured; sendToUser with no subs returns zero Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
18 lines
514 B
PHP
18 lines
514 B
PHP
<?php
|
|
|
|
return [
|
|
/*
|
|
| VAPID keys identify the application server to push services.
|
|
| Generate with: php artisan push:vapid
|
|
| Then add the printed lines to .env.
|
|
*/
|
|
'vapid' => [
|
|
'subject' => env('VAPID_SUBJECT', 'mailto:admin@service.mir.md'),
|
|
'public_key' => env('VAPID_PUBLIC_KEY'),
|
|
'private_key' => env('VAPID_PRIVATE_KEY'),
|
|
],
|
|
|
|
// TTL (seconds) the push service keeps the message if device is offline.
|
|
'ttl' => env('VAPID_TTL', 2419200), // 4 weeks
|
|
];
|