@nextclaw/ui 0.12.20-beta.0 → 0.12.20-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/assets/api-BcqDx0tm.js +15 -0
  3. package/dist/assets/app-manager-provider-DVYBjif-.js +1 -0
  4. package/dist/assets/{app-navigation.config-BORqHkbN.js → app-navigation.config-BOVDFMnp.js} +1 -1
  5. package/dist/assets/{channels-list-page-sISO_4Yj.js → channels-list-page-CsoI4OJm.js} +2 -2
  6. package/dist/assets/{chat-ChCu7LQD.js → chat-ahMH_i_K.js} +6 -6
  7. package/dist/assets/chat-page-BxlXY-MB.js +1 -0
  8. package/dist/assets/chunk-JZWAC4HX-u4uYphxM.js +3 -0
  9. package/dist/assets/{desktop-update-config-BfJ5iSeY.js → desktop-update-config-CD6-2PfI.js} +1 -1
  10. package/dist/assets/{dialog-B-CXiFPZ.js → dialog-csshWetU.js} +1 -1
  11. package/dist/assets/{dist-DYVfg3q5.js → dist-Bl94Ahwx.js} +1 -1
  12. package/dist/assets/{es2015-BXroVnPi.js → es2015-JCM5-KtW.js} +1 -1
  13. package/dist/assets/index-CM-57d8J.js +2 -0
  14. package/dist/assets/index-D8MKmXtO.css +1 -0
  15. package/dist/assets/marketplace-page-DJGDpTAo.js +1 -0
  16. package/dist/assets/{marketplace-page-C9oZ01rM.js → marketplace-page-DxlxHCFm.js} +2 -2
  17. package/dist/assets/{mcp-marketplace-page-DuEixgSs.js → mcp-marketplace-page-5UjYRWOR.js} +2 -2
  18. package/dist/assets/mcp-marketplace-page-C1XaHZZO.js +1 -0
  19. package/dist/assets/{model-config-mfhqEZBG.js → model-config-PccJ9XyH.js} +1 -1
  20. package/dist/assets/{notice-card-CozHB03G.js → notice-card-CCgk6FvF.js} +1 -1
  21. package/dist/assets/{popover-CPUPma-w.js → popover-YAsxDBhY.js} +1 -1
  22. package/dist/assets/{provider-scoped-model-input-CL9sti2I.js → provider-scoped-model-input-CzpF7cug.js} +1 -1
  23. package/dist/assets/{providers-list-HPmL2akJ.js → providers-list-8qDMER8o.js} +1 -1
  24. package/dist/assets/remote-D4TtLPAp.js +1 -0
  25. package/dist/assets/runtime-config-page-DWJHrV7H.js +1 -0
  26. package/dist/assets/{search-config-Bcnk9VlL.js → search-config-D3a65l3r.js} +1 -1
  27. package/dist/assets/{secrets-config-Dde-5Y1w.js → secrets-config-CoMlR_7i.js} +2 -2
  28. package/dist/assets/{select-BELPuXLW.js → select-DIZrwsKU.js} +1 -1
  29. package/dist/assets/{sessions-config-page-CG49_0Z6.js → sessions-config-page-QjH5tgjr.js} +2 -2
  30. package/dist/assets/{setting-row-D5DtT6Ny.js → setting-row-DiQyrE81.js} +1 -1
  31. package/dist/assets/{tag-chip-D9BWWgYg.js → tag-chip-C3wDBe_-.js} +1 -1
  32. package/dist/assets/theme-provider-W704JWF8.js +1 -0
  33. package/dist/assets/{tooltip-CI0rpNee.js → tooltip-Dq5Xehpk.js} +1 -1
  34. package/dist/assets/use-config-BQJjq1mP.js +1 -0
  35. package/dist/assets/{use-confirm-dialog-hbynwWf2.js → use-confirm-dialog-DBoV5n5P.js} +1 -1
  36. package/dist/assets/{use-infinite-scroll-loader-Cw5qQr3-.js → use-infinite-scroll-loader-JAicqVC5.js} +1 -1
  37. package/dist/assets/{use-viewport-layout-CWHVDC6z.js → use-viewport-layout-BX3XqzJ4.js} +1 -1
  38. package/dist/index.html +17 -17
  39. package/package.json +8 -6
  40. package/src/app/hooks/use-realtime-query-bridge.ts +5 -5
  41. package/src/features/channels/components/config/channel-form.tsx +3 -3
  42. package/src/features/chat/hooks/use-ncp-chat-page-data.ts +7 -6
  43. package/src/features/chat/pages/ncp-chat-page.test.ts +22 -8
  44. package/src/features/chat/utils/chat-session-preference-governance.utils.test.tsx +114 -0
  45. package/src/features/chat/utils/chat-session-preference-governance.utils.ts +30 -36
  46. package/src/shared/components/common/brand-header.test.tsx +7 -2
  47. package/src/shared/components/common/brand-header.tsx +34 -4
  48. package/src/shared/lib/api/index.ts +12 -12
  49. package/src/shared/lib/api/ncp-session.test.ts +17 -18
  50. package/src/shared/lib/api/raw-client.utils.ts +3 -126
  51. package/src/shared/lib/api/services/agents.service.ts +18 -0
  52. package/src/shared/lib/api/services/channel-auth.service.ts +21 -0
  53. package/src/shared/lib/api/{client.ts → services/client.service.ts} +45 -1
  54. package/src/shared/lib/api/services/config.service.ts +171 -0
  55. package/src/shared/lib/api/services/marketplace.service.ts +66 -0
  56. package/src/shared/lib/api/services/mcp-marketplace.service.ts +70 -0
  57. package/src/shared/lib/api/services/ncp-attachments.service.ts +14 -0
  58. package/src/shared/lib/api/services/ncp-session.service.ts +39 -0
  59. package/src/shared/lib/api/services/remote.service.ts +50 -0
  60. package/src/shared/lib/api/services/runtime-control.service.ts +18 -0
  61. package/src/shared/lib/api/services/runtime-update.service.ts +26 -0
  62. package/src/shared/lib/api/services/server-path.service.ts +16 -0
  63. package/src/shared/lib/transport/index.ts +1 -0
  64. package/src/shared/lib/transport/local-transport.service.ts +24 -4
  65. package/src/shared/lib/transport/remote-transport.service.ts +1 -1
  66. package/src/shared/lib/transport/request-raw-api-response.utils.ts +133 -0
  67. package/src/shared/lib/transport/transport.types.ts +8 -2
  68. package/dist/assets/api-C412zuay.js +0 -15
  69. package/dist/assets/app-manager-provider-Cm-KiZZG.js +0 -1
  70. package/dist/assets/chat-page-BCaNZJGT.js +0 -1
  71. package/dist/assets/chunk-JZWAC4HX-DvbcIVPf.js +0 -3
  72. package/dist/assets/index-CUmk8xFK.css +0 -1
  73. package/dist/assets/index-CqPDhosM.js +0 -2
  74. package/dist/assets/marketplace-page-C8uaWkfd.js +0 -1
  75. package/dist/assets/mcp-marketplace-page-rNqr6ZpD.js +0 -1
  76. package/dist/assets/remote-oDlAdgVA.js +0 -1
  77. package/dist/assets/runtime-config-page-BCshTAAE.js +0 -1
  78. package/dist/assets/theme-provider-DeBrTglS.js +0 -1
  79. package/dist/assets/use-config-CrWZ_TSF.js +0 -1
  80. package/src/shared/lib/api/agents.ts +0 -34
  81. package/src/shared/lib/api/channel-auth.ts +0 -35
  82. package/src/shared/lib/api/config.ts +0 -362
  83. package/src/shared/lib/api/marketplace.ts +0 -156
  84. package/src/shared/lib/api/mcp-marketplace.ts +0 -138
  85. package/src/shared/lib/api/ncp-attachments.ts +0 -41
  86. package/src/shared/lib/api/ncp-session.ts +0 -78
  87. package/src/shared/lib/api/remote.ts +0 -86
  88. package/src/shared/lib/api/runtime-control.ts +0 -34
  89. package/src/shared/lib/api/runtime-update.service.ts +0 -50
  90. package/src/shared/lib/api/server-path.ts +0 -46
