|
|
@@ -11,6 +11,15 @@ const apiv3Root = '/_api/v3';
|
|
|
|
|
|
const logger = loggerFactory('growi:apiv3');
|
|
|
|
|
|
+// get csrf token from body element
|
|
|
+const body = document.querySelector('body');
|
|
|
+const csrfToken = body?.dataset.csrftoken;
|
|
|
+
|
|
|
+
|
|
|
+type ParamWithCsrfKey = {
|
|
|
+ _csrf: string,
|
|
|
+}
|
|
|
+
|
|
|
const apiv3ErrorHandler = (_err) => {
|
|
|
// extract api errors from general 400 err
|
|
|
const err = _err.response ? _err.response.data.errors : _err;
|
|
|
@@ -41,16 +50,25 @@ export async function apiv3Get<T = any>(path: string, params: unknown = {}): Pro
|
|
|
}
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
-export async function apiv3Post<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
|
|
|
+export async function apiv3Post<T = any>(path: string, params: any & ParamWithCsrfKey = {}): Promise<AxiosResponse<T>> {
|
|
|
+ if (params._csrf == null) {
|
|
|
+ params._csrf = csrfToken;
|
|
|
+ }
|
|
|
return apiv3Request('post', path, params);
|
|
|
}
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
-export async function apiv3Put<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
|
|
|
+export async function apiv3Put<T = any>(path: string, params: any & ParamWithCsrfKey = {}): Promise<AxiosResponse<T>> {
|
|
|
+ if (params._csrf == null) {
|
|
|
+ params._csrf = csrfToken;
|
|
|
+ }
|
|
|
return apiv3Request('put', path, params);
|
|
|
}
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
-export async function apiv3Delete<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
|
|
|
+export async function apiv3Delete<T = any>(path: string, params: any & ParamWithCsrfKey = {}): Promise<AxiosResponse<T>> {
|
|
|
+ if (params._csrf == null) {
|
|
|
+ params._csrf = csrfToken;
|
|
|
+ }
|
|
|
return apiv3Request('delete', path, { params });
|
|
|
}
|