Ritarda di 10 secondi la notifica di prova, per poter chiudere l'app.

Il pulsante si preme con l'app aperta, quindi la push arrivava sempre in primo
piano: l'unico caso che non serve provare. Ora la route aspetta `ritardoMs`
(10s di default, 25 al massimo) prima di inviare, e il toast dice di chiudere
l'app subito.

L'attesa tiene aperta la funzione, quindi il tetto e' la durata massima
concessa dall'hosting: annotato come ponytail nel codice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-06 14:44:29 +02:00
co-authored by Claude Opus 5
parent 8047e58ae0
commit 78d41daf4f
3 changed files with 26 additions and 6 deletions
+15 -1
View File
@@ -2,7 +2,13 @@ import { createFileRoute } from "@tanstack/react-router";
import { z } from "zod";
import { inviaPush } from "@/lib/webpush.server";
const schema = z.object({ endpoint: z.string().url().max(1000) });
/** Quanto aspettare prima di mandare davvero, per dare il tempo di chiudere l'app. */
const RITARDO_PREDEFINITO_MS = 10_000;
const schema = z.object({
endpoint: z.string().url().max(1000),
ritardoMs: z.number().int().min(0).max(25_000).optional(),
});
/**
* Manda una push di prova al dispositivo che la chiede, e racconta com'è andata.
@@ -14,6 +20,10 @@ const schema = z.object({ endpoint: z.string().url().max(1000) });
* `push_subscriptions` — cioè se il server sta parlando con questo telefono o con una
* vecchia iscrizione morta.
*
* L'invio è ritardato di qualche secondo: premendo il pulsante l'app è per forza aperta,
* quindi senza attesa la notifica arriverebbe sempre in primo piano — cioè nell'unico caso
* che non serve provare.
*
* Nessun controllo di accesso, come per `push-config` e `push-subscribe`: manda solo
* all'endpoint che il chiamante fornisce, quindi al massimo si sveglia da solo. È un URL
* segreto per dispositivo, e chi lo conosce lo ha già.
@@ -42,6 +52,10 @@ export const Route = createFileRoute("/api/public/push-prova")({
});
}
// ponytail: la funzione resta aperta per il ritardo, semplice ma limitato dal
// tetto di durata dell'hosting. Se servisse aspettare di più, ci vuole una coda.
await new Promise((r) => setTimeout(r, parsed.data.ritardoMs ?? RITARDO_PREDEFINITO_MS));
const { stato, corpo } = await inviaPush(
iscrizione,
"🔔 Notifica di prova",