# ------------------------------------------------------
# THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
# ------------------------------------------------------

type ChatMessage {
  attachments: [String!]
  content: String!
  createdAt: DateTime!
  params: JSON
  role: String!
}

type Copilot {
  """Get the session list of actions in the workspace"""
  actions: [String!]!

  """Get the session list of chats in the workspace"""
  chats: [String!]!
  histories(docId: String, options: QueryChatHistoriesInput): [CopilotHistories!]!

  """Get the quota of the user in the workspace"""
  quota: CopilotQuota!
  workspaceId: ID
}

type CopilotHistories {
  """An mark identifying which view to use to display the session"""
  action: String
  createdAt: DateTime!
  messages: [ChatMessage!]!
  sessionId: String!

  """The number of tokens used in the session"""
  tokens: Int!
}

type CopilotQuota {
  limit: SafeInt
  used: SafeInt!
}

input CreateChatMessageInput {
  attachments: [String!]
  blobs: [Upload!]
  content: String
  params: JSON
  sessionId: String!
}

input CreateChatSessionInput {
  docId: String!

  """The prompt name to use for the session"""
  promptName: String!
  workspaceId: String!
}

input CreateCheckoutSessionInput {
  coupon: String
  idempotencyKey: String!
  plan: SubscriptionPlan = Pro
  recurring: SubscriptionRecurring = Yearly
  successCallbackLink: String
}

type CredentialsRequirementType {
  password: PasswordLimitsType!
}

"""
A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format.
"""
scalar DateTime

type DeleteAccount {
  success: Boolean!
}

input DeleteSessionInput {
  docId: String!
  sessionIds: [String!]!
  workspaceId: String!
}

type DocHistoryType {
  id: String!
  timestamp: DateTime!
  workspaceId: String!
}

enum EarlyAccessType {
  AI
  App
}

"""The type of workspace feature"""
enum FeatureType {
  AIEarlyAccess
  Admin
  Copilot
  EarlyAccess
  UnlimitedCopilot
  UnlimitedWorkspace
}

type HumanReadableQuotaType {
  blobLimit: String!
  copilotActionLimit: String
  historyPeriod: String!
  memberLimit: String!
  name: String!
  storageQuota: String!
}

type InvitationType {
  """Invitee information"""
  invitee: UserType!

  """User information"""
  user: UserType!

  """Workspace information"""
  workspace: InvitationWorkspaceType!
}

type InvitationWorkspaceType {
  """Base64 encoded avatar"""
  avatar: String!
  id: ID!

  """Workspace name"""
  name: String!
}

type InviteUserType {
  """User accepted"""
  accepted: Boolean!

  """User avatar url"""
  avatarUrl: String

  """User email verified"""
  createdAt: DateTime @deprecated(reason: "useless")

  """User email"""
  email: String

  """User email verified"""
  emailVerified: Boolean

  """User password has been set"""
  hasPassword: Boolean
  id: ID!

  """Invite id"""
  inviteId: String!

  """User name"""
  name: String

  """User permission in workspace"""
  permission: Permission!
}

enum InvoiceStatus {
  Draft
  Open
  Paid
  Uncollectible
  Void
}

"""
The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
"""
scalar JSON @specifiedBy(url: "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf")

type LimitedUserType {
  """User email"""
  email: String!

  """User password has been set"""
  hasPassword: Boolean
}

