Skip to main content
Glama
disks.ts3.94 kB
import { LiaraClient } from '../api/client.js'; import { Disk, CreateDiskRequest, FtpAccess, PaginationOptions, paginationToParams, } from '../api/types.js'; import { validateAppName, validateRequired } from '../utils/errors.js'; /** * List disks for a project */ export async function listDisks( client: LiaraClient, appName: string, pagination?: PaginationOptions ): Promise<Disk[]> { validateAppName(appName); // Disks are included in project details, but we can still apply pagination client-side if needed const project = await client.get<any>(`/v1/projects/${appName}`); const disks = project.disks || []; // Apply client-side pagination if needed (since disks come from project details) if (pagination) { const page = pagination.page || 1; const perPage = pagination.perPage || pagination.limit || 100; const start = (page - 1) * perPage; const end = start + perPage; return disks.slice(start, end); } return disks; } /** * Get details of a specific disk */ export async function getDisk( client: LiaraClient, appName: string, diskName: string ): Promise<Disk> { validateAppName(appName); validateRequired(diskName, 'Disk name'); return await client.get<Disk>(`/v1/projects/${appName}/disks/${diskName}`); } /** * Create a new disk for a project */ export async function createDisk( client: LiaraClient, appName: string, request: CreateDiskRequest ): Promise<Disk> { validateAppName(appName); validateRequired(request.name, 'Disk name'); validateRequired(request.size, 'Disk size'); validateRequired(request.mountPath, 'Mount path'); if (request.size <= 0) { throw new Error('Disk size must be greater than 0'); } return await client.post<Disk>( `/v1/projects/${appName}/disks`, request ); } /** * Delete a disk */ export async function deleteDisk( client: LiaraClient, appName: string, diskName: string ): Promise<void> { validateAppName(appName); validateRequired(diskName, 'Disk name'); await client.delete(`/v1/projects/${appName}/disks/${diskName}`); } /** * Create FTP access for a disk */ export async function createFtpAccess( client: LiaraClient, appName: string, diskName: string ): Promise<FtpAccess> { validateAppName(appName); validateRequired(diskName, 'Disk name'); return await client.post<FtpAccess>( `/v1/projects/${appName}/disks/${diskName}/ftp` ); } /** * List FTP accesses for a disk */ export async function listFtpAccesses( client: LiaraClient, appName: string, diskName: string, pagination?: PaginationOptions ): Promise<FtpAccess[]> { validateAppName(appName); validateRequired(diskName, 'Disk name'); const params = paginationToParams(pagination); return await client.get<FtpAccess[]>( `/v1/projects/${appName}/disks/${diskName}/ftp`, params ); } /** * Delete/revoke FTP access for a disk */ export async function deleteFtpAccess( client: LiaraClient, appName: string, diskName: string, ftpId: string ): Promise<void> { validateAppName(appName); validateRequired(diskName, 'Disk name'); validateRequired(ftpId, 'FTP access ID'); await client.delete(`/v1/projects/${appName}/disks/${diskName}/ftp/${ftpId}`); } /** * Resize a disk */ export async function resizeDisk( client: LiaraClient, appName: string, diskName: string, size: number ): Promise<Disk> { validateAppName(appName); validateRequired(diskName, 'Disk name'); validateRequired(size, 'Disk size'); if (size <= 0) { throw new Error('Disk size must be greater than 0'); } return await client.post<Disk>( `/v1/projects/${appName}/disks/${diskName}/resize`, { size } ); }

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/razavioo/liara-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server