# -----------------------------------------------
# !!! THIS FILE WAS GENERATED BY TYPE-GRAPHQL !!!
# !!!   DO NOT MODIFY THIS FILE BY YOURSELF   !!!
# -----------------------------------------------

type Agent {
  did: String!
  directMessageLanguage: String
  perspective: Perspective
}

type AgentSignature {
  publicKey: String!
  signature: String!
}

type AgentStatus {
  did: String
  didDocument: String
  error: String
  isInitialized: Boolean!
  isUnlocked: Boolean!
}

type Apps {
  auth: AuthInfo!
  requestId: String!
  revoked: Boolean
  token: String!
}

type AuthInfo {
  appDesc: String!
  appIconPath: String
  appName: String!
  appUrl: String!
  capabilities: [Capability!]!
}

input AuthInfoInput {
  appDesc: String!
  appDomain: String!
  appIconPath: String
  appName: String!
  appUrl: String
  capabilities: [CapabilityInput!]
}

type Capability {
  can: [String!]!
  with: Resource!
}

input CapabilityInput {
  can: [String!]!
  with: ResourceInput!
}

# The javascript `Date` as string. Type represents date and time as the ISO Date string.
scalar DateTime

type EntanglementProof {
  deviceKey: String!
  deviceKeySignedByDid: String!
  deviceKeyType: String!
  did: String!
  didSignedByDeviceKey: String
  didSigningKeyId: String!
}

input EntanglementProofInput {
  deviceKey: String!
  deviceKeySignedByDid: String!
  deviceKeyType: String!
  did: String!
  didSignedByDeviceKey: String!
  didSigningKeyId: String!
}

type ExceptionInfo {
  addon: String
  message: String!
  title: String!
  type: Float!
}

type ExpressionProof {
  invalid: Boolean
  key: String
  signature: String
  valid: Boolean
}

input ExpressionProofInput {
  invalid: Boolean
  key: String
  signature: String
  valid: Boolean
}

type ExpressionRendered {
  author: String!
  data: String!
  icon: Icon!
  language: LanguageRef!
  proof: ExpressionProof!
  timestamp: String!
}

type Icon {
  code: String!
}

input InteractionCall {
  name: String!
  parametersStringified: String!
}

type InteractionMeta {
  label: String!
  name: String!
  parameters: [InteractionParameter!]!
}

type InteractionParameter {
  name: String!
  type: String!
}

type LanguageHandle {
  address: String!
  constructorIcon: Icon
  icon: Icon
  name: String!
  settings: String
  settingsIcon: Icon
}

type LanguageMeta {
  address: String!
  author: String!
  description: String
  name: String!
  possibleTemplateParams: [String!]
  sourceCodeLink: String
  templateAppliedParams: String
  templateSourceLanguageAddress: String
  templated: Boolean
}

input LanguageMetaInput {
  description: String = ""
  name: String!
  possibleTemplateParams: [String!]
  sourceCodeLink: String
}

type LanguageRef {
  address: String!
  name: String!
}

type Link {
  predicate: String
  source: String!
  target: String!
}

type LinkExpression {
  author: String!
  data: Link!
  proof: ExpressionProof!
  status: String
  timestamp: String!
}

input LinkExpressionInput {
  author: String!
  data: LinkInput!
  proof: ExpressionProofInput!
  status: String = "shared"
  timestamp: String!
}

type LinkExpressionMutations {
  additions: [LinkExpression!]!
  removals: [LinkExpression!]!
}

type LinkExpressionUpdated {
  newLink: LinkExpression!
  oldLink: LinkExpression!
}

input LinkInput {
  predicate: String
  source: String!
  target: String!
}

input LinkMutations {
  additions: [LinkInput!]!
  removals: [LinkExpressionInput!]!
}

input LinkQuery {
  fromDate: DateTime
  limit: Float
  predicate: String
  source: String
  target: String
  untilDate: DateTime
}

