@takashito/linode-mcp-server
Version:
MCP server for Linode API
135 lines • 5.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createObjectStorageClient = createObjectStorageClient;
function createObjectStorageClient(axios) {
return {
// Clusters
getClusters: async () => {
const response = await axios.get('/object-storage/clusters');
return response.data.data;
},
// Endpoints
getEndpoints: async (params) => {
const response = await axios.get('/object-storage/endpoints', { params });
return response.data;
},
// Buckets
getBuckets: async (params) => {
const response = await axios.get('/object-storage/buckets', { params });
return response.data;
},
getBucket: async (cluster, label) => {
const response = await axios.get(`/object-storage/buckets/${cluster}/${label}`);
return response.data;
},
createBucket: async (data) => {
try {
// The Linode API actually wants 'region' but our client interface uses 'cluster'
// This inconsistency exists because of legacy Linode API compatibility
const requestData = {
label: data.label,
region: data.cluster, // Map cluster to region for API consistency
endpoint_type: data.endpoint_type,
acl: data.acl,
cors_enabled: data.cors_enabled
};
const response = await axios.post('/object-storage/buckets', requestData);
return response.data;
}
catch (error) {
console.error("Error creating bucket:", error?.message || error);
if (error?.response?.data) {
console.error("API error response:", JSON.stringify(error.response.data));
}
throw error;
}
},
deleteBucket: async (cluster, label) => {
await axios.delete(`/object-storage/buckets/${cluster}/${label}`);
},
getBucketAccess: async (cluster, label) => {
const response = await axios.get(`/object-storage/buckets/${cluster}/${label}/access`);
return response.data;
},
updateBucketAccess: async (cluster, label, data) => {
const response = await axios.post(`/object-storage/buckets/${cluster}/${label}/access`, data);
return response.data;
},
// Objects
getObjects: async (cluster, bucket, params) => {
const response = await axios.get(`/object-storage/buckets/${cluster}/${bucket}/object-list`, { params });
return response.data;
},
// New Object ACL method
updateObjectACL: async (cluster, bucket, name, data) => {
await axios.put(`/object-storage/buckets/${cluster}/${bucket}/object-acl`, {
name,
acl: data.acl
});
},
// New Object URL generation method
getObjectURL: async (cluster, bucket, data) => {
// Create a new object with all properties except 'name'
const { ...requestData } = data;
// According to OpenAPI spec, we need to include the object name in the path for some methods
const response = await axios.post(`/object-storage/buckets/${cluster}/${bucket}/object-url`, requestData);
return response.data;
},
// SSL/TLS certificates
getBucketCertificate: async (cluster, bucket) => {
const response = await axios.get(`/object-storage/buckets/${cluster}/${bucket}/ssl`);
return response.data;
},
uploadBucketCertificate: async (cluster, bucket, data) => {
const response = await axios.post(`/object-storage/buckets/${cluster}/${bucket}/ssl`, data);
return response.data;
},
deleteBucketCertificate: async (cluster, bucket) => {
await axios.delete(`/object-storage/buckets/${cluster}/${bucket}/ssl`);
},
// Access keys
getKeys: async (params) => {
const response = await axios.get('/object-storage/keys', { params });
return response.data;
},
getKey: async (id) => {
const response = await axios.get(`/object-storage/keys/${id}`);
return response.data;
},
createKey: async (data) => {
const response = await axios.post('/object-storage/keys', data);
return response.data;
},
updateKey: async (id, data) => {
const response = await axios.put(`/object-storage/keys/${id}`, data);
return response.data;
},
deleteKey: async (id) => {
await axios.delete(`/object-storage/keys/${id}`);
},
// Default bucket access
getDefaultBucketAccess: async () => {
const response = await axios.get('/object-storage/bucket-access');
return response.data;
},
updateDefaultBucketAccess: async (data) => {
const response = await axios.put('/object-storage/bucket-access', data);
return response.data;
},
// New Transfer statistics method
getTransferStats: async () => {
const response = await axios.get('/object-storage/transfer');
return response.data;
},
// New Object Storage types method
getTypes: async () => {
const response = await axios.get('/object-storage/types');
return response.data.data;
},
// Cancellation
cancelObjectStorage: async () => {
await axios.post('/object-storage/cancel');
}
};
}
//# sourceMappingURL=objectStorage.js.map