1import{a as S}from"./chunk-CNDF42JC.js";import{E as u,Eb as N,Fb as k,H as o,Hb as v,K as M,L as p,T as a,Vb as D,a as l,b as c,f as w,i as h,j as L,l as f,s as g,x}from"./chunk-MUJ25PM3.js";var F="beetrics.settings.language",K="es",z=["es","en"],C=class i{getLanguage(){let e=localStorage.getItem(F);return z.includes(e)?e:K}setLanguage(e){localStorage.setItem(F,e)}static \u0275fac=function(t){return new(t||i)};static \u0275prov=o({token:i,factory:i.\u0275fac,providedIn:"root"})};var I="form.instanceId",E="organization.subscriptionPlanId",R="organization.subscriptionPlanKey",b=class i{selectedFormInstanceIdSignal=a(this.loadFromStorage(I));selectedFormInstanceId=this.selectedFormInstanceIdSignal.asReadonly();subscriptionPlanIdSignal=a(this.loadFromStorage(E));subscriptionPlanId=this.subscriptionPlanIdSignal.asReadonly();subscriptionPlanKeySignal=a(localStorage.getItem(R));subscriptionPlanKey=this.subscriptionPlanKeySignal.asReadonly();menuItemsSignal=a([]);menuItems=this.menuItemsSignal.asReadonly();organizationDescriptionSignal=a(null);organizationDescription=this.organizationDescriptionSignal.asReadonly();loadFromStorage(e){let t=localStorage.getItem(e);if(t){let r=parseInt(t,10);return isNaN(r)?null:r}return null}setSelectedFormInstanceId(e){this.selectedFormInstanceIdSignal.set(e),localStorage.setItem(I,e.toString())}getSelectedFormInstanceId(){return this.selectedFormInstanceIdSignal()}setSubscriptionPlanId(e){this.subscriptionPlanIdSignal.set(e),localStorage.setItem(E,e.toString())}setSubscriptionPlanKey(e){this.subscriptionPlanKeySignal.set(e),localStorage.setItem(R,e)}getSubscriptionPlanKey(){return this.subscriptionPlanKeySignal()}getSubscriptionPlanId(){return this.subscriptionPlanIdSignal()}setMenuItems(e){this.menuItemsSignal.set(e)}setOrganizationDescription(e){this.organizationDescriptionSignal.set(e)}getOrganizationDescription(){return this.organizationDescriptionSignal()}clearSelectedFormInstance(){this.selectedFormInstanceIdSignal.set(null),localStorage.removeItem(I)}clearSelectedFormInstanceId(){this.selectedFormInstanceIdSignal.set(null),this.subscriptionPlanIdSignal.set(null),this.subscriptionPlanKeySignal.set(null),this.menuItemsSignal.set([]),this.organizationDescriptionSignal.set(null),localStorage.removeItem(I),localStorage.removeItem(E),localStorage.removeItem(R)}static \u0275fac=function(t){return new(t||i)};static \u0275prov=o({token:i,factory:i.\u0275fac,providedIn:"root"})};var y=class extends Error{constructor(t,r){super(r);this.code=t;this.name="LoginError"}code};var ne=["image/jpeg","image/png"],se=2*1024*1024,A=class i{apiUrl=S.apiUrl;http=p(v);profileSignal=a(null);avatarUrlSignal=a(null);avatarCacheBuster=Date.now();profile=this.profileSignal.asReadonly();avatarUrl=this.avatarUrlSignal.asReadonly();getMyProfile(){return this.http.get(`${this.apiUrl}/users/me`).pipe(u(e=>this.applyProfile(e)))}updateMyProfile(e){return this.http.put(`${this.apiUrl}/users/me`,e).pipe(u(t=>this.applyProfile(t)))}uploadAvatar(e){let t=new FormData;return t.append("file",e),this.http.put(`${this.apiUrl}/users/me/avatar`,t).pipe(u(r=>{this.profileSignal.set(r),this.loadAvatar()}))}deleteAvatar(){return this.http.delete(`${this.apiUrl}/users/me/avatar`).pipe(u(()=>{this.setAvatarUrl(null);let e=this.profileSignal();e&&this.profileSignal.set(c(l({},e),{hasAvatar:!1}))}))}loadAvatar(){let e=new k().set("t",(this.avatarCacheBuster++).toString());this.http.get(`${this.apiUrl}/users/me/avatar`,{responseType:"blob",params:e}).pipe(g(()=>h(null))).subscribe(t=>{this.setAvatarUrl(t?URL.createObjectURL(t):null)})}reset(){this.profileSignal.set(null),this.setAvatarUrl(null)}applyProfile(e){this.profileSignal.set(e),e.hasAvatar?this.loadAvatar():this.setAvatarUrl(null)}setAvatarUrl(e){let t=this.avatarUrlSignal();t&&URL.revokeObjectURL(t),this.avatarUrlSignal.set(e)}static \u0275fac=function(t){return new(t||i)};static \u0275prov=o({token:i,factory:i.\u0275fac,providedIn:"root"})};var d="auth.access",T="auth.remember",P=class i{storage=sessionStorage;setRemember(e){(e?localStorage:sessionStorage).setItem(T,e?"1":"0"),this.storage=e?localStorage:sessionStorage}getRemember(){return(localStorage.getItem(T)??sessionStorage.getItem(T))==="1"}saveAccessToken(e){this.storage.setItem(d,e)}getAccessToken(){return this.storage.getItem(d)??localStorage.getItem(d)??sessionStorage.getItem(d)}
1clear(){[localStorage,sessionStorage].forEach(e=>{e.removeItem(d),e.removeItem(T)})}static \u0275fac=function(t){return new(t||i)};static \u0275prov=o({token:i,factory:i.\u0275fac,providedIn:"root"})};function O(i){try{let e=i.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),t=decodeURIComponent(atob(e).split("").map(r=>"%"+("00"+r.charCodeAt(0).toString(16)).slice(-2)).join(""));return JSON.parse(t)}catch{return null}}function B(i){switch(i?.status){case 0:return"noConnection";case 400:case 401:return"invalidCredentials";case 429:return"tooManyAttempts";default:return"generic"}}var $=class i{constructor(e,t){this.http=e;this.storage=t;let r=this.storage.getAccessToken();if(r){let n=O(r);if(!n?.exp||n.exp*1e3>Date.now()){let U={id:n?.sub??"unknown",username:n?.sub??"unknown"};this.storage.getRemember()&&this.storage.setRemember(!0),this.state$.next({isAuthenticated:!0,user:U,accessToken:r})}else this.storage.clear()}}http;storage;api=`${S.apiUrl}/auth`;state$=new w({isAuthenticated:!1,user:null,accessToken:null});authState$=this.state$.asObservable();isAuthenticated$=this.authState$.pipe(f(e=>e.isAuthenticated));user$=this.authState$.pipe(f(e=>e.user));formInstanceStateService=p(b);myProfileService=p(A);translocoService=p(D);login(e){return this.storage.setRemember(!!e.remember),this.http.post(`${this.api}/login`,{username:e.username,password:e.password}).pipe(u(({token:t})=>this.storage.saveAccessToken(t)),f(({token:t,username:r})=>{let s={id:O(t)?.sub??r,username:r};return this.state$.next({isAuthenticated:!0,user:s,accessToken:t}),s}),g(t=>{let r=B(t),n=this.translocoService.translate(`login.errors.${r}`);return L(()=>new y(r,n))}))}logout$(){let e=this.getAccessToken(),t=e?new N({Authorization:`Bearer ${e}`}):void 0;return this.http.post(`${this.api}/logout`,{},{headers:t}).pipe(g(()=>h(void 0)),x(()=>{this.storage.clear(),this.formInstanceStateService.clearSelectedFormInstanceId(),this.myProfileService.reset(),this.state$.next({isAuthenticated:!1,user:null,accessToken:null})}))}logout=()=>this.logout$().subscribe();getAccessToken(){return this.state$.value.accessToken??this.storage.getAccessToken()}static \u0275fac=function(t){return new(t||i)(M(v),M(P))};static \u0275prov=o({token:i,factory:i.\u0275fac,providedIn:"root"})};var Y=6e3,H=280,j=class i{items=a([]);timers=new Map;exitTimers=new Map;lastId=0;notifications=this.items.asReadonly();show(e,t,r={}){let n=++this.lastId;this.items.update(U=>[...U,{id:n,title:e,message:t,variant:r.variant??"success"}]);let s=r.durationMs??Y;return s>0&&this.timers.set(n,setTimeout(()=>this.dismiss(n),s)),n}success(e,t,r={}){return this.show(e,t,c(l({},r),{variant:"success"}))}info(e,t,r={}){return this.show(e,t,c(l({},r),{variant:"info"}))}error(e,t,r={}){return this.show(e,t,c(l({},r),{variant:"error"}))}dismissAfter(e,t){if(!this.items().some(s=>s.id===e&&!s.leaving))return;let n=this.timers.get(e);n!==void 0&&clearTimeout(n),this.timers.set(e,setTimeout(()=>this.dismiss(e),t))}dismiss(e){let t=this.timers.get(e);t!==void 0&&(clearTimeout(t),this.timers.delete(e)),this.items().some(n=>n.id===e&&!n.leaving)&&(this.items.update(n=>n.map(s=>s.id===e?c(l({},s),{leaving:!0}):s)),this.exitTimers.set(e,setTimeout(()=>this.remove(e),H)))}dismissAll(){this.timers.forEach(e=>clearTimeout(e)),this.timers.clear(),this.exitTimers.forEach(e=>clearTimeout(e)),this.exitTimers.clear(),this.items.set([])}remove(e){this.exitTimers.delete(e),this.items.update(t=>t.filter(r=>r.id!==e))}static \u0275fac=function(t){return new(t||i)};static \u0275prov=o({token:i,factory:i.\u0275fac,providedIn:"root"})};export{C as a,y as b,b as c,ne as d,se as e,A as f,$ as g,j as h};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.