type Mutation {
  addTrustedAgents(agents: [String!]!): [String!]!
  agentAddEntanglementProofs(proofs: [EntanglementProofInput!]!): [EntanglementProof!]!
  agentDeleteEntanglementProofs(proofs: [EntanglementProofInput!]!): [EntanglementProof!]!
  agentEntanglementProofPreFlight(deviceKey: String!, deviceKeyType: String!): EntanglementProof!
  agentGenerate(passphrase: String!): AgentStatus!
  agentGenerateJwt(rand: String!, requestId: String!): String!
  agentImport(did: String!, didDocument: String!, keystore: String!, passphrase: String!): AgentStatus!
  agentLock(passphrase: String!): AgentStatus!
  agentPermitCapability(auth: String!): String!
  agentRemoveApp(requestId: String!): [Apps!]!
  agentRequestCapability(authInfo: AuthInfoInput!): String!
  agentRevokeToken(requestId: String!): [Apps!]!
  agentSignMessage(message: String!): AgentSignature!
  agentUnlock(holochain: Boolean!, passphrase: String!): AgentStatus!
  agentUpdateDirectMessageLanguage(directMessageLanguage: String!): Agent!
  agentUpdatePublicPerspective(perspective: PerspectiveInput!): Agent!
  deleteTrustedAgents(agents: [String!]!): [String!]!
  expressionCreate(content: String!, languageAddress: String!): String!
  expressionInteract(interactionCall: InteractionCall!, url: String!): String
  languageApplyTemplateAndPublish(sourceLanguageHash: String!, templateData: String!): LanguageRef!
  languagePublish(languageMeta: LanguageMetaInput!, languagePath: String!): LanguageMeta!
  languageRemove(address: String!): Boolean!
  languageWriteSettings(languageAddress: String!, settings: String!): Boolean!
  neighbourhoodJoinFromUrl(url: String!): PerspectiveHandle!
  neighbourhoodPublishFromPerspective(linkLanguage: String!, meta: PerspectiveInput!, perspectiveUUID: String!): String!
  neighbourhoodSendBroadcast(payload: PerspectiveInput!, perspectiveUUID: String!): Boolean!
  neighbourhoodSendBroadcastU(payload: PerspectiveUnsignedInput!, perspectiveUUID: String!): Boolean!
  neighbourhoodSendSignal(payload: PerspectiveInput!, perspectiveUUID: String!, remoteAgentDid: String!): Boolean!
  neighbourhoodSendSignalU(payload: PerspectiveUnsignedInput!, perspectiveUUID: String!, remoteAgentDid: String!): Boolean!
  neighbourhoodSetOnlineStatus(perspectiveUUID: String!, status: PerspectiveInput!): Boolean!
  neighbourhoodSetOnlineStatusU(perspectiveUUID: String!, status: PerspectiveUnsignedInput!): Boolean!
  perspectiveAdd(name: String!): PerspectiveHandle!
  perspectiveAddLink(link: LinkInput!, status: String = "shared", uuid: String!): LinkExpression!
  perspectiveAddLinkExpression(link: LinkExpressionInput!, status: String, uuid: String!): LinkExpression!
  perspectiveAddLinks(links: [LinkInput!]!, status: String, uuid: String!): [LinkExpression!]!
  perspectiveLinkMutations(mutations: LinkMutations!, status: String, uuid: String!): LinkExpressionMutations!
  perspectivePublishSnapshot(uuid: String!): String
  perspectiveRemove(uuid: String!): Boolean!
  perspectiveRemoveLink(link: LinkExpressionInput!, uuid: String!): Boolean!
  perspectiveRemoveLinks(links: [LinkExpressionInput!]!, uuid: String!): [LinkExpression!]!
  perspectiveUpdate(name: String!, uuid: String!): PerspectiveHandle
  perspectiveUpdateLink(newLink: LinkInput!, oldLink: LinkExpressionInput!, uuid: String!): LinkExpression!
  runtimeAddFriends(dids: [String!]!): [String!]!
  runtimeAddKnownLinkLanguageTemplates(addresses: [String!]!): [String!]!
  runtimeFriendSendMessage(did: String!, message: PerspectiveInput!): Boolean!
  runtimeHcAddAgentInfos(agentInfos: String!): Boolean!
  runtimeOpenLink(url: String!): Boolean!
  runtimeQuit: Boolean!
  runtimeRemoveFriends(dids: [String!]!): [String!]!
  runtimeRemoveKnownLinkLanguageTemplates(addresses: [String!]!): [String!]!
  runtimeSetStatus(status: PerspectiveInput!): Boolean!
}

