GraphQL Schema
schema.gql
enum ApiKeyPermissionEnum {
READ_ONLY
WRITE_ONLY
READ_WRITE
}
type ComponentEventRecord {
id: UUID!
name: String!
parameters: JSON
version: String
environment: String
subcomponentEvents(event: EventFilter, runtime: RuntimeFilter, limit: Int! = 20, offset: Int! = 0): [SubcomponentEventRecord!]!
runtime: RuntimeRecord!
inputs: [IORecord!]!
outputs: [IORecord!]!
feedback: [IORecord!]!
metadata: [MetadataRecord!]!
}
type CreateApiKeyResponse {
apiKey: String!
id: UUID!
}
type CreateApiKeyResult implements GQLResult {
success: Boolean!
apiKey: CreateApiKeyResponse
error: [ValidationError!]
}
"""
Implement the DateTime<Utc> scalar
The input/output is a string in RFC3339 format.
"""
scalar DateTime
input DateTimeFilter {
lt: DateTime
gt: DateTime
isNull: Boolean
}
type DeletionResult implements GQLResult {
success: Boolean!
deleted: Boolean
error: [ValidationError!]
}
input EventFilter {
id: UuidFilter
name: StringFilter
version: StringFilter
environment: StringFilter
}
interface GQLResult {
success: Boolean!
error: [ValidationError!]
}
type IORecord {
id: UUID!
fieldName: String!
fieldValue: JSON!
}
"""
A scalar that can represent any JSON value.
"""
scalar JSON
type MetadataRecord {
id: UUID!
fieldName: String!
fieldValue: String!
}
type Mutation {
user: UserMutation!
workspace: WorkspaceMutation!
}
"""
ISO 8601 combined date and time without timezone.
# Examples
* `2015-07-01T08:59:60.123`,
"""
scalar NaiveDateTime
type Query {
ping: String!
user(id: UUID, username: String): [User!]!
workspace(id: UUID, name: String, archived: Boolean): [Workspace!]!
me: User!
systemEvents(workspaceId: UUID, event: EventFilter, runtime: RuntimeFilter, limit: Int! = 20, offset: Int! = 0): [SystemEventRecord!]!
}
input RuntimeFilter {
startTime: DateTimeFilter
endTime: DateTimeFilter
errorType: StringFilter
errorContent: StringFilter
}
type RuntimeRecord {
id: UUID!
startTime: NaiveDateTime!
endTime: NaiveDateTime!
errorType: String
errorContent: String
}
type ServiceApiKey {
id: UUID!
workspaceId: UUID!
name: String!
keyPreview: String!
permissions: ApiKeyPermissionEnum!
expiresAt: DateTime
}
type ServiceApiKeyResult implements GQLResult {
success: Boolean!
serviceApiKey: ServiceApiKey
error: [ValidationError!]
}
input StringFilter {
eq: String
ne: String
in: [String!]
nin: [String!]
like: String
ilike: String
isNull: Boolean
}
type SubcomponentEventRecord {
id: UUID!
name: String!
parameters: JSON
version: String
environment: String
runtime: RuntimeRecord!
inputs: [IORecord!]!
outputs: [IORecord!]!
feedback: [IORecord!]!
metadata: [MetadataRecord!]!
}
type SubsystemEventRecord {
id: UUID!
name: String!
parameters: JSON
version: String
environment: String
componentEvents(event: EventFilter, runtime: RuntimeFilter, limit: Int! = 20, offset: Int! = 0): [ComponentEventRecord!]!
runtime: RuntimeRecord!
inputs: [IORecord!]!
outputs: [IORecord!]!
feedback: [IORecord!]!
metadata: [MetadataRecord!]!
}
type SystemEventRecord {
id: UUID!
name: String!
parameters: JSON
version: String
environment: String
subsystemEvents(event: EventFilter, runtime: RuntimeFilter, limit: Int! = 20, offset: Int! = 0): [SubsystemEventRecord!]!
runtime: RuntimeRecord!
inputs: [IORecord!]!
outputs: [IORecord!]!
feedback: [IORecord!]!
metadata: [MetadataRecord!]!
}
"""
A UUID is a unique 128-bit number, stored as 16 octets. UUIDs are parsed as
Strings within GraphQL. UUIDs are used to assign unique identifiers to
entities without requiring a central allocating authority.
# References
* [Wikipedia: Universally Unique Identifier](http://en.wikipedia.org/wiki/Universally_unique_identifier)
* [RFC4122: A Universally Unique IDentifier (UUID) URN Namespace](http://tools.ietf.org/html/rfc4122)
"""
scalar UUID
type User {
id: UUID!
username: String!
displayName: String
status: UserStatusEnum!
isSysadmin: Boolean!
isAdmin: Boolean!
workspaces(workspaceId: UUID, workspaceName: String): [Workspace!]!
userApiKeys: [UserApiKey!]!
}
type UserApiKey {
id: UUID!
userId: UUID!
name: String!
keyPreview: String!
expiresAt: DateTime
}
input UserChangePasswordInput {
currentPassword: String!
newPassword: String!
}
input UserInput {
username: String!
password: String!
displayName: String
isSysadmin: Boolean!
isAdmin: Boolean!
}
type UserMutation {
create(userData: UserInput!): UserResult!
update(userId: UUID!, data: UserUpdate!): UserResult!
changePassword(userId: UUID!, data: UserChangePasswordInput!): UserResult!
delete(id: UUID!): DeletionResult!
createUserApiKey(name: String!, durationDays: Int): CreateApiKeyResult!
deleteUserApiKey(apiKeyId: UUID!): DeletionResult!
}
type UserResult implements GQLResult {
success: Boolean!
user: User
error: [ValidationError!]
}
enum UserStatusEnum {
ACTIVE
SUSPENDED
}
input UserUpdate {
displayName: String
status: UserStatusEnum
isAdmin: Boolean
}
input UuidFilter {
eq: UUID
ne: UUID
in: [UUID!]
nin: [UUID!]
isNull: Boolean
}
type ValidationError {
field: String!
message: String!
}
type Workspace {
id: UUID!
name: String!
description: String
archived: Boolean!
createdAt: DateTime!
updatedAt: DateTime!
users(id: UUID, username: String): [WorkspaceUser!]!
serviceApiKeys: [ServiceApiKey!]!
}
input WorkspaceCreate {
name: String!
description: String
}
type WorkspaceMutation {
create(adminUserId: UUID, workspaceData: WorkspaceCreate!): WorkspaceResult!
delete(workspaceId: UUID!): DeletionResult!
addUser(workspaceUser: WorkspaceUserCreateInput!): WorkspaceUserResult!
removeUser(workspaceId: UUID!, userId: UUID!): DeletionResult!
changeWorkspaceUserRole(workspaceId: UUID!, userId: UUID!, newRole: WorkspaceRoleEnum!): WorkspaceUserResult!
createServiceApiKey(workspaceId: UUID!, name: String!, permission: ApiKeyPermissionEnum!, durationDays: Int): CreateApiKeyResult!
deleteServiceApiKey(workspaceId: UUID!, apiKeyId: UUID!): DeletionResult!
}
type WorkspaceResult implements GQLResult {
success: Boolean!
workspace: Workspace
error: [ValidationError!]
}
enum WorkspaceRoleEnum {
USER
MANAGER
ADMIN
}
type WorkspaceUser {
id: UUID!
userId: UUID!
workspaceId: UUID!
role: WorkspaceRoleEnum!
user: User!
workspace: Workspace!
}
input WorkspaceUserCreateInput {
workspaceId: UUID!
userId: UUID!
role: WorkspaceRoleEnum!
}
type WorkspaceUserResult implements GQLResult {
success: Boolean!
workspaceUser: WorkspaceUser
error: [ValidationError!]
}
directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
directive @specifiedBy(url: String!) on SCALAR
schema {
query: Query
mutation: Mutation
}