UNPKG

dovecot-auth-client

Version:

Dovecot authentication socket protocol client for Node

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