0
2
/** Label values that cause content to be filtered from feeds (imperative + defaultSetting:"hide"). */
export const HIDE_LABELS = new Set([
"!hide",
"!takedown",
"csae",
"spam",
"copyright",
"gore",
"nsfl",
"dmca-violation",
"doxxing",
]);
/** SQL fragment: NOT EXISTS subquery filtering rows with hide-severity labels.
* A label is only active if its latest row (by cts) has neg = 0.
* `uriExpr` is the column to match against (e.g. "t.uri"). */
export function hideLabelsFilter(uriExpr: string): string {
const inList = [...HIDE_LABELS].map((v) => `'${v}'`).join(",");
return `NOT EXISTS (
SELECT 1 FROM _labels l
WHERE l.uri = ${uriExpr} AND l.val IN (${inList})
AND l.neg = 0
AND NOT EXISTS (
SELECT 1 FROM _labels l2
WHERE l2.uri = l.uri AND l2.val = l.val AND l2.neg = 1 AND l2.cts > l.cts
)
)`;
}
/** SQL fragment: NOT EXISTS subquery filtering rows the author self-labelled
* with a hide-severity value. `selfLabelTable` is the record's self-label
* child table, e.g. "social.grain.story__labels_self_labels". The story
* hydrator drops these before serving, so a count that includes them is a
* count of stories nobody will ever be shown. */
export function hideSelfLabelsFilter(selfLabelTable: string, uriExpr: string): string {
const inList = [...HIDE_LABELS].map((v) => `'${v}'`).join(",");
return `NOT EXISTS (
SELECT 1 FROM "${selfLabelTable}" sl
WHERE sl.parent_uri = ${uriExpr} AND sl.val IN (${inList})
)`;
}
/** SQL fragment: NOT EXISTS subquery filtering rows carrying any active label,
* whatever its severity. For surfaces that cannot show a warning or a blur,
* such as a search engine's index, where the only safe answer is to leave
* labeled content out. */
export function unlabeledFilter(uriExpr: string): string {
return `NOT EXISTS (
SELECT 1 FROM _labels l
WHERE l.uri = ${uriExpr} AND l.neg = 0
AND NOT EXISTS (
SELECT 1 FROM _labels l2
WHERE l2.uri = l.uri AND l2.val = l.val AND l2.neg = 1 AND l2.cts > l.cts
)
)`;
}