TidGi-Desktop/docs/TidGiServiceAPI.md
linonetwo b677088a48 Expose TidGi services to $tw.tidgi and add types
Make TidGi IPC service proxies available inside the TiddlyWiki sandbox and provide typings for plugin authors. Added docs (docs/TidGiServiceAPI.md), bumped tidgi-shared to 0.1.2, and introduced shared type files (packages/tidgi-shared/src/{global.d.ts,tidgiGlobal.ts}) and tsconfig include for .d.ts files. Preload now exposes service via contextBridge and attaches it to $tw.tidgi.service (with DOMContentLoaded retry). Updated various wiki plugin files to use $tw.tidgi.service instead of window.service, adjusted worker-side service exports (no automatic global attach), and updated startNodeJSWiki to safely inject service into the wiki sandbox with proper typing. Added runtime TiddlyWiki type augmentations (src/types/tidgi-tw.d.ts). These changes ensure plugins running in the VM can reliably access typed service proxies.
2026-02-10 02:41:32 +08:00

46 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TidGi Service API Usage
This document explains how TW plugins can call TidGi services and how the API is exposed across front-end and back-end.
## Where services are exposed
TidGi exposes the same service proxies in two places:
- Plugin runtime (TW sandbox): `$tw.tidgi.service`
- Frontend runtime (renderer): `window.service`
## Usage in plugins (TiddlyWiki route modules)
Route modules run inside TiddlyWikis VM sandbox, so `globalThis` is not the workers real global. Use `$tw.tidgi.service`.
Example:
```ts
import type { ITidGiGlobalService } from 'tidgi-shared';
const tidgiService = ($tw as typeof $tw & { tidgi?: { service?: ITidGiGlobalService } }).tidgi?.service;
```
## Usage in renderer / WebView
Frontend UI code should keep using `window.service`.
```ts
await window.service.workspace.getActiveWorkspace();
```
## How the API is wired
- Service proxies are created in the wiki worker and preload using `electron-ipc-cat`.
- Renderer (WebView): `src/preload/common/exportServices.ts` exposes proxies via `contextBridge`, assigns `window.service`, and attaches `$tw.tidgi.service` after `$tw` is ready.
- Wiki worker: `startNodeJSWiki.ts` attaches the same proxies to `$tw.tidgi.service` before TiddlyWiki boot, so route modules can access them inside the sandbox.
## Types for plugins
Use `tidgi-shared` for type-safe access. It also augments the global `$tw` shape so editors can resolve `$tw.tidgi.service`:
```ts
import type { IWorkspaceService } from 'tidgi-shared';
```
This package re-exports all service interfaces and IPC descriptors used by TidGi.