type Neighbourhood {
  linkLanguage: String!
  meta: Perspective!
}

type NeighbourhoodExpression {
  author: String!
  data: Neighbourhood!
  proof: ExpressionProof!
  timestamp: String!
}

type OnlineAgent {
  did: String!
  status: PerspectiveExpression!
}

type Perspective {
  links: [LinkExpression!]!
}

type PerspectiveExpression {
  author: String!
  data: Perspective!
  proof: ExpressionProof!
  timestamp: String!
}

type PerspectiveHandle {
  name: String!
  neighbourhood: NeighbourhoodExpression
  sharedUrl: String
  state: String!
  uuid: String!
}

input PerspectiveInput {
  links: [LinkExpressionInput!]!
}

input PerspectiveUnsignedInput {
  links: [LinkInput!] = []
}

type Query {
  agent: Agent!
  agentByDID(did: String!): Agent
  agentGetApps: [Apps!]!
  agentGetEntanglementProofs: [EntanglementProof!]!
  agentIsLocked: Boolean!
  agentStatus: AgentStatus!
  expression(url: String!): ExpressionRendered
  expressionInteractions(url: String!): [InteractionMeta!]!
  expressionMany(urls: [String!]!): [ExpressionRendered]!
  expressionRaw(url: String!): String
  getTrustedAgents: [String!]!
  language(address: String!): LanguageHandle
  languageMeta(address: String!): LanguageMeta!
  languageSource(address: String!): String!
  languages(filter: String): [LanguageHandle!]!
  neighbourhoodHasTelepresenceAdapter(perspectiveUUID: String!): Boolean!
  neighbourhoodOnlineAgents(perspectiveUUID: String!): [OnlineAgent!]!
  neighbourhoodOtherAgents(perspectiveUUID: String!): [String!]!
  perspective(uuid: String!): PerspectiveHandle
  perspectiveQueryLinks(query: LinkQuery!, uuid: String!): [LinkExpression!]
  perspectiveQueryProlog(query: String!, uuid: String!): String!
  perspectiveSnapshot(uuid: String!): Perspective
  perspectives: [PerspectiveHandle!]!
  runtimeFriendStatus(did: String!): PerspectiveExpression
  runtimeFriends: [String!]!
  runtimeHcAgentInfos: String!
  runtimeInfo: RuntimeInfo!
  runtimeKnownLinkLanguageTemplates: [String!]!
  runtimeMessageInbox(filter: String): [PerspectiveExpression!]!
  runtimeMessageOutbox(filter: String): [SentMessage!]!
  runtimeVerifyStringSignedByDid(data: String!, did: String!, didSigningKeyId: String!, signedData: String!): Boolean!
}

type Resource {
  domain: String!
  pointers: [String!]!
}

input ResourceInput {
  domain: String!
  pointers: [String!]!
}

type RuntimeInfo {
  ad4mExecutorVersion: String!
  isInitialized: Boolean!
  isUnlocked: Boolean!
}

type SentMessage {
  message: PerspectiveExpression!
  recipient: String!
}

type Subscription {
  agentAppsChanged: [Apps!]
  agentStatusChanged: AgentStatus
  agentUpdated: Agent
  exceptionOccurred: ExceptionInfo
  neighbourhoodSignal(perspectiveUUID: String!): PerspectiveExpression
  perspectiveAdded: PerspectiveHandle
  perspectiveLinkAdded(uuid: String!): LinkExpression
  perspectiveLinkRemoved(uuid: String!): LinkExpression
  perspectiveLinkUpdated(uuid: String!): LinkExpressionUpdated
  perspectiveRemoved: String
  perspectiveSyncStateChange(uuid: String!): String!
  perspectiveUpdated: PerspectiveHandle
  runtimeMessageReceived: PerspectiveExpression
}
