UNPKG

insite-cookie

Version:

Cookie support for inSite

3 lines (2 loc) 4.75 kB
function p(){}var y=new WeakMap,h=class o extends Promise{constructor(e,t){let r,n;if(super((i,s)=>{r=i,n=s}),y.set(this,{resolve:r,reject:n}),t?.signal)if(t.signal.aborted)this.reject(new DOMException("Aborted","AbortError"));else{let i=()=>this.reject(new DOMException("Aborted","AbortError"));t.signal.addEventListener("abort",i),this.finally(()=>t.signal?.removeEventListener("abort",i))}if(typeof t?.timeout=="number"&&Number.isFinite(t.timeout)){let i=setTimeout(()=>this.reject(new DOMException("Timeout exceeded","TimeoutError")),t.timeout);this.finally(()=>clearTimeout(i))}e?.(this.resolve,this.reject)}isPending=!0;isFulfilled=!1;isRejected=!1;state="pending";result;resolve=e=>{if(this.isPending){this.isPending=!1,this.isFulfilled=!0,this.state="fulfilled",this.result=e;let t=y.get(this);t&&(t.resolve.call(this,e),y.delete(this))}};reject=e=>{if(this.isPending){this.isPending=!1,this.isRejected=!0,this.state="rejected",this.result=e;let t=y.get(this);t&&(t.reject.call(this,e),y.delete(this))}};static resolved(e){return new o(t=>t(e))}static rejected(e){return new o((t,r)=>r(e))}};function D(o,e=0,t={}){let{leading:r=!1,trailing:n=!0}=t,{maxWait:i=1/0}=t,s,l,d,x,f,g,a,S,j=async()=>{let u=Date.now();u>=d?(s=void 0,d=void 0,clearTimeout(l),l=void 0,typeof a=="function"&&await a(),c.resolve(S),g=r):(clearTimeout(s),s=setTimeout(j,d-u))},O=Number.isFinite(i)?()=>{a===m&&(a=!1),m(),l=setTimeout(O,i)}:null;async function m(){try{return S=await o.apply(x,f),S}catch(u){throw c.reject(u),u}}r&&typeof r=="boolean"&&(r=m),g=r,n&&typeof n=="boolean"&&(n=m),a=n;let c=Object.assign(function(...u){return f=u,x=this,d=Date.now()+e,a=n,c.promise.isPending||(c.promise=new h((W,N)=>{c.resolve=W,c.reject=N,typeof g=="function"&&(g(),g=!1,a===m&&(a=!1)),s||(s=setTimeout(j,e),O&&(l=setTimeout(O,i)))})),c.promise},{callback:o,promise:h.resolved(void 0),resolve:p,reject:p,run:m,clear:async u=>{clearTimeout(s),s=void 0,clearTimeout(l),l=void 0,c.resolve(u?await m():S)}});return c}D.noop=Object.assign(()=>{},{callback:p,promise:h.resolved(void 0),resolve:p,reject:p,run:p,clear:p});var w=new Map;function $(o,e){o.delete(e);let t=w.get(o);if(t){let r=t.get(e);r&&(clearTimeout(r),t.delete(e)),t.size||w.delete(o)}}function v(o,e,t){let r=setTimeout(()=>$(o,e),t);w.get(o)?.set(e,r)??w.set(o,new Map([[e,r]]))}function b(o,e){let t=o.get(e);return $(o,e),t}function T(o,e,t,r,n=!0){return Array.isArray(o)&&(o=o.length),typeof r!="string"&&(n=r??!0,r=t),(n?`${o}\xA0`:"")+T.raw(o,e,t,r)}T.raw=(o,e,t,r=t)=>{o=Math.abs(o);let n=o%10,i=o%100;return n===1&&i!==11?e:n>=2&&n<=4&&!(i>=12&&i<=15)?t:r};function E(o,e){return Math.floor(Math.random()*(e-o+1)+o)}function A(o,e,t,r){return v(o,e,r),o.set(e,t)}import{ClassMiddleware as B}from"insite-http";var k=new Map;var C=class o extends B{constructor(e={}){super();let{path:t="/cookie"}=e;this.listeners={GET:[[t,this.#e]]}}#e=(e,t)=>{let r=e.querystring;return r&&k.has(r)?t.writeHead(200,{"Content-Type":"text/plain; charset=utf-8","Set-Cookie":o.cookify(...b(k,r))}).end():!1};static make({name:e,value:t,maxAge:r,expiresAt:n,domain:i,path:s="/",secure:l=!0,httpOnly:d=!0,sameSite:x="Strict"}){let f=[`${e}=${t}`];return r!==void 0?f.push(`Max-Age=${r}`):n&&f.push(`Max-Age=${Math.round((n.getTime()-Date.now())/1e3)}`),i&&f.push(`Domain=${i}`),s&&f.push(`Path=${s}`),l&&f.push("Secure"),d&&f.push("HttpOnly"),x&&f.push(`SameSite=${x}`),f.join("; ")}static cookify(e,t){return Object.entries(e).map(([r,n])=>this.make({name:r,value:n,...t}))}};function M(o){return o?o.split(/;\s*/).reduce((e,t)=>{let[r,n]=t.split(/=/);try{e[r]=JSON.parse(n)}catch{e[r]=n}return e},{}):{}}import R from"node:crypto";var I={set:"~setcookie"};var _=2e3,P=class{constructor({usersServer:e,domain:t,maxAge:r}){this.usersServer=e,this.domain=t??process.env.INSITE_HOST,this.maxAge=r??this.usersServer.users.sessions.collection.expireAfterSeconds,this.usersServer.wss.on("client-connect",this.#t),this.usersServer.wss.on("client-session",this.#r)}#e=new WeakMap;usersServer;domain;maxAge;set(e,t,r){let n=`${Math.round(performance.now()*Number.MAX_SAFE_INTEGER).toString(36)}$${R.randomBytes(E(4,8)).toString("hex")}`;A(k,n,[t,r],_),e.sendMessage(I.set,n)}unset(e,t){this.set(e,t.reduce((r,n)=>(r[n]="",r),{}),{domain:this.domain,maxAge:0})}#t=(e,t)=>{if(this.#e.set(e,null),t.headers.cookie){let{sessionId:r=null}=M(t.headers.cookie);this.#e.set(e,r),r&&this.usersServer.setSession(e,r,!0)}};#r=e=>{this.#e.get(e)!==e.session?._id&&(this.#e.set(e,e.session?._id??null),e.isOpen&&e.session?this.set(e,{sessionId:e.session._id},{domain:this.domain,maxAge:this.maxAge}):this.unset(e,["sessionId"]))};static parse=M};export{C as CookieMiddleware,P as CookieSetter,M as parseCookie}; //# sourceMappingURL=index.js.map