UseDocumentation Index
Fetch the complete documentation index at: https://docs.ixo.world/llms.txt
Use this file to discover all available pages before exploring further.
getNestModules for webhooks, public probes, OAuth callbacks, or long-lived services. Use getAuthExcludedRoutes to skip UCAN auth on specific paths.
Write a NestJS controller and module
A plugin’s module is a regular Nest module. Use a static Canonical source: weather.module.ts.
register(opts) returning a DynamicModule if you want to pass config into DI.Return the module from getNestModules(ctx)
ctx is optional but useful for reading typed config when registering the module.return [SlackModule]. The runtime spreads the returned modules into RuntimeAppModule.imports. See getNestModules in weather.plugin.ts.Opt routes out of UCAN auth (optional)
By default every plugin route goes through Match by the full path the controller mounts at (
AuthHeaderMiddleware. For webhooks, OAuth callbacks, or public probes, return them from getAuthExcludedRoutes.weather/now, not now). method defaults to RequestMethod.ALL. See getAuthExcludedRoutes in weather.plugin.ts.What to know before shipping
- The same hook handles long-lived services. Slack, BullMQ workers, polling clients all ship as Nest modules with
OnModuleInitlifecycle. - Plugin modules have full DI access to the runtime’s services (Sessions, Messages, Secrets, UCAN, …).
- Host code can also opt routes out of auth via
createOracleApp({ authExcludedRoutes }). Plugin and host lists merge with built-in exclusions (/health,/docs). - Leading slash on
pathis optional. The matcher mirrors NestJS’sMiddlewareConsumer.exclude(...). - Plugin route paths are namespaced by the controller’s
@Controller('weather')decorator — keep them under your plugin’s name to avoid collisions.
Where to read next
Create your oracle
Host-level Nest modules and
authExcludedRoutes.API endpoints
The framework’s always-on HTTP/WS surface.