Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 6x 6x 6x 6x 6x | import axios, { AxiosError, AxiosInstance } from 'axios'; import axiosRetry from 'axios-retry'; let _client: AxiosInstance | null = null; const createApiClient = () => { const client = axios.create(); client.defaults.baseURL = process.env.REACT_APP_GOOGLEAPIS_URL; // CSRF トークンを送受信する Iif (process.env.NODE_ENV === 'development') { // Cookie を含めて送信する client.defaults.withCredentials = true; // CSRF トークンを Cookie 経由で受信する場合の設定 // // Axios 1.6.2 以降で CSRF トークンを送信する場合は withCredentials に加え withXSRFToken も指定する // see: https://github.com/axios/axios/blob/v1.x/CHANGELOG.md#162-2023-11-14 // 1.6.2 (2023-11-14) // "withXSRFToken: added withXSRFToken option as a workaround to achieve the old withCredentials behavior" // client.defaults.withXSRFToken = true; // レスポンス内の CSRF トークンが格納された Cookie 名と、リクエストに含める際の HTTP ヘッダー名を指定する (名称はサーバ側の指定に従う) // client.defaults.xsrfCookieName = 'csrf_token'; // client.defaults.xsrfHeaderName = 'x-csrf-token'; } // リクエストの送受信時にログ出力する Iif (process.env.NODE_ENV === 'development') { client.interceptors.request.use((config) => { console.debug(`request sent.: %o`, config); return config; }); client.interceptors.response.use((response) => { console.debug(`response received.: %o`, response); return response; }); } // リトライを制御する axiosRetry(client, { // リトライ回数 retries: 3, // 指数バックオフ方式 retryDelay: axiosRetry.exponentialDelay, // リトライ時のログ出力 onRetry: (count: number, error: AxiosError) => console.warn(`axios retried: retryCount=${count}, error=%o`, error), onMaxRetryTimesExceeded: (error: AxiosError) => console.error(`axios failed: error=%o`, error), }); return client; }; /** * API クライアントのインスタンスを取得します。 * @returns API クライアント */ export const getApiClient = () => _client ?? (_client = createApiClient()); |