GraphQL Schema Reference

In addition to using the Vendia Share CLI, developers can also access all the same functionality directly through the Vendia Share API, a GraphQL-based HTTPS API with the URL https://share.services.vendia.net/share. A copy of the schema is documented below, but developers are encouraged to dynamically retrieve the schema through introspection queries to ensure its up to date.

Note that calls made to the Vendia Share API must be sigv4 signed with AWS credentials assigned to the Vendia user making the request.

Vendia Share GraphQL Schema Reference

enum CSPEnum {
  AWS
  AZURE
  GCP
  IBM
  ORACLE
  TENCENT
  ALICLOUD
}

enum StatusEnum {
  PENDING_REGISTRATION
  DEPLOYING
  RUNNING
  ADDING
  UPDATING
  ERROR
  UNKNOWN
  DESTROYING
  DESTROYED
  STOPPED
}

enum UniSkuEnum {
    SHARE,
    VDL
}

enum ActionEnum {
  ALL
  USER_ALL
  USER_GET
  USER_CREATE
  USER_DELETE
  USER_SET_EMAIL
  USER_SET_ROLE
  USER_DELETE_ROLE
  USER_INVITE
  GROUP_ALL
  GROUP_GET
  GROUP_CREATE
  GROUP_DELETE
  GROUP_ADD_USER
  GROUP_REMOVE_USER
  UNI_ALL
  UNI_CREATE
  UNI_DELETE
  UNI_RESET
  UNI_JOIN
  UNI_INVITE
  UNI_DELETE_NODE
  UNI_GET
  UNI_QUERY
  UNI_MUTATE
}

type Query {
  getUser(userId: String, role: String): User!
  getUni(uni: String!): Uni!
  getNode(uni: String!, node: String!): Node!
  listUnis(userId: String, limit: Int, nextToken: String, filter: StatusEnum): ListUnisConnection!
}

type Mutation {
  register(input: UniInput!, asRole: String): String!
  destroy(uni: String!, asRole: String): String!
  reset(uni: String!, logs: Boolean, asRole: String): String!
  invite(uni: String!, userId: String!, expiration: String, nodeLimit: Int, asRole: String): Invite!
  join(uni: String!, token: String!, input: NodeInput!, asRole: String): String
  createUser(userId: String!, asRole: String): User
  setUserEmail(userId: String, email: String!, asRole: String): String
  setUserRole(userId: String, roleName: String!, capabilities: [CapabilitiesInput!]!, asRole: String): String
  deleteUserRole(userId: String, roleName: String!, asRole: String): String
  deleteUser(userId: String, asRole: String): String
}

type User {
  userId: String!
  roles: [Role!]
  limits: [Limit!]
}

type Limit {
  name: String!
  value: Int!
}

type Account {
  csp: CSPEnum!
  accountId: String!
  org: String
}

type ListUnisConnection {
  unis: [Uni!]
  nextToken: String
  error: String
}

type ListUsersConnection {
  users: [User!]
  nextToken: String
  error: String
}

type Uni {
  name: String!
  sku: UniSkuEnum
  status: StatusEnum!
  nodes: [Node!]
  schema: String!
  initState: String
  created: String
  error: String
}

type Node {
  name: String!
  userId: String!
  description: String
  status: StatusEnum!
  region: String
  vendiaAccount: Account
  resources: NodeResources
}

type Invite {
  uni: String!
  userId: String!
  expiration: String
  token: String!
}

type NodeResources {
  graphqlApi: GraphqlApiInfo!
  aws_AsyncIngressQueue: AwsSqsInfo
  aws_FileStorage: AwsS3Info
  aws_BlockNotifications: AwsSnsInfo
  aws_Cognito: AwsCognitoInfo
}

type AwsCognitoInfo {
  userPoolId: String
  userPoolClientId: String
  identityPoolId: String
}

type AwsSqsInfo {
  url: String!
  name: String!
}

type AwsSnsInfo {
  arn: String!
  name: String!
}

type AwsS3Info {
  arn: String!
  name: String!
}

type GraphqlApiInfo {
  apiKey: String!
  httpsUrl: String!
  websocketUrl: String!
}

input UniInput {
  name: String!
  schema: String
  sku: UniSkuEnum
  initState: String
  nodes: [NodeInput!]!
}

input NodeInput {
  name: String!
  description: String
  userId: String!
  region: String
  settings: SettingsInput
}

type Capability {
  action: ActionEnum!
  resources: [String!]!
}

type Role {
  name: String!
  capabilities: [Capability!]!
}

input CapabilitiesInput {
  action: String!
  resources: [String!]!
}

input SettingsInput {
  blockReportWebhooks: [String!]
  blockReportEmails: [String!]
  deadLetterWebhooks: [String!]
  deadLetterEmails: [String!]
  aws_blockReportSQSQueues: [String!]
  aws_blockReportLambdas: [String!]
  aws_deadLetterSQSQueues: [String!]
  aws_deadLetterLambdas: [String!]
  aws_S3ReadAccounts: [String!]
  aws_SQSIngressAccounts: [String!]
  aws_LambdaIngressAccounts: [String!]
  apiSettings: APISettings
}

input APISettings {
  auth: APIAuth
  apiKeys: [APIKey!]
}

input APIAuth {
  authorizerType: String!
  authorizerArn: String
  allowedAccounts: [String!]
}

input APIKey {
  value: String!
  usagePlan: UsagePlan
}

input UsagePlan {
  quotaSettings: QuotaSettings
  throttleSettings: ThrottleSettings
}

input QuotaSettings {
  limit: Int!
  offset: Int!
  period: String!
}

input ThrottleSettings {
  burstLimit: Int!
  rateLimit: Int!
}