# ===============================================
# WEBHOOKS
# ===============================================

extend type Query {
  hooks: [Hook]

  hookById(
    id: UUID!
  ): Hook
}

extend type Mutation {
  createHook(
    name: String!
    events: [String]!
    url: String!
    includeMetadata: Boolean!
    includeContent: Boolean!
    acceptUntrusted: Boolean!
    authHeader: String
  ): HookCreateResponse

  updateHook(
    id: UUID!
    patch: HookUpdateInput!
  ): DefaultResponse

  deleteHook (
    id: UUID!
  ): DefaultResponse
}

# -----------------------------------------------
# TYPES
# -----------------------------------------------

type Hook {
  id: UUID
  name: String
  events: [String]
  url: String
  includeMetadata: Boolean
  includeContent: Boolean
  acceptUntrusted: Boolean
  authHeader: String
  state: HookState
  lastErrorMessage: String
}

input HookUpdateInput {
  name: String
  events: [String]
  url: String
  includeMetadata: Boolean
  includeContent: Boolean
  acceptUntrusted: Boolean
  authHeader: String
}

enum HookState {
  pending
  error
  success
}

type HookCreateResponse {
  operation: Operation
  hook: Hook
}