jubnl
00447c9043
feat(server): validate notification request bodies
...
notifications.dto.ts wraps the @trek/shared request schemas via createZodDto
and types all five @Body() params; the five NotificationsController entries
leave the body-contract allow-list (ratchet gate enforced). Contract catch:
the client sends server/token: null on test-ntfy to mean 'use the saved
value', so testNtfyRequestSchema gains .nullable() there (spec pinned). The
inline response-enum and url-type checks die — malformed bodies now get the
pipe's standard envelope; valid bodies behave byte-identically. Two
integration cases pinning pre-ratchet tolerances (flat notify_* preferences
body, body-less test-smtp POST) update to the current wire contract.
2026-08-02 11:36:36 +02:00
..
2026-07-30 17:07:12 +02:00
2026-07-29 15:14:21 +02:00
2026-06-16 22:22:45 +02:00
2026-07-28 20:22:01 +02:00
2026-06-16 22:22:45 +02:00
2026-07-28 20:22:01 +02:00
2026-08-02 11:36:06 +02:00
2026-06-16 22:22:45 +02:00
2026-07-25 15:12:38 +02:00
2026-07-26 20:34:06 +02:00
2026-07-29 00:07:51 +02:00
2026-08-01 15:50:36 +02:00
2026-08-01 17:39:59 +02:00
2026-07-27 22:34:41 +02:00
2026-07-27 22:34:41 +02:00
2026-08-02 10:10:33 +02:00
2026-07-27 22:09:08 +02:00
2026-08-01 17:39:59 +02:00
2026-08-01 17:46:54 +02:00
2026-07-27 22:09:08 +02:00
2026-07-27 23:48:23 +02:00
2026-07-29 00:07:51 +02:00
2026-07-29 01:53:40 +02:00
2026-07-29 00:07:51 +02:00
2026-06-16 22:22:45 +02:00
2026-07-26 15:28:55 +02:00
2026-07-27 00:27:12 +02:00
2026-07-29 01:53:54 +02:00
2026-08-01 14:03:05 +02:00
2026-08-02 11:36:06 +02:00
2026-06-16 22:22:45 +02:00
2026-07-25 18:14:37 +02:00
2026-07-25 18:14:37 +02:00
2026-07-29 00:07:51 +02:00
2026-07-27 20:57:01 +02:00
2026-07-29 01:53:54 +02:00
2026-06-16 22:22:45 +02:00
2026-07-27 23:48:05 +02:00
2026-07-06 00:27:42 +02:00
2026-07-29 00:07:51 +02:00
2026-06-16 22:22:45 +02:00
2026-06-16 22:22:45 +02:00
2026-06-16 22:22:45 +02:00
2026-07-05 01:13:04 +02:00
2026-07-29 20:21:09 +02:00
2026-07-30 17:07:12 +02:00
2026-07-27 22:09:08 +02:00
2026-07-29 00:07:51 +02:00
2026-08-02 11:36:36 +02:00
2026-08-02 11:36:06 +02:00
2026-08-02 11:36:06 +02:00
2026-07-27 22:09:08 +02:00
2026-07-28 20:22:01 +02:00
2026-08-01 18:36:07 +02:00
2026-08-01 18:36:07 +02:00
2026-07-26 16:55:53 +02:00
2026-08-02 11:36:06 +02:00
2026-08-02 10:28:22 +02:00
2026-07-27 22:34:41 +02:00
2026-07-30 17:07:12 +02:00
2026-07-30 17:07:12 +02:00
2026-07-30 17:07:12 +02:00
2026-07-30 17:53:48 +02:00
2026-07-28 20:22:01 +02:00
2026-07-29 00:07:51 +02:00
2026-07-27 19:47:01 +02:00
2026-08-02 11:36:06 +02:00
2026-07-26 22:24:14 +02:00
2026-07-26 22:23:57 +02:00
2026-06-16 22:22:45 +02:00
2026-07-29 01:53:40 +02:00
2026-06-16 22:22:45 +02:00
2026-06-16 22:22:45 +02:00
2026-07-26 15:28:55 +02:00
2026-07-26 14:55:13 +02:00
2026-07-29 01:53:40 +02:00
2026-08-01 12:45:35 +02:00
2026-07-29 21:39:51 +02:00
2026-07-27 22:08:37 +02:00
2026-07-29 01:53:40 +02:00
2026-08-02 11:36:06 +02:00
2026-07-27 18:39:47 +02:00
2026-08-02 11:36:06 +02:00
2026-07-26 14:55:13 +02:00
2026-06-16 22:22:45 +02:00
2026-07-25 18:14:37 +02:00
2026-06-16 22:22:45 +02:00