@galaxyproject/galaxy-api-client
v25.1.0
Published
A client library for the Galaxy API
Readme
Galaxy API Client
A standalone client library for the Galaxy API, built using the type definitions from the main Galaxy client.
Installation
npm install @galaxyproject/galaxy-api-clientUsage
Basic Usage
import { createGalaxyApi } from "@galaxyproject/galaxy-api-client";
// Create an instance of the Galaxy API client with a specific base URL
const api = createGalaxyApi("https://usegalaxy.org");
// Alternatively, use the default (current origin)
// const api = createGalaxyApi();
// Example: Get a list of histories
const { data, error } = await api.GET("/api/histories");
if (error) {
console.error("Error fetching histories:", error);
} else {
console.log("Histories:", data);
}
// For backward compatibility
import { GalaxyApi } from "@galaxyproject/galaxy-api-client";
const legacyApi = GalaxyApi(); // Uses current originUsage with API Keys and Custom Headers
import { createGalaxyApi } from "@galaxyproject/galaxy-api-client";
// Create a client with API key authentication and custom headers
const api = createGalaxyApi({
baseUrl: "https://usegalaxy.org",
apiKey: "your-api-key-here",
headers: {
Accept: "application/json",
},
fetchOptions: {
credentials: "include", // Include cookies for CORS requests
cache: "no-cache", // Don't cache responses
},
});
// Now all requests will include the API key header and custom options
const { data, error } = await api.GET("/api/histories");Type Safety
This package provides TypeScript types for Galaxy API endpoints and models:
import { createGalaxyApi, type HistorySummary, type DatasetEntry } from "@galaxyproject/galaxy-api-client";
const api = createGalaxyApi();
// Type-safe API calls
const { data: histories } = await api.GET("/api/histories");
// histories is typed as HistorySummary[] | undefined
// You can use the types for your variables
const myHistory: HistorySummary = {
id: "123",
name: "My History",
// ...other required properties
};Examples
See more in src/example.ts that demonstrate how to use the client:
Basic Example
import { createGalaxyApi } from "@galaxyproject/galaxy-api-client";
// Create a client with a specific Galaxy instance
const api = createGalaxyApi("https://usegalaxy.org");
// Example: Get a list of tools
async function getTools() {
const { data, error } = await api.GET("/api/tools");
if (error) {
console.error("Error fetching tools:", error);
return [];
}
// Log tool count
console.log(`Found ${data.length} tools`);
return data;
}Notes
This package uses a symlink to reference API type definitions from the main Galaxy client while providing a standalone client implementation. This approach was chosen to:
- Minimize duplication of type definitions
- Ensure type definitions stay in sync with the main codebase
- Allow the client to work independently of Galaxy's internal utilities
Development
To work on this package:
Make changes to the API type definitions in the main Galaxy client
The type changes will automatically be available in this package via symlinks
Synchronize the version with Galaxy:
# Update the version in package.json from Galaxy's version.py npm run sync-versionBuild the library for distribution:
# Install dependencies npm install # Build the library npm run build # Watch mode for development npm run dev
Version Synchronization
This package maintains version parity with Galaxy to indicate API compatibility. The version number in package.json is derived from Galaxy's lib/galaxy/version.py file but formatted to comply with npm's semver requirements.
Important: npm does not allow republishing the same version, even for development versions. When making changes to the client API during development:
Manually increment the version before publishing:
# Example: Update from 25.0.0-dev.0 to 25.0.0-dev.1 npm version prerelease --preid=devOr edit the npm version directly in package.json:
{ "version": "25.0.0-dev.1" }
There's also a script to automate this process of syncing with galaxy version that we may want to use in other contexts, too?:
# Using npm script
npm run sync-versionThe script will:
- Read the version from Galaxy's
version.pyfile - Convert it to npm-compatible semver format
- Update the version in
package.jsonif different
Version synchronization should be performed before each release to ensure the client API version accurately reflects the Galaxy API version it supports.
Testing
The package includes a few vitest tests as a sanity check, but we could do a lot more here:
# Run tests
npm test
# Run tests with watch mode (during development)
npm run test:watchThe tests verify:
- Client creation with default and custom base URLs
- Basic API interaction with proper typing
- Error handling