type Mutation {
  acceptInviteById(inviteId: String!, sendAcceptMail: Boolean, workspaceId: String!): Boolean!
  addAdminister(email: String!): Boolean!
  addToEarlyAccess(email: String!, type: EarlyAccessType!): Int!
  addWorkspaceFeature(feature: FeatureType!, workspaceId: String!): Int!
  cancelSubscription(idempotencyKey: String!, plan: SubscriptionPlan = Pro): UserSubscription!
  changeEmail(email: String!, token: String!): UserType!
  changePassword(newPassword: String!, token: String!): UserType!

  """Cleanup sessions"""
  cleanupCopilotSession(options: DeleteSessionInput!): String!

  """Create a subscription checkout link of stripe"""
  createCheckoutSession(input: CreateCheckoutSessionInput!): String!

  """Create a chat message"""
  createCopilotMessage(options: CreateChatMessageInput!): String!

  """Create a chat session"""
  createCopilotSession(options: CreateChatSessionInput!): String!

  """Create a stripe customer portal to manage payment methods"""
  createCustomerPortal: String!

  """Create a new workspace"""
  createWorkspace(init: Upload): WorkspaceType!
  deleteAccount: DeleteAccount!
  deleteBlob(hash: String!, workspaceId: String!): Boolean!
  deleteWorkspace(id: String!): Boolean!
  invite(email: String!, permission: Permission!, sendInviteMail: Boolean, workspaceId: String!): String!
  leaveWorkspace(sendLeaveMail: Boolean, workspaceId: String!, workspaceName: String!): Boolean!
  publishPage(mode: PublicPageMode = Page, pageId: String!, workspaceId: String!): WorkspacePage!
  recoverDoc(guid: String!, timestamp: DateTime!, workspaceId: String!): DateTime!

  """Remove user avatar"""
  removeAvatar: RemoveAvatar!
  removeEarlyAccess(email: String!): Int!
  removeWorkspaceFeature(feature: FeatureType!, workspaceId: String!): Int!
  resumeSubscription(idempotencyKey: String!, plan: SubscriptionPlan = Pro): UserSubscription!
  revoke(userId: String!, workspaceId: String!): Boolean!
  revokePage(pageId: String!, workspaceId: String!): Boolean! @deprecated(reason: "use revokePublicPage")
  revokePublicPage(pageId: String!, workspaceId: String!): WorkspacePage!
  sendChangeEmail(callbackUrl: String!, email: String): Boolean!
  sendChangePasswordEmail(callbackUrl: String!, email: String): Boolean!
  sendSetPasswordEmail(callbackUrl: String!, email: String): Boolean!
  sendVerifyChangeEmail(callbackUrl: String!, email: String!, token: String!): Boolean!
  sendVerifyEmail(callbackUrl: String!): Boolean!
  setBlob(blob: Upload!, workspaceId: String!): String!
  setWorkspaceExperimentalFeature(enable: Boolean!, feature: FeatureType!, workspaceId: String!): Boolean!
  sharePage(pageId: String!, workspaceId: String!): Boolean! @deprecated(reason: "renamed to publishPage")
  updateProfile(input: UpdateUserInput!): UserType!
  updateSubscriptionRecurring(idempotencyKey: String!, plan: SubscriptionPlan = Pro, recurring: SubscriptionRecurring!): UserSubscription!

  """Update workspace"""
  updateWorkspace(input: UpdateWorkspaceInput!): WorkspaceType!

  """Upload user avatar"""
  uploadAvatar(avatar: Upload!): UserType!
  verifyEmail(token: String!): Boolean!
}

enum OAuthProviderType {
  GitHub
  Google
  OIDC
}

type PasswordLimitsType {
  maxLength: Int!
  minLength: Int!
}

"""User permission in workspace"""
enum Permission {
  Admin
  Owner
  Read
  Write
}

"""The mode which the public page default in"""
enum PublicPageMode {
  Edgeless
  Page
}

type Query {
  checkBlobSize(size: SafeInt!, workspaceId: String!): WorkspaceBlobSizes! @deprecated(reason: "no more needed")
  collectAllBlobSizes: WorkspaceBlobSizes! @deprecated(reason: "use `user.storageUsage` instead")

  """Get current user"""
  currentUser: UserType
  earlyAccessUsers: [UserType!]!

  """send workspace invitation"""
  getInviteInfo(inviteId: String!): InvitationType!

  """Get is owner of workspace"""
  isOwner(workspaceId: String!): Boolean!

  """List blobs of workspace"""
  listBlobs(workspaceId: String!): [String!]! @deprecated(reason: "use `workspace.blobs` instead")
  listWorkspaceFeatures(feature: FeatureType!): [WorkspaceType!]!
  prices: [SubscriptionPrice!]!

  """server config"""
  serverConfig: ServerConfigType!

  """Get user by email"""
  user(email: String!): UserOrLimitedUser

  """Get workspace by id"""
  workspace(id: String!): WorkspaceType!

  """Get all accessible workspaces for current user"""
  workspaces: [WorkspaceType!]!
}

input QueryChatHistoriesInput {
  action: Boolean
  limit: Int
  sessionId: String
  skip: Int
}

type QuotaQueryType {
  blobLimit: SafeInt!
  copilotActionLimit: SafeInt
  historyPeriod: SafeInt!
  humanReadable: HumanReadableQuotaType!
  memberLimit: SafeInt!
  name: String!
  storageQuota: SafeInt!
  usedSize: SafeInt!
}

type RemoveAvatar {
  success: Boolean!
}

"""
The `SafeInt` scalar type represents non-fractional signed whole numeric values that are considered safe as defined by the ECMAScript specification.
"""
scalar SafeInt @specifiedBy(url: "https://www.ecma-international.org/ecma-262/#sec-number.issafeinteger")

