diff --git a/apps/client/src/features/acadenice/backlinks/queries/backlinks-query.ts b/apps/client/src/features/acadenice/backlinks/queries/backlinks-query.ts index 8d9db480..e6ee8a8e 100644 --- a/apps/client/src/features/acadenice/backlinks/queries/backlinks-query.ts +++ b/apps/client/src/features/acadenice/backlinks/queries/backlinks-query.ts @@ -28,7 +28,7 @@ export interface BacklinksResult { async function fetchBacklinks(pageId: string): Promise { const res = await api.get( - `/acadenice/pages/${pageId}/backlinks`, + `/v1/pages/${pageId}/backlinks`, ); return res.data; } diff --git a/apps/client/src/features/acadenice/clipper/services/clipper-client.ts b/apps/client/src/features/acadenice/clipper/services/clipper-client.ts index 2eff23d1..2374692a 100644 --- a/apps/client/src/features/acadenice/clipper/services/clipper-client.ts +++ b/apps/client/src/features/acadenice/clipper/services/clipper-client.ts @@ -1,6 +1,6 @@ -import axios from 'axios'; +import api from '@/lib/api-client'; -const BASE = '/api/v1/clipper'; +const BASE = '/v1/clipper'; export interface ClipperTokenInfo { id: string; @@ -23,17 +23,17 @@ export interface CreateTokenResponse { } export const clipperClient = { - listTokens(): Promise { - return axios.get(`${BASE}/tokens`).then((r) => r.data); + async listTokens(): Promise { + const r = await api.get(`${BASE}/tokens`); + return r.data; }, - createToken(payload: CreateTokenPayload): Promise { - return axios - .post(`${BASE}/tokens`, payload) - .then((r) => r.data); + async createToken(payload: CreateTokenPayload): Promise { + const r = await api.post(`${BASE}/tokens`, payload); + return r.data; }, - revokeToken(tokenId: string): Promise { - return axios.delete(`${BASE}/tokens/${tokenId}`).then(() => undefined); + async revokeToken(tokenId: string): Promise { + await api.delete(`${BASE}/tokens/${tokenId}`); }, }; diff --git a/apps/client/src/features/acadenice/graph/services/graph-client.ts b/apps/client/src/features/acadenice/graph/services/graph-client.ts index 06bbec0f..db80f63b 100644 --- a/apps/client/src/features/acadenice/graph/services/graph-client.ts +++ b/apps/client/src/features/acadenice/graph/services/graph-client.ts @@ -69,5 +69,6 @@ export async function fetchGraph( const qs = new URLSearchParams(query).toString(); const url = qs ? `/v1/graph?${qs}` : "/v1/graph"; - return api.get(url) as unknown as Promise; + const r = await api.get(url); + return r.data; } diff --git a/apps/client/src/features/acadenice/rbac/services/rbac-service.ts b/apps/client/src/features/acadenice/rbac/services/rbac-service.ts index e542a628..91ca2cf9 100644 --- a/apps/client/src/features/acadenice/rbac/services/rbac-service.ts +++ b/apps/client/src/features/acadenice/rbac/services/rbac-service.ts @@ -9,57 +9,44 @@ import { IMyPermissionsResponse, } from "@/features/acadenice/rbac/types/rbac.types"; -/** - * REST client for the Acadenice RBAC API (R2.1 backend). - * Endpoints under /api/v1 — relative to api.baseURL ("/api"). - * - * Note : Docmost's axios interceptor returns `response.data` directly, so the - * return value of `api.get(...)` is already the body payload. - */ +// The global `TransformHttpResponseInterceptor` wraps every body in +// `{ data, success, status }`. The axios interceptor already unwraps the +// transport layer, so each call returns that wrap object — we read `.data` +// to get the actual payload. export async function getPermissionsCatalog(): Promise { - return api.get("/v1/permissions") as unknown as Promise< - IPermissionDescriptor[] - >; + const r = await api.get("/v1/permissions"); + return r.data; } -/** - * Fetches the effective permissions of the authenticated user in the current - * workspace. Backed by the Redis 60s cache server-side (R2.1). - */ export async function getMyPermissions(): Promise { - return api.get( - "/v1/permissions/me", - ) as unknown as Promise; + const r = await api.get("/v1/permissions/me"); + return r.data; } export async function listRoles(): Promise { - return api.get("/v1/roles") as unknown as Promise; + const r = await api.get("/v1/roles"); + return r.data; } export async function getRole(roleId: string): Promise { - return api.get( - `/v1/roles/${roleId}`, - ) as unknown as Promise; + const r = await api.get(`/v1/roles/${roleId}`); + return r.data; } export async function createRole( payload: ICreateRolePayload, ): Promise { - return api.post( - "/v1/roles", - payload, - ) as unknown as Promise; + const r = await api.post("/v1/roles", payload); + return r.data; } export async function updateRole( roleId: string, payload: IUpdateRolePayload, ): Promise { - return api.patch( - `/v1/roles/${roleId}`, - payload, - ) as unknown as Promise; + const r = await api.patch(`/v1/roles/${roleId}`, payload); + return r.data; } export async function deleteRole(roleId: string): Promise { @@ -70,26 +57,30 @@ export async function setRolePermissions( roleId: string, permissions: string[], ): Promise { - return api.put(`/v1/roles/${roleId}/permissions`, { - permissions, - }) as unknown as Promise; + const r = await api.put( + `/v1/roles/${roleId}/permissions`, + { permissions }, + ); + return r.data; } export async function listUserRoles( userId: string, ): Promise { - return api.get(`/v1/users/${userId}/roles`) as unknown as Promise< - IUserRoleAssignment[] - >; + const r = await api.get( + `/v1/users/${userId}/roles`, + ); + return r.data; } export async function assignRolesToUser( userId: string, roleIds: string[], ): Promise<{ ok: true }> { - return api.post(`/v1/users/${userId}/roles`, { + const r = await api.post<{ ok: true }>(`/v1/users/${userId}/roles`, { roleIds, - }) as unknown as Promise<{ ok: true }>; + }); + return r.data; } export async function unassignRoleFromUser( diff --git a/apps/client/src/features/acadenice/slash-commands-admin/services/slash-commands-client.ts b/apps/client/src/features/acadenice/slash-commands-admin/services/slash-commands-client.ts index c5a00ebc..49a221a8 100644 --- a/apps/client/src/features/acadenice/slash-commands-admin/services/slash-commands-client.ts +++ b/apps/client/src/features/acadenice/slash-commands-admin/services/slash-commands-client.ts @@ -1,7 +1,4 @@ -import axios from 'axios'; - -// Re-use the same axios instance that Docmost uses for authenticated requests. -// The `withCredentials` is handled globally by the Docmost axios setup. +import api from '@/lib/api-client'; export interface SlashCommandDto { id: string; @@ -35,34 +32,35 @@ export interface CreateSlashCommandPayload { export type UpdateSlashCommandPayload = Partial; -const BASE = '/api/v1/slash-commands'; +const BASE = '/v1/slash-commands'; export const slashCommandsClient = { - list(): Promise { - return axios.get(BASE).then((r) => r.data); + async list(): Promise { + const r = await api.get(BASE); + return r.data; }, - get(id: string): Promise { - return axios.get(`${BASE}/${id}`).then((r) => r.data); + async get(id: string): Promise { + const r = await api.get(`${BASE}/${id}`); + return r.data; }, - create(payload: CreateSlashCommandPayload): Promise { - return axios.post(BASE, payload).then((r) => r.data); + async create(payload: CreateSlashCommandPayload): Promise { + const r = await api.post(BASE, payload); + return r.data; }, - update(id: string, payload: UpdateSlashCommandPayload): Promise { - return axios - .patch(`${BASE}/${id}`, payload) - .then((r) => r.data); + async update(id: string, payload: UpdateSlashCommandPayload): Promise { + const r = await api.patch(`${BASE}/${id}`, payload); + return r.data; }, - delete(id: string): Promise { - return axios.delete(`${BASE}/${id}`).then(() => undefined); + async delete(id: string): Promise { + await api.delete(`${BASE}/${id}`); }, - toggle(id: string, isEnabled: boolean): Promise { - return axios - .patch(`${BASE}/${id}`, { isEnabled }) - .then((r) => r.data); + async toggle(id: string, isEnabled: boolean): Promise { + const r = await api.patch(`${BASE}/${id}`, { isEnabled }); + return r.data; }, }; diff --git a/apps/client/src/features/acadenice/sync-blocks/services/sync-blocks-client.ts b/apps/client/src/features/acadenice/sync-blocks/services/sync-blocks-client.ts index d096509d..4b295cd4 100644 --- a/apps/client/src/features/acadenice/sync-blocks/services/sync-blocks-client.ts +++ b/apps/client/src/features/acadenice/sync-blocks/services/sync-blocks-client.ts @@ -1,4 +1,4 @@ -import axios from 'axios'; +import api from '@/lib/api-client'; export interface SyncBlockDto { id: string; @@ -17,26 +17,30 @@ export interface SyncBlockUsageDto { workspaceId: string; } -const BASE = '/api/v1/sync-blocks'; +const BASE = '/v1/sync-blocks'; export const syncBlocksClient = { - create(content: Record = {}): Promise { - return axios.post(BASE, { content }).then((r) => r.data); + async create(content: Record = {}): Promise { + const r = await api.post(BASE, { content }); + return r.data; }, - get(id: string): Promise { - return axios.get(`${BASE}/${id}`).then((r) => r.data); + async get(id: string): Promise { + const r = await api.get(`${BASE}/${id}`); + return r.data; }, - update(id: string, content: Record): Promise { - return axios.patch(`${BASE}/${id}`, { content }).then((r) => r.data); + async update(id: string, content: Record): Promise { + const r = await api.patch(`${BASE}/${id}`, { content }); + return r.data; }, - delete(id: string): Promise { - return axios.delete(`${BASE}/${id}`).then(() => undefined); + async delete(id: string): Promise { + await api.delete(`${BASE}/${id}`); }, - usages(id: string): Promise { - return axios.get(`${BASE}/${id}/usages`).then((r) => r.data); + async usages(id: string): Promise { + const r = await api.get(`${BASE}/${id}/usages`); + return r.data; }, }; diff --git a/apps/client/src/features/acadenice/templates-admin/services/templates-client.ts b/apps/client/src/features/acadenice/templates-admin/services/templates-client.ts index 88a05f13..a9e0040a 100644 --- a/apps/client/src/features/acadenice/templates-admin/services/templates-client.ts +++ b/apps/client/src/features/acadenice/templates-admin/services/templates-client.ts @@ -1,4 +1,4 @@ -import axios from 'axios'; +import api from '@/lib/api-client'; export interface TemplateDto { id: string; @@ -36,41 +36,46 @@ export interface InstantiatePayload { name?: string; } -const BASE = '/api/v1/templates'; +const BASE = '/v1/templates'; export const templatesClient = { - list(opts: { category?: string; search?: string } = {}): Promise { - return axios - .get(BASE, { params: opts }) - .then((r) => r.data); + async list(opts: { category?: string; search?: string } = {}): Promise { + const r = await api.get(BASE, { params: opts }); + return r.data; }, - get(id: string): Promise { - return axios.get(`${BASE}/${id}`).then((r) => r.data); + async get(id: string): Promise { + const r = await api.get(`${BASE}/${id}`); + return r.data; }, - create(payload: CreateTemplatePayload): Promise { - return axios.post(BASE, payload).then((r) => r.data); + async create(payload: CreateTemplatePayload): Promise { + const r = await api.post(BASE, payload); + return r.data; }, - update(id: string, payload: UpdateTemplatePayload): Promise { - return axios.patch(`${BASE}/${id}`, payload).then((r) => r.data); + async update(id: string, payload: UpdateTemplatePayload): Promise { + const r = await api.patch(`${BASE}/${id}`, payload); + return r.data; }, - delete(id: string): Promise { - return axios.delete(`${BASE}/${id}`).then(() => undefined); + async delete(id: string): Promise { + await api.delete(`${BASE}/${id}`); }, - instantiate( + async instantiate( id: string, payload: InstantiatePayload, ): Promise<{ pageId: string; slugId: string }> { - return axios - .post<{ pageId: string; slugId: string }>(`${BASE}/${id}/instantiate`, payload) - .then((r) => r.data); + const r = await api.post<{ pageId: string; slugId: string }>( + `${BASE}/${id}/instantiate`, + payload, + ); + return r.data; }, - setDefault(id: string): Promise { - return axios.patch(`${BASE}/${id}/default`).then((r) => r.data); + async setDefault(id: string): Promise { + const r = await api.patch(`${BASE}/${id}/default`); + return r.data; }, };