@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
JavaScript
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;
}
}