{"version":3,"file":"safez-ngx-safez.mjs","sources":["../../projects/ngx-safez/src/lib/safez-interceptor-utils.service.ts","../../projects/ngx-safez/src/lib/ngx-safez.service.ts","../../projects/ngx-safez/src/lib/ngx-safez.component.ts","../../projects/ngx-safez/src/lib/ngx-safez.module.ts","../../projects/ngx-safez/src/public-api.ts","../../projects/ngx-safez/src/safez-ngx-safez.ts"],"sourcesContent":["import { HttpRequest, HttpHandler, HttpEvent, HttpResponse, HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError, of, from } from 'rxjs';\nimport { switchMap, catchError, map } from 'rxjs/operators';\nimport { ISafezConfig, ISafezToken } from './safez-config';\nimport { encryptData, decryptData, CryptoType, encryptValue } from '@safez/safez-cryptx';\n\n/**\n * Enhances HTTP requests with Safez encryption and handles responses for decryption.\n *\n * @param request The outgoing HttpRequest object.\n * @param next The next interceptor in the chain or the backend handler.\n * @param safezConfig Configuration for Safez operations.\n * @returns An Observable of the HttpEvent with request/response optionally encrypted/decrypted.\n * @author ['Arun Kumar Ravindran', 'Arunkumar Senthilkumar', 'Jude Joseph Manuel', 'Ramya Selvam', 'Sri Rishikesh Bharathan', 'Vigneshwaran Pandi']\n */\n\nexport function handleRequest(\n  request: HttpRequest<any>,\n  next: HttpHandler,\n  safezConfig: ISafezConfig\n): Observable<HttpEvent<any>> {\n\n  let token = getSafezArgs(request, safezConfig);\n  let cryptoType: CryptoType = getCryptoType(token,safezConfig);\n  let encryptErrorCodes: number[] = getEncryptErrorCodes(token, safezConfig);\n  // Early return if encryption/decryption should be skipped\n  if (cryptoType === CryptoType.NONE) {\n    const modifiedRequest = request.clone({\n      headers: request.headers.delete('x-sz-token')\n    });\n    return next.handle(modifiedRequest);\n  }\n  token = { cryptoType, encryptErrorCodes };\n  // Encrypt the request body and modify the request headers\n  return from(of(encryptData(request.body, safezConfig.safezSaavi, cryptoType)))?.pipe(\n\n    switchMap(encryptedBody => {\n      const encryptedTokenPromise = of(encryptValue(token, safezConfig.safezSaavi));\n      return from(encryptedTokenPromise)?.pipe(\n        switchMap(encryptedToken => {\n          const modifiedRequest = request.clone({\n            body: encryptedBody,\n            setHeaders: { 'x-sz-token': encryptedToken as string }\n          });\n          return handleEncryptedResponse(next.handle(modifiedRequest), safezConfig, cryptoType, encryptErrorCodes);\n        })\n      );\n    })\n  );\n}\n\nfunction getSafezArgs(request: HttpRequest<any>, config: ISafezConfig): ISafezToken | null {\n\n  const safezHeader = request.headers.get('x-sz-token');\n  try {\n    return safezHeader ? JSON.parse(safezHeader) as ISafezToken : null;\n  } catch (error) {\n    console.error('Error parsing x-sz-token header:', error);\n    return null;\n  }\n\n}\n\nfunction handleEncryptedResponse(\n  observable: Observable<HttpEvent<any>>,\n  safezConfig: ISafezConfig,\n  cryptoType: CryptoType,\n  encryptErrorCodes: number[]\n): Observable<HttpEvent<any>> {\n\n  return observable?.pipe(\n    switchMap(event => {\n      if (event instanceof HttpResponse) {\n        return from(of(decryptData(event.body, safezConfig.safezSaavi, cryptoType)))?.pipe(\n          map(decryptedBody => event.clone({ body: decryptedBody }))\n        );\n      }\n      return of(event);\n    }),\n    catchError(errorResponse => handleErrorResponse(errorResponse, safezConfig, cryptoType, encryptErrorCodes))\n  );\n}\n\nfunction handleErrorResponse(\n  errorResponse: HttpErrorResponse,\n  safezConfig: ISafezConfig,\n  cryptoType: CryptoType,\n  encryptErrorCodes: number[]\n): Observable<never> {\n\n  if (safezConfig.enableSafez && encryptErrorCodes.includes(errorResponse.status)) {\n    const modifiedErrorResponse = { ...errorResponse }\n    try {\n      modifiedErrorResponse.error = decryptData(errorResponse.error, safezConfig.safezSaavi, cryptoType);\n    } catch (err) {\n      console.error(err);\n    }\n    return throwError(() => modifiedErrorResponse);\n  }\n  return throwError(() => errorResponse);\n\n}\n\nfunction getCryptoType(token: ISafezToken | null, safezConfig: ISafezConfig) : CryptoType {\n  if(token && token.cryptoType){\n      return token.cryptoType;\n  }else if(safezConfig && safezConfig.cryptoType){\n      return safezConfig.cryptoType;\n  }else if(safezConfig.enableSafez){\n      return CryptoType.FULL;\n  }else{\n      return CryptoType.NONE;\n  }\n}\n\nfunction getEncryptErrorCodes(token: ISafezToken | null, safezConfig: ISafezConfig){\n  if(token && token.encryptErrorCodes){\n      return token.encryptErrorCodes;\n  }else if(safezConfig && safezConfig.encryptErrorCodes){\n      return safezConfig.encryptErrorCodes\n  }else{\n      return [];\n  }\n}","import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { handleRequest } from './safez-interceptor-utils.service';\nimport { ISafezConfig } from './safez-config';\n\nexport const NGX_SAFEZ_CONFIG = new InjectionToken<ISafezConfig>('NGX_SAFEZ_CONFIG');\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxSafezService {\n\n  constructor(@Inject(NGX_SAFEZ_CONFIG) private config: ISafezConfig) { }\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>{\n    return handleRequest(request,next,this.config);\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lib-ngx-safez',\n  template: `\n    <p>\n      ngx-safez works!\n    </p>\n  `,\n  styles: [\n  ]\n})\nexport class NgxSafezComponent {\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxSafezComponent } from './ngx-safez.component';\n\n\n\n@NgModule({\n  declarations: [\n    NgxSafezComponent\n  ],\n  imports: [\n  ],\n  exports: [\n    NgxSafezComponent\n  ]\n})\nexport class NgxSafezModule { }\n","/*\n * Public API Surface of ngx-safez\n */\n\nexport * from './lib/ngx-safez.service';\nexport * from './lib/ngx-safez.component';\nexport * from './lib/ngx-safez.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAMA;;;;;;;;AAQG;SAEa,aAAa,CAC3B,OAAyB,EACzB,IAAiB,EACjB,WAAyB,EAAA;IAGzB,IAAI,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,IAAI,UAAU,GAAe,aAAa,CAAC,KAAK,EAAC,WAAW,CAAC,CAAC;IAC9D,IAAI,iBAAiB,GAAa,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;;AAE3E,IAAA,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;YACpC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;AAC9C,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;KACrC;AACD,IAAA,KAAK,GAAG,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;;IAE1C,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAElF,SAAS,CAAC,aAAa,IAAG;AACxB,QAAA,MAAM,qBAAqB,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,IAAI,CACtC,SAAS,CAAC,cAAc,IAAG;AACzB,YAAA,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;AACpC,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,UAAU,EAAE,EAAE,YAAY,EAAE,cAAwB,EAAE;AACvD,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;SAC1G,CAAC,CACH,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAyB,EAAE,MAAoB,EAAA;IAEnE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACtD,IAAA,IAAI;AACF,QAAA,OAAO,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAgB,GAAG,IAAI,CAAC;KACpE;IAAC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC;KACb;AAEH,CAAC;AAED,SAAS,uBAAuB,CAC9B,UAAsC,EACtC,WAAyB,EACzB,UAAsB,EACtB,iBAA2B,EAAA;IAG3B,OAAO,UAAU,EAAE,IAAI,CACrB,SAAS,CAAC,KAAK,IAAG;AAChB,QAAA,IAAI,KAAK,YAAY,YAAY,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAChF,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAC3D,CAAC;SACH;AACD,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;KAClB,CAAC,EACF,UAAU,CAAC,aAAa,IAAI,mBAAmB,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAC5G,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,aAAgC,EAChC,WAAyB,EACzB,UAAsB,EACtB,iBAA2B,EAAA;AAG3B,IAAA,IAAI,WAAW,CAAC,WAAW,IAAI,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AAC/E,QAAA,MAAM,qBAAqB,GAAG,EAAE,GAAG,aAAa,EAAE,CAAA;AAClD,QAAA,IAAI;AACF,YAAA,qBAAqB,CAAC,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SACpG;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACpB;AACD,QAAA,OAAO,UAAU,CAAC,MAAM,qBAAqB,CAAC,CAAC;KAChD;AACD,IAAA,OAAO,UAAU,CAAC,MAAM,aAAa,CAAC,CAAC;AAEzC,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB,EAAE,WAAyB,EAAA;AACzE,IAAA,IAAG,KAAK,IAAI,KAAK,CAAC,UAAU,EAAC;QACzB,OAAO,KAAK,CAAC,UAAU,CAAC;KAC3B;AAAK,SAAA,IAAG,WAAW,IAAI,WAAW,CAAC,UAAU,EAAC;QAC3C,OAAO,WAAW,CAAC,UAAU,CAAC;KACjC;AAAK,SAAA,IAAG,WAAW,CAAC,WAAW,EAAC;QAC7B,OAAO,UAAU,CAAC,IAAI,CAAC;KAC1B;SAAI;QACD,OAAO,UAAU,CAAC,IAAI,CAAC;KAC1B;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB,EAAE,WAAyB,EAAA;AAChF,IAAA,IAAG,KAAK,IAAI,KAAK,CAAC,iBAAiB,EAAC;QAChC,OAAO,KAAK,CAAC,iBAAiB,CAAC;KAClC;AAAK,SAAA,IAAG,WAAW,IAAI,WAAW,CAAC,iBAAiB,EAAC;QAClD,OAAO,WAAW,CAAC,iBAAiB,CAAA;KACvC;SAAI;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AACH;;MCrHa,gBAAgB,GAAG,IAAI,cAAc,CAAe,kBAAkB,EAAE;MAKxE,eAAe,CAAA;AAE1B,IAAA,WAAA,CAA8C,MAAoB,EAAA;QAApB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAc;KAAK;IACvE,SAAS,CAAC,OAAyB,EAAE,IAAiB,EAAA;QACpD,OAAO,aAAa,CAAC,OAAO,EAAC,IAAI,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAChD;AALU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBAEN,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAFzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAGc,MAAM;2BAAC,gBAAgB,CAAA;;;MCDzB,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EARlB,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAIU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACf,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;MCOU,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAd,cAAc,EAAA,YAAA,EAAA,CARvB,iBAAiB,CAAA,EAAA,OAAA,EAAA,CAKjB,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAGR,cAAc,EAAA,CAAA,CAAA,EAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;AAClB,qBAAA;AACF,iBAAA,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}