@@ -1,138 +0,0 @@
1
- import { api } from './client';
2
- import type {
3
- MarketplaceInstalledView,
4
- MarketplaceItemView,
5
- MarketplaceListView,
6
- MarketplaceMcpContentView,
7
- MarketplaceMcpDoctorResult,
8
- MarketplaceRecommendationView,
9
- MarketplaceSort
10
- } from './types';
11
-
12
- export type McpMarketplaceListParams = {
13
- q?: string;
14
- tag?: string;
15
- sort?: MarketplaceSort;
16
- page?: number;
17
- pageSize?: number;
18
- };
19
-
20
- export async function fetchMcpMarketplaceItems(params: McpMarketplaceListParams): Promise<MarketplaceListView> {
21
- const query = new URLSearchParams();
22
- if (params.q?.trim()) {
23
- query.set('q', params.q.trim());
24
- }
25
- if (params.tag?.trim()) {
26
- query.set('tag', params.tag.trim());
27
- }
28
- if (params.sort) {
29
- query.set('sort', params.sort);
30
- }
31
- if (typeof params.page === 'number' && Number.isFinite(params.page)) {
32
- query.set('page', String(Math.max(1, Math.trunc(params.page))));
33
- }
34
- if (typeof params.pageSize === 'number' && Number.isFinite(params.pageSize)) {
35
- query.set('pageSize', String(Math.max(1, Math.trunc(params.pageSize))));
36
- }
37
-
38
- const suffix = query.toString();
39
- const response = await api.get<MarketplaceListView>(
40
- suffix ? `/api/marketplace/mcp/items?${suffix}` : '/api/marketplace/mcp/items'
41
- );
42
- if (!response.ok) {
43
- throw new Error(response.error.message);
44
- }
45
- return response.data;
46
- }
47
-
48
- export async function fetchMcpMarketplaceInstalled(): Promise<MarketplaceInstalledView> {
49
- const response = await api.get<MarketplaceInstalledView>('/api/marketplace/mcp/installed');
50
- if (!response.ok) {
51
- throw new Error(response.error.message);
52
- }
53
- return response.data;
54
- }
55
-
56
- export async function fetchMcpMarketplaceItem(slug: string): Promise<MarketplaceItemView> {
57
- const response = await api.get<MarketplaceItemView>(`/api/marketplace/mcp/items/${encodeURIComponent(slug)}`);
58
- if (!response.ok) {
59
- throw new Error(response.error.message);
60
- }
61
- return response.data;
62
- }
63
-
64
- export async function fetchMcpMarketplaceContent(slug: string): Promise<MarketplaceMcpContentView> {
65
- const response = await api.get<MarketplaceMcpContentView>(`/api/marketplace/mcp/items/${encodeURIComponent(slug)}/content`);
66
- if (!response.ok) {
67
- throw new Error(response.error.message);
68
- }
69
- return response.data;
70
- }
71
-
72
- export async function fetchMcpMarketplaceRecommendations(params: {
73
- scene?: string;
74
- limit?: number;
75
- } = {}): Promise<MarketplaceRecommendationView> {
76
- const query = new URLSearchParams();
77
- if (params.scene?.trim()) {
78
- query.set('scene', params.scene.trim());
79
- }
80
- if (typeof params.limit === 'number' && Number.isFinite(params.limit)) {
81
- query.set('limit', String(Math.max(1, Math.trunc(params.limit))));
82
- }
83
- const suffix = query.toString();
84
- const response = await api.get<MarketplaceRecommendationView>(
85
- suffix ? `/api/marketplace/mcp/recommendations?${suffix}` : '/api/marketplace/mcp/recommendations'
86
- );
87
- if (!response.ok) {
88
- throw new Error(response.error.message);
89
- }
90
- return response.data;
91
- }
92
-
93
- export async function installMcpMarketplaceItem(request: {
94
- spec: string;
95
- name?: string;
96
- enabled?: boolean;
97
- allAgents?: boolean;
98
- agents?: string[];
99
- inputs?: Record<string, string>;
100
- }): Promise<{ type: 'mcp'; spec: string; name?: string; message: string; output?: string }> {
101
- const response = await api.post<{ type: 'mcp'; spec: string; name?: string; message: string; output?: string }>(
102
- '/api/marketplace/mcp/install',
103
- {
104
- type: 'mcp',
105
- ...request
106
- }
107
- );
108
- if (!response.ok) {
109
- throw new Error(response.error.message);
110
- }
111
- return response.data;
112
- }
113
-
114
- export async function manageMcpMarketplaceItem(request: {
115
- action: 'enable' | 'disable' | 'remove';
116
- id?: string;
117
- spec?: string;
118
- }): Promise<{ type: 'mcp'; action: 'enable' | 'disable' | 'remove'; id: string; message: string; output?: string }> {
119
- const response = await api.post<{ type: 'mcp'; action: 'enable' | 'disable' | 'remove'; id: string; message: string; output?: string }>(
120
- '/api/marketplace/mcp/manage',
121
- {
122
- type: 'mcp',
123
- ...request
124
- }
125
- );
126
- if (!response.ok) {
127
- throw new Error(response.error.message);
128
- }
129
- return response.data;
130
- }
131
-
132
- export async function doctorMcpMarketplaceItem(name: string): Promise<MarketplaceMcpDoctorResult> {
133
- const response = await api.post<MarketplaceMcpDoctorResult>('/api/marketplace/mcp/doctor', { name });
134
- if (!response.ok) {
135
- throw new Error(response.error.message);
136
- }
137
- return response.data;
138
- }
@@ -1,41 +0,0 @@
1
- import type { NcpDraftAttachment } from "@nextclaw/ncp-react";
2
- import { API_BASE } from "./api-base";
3
- import type { ApiResponse, NcpAssetPutView } from "./types";
4
-
5
- function readErrorMessage(payload: unknown, fallback: string): string {
6
- if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
7
- return fallback;
8
- }
9
- const { error } = (payload as { error?: unknown });
10
- if (!error || typeof error !== "object" || Array.isArray(error)) {
11
- return fallback;
12
- }
13
- const { message } = (error as { message?: unknown });
14
- return typeof message === "string" && message.trim().length > 0 ? message : fallback;
15
- }
16
-
17
- export async function uploadNcpAssets(files: File[]): Promise<NcpDraftAttachment[]> {
18
- const formData = new FormData();
19
- for (const file of files) {
20
- formData.append("files", file);
21
- }
22
-
23
- const response = await fetch(`${API_BASE}/api/ncp/assets`, {
24
- method: "POST",
25
- body: formData,
26
- credentials: "include",
27
- });
28
- const payload = (await response.json()) as ApiResponse<NcpAssetPutView>;
29
- if (!response.ok || !payload.ok) {
30
- throw new Error(readErrorMessage(payload, "Failed to put assets."));
31
- }
32
-
33
- return payload.data.assets.map((asset) => ({
34
- id: asset.id,
35
- name: asset.name,
36
- mimeType: asset.mimeType,
37
- sizeBytes: asset.sizeBytes,
38
- assetUri: asset.assetUri,
39
- url: asset.url,
40
- }));
41
- }
@@ -1,78 +0,0 @@
1
- import { api } from './client';
2
- import type {
3
- NcpSessionMessagesView,
4
- NcpSessionSkillsView,
5
- NcpSessionsListView,
6
- NcpSessionSummaryView,
7
- SessionPatchUpdate
8
- } from './types';
9
-
10
- // GET /api/ncp/sessions
11
- export async function fetchNcpSessions(params?: { limit?: number }): Promise<NcpSessionsListView> {
12
- const query = new URLSearchParams();
13
- if (typeof params?.limit === 'number' && Number.isFinite(params.limit)) {
14
- query.set('limit', String(Math.max(1, Math.trunc(params.limit))));
15
- }
16
- const suffix = query.toString();
17
- const response = await api.get<NcpSessionsListView>(suffix ? `/api/ncp/sessions?${suffix}` : '/api/ncp/sessions');
18
- if (!response.ok) {
19
- throw new Error(response.error.message);
20
- }
21
- return response.data;
22
- }
23
-
24
- // GET /api/ncp/sessions/:sessionId/messages
25
- export async function fetchNcpSessionMessages(sessionId: string, limit = 200): Promise<NcpSessionMessagesView> {
26
- const response = await api.get<NcpSessionMessagesView>(
27
- `/api/ncp/sessions/${encodeURIComponent(sessionId)}/messages?limit=${Math.max(1, Math.trunc(limit))}`
28
- );
29
- if (!response.ok) {
30
- throw new Error(response.error.message);
31
- }
32
- return response.data;
33
- }
34
-
35
- // GET /api/ncp/sessions/:sessionId/skills
36
- export async function fetchNcpSessionSkills(
37
- sessionId: string,
38
- params?: { projectRoot?: string | null }
39
- ): Promise<NcpSessionSkillsView> {
40
- const query = new URLSearchParams();
41
- const projectRoot = params?.projectRoot?.trim();
42
- if (projectRoot) {
43
- query.set('projectRoot', projectRoot);
44
- }
45
- const suffix = query.toString();
46
- const response = await api.get<NcpSessionSkillsView>(
47
- suffix
48
- ? `/api/ncp/sessions/${encodeURIComponent(sessionId)}/skills?${suffix}`
49
- : `/api/ncp/sessions/${encodeURIComponent(sessionId)}/skills`
50
- );
51
- if (!response.ok) {
52
- throw new Error(response.error.message);
53
- }
54
- return response.data;
55
- }
56
-
57
- // PUT /api/ncp/sessions/:sessionId
58
- export async function updateNcpSession(
59
- sessionId: string,
60
- data: SessionPatchUpdate
61
- ): Promise<NcpSessionSummaryView> {
62
- const response = await api.put<NcpSessionSummaryView>(`/api/ncp/sessions/${encodeURIComponent(sessionId)}`, data);
63
- if (!response.ok) {
64
- throw new Error(response.error.message);
65
- }
66
- return response.data;
67
- }
68
-
69
- // DELETE /api/ncp/sessions/:sessionId
70
- export async function deleteNcpSession(sessionId: string): Promise<{ deleted: boolean; sessionId: string }> {
71
- const response = await api.delete<{ deleted: boolean; sessionId: string }>(
72
- `/api/ncp/sessions/${encodeURIComponent(sessionId)}`
73
- );
74
- if (!response.ok) {
75
- throw new Error(response.error.message);
76
- }
77
- return response.data;
78
- }
@@ -1,86 +0,0 @@
1
- import { api } from './client';
2
- import type {
3
- RemoteAccessView,
4
- RemoteAccountProfileUpdateRequest,
5
- RemoteBrowserAuthPollRequest,
6
- RemoteBrowserAuthPollResult,
7
- RemoteBrowserAuthStartRequest,
8
- RemoteBrowserAuthStartResult,
9
- RemoteDoctorView,
10
- RemoteLoginRequest,
11
- RemoteServiceAction,
12
- RemoteServiceActionResult,
13
- RemoteSettingsUpdateRequest
14
- } from './remote.types';
15
-
16
- export async function fetchRemoteStatus(): Promise<RemoteAccessView> {
17
- const response = await api.get<RemoteAccessView>('/api/remote/status');
18
- if (!response.ok) {
19
- throw new Error(response.error.message);
20
- }
21
- return response.data;
22
- }
23
-
24
- export async function fetchRemoteDoctor(): Promise<RemoteDoctorView> {
25
- const response = await api.get<RemoteDoctorView>('/api/remote/doctor');
26
- if (!response.ok) {
27
- throw new Error(response.error.message);
28
- }
29
- return response.data;
30
- }
31
-
32
- export async function loginRemote(data: RemoteLoginRequest): Promise<RemoteAccessView> {
33
- const response = await api.post<RemoteAccessView>('/api/remote/login', data);
34
- if (!response.ok) {
35
- throw new Error(response.error.message);
36
- }
37
- return response.data;
38
- }
39
-
40
- export async function startRemoteBrowserAuth(data: RemoteBrowserAuthStartRequest): Promise<RemoteBrowserAuthStartResult> {
41
- const response = await api.post<RemoteBrowserAuthStartResult>('/api/remote/auth/start', data);
42
- if (!response.ok) {
43
- throw new Error(response.error.message);
44
- }
45
- return response.data;
46
- }
47
-
48
- export async function pollRemoteBrowserAuth(data: RemoteBrowserAuthPollRequest): Promise<RemoteBrowserAuthPollResult> {
49
- const response = await api.post<RemoteBrowserAuthPollResult>('/api/remote/auth/poll', data);
50
- if (!response.ok) {
51
- throw new Error(response.error.message);
52
- }
53
- return response.data;
54
- }
55
-
56
- export async function logoutRemote(): Promise<RemoteAccessView> {
57
- const response = await api.post<RemoteAccessView>('/api/remote/logout', {});
58
- if (!response.ok) {
59
- throw new Error(response.error.message);
60
- }
61
- return response.data;
62
- }
63
-
64
- export async function updateRemoteAccountProfile(data: RemoteAccountProfileUpdateRequest): Promise<RemoteAccessView> {
65
- const response = await api.put<RemoteAccessView>('/api/remote/account/profile', data);
66
- if (!response.ok) {
67
- throw new Error(response.error.message);
68
- }
69
- return response.data;
70
- }
71
-
72
- export async function updateRemoteSettings(data: RemoteSettingsUpdateRequest): Promise<RemoteAccessView> {
73
- const response = await api.put<RemoteAccessView>('/api/remote/settings', data);
74
- if (!response.ok) {
75
- throw new Error(response.error.message);
76
- }
77
- return response.data;
78
- }
79
-
80
- export async function controlRemoteService(action: RemoteServiceAction): Promise<RemoteServiceActionResult> {
81
- const response = await api.post<RemoteServiceActionResult>(`/api/remote/service/${action}`, {});
82
- if (!response.ok) {
83
- throw new Error(response.error.message);
84
- }
85
- return response.data;
86
- }
@@ -1,34 +0,0 @@
1
- import { api } from './client';
2
- import type { RuntimeControlActionResult, RuntimeControlView } from './runtime-control.types';
3
-
4
- export async function fetchRuntimeControl(): Promise<RuntimeControlView> {
5
- const response = await api.get<RuntimeControlView>('/api/runtime/control');
6
- if (!response.ok) {
7
- throw new Error(response.error.message);
8
- }
9
- return response.data;
10
- }
11
-
12
- export async function startRuntimeService(): Promise<RuntimeControlActionResult> {
13
- const response = await api.post<RuntimeControlActionResult>('/api/runtime/control/start-service', {});
14
- if (!response.ok) {
15
- throw new Error(response.error.message);
16
- }
17
- return response.data;
18
- }
19
-
20
- export async function restartRuntimeService(): Promise<RuntimeControlActionResult> {
21
- const response = await api.post<RuntimeControlActionResult>('/api/runtime/control/restart-service', {});
22
- if (!response.ok) {
23
- throw new Error(response.error.message);
24
- }
25
- return response.data;
26
- }
27
-
28
- export async function stopRuntimeService(): Promise<RuntimeControlActionResult> {
29
- const response = await api.post<RuntimeControlActionResult>('/api/runtime/control/stop-service', {});
30
- if (!response.ok) {
31
- throw new Error(response.error.message);
32
- }
33
- return response.data;
34
- }
@@ -1,50 +0,0 @@
1
- import type { UpdatePreferences, UpdateSnapshot } from '@nextclaw/kernel';
2
- import { api } from './client';
3
-
4
- export async function fetchRuntimeUpdate(): Promise<UpdateSnapshot> {
5
- const response = await api.get<UpdateSnapshot>('/api/runtime/update');
6
- if (!response.ok) {
7
- throw new Error(response.error.message);
8
- }
9
- return response.data;
10
- }
11
-
12
- export async function checkRuntimeUpdate(): Promise<UpdateSnapshot> {
13
- const response = await api.post<UpdateSnapshot>('/api/runtime/update/check', {});
14
- if (!response.ok) {
15
- throw new Error(response.error.message);
16
- }
17
- return response.data;
18
- }
19
-
20
- export async function downloadRuntimeUpdate(): Promise<UpdateSnapshot> {
21
- const response = await api.post<UpdateSnapshot>('/api/runtime/update/download', {});
22
- if (!response.ok) {
23
- throw new Error(response.error.message);
24
- }
25
- return response.data;
26
- }
27
-
28
- export async function applyRuntimeUpdate(): Promise<UpdateSnapshot> {
29
- const response = await api.post<UpdateSnapshot>('/api/runtime/update/apply', {});
30
- if (!response.ok) {
31
- throw new Error(response.error.message);
32
- }
33
- return response.data;
34
- }
35
-
36
- export async function updateRuntimeUpdatePreferences(preferences: Partial<UpdatePreferences>): Promise<UpdateSnapshot> {
37
- const response = await api.put<UpdateSnapshot>('/api/runtime/update/preferences', preferences);
38
- if (!response.ok) {
39
- throw new Error(response.error.message);
40
- }
41
- return response.data;
42
- }
43
-
44
- export async function updateRuntimeUpdateChannel(channel: UpdateSnapshot['channel']): Promise<UpdateSnapshot> {
45
- const response = await api.put<UpdateSnapshot>('/api/runtime/update/channel', { channel });
46
- if (!response.ok) {
47
- throw new Error(response.error.message);
48
- }
49
- return response.data;
50
- }
@@ -1,46 +0,0 @@
1
- import { api } from './client';
2
- import type { ServerPathBrowseView, ServerPathReadView } from './types';
3
-
4
- export async function fetchServerPathBrowse(params?: {
5
- path?: string | null;
6
- includeFiles?: boolean;
7
- }): Promise<ServerPathBrowseView> {
8
- const path = typeof params?.path === 'string' ? params.path.trim() : '';
9
- const includeFiles = Boolean(params?.includeFiles);
10
- const query = new URLSearchParams();
11
- if (path) {
12
- query.set('path', path);
13
- }
14
- if (includeFiles) {
15
- query.set('includeFiles', '1');
16
- }
17
- const suffix = query.toString();
18
- const response = await api.get<ServerPathBrowseView>(
19
- suffix ? `/api/server-paths/browse?${suffix}` : '/api/server-paths/browse'
20
- );
21
- if (!response.ok) {
22
- throw new Error(response.error.message);
23
- }
24
- return response.data;
25
- }
26
-
27
- export async function fetchServerPathRead(params: {
28
- path: string;
29
- basePath?: string | null;
30
- }): Promise<ServerPathReadView> {
31
- const { path } = params;
32
- const basePath =
33
- typeof params.basePath === 'string' ? params.basePath.trim() : '';
34
- const query = new URLSearchParams();
35
- query.set('path', path.trim());
36
- if (basePath) {
37
- query.set('basePath', basePath);
38
- }
39
- const response = await api.get<ServerPathReadView>(
40
- `/api/server-paths/read?${query.toString()}`
41
- );
42
- if (!response.ok) {
43
- throw new Error(response.error.message);
44
- }
45
- return response.data;
46
- }