#!/bin/sh
//bin/true; exec deno run -A "$0" "$@"
import {
  antiDuplicationPolicy,
  pubkeyBanPolicy,
  hellthreadPolicy,
  pipeline,
  rateLimitPolicy,
  readStdin,
  filterPolicy,
  writeStdout,
} from 'https://gitlab.com/soapbox-pub/strfry-policies/-/raw/develop/mod.ts';

const blockFiles: Policy<Filter> = ({ event }) => {
  if (event.kind === 30065 || event.kind === 1064) {
	return { id: event.id, action: 'reject', msg: 'blocked: files on nostr is dumb' };
  }
  if (event.kind === 34550 || event.kind === 4550) {
	return { id: event.id, action: 'reject', msg: 'blocked: please use a dedicated relay for moderated communities' };
  }
  return { id: event.id, action: 'accept', msg: '' };
};

const auto_reply = '588b9199e1a56264f98a50dcde1a7798909f8856c54636b3de97e79fc96f0da5'
const auto_reply_2 = '36bd2bc05fa5c70c0eb158cf5c23e47722077c591e9b49ac8e8f644d81ad7012' 
const dm_reporter = '208404de380e7c02c366cc667ae9e969d687ec7a3c03aacd364c4716a2e72327'
const optimism = 'fa70d85226067a9a8623ad0e1fced1ad0bd31d65afb73f9739bb75804a25ef41'
const bnb = '08ff86e22fc7c51d8c98ee94a5e4e71f9497d23d4812a8e186c6bacb6080ee5a'
const banned = [auto_reply, auto_reply_2, dm_reporter, optimism, bnb]

const local_ip = "127.0.0.1"
const wine_filter_ip = "51.81.244.81"

const rate_limit_whitelist = [
	local_ip,
	wine_filter_ip
]

for await (const msg of readStdin()) {
  const result = await pipeline(msg, [
    [hellthreadPolicy, { limit: 100 }],
    [pubkeyBanPolicy, banned],
    [antiDuplicationPolicy, { ttl: 60000, minLength: 50 }],
    [blockFiles],
    [rateLimitPolicy, { whitelist: rate_limit_whitelist }],
  ]);

  writeStdout(result);
}