type ServerConfigType {
  """server base url"""
  baseUrl: String!

  """credentials requirement"""
  credentialsRequirement: CredentialsRequirementType!

  """enable telemetry"""
  enableTelemetry: Boolean!

  """enabled server features"""
  features: [ServerFeature!]!

  """server flavor"""
  flavor: String! @deprecated(reason: "use `features`")

  """server identical name could be shown as badge on user interface"""
  name: String!
  oauthProviders: [OAuthProviderType!]!

  """server type"""
  type: ServerDeploymentType!

  """server version"""
  version: String!
}

enum ServerDeploymentType {
  Affine
  Selfhosted
}

enum ServerFeature {
  Copilot
  OAuth
  Payment
}

enum SubscriptionPlan {
  AI
  Enterprise
  Free
  Pro
  SelfHosted
  Team
}

type SubscriptionPrice {
  amount: Int
  currency: String!
  plan: SubscriptionPlan!
  type: String!
  yearlyAmount: Int
}

enum SubscriptionRecurring {
  Monthly
  Yearly
}

enum SubscriptionStatus {
  Active
  Canceled
  Incomplete
  IncompleteExpired
  PastDue
  Paused
  Trialing
  Unpaid
}

input UpdateUserInput {
  """User name"""
  name: String
}

input UpdateWorkspaceInput {
  id: ID!

  """is Public workspace"""
  public: Boolean
}

"""The `Upload` scalar type represents a file upload."""
scalar Upload

type UserInvoice {
  amount: Int!
  createdAt: DateTime!
  currency: String!
  id: String!
  lastPaymentError: String
  link: String
  plan: SubscriptionPlan!
  reason: String!
  recurring: SubscriptionRecurring!
  status: InvoiceStatus!
  updatedAt: DateTime!
}

union UserOrLimitedUser = LimitedUserType | UserType

type UserSubscription {
  canceledAt: DateTime
  createdAt: DateTime!
  end: DateTime!
  id: String!
  nextBillAt: DateTime

  """
  The 'Free' plan just exists to be a placeholder and for the type convenience of frontend.
  There won't actually be a subscription with plan 'Free'
  """
  plan: SubscriptionPlan!
  recurring: SubscriptionRecurring!
  start: DateTime!
  status: SubscriptionStatus!
  trialEnd: DateTime
  trialStart: DateTime
  updatedAt: DateTime!
}

type UserType {
  """User avatar url"""
  avatarUrl: String
  copilot(workspaceId: String): Copilot!

  """User email verified"""
  createdAt: DateTime @deprecated(reason: "useless")

  """User email"""
  email: String!

  """User email verified"""
  emailVerified: Boolean!

  """Enabled features of a user"""
  features: [FeatureType!]!

  """User password has been set"""
  hasPassword: Boolean
  id: ID!

  """Get user invoice count"""
  invoiceCount: Int!
  invoices(skip: Int, take: Int = 8): [UserInvoice!]!

  """User name"""
  name: String!
  subscription(plan: SubscriptionPlan = Pro): UserSubscription @deprecated(reason: "use `UserType.subscriptions`")
  subscriptions: [UserSubscription!]!
  token: tokenType! @deprecated(reason: "use [/api/auth/authorize]")
}

type WorkspaceBlobSizes {
  size: SafeInt!
}

type WorkspacePage {
  id: String!
  mode: PublicPageMode!
  public: Boolean!
  workspaceId: String!
}

type WorkspaceType {
  """Available features of workspace"""
  availableFeatures: [FeatureType!]!

  """List blobs of workspace"""
  blobs: [String!]!

  """Blobs size of workspace"""
  blobsSize: Int!

  """Workspace created date"""
  createdAt: DateTime!

  """Enabled features of workspace"""
  features: [FeatureType!]!
  histories(before: DateTime, guid: String!, take: Int): [DocHistoryType!]!
  id: ID!

  """member count of workspace"""
  memberCount: Int!

  """Members of workspace"""
  members(skip: Int, take: Int): [InviteUserType!]!

  """Owner of workspace"""
  owner: UserType!

  """Permission of current signed in user in workspace"""
  permission: Permission!

  """is Public workspace"""
  public: Boolean!

  """Get public page of a workspace by page id."""
  publicPage(pageId: String!): WorkspacePage

  """Public pages of a workspace"""
  publicPages: [WorkspacePage!]!

  """quota of workspace"""
  quota: QuotaQueryType!

  """Shared pages of workspace"""
  sharedPages: [String!]! @deprecated(reason: "use WorkspaceType.publicPages")
}

type tokenType {
  refresh: String!
  sessionToken: String
  token: String!
}