{"version":3,"file":"index.cjs","sources":["../../src/renault-session.ts","../../src/gigya/gigya-fix.ts","../../src/gigya/gigya-client.ts","../../src/utils/date-utils.ts","../../src/kamereon/kamereon-client.ts","../../src/renault-client.ts"],"sourcesContent":["interface SessionInit {\n  locale?: string;\n  country?: string;\n}\n\n/**\n * Session to store user info.\n */\nexport class RenaultSession {\n\n  public constructor(init: SessionInit = {}) {\n    const { locale = 'fr_FR', country = 'FR' } = init;\n    this.locale = locale;\n    this.country = country;\n  }\n\n  /**\n   * Locale that will be used to format date.\n   *\n   * @default \"fr_FR\"\n   */\n  public locale: string;\n  /**\n   * Country code that will use as http param for Kamereon.\n   *\n   * @default \"FR\"\n   */\n  public country: string;\n\n  /**\n   * Token to use Gigya getJWT API.\n   *\n   * Automatically set when Gigya login API is called and succeeds.\n   */\n  public gigyaToken: string | undefined;\n  /**\n   * Token to use Kamereon API.\n   *\n   * Automatically set when Gigya getJWT API is called and succeeds.\n   */\n  public token: string | undefined;\n  /**\n   * Selected person id.\n   *\n   * Automatically set when Gigya getAccountInfo API is called and succeeds.\n   */\n  public personId: string | undefined;\n  /**\n   * Selected account id.\n   *\n   * To be set to be automatically passed into each Kamereon API function that needs it.\n   *\n   * Otherwise, it needs to be manually passed as a function argument using `KamereonClient`.\n   */\n  public accountId: string | undefined;\n  /**\n   * Selected vehicle vin.\n   *\n   * To be set to be automatically passed into each Kamereon API function that needs it.\n   *\n   * Otherwise, it needs to be manually passed as a function argument using `KamereonClient`.\n   */\n  public vin: string | undefined;\n}\n","import type { GigyaErrorResponse, GigyaResponse } from '@remscodes/renault-api';\nimport type { HttpResponse } from 'drino';\nimport { HttpErrorResponse } from 'drino';\n\nexport function fixGigyaResponse<T extends GigyaResponse>(res: HttpResponse<T>): HttpResponse<T> {\n  if (isGigyaErrorResponse(res)) throw responseToError(res);\n  return res;\n}\n\nfunction isGigyaErrorResponse(res: HttpResponse<GigyaResponse>): res is HttpResponse<GigyaErrorResponse> {\n  return (res.body?.statusCode ?? 0) >= 400;\n}\n\nfunction responseToError(res: HttpResponse<GigyaErrorResponse>): HttpErrorResponse {\n  const { headers, body, url, statusText } = res;\n  return new HttpErrorResponse({\n    headers,\n    url: `${url}`,\n    status: body?.statusCode ?? 500,\n    statusText,\n    error: {\n      message: body?.errorMessage,\n      details: body?.errorDetails,\n      time: body.time,\n    },\n  });\n}\n","import type { AccountInfoResponse, LoginInfoResponse, LogoutInfoResponse, TokenInfoResponse, TokenPublicInfoResponse } from '@remscodes/renault-api';\nimport { GigyaApi } from '@remscodes/renault-api';\nimport type { DrinoInstance, HttpErrorResponse, HttpRequest, HttpResponse } from 'drino';\nimport drino from 'drino';\nimport type { ClientInit } from '../models/client-init.model';\nimport { RenaultSession } from '../renault-session';\nimport { fixGigyaResponse } from './gigya-fix';\n\n/**\n * Http client to use Gigya API.\n */\nexport class GigyaClient {\n\n  public constructor(init: ClientInit = {}) {\n    const { session = new RenaultSession(), onError } = init;\n\n    this.session = session;\n\n    this.httpClient = drino.create({\n      requestsConfig: {\n        queryParams: { apikey: GigyaApi.KEY },\n        progress: { download: { inspect: false } },\n      },\n      interceptors: {\n        beforeConsume: (req: HttpRequest) => {\n          const token: string | undefined = this.session.gigyaToken;\n          if (token) req.url.searchParams.set('login_token', token);\n        },\n        beforeError: (res: HttpErrorResponse) => onError?.(res, this.session),\n      },\n    });\n  }\n\n  /**\n   * The user session.\n   */\n  public session: RenaultSession;\n\n  /** @internal */\n  private readonly httpClient: DrinoInstance;\n\n  /**\n   * Login to Gigya service.\n   * @param {string} loginID - The user login.\n   * @param {string} password - The user password.\n   */\n  public login(loginID: string, password: string): Promise<LoginInfoResponse> {\n    return this.httpClient\n      .post<LoginInfoResponse>(GigyaApi.LOGIN_URL, {}, {\n        queryParams: { loginID, password },\n        wrapper: 'response',\n      })\n      .transform(fixGigyaResponse)\n      .transform((res: HttpResponse<LoginInfoResponse>) => res.body)\n      .check((result: LoginInfoResponse) => this.session.gigyaToken = result.sessionInfo?.cookieValue)\n      .consume();\n  }\n\n  /**\n   * Get account info.\n   */\n  public getAccountInfo(): Promise<AccountInfoResponse> {\n    return this.httpClient\n      .post<AccountInfoResponse>(GigyaApi.GET_ACCOUNT_INFO_URL, {}, {\n        wrapper: 'response',\n      })\n      .transform(fixGigyaResponse)\n      .transform((res: HttpResponse<AccountInfoResponse>) => res.body)\n      .check((result: AccountInfoResponse) => this.session.personId = result.data?.personId)\n      .consume();\n  }\n\n  /**\n   * Get JWT.\n   * @param {number} [expiration = 900] - The chosen expiration (in milliseconds) of the JWT.\n   */\n  public getJwt(expiration: number = 900): Promise<TokenInfoResponse> {\n    return this.httpClient\n      .post<TokenInfoResponse>(GigyaApi.GET_JWT_URL, {}, {\n        queryParams: {\n          fields: ['data.personId', 'data.gigyaDataCenter'],\n          expiration: `${expiration}`,\n        },\n        wrapper: 'response',\n      })\n      .transform(fixGigyaResponse)\n      .transform((res: HttpResponse<TokenInfoResponse>) => res.body)\n      .check((token: TokenInfoResponse) => this.session.token = token.id_token)\n      .consume();\n  }\n\n  /**\n   * Get public info about JWT key.\n   */\n  public getJwtPublicKey(): Promise<TokenPublicInfoResponse> {\n    return this.httpClient\n      .post<TokenPublicInfoResponse>(GigyaApi.GET_JWT_PUBLIC_KEY_URL, {}, {\n        wrapper: 'response',\n      })\n      .transform(fixGigyaResponse)\n      .transform((res: HttpResponse<TokenPublicInfoResponse>) => res.body)\n      .consume();\n  }\n\n  /**\n   * Logout from Gigya service.\n   */\n  public logout(): Promise<LogoutInfoResponse> {\n    return this.httpClient\n      .post<LogoutInfoResponse>(GigyaApi.LOGOUT_URL, {}, {\n        wrapper: 'response',\n      })\n      .transform(fixGigyaResponse)\n      .transform((res: HttpResponse<LogoutInfoResponse>) => res.body)\n      .consume();\n  }\n}\n","import type { DateFilter, Period } from '@remscodes/renault-api';\nimport { PERIOD_FORMATS } from '@remscodes/renault-api';\nimport dayjs from 'dayjs';\nimport type { PartialBy } from '../models/shared.model';\n\nexport function dateFilterToParams({ start, end, period }: PartialBy<DateFilter, 'period'>, locale: string): URLSearchParams {\n  const params = new URLSearchParams({\n    start: normalizeDate(start, locale, period),\n    end: normalizeDate(end, locale, period),\n  });\n\n  if (period) params.set('type', period);\n\n  return params;\n}\n\nexport function normalizeDate(date: dayjs.ConfigType, locale: string, period: Period = 'day'): string {\n  return formatDate(date, PERIOD_FORMATS[period], locale);\n}\n\nexport function formatDate(date: dayjs.ConfigType, format: string, locale: string): string {\n  return dayjs(date, { format, locale }).toString();\n}\n","import type { ActionChargeMode, AdapterInfoResponse, BatteryStatusResponse, ChargeHistoryResponse, ChargeModeInputs, ChargeModeResponse, ChargeScheduleInputs, ChargesResponse, ChargingSettingsResponse, CockpitResponse, DateFilter, HvacHistoryResponse, HvacScheduleInputs, HvacSessionsResponse, HvacSettingsResponse, HvacStartInputs, HvacStatusResponse, LockStatusResponse, NotificationSettingsResponse, Person, PressureResponse, ResStateResponse, VehicleContract, VehicleDetails, VehicleLocationResponse, Vehicles } from '@remscodes/renault-api';\nimport { KamereonApi, PERIOD_TZ_FORMAT } from '@remscodes/renault-api';\nimport type { DrinoInstance, HttpErrorResponse, HttpRequest } from 'drino';\nimport drino from 'drino';\nimport { emitError } from 'thror';\nimport type { ClientInit } from '../models/client-init.model';\nimport { RenaultSession } from '../renault-session';\nimport { dateFilterToParams, formatDate } from '../utils/date-utils';\nimport type { KamereonMethod, PerformArgs, ReadArgs } from './models/kamereon-client.models';\n\n/**\n * Http client to use Kamereon API.\n */\nexport class KamereonClient {\n\n  public constructor(init: ClientInit = {}) {\n    const { session = new RenaultSession(), onError } = init;\n\n    this.session = session;\n\n    this.httpClient = drino.create({\n      requestsConfig: {\n        headers: {\n          apikey: KamereonApi.KEY,\n          accept: 'application/json',\n          'content-type': 'application/vnd.api+json',\n        },\n        progress: { download: { inspect: false } },\n      },\n      interceptors: {\n        beforeConsume: (req: HttpRequest) => {\n          const token: string | undefined = this.session.token;\n          if (token) req.headers.set('x-gigya-id_token', token);\n\n          req.url.searchParams.set('country', this.session.country);\n        },\n        beforeError: (res: HttpErrorResponse) => onError?.(res, this.session),\n      },\n    });\n  }\n\n  /**\n   * The user session.\n   */\n  public session: RenaultSession;\n\n  /** @internal */\n  private readonly httpClient: DrinoInstance;\n\n  /**\n   * Get user person info.\n   * @param {string?} [personId = the personId stored in the session] - The person id.\n   */\n  public getPerson(personId?: string): Promise<Person> {\n    const requiredPersonId: string = this.getPersonIdOrThrow(personId, 'getPerson');\n    return this.httpClient\n      .get<Person>(KamereonApi.PERSON_URL(requiredPersonId))\n      .consume();\n  }\n\n  /**\n   * Get user vehicles.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public getAccountVehicles(accountId?: string): Promise<Vehicles> {\n    const requiredAccountId: string = this.getAccountIdOrThrow(accountId, 'getAccountVehicles');\n    return this.httpClient\n      .get<Vehicles>(KamereonApi.ACCOUNT_VEHICLES_URL(requiredAccountId))\n      .consume();\n  }\n\n  /**\n   * Get user vehicle contracts.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public getVehicleContracts(vin?: string, accountId?: string): Promise<VehicleContract[]> {\n    return this.read({\n      apiUrl: 'VEHICLE_CONTRACTS_URL',\n      method: 'getVehicleContracts',\n      accountId,\n      vin,\n      queryParams: new URLSearchParams({\n        locale: this.session.locale,\n        brand: 'RENAULT',\n        connectedServicesContracts: 'true',\n        warranty: 'true',\n        warrantyMaintenanceContracts: 'true',\n      }),\n    });\n  }\n\n  /**\n   * Get user vehicle details.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public getVehicleDetails(vin?: string, accountId?: string): Promise<VehicleDetails> {\n    return this.read({\n      apiUrl: 'VEHICLE_DETAILS_URL',\n      method: 'getVehicleDetails',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle adapter info.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readAdapter(vin?: string, accountId?: string): Promise<AdapterInfoResponse> {\n    return this.read({\n      apiUrl: 'READ_ADAPTER_URL',\n      method: 'readAdapter',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle battery status.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readBatteryStatus(vin?: string, accountId?: string): Promise<BatteryStatusResponse> {\n    return this.read({\n      apiUrl: 'READ_BATTERY_STATUS_URL',\n      method: 'readBatteryStatus',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle charge history.\n   * @param {DateFilter} filter - The date filter.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readChargeHistory(filter: DateFilter, vin?: string, accountId?: string): Promise<ChargeHistoryResponse> {\n    return this.read({\n      apiUrl: 'READ_CHARGE_HISTORY_URL',\n      method: 'readChargeHistory',\n      accountId,\n      vin,\n      queryParams: dateFilterToParams(filter, this.session.locale),\n    });\n  }\n\n  /**\n   * Get vehicle charge mode.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readChargeMode(vin?: string, accountId?: string): Promise<ChargeModeResponse> {\n    return this.read({\n      apiUrl: 'READ_CHARGE_MODE_URL',\n      method: 'readChargeMode',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle charges.\n   * @param {Omit<DateFilter, 'period'>} filter - The date filter.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readCharges(filter: Omit<DateFilter, 'period'>, vin?: string, accountId?: string): Promise<ChargesResponse> {\n    return this.read({\n      apiUrl: 'READ_CHARGES_URL',\n      method: 'readCharges',\n      accountId,\n      vin,\n      queryParams: dateFilterToParams(filter, this.session.locale),\n    });\n  }\n\n  /**\n   * Get vehicle charging settings.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readChargingSettings(vin?: string, accountId?: string): Promise<ChargingSettingsResponse> {\n    return this.read({\n      apiUrl: 'READ_CHARGING_SETTINGS_URL',\n      method: 'readChargingSettings',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle cockpit.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readCockpit(vin?: string, accountId?: string): Promise<CockpitResponse> {\n    return this.read({\n      apiUrl: 'READ_COCKPIT_URL',\n      method: 'readCockpit',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle hvac history.\n   * @param {DateFilter} filter - The date filter.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readHvacHistory(filter: DateFilter, vin?: string, accountId?: string): Promise<HvacHistoryResponse> {\n    return this.read({\n      apiUrl: 'READ_HVAC_HISTORY_URL',\n      method: 'readHvacHistory',\n      accountId,\n      vin,\n      queryParams: dateFilterToParams(filter, this.session.locale),\n    });\n  }\n\n  /**\n   * Get vehicle hvac sessions.\n   * @param {Omit<DateFilter, 'period'>} filter - The date filter.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readHvacSessions(filter: Omit<DateFilter, 'period'>, vin?: string, accountId?: string): Promise<HvacSessionsResponse> {\n    return this.read({\n      apiUrl: 'READ_HVAC_SESSIONS_URL',\n      method: 'readHvacSessions',\n      accountId,\n      vin,\n      queryParams: dateFilterToParams(filter, this.session.locale),\n    });\n  }\n\n  /**\n   * Get vehicle hvac status.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readHvacStatus(vin?: string, accountId?: string): Promise<HvacStatusResponse> {\n    return this.read({\n      apiUrl: 'READ_HVAC_STATUS_URL',\n      method: 'readHvacStatus',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle hvac settings.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readHvacSettings(vin?: string, accountId?: string): Promise<HvacSettingsResponse> {\n    return this.read({\n      apiUrl: 'READ_HVAC_SETTINGS_URL',\n      method: 'readHvacSettings',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle location.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readLocation(vin?: string, accountId?: string): Promise<VehicleLocationResponse> {\n    return this.read({\n      apiUrl: 'READ_LOCATION_URL',\n      method: 'readLocation',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle lock status.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readLockStatus(vin?: string, accountId?: string): Promise<LockStatusResponse> {\n    return this.read({\n      apiUrl: 'READ_LOCK_STATUS_URL',\n      method: 'readLockStatus',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle notification settings.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readNotificationSettings(vin?: string, accountId?: string): Promise<NotificationSettingsResponse> {\n    return this.read({\n      apiUrl: 'READ_NOTIFICATION_SETTINGS_URL',\n      method: 'readNotificationSettings',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle res state.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readResState(vin?: string, accountId?: string): Promise<ResStateResponse> {\n    return this.read({\n      apiUrl: 'READ_RES_STATE_URL',\n      method: 'readResState',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Get vehicle pressure.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public readPressure(vin?: string, accountId?: string): Promise<PressureResponse> {\n    return this.read({\n      apiUrl: 'READ_PRESSURE_URL',\n      method: 'readPressure',\n      accountId,\n      vin,\n    });\n  }\n\n  /**\n   * Select vehicle charge mode.\n   * @param {ChargeModeInputs} inputs - The charge mode inputs.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performChargeMode(inputs: ChargeModeInputs, vin?: string, accountId?: string): Promise<ActionChargeMode> {\n    const { action } = inputs;\n    return this.perform({\n      apiUrl: 'PERFORM_CHARGE_MODE_URL',\n      method: 'performChargeMode',\n      accountId,\n      vin,\n      data: {\n        type: 'ChargeMode',\n        attributes: { action },\n      },\n    });\n  }\n\n  /**\n   * Set vehicle charge schedule.\n   * @param {ChargeScheduleInputs} inputs - The charge schedules inputs.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performChargeSchedule(inputs: ChargeScheduleInputs, vin?: string, accountId?: string): Promise<any> {\n    const { schedules } = inputs;\n    return this.perform({\n      apiUrl: 'PERFORM_CHARGE_SCHEDULE_URL',\n      method: 'performChargeSchedule',\n      accountId,\n      vin,\n      data: {\n        type: 'ChargeSchedule',\n        attributes: { schedules },\n      },\n    });\n  }\n\n  /**\n   * Set vehicle hvac schedule.\n   * @param {HvacScheduleInputs} inputs - The hvac schedule inputs.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performHvacSchedule(inputs: HvacScheduleInputs, vin?: string, accountId?: string): Promise<any> {\n    const { schedules } = inputs;\n    return this.perform({\n      apiUrl: 'PERFORM_HVAC_SCHEDULE_URL',\n      method: 'performHvacSchedule',\n      accountId,\n      vin,\n      data: {\n        type: 'HvacSchedule',\n        attributes: { schedules },\n      },\n    });\n  }\n\n  /**\n   * Start vehicle hvac.\n   * @param {HvacStartInputs} inputs - The hvac inputs.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performHvacStart(inputs: HvacStartInputs, vin?: string, accountId?: string): Promise<any> {\n    const { targetTemperature, startDateTime } = inputs;\n    const data: any = {\n      type: 'HvacStart',\n      attributes: { action: 'start', targetTemperature },\n    };\n    if (startDateTime) data.attributes.startDateTime = formatDate(startDateTime, PERIOD_TZ_FORMAT, this.session.locale);\n    return this.perform({\n      apiUrl: 'PERFORM_HVAC_START_URL',\n      method: 'performHvacStart',\n      accountId,\n      vin,\n      data,\n    });\n  }\n\n  /**\n   * Stop vehicle hvac.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performHvacStop(vin?: string, accountId?: string): Promise<any> {\n    return this.perform({\n      apiUrl: 'PERFORM_HVAC_START_URL',\n      method: 'performHvacStop',\n      accountId,\n      vin,\n      data: {\n        type: 'HvacStart',\n        attributes: { action: 'cancel' },\n      },\n    });\n  }\n\n  /**\n   * Start vehicle charging.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performChargeStart(vin?: string, accountId?: string): Promise<any> {\n    return this.perform({\n      apiUrl: 'PERFORM_CHARGING_START_URL',\n      method: 'performChargeStart',\n      accountId,\n      vin,\n      data: {\n        type: 'ChargingStart',\n        attributes: { action: 'start' },\n      },\n    });\n  }\n\n  /**\n   * Stop vehicle charging.\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performChargeStop(vin?: string, accountId?: string): Promise<any> {\n    return this.perform({\n      apiUrl: 'PERFORM_CHARGING_START_URL',\n      method: 'performChargeStop',\n      accountId,\n      vin,\n      data: {\n        type: 'ChargingStart',\n        attributes: { action: 'stop' },\n      },\n    });\n  }\n\n  /**\n   * Start vehicle charging (Dacia Spring ONLY).\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performChargeResume(vin?: string, accountId?: string): Promise<any> {\n    return this.perform({\n      apiUrl: 'PERFORM_PAUSE_RESUME_URL',\n      method: 'performChargeResume',\n      accountId,\n      vin,\n      data: {\n        type: 'ChargingStart',\n        attributes: { action: 'start' },\n      },\n    });\n  }\n\n  /**\n   * Stop vehicle charging (Dacia Spring ONLY).\n   * @param {string?} [vin = the vin stored in the session] - The vehicle vin.\n   * @param {string?} [accountId = the accountId stored in the session] - The account id.\n   */\n  public performChargePause(vin?: string, accountId?: string): Promise<any> {\n    return this.perform({\n      apiUrl: 'PERFORM_PAUSE_RESUME_URL',\n      method: 'performChargePause',\n      accountId,\n      vin,\n      data: {\n        type: 'ChargingStart',\n        attributes: { action: 'stop' },\n      },\n    });\n  }\n\n  /** @internal */\n  private read<T>(args: ReadArgs): Promise<T> {\n    const { apiUrl, method, accountId, vin, queryParams } = args;\n\n    const requiredAccountId: string = this.getAccountIdOrThrow(accountId, method);\n    const requiredVin: string = this.getVinOrThrow(vin, method);\n    return this.httpClient\n      .get<T>(KamereonApi[apiUrl](requiredAccountId, requiredVin), { queryParams })\n      .consume();\n  }\n\n  /** @internal */\n  private perform<T>(args: PerformArgs): Promise<T> {\n    const { apiUrl, method, accountId, vin, data } = args;\n\n    const requiredAccountId: string = this.getAccountIdOrThrow(accountId, method);\n    const requiredVin: string = this.getVinOrThrow(vin, method);\n    return this.httpClient\n      .post<T>(KamereonApi[apiUrl](requiredAccountId, requiredVin), { data })\n      .consume();\n  }\n\n  /** @internal */\n  private getPersonIdOrThrow(personId: string | undefined, method: KamereonMethod): string {\n    return personId || this.getFromSessionOrThrow('personId', method);\n  }\n\n  /** @internal */\n  private getAccountIdOrThrow(accountId: string | undefined, method: KamereonMethod): string {\n    return accountId || this.getFromSessionOrThrow('accountId', method);\n  }\n\n  /** @internal */\n  private getVinOrThrow(vin: string | undefined, method: KamereonMethod): string {\n    return vin || this.getFromSessionOrThrow('vin', method);\n  }\n\n  /** @internal */\n  private getFromSessionOrThrow(key: keyof RenaultSession, method: KamereonMethod): string {\n    const value: string | undefined = this.session[key];\n    if (!value) emitError('KamereonException', `Cannot ${method} because \"${key}\" is falsy or not stored in session.`);\n\n    return value;\n  }\n}\n","import { GigyaClient } from './gigya/gigya-client';\nimport { KamereonClient } from './kamereon/kamereon-client';\nimport type { ClientInit } from './models/client-init.model';\nimport { RenaultSession } from './renault-session';\n\n/**\n * Http client to use Renault API.\n */\nexport class RenaultClient {\n\n  public constructor(init: ClientInit = {}) {\n    const { session = new RenaultSession(), onError } = init;\n\n    this.session = session;\n\n    this.gigya = new GigyaClient({ session: this.session, onError });\n    this.kamereon = new KamereonClient({ session: this.session, onError });\n  }\n\n  /**\n   * The user session.\n   */\n  public session: RenaultSession;\n\n  /**\n   * The Gigya http client.\n   */\n  public readonly gigya: GigyaClient;\n\n  /**\n   * The Kamereon http client.\n   */\n  public readonly kamereon: KamereonClient;\n}\n"],"names":["__publicField","HttpErrorResponse","GigyaApi","PERIOD_FORMATS","KamereonApi","PERIOD_TZ_FORMAT","emitError"],"mappings":"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"}