const e=require("./registration"),{isMemberActive:t,getMemberForDeviceKey:r}=require("./query"),{reactionStats:i}=require("./stats"),{KeetContractError:a}=require("./errors"),{trackActivity:o}=require("./hooks");async function s({header:e,oplog:o,reaction:s},{db:n,writer:c}){const[d,u,k]=await Promise.all([r(n,c.key),n.get("@keet/chat-by-message-id",{oplog:o}),n.get("@keet/threads",{id:0})]);if(!t(d)||!u||d.status.isMuted||!s)return;if(await n.get("@keet/reactions",{id:u.id,sender:d.key,reaction:s}))throw a.ABORT();const l={id:u.id,sender:d.key,clock:k.stats.chat.clock,reaction:s};return await n.insert("@keet/reactions",l),await i(n,k,l,null,e.timestamp),{writer:c,writerMember:d}}async function n({header:e,oplog:o,reaction:s},{db:n,writer:c}){const[d,u,k]=await Promise.all([r(n,c.key),n.get("@keet/chat-by-message-id",{oplog:o}),n.get("@keet/threads",{id:0})]);if(!t(d)||!u||d.status.isMuted)return;const l=await n.get("@keet/reactions",{id:u.id,sender:d.key,reaction:s});if(!l)throw a.ABORT();return await n.delete("@keet/reactions",l),await i(n,k,null,l,e.timestamp),{writer:c,writerMember:d}}module.exports={[e]:function(e){e.add("@keet/add-reaction",o(s)),e.add("@keet/remove-reaction",o(n))}};