Skip to content
Snippets Groups Projects
Select Git revision
  • 758166abbe6ff699bc8d31b77a2180553975366f
  • main default protected
2 results

1_TABLES.sql

Blame
  • api.service.ts 5.55 KiB
    import axios, { AxiosError, AxiosInstance } from 'axios';
    import { API_QUERY_REFERER, API_URL } from '../config';
    import { GiteaPublicProperties } from '../model/giteaPublicProperties.model';
    import { SshKeyPair } from '../model/sshKeyPair.model';
    import { extensionError as error } from '../recorder/utils/log';
    import { Attempt } from '../model/attempt';
    import Controller from './controller';
    import ExtensionStore from './extensionStore';
    import KeycloakOAuth2DeviceFlowConnection from './keycloakOAuth2DeviceFlowConnection';
    import { MissionUser } from './mission/model/missionUser';
    import UserMission, { User } from './mission/model/userMission';
    
    export default class ApiService {
      private axiosInstance: AxiosInstance;
      private static _instance: ApiService;
    
      static get instance(): ApiService {
        if (!ApiService._instance) {
          ApiService._instance = new ApiService();
        }
        return ApiService._instance;
      }
    
      private constructor() {
        this.axiosInstance = axios.create({
          baseURL: API_URL,
          headers: {
            'Content-Type': 'application/json',
            referer: API_QUERY_REFERER,
          },
        });
    
        this.initApiInterceptor();
      }
    
      initApiInterceptor() {
        this.initRequestInterceptor();
        this.initResponseInterceptor();
      }
    
      private initRequestInterceptor() {
        this.axiosInstance.interceptors.request.use(
          async (config) => {
            const accessToken = await ExtensionStore.instance.getAccessToken();
            if (accessToken && config.headers) {
              config.headers['authorization'] = `BEARER ${accessToken}`;
            }
            return config;
          },
          (error) => {
            return Promise.reject(error);
          },
        );
      }
    
      private initResponseInterceptor() {
        this.axiosInstance.interceptors.response.use(
          (res) => {
            return res;
          },
          async (err) => {
            return await this.handleResponseError(err);
          },
        );
      }
    
      private async handleResponseError(err) {
        const originalConfig = err.config;
        if (err.response) {
          // Access Token was expired