Files
openchamber/packages/web/src/api/index.ts
T

68 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-12-07 19:32:53 +02:00
import type { RuntimeAPIs } from '@openchamber/ui/lib/api/types';
import {
createRuntimeUrlResolver,
getRuntimeUrlResolver,
setRuntimeUrlResolver,
type RuntimeUrlResolver,
} from '@openchamber/ui/lib/runtime-url';
import { registerRuntimeProvider } from '@openchamber/ui/lib/runtime-api-registry';
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';
import { createWebPushAPI } from './push';
import { createWebGitHubAPI } from './github';
import { createWebLinearAPI } from './linear';
import { createWebGitLabAPI } from './gitlab';
import { createWebGiteaAPI } from './gitea';
import { createWebClientAuthAPI } from './clientAuth';
2025-12-07 19:32:53 +02: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 {
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(),
};
};
/**
* 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());
};