UNPKG

authrix

Version:

Lightweight, flexible authentication library for Node.js and TypeScript.

1 lines 6.24 kB
import {createRequire}from'module';var s=class{static{this.emailServices=new Map;}static{this.smsServices=new Map;}static{this.emailCapabilities=new Map;}static register(e,r){let o=(e||"").trim();if(!o)throw new Error("Service name is required");if(!r||typeof r.sendVerificationEmail!="function")throw new Error("Invalid email service: must implement sendVerificationEmail");this.emailServices.set(o,r),r.capabilities&&this.emailCapabilities.set(o,r.capabilities);}static get(e){return this.emailServices.get((e||"").trim())}static setDefault(e){let r=this.get(e);if(!r)throw new Error(`Email service '${e}' not found`);this.emailServices.set("default",r);}static getDefault(){return this.get("default")}static list(){return Array.from(this.emailServices.keys())}static getCapabilities(e){return this.emailCapabilities.get((e||"").trim())}static setCapabilities(e,r){let o=(e||"").trim();if(!o)throw new Error("Service name is required");this.emailCapabilities.set(o,r);}static unregister(e){return this.emailServices.delete((e||"").trim())}static clear(){this.emailServices.clear(),this.emailCapabilities.clear();}static status(){let e=this.list(),r={};for(let o of e)r[o]=this.getCapabilities(o);return {registered:e,hasDefault:!!this.getDefault(),capabilities:r}}static registerSMS(e,r){let o=(e||"").trim();if(!o)throw new Error("Service name is required");if(!r||typeof r.sendVerificationSMS!="function")throw new Error("Invalid SMS service: must implement sendVerificationSMS");this.smsServices.set(o,r);}static getSMS(e){return this.smsServices.get((e||"").trim())}static setDefaultSMS(e){let r=this.getSMS(e);if(!r)throw new Error(`SMS service '${e}' not found`);this.smsServices.set("default",r);}static getDefaultSMS(){return this.getSMS("default")}static listSMS(){return Array.from(this.smsServices.keys())}static unregisterSMS(e){return this.smsServices.delete((e||"").trim())}static clearSMS(){this.smsServices.clear();}};var l=createRequire(import.meta.url),c=Symbol.for("authrix.config.singleton"),d=class t{constructor(){this.t="";this.r=null;this.n="auth_token";this.i=false;this.o=1e3*60*60*24*7;this.s=false;this.a=60*60*24;}static getInstance(){return globalThis[c]||(globalThis[c]=new t),globalThis[c]}get jwtSecret(){return this.t}set jwtSecret(e){this.t=e;}get db(){return this.r}set db(e){this.r=e;}get cookieName(){return this.n}set cookieName(e){this.n=e;}get forceSecureCookies(){return this.i}set forceSecureCookies(e){this.i=e;}get sessionMaxAgeMs(){return this.o}set sessionMaxAgeMs(e){e>0&&(this.o=e);}get rollingSessionEnabled(){return this.s}set rollingSessionEnabled(e){this.s=e;}get rollingSessionThresholdSeconds(){return this.a}set rollingSessionThresholdSeconds(e){e>0&&(this.a=e);}init(e){this.t=e.jwtSecret,this.r=e.db,e.cookieName&&(this.n=e.cookieName),typeof e.forceSecureCookies=="boolean"&&(this.i=e.forceSecureCookies),e.session&&(typeof e.session.maxAgeMs=="number"&&(this.o=e.session.maxAgeMs),e.session.rolling&&(typeof e.session.rolling.enabled=="boolean"&&(this.s=e.session.rolling.enabled),typeof e.session.rolling.thresholdSeconds=="number"&&(this.a=e.session.rolling.thresholdSeconds))),e.email&&m(e.email);let r=process.env.NODE_ENV==="production";!this.t||this.t.length<12,r&&process.env.AUTHRIX_PASSWORD_PEPPER;}},n=d.getInstance(),b={get jwtSecret(){return n.jwtSecret},set jwtSecret(t){n.jwtSecret=t;},get db(){return n.db},set db(t){n.db=t;},get cookieName(){return n.cookieName},set cookieName(t){n.cookieName=t;},get forceSecureCookies(){return n.forceSecureCookies},set forceSecureCookies(t){n.forceSecureCookies=t;},get sessionMaxAgeMs(){return n.sessionMaxAgeMs},set sessionMaxAgeMs(t){n.sessionMaxAgeMs=t;},get rollingSessionEnabled(){return n.rollingSessionEnabled},set rollingSessionEnabled(t){n.rollingSessionEnabled=t;},get rollingSessionThresholdSeconds(){return n.rollingSessionThresholdSeconds},set rollingSessionThresholdSeconds(t){n.rollingSessionThresholdSeconds=t;}};function h(t){n.init(t);}function v(){return !!(n.jwtSecret&&n.db)}function f(){return {jwtSecret:n.jwtSecret?"[PRESENT]":"[MISSING]",db:n.db?"[CONFIGURED]":"[NOT CONFIGURED]",cookieName:n.cookieName}}function m(t){let e=t?.autoDetect!==false;try{let{ConsoleEmailService:a}=l("../email/console");s.register("console",new a);}catch{}if(t?.providers?.resend)try{let{ResendEmailService:a}=l("../email/resend"),i=new a(t.providers.resend);s.register("resend",i),i.capabilities&&s.setCapabilities("resend",i.capabilities);}catch{}if(t?.providers?.sendgrid)try{let{SendGridEmailService:a}=l("../email/sendgrid"),i=new a(t.providers.sendgrid);s.register("sendgrid",i),i.capabilities&&s.setCapabilities("sendgrid",i.capabilities);}catch{}if(t?.providers?.gmail)try{let{GmailEmailService:a}=l("../email/gmail"),i=new a(t.providers.gmail);s.register("gmail",i),i.capabilities&&s.setCapabilities("gmail",i.capabilities);}catch{}if(t?.providers?.smtp)try{let{SMTPEmailService:a}=l("../email/customSMTP"),i=new a(t.providers.smtp);s.register("smtp",i),i.capabilities&&s.setCapabilities("smtp",i.capabilities);}catch{}if(e){try{if(process.env.RESEND_API_KEY&&!s.get("resend")){let{ResendEmailService:a}=l("../email/resend"),i=new a;s.register("resend",i),i.capabilities&&s.setCapabilities("resend",i.capabilities);}}catch{}try{if(process.env.SENDGRID_API_KEY&&!s.get("sendgrid")){let{SendGridEmailService:a}=l("../email/sendgrid"),i=new a;s.register("sendgrid",i),i.capabilities&&s.setCapabilities("sendgrid",i.capabilities);}}catch{}try{if(process.env.GMAIL_USER&&process.env.GMAIL_APP_PASSWORD&&!s.get("gmail")){let{GmailEmailService:a}=l("../email/gmail"),i=new a;s.register("gmail",i),i.capabilities&&s.setCapabilities("gmail",i.capabilities);}}catch{}try{if(process.env.SMTP_HOST&&process.env.SMTP_USER&&process.env.SMTP_PASS&&!s.get("smtp")){let{SMTPEmailService:a}=l("../email/customSMTP"),i=new a;s.register("smtp",i),i.capabilities&&s.setCapabilities("smtp",i.capabilities);}}catch{}}let r=t?.defaultService||t?.defaultEmailService||process.env.DEFAULT_EMAIL_SERVICE,o=["resend","sendgrid","gmail","smtp","console"];if(r&&s.get(r))s.setDefault(r);else for(let a of o)if(s.get(a)){s.setDefault(a);break}return {services:s.list(),default:s.getDefault()?"set":null}}export{s as a,b,h as c,v as d,f as e};