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

53 lines
2.1 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 { 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 { 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 {
2025-12-13 16:34:17 +02:00
runtime: { platform: 'web', isDesktop: false, isVSCode: false, label: 'web' },
2025-12-07 19:32:53 +02:00
terminal: createWebTerminalAPI(),
git: createWebGitAPI(),
files: createWebFilesAPI({ urls: activeUrls, getDirectory: () => useDirectoryStore.getState().currentDirectory }),
2025-12-07 19:32:53 +02:00
settings: createWebSettingsAPI(),
permissions: createWebPermissionsAPI(),
notifications: createWebNotificationsAPI(),
github: createWebGitHubAPI({ urls: activeUrls }),
push: createWebPushAPI(),
clientAuth: createWebClientAuthAPI(),
2025-12-07 19:32:53 +02:00
tools: createWebToolsAPI(),
};
};