- Add comprehensive database migrations (001-024) for schema evolution - Enhance API schema with expanded type definitions and resolvers - Add new middleware: audit logging, rate limiting, MFA enforcement, security, tenant auth - Implement new services: AI optimization, billing, blockchain, compliance, marketplace - Add adapter layer for cloud integrations (Cloudflare, Kubernetes, Proxmox, storage) - Update Crossplane provider with enhanced VM management capabilities - Add comprehensive test suite for API endpoints and services - Update frontend components with improved GraphQL subscriptions and real-time updates - Enhance security configurations and headers (CSP, CORS, etc.) - Update documentation and configuration files - Add new CI/CD workflows and validation scripts - Implement design system improvements and UI enhancements
3.2 KiB
3.2 KiB
Sankofa Phoenix API Contracts
This document defines the GraphQL API contracts for the Sankofa Phoenix platform. This serves as the contract between frontend and backend teams during parallel development.
Last Updated: 2024
Version: 1.0.0
GraphQL Endpoint
- Development:
http://localhost:4000/graphql - Production:
https://api.sankofa.nexus/graphql
Authentication
All queries and mutations (except login) require authentication via JWT token:
Authorization: Bearer <token>
Core Types
Resource
type Resource {
id: ID!
name: String!
type: ResourceType!
status: ResourceStatus!
site: Site!
metadata: JSON
createdAt: DateTime!
updatedAt: DateTime!
}
Site
type Site {
id: ID!
name: String!
region: String!
status: SiteStatus!
resources: [Resource!]!
createdAt: DateTime!
updatedAt: DateTime!
}
ResourceInventoryItem
type ResourceInventoryItem {
id: ID!
resourceType: String!
provider: ResourceProvider!
providerId: String!
providerResourceId: String
name: String!
region: String
site: Site
metadata: JSON
tags: [String!]!
discoveredAt: DateTime!
lastSyncedAt: DateTime!
createdAt: DateTime!
updatedAt: DateTime!
}
Queries
Get Resources
query GetResources($filter: ResourceFilter) {
resources(filter: $filter) {
id
name
type
status
site {
id
name
region
}
createdAt
updatedAt
}
}
Get Resource Inventory
query GetResourceInventory($filter: ResourceInventoryFilter) {
resourceInventory(filter: $filter) {
id
name
resourceType
provider
region
tags
metadata
lastSyncedAt
}
}
Get Sites
query GetSites {
sites {
id
name
region
status
resources {
id
name
type
}
}
}
Mutations
Login
mutation Login($email: String!, $password: String!) {
login(email: $email, password: $password) {
token
user {
id
email
name
role
}
}
}
Create Resource
mutation CreateResource($input: CreateResourceInput!) {
createResource(input: $input) {
id
name
type
status
site {
id
name
}
}
}
Subscriptions
Resource Updates
subscription ResourceUpdated($id: ID!) {
resourceUpdated(id: $id) {
id
name
status
updatedAt
}
}
Error Codes
UNAUTHENTICATED: Authentication requiredFORBIDDEN: Insufficient permissionsNOT_FOUND: Resource not foundVALIDATION_ERROR: Input validation failedSERVER_ERROR: Internal server error
Rate Limiting
- 100 requests per minute per IP
- 1000 requests per hour per authenticated user
Mock Data
For frontend development, use the following mock responses structure:
// Mock Resource
{
id: "uuid",
name: "example-resource",
type: "VM",
status: "RUNNING",
site: {
id: "uuid",
name: "US East Primary",
region: "us-east-1"
},
createdAt: "2024-01-01T00:00:00Z",
updatedAt: "2024-01-01T00:00:00Z"
}
See examples.md for more detailed examples.