UNPKG

dovecot-auth-client

Version:

Dovecot authentication socket protocol client for Node

3 lines (2 loc) 1.16 kB
import t from"node:net";function e(t,e,n,o,r,i,c,s){const a=(t=>t.trim().split("\t"))(e),[u]=a;switch(t){case"initial":if("OK"===u)return n.write(`CPID\t${process.pid}\n`),"sent-cpid";break;case"sent-cpid":{const t=Buffer.from(`${o}\0${o}\0${r}`).toString("base64");return n.write(`AUTH\t1\tPLAIN\tservice=${i}\tresp=${t}\n`),"auth-requested"}case"auth-requested":if("OK"===u)return clearTimeout(c),n.end(),s(!0),"done";if("FAIL"===u||"NOTFOUND"===u)return clearTimeout(c),n.end(),s(!1),"done"}return t}async function n(n,o,r={}){const{socketPath:i="/var/run/dovecot/auth-client",service:c="smtp",timeout:s=3e3}=r;return new Promise(((r,a)=>{const u=t.createConnection({path:i});let d="initial",f=!1;const l=setTimeout((()=>{f=!0,u.destroy(),a(new Error("Dovecot auth timed out"))}),s);u.on("connect",(()=>{u.write("VERSION\t1\t0\n")})),u.on("data",(t=>{const i=t.toString().split("\n").filter(Boolean);for(const t of i)if(d=e(d,t,u,n,o,c,l,r),"done"===d)break})),u.on("error",(t=>{f||(clearTimeout(l),a(t))})),u.on("end",(()=>{clearTimeout(l)}))}))}const o={dovecotAuth:n};export{o as default,n as dovecotAuth,e as transition}; //# sourceMappingURL=index.js.map