wapm-resolve-url 0.1.0

Package to resolve file URLs via GraphQL from wapm.io
Documentation
type APIToken {
  createdAt: DateTime!
  id: ID!
  identifier: String
  lastUsedAt: DateTime
  revokedAt: DateTime
  user: User!
}

type APITokenConnection {
  # Contains the nodes in this connection.
  edges: [APITokenEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `APIToken` and its cursor.
type APITokenEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: APIToken
}

input AcceptNamespaceCollaboratorInviteInput {
  clientMutationId: String
  inviteId: ID!
}

type AcceptNamespaceCollaboratorInvitePayload {
  clientMutationId: String
  namespaceCollaboratorInvite: NamespaceCollaboratorInvite!
}

input AcceptPackageCollaboratorInviteInput {
  clientMutationId: String
  inviteId: ID!
}

type AcceptPackageCollaboratorInvitePayload {
  clientMutationId: String
  packageCollaboratorInvite: PackageCollaboratorInvite!
}

input AcceptPackageTransferRequestInput {
  clientMutationId: String
  packageTransferRequestId: ID!
}

type AcceptPackageTransferRequestPayload {
  clientMutationId: String
  package: Package!
  packageTransferRequest: PackageTransferRequest!
}

type ActivityEvent implements Node {
  actorIcon: String!
  body: ActivityEventBody!
  createdAt: DateTime!

  # The ID of the object
  id: ID!
}

type ActivityEventBody {
  ranges: [NodeBodyRange!]!
  text: String!
}

type ActivityEventConnection {
  # Contains the nodes in this connection.
  edges: [ActivityEventEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `ActivityEvent` and its cursor.
type ActivityEventEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: ActivityEvent
}

input ArchivePackageInput {
  clientMutationId: String
  packageId: ID!
}

type ArchivePackagePayload {
  clientMutationId: String
  package: Package!
}

input ChangePackageVersionArchivedStatusInput {
  clientMutationId: String
  isArchived: Boolean
  packageVersionId: ID!
}

type ChangePackageVersionArchivedStatusPayload {
  clientMutationId: String
  packageVersion: PackageVersion!
}

input ChangeUserEmailInput {
  clientMutationId: String
  newEmail: String!
}

type ChangeUserEmailPayload {
  clientMutationId: String
  user: User!
}

input ChangeUserPasswordInput {
  clientMutationId: String
  password: String!

  # The token associated to change the password. If not existing it will use the request user by default
  token: String
}

type ChangeUserPasswordPayload {
  clientMutationId: String
  token: String
}

input ChangeUserUsernameInput {
  clientMutationId: String

  # The new user username
  username: String!
}

type ChangeUserUsernamePayload {
  clientMutationId: String
  token: String
  user: User
}

input CheckUserExistsInput {
  clientMutationId: String

  # The user
  user: String!
}

type CheckUserExistsPayload {
  clientMutationId: String
  exists: Boolean!

  # The user is only returned if the user input was the username
  user: User
}

type Command {
  command: String!
  module: PackageVersionModule!
  packageVersion: PackageVersion!
}

input CreateNamespaceInput {
  # The namespace avatar
  avatar: String
  clientMutationId: String

  # The namespace description
  description: String

  # The namespace display name
  displayName: String
  name: String!
}

type CreateNamespacePayload {
  clientMutationId: String
  namespace: Namespace!
  user: User!
}

# The `DateTime` scalar type represents a DateTime
# value as specified by
# [iso8601](https://en.wikipedia.org/wiki/ISO_8601).
scalar DateTime

input DeleteNamespaceInput {
  clientMutationId: String
  namespaceId: ID!
}

type DeleteNamespacePayload {
  clientMutationId: String
  success: Boolean!
}

type ErrorType {
  field: String!
  messages: [String!]!
}

input GenerateAPITokenInput {
  clientMutationId: String
  identifier: String
}

type GenerateAPITokenPayload {
  clientMutationId: String
  token: APIToken
  tokenRaw: String
  user: User
}

# The `GenericScalar` scalar type represents a generic
# GraphQL scalar value that could be:
# String, Boolean, Int, Float, List or Object.
scalar GenericScalar

type GetPasswordResetToken {
  user: User
  valid: Boolean!
}

union GlobalObject = Namespace | User

input InputSignature {
  data: String!
  publicKeyKeyId: String!
}

type Interface implements Node {
  createdAt: DateTime!
  description: String!
  displayName: String!
  homepage: String
  icon: String

  # The ID of the object
  id: ID!
  lastVersion: InterfaceVersion
  name: String!
  updatedAt: DateTime!
  versions(after: String = null, before: String = null, first: Int = null, last: Int = null, offset: Int = null): InterfaceVersionConnection!
}

type InterfaceVersion implements Node {
  content: String!
  createdAt: DateTime!

  # The ID of the object
  id: ID!
  interface: Interface!
  packageVersions(after: String = null, before: String = null, first: Int = null, last: Int = null, offset: Int = null): PackageVersionConnection!
  publishedBy: User!
  updatedAt: DateTime!
  version: String!
}

type InterfaceVersionConnection {
  # Contains the nodes in this connection.
  edges: [InterfaceVersionEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `InterfaceVersion` and its cursor.
type InterfaceVersionEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: InterfaceVersion
}

input InviteNamespaceCollaboratorInput {
  clientMutationId: String
  email: String
  namespaceId: ID!
  role: Role!
  username: String
}

type InviteNamespaceCollaboratorPayload {
  clientMutationId: String
  invite: NamespaceCollaboratorInvite!
  namespace: Namespace!
}

input InvitePackageCollaboratorInput {
  clientMutationId: String
  email: String
  packageName: String!
  role: Role!
  username: String
}

type InvitePackageCollaboratorPayload {
  clientMutationId: String
  invite: PackageCollaboratorInvite!
  package: Package!
}

input LikePackageInput {
  clientMutationId: String
  packageId: ID!
}

type LikePackagePayload {
  clientMutationId: String
  package: Package!
}

interface Likeable {
  id: ID!
  likersCount: Int!
  viewerHasLiked: Boolean!
}

type Mutation {
  acceptNamespaceCollaboratorInvite(input: AcceptNamespaceCollaboratorInviteInput!): AcceptNamespaceCollaboratorInvitePayload
  acceptPackageCollaboratorInvite(input: AcceptPackageCollaboratorInviteInput!): AcceptPackageCollaboratorInvitePayload
  acceptPackageTransferRequest(input: AcceptPackageTransferRequestInput!): AcceptPackageTransferRequestPayload
  archivePackage(input: ArchivePackageInput!): ArchivePackagePayload
  changePackageVersionArchivedStatus(input: ChangePackageVersionArchivedStatusInput!): ChangePackageVersionArchivedStatusPayload
  changeUserEmail(input: ChangeUserEmailInput!): ChangeUserEmailPayload
  changeUserPassword(input: ChangeUserPasswordInput!): ChangeUserPasswordPayload
  changeUserUsername(input: ChangeUserUsernameInput!): ChangeUserUsernamePayload
  checkUserExists(input: CheckUserExistsInput!): CheckUserExistsPayload
  createNamespace(input: CreateNamespaceInput!): CreateNamespacePayload
  deleteNamespace(input: DeleteNamespaceInput!): DeleteNamespacePayload
  generateApiToken(input: GenerateAPITokenInput!): GenerateAPITokenPayload
  inviteNamespaceCollaborator(input: InviteNamespaceCollaboratorInput!): InviteNamespaceCollaboratorPayload
  invitePackageCollaborator(input: InvitePackageCollaboratorInput!): InvitePackageCollaboratorPayload
  likePackage(input: LikePackageInput!): LikePackagePayload
  publishPackage(input: PublishPackageInput!): PublishPackagePayload
  publishPublicKey(input: PublishPublicKeyInput!): PublishPublicKeyPayload
  readNotification(input: ReadNotificationInput!): ReadNotificationPayload
  refreshToken(input: RefreshInput!): RefreshPayload
  registerUser(input: RegisterUserInput!): RegisterUserPayload
  removeNamespaceCollaborator(input: RemoveNamespaceCollaboratorInput!): RemoveNamespaceCollaboratorPayload
  removeNamespaceCollaboratorInvite(input: RemoveNamespaceCollaboratorInviteInput!): RemoveNamespaceCollaboratorInvitePayload
  removePackageCollaborator(input: RemovePackageCollaboratorInput!): RemovePackageCollaboratorPayload
  removePackageCollaboratorInvite(input: RemovePackageCollaboratorInviteInput!): RemovePackageCollaboratorInvitePayload
  removePackageTransferRequest(input: RemovePackageTransferRequestInput!): RemovePackageTransferRequestPayload
  requestPackageTransfer(input: RequestPackageTransferInput!): RequestPackageTransferPayload
  requestPasswordReset(input: RequestPasswordResetInput!): RequestPasswordResetPayload
  requestValidationEmail(input: RequestValidationEmailInput!): RequestValidationEmailPayload
  revokeApiToken(input: RevokeAPITokenInput!): RevokeAPITokenPayload
  seePendingNotifications(input: SeePendingNotificationsInput!): SeePendingNotificationsPayload

  # Social Auth for JSON Web Token (JWT)
  socialAuth(input: SocialAuthJWTInput!): SocialAuthJWTPayload

  # Obtain JSON Web Token mutation
  tokenAuth(input: ObtainJSONWebTokenInput!): ObtainJSONWebTokenPayload
  unlikePackage(input: UnlikePackageInput!): UnlikePackagePayload
  unwatchPackage(input: UnwatchPackageInput!): UnwatchPackagePayload
  updateNamespace(input: UpdateNamespaceInput!): UpdateNamespacePayload
  updateNamespaceCollaboratorRole(input: UpdateNamespaceCollaboratorRoleInput!): UpdateNamespaceCollaboratorRolePayload
  updatePackage(input: UpdatePackageInput!): UpdatePackagePayload
  updatePackageCollaboratorRole(input: UpdatePackageCollaboratorRoleInput!): UpdatePackageCollaboratorRolePayload
  updateUserInfo(input: UpdateUserInfoInput!): UpdateUserInfoPayload
  validateUserEmail(input: ValidateUserEmailInput!): ValidateUserEmailPayload
  validateUserPassword(input: ValidateUserPasswordInput!): ValidateUserPasswordPayload
  verifyToken(input: VerifyInput!): VerifyPayload
  watchPackage(input: WatchPackageInput!): WatchPackagePayload
}

type Namespace implements Node & PackageOwner {
  avatar: String!
  avatarUpdatedAt: DateTime
  collaborators(after: String = null, before: String = null, first: Int = null, last: Int = null): NamespaceCollaboratorConnection
  createdAt: DateTime!
  description: String!
  displayName: String
  globalName: String!

  # The ID of the object
  id: ID!
  maintainerInvites: [NamespaceCollaboratorInvite!]!
  maintainersWithRoles(after: String = null, before: String = null, first: Int = null, last: Int = null, offset: Int = null): NamespaceMaintainerConnection!
  name: String!
  packageVersions(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageVersionConnection
  packages(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageConnection
  pendingInvites(after: String = null, before: String = null, first: Int = null, last: Int = null): NamespaceCollaboratorInviteConnection
  publicActivity(after: String = null, before: String = null, first: Int = null, last: Int = null): ActivityEventConnection!
  updatedAt: DateTime!
  userSet(after: String = null, before: String = null, first: Int = null, last: Int = null, offset: Int = null): UserConnection!
  viewerHasRole(role: Role!): Boolean!
}

type NamespaceCollaborator {
  createdAt: DateTime!
  id: ID!
  invite: NamespaceCollaboratorInvite
  namespace: Namespace!
  role: RegistryNamespaceMaintainerRoleChoices!
  updatedAt: DateTime!
  user: User!
}

type NamespaceCollaboratorConnection {
  # Contains the nodes in this connection.
  edges: [NamespaceCollaboratorEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `NamespaceCollaborator` and its cursor.
type NamespaceCollaboratorEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: NamespaceCollaborator
}

type NamespaceCollaboratorInvite {
  accepted: NamespaceMaintainer
  approvedBy: User
  closedAt: DateTime
  createdAt: DateTime!
  declinedBy: User
  expiresAt: DateTime!
  id: ID!
  inviteEmail: String
  namespace: Namespace!
  requestedBy: User!
  role: RegistryNamespaceMaintainerInviteRoleChoices!
  user: User
}

type NamespaceCollaboratorInviteConnection {
  # Contains the nodes in this connection.
  edges: [NamespaceCollaboratorInviteEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `NamespaceCollaboratorInvite` and its cursor.
type NamespaceCollaboratorInviteEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: NamespaceCollaboratorInvite
}

type NamespaceConnection {
  # Contains the nodes in this connection.
  edges: [NamespaceEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `Namespace` and its cursor.
type NamespaceEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: Namespace
}

type NamespaceMaintainer implements Node {
  createdAt: DateTime!

  # The ID of the object
  id: ID!
  invite: NamespaceCollaboratorInvite
  namespace: Namespace!
  role: RegistryNamespaceMaintainerRoleChoices!
  updatedAt: DateTime!
  user: User!
}

type NamespaceMaintainerConnection {
  # Contains the nodes in this connection.
  edges: [NamespaceMaintainerEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `NamespaceMaintainer` and its cursor.
type NamespaceMaintainerEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: NamespaceMaintainer
}

# An object with an ID
interface Node {
  # The ID of the object
  id: ID!
}

type NodeBodyRange {
  entity: Node!
  length: Int!
  offset: Int!
}

input ObtainJSONWebTokenInput {
  clientMutationId: String
  password: String!
  username: String!
}

# Obtain JSON Web Token mutation
type ObtainJSONWebTokenPayload {
  clientMutationId: String
  payload: GenericScalar!
  refreshExpiresIn: Int!
  refreshToken: String!
  token: String!
}

type Package implements Likeable & Node & PackageOwner {
  alias: String

  # The app icon. It should be formatted in the same way as Apple icons
  appIcon: String! @deprecated(reason: "Please use icon instead")
  collaborators(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageCollaboratorConnection
  createdAt: DateTime!
  curated: Boolean!
  displayName: String!

  # The total number of downloads of the package
  downloadsCount: Int
  globalName: String!

  # The app icon. It should be formatted in the same way as Apple icons
  icon: String!
  iconUpdatedAt: DateTime

  # The ID of the object
  id: ID!
  isTransferring: Boolean!
  lastVersion: PackageVersion
  likeCount: Int!
  likersCount: Int!
  maintainers: [User]! @deprecated(reason: "Please use collaborators instead")
  name: String!
  namespace: String
  owner: PackageOwner
  ownerObjectId: Int!

  # The name of the package without the owner
  packageName: String!
  pendingInvites(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageCollaboratorInviteConnection
  private: Boolean!

  # The public keys for all the published versions
  publicKeys: [PublicKey!]!
  updatedAt: DateTime!
  versions: [PackageVersion]
  viewerHasLiked: Boolean!
  viewerHasRole(role: Role!): Boolean!
  viewerIsWatching: Boolean!
  watchCount: Int!
}

type PackageCollaborator implements Node {
  createdAt: DateTime!

  # The ID of the object
  id: ID!
  invite: PackageCollaboratorInvite
  package: Package!
  role: RegistryPackageMaintainerRoleChoices!
  updatedAt: DateTime!
  user: User!
}

type PackageCollaboratorConnection {
  # Contains the nodes in this connection.
  edges: [PackageCollaboratorEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `PackageCollaborator` and its cursor.
type PackageCollaboratorEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: PackageCollaborator
}

type PackageCollaboratorInvite implements Node {
  accepted: PackageCollaborator
  approvedBy: User
  closedAt: DateTime
  createdAt: DateTime!
  declinedBy: User
  expiresAt: DateTime!

  # The ID of the object
  id: ID!
  inviteEmail: String
  package: Package!
  requestedBy: User!
  role: RegistryPackageMaintainerInviteRoleChoices!
  user: User
}

type PackageCollaboratorInviteConnection {
  # Contains the nodes in this connection.
  edges: [PackageCollaboratorInviteEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `PackageCollaboratorInvite` and its cursor.
type PackageCollaboratorInviteEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: PackageCollaboratorInvite
}

type PackageConnection {
  # Contains the nodes in this connection.
  edges: [PackageEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

type PackageDistribution {
  downloadUrl: String!
  size: Int!
  piritaDownloadUrl: String
  piritaSize: Int
}

# A Relay edge containing a `Package` and its cursor.
type PackageEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: Package
}

interface PackageOwner {
  globalName: String!
}

type PackageTransferRequest implements Node {
  approvedBy: User
  closedAt: DateTime
  createdAt: DateTime!
  declinedBy: User
  expiresAt: DateTime!

  # The ID of the object
  id: ID!
  newOwnerObjectId: Int!
  package: Package!
  previousOwnerObjectId: Int!
  requestedBy: User!
}

type PackageTransferRequestConnection {
  # Contains the nodes in this connection.
  edges: [PackageTransferRequestEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `PackageTransferRequest` and its cursor.
type PackageTransferRequestEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: PackageTransferRequest
}

type PackageVersion implements Node {
  commands: [Command!]!
  createdAt: DateTime!
  description: String!
  distribution: PackageDistribution!
  file: String!
  fileSize: Int!
  filesystem: [PackageVersionFilesystem]!
  homepage: String

  # The ID of the object
  id: ID!
  isArchived: Boolean!
  isLastVersion: Boolean!
  isSigned: Boolean!
  license: String
  licenseFile: String
  manifest: String!
  moduleInterfaces: [InterfaceVersion!]!
  modules: [PackageVersionModule!]!
  package: Package!
  publishedBy: User!
  readme: String
  repository: String
  signature: Signature
  updatedAt: DateTime!
  version: String!
}

type PackageVersionConnection {
  # Contains the nodes in this connection.
  edges: [PackageVersionEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `PackageVersion` and its cursor.
type PackageVersionEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: PackageVersion
}

type PackageVersionFilesystem {
  host: String!
  wasm: String!
}

type PackageVersionModule {
  abi: String
  name: String!
  publicUrl: String!
  source: String!
}

# The Relay compliant `PageInfo` type, containing data necessary to paginate this connection.
type PageInfo {
  # When paginating forwards, the cursor to continue.
  endCursor: String

  # When paginating forwards, are there more items?
  hasNextPage: Boolean!

  # When paginating backwards, are there more items?
  hasPreviousPage: Boolean!

  # When paginating backwards, the cursor to continue.
  startCursor: String
}

type PublicKey implements Node {
  # The ID of the object
  id: ID!
  key: String!
  keyId: String!
  owner: User!
  revoked: Boolean!
  revokedAt: DateTime
  uploadedAt: DateTime!
  verifyingSignature: Signature
}

input PublishPackageInput {
  clientMutationId: String
  description: String!
  file: String
  homepage: String

  # The package icon
  icon: String
  license: String
  licenseFile: String
  manifest: String!
  name: String!
  readme: String
  repository: String
  signature: InputSignature
  version: String!
}

type PublishPackagePayload {
  clientMutationId: String
  packageVersion: PackageVersion!
  success: Boolean!
}

input PublishPublicKeyInput {
  clientMutationId: String
  key: String!
  keyId: String!
  verifyingSignatureId: String
}

type PublishPublicKeyPayload {
  clientMutationId: String
  publicKey: PublicKey!
  success: Boolean!
}

type Query {
  getCommand(name: String!): Command
  getCommands(names: [String!]!): [Command]
  getContract(name: String!): Interface @deprecated(reason: "Please use getInterface instead")
  getContractVersion(name: String!, version: String = null): InterfaceVersion @deprecated(reason: "Please use getInterfaceVersion instead")
  getContracts(names: [String!]!): [Interface]! @deprecated(reason: "Please use getInterfaces instead")
  getGlobalObject(slug: String!): GlobalObject
  getInterface(name: String!): Interface
  getInterfaceVersion(name: String!, version: String = "latest"): InterfaceVersion
  getInterfaces(names: [String!]!): [Interface]!
  getNamespace(name: String!): Namespace
  getPackage(name: String!): Package
  getPackageVersion(name: String!, version: String = "latest"): PackageVersion
  getPackageVersions(names: [String!]!): [PackageVersion]
  getPackages(names: [String!]!): [Package]!
  getPasswordResetToken(token: String!): GetPasswordResetToken
  getUser(username: String!): User
  node(
    # The ID of the object
    id: ID!
  ): Node
  packages(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageConnection
  recentPackageVersions(after: String = null, before: String = null, curated: Boolean = null, first: Int = null, last: Int = null, offset: Int = null): PackageVersionConnection
  search(after: String = null, before: String = null, curated: Boolean = null, first: Int = null, hasBindings: Boolean = null, isStandalone: Boolean = null, kind: [SearchKind!] = null, last: Int = null, orderBy: SearchOrderBy = null, publishDate: SearchPublishDate = null, query: String!, sort: SearchOrderSort = null, withInterfaces: [String!] = null): SearchConnection!
  searchAutocomplete(after: String = null, before: String = null, first: Int = null, kind: [SearchKind!] = null, last: Int = null, query: String!): SearchConnection!
  viewer: User
}

input ReadNotificationInput {
  clientMutationId: String
  notificationId: ID!
}

type ReadNotificationPayload {
  clientMutationId: String
  notification: UserNotification
}

input RefreshInput {
  clientMutationId: String
  refreshToken: String
}

type RefreshPayload {
  clientMutationId: String
  payload: GenericScalar!
  refreshExpiresIn: Int!
  refreshToken: String!
  token: String!
}

input RegisterUserInput {
  clientMutationId: String
  email: String!
  fullName: String!
  password: String!
  username: String!
}

type RegisterUserPayload {
  clientMutationId: String
  token: String
}

# An enumeration.
enum RegistryNamespaceMaintainerInviteRoleChoices {
  # Admin
  ADMIN

  # Editor
  EDITOR

  # Viewer
  VIEWER
}

# An enumeration.
enum RegistryNamespaceMaintainerRoleChoices {
  # Admin
  ADMIN

  # Editor
  EDITOR

  # Viewer
  VIEWER
}

# An enumeration.
enum RegistryPackageMaintainerInviteRoleChoices {
  # Admin
  ADMIN

  # Editor
  EDITOR

  # Viewer
  VIEWER
}

# An enumeration.
enum RegistryPackageMaintainerRoleChoices {
  # Admin
  ADMIN

  # Editor
  EDITOR

  # Viewer
  VIEWER
}

input RemoveNamespaceCollaboratorInput {
  clientMutationId: String
  namespaceCollaboratorId: ID!
}

input RemoveNamespaceCollaboratorInviteInput {
  clientMutationId: String
  inviteId: ID!
}

type RemoveNamespaceCollaboratorInvitePayload {
  clientMutationId: String
  namespace: Namespace!
}

type RemoveNamespaceCollaboratorPayload {
  clientMutationId: String
  namespace: Namespace!
}

input RemovePackageCollaboratorInput {
  clientMutationId: String
  packageCollaboratorId: ID!
}

input RemovePackageCollaboratorInviteInput {
  clientMutationId: String
  inviteId: ID!
}

type RemovePackageCollaboratorInvitePayload {
  clientMutationId: String
  package: Package!
}

type RemovePackageCollaboratorPayload {
  clientMutationId: String
  package: Package!
}

input RemovePackageTransferRequestInput {
  clientMutationId: String
  packageTransferRequestId: ID!
}

type RemovePackageTransferRequestPayload {
  clientMutationId: String
  package: Package!
}

input RequestPackageTransferInput {
  clientMutationId: String
  newOwnerId: ID!
  packageId: ID!
}

type RequestPackageTransferPayload {
  clientMutationId: String
  package: Package!
}

input RequestPasswordResetInput {
  clientMutationId: String
  email: String!
}

type RequestPasswordResetPayload {
  clientMutationId: String
  email: String!
  errors: [ErrorType]
}

input RequestValidationEmailInput {
  clientMutationId: String

  # The user id
  userId: ID
}

type RequestValidationEmailPayload {
  clientMutationId: String
  success: Boolean!
  user: User
}

input RevokeAPITokenInput {
  clientMutationId: String

  # The API token ID
  tokenId: ID!
}

type RevokeAPITokenPayload {
  clientMutationId: String
  success: Boolean
  token: APIToken
}

enum Role {
  ADMIN
  EDITOR
  VIEWER
}

type SearchConnection {
  # Contains the nodes in this connection.
  edges: [SearchEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `Search` and its cursor.
type SearchEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: SearchResult
}

enum SearchKind {
  NAMESPACE
  PACKAGE
  USER
}

enum SearchOrderBy {
  ALPHABETICALLY
  PUBLISHED_DATE
  SIZE
  TOTAL_DOWNLOADS
}

enum SearchOrderSort {
  ASC
  DESC
}

enum SearchPublishDate {
  LAST_DAY
  LAST_MONTH
  LAST_WEEK
  LAST_YEAR
}

union SearchResult = Namespace | PackageVersion | User

input SeePendingNotificationsInput {
  clientMutationId: String
}

type SeePendingNotificationsPayload {
  clientMutationId: String
  success: Boolean
}

type Signature {
  createdAt: DateTime!
  data: String!
  id: ID!
  publicKey: PublicKey!
}

input SocialAuthJWTInput {
  accessToken: String!
  clientMutationId: String
  provider: String!
}

# Social Auth for JSON Web Token (JWT)
type SocialAuthJWTPayload {
  clientMutationId: String
  social: SocialNode
  token: String
}

scalar SocialCamelJSON

type SocialNode implements Node {
  created: DateTime!
  extraData: SocialCamelJSON

  # The ID of the object
  id: ID!
  modified: DateTime!
  provider: String!
  uid: String!
  user: User!
}

type Subscription {
  packageVersionCreated(ownerId: ID = null, publishedBy: ID = null): PackageVersion!
  userNotificationCreated(userId: ID!): UserNotificationCreated!
}

input UnlikePackageInput {
  clientMutationId: String
  packageId: ID!
}

type UnlikePackagePayload {
  clientMutationId: String
  package: Package!
}

input UnwatchPackageInput {
  clientMutationId: String
  packageId: ID!
}

type UnwatchPackagePayload {
  clientMutationId: String
  package: Package!
}

input UpdateNamespaceCollaboratorRoleInput {
  clientMutationId: String
  namespaceCollaboratorId: ID!
  role: Role!
}

type UpdateNamespaceCollaboratorRolePayload {
  clientMutationId: String
  collaborator: NamespaceCollaborator!
}

input UpdateNamespaceInput {
  # The namespace avatar
  avatar: String
  clientMutationId: String

  # The namespace description
  description: String

  # The namespace display name
  displayName: String

  # The namespace slug name
  name: String
  namespaceId: ID!
}

type UpdateNamespacePayload {
  clientMutationId: String
  namespace: Namespace!
}

input UpdatePackageCollaboratorRoleInput {
  clientMutationId: String
  packageCollaboratorId: ID!
  role: Role!
}

type UpdatePackageCollaboratorRolePayload {
  clientMutationId: String
  collaborator: PackageCollaborator!
}

input UpdatePackageInput {
  clientMutationId: String

  # The package icon
  icon: String
  packageId: ID!
}

type UpdatePackagePayload {
  clientMutationId: String
  package: Package!
}

input UpdateUserInfoInput {
  # The user avatar
  avatar: String

  # The user bio
  bio: String
  clientMutationId: String

  # The user full name
  fullName: String

  # The user Github (it can be the url, or the handle with or without the @)
  github: String

  # The user location
  location: String

  # The user Twitter (it can be the url, or the handle with or without the @)
  twitter: String

  # The user id
  userId: ID

  # The user website (it must be a valid url)
  websiteUrl: String
}

type UpdateUserInfoPayload {
  clientMutationId: String
  user: User
}

type User implements Node & PackageOwner {
  apiTokens(after: String = null, before: String = null, first: Int = null, last: Int = null): APITokenConnection
  avatar(size: Int = 80): String!
  bio: String
  dateJoined: DateTime!
  email: String!
  firstName: String!
  fullName: String!
  githubUrl: String
  globalName: String!

  # The ID of the object
  id: ID!
  isEmailValidated: Boolean!
  isViewer: Boolean!
  lastName: String!
  location: String
  namespaceInvitesIncoming(after: String = null, before: String = null, first: Int = null, last: Int = null): NamespaceCollaboratorInviteConnection
  namespaces(after: String = null, before: String = null, first: Int = null, last: Int = null): NamespaceConnection
  notifications(after: String = null, before: String = null, first: Int = null, last: Int = null): UserNotificationConnection
  packageInvitesIncoming(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageCollaboratorInviteConnection
  packageTransfersIncoming(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageTransferRequestConnection
  packageVersions(after: String = null, before: String = null, first: Int = null, last: Int = null): PackageVersionConnection
  packages(after: String = null, before: String = null, collaborating: Boolean = null, first: Int = null, last: Int = null): PackageConnection
  publicActivity(after: String = null, before: String = null, first: Int = null, last: Int = null): ActivityEventConnection!
  twitterUrl: String

  # Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
  username: String!
  websiteUrl: String
}

type UserConnection {
  # Contains the nodes in this connection.
  edges: [UserEdge]!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

# A Relay edge containing a `User` and its cursor.
type UserEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: User
}

type UserNotification implements Node {
  body: UserNotificationBody!
  createdAt: DateTime!
  icon: String

  # The ID of the object
  id: ID!
  kind: UserNotificationKind
  seenState: UserNotificationSeenState!
}

type UserNotificationBody {
  ranges: [NodeBodyRange]!
  text: String!
}

type UserNotificationConnection {
  # Contains the nodes in this connection.
  edges: [UserNotificationEdge]!
  hasPendingNotifications: Boolean!

  # Pagination data for this connection.
  pageInfo: PageInfo!
}

type UserNotificationCreated {
  notification: UserNotification
  notificationDeletedId: ID
}

# A Relay edge containing a `UserNotification` and its cursor.
type UserNotificationEdge {
  # A cursor for use in pagination
  cursor: String!

  # The item at the end of the edge
  node: UserNotification
}

union UserNotificationKind = UserNotificationKindIncomingPackageInvite | UserNotificationKindIncomingPackageTransfer | UserNotificationKindPublishedPackageVersion

type UserNotificationKindIncomingPackageInvite {
  packageInvite: PackageCollaboratorInvite!
}

type UserNotificationKindIncomingPackageTransfer {
  packageTransferRequest: PackageTransferRequest!
}

type UserNotificationKindPublishedPackageVersion {
  packageVersion: PackageVersion!
}

enum UserNotificationSeenState {
  SEEN
  SEEN_AND_READ
  UNSEEN
}

input ValidateUserEmailInput {
  challenge: String!
  clientMutationId: String

  # The user id
  userId: ID
}

type ValidateUserEmailPayload {
  clientMutationId: String
  user: User
}

input ValidateUserPasswordInput {
  clientMutationId: String
  password: String!
}

type ValidateUserPasswordPayload {
  clientMutationId: String
  success: Boolean
}

input VerifyInput {
  clientMutationId: String
  token: String
}

type VerifyPayload {
  clientMutationId: String
  payload: GenericScalar!
}

input WatchPackageInput {
  clientMutationId: String
  packageId: ID!
}

type WatchPackagePayload {
  clientMutationId: String
  package: Package!
}