2025-12-07 19:32:53 +02:00
|
|
|
import type { RuntimeAPIs } from '@openchamber/ui/lib/api/types';
|
2026-06-02 00:43:05 +03:00
|
|
|
import {
|
|
|
|
|
createRuntimeUrlResolver,
|
|
|
|
|
getRuntimeUrlResolver,
|
|
|
|
|
setRuntimeUrlResolver,
|
|
|
|
|
type RuntimeUrlResolver,
|
|
|
|
|
} from '@openchamber/ui/lib/runtime-url';
|
2026-09-09 17:08:15 +00:00
|
|
|
import { registerRuntimeProvider } from '@openchamber/ui/lib/runtime-api-registry';
|
2026-06-15 04:00:02 -04:00
|
|
|
import { useDirectoryStore } from '@openchamber/ui/stores/useDirectoryStore';
|
2025-12-07 19:32:53 +02:00
|
|
|
import { createWebTerminalAPI } from './terminal';
|
|
|
|
|
import { createWebGitAPI } from './git';
|
|
|
|
|
import { createWebFilesAPI } from './files';
|
|
|
|
|
import { createWebSettingsAPI } from './settings';
|
|
|
|
|
import { createWebPermissionsAPI } from './permissions';
|
|
|
|
|
import { createWebNotificationsAPI } from './notifications';
|
|
|
|
|
import { createWebToolsAPI } from './tools';
|
2026-01-22 01:19:24 +02:00
|
|
|
import { createWebPushAPI } from './push';
|
2026-01-23 16:08:58 +02:00
|
|
|
import { createWebGitHubAPI } from './github';
|
2026-08-30 02:18:40 +03:00
|
|
|
import { createWebLinearAPI } from './linear';
|
2026-08-11 21:01:51 +00:00
|
|
|
import { createWebGitLabAPI } from './gitlab';
|
2026-08-14 03:16:04 +00:00
|
|
|
import { createWebGiteaAPI } from './gitea';
|
2026-06-02 00:43:05 +03:00
|
|
|
import { createWebClientAuthAPI } from './clientAuth';
|
2025-12-07 19:32:53 +02:00
|
|
|
|
2026-06-02 00:43:05 +03:00
|
|
|
export interface WebAPIsOptions {
|
|
|
|
|
urls?: RuntimeUrlResolver;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const createActiveRuntimeUrlResolver = (): RuntimeUrlResolver => ({
|
|
|
|
|
api: (...args) => getRuntimeUrlResolver().api(...args),
|
|
|
|
|
authenticatedAsset: (...args) => getRuntimeUrlResolver().authenticatedAsset(...args),
|
|
|
|
|
auth: (...args) => getRuntimeUrlResolver().auth(...args),
|
|
|
|
|
health: (...args) => getRuntimeUrlResolver().health(...args),
|
|
|
|
|
rawFile: (...args) => getRuntimeUrlResolver().rawFile(...args),
|
|
|
|
|
sse: (...args) => getRuntimeUrlResolver().sse(...args),
|
|
|
|
|
websocket: (...args) => getRuntimeUrlResolver().websocket(...args),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const createWebAPIs = (options: WebAPIsOptions = {}): RuntimeAPIs => {
|
|
|
|
|
const urls = options.urls ?? createRuntimeUrlResolver();
|
|
|
|
|
setRuntimeUrlResolver(urls);
|
|
|
|
|
const activeUrls = createActiveRuntimeUrlResolver();
|
|
|
|
|
|
|
|
|
|
return {
|
2026-09-09 17:08:15 +00:00
|
|
|
runtime: { platform: 'web', isDesktop: false, isVSCode: false, label: 'web' },
|
|
|
|
|
terminal: createWebTerminalAPI(),
|
|
|
|
|
git: createWebGitAPI(),
|
|
|
|
|
files: createWebFilesAPI({ urls: activeUrls, getDirectory: () => useDirectoryStore.getState().currentDirectory }),
|
|
|
|
|
settings: createWebSettingsAPI(),
|
|
|
|
|
permissions: createWebPermissionsAPI(),
|
|
|
|
|
notifications: createWebNotificationsAPI(),
|
|
|
|
|
github: createWebGitHubAPI({ urls: activeUrls }),
|
|
|
|
|
linear: createWebLinearAPI(),
|
|
|
|
|
gitlab: createWebGitLabAPI({ urls: activeUrls }),
|
|
|
|
|
gitea: createWebGiteaAPI({ urls: activeUrls }),
|
|
|
|
|
push: createWebPushAPI(),
|
|
|
|
|
clientAuth: createWebClientAuthAPI(),
|
|
|
|
|
tools: createWebToolsAPI(),
|
2026-06-02 00:43:05 +03:00
|
|
|
};
|
|
|
|
|
};
|
2026-09-09 17:08:15 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Register the web provider with the runtime API registry. Call once during
|
|
|
|
|
* app bootstrap (after the URL resolver and auth are configured).
|
|
|
|
|
*/
|
|
|
|
|
export const registerWebProvider = (): void => {
|
|
|
|
|
registerRuntimeProvider('web', () => createWebAPIs());
|
|
|
|
|
};
|