{"version":3,"file":"kif-lib-services.mjs","sources":["../../../projects/kif-lib/services/graphql.component.ts","../../../projects/kif-lib/services/interfaces/auth-config.interface.ts","../../../projects/kif-lib/services/auth/auth.service.ts","../../../projects/kif-lib/services/auth/session-expired.service.ts","../../../projects/kif-lib/services/auth/auth-interceptor.ts","../../../projects/kif-lib/services/graphql.module.ts","../../../projects/kif-lib/services/enum/error-type-code-enumeration.enum.ts","../../../projects/kif-lib/services/enum/error-kind-code-enumeration.enum.ts","../../../projects/kif-lib/services/public-api.ts","../../../projects/kif-lib/services/kif-lib-services.ts"],"sourcesContent":["import {  Injectable } from \"@angular/core\";\nimport { Apollo, gql } from \"apollo-angular\";\nimport { catchError, of } from \"rxjs\";\nimport { ApolloQueryResult } from \"./models\";\n@Injectable({\n    providedIn: 'root' \n})\nexport class GraphQLComponent {\n    \n    constructor(public apollo: Apollo) {}\n\n    // READ\n    read(query: string, variables: any, fetchPolicy?: any, newVersion:boolean=false) {            \n        const request = this.apollo.query({\n            query: gql`${query}`,\n            variables: variables,\n            fetchPolicy: fetchPolicy\n        });\n        return !newVersion ? request : request.pipe(catchError((err:any)=> this.getCatchError(err) ));      \n    }\n\n    // UPDATE\n    update(query: string, variables:any, newVersion:boolean=false){\n        const request =  this.apollo\n            .mutate({\n                mutation: gql`${query}`,\n                variables\n            });\n        return !newVersion ? request : request.pipe(catchError((err:any)=> this.getCatchError(err) ));\n    }\n\n    // WATCH\n    watchQuery(query: string, variables: any) {\n        return this.apollo\n            .watchQuery({\n                query: gql`${query}`,\n                variables: variables\n            });\n    }\n\n    resetCacheApollo() {\n        this.apollo.client.resetStore();\n    }\n\n    // DEPRECAR METODOS - create & delete\n    create(query: any, variables?: any, newVersion:boolean=false) {\n        const request = this.apollo\n            .mutate({\n                mutation: gql`${query}`,\n                variables\n            });\n        return !newVersion ? request : request.pipe(catchError((err:any)=> this.getCatchError(err) ));\n    }\n    delete(query: string, variables:any, newVersion:boolean=false){\n        const request = this.apollo\n            .mutate({\n                mutation: gql`${query}`,\n                variables\n            });\n        return !newVersion ? request : request.pipe(catchError((err:any)=> this.getCatchError(err) ));\n    }\n\n    private getCatchError(err:any){\n        return of( this.standardizeError(err) ) \n    }\n\n    private standardizeError<T>(err: any): ApolloQueryResult<T> {\n        const standardizedError: ApolloQueryResult<T> = {\n            data: undefined,\n            loading: false,\n            networkStatus: 8,\n            error: undefined\n        };\n    \n        if (err.networkError) {\n            standardizedError.error = {\n                errorMessage: err.networkError.message, \n                stacktrace: [err.networkError.message],\n            };\n        }\n        if (err.graphQLErrors && err.graphQLErrors.length > 0) {\n            const firstGraphQLError = err.graphQLErrors[0];\n            standardizedError.error = {\n                errorMessage: firstGraphQLError.message, \n                code: firstGraphQLError.extensions?.code, \n                locations: firstGraphQLError.locations, \n                stacktrace: firstGraphQLError.extensions?.stacktrace, \n            };\n        }\n        if (!err.networkError && (!err.graphQLErrors || err.graphQLErrors.length === 0)) {\n            standardizedError.error = {\n                errorMessage: 'Error desconocido.' // Mensaje de error genérico\n            };\n        }\n    \n        return standardizedError;\n    }\n}","import { InjectionToken } from '@angular/core';\n\nexport interface IAuthConfig {\n    refresh_url?: string;\n    /**\n     * Clave del token en la respuesta del endpoint de refresh.\n     * AWS Cognito retorna 'access_token' por defecto.\n     */\n    refresh_token_key?: string;\n    /**\n     * Función provista por el consumidor para renovar el token silenciosamente.\n     * Debe retornar el nuevo access token o null si la renovación falló.\n     * Ejemplo con Amplify: () => fetchAuthSession({ forceRefresh: true })\n     *   .then(s => s.tokens?.accessToken?.toString() ?? null)\n     */\n    onRefresh?: () => Promise<string | null>;\n}\n\nexport const AUTH_CONFIG = new InjectionToken<IAuthConfig>('AUTH_CONFIG');\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { HttpBackend, HttpClient } from '@angular/common/http';\nimport { IRoleActive } from '../public-api';\nimport { AUTH_CONFIG, IAuthConfig } from '../interfaces/auth-config.interface';\n\n@Injectable()\nexport class AuthService {\n    private readonly TOKEN_KEY = 'authToken';\n    private readonly TOKEN = 'token';\n    private readonly REFRESH_TOKEN_KEY = 'refreshToken';\n    private readonly ROLE_ACTIVE_KEY = 'role-active';\n    private readonly USER_KEY = 'user';\n    private readonly USER_CAPABILITIES_KEY = 'userCapabilities';\n    private readonly CIA_KEY = 'cia';\n\n    private tokenSubject = new BehaviorSubject<string | null>(this.getToken());\n\n    /** Indica si hay un refresh en curso para serializar peticiones concurrentes */\n    isRefreshing = false;\n    /** Emite el nuevo token cuando el refresh finaliza; null mientras está en curso */\n    refreshTokenSubject = new BehaviorSubject<string | null>(null);\n\n    private http: HttpClient;\n\n    constructor(\n        handler: HttpBackend,\n        @Optional() @Inject(AUTH_CONFIG) private authConfig: IAuthConfig | null,\n    ) {\n        this.http = new HttpClient(handler);\n    }\n\n    // ── Token de acceso ──────────────────────────────────────────────────────\n\n    setToken(token: string): void {\n        localStorage.setItem(this.TOKEN_KEY, token);\n        this.tokenSubject.next(token);\n    }\n\n    getToken(): string | null {\n        return localStorage.getItem(this.TOKEN_KEY);\n    }\n\n    clearToken(): void {\n        localStorage.removeItem(this.TOKEN_KEY);\n        this.tokenSubject.next(null);\n    }\n\n    getTokenObservable(): Observable<string | null> {\n        return this.tokenSubject.asObservable();\n    }\n\n    isLoggedIn(): boolean {\n        return !!this.getToken();\n    }\n\n    /**\n     * Parsea el JWT y comprueba si el claim `exp` ya venció.\n     * Retorna true si no hay token, si no es un JWT válido o si expiró.\n     */\n    isTokenExpired(): boolean {\n        const token = this.getToken();\n        if (!token) return true;\n        try {\n            const payload = JSON.parse(atob(token.split('.')[1]));\n            return payload.exp * 1000 < Date.now();\n        } catch {\n            return true;\n        }\n    }\n\n    // ── Refresh token ────────────────────────────────────────────────────────\n\n    setRefreshToken(token: string): void {\n        localStorage.setItem(this.REFRESH_TOKEN_KEY, token);\n    }\n\n    getRefreshToken(): string | null {\n        return localStorage.getItem(this.REFRESH_TOKEN_KEY);\n    }\n\n    clearRefreshToken(): void {\n        localStorage.removeItem(this.REFRESH_TOKEN_KEY);\n    }\n\n    refreshAccessToken(): Observable<string> {\n        const refreshUrl = this.authConfig?.refresh_url;\n        const tokenKey = this.authConfig?.refresh_token_key ?? 'access_token';\n        const refreshToken = this.getRefreshToken();\n\n        if (!refreshUrl || !refreshToken) {\n            return throwError(() => new Error('AUTH_CONFIG.refresh_url o refreshToken no configurados'));\n        }\n\n        return this.http.post<Record<string, string>>(refreshUrl, { refreshToken }).pipe(\n            tap(response => {\n                const newToken = response[tokenKey];\n                this.setToken(newToken);\n                this.refreshTokenSubject.next(newToken);\n            }),\n            map(response => response[tokenKey]),\n            catchError(error => {\n                this.clearToken();\n                this.clearRefreshToken();\n                return throwError(() => error);\n            })\n        );\n    }\n\n    // ── Rol activo ───────────────────────────────────────────────────────────\n\n    removeActiveRole() {\n        localStorage.removeItem(this.ROLE_ACTIVE_KEY);\n    }\n\n    setActiveRole(roleCode: IRoleActive) {\n        localStorage.setItem(this.ROLE_ACTIVE_KEY, JSON.stringify(roleCode));\n    }\n\n    getActiveRole(): IRoleActive | null {\n        const sessionRoleActive = localStorage.getItem(this.ROLE_ACTIVE_KEY) || '';\n        return sessionRoleActive ? JSON.parse(sessionRoleActive) : null;\n    }\n\n    logout(): void {\n        localStorage.removeItem(this.TOKEN_KEY);\n        localStorage.removeItem(this.REFRESH_TOKEN_KEY);\n        localStorage.removeItem(this.ROLE_ACTIVE_KEY);\n        localStorage.removeItem(this.USER_KEY);\n        localStorage.removeItem(this.USER_CAPABILITIES_KEY);\n        localStorage.removeItem(this.CIA_KEY);\n        localStorage.removeItem(this.TOKEN);\n\n        Object.keys(localStorage)\n            .filter(key => key.startsWith('CognitoIdentityServiceProvider'))\n            .forEach(key => localStorage.removeItem(key));\n\n        this.tokenSubject.next(null);\n        this.isRefreshing = false;\n        this.refreshTokenSubject.next(null);\n    }\n\n    // ── Subdominio ───────────────────────────────────────────────────────────\n\n    getSubDomain(): string {\n        return window.location.hostname.split('.')[0];\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class SessionExpiredService {\n    private readonly expired$ = new Subject<void>();\n    private hasEmitted = false;\n\n    readonly sessionExpired: Observable<void> = this.expired$.asObservable();\n\n    emit(): void {\n        if (this.hasEmitted) return;\n        this.hasEmitted = true;\n        this.expired$.next();\n    }\n\n    reset(): void {\n        this.hasEmitted = false;\n    }\n}\n","import { HttpHandlerFn, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { from, throwError } from 'rxjs';\nimport { catchError, filter, switchMap, take } from 'rxjs/operators';\nimport { AUTH_CONFIG } from '../interfaces/auth-config.interface';\nimport { AuthService } from './auth.service';\nimport { SessionExpiredService } from './session-expired.service';\n\nexport const AuthInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\n    const authService = inject(AuthService);\n    const sessionExpired = inject(SessionExpiredService);\n    const authConfig = inject(AUTH_CONFIG, { optional: true });\n\n    const attachHeaders = (token: string | null) => {\n        const activeRole = authService.getActiveRole();\n        return req.clone({\n            setHeaders: {\n                authorization: token ?? '',\n                'active-role': activeRole?.code ?? ''\n            }\n        });\n    };\n\n    const refreshAndRetry = () => {\n        if (authService.isRefreshing) {\n            return authService.refreshTokenSubject.pipe(\n                filter((token): token is string => token !== null),\n                take(1),\n                switchMap(token => next(attachHeaders(token)))\n            );\n        }\n\n        authService.isRefreshing = true;\n        authService.refreshTokenSubject.next(null);\n\n        const refresh$ = authConfig?.onRefresh\n            ? from(authConfig.onRefresh())\n            : throwError(() => new Error('onRefresh no configurado'));\n\n        return refresh$.pipe(\n            switchMap(newToken => {\n                if (!newToken) throw new Error('No token after refresh');\n                authService.setToken(newToken);\n                authService.isRefreshing = false;\n                authService.refreshTokenSubject.next(newToken);\n                return next(attachHeaders(newToken));\n            }),\n            catchError(error => {\n                authService.isRefreshing = false;\n                sessionExpired.emit();\n                return throwError(() => error);\n            })\n        );\n    };\n\n    const token = authService.getToken();\n    const tokenExpired = token && authService.isTokenExpired();\n\n    if (tokenExpired) {\n        return refreshAndRetry();\n    }\n\n    return next(attachHeaders(token)).pipe(\n        catchError(error => {\n            if (error.status === 401) {\n                return refreshAndRetry();\n            }\n            return throwError(() => error);\n        })\n    );\n};\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { APOLLO_OPTIONS, ApolloModule } from 'apollo-angular';\nimport { HttpLink } from 'apollo-angular/http';\nimport { InMemoryCache, type FetchResult } from '@apollo/client/core';\nimport { HttpClientModule, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { setContext } from '@apollo/client/link/context';\nimport { onError } from '@apollo/client/link/error';\nimport { Observable } from '@apollo/client/utilities';\nimport { filter, take } from 'rxjs/operators';\nimport { AuthService } from './auth/auth.service';\nimport { AuthInterceptor } from './auth/auth-interceptor';\nimport { SessionExpiredService } from './auth/session-expired.service';\nimport { IDomainKeys } from './interfaces/domain-key.interface';\nimport { AUTH_CONFIG, IAuthConfig } from './interfaces/auth-config.interface';\n\n@NgModule({\n    exports: [ApolloModule, HttpClientModule],\n    declarations: [],\n    providers: [\n        provideHttpClient(\n            withInterceptors([AuthInterceptor])\n        ),\n        AuthService\n    ],\n})\nexport class GraphQLModule {\n    static forRoot(environment: any): ModuleWithProviders<GraphQLModule> {\n        const currentSubdomain = window.location.hostname.includes('.')\n            ? window.location.hostname.split('.')[0]\n            : window.location.hostname;\n        const findSubdomine = environment.domainKeys.find(\n            (apiKey: IDomainKeys) => apiKey.domain === currentSubdomain\n        );\n\n        const authLink = setContext(() => {\n            const headers: any = {};\n            if (findSubdomine) {\n                headers['api-key'] = findSubdomine.key;\n            }\n            return { headers };\n        });\n\n        return {\n            ngModule: GraphQLModule,\n            providers: [\n                {\n                    provide: AUTH_CONFIG,\n                    useValue: {\n                        refresh_url: environment.refresh_url,\n                        refresh_token_key: environment.refresh_token_key ?? 'access_token',\n                        onRefresh: environment.onRefresh\n                    } as IAuthConfig\n                },\n                {\n                    provide: APOLLO_OPTIONS,\n                    useFactory(httpLink: HttpLink, authService: AuthService, sessionExpiredService: SessionExpiredService) {\n                        const httpLinkHandler = httpLink.create({\n                            uri: () => authService.getToken()\n                                ? environment.base_url_private\n                                : environment.base_url_public,\n                        });\n\n                        const errorLink = onError(({ graphQLErrors, forward, operation }) => {\n                            const isUnauthenticated = graphQLErrors?.some(\n                                e => e.extensions?.['code'] === 'UNAUTHENTICATED'\n                            );\n\n                            if (!isUnauthenticated) return;\n\n                            if (!authService.getRefreshToken()) {\n                                sessionExpiredService.emit();\n                                return;\n                            }\n\n                            // Si ya hay un refresh en curso, encola hasta que termine\n                            const token$ = authService.isRefreshing\n                                ? authService.refreshTokenSubject.pipe(\n                                    filter((t): t is string => t !== null),\n                                    take(1)\n                                )\n                                : authService.refreshAccessToken();\n\n                            return new Observable<FetchResult>(observer => {\n                                token$.subscribe({\n                                    next: () => forward(operation).subscribe({\n                                        next: v => observer.next(v),\n                                        error: e => observer.error(e),\n                                        complete: () => observer.complete(),\n                                    }),\n                                    error: () => {\n                                        sessionExpiredService.emit();\n                                        observer.error(new Error('Session expired'));\n                                    },\n                                });\n                            });\n                        });\n\n                        return {\n                            cache: new InMemoryCache(),\n                            link: errorLink.concat(authLink.concat(httpLinkHandler)),\n                        };\n                    },\n                    deps: [HttpLink, AuthService, SessionExpiredService],\n                }\n            ]\n        };\n    }\n}\n","export enum ErrorTypeCodeEnumeration {\n    MICROSERVICE_CONNECTION_ERROR=\"MICROSERVICE_CONNECTION_ERROR\",\n    DATABASE_CONNECTION_ERROR=\"DATABASE_CONNECTION_ERROR\",\n    INSERTION_FAILED=\"INSERTION_FAILED\",\n    UPDATE_FAILED=\"UPDATE_FAILED\",\n    DELETED_FAILED=\"DELETED_FAILED\",\n    NOT_FOUND=\"NOT_FOUND\",\n    PARTIALLY_FOUND=\"PARTIALLY_FOUND\",\n    UNAUTHORIZED=\"UNAUTHORIZED\",\n    FORBIDDEN=\"FORBIDDEN\",\n    INVALID_FILTERS=\"INVALID_FILTERS\",\n    HANDLED_ERROR=\"HANDLED_ERROR\",\n    UNKNOWN_ERROR=\"UNKNOWN_ERROR\"\n}\n","export enum ErrorKindCodeEnumeration {\n    ERROR=\"ERROR\",\n    WARNING=\"WARNING\",\n    SUCCESS=\"SUCCESS\"\n}\n","/*\n * Public API Surface of kif-lib-input\n */\n\nexport * from './graphql.component';\nexport * from './graphql.module';\nexport * from './enum/index';\nexport * from './models/index'\nexport * from './auth/auth.service'\nexport * from './interfaces/role-active.interface'\nexport * from './interfaces/auth-config.interface'\nexport * from './auth/session-expired.service'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["catchError"],"mappings":"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"}