UNPKG

@crazyrabbitltc/railway-mcp

Version:

Railway MCP Server - 146+ tools with 100% Railway API coverage, comprehensive MCP testing framework, and real infrastructure management through AI assistants. Enhanced version with enterprise features, based on original work by Jason Tan.

208 lines (207 loc) 5.33 kB
export class BackupRepository { client; constructor(client) { this.client = client; } async listBackups(projectId) { const query = ` query listBackups($projectId: String!) { project(id: $projectId) { backups { edges { node { id projectId serviceId volumeId type status size createdAt completedAt expiresAt metadata { description tags retentionDays compressionType } } } } } } `; const response = await this.client.request(query, { projectId }); return response.project.backups.edges.map(edge => edge.node); } async getBackup(backupId) { const query = ` query getBackup($backupId: String!) { backup(id: $backupId) { id projectId serviceId volumeId type status size createdAt completedAt expiresAt metadata { description tags retentionDays compressionType } } } `; const response = await this.client.request(query, { backupId }); return response.backup; } async createBackup(input) { const query = ` mutation createBackup($input: BackupCreateInput!) { backupCreate(input: $input) { id projectId serviceId volumeId type status createdAt metadata { description retentionDays tags } } } `; const response = await this.client.request(query, { input }); return response.backupCreate; } async deleteBackup(backupId) { const query = ` mutation deleteBackup($backupId: String!) { backupDelete(id: $backupId) } `; const response = await this.client.request(query, { backupId }); return response.backupDelete; } async restoreBackup(input) { const query = ` mutation restoreBackup($input: RestoreInput!) { backupRestore(input: $input) { id backupId targetProjectId targetServiceId status progress createdAt } } `; const response = await this.client.request(query, { input }); return response.backupRestore; } async getRestoreStatus(restoreId) { const query = ` query getRestoreStatus($restoreId: String!) { restoreOperation(id: $restoreId) { id backupId targetProjectId targetServiceId status progress createdAt completedAt errorMessage } } `; const response = await this.client.request(query, { restoreId }); return response.restoreOperation; } async listBackupPolicies(projectId) { const query = ` query listBackupPolicies($projectId: String!) { project(id: $projectId) { backupPolicies { edges { node { id projectId name schedule retentionDays isActive backupType targets { serviceId volumeId } createdAt updatedAt } } } } } `; const response = await this.client.request(query, { projectId }); return response.project.backupPolicies.edges.map(edge => edge.node); } async createBackupPolicy(input) { const query = ` mutation createBackupPolicy($input: BackupPolicyCreateInput!) { backupPolicyCreate(input: $input) { id projectId name schedule retentionDays isActive backupType targets { serviceId volumeId } createdAt } } `; const response = await this.client.request(query, { input }); return response.backupPolicyCreate; } async updateBackupPolicy(policyId, updates) { const query = ` mutation updateBackupPolicy($policyId: String!, $updates: BackupPolicyUpdateInput!) { backupPolicyUpdate(id: $policyId, input: $updates) { id name schedule retentionDays isActive updatedAt } } `; const response = await this.client.request(query, { policyId, updates }); return response.backupPolicyUpdate; } async deleteBackupPolicy(policyId) { const query = ` mutation deleteBackupPolicy($policyId: String!) { backupPolicyDelete(id: $policyId) } `; const response = await this.client.request(query, { policyId }); return response.backupPolicyDelete; } }