An Inbox (or GET /v2/subscribers/:id/notifications) filtered by a flat list of 21 or more tags returns no notifications, even when a notification has one of the tags. At 31 or more tags, the request fails with 400 At most 30 tag groups are allowed.
The SDK sends repeated tags[] query parameters. Express's extended qs parser uses an array limit of 20; above that it returns an index-keyed object such as { "0": "t0", ..., "20": "t20" }. parseTagsQueryValue treats those entries as separate AND groups, so the Mongo filter requires a notification to have every tag. When the same overflow occurs inside an AND filter, the nested object can be stringified as [object Object].
Minimal reproduction:
tags[]=t0&tags[]=t1&...&tags[]=t20
Expected query fragment:
{ tags: { $in: ['t0', 't1', /* ... */ 't20'] } }
Actual query fragment is an $and of 21 one-tag clauses. The same parsing issue affects GET /v2/subscribers/:id/notifications and Inbox filters using this transform.
An Inbox (or
GET /v2/subscribers/:id/notifications) filtered by a flat list of 21 or more tags returns no notifications, even when a notification has one of the tags. At 31 or more tags, the request fails with400 At most 30 tag groups are allowed.The SDK sends repeated
tags[]query parameters. Express's extendedqsparser uses an array limit of 20; above that it returns an index-keyed object such as{ "0": "t0", ..., "20": "t20" }.parseTagsQueryValuetreats those entries as separate AND groups, so the Mongo filter requires a notification to have every tag. When the same overflow occurs inside an AND filter, the nested object can be stringified as[object Object].Minimal reproduction:
Expected query fragment:
Actual query fragment is an
$andof 21 one-tag clauses. The same parsing issue affectsGET /v2/subscribers/:id/notificationsand Inbox filters using this transform.