@truenas/api-client
    Preparing search index...

    Interface OperationMappings

    OperationMappings Interface

    Defines version-agnostic operations that abstract away API differences between TrueNAS versions. Each API client version implements this interface with its specific endpoint calls and response transformations.

    Operations return Observable<Job | null> that:

    • For async operations: emits Job updates until complete, then completes
    • For sync operations: emits null once, then completes

    Usage in components:

    const truenas = this.truenasService.get(systemId);
    truenas.ops.containerQuery().subscribe(containers => ...);

    // With progress dialog (recommended)
    this.truenasService.trackWithDialog(
    truenas.ops.containerStart(id),
    'Starting container'
    ).subscribe(() => console.log('Started'));

    // Without progress dialog
    truenas.ops.containerStart(id).subscribe({
    next: (job) => job && console.log(job.progress),
    complete: () => console.log('Started')
    });

    Version mappings:

    • v25.10: Uses virt.instance.* APIs (emits Job updates)
    • v26+: Uses container.* APIs (some emit Job, some emit null)

    To add new operations:

    1. Add the method signature here
    2. Implement in TrueNasApiClientV2510.createOperations()
    3. Implement in TrueNasApiClientV26.createOperations()
    interface OperationMappings {
        containerQuery: () => Observable<Container[]>;
        containerRestart: (
            id: string,
            options: ContainerRestartOptions,
        ) => Observable<Job | null>;
        containerStart: (id: string) => Observable<Job | null>;
        containerStop: (
            id: string,
            options: ContainerStopOptions,
        ) => Observable<Job | null>;
    }
    Index
    containerQuery: () => Observable<Container[]>

    Query all containers

    • v25.10: virt.instance.query with type=CONTAINER filter
    • v26+: container.query
    containerRestart: (
        id: string,
        options: ContainerRestartOptions,
    ) => Observable<Job | null>

    Restart a container

    • v25.10: Emits Job updates until restarted
    • v26+: Emits Job updates (stop phase), then null (sync start)
    containerStart: (id: string) => Observable<Job | null>

    Start a container

    • v25.10: Emits Job updates until started
    • v26+: Emits null (synchronous operation)
    containerStop: (
        id: string,
        options: ContainerStopOptions,
    ) => Observable<Job | null>

    Stop a container

    • v25.10: Emits Job updates until stopped
    • v26+: Emits Job updates until stopped