{"version":3,"file":"c8y-ngx-components-api.mjs","sources":["../../api/interceptor.model.ts","../../api/http-handler.model.ts","../../api/api.service.ts","../../api/services.ts","../../api/data.module.ts","../../api/index.ts","../../api/c8y-ngx-components-api.ts"],"sourcesContent":["import { ApiCall } from './api.model';\nimport { Observable } from 'rxjs';\nimport { IFetchResponse } from '@c8y/client';\n\nexport interface HttpInterceptor {\n  intercept(req: ApiCall, next: HttpHandler): Observable<IFetchResponse>;\n}\n\nexport abstract class HttpHandler {\n  abstract handle(req: ApiCall): Observable<IFetchResponse>;\n}\n","import { ApiCall } from './api.model';\nimport { Observable, from } from 'rxjs';\nimport { FetchClient, IFetchResponse } from '@c8y/client';\nimport { HttpHandler, HttpInterceptor } from './interceptor.model';\n\nexport class HttpInterceptHandler extends HttpHandler {\n  constructor(protected interceptor: HttpInterceptor, protected nextHandler: HttpHandler) {\n    super();\n  }\n\n  handle(req: ApiCall): Observable<IFetchResponse> {\n    return this.interceptor.intercept(req, this.nextHandler);\n  }\n}\n\nexport interface RequestStartAndFinish {\n  onStart(req: ApiCall): void;\n  onFinish(res: ApiCall): void;\n}\n\nexport class HttpRequestHandler extends HttpHandler {\n  constructor(protected fetch: FetchClient['fetch'], protected apiService?: RequestStartAndFinish) {\n    super();\n  }\n\n  handle(req: ApiCall): Observable<IFetchResponse> {\n    const { options, url } = req;\n    const { method } = options;\n    this.apiService?.onStart({ method, options, url });\n    let fetchPromise = this.fetch(url, options);\n    if (typeof options.responseInterceptor === 'function') {\n      fetchPromise = fetchPromise.then(options.responseInterceptor);\n    }\n    fetchPromise.then(\n      (response: IFetchResponse) => this.apiService?.onFinish({ method, options, url, response }),\n      (response: IFetchResponse) => this.apiService?.onFinish({ method, options, url, response })\n    );\n    return from(fetchPromise);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FetchClient, IFetchOptions, IFetchResponse } from '@c8y/client';\nimport { MonoTypeOperatorFunction, Observable, Subject, pipe } from 'rxjs';\nimport { distinctUntilChanged, filter, map, scan, shareReplay } from 'rxjs/operators';\nimport { ApiCall, ApiCallOptions } from './api.model';\nimport {\n  HttpInterceptHandler,\n  HttpRequestHandler,\n  RequestStartAndFinish\n} from './http-handler.model';\nimport { HttpHandler, HttpInterceptor } from './interceptor.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ApiService implements RequestStartAndFinish {\n  calls: Observable<ApiCall>;\n  isLoading$: Observable<boolean>;\n  private callsSubject = new Subject<ApiCall>();\n  private interceptors = new Map<string, HttpInterceptor>();\n  private interceptorCounter = 0;\n\n  constructor(private client: FetchClient) {\n    this.calls = this.callsSubject.asObservable();\n    this.hookIntoClientFetch();\n\n    this.isLoading$ = this.calls.pipe(\n      filter(({ url }) => !/notification\\/realtime/.test(url)),\n      map(({ phase }) => (phase === 'start' ? 1 : -1)),\n      scan((count, item) => count + item, 0),\n      map(count => count > 0),\n      distinctUntilChanged(),\n      shareReplay(1)\n    );\n  }\n\n  /**\n   * Allows to hook into the responses received by the FetchClient.\n   * This is meant to be used to react on the responses, not for manipulation of the responses.\n   * @param hookFilter A filter function to filter for specific responses.\n   * @returns An Observable of the filtered responses.\n   */\n  hookResponse(hookFilter: (call: ApiCall) => boolean): Observable<ApiCall> {\n    return this.callsSubject.pipe(\n      filter(({ phase }) => phase === 'finish'),\n      filter(hookFilter)\n    );\n  }\n\n  /**\n   * Allows to hook into the requests performed by the FetchClient.\n   * This is meant to be used to react on the requests, not for manipulation of the requests.\n   * @param hookFilter A filter function to filter for specific requests.\n   * @returns An Observable of the filtered requests.\n   */\n  hookRequest(hookFilter: (call: ApiCall) => boolean): Observable<ApiCall> {\n    return this.callsSubject.pipe(\n      filter(({ phase }) => phase === 'start'),\n      filter(hookFilter)\n    );\n  }\n\n  /**\n   * Notifies observers that an API call has finished.\n   * @param call The API call that has finished.\n   */\n  onFinish(call: ApiCall): void {\n    this.callsSubject.next({ phase: 'finish', ...call });\n  }\n\n  /**\n   * Notifies observers that an API call has started.\n   * @param call The API call that has started.\n   */\n  onStart(call: ApiCall): void {\n    this.callsSubject.next({ phase: 'start', ...call });\n  }\n\n  /**\n   * Resolves data from an API call response.\n   * @returns A Promise containing an object with resolved data, method, and URL.\n   */\n  resolveData<T = unknown>(call: ApiCall): Promise<{ data: T; method: string; url: string }> {\n    const { response, method, url } = call;\n    if ('data' in response) {\n      return Promise.resolve({ data: response.data, method, url });\n    } else {\n      // No Content success status, for example DELETE request.\n      if ((response as Response)?.status === 204) {\n        return Promise.resolve({ data: null, method, url });\n      }\n      const cb = data => ({ data, method, url });\n      return (response as Response).clone().json().then(cb, cb);\n    }\n  }\n\n  /**\n   * Can be added to a pipe to exclude any permission call. Permission calls are PUT\n   * request with only an id in it, to verify if the user has access to this managed object.\n   * @returns The operator to be added to a pipe.\n   */\n  excludePermissionCall(): MonoTypeOperatorFunction<ApiCall> {\n    return pipe(\n      filter(({ method, options }) => {\n        if (method === 'PUT' && options.body && typeof options.body === 'string') {\n          const parsedBody = JSON.parse(options.body as string);\n          const bodyKeys = Object.keys(parsedBody);\n          return !(bodyKeys.length === 1 && bodyKeys[0] === 'id');\n        }\n        return true;\n      })\n    );\n  }\n\n  /**\n   * Allows to intercept requests performed via the FetchClient requests.\n   * @param interceptor The interceptor to be added.\n   * @param id An optional unique identifier for the interceptor. The chain of interceptors is ordered by this id. And it can be used to remove the interceptor later on.\n   * @returns The id of the interceptor (same as provided id if one was provided, otherwise an id will be generated).\n   */\n  addInterceptor(interceptor: HttpInterceptor, id?: string): string {\n    if (!id) {\n      id = `${++this.interceptorCounter}`;\n    }\n    this.interceptors.set(id, interceptor);\n    return id;\n  }\n\n  /**\n   * Allows to remove a previously added interceptor by it's id.\n   * @param id The id of the interceptor that should be removed.\n   * @returns true if an interceptor existed and has been removed, or false if id does not exist.\n   */\n  removeInterceptor(id: string): boolean {\n    return this.interceptors.delete(id);\n  }\n\n  /**\n   * Checks if an interceptor with a given id exists.\n   * @param id The id of the interceptor.\n   * @returns - Returns true if an interceptor with the given id exists, otherwise false.\n   */\n  hasInterceptor(id: string): boolean {\n    return this.interceptors.has(id);\n  }\n\n  private hookIntoClientFetch() {\n    const fetch: FetchClient['fetch'] = this.client.fetch.bind(this.client);\n    const requestHandler = new HttpRequestHandler(fetch, this);\n    this.client.fetch = async (\n      url,\n      options: ApiCallOptions & IFetchOptions = { method: 'GET' }\n    ) => {\n      const { method } = options;\n      return this.createInterceptorChain({ url, options, method }, requestHandler).toPromise();\n    };\n  }\n\n  private createInterceptorChain(\n    call: ApiCall,\n    requestHandler: HttpRequestHandler\n  ): Observable<IFetchResponse> {\n    let handler: HttpHandler = requestHandler;\n    // Do some sorting to always apply the interceptors in the specific order\n    const sortedInterceptorIds = Array.from(this.interceptors.keys()).sort((a, b) =>\n      b.localeCompare(a)\n    );\n    for (const interceptorId of sortedInterceptorIds) {\n      handler = new HttpInterceptHandler(this.interceptors.get(interceptorId), handler);\n    }\n    return handler.handle(call);\n  }\n}\n","import {\n  FetchClient,\n  BasicAuth,\n  CookieAuth,\n  Realtime,\n  EventBinaryService,\n  EventService,\n  InventoryService,\n  MeasurementService,\n  AlarmService,\n  OperationBulkService,\n  OperationService,\n  ApplicationService,\n  UserService,\n  TenantService,\n  SystemOptionsService,\n  TenantOptionsService,\n  TenantSecurityOptionsService,\n  TenantLoginOptionsService,\n  AuditService,\n  InventoryRoleService,\n  InventoryBinaryService,\n  DeviceRegistrationService,\n  DeviceRegistrationBulkService,\n  UserRoleService,\n  UserGroupService,\n  IdentityService,\n  TrustedCertificateService,\n  CrlService,\n  SmartGroupsService,\n  SmartRulesService,\n  FeatureService\n} from '@c8y/client';\n\nexport const defaultServicesFromClientLib = [\n  FetchClient,\n  BasicAuth,\n  CookieAuth,\n  Realtime,\n  EventBinaryService,\n  EventService,\n  InventoryService,\n  MeasurementService,\n  AlarmService,\n  OperationBulkService,\n  OperationService,\n  ApplicationService,\n  UserService,\n  TenantService,\n  SystemOptionsService,\n  TenantOptionsService,\n  TenantSecurityOptionsService,\n  TenantLoginOptionsService,\n  AuditService,\n  InventoryRoleService,\n  InventoryBinaryService,\n  DeviceRegistrationService,\n  DeviceRegistrationBulkService,\n  UserRoleService,\n  UserGroupService,\n  IdentityService,\n  TrustedCertificateService,\n  CrlService,\n  SmartGroupsService,\n  SmartRulesService,\n  FeatureService\n] as const;\n","import {\n  inject,\n  Injector,\n  ModuleWithProviders,\n  NgModule,\n  Optional,\n  provideAppInitializer,\n  Provider,\n  runInInjectionContext,\n  SkipSelf,\n  Type,\n  ValueProvider\n} from '@angular/core';\nimport {\n  BasicAuth,\n  FetchClient,\n  Realtime,\n  CookieAuth,\n  BearerAuthFromSessionStorage\n} from '@c8y/client';\nimport { ApiService } from './api.service';\nimport { defaultServicesFromClientLib } from './services';\nimport { pickAuthStrategy } from '@c8y/bootstrap';\n\nfunction toProvider<T>(provide: Type<T>): Provider {\n  let deps: Array<Type<FetchClient | Realtime | CookieAuth>> = [FetchClient, Realtime];\n  if (provide === FetchClient) {\n    deps = [CookieAuth];\n  }\n  if (provide === BasicAuth || provide === CookieAuth) {\n    deps = [];\n  }\n  if (provide === Realtime) {\n    deps = [FetchClient];\n  }\n  const depsWithExistingProvider = [\n    [provide, new Optional(), new SkipSelf()], // let's see if we can find an existing provider (possibly null)\n    ...deps\n  ];\n  return {\n    provide,\n    deps: depsWithExistingProvider,\n    useFactory: (...args) => {\n      // if there was an existing provider, it would be first in the list and we can return it\n      if (args.length && args[0] !== null) {\n        return args[0];\n      }\n\n      // otherwise we need to drop the first element as it would be null\n      const providers = args.slice(1);\n      // the other providers are the dependencies we need. They match the order of the deps array\n      const existingProviders: ValueProvider[] = deps.map((dep, index) => {\n        return { provide: dep, useValue: providers[index] };\n      });\n\n      // use this to dependency inject the dependencies and instantiate the class\n      return runInInjectionContext(\n        Injector.create({\n          providers: [...existingProviders, { provide, useClass: provide, deps: deps }]\n        }),\n        () => {\n          return inject(provide);\n        }\n      );\n    }\n  };\n}\n\n/**\n * Provides all services from `@c8y/client` library.\n * @returns An array of providers for all services from `@c8y/client` library.\n */\nexport function provideClientLibServices(): Provider[] {\n  const providers: Provider[] = defaultServicesFromClientLib\n    .map(service => toProvider(service as any))\n    .concat([\n      { provide: ApiService, useClass: ApiService, deps: [FetchClient] },\n      // ensure that the auth strategy is set before the app is initialized\n      provideAppInitializer(() => {\n        const client = inject(FetchClient);\n        const auth = pickAuthStrategy(BearerAuthFromSessionStorage, BasicAuth, CookieAuth);\n        client.setAuth(auth);\n      })\n    ]);\n  return providers;\n}\n\n/**\n * @deprecated use provideClientLibServices instead\n */\n@NgModule({\n  providers: provideClientLibServices()\n})\nexport class DataModule {\n  static providers(): Provider[] {\n    return provideClientLibServices();\n  }\n  static forRoot(): ModuleWithProviders<DataModule> {\n    return {\n      ngModule: DataModule,\n      providers: provideClientLibServices()\n    };\n  }\n}\n","export * from './api.service';\nexport * from './api.model';\nexport * from './data.module';\nexport * from './services';\nexport * from './interceptor.model';\n// do not expose as it might confuse people on what to implement\n// export * from './http-handler.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}