@riverscapes/common 2.0.23 → 2.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  };
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  var graphql_tag_1 = __importDefault(require("graphql-tag"));
11
- exports.default = (0, graphql_tag_1.default)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\nschema {\n query: Query\n mutation: Mutation\n}\n\nscalar BigInt\n\ntype Collection implements DBObj & HasOwner & HasStar & HasTags {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"(Optional) Who to contact (might be different from owner)\"\"\"\n contact: User\n createdBy: User!\n createdOn: DateTime!\n description: String!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n \"\"\"Paginated, ordered list of projects this collection contains\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput CollectionInput {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"Remove the contact for this collection\"\"\"\n clearContact: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"User ID of the contact for this collection (Optional)\"\"\"\n contact: OwnerInput\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Collection visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ninterface DBObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Key-value pairs for attaching metadata to objects\"\"\"\n meta: [MetaData!]!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\n\"\"\"Notifications get a stripped-down version of the DBObj\"\"\"\ninterface DBObjNotifications {\n createdBy: User!\n \"\"\"\n User who created object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields\n \"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n updatedBy: User!\n \"\"\"\n User who last updated object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields \n \"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninput DBObjNotificationsInput {\n \"\"\"User who created object\"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninterface DBSimpleObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ntype Dataset implements DBObj {\n analysisId: String\n \"\"\"These are the projects that use this layer\"\"\"\n attachedDatasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n citation: String\n createdBy: User!\n createdOn: DateTime!\n datasetContainer: DatasetContainerTypesEnum!\n \"\"\"\n All of these fields are actually derivatives of the rsXPath\n \n The type of dataset helps us understand how to work with it\n These types are derived directly from the XML enumeration\n \"\"\"\n datasetType: DatasetTypeEnum!\n datasetXMLId: String!\n description: String!\n \"\"\"\n For Direct S3 File listings. This is a query that depends on the type\n of dataset. Sometimes we also need sidecars to come back\n \"\"\"\n files: [FileDownloadMeta!]!\n \"\"\"\n The ID for datasets takes the form 'PROJ_ORIGIN_GUID/REALIZATION_ID/DATASET_ID'\n and corresponds to the S3 path we store things\n \n NOTE: ID is different from the dsId (which is the id attribute on the XML node) \n \"\"\"\n id: ID!\n \"\"\"Some datasets can have sublayers (mainly just Geopackages)\"\"\"\n layers: [DatasetLayer]\n localPath: String!\n meta: [MetaData!]!\n name: String!\n \"\"\"\n The original dataset (if there is one). THis is null if this is the origin\n \"\"\"\n origin: Dataset\n \"\"\"Backwards lookup of the project this dataset belongs to\"\"\"\n project: Project!\n realizationXMLId: String\n \"\"\"Backwards lookup to the project referenced b\"\"\"\n refProject: Project\n rsXPath: String!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"These are the XML tag containers where you can find datasets\"\"\"\nenum DatasetContainerTypesEnum {\n CommonDatasets\n Configuration\n Datasets\n Inputs\n Intermediates\n Logs\n Outputs\n Products\n}\n\ninput DatasetInput {\n citation: String\n description: String\n \"\"\"\n Optional. If this is a linked dataset then its extRef should be present. this is an attribute on the dataset node in the XML\n and it takes the form:\n badfe8c1-0342-4876-8fac-b2eb5493a90f:Project/REALIZATION/SLOPE\n PROJECT_UUID:rsXPath\n \"\"\"\n extRef: ID\n \"\"\"Geopackages can have sublayers\"\"\"\n layers: [DatasetLayerInput!]\n \"\"\"\n local path on the user's system. This comes directly from the <Path> node in the project xml\n \"\"\"\n localPath: String!\n meta: [MetaDataInput!]\n name: String!\n \"\"\"\n This is the rsXPath to the node in the project (not the origin project)\n It is a proprietary path system to uniquely identify datasets in our XML files\n This rsXPath takes the form: 'Project/Realizations/Realization#REAL1/Intermediates/Geopackage#GEO1'\n where the hashes are shorthand for IDS\n \"\"\"\n rsXPath: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ntype DatasetLayer {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaData!]\n name: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ninput DatasetLayerInput {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\ninput DatasetLayerUpdate {\n citation: String\n description: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\n\"\"\"\nenum DatasetTypeEnum {\n AuxInstrumentFile\n CSV\n ConfigFile\n DEM\n DataTable\n Database\n File\n Geopackage\n HTMLFile\n HillShade\n Image\n InstrumentFile\n LogFile\n MSAccessDB\n PDF\n Raster\n SQLiteDB\n SurveyQualityDB\n TIN\n Vector\n Video\n ZipFile\n}\n\ninput DatasetUpdate {\n citation: String\n description: String\n dsId: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\nscalar DateTime\n\nscalar EmailAddress\n\nenum EntitiesWithImagesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n PROJECT_TYPE\n USER\n}\n\nenum EntityDeleteActionsEnum {\n DELETE\n DELETE_COMPLETE\n MAKE_PUBLIC\n REQUEST_TRANSFER\n}\n\ninput EntityDeletionOptions {\n \"\"\"\n TotalDelete means This item has been cleaned up completely including\n shared dataset: this will break links for shared projects so it should\n be the exception and not the rule.\n \"\"\"\n totalDelete: Boolean\n \"\"\"\n Optional: request transfer of all projects and collections to another Owner in the system\n \"\"\"\n transfer: TransferEntityItemsInput\n}\n\ntype FileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ninput FileDownloadMetaInput {\n contentType: String\n localPath: String!\n md5: String!\n size: BigInt\n}\n\ninterface FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype FileUploadMeta {\n downloadUrl: String!\n key: String!\n}\n\ninterface HasOwner {\n ownedBy: Owner!\n}\n\ninterface HasStar {\n starred: Boolean!\n starredCount: Int!\n}\n\ninterface HasTags {\n tags: [String!]!\n}\n\n\"\"\"Small medium and large image sizes\"\"\"\ntype HeroImage {\n lg: URL\n md: URL\n sm: URL\n}\n\nenum ImageTypeEnum {\n AVATAR\n HERO\n LOGO\n}\n\nscalar JSONObject\n\nenum JobStatusEnum {\n FAILED\n PROCESSING\n READY\n SUCCESS\n UNKNOWN\n}\n\n\"\"\"\nJobStatusObj: The shape of the JSON file that stores the state of the uploaded item.\n\"\"\"\ntype JobStatusObj {\n \"\"\"\n Jobs may store different settings. leave a data param as JSONObject so we can extend it\n without needing to modify the schema\n \"\"\"\n data: JSONObject\n errors: [String!]\n metaData: JSONObject\n percentComplete: Int\n projectId: String\n status: JobStatusEnum!\n}\n\ntype Link {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ninput LinkInput {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ntype MapCluster {\n \"\"\"[longitude, latitude]\"\"\"\n coords: [Float!]!\n count: Int!\n \"\"\"check out npm's 'ngeogrid' for how to turn this back into coordinates\"\"\"\n hash: String!\n}\n\ntype MetaData {\n ext: MetaDataExtEnum\n key: String!\n locked: Boolean\n type: MetaDataTypeEnum\n value: String\n}\n\nenum MetaDataExtEnum {\n DATASET\n PROJECT\n WAREHOUSE\n}\n\n\"\"\"When submitting metadata use this object\"\"\"\ninput MetaDataInput {\n \"\"\"\n If this metadata was impored from an external project then list what kind of MetaData it is.\n Options: PROJECT, DATASET, WAREHOUSE\n \"\"\"\n ext: MetaDataExtEnum\n \"\"\"Metadata key string\"\"\"\n key: String!\n \"\"\"\n Optional locked flag. Defaults to false. If true then this metadata value cannot be edited by the UI\n \"\"\"\n locked: Boolean\n \"\"\"Optional meta type value. Defaults to String\"\"\"\n type: MetaDataTypeEnum\n \"\"\"\n Strignified metadata value\n NOTE: In the XML spec null is allowed so technically it is allowed here too.\n \"\"\"\n value: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\nfind it here: RiverscapesXML/Projects/XSD/V2/RiverscapesProject.xsd\n\"\"\"\nenum MetaDataTypeEnum {\n BOOLEAN\n FILEPATH\n FLOAT\n GUID\n HIDDEN\n IMAGE\n INT\n ISODATE\n JSON\n MARKDOWN\n RICHTEXT\n STRING\n TIMESTAMP\n URL\n VIDEO\n}\n\ntype Mutation {\n \"\"\"\n Accept or reject an org invite. State afterward will be ACCEPTED or REJECTED\n \"\"\"\n actionOrganizationInvite(accept: Boolean!, id: ID!, role: OrganizationInviteRoleEnum): OrganizationInvite\n addCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n ADMIN: Scan over the dynamoDB and create appropriate OpenSearch entries\n \"\"\"\n adminReIndexOpenSearch(paginationToken: String): String\n \"\"\"\n ADMIN: Recreate/empty opensearch indeces (you will need to run adminRebuildOpenSearch after this)\n \"\"\"\n adminRecreateOpenSearch: Boolean\n \"\"\"ADMIN: Wipe DynamoDB except for users\"\"\"\n adminWipeDynamo: Int\n changeProjectOwner(owner: OwnerInput!, projectId: ID!): Project\n \"\"\"Create a collection of projects\"\"\"\n createCollection(collection: CollectionInput!, orgId: ID): Collection\n createNotification(notification: NotificationInput): Notification\n createOrganization(organization: OrganizationInput!): Organization\n \"\"\"\n Organization admins/owners can invite others. the invite will have the state: INVITED\n One of userId or email must be provided.\n \"\"\"\n createOrganizationInvite(email: String, organizationId: ID!, role: OrganizationInviteRoleEnum, userId: ID): OrganizationInvite\n \"\"\"For user when logging in for the first time\"\"\"\n createProfile(id: ID, profile: ProfileInput!): Profile\n \"\"\"\n Create a new project. This is the main mutation for creating a new project\n @param projectId: (optional) The ID of the project. If not given then a new one is generated. If it exists in the system then an error is thrown.\n @param project: The project object\n @param projectTypeId: The ID of the project type\n @param orgId: The ID of the organization. This will become the project owner. This field is mutually exclusive with userId\n @param userId: The ID of the user. This will become the project owner. This field is mutually exclusive with orgId\n @param agentId: The ID of the agent. This will become the createdBy field in the project\n \"\"\"\n createProject(agentId: ID, orgId: ID, project: ProjectInput!, projectId: ID, projectTypeId: String, userId: ID): Project\n \"\"\"\n For most users \"createProject\" is actually \"sugest a project type\" and will be created\n with state \"SUGGESTED\". Only admins can create a ProjectType that starts with state \"ACTIVE\"\n \"\"\"\n createProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n createSavedSearch(orgId: ID, savedSearch: SavedSearchInput!): SavedSearch\n createTransfer(transfer: TransferInput!): Transfer\n deleteCollection(id: ID!): MutationResult\n \"\"\"\n This is the equivalent of dismissing notifications. It is permanent\n - if ids is specified then specific notifications will be deleted\n - if all: True then all notifications for this user will be deleted\n \"\"\"\n deleteNotifications(all: Boolean, ids: [ID!]): MutationResult\n deleteOrganization(id: ID!, options: EntityDeletionOptions): MutationResult\n \"\"\"Organization admins/owners can dis-invite others.\"\"\"\n deleteOrganizationInvite(id: ID!): MutationResult\n \"\"\"Delete your user profile from the system\"\"\"\n deleteProfile(options: EntityDeletionOptions): MutationResult\n \"\"\"\n Delete a project. This will mark a project for deletion so it stops showing in search results. The actual deletion\n will happen in the background and only complete once the purgeProject() call has been fired.\n \"\"\"\n deleteProject(options: EntityDeletionOptions, projectId: ID!): MutationResult\n \"\"\"\n Delete is a super-rare, super high-privilege command that will only work for admins\n because it means deleting a project type and all projects with that type\n \"\"\"\n deleteProjectType(id: String!): MutationResult\n deleteSavedSearch(id: ID!): MutationResult\n deleteTransfer(transferId: ID!): MutationResult\n \"\"\"\n When all files have been uploaded you can call this to start processing the project\n \"\"\"\n finalizeProjectUpload(token: String!): JobStatusObj\n \"\"\"\n Purge a project. This will delete a project from the system. This is a machine-only call used by the janitor\n \"\"\"\n purgeProject(projectId: ID!): MutationResult\n reIndexProjectXML(projectId: ID!): WatcherOutput\n rebuildWebTiles(force: Boolean, projectId: ID!, rsXPaths: [String!]): RebuildWebTilesResponse!\n removeCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n Kick a user (or yourself) from the org (Owners cannot be removed until they are downgraded)\n \"\"\"\n removeOrganizationMember(organizationId: ID!, userId: ID!): MutationResult\n \"\"\"\n Users can request access to an organization with initial role of VIEWER. the invite will have the state: REQUESTED\n \"\"\"\n requestOrganizationInvite(organizationId: ID!): OrganizationInvite\n \"\"\"Organization admins/owners can resend expired invitiations.\"\"\"\n resendOrganizationInvite(id: ID!): OrganizationInvite\n \"\"\"updateCollection: Note that with projectIds, order matters\"\"\"\n updateCollection(collection: CollectionInput, id: ID!): Collection\n \"\"\"ids: Notification ids (large interger timestamp)\"\"\"\n updateNotifications(ids: [ID!]!, markAs: NotificationOperationEnum!): MutationResult\n updateOrganization(id: ID!, organization: OrganizationInput!): Organization\n updateOrganizationMember(organizationId: ID!, role: OrganizationRoleEnum, userId: ID!): OrganizationUser\n \"\"\"Updating your user proile\"\"\"\n updateProfile(profile: ProfileInput!): Profile\n \"\"\"\n Update a project. This is the main mutation for updating a project\n @param projectId: The ID of the project\n @param project: The project object\n @param skipXMLUpdate: If true then the XML file is not updated. This is used by the uploader\n @param agentId: The ID of the agent. This will become the updatedBy field in the project\n \"\"\"\n updateProject(agentId: ID, project: ProjectInput!, projectId: ID!, skipXMLUpdate: Boolean): Project\n updateProjectDataset(dataset: DatasetUpdate!, projectId: ID!, rsXPath: String!): Dataset\n updateProjectDatasetLayer(datasetLayer: DatasetLayerUpdate!, lyrName: String!, projectId: ID!, rsXPath: String!): DatasetLayer\n updateProjectQAQC(projectId: ID!, qaqc: QAQCEventInput!, qaqcId: ID!): QAQCEvent\n \"\"\"\n This call allows you to alter the project type object (including the ID)\n If the ID is changed then we'll need to go through all projects of that type\n and rename them. This should be a super rare operation but it's here for completeness\n \"\"\"\n updateProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n updateSavedSearch(id: ID!, savedSearch: SavedSearchInput!): SavedSearch\n updateStar(id: ID!, starred: Boolean!, type: StarrableTypesEnum!): MutationResult\n \"\"\"\n Transfers are fairly immutable. You can only change the note and the state\n \"\"\"\n updateTransfer(note: String, state: TransferStateEnum, transferId: ID!): Transfer\n zipRebuild(force: Boolean, projectId: ID!): Project\n}\n\n\"\"\"Generic Mutation results\"\"\"\ntype MutationResult {\n \"\"\"The error (if there is one)\"\"\"\n error: String\n \"\"\"the ID of the object being mutated\"\"\"\n ids: [ID!]\n \"\"\"Any non-error message returned by the mutation for use in the UI\"\"\"\n message: String\n \"\"\"did this mutation succeed?\"\"\"\n success: Boolean!\n}\n\ntype MyStars {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n users(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedUsers!\n}\n\ntype Notification {\n id: ID!\n object: DBObjNotifications!\n seen: Boolean!\n \"\"\"Same as Obj. this is a stripped-down user object\"\"\"\n subject: DBObjNotifications!\n time: DateTime!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationActionsEnum {\n CREATED\n DELETED\n RENAMED\n TRANSFERRED\n UPDATED\n}\n\ninput NotificationInput {\n object: DBObjNotificationsInput!\n subject: DBObjNotificationsInput!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationOperationEnum {\n DELETE\n MARK_READ\n MARK_UNREAD\n}\n\nenum NotificationTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\n\"\"\"On a per-object basis, tell me what I can and can't do\"\"\"\ntype ObjectPermissions {\n delete: Boolean\n update: Boolean\n view: Boolean\n}\n\ntype Organization implements DBObj & HasStar {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n meta: [MetaData!]!\n \"\"\"\n This is the role of the user making the query (or the role of the requested user)\n \"\"\"\n myRole: OrganizationRoleEnum!\n name: String!\n \"\"\"List of invites to manage\"\"\"\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"\n List of this organization's approved user (Does not include pending invites)\n \"\"\"\n organizationUsers(limit: Int!, offset: Int!, role: OrganizationRoleEnum, sort: [SearchSortEnum!]): PaginatedOrganizationUsers!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n preferences: JSONObject\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput OrganizationInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Social Links\"\"\"\n social: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype OrganizationInvite implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n email: String\n id: ID!\n \"\"\"\n The user being invited. Null if they don't have an account in the system yet\n \"\"\"\n invitee: User\n inviter: User!\n organization: Organization!\n retries: Int!\n role: OrganizationInviteRoleEnum!\n state: OrganizationInviteStateEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum OrganizationInviteRoleEnum {\n ADMIN\n CONTRIBUTOR\n VIEWER\n}\n\nenum OrganizationInviteStateEnum {\n ACCEPTED\n EXPIRED\n INVITED\n REJECTED\n REQUESTED\n}\n\nenum OrganizationRoleEnum {\n ADMIN\n CONTRIBUTOR\n NONE\n OWNER\n VIEWER\n}\n\ntype OrganizationUser {\n organization: Organization!\n role: OrganizationRoleEnum!\n user: User!\n}\n\nunion Owner = Organization | User\n\ninput OwnerInput {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\nenum OwnerInputTypesEnum {\n ORGANIZATION\n USER\n}\n\nunion Owners = PaginatedUsers\n\ntype PaginatedCollections implements Pagination {\n items: [Collection!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedDatasets implements Pagination {\n items: [Dataset!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedFileDownloadMeta implements Pagination {\n items: [FileDownloadMeta!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedNotifications implements Pagination {\n items: [Notification!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationInvites implements Pagination {\n items: [OrganizationInvite!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationUsers implements Pagination {\n items: [OrganizationUser!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizations implements Pagination {\n items: [Organization!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjectTypes implements Pagination {\n items: [ProjectType!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjects implements Pagination {\n items: [Project!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedQAQCEvents implements Pagination {\n items: [QAQCEvent!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedSavedSearches implements Pagination {\n items: [SavedSearch!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedUsers implements Pagination {\n items: [User!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"Generic Pagination Interface\"\"\"\ninterface Pagination {\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"A Profile is MY User object and there are extra fields I can look at\"\"\"\ntype Profile implements DBObj & UserInterface {\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"If the user has never logged in here this is uninitialized\"\"\"\n initialized: Boolean\n isAdmin: Boolean!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n notifications(limit: Int!, offset: Int!, op: NotificationOperationEnum): PaginatedNotifications!\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n preferences: JSONObject!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n stars: MyStars!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput ProfileInput {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliationInput!]\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n avatarToken: String\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearAvatar: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Specify a set of connection strings for Social media\"\"\"\n socialLinks: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype Project implements DBObj & HasOwner & HasStar {\n \"\"\"Banner image (optional)\"\"\"\n bounds: ProjectBounds\n citation: String\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n datasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n deleted: Boolean!\n description: String!\n dirty: Boolean!\n files: [FileDownloadMeta!]!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n projectType: ProjectType!\n qaqc(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedQAQCEvents!\n ref: String!\n sponsor: Owner\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n \"\"\"Bytesize of the unzipped project\"\"\"\n totalSize: BigInt\n tree: ProjectTree!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectVisibilityEnum!\n}\n\ntype ProjectBounds implements DBSimpleObj {\n \"\"\"Calculated area of \"\"\"\n area: Float\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]!\n \"\"\"centroid: [longitude, latitude]\"\"\"\n centroid: [Float!]!\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n Geohash is how we do clustering in ElasticSearch\n https://github.com/sunng87/node-geohash\n https://www.npmjs.com/package/ngeohash\n https://www.npmjs.com/package/@mapbox/geojson-area\n https://www.npmjs.com/package/@mapbox/geojson-extent\n https://www.npmjs.com/package/@mapbox/geojson-normalize\n https://github.com/hackergrrl/geojson-polygons-equal/blob/master/index.js\n https://github.com/jczaplew/geojson-precision/blob/master/index.js\n https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html\n \"\"\"\n geoHash: String\n \"\"\"\n This id is unique to specific shapes in the DB\n Useful for grouping multiple projects with the same bounding polygon\n It is a GUID\n \"\"\"\n id: ID!\n \"\"\"polygon: Simplified GeoJSON of project outputs.\"\"\"\n polygonUrl: URL!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum ProjectDeleteChoicesEnum {\n DELETE\n DELETE_COMPLETE\n}\n\nenum ProjectGroupVisibilityEnum {\n PUBLIC\n SECRET\n}\n\ninput ProjectInput {\n \"\"\"\n Project bounds object code you were given from the checkUploadBounds endpoint\n \"\"\"\n boundsToken: String\n \"\"\"Scientitfic or accademic citation (string)\"\"\"\n citation: String\n \"\"\"Resets/deletes the project's bounds\"\"\"\n clearBounds: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"remove the sponsor for the proejct\"\"\"\n clearSponsor: Boolean\n \"\"\"Attach new datasets or add/remove linked datasets\"\"\"\n datasets: [DatasetInput!]\n \"\"\"\n ONLY FOR UPDATING: Specify dataset ids (and by that I mean rsXPaths) to be deleted\n \"\"\"\n deleteDatasets: [ID!]\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the project.\"\"\"\n name: String\n \"\"\"Attache any QAQC tasks in order\"\"\"\n qaqc: [QAQCEventInput!]\n \"\"\"Optional: Sponsor ID\"\"\"\n sponsor: OwnerInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Byte size of entire project uncompressed\"\"\"\n totalSize: BigInt\n \"\"\"Project visibility settings: Either PUBLIC, PRIVATE or SECRET\"\"\"\n visibility: ProjectVisibilityEnum\n}\n\ntype ProjectSearchMeta {\n \"\"\"\n The area covered by all projects returned\n (all overlaps are included)\n \"\"\"\n area: Float\n \"\"\"\n bbox: [minLng, minLat, maxLng, maxLat]\n The geo bounds of all possible results\n (Applies to projects only)\n \"\"\"\n bbox: [Float!]\n \"\"\"\n Histogram of distances\n (Applies to projects only)\n \"\"\"\n geoBuckets: JSONObject\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"\n OpenSearch query/results for development. Only present when debug=true on the query and the user is an admin.\n \"\"\"\n openSearch: JSONObject\n \"\"\"\n ProjectTypes: Key-balue pairs of project types and counts\n (Applies to projects only)\n \"\"\"\n projectTypes: JSONObject\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ntype ProjectSearchParams {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDate\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaData!]\n name: String\n ownedBy: SearchOwner\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDate\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ninput ProjectSearchParamsInput {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"\n Filter to projects that have this particular Bound polygon assoicated with them by id\n \"\"\"\n boundsId: ID\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to projects owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n}\n\ntype ProjectTree {\n branches: [ProjectTreeBranch!]!\n defaultView: ID\n description: String\n leaves: [ProjectTreeLeaf!]!\n name: String\n views: [ProjectTreeView!]!\n}\n\ntype ProjectTreeBranch {\n \"\"\"Branch ID (generated at parse time)\"\"\"\n bid: Int!\n collapsed: Boolean\n label: String!\n \"\"\"Parent ID (generated at parse time)\"\"\"\n pid: Int!\n}\n\n\"\"\"\nProjectTreeLayerTypes is an enumeration to help us display layers with the\ncorrect icon and assign them to the right slot\n\"\"\"\nenum ProjectTreeLayerTypeEnum {\n FILE\n LINE\n POINT\n POLYGON\n RASTER\n REPORT\n TIN\n}\n\ntype ProjectTreeLeaf {\n \"\"\"\n blLayerId: The id on the Node element from the business logic that we use in Views to \n reference leaves in the tree\n \"\"\"\n blLayerId: String\n \"\"\"\n This is going to let us find the actual file we need to download (if applicable)\n \"\"\"\n filePath: String\n \"\"\"Tree id of this leaf. This is generated at parse-time\"\"\"\n id: Int!\n label: String!\n \"\"\"from the BL (Optional)\"\"\"\n labelxpath: String\n \"\"\"from BL. Renderable WebRave Types (Not DS Types)\"\"\"\n layerType: ProjectTreeLayerTypeEnum!\n \"\"\"This is going to let us find the DasetLayer (if applicaple)\"\"\"\n lyrName: String\n \"\"\"Business Logic id=\"\" attribute\"\"\"\n nodeId: ID\n \"\"\"\n parent ID (relates to bid from ProjectTreeBranch) \n generated at parse-time\n \"\"\"\n pid: Int!\n \"\"\"\n This is going to let us find the Dataset\n corresponding to the leaf we're trying to render\n \"\"\"\n rsXPath: String!\n symbology: String\n transparency: Int\n}\n\ntype ProjectTreeView {\n description: String\n id: ID!\n layers: [ProjectTreeViewLayer!]!\n name: String!\n}\n\ntype ProjectTreeViewLayer {\n id: ID!\n visible: Boolean\n}\n\ntype ProjectType implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n machineName: String!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n state: ProjectTypeStateEnum!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n url: URL\n}\n\ninput ProjectTypeInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaDataInput!]\n name: String\n summary: String\n url: URL\n}\n\nenum ProjectTypeStateEnum {\n ACTIVE\n DELETED\n SUGGESTED\n}\n\ntype ProjectUploadUrl {\n fields: JSONObject\n origPath: String\n url: String!\n}\n\ntype ProjectValidation {\n errors: [ProjectValidationError]\n valid: Boolean\n}\n\ntype ProjectValidationError {\n code: String\n message: String!\n severity: SeverityEnum\n}\n\nenum ProjectVisibilityEnum {\n PRIVATE\n PUBLIC\n SECRET\n}\n\ntype QAQCEvent implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The date this task was performed. This will help us sort out a timeline\n for the QA/QC workflow\n \"\"\"\n datePerformed: DateTime!\n description: String!\n id: ID!\n \"\"\"QA/QC Nodes may have extra metadata but it is not mandatory\"\"\"\n meta: [MetaData!]!\n \"\"\"The QAQC Task Name\"\"\"\n name: String!\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts\n \"\"\"\n performedBy: String!\n \"\"\"The state of this QAQC Task \"\"\"\n state: QAQCStateEnum!\n summary: String!\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [Link!]\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput QAQCEventInput {\n datePerformed: DateTime!\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n name: String\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts \n \"\"\"\n performedBy: String!\n \"\"\"The state of this QA/QC Task\"\"\"\n state: QAQCStateEnum!\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [LinkInput!]\n}\n\nenum QAQCStateEnum {\n FAILED\n PASSED\n PROVISIONAL\n}\n\ntype Query {\n \"\"\"\n Works for images, bounds and projects. Checks if they have been processed and are ready for use\n \"\"\"\n checkUpload(token: String!): JobStatusObj\n collection(id: ID!): Collection\n dirtyProjects(limit: Int!, offset: Int!): PaginatedProjects\n downloadFile(filePath: String!, projectId: ID!): FileDownloadMeta\n downloadZip(projectId: ID!): ZipFileDownloadMeta\n getLayerTiles(projectId: ID!, projectTypeId: String, rsXPath: String!): TileService\n \"\"\"\n getWebSymbology for a given project type. These types will be retrived from the curated WebRave Symbology repo\n \"\"\"\n getWebSymbology(isRaster: Boolean, name: String!, projectTypeId: String): Symbology\n \"\"\"\n There are some useful properties that are useful for the CLI and other apps\n \"\"\"\n info: WarehouseInfo\n organization(id: ID!): Organization\n \"\"\"\n Profile includes the User object but also specific fields to the person logged in\n \"\"\"\n profile: Profile\n project(id: ID!): Project\n projectType(id: String!): ProjectType\n \"\"\"projectTypes list. Default state is ACTIVE\"\"\"\n projectTypes(limit: Int!, offset: Int!, state: ProjectTypeStateEnum): PaginatedProjectTypes\n requestUploadBounds: UploadUrl\n requestUploadImage(entityId: ID!, entityType: EntitiesWithImagesEnum!): UploadUrl\n \"\"\"\n Request an upload start. Writes a manifest file on the upload bucket\n and creates upload urls for all the files we want to add. \n This is also wher ethe referenved/unreferenced sorting happens\n \n Notes:\n \n - If projectId is given then this projet is uploaded as an UPDATE operation\n - If token is given then we just return a previously calculated download object\n - If neither token nor projectId is given then this is processed as a new project\n \n Arguments:\n \n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n - etags: a string list of etags (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - sizes: a string list of file sizes (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - noDelete: indicates that we do NOT want to touch remote files that are not also present on the local server\n - tags: a list of tags to add to the project (these are the data exchange tags)\n - visibility: the visibility of the project. Defaults to PUBLIC\n \"\"\"\n requestUploadProject(etags: [String!]!, files: [String!]!, noDelete: Boolean, owner: OwnerInput, projectId: String, sizes: [BigInt!]!, tags: [String!], token: String, visibility: ProjectVisibilityEnum): UploadProjectRequest\n \"\"\"\n Using requestUploadProject() you can get a valid upload token. From there you can ask for presigned urls for any file you\n have specified above\n \"\"\"\n requestUploadProjectFilesUrl(files: [String!]!, token: String!): [UploadProjectFileUrls]\n savedSearch(id: ID!): SavedSearch\n searchCollections(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchCollectionPagination!\n \"\"\"\n This is a complementary search to \"searchProjects\". It can be run with essentially the same\n parameters\n \n Note: params.bbox MUST be included for the searchProjectsMap\n clusters: the number of clusters we should aim for\n \"\"\"\n searchMapBounds(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!): SearchMapBoundsResult!\n \"\"\"\n Discussion here https://github.com/Riverscapes/rs-web-monorepo/discussions/251\n limit: the maximum number of clusters to get back. After this number the list is truncated and any remaining projects are simply represented by the \"remaining\" property\n precision: The size of the grid to place the clusters on. We use npm's ngeohash for gridding\n \"\"\"\n searchMapClusters(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!, precision: Int!): SearchMapClusterResult!\n searchOrganizations(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchOrganizationPagination!\n searchProjects(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: ProjectSearchParamsInput!, sort: [SearchSortEnum!]): SearchProjectPagination!\n searchSavedSearches(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchSavedSearchPagination!\n \"\"\"\n As-you-type suggestions:\n TODO: this needs to be typed but for now it's just pure JSON\n \"\"\"\n searchSuggest(minScore: Float, text: String!, type: StarrableTypesEnum): SearchSuggestionResults\n searchUsers(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchUserPagination!\n \"\"\"A User is any user in the system\"\"\"\n user(id: ID!): User\n \"\"\"\n Validate a raw project.rs.xml file to check if it is a valida candidate for uploading\n It is highly recommended that you call this before requestUploadProjectFileUrls or uploading\n files to prevent a lengthy process with a preventable error at the end\n \n - xml: String contents of the project.rs.xml file\n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n \"\"\"\n validateProject(files: [String!]!, owner: OwnerInput, xml: String!): ProjectValidation\n}\n\nenum RampTypeEnum {\n DISCRETE\n EXACT\n INTERPOLATED\n}\n\ntype RebuildWebTilesResponse {\n queued: [String!]\n skipped: [String!]\n}\n\ntype SavedSearch implements DBObj & HasOwner & HasStar & HasTags {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n description: String!\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): SearchProjectPagination!\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParams!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput SavedSearchInput {\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParamsInput\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this object\"\"\"\n tags: [String!]\n \"\"\"Saved Search visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ntype SearchCollection implements SearchResult {\n highlights: JSONObject\n item: Collection!\n score: Float\n}\n\ntype SearchCollectionPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchCollection!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDataset implements SearchResult {\n highlights: JSONObject\n item: Dataset!\n score: Float\n}\n\ntype SearchDatasetPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchDataset!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDate {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ninput SearchDateInput {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ntype SearchMapBoundsItem {\n bounds: ProjectBounds!\n clusters: [MapCluster!]!\n projectCount: Int!\n}\n\ntype SearchMapBoundsResult {\n bounds: [SearchMapBoundsItem!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMapClusterResult {\n clusters: [MapCluster!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMeta {\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"Search Meta that are common to all types\"\"\"\ninterface SearchMetaInterface {\n \"\"\"The maximum relevance score\"\"\"\n maxScore: Float\n \"\"\"Collection of stats about the Metadata key value pairs for this object\"\"\"\n metaDataBuckets: JSONObject!\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\ntype SearchNotification implements SearchResult {\n highlights: JSONObject\n item: Notification!\n score: Float\n}\n\ntype SearchNotificationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchNotification!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganization implements SearchResult {\n highlights: JSONObject\n item: Organization!\n score: Float\n}\n\ntype SearchOrganizationInvite implements SearchResult {\n highlights: JSONObject\n item: OrganizationInvite!\n score: Float\n}\n\ntype SearchOrganizationInvitePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganizationInvite!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganizationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganization!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOwner {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\ninterface SearchPagination implements Pagination {\n \"\"\"The limit used for this query.\"\"\"\n limit: Int!\n \"\"\"The record offset for this query.\"\"\"\n offset: Int!\n \"\"\"The maximum score if this is a search result. Null otherwise\"\"\"\n stats: SearchStats\n \"\"\"\n The total objects in the system. OpenSearch can return this easily so it's useful for building pagination UI.\n \"\"\"\n total: Int!\n}\n\n\"\"\"SearchParams is used for search queries for everything except projects\"\"\"\ninput SearchParamsInput {\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only items that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to items owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n tags: [String!]\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n}\n\ntype SearchProject implements SearchResult {\n highlights: JSONObject\n item: Project!\n score: Float\n}\n\ntype SearchProjectPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProject!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchProjectType implements SearchResult {\n highlights: JSONObject\n item: ProjectType!\n score: Float\n}\n\ntype SearchProjectTypePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProjectType!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchQAQCEvent implements SearchResult {\n highlights: JSONObject\n item: QAQCEvent!\n score: Float\n}\n\ntype SearchQAQCEventPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchQAQCEvent!]!\n stats: SearchStats\n total: Int!\n}\n\ninterface SearchResult {\n \"\"\"\n Takes the form:\n \"highlights\" : {\n \"name\" : [\n \"Riverscapes <span>Context</span> for HUC 16040102\"\n ],\n \"fieldName\" : [\n \"match1 <span>with</span> highlight\",\n \"match2 <span>with</span> highlight\"\n ]\n } \n \"\"\"\n highlights: JSONObject\n score: Float\n}\n\n\"\"\"Search Meta that appears on individual items\"\"\"\ninterface SearchResultMeta {\n highlights: JSONObject\n score: Float!\n}\n\ntype SearchSavedSearch implements SearchResult {\n highlights: JSONObject\n item: SavedSearch!\n score: Float\n}\n\ntype SearchSavedSearchPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchSavedSearch!]!\n stats: SearchStats\n total: Int!\n}\n\n\"\"\"\nThese are the ways you can sort search results\n\nRanked sorting of return results. If NULL then the score will be the only factor\nIf specified then score is implicitly the last sort criteria\n\"\"\"\nenum SearchSortEnum {\n AREA_DESC\n DATE_CREATED_ASC\n DATE_CREATED_DESC\n DATE_UPDATED_ASC\n DATE_UPDATED_DESC\n MINE\n NAME_ASC\n NAME_DESC\n}\n\nunion SearchStats = ProjectSearchMeta | SearchMeta\n\ntype SearchSuggestionResult implements SearchResult {\n highlights: JSONObject\n item: DBObj\n score: Float\n}\n\ntype SearchSuggestionResults {\n metaKey: [SearchSuggestions!]!\n metaValues: [SearchSuggestions!]!\n results: [SearchSuggestionResult!]!\n tags: [SearchSuggestions!]!\n}\n\ntype SearchSuggestions {\n freq: Int\n score: Float!\n text: String!\n}\n\ntype SearchUser implements SearchResult {\n highlights: JSONObject\n item: User!\n score: Float\n}\n\ntype SearchUserPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchUser!]!\n stats: SearchStats\n total: Int!\n}\n\nenum SearchableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\nenum SeverityEnum {\n CRITICAL\n DEBUG\n ERROR\n INFO\n WARNING\n}\n\n\"\"\"Links to various social networks\"\"\"\ntype SocialLinks {\n facebook: URL\n instagram: URL\n linkedIn: URL\n tiktok: URL\n twitter: URL\n website: URL\n}\n\ninput SocialLinksInput {\n facebook: String\n instagram: String\n linkedIn: String\n tiktok: String\n twitter: String\n website: URL\n}\n\nenum StarrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\ntype Symbology {\n error: String\n legend: [[String!]!]\n mapboxJson: JSONObject\n name: String!\n rampType: RampTypeEnum\n state: SymbologyStateEnum!\n url: String\n}\n\n\"\"\"SymbologyStateEnum\"\"\"\nenum SymbologyStateEnum {\n ERROR\n FETCHING\n FOUND\n MISSING\n NOT_APPLICABLE\n UNKNOWN\n}\n\ntype TileIndexOriginFile implements FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype TileService {\n bounds: [Float]\n duration: Float\n errorMsg: String\n format: String\n indexUrl: String\n lastState: DateTime\n layers: [String!]\n localPath: String\n maxZoom: Int\n minZoom: Int\n numFiles: Int\n originFile: TileIndexOriginFile\n projectId: String\n rasterStats: JSONObject\n rsXPath: String!\n started: DateTime\n state: TilingStateEnum!\n symbologies: [String!]\n tileType: TileTypesEnum\n url: String\n}\n\nenum TileTypesEnum {\n HTML\n RASTER\n VECTOR_GPKG\n VECTOR_SHP\n}\n\nenum TilingStateEnum {\n CREATING\n FETCHING\n FETCH_ERROR\n INDEX_NOT_FOUND\n LAYER_NOT_FOUND\n NOT_APPLICABLE\n NO_GEOMETRIES\n QUEUED\n SUCCESS\n TILING_ERROR\n TIMEOUT\n UNKNOWN\n}\n\ntype Transfer implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n id: ID!\n includeProjects: Boolean\n \"\"\"Allows the request to have an attached note\"\"\"\n note: String!\n state: TransferStateEnum!\n \"\"\"Sorting and pagination are not available for these items\"\"\"\n transferObjects: [TransferObject!]!\n transferTo: Owner!\n transferType: TransferrableTypesEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput TransferEntityItemsInput {\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n}\n\ninput TransferInput {\n \"\"\"\n (Optional) When transferring a collection you can choose to transfer any projects in that collection (that you own) as well\n \"\"\"\n includeProjects: Boolean\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"DBIds of the items to transfer\"\"\"\n objectIds: [ID!]!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n \"\"\"\n What type of transfer is this:\n - project(s): one or more projects\n - collection: Transfer the colletion with an option for any owned projects\n - organization: this is different from simply making someone else the owner\n this means move all projects / collections to another user or org.\n - user: Transfer all my projects/collections to another org/user\n \"\"\"\n transferType: TransferrableTypesEnum!\n}\n\nunion TransferObject = Collection | Organization | Project | User\n\nenum TransferStateEnum {\n ACCEPTED\n EXPIRED\n IN_PROGRESS\n PROPOSED\n REJECTED\n}\n\nenum TransferrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n USER\n}\n\nscalar URL\n\ntype UploadProjectFileUrls {\n relPath: String!\n urls: [String]\n}\n\ntype UploadProjectRequest {\n create: [String!]!\n delete: [String!]!\n newId: String\n token: String!\n update: [String!]!\n}\n\ntype UploadUrl {\n fields: JSONObject!\n token: String!\n url: String!\n}\n\n\"\"\"A User object is any user in the system\"\"\"\ntype User implements DBObj & UserInterface {\n \"\"\"User affiliations (usually external to the data exchange)\"\"\"\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"\nAffiliation can be anything as long as it fits as a list of\nstrings with URLs\n\"\"\"\ntype UserAffiliation {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninput UserAffiliationInput {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninterface UserInterface {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliation]!\n \"\"\"URL To Avatar image\"\"\"\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"When did we last see the user?\"\"\"\n lastLogin: DateTime!\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n \"\"\"Object containing URLS to social media sites\"\"\"\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ntype WarehouseInfo {\n api: String\n businessLogic: String\n projectFile: String\n warehouse: String\n xml: String\n xsd: String\n}\n\ntype WatcherOutput {\n errors: [String]\n message: String\n results: [String]\n}\n\ntype ZipFileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n pendingSince: DateTime\n progress: Int\n size: BigInt\n}\n"], ["\nschema {\n query: Query\n mutation: Mutation\n}\n\nscalar BigInt\n\ntype Collection implements DBObj & HasOwner & HasStar & HasTags {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"(Optional) Who to contact (might be different from owner)\"\"\"\n contact: User\n createdBy: User!\n createdOn: DateTime!\n description: String!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n \"\"\"Paginated, ordered list of projects this collection contains\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput CollectionInput {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"Remove the contact for this collection\"\"\"\n clearContact: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"User ID of the contact for this collection (Optional)\"\"\"\n contact: OwnerInput\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Collection visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ninterface DBObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Key-value pairs for attaching metadata to objects\"\"\"\n meta: [MetaData!]!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\n\"\"\"Notifications get a stripped-down version of the DBObj\"\"\"\ninterface DBObjNotifications {\n createdBy: User!\n \"\"\"\n User who created object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields\n \"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n updatedBy: User!\n \"\"\"\n User who last updated object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields \n \"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninput DBObjNotificationsInput {\n \"\"\"User who created object\"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninterface DBSimpleObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ntype Dataset implements DBObj {\n analysisId: String\n \"\"\"These are the projects that use this layer\"\"\"\n attachedDatasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n citation: String\n createdBy: User!\n createdOn: DateTime!\n datasetContainer: DatasetContainerTypesEnum!\n \"\"\"\n All of these fields are actually derivatives of the rsXPath\n \n The type of dataset helps us understand how to work with it\n These types are derived directly from the XML enumeration\n \"\"\"\n datasetType: DatasetTypeEnum!\n datasetXMLId: String!\n description: String!\n \"\"\"\n For Direct S3 File listings. This is a query that depends on the type\n of dataset. Sometimes we also need sidecars to come back\n \"\"\"\n files: [FileDownloadMeta!]!\n \"\"\"\n The ID for datasets takes the form 'PROJ_ORIGIN_GUID/REALIZATION_ID/DATASET_ID'\n and corresponds to the S3 path we store things\n \n NOTE: ID is different from the dsId (which is the id attribute on the XML node) \n \"\"\"\n id: ID!\n \"\"\"Some datasets can have sublayers (mainly just Geopackages)\"\"\"\n layers: [DatasetLayer]\n localPath: String!\n meta: [MetaData!]!\n name: String!\n \"\"\"\n The original dataset (if there is one). THis is null if this is the origin\n \"\"\"\n origin: Dataset\n \"\"\"Backwards lookup of the project this dataset belongs to\"\"\"\n project: Project!\n realizationXMLId: String\n \"\"\"Backwards lookup to the project referenced b\"\"\"\n refProject: Project\n rsXPath: String!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"These are the XML tag containers where you can find datasets\"\"\"\nenum DatasetContainerTypesEnum {\n CommonDatasets\n Configuration\n Datasets\n Inputs\n Intermediates\n Logs\n Outputs\n Products\n}\n\ninput DatasetInput {\n citation: String\n description: String\n \"\"\"\n Optional. If this is a linked dataset then its extRef should be present. this is an attribute on the dataset node in the XML\n and it takes the form:\n badfe8c1-0342-4876-8fac-b2eb5493a90f:Project/REALIZATION/SLOPE\n PROJECT_UUID:rsXPath\n \"\"\"\n extRef: ID\n \"\"\"Geopackages can have sublayers\"\"\"\n layers: [DatasetLayerInput!]\n \"\"\"\n local path on the user's system. This comes directly from the <Path> node in the project xml\n \"\"\"\n localPath: String!\n meta: [MetaDataInput!]\n name: String!\n \"\"\"\n This is the rsXPath to the node in the project (not the origin project)\n It is a proprietary path system to uniquely identify datasets in our XML files\n This rsXPath takes the form: 'Project/Realizations/Realization#REAL1/Intermediates/Geopackage#GEO1'\n where the hashes are shorthand for IDS\n \"\"\"\n rsXPath: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ntype DatasetLayer {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaData!]\n name: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ninput DatasetLayerInput {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\ninput DatasetLayerUpdate {\n citation: String\n description: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\n\"\"\"\nenum DatasetTypeEnum {\n AuxInstrumentFile\n CSV\n ConfigFile\n DEM\n DataTable\n Database\n File\n Geopackage\n HTMLFile\n HillShade\n Image\n InstrumentFile\n LogFile\n MSAccessDB\n PDF\n Raster\n SQLiteDB\n SurveyQualityDB\n TIN\n Vector\n Video\n ZipFile\n}\n\ninput DatasetUpdate {\n citation: String\n description: String\n dsId: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\nscalar DateTime\n\nscalar EmailAddress\n\nenum EntitiesWithImagesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n PROJECT_TYPE\n USER\n}\n\nenum EntityDeleteActionsEnum {\n DELETE\n DELETE_COMPLETE\n MAKE_PUBLIC\n REQUEST_TRANSFER\n}\n\ninput EntityDeletionOptions {\n \"\"\"\n TotalDelete means This item has been cleaned up completely including\n shared dataset: this will break links for shared projects so it should\n be the exception and not the rule.\n \"\"\"\n totalDelete: Boolean\n \"\"\"\n Optional: request transfer of all projects and collections to another Owner in the system\n \"\"\"\n transfer: TransferEntityItemsInput\n}\n\ntype FileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ninput FileDownloadMetaInput {\n contentType: String\n localPath: String!\n md5: String!\n size: BigInt\n}\n\ninterface FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype FileUploadMeta {\n downloadUrl: String!\n key: String!\n}\n\ninterface HasOwner {\n ownedBy: Owner!\n}\n\ninterface HasStar {\n starred: Boolean!\n starredCount: Int!\n}\n\ninterface HasTags {\n tags: [String!]!\n}\n\n\"\"\"Small medium and large image sizes\"\"\"\ntype HeroImage {\n lg: URL\n md: URL\n sm: URL\n}\n\nenum ImageTypeEnum {\n AVATAR\n HERO\n LOGO\n}\n\nscalar JSONObject\n\nenum JobStatusEnum {\n FAILED\n PROCESSING\n READY\n SUCCESS\n UNKNOWN\n}\n\n\"\"\"\nJobStatusObj: The shape of the JSON file that stores the state of the uploaded item.\n\"\"\"\ntype JobStatusObj {\n \"\"\"\n Jobs may store different settings. leave a data param as JSONObject so we can extend it\n without needing to modify the schema\n \"\"\"\n data: JSONObject\n errors: [String!]\n metaData: JSONObject\n percentComplete: Int\n projectId: String\n status: JobStatusEnum!\n}\n\ntype Link {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ninput LinkInput {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ntype MapCluster {\n \"\"\"[longitude, latitude]\"\"\"\n coords: [Float!]!\n count: Int!\n \"\"\"check out npm's 'ngeogrid' for how to turn this back into coordinates\"\"\"\n hash: String!\n}\n\ntype MetaData {\n ext: MetaDataExtEnum\n key: String!\n locked: Boolean\n type: MetaDataTypeEnum\n value: String\n}\n\nenum MetaDataExtEnum {\n DATASET\n PROJECT\n WAREHOUSE\n}\n\n\"\"\"When submitting metadata use this object\"\"\"\ninput MetaDataInput {\n \"\"\"\n If this metadata was impored from an external project then list what kind of MetaData it is.\n Options: PROJECT, DATASET, WAREHOUSE\n \"\"\"\n ext: MetaDataExtEnum\n \"\"\"Metadata key string\"\"\"\n key: String!\n \"\"\"\n Optional locked flag. Defaults to false. If true then this metadata value cannot be edited by the UI\n \"\"\"\n locked: Boolean\n \"\"\"Optional meta type value. Defaults to String\"\"\"\n type: MetaDataTypeEnum\n \"\"\"\n Strignified metadata value\n NOTE: In the XML spec null is allowed so technically it is allowed here too.\n \"\"\"\n value: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\nfind it here: RiverscapesXML/Projects/XSD/V2/RiverscapesProject.xsd\n\"\"\"\nenum MetaDataTypeEnum {\n BOOLEAN\n FILEPATH\n FLOAT\n GUID\n HIDDEN\n IMAGE\n INT\n ISODATE\n JSON\n MARKDOWN\n RICHTEXT\n STRING\n TIMESTAMP\n URL\n VIDEO\n}\n\ntype Mutation {\n \"\"\"\n Accept or reject an org invite. State afterward will be ACCEPTED or REJECTED\n \"\"\"\n actionOrganizationInvite(accept: Boolean!, id: ID!, role: OrganizationInviteRoleEnum): OrganizationInvite\n addCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n ADMIN: Scan over the dynamoDB and create appropriate OpenSearch entries\n \"\"\"\n adminReIndexOpenSearch(paginationToken: String): String\n \"\"\"\n ADMIN: Recreate/empty opensearch indeces (you will need to run adminRebuildOpenSearch after this)\n \"\"\"\n adminRecreateOpenSearch: Boolean\n \"\"\"ADMIN: Wipe DynamoDB except for users\"\"\"\n adminWipeDynamo: Int\n changeProjectOwner(owner: OwnerInput!, projectId: ID!): Project\n \"\"\"Create a collection of projects\"\"\"\n createCollection(collection: CollectionInput!, orgId: ID): Collection\n createNotification(notification: NotificationInput): Notification\n createOrganization(organization: OrganizationInput!): Organization\n \"\"\"\n Organization admins/owners can invite others. the invite will have the state: INVITED\n One of userId or email must be provided.\n \"\"\"\n createOrganizationInvite(email: String, organizationId: ID!, role: OrganizationInviteRoleEnum, userId: ID): OrganizationInvite\n \"\"\"For user when logging in for the first time\"\"\"\n createProfile(id: ID, profile: ProfileInput!): Profile\n \"\"\"\n Create a new project. This is the main mutation for creating a new project\n @param projectId: (optional) The ID of the project. If not given then a new one is generated. If it exists in the system then an error is thrown.\n @param project: The project object\n @param projectTypeId: The ID of the project type\n @param orgId: The ID of the organization. This will become the project owner. This field is mutually exclusive with userId\n @param userId: The ID of the user. This will become the project owner. This field is mutually exclusive with orgId\n @param agentId: The ID of the agent. This will become the createdBy field in the project\n \"\"\"\n createProject(agentId: ID, orgId: ID, project: ProjectInput!, projectId: ID, projectTypeId: String, userId: ID): Project\n \"\"\"\n For most users \"createProject\" is actually \"sugest a project type\" and will be created\n with state \"SUGGESTED\". Only admins can create a ProjectType that starts with state \"ACTIVE\"\n \"\"\"\n createProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n createSavedSearch(orgId: ID, savedSearch: SavedSearchInput!): SavedSearch\n createTransfer(transfer: TransferInput!): Transfer\n deleteCollection(id: ID!): MutationResult\n \"\"\"\n This is the equivalent of dismissing notifications. It is permanent\n - if ids is specified then specific notifications will be deleted\n - if all: True then all notifications for this user will be deleted\n \"\"\"\n deleteNotifications(all: Boolean, ids: [ID!]): MutationResult\n deleteOrganization(id: ID!, options: EntityDeletionOptions): MutationResult\n \"\"\"Organization admins/owners can dis-invite others.\"\"\"\n deleteOrganizationInvite(id: ID!): MutationResult\n \"\"\"Delete your user profile from the system\"\"\"\n deleteProfile(options: EntityDeletionOptions): MutationResult\n \"\"\"\n Delete a project. This will mark a project for deletion so it stops showing in search results. The actual deletion\n will happen in the background and only complete once the purgeProject() call has been fired.\n \"\"\"\n deleteProject(options: EntityDeletionOptions, projectId: ID!): MutationResult\n \"\"\"\n Delete is a super-rare, super high-privilege command that will only work for admins\n because it means deleting a project type and all projects with that type\n \"\"\"\n deleteProjectType(id: String!): MutationResult\n deleteSavedSearch(id: ID!): MutationResult\n deleteTransfer(transferId: ID!): MutationResult\n \"\"\"\n When all files have been uploaded you can call this to start processing the project\n \"\"\"\n finalizeProjectUpload(token: String!): JobStatusObj\n \"\"\"\n Purge a project. This will delete a project from the system. This is a machine-only call used by the janitor\n \"\"\"\n purgeProject(projectId: ID!): MutationResult\n reIndexProjectXML(projectId: ID!): WatcherOutput\n rebuildWebTiles(force: Boolean, projectId: ID!, rsXPaths: [String!]): RebuildWebTilesResponse!\n removeCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n Kick a user (or yourself) from the org (Owners cannot be removed until they are downgraded)\n \"\"\"\n removeOrganizationMember(organizationId: ID!, userId: ID!): MutationResult\n \"\"\"\n Users can request access to an organization with initial role of VIEWER. the invite will have the state: REQUESTED\n \"\"\"\n requestOrganizationInvite(organizationId: ID!): OrganizationInvite\n \"\"\"Organization admins/owners can resend expired invitiations.\"\"\"\n resendOrganizationInvite(id: ID!): OrganizationInvite\n \"\"\"updateCollection: Note that with projectIds, order matters\"\"\"\n updateCollection(collection: CollectionInput, id: ID!): Collection\n \"\"\"ids: Notification ids (large interger timestamp)\"\"\"\n updateNotifications(ids: [ID!]!, markAs: NotificationOperationEnum!): MutationResult\n updateOrganization(id: ID!, organization: OrganizationInput!): Organization\n updateOrganizationMember(organizationId: ID!, role: OrganizationRoleEnum, userId: ID!): OrganizationUser\n \"\"\"Updating your user proile\"\"\"\n updateProfile(profile: ProfileInput!): Profile\n \"\"\"\n Update a project. This is the main mutation for updating a project\n @param projectId: The ID of the project\n @param project: The project object\n @param skipXMLUpdate: If true then the XML file is not updated. This is used by the uploader\n @param agentId: The ID of the agent. This will become the updatedBy field in the project\n \"\"\"\n updateProject(agentId: ID, project: ProjectInput!, projectId: ID!, skipXMLUpdate: Boolean): Project\n updateProjectDataset(dataset: DatasetUpdate!, projectId: ID!, rsXPath: String!): Dataset\n updateProjectDatasetLayer(datasetLayer: DatasetLayerUpdate!, lyrName: String!, projectId: ID!, rsXPath: String!): DatasetLayer\n updateProjectQAQC(projectId: ID!, qaqc: QAQCEventInput!, qaqcId: ID!): QAQCEvent\n \"\"\"\n This call allows you to alter the project type object (including the ID)\n If the ID is changed then we'll need to go through all projects of that type\n and rename them. This should be a super rare operation but it's here for completeness\n \"\"\"\n updateProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n updateSavedSearch(id: ID!, savedSearch: SavedSearchInput!): SavedSearch\n updateStar(id: ID!, starred: Boolean!, type: StarrableTypesEnum!): MutationResult\n \"\"\"\n Transfers are fairly immutable. You can only change the note and the state\n \"\"\"\n updateTransfer(note: String, state: TransferStateEnum, transferId: ID!): Transfer\n zipRebuild(force: Boolean, projectId: ID!): Project\n}\n\n\"\"\"Generic Mutation results\"\"\"\ntype MutationResult {\n \"\"\"The error (if there is one)\"\"\"\n error: String\n \"\"\"the ID of the object being mutated\"\"\"\n ids: [ID!]\n \"\"\"Any non-error message returned by the mutation for use in the UI\"\"\"\n message: String\n \"\"\"did this mutation succeed?\"\"\"\n success: Boolean!\n}\n\ntype MyStars {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n users(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedUsers!\n}\n\ntype Notification {\n id: ID!\n object: DBObjNotifications!\n seen: Boolean!\n \"\"\"Same as Obj. this is a stripped-down user object\"\"\"\n subject: DBObjNotifications!\n time: DateTime!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationActionsEnum {\n CREATED\n DELETED\n RENAMED\n TRANSFERRED\n UPDATED\n}\n\ninput NotificationInput {\n object: DBObjNotificationsInput!\n subject: DBObjNotificationsInput!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationOperationEnum {\n DELETE\n MARK_READ\n MARK_UNREAD\n}\n\nenum NotificationTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\n\"\"\"On a per-object basis, tell me what I can and can't do\"\"\"\ntype ObjectPermissions {\n delete: Boolean\n update: Boolean\n view: Boolean\n}\n\ntype Organization implements DBObj & HasStar {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n meta: [MetaData!]!\n \"\"\"\n This is the role of the user making the query (or the role of the requested user)\n \"\"\"\n myRole: OrganizationRoleEnum!\n name: String!\n \"\"\"List of invites to manage\"\"\"\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"\n List of this organization's approved user (Does not include pending invites)\n \"\"\"\n organizationUsers(limit: Int!, offset: Int!, role: OrganizationRoleEnum, sort: [SearchSortEnum!]): PaginatedOrganizationUsers!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n preferences: JSONObject\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput OrganizationInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Social Links\"\"\"\n social: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype OrganizationInvite implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n email: String\n id: ID!\n \"\"\"\n The user being invited. Null if they don't have an account in the system yet\n \"\"\"\n invitee: User\n inviter: User!\n organization: Organization!\n retries: Int!\n role: OrganizationInviteRoleEnum!\n state: OrganizationInviteStateEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum OrganizationInviteRoleEnum {\n ADMIN\n CONTRIBUTOR\n VIEWER\n}\n\nenum OrganizationInviteStateEnum {\n ACCEPTED\n EXPIRED\n INVITED\n REJECTED\n REQUESTED\n}\n\nenum OrganizationRoleEnum {\n ADMIN\n CONTRIBUTOR\n NONE\n OWNER\n VIEWER\n}\n\ntype OrganizationUser {\n organization: Organization!\n role: OrganizationRoleEnum!\n user: User!\n}\n\nunion Owner = Organization | User\n\ninput OwnerInput {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\nenum OwnerInputTypesEnum {\n ORGANIZATION\n USER\n}\n\nunion Owners = PaginatedUsers\n\ntype PaginatedCollections implements Pagination {\n items: [Collection!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedDatasets implements Pagination {\n items: [Dataset!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedFileDownloadMeta implements Pagination {\n items: [FileDownloadMeta!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedNotifications implements Pagination {\n items: [Notification!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationInvites implements Pagination {\n items: [OrganizationInvite!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationUsers implements Pagination {\n items: [OrganizationUser!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizations implements Pagination {\n items: [Organization!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjectTypes implements Pagination {\n items: [ProjectType!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjects implements Pagination {\n items: [Project!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedQAQCEvents implements Pagination {\n items: [QAQCEvent!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedSavedSearches implements Pagination {\n items: [SavedSearch!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedUsers implements Pagination {\n items: [User!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"Generic Pagination Interface\"\"\"\ninterface Pagination {\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"A Profile is MY User object and there are extra fields I can look at\"\"\"\ntype Profile implements DBObj & UserInterface {\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"If the user has never logged in here this is uninitialized\"\"\"\n initialized: Boolean\n isAdmin: Boolean!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n notifications(limit: Int!, offset: Int!, op: NotificationOperationEnum): PaginatedNotifications!\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n preferences: JSONObject!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n stars: MyStars!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput ProfileInput {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliationInput!]\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n avatarToken: String\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearAvatar: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Specify a set of connection strings for Social media\"\"\"\n socialLinks: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype Project implements DBObj & HasOwner & HasStar {\n \"\"\"Banner image (optional)\"\"\"\n bounds: ProjectBounds\n citation: String\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n datasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n deleted: Boolean!\n description: String!\n dirty: Boolean!\n files: [FileDownloadMeta!]!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n projectType: ProjectType!\n qaqc(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedQAQCEvents!\n ref: String!\n sponsor: Owner\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n \"\"\"Bytesize of the unzipped project\"\"\"\n totalSize: BigInt\n tree: ProjectTree!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectVisibilityEnum!\n}\n\ntype ProjectBounds implements DBSimpleObj {\n \"\"\"Calculated area of \"\"\"\n area: Float\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]!\n \"\"\"centroid: [longitude, latitude]\"\"\"\n centroid: [Float!]!\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n Geohash is how we do clustering in ElasticSearch\n https://github.com/sunng87/node-geohash\n https://www.npmjs.com/package/ngeohash\n https://www.npmjs.com/package/@mapbox/geojson-area\n https://www.npmjs.com/package/@mapbox/geojson-extent\n https://www.npmjs.com/package/@mapbox/geojson-normalize\n https://github.com/hackergrrl/geojson-polygons-equal/blob/master/index.js\n https://github.com/jczaplew/geojson-precision/blob/master/index.js\n https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html\n \"\"\"\n geoHash: String\n \"\"\"\n This id is unique to specific shapes in the DB\n Useful for grouping multiple projects with the same bounding polygon\n It is a GUID\n \"\"\"\n id: ID!\n \"\"\"polygon: Simplified GeoJSON of project outputs.\"\"\"\n polygonUrl: URL!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum ProjectDeleteChoicesEnum {\n DELETE\n DELETE_COMPLETE\n}\n\nenum ProjectGroupVisibilityEnum {\n PUBLIC\n SECRET\n}\n\ninput ProjectInput {\n \"\"\"\n Project bounds object code you were given from the checkUploadBounds endpoint\n \"\"\"\n boundsToken: String\n \"\"\"Scientitfic or accademic citation (string)\"\"\"\n citation: String\n \"\"\"Resets/deletes the project's bounds\"\"\"\n clearBounds: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"remove the sponsor for the proejct\"\"\"\n clearSponsor: Boolean\n \"\"\"Attach new datasets or add/remove linked datasets\"\"\"\n datasets: [DatasetInput!]\n \"\"\"\n ONLY FOR UPDATING: Specify dataset ids (and by that I mean rsXPaths) to be deleted\n \"\"\"\n deleteDatasets: [ID!]\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the project.\"\"\"\n name: String\n \"\"\"Attache any QAQC tasks in order\"\"\"\n qaqc: [QAQCEventInput!]\n \"\"\"Optional: Sponsor ID\"\"\"\n sponsor: OwnerInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Byte size of entire project uncompressed\"\"\"\n totalSize: BigInt\n \"\"\"Project visibility settings: Either PUBLIC, PRIVATE or SECRET\"\"\"\n visibility: ProjectVisibilityEnum\n}\n\ntype ProjectSearchMeta {\n \"\"\"\n The area covered by all projects returned\n (all overlaps are included)\n \"\"\"\n area: Float\n \"\"\"\n bbox: [minLng, minLat, maxLng, maxLat]\n The geo bounds of all possible results\n (Applies to projects only)\n \"\"\"\n bbox: [Float!]\n \"\"\"\n Histogram of distances\n (Applies to projects only)\n \"\"\"\n geoBuckets: JSONObject\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"\n OpenSearch query/results for development. Only present when debug=true on the query and the user is an admin.\n \"\"\"\n openSearch: JSONObject\n \"\"\"\n ProjectTypes: Key-balue pairs of project types and counts\n (Applies to projects only)\n \"\"\"\n projectTypes: JSONObject\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ntype ProjectSearchParams {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDate\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaData!]\n name: String\n ownedBy: SearchOwner\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDate\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ninput ProjectSearchParamsInput {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"\n Filter to projects that have this particular Bound polygon assoicated with them by id\n \"\"\"\n boundsId: ID\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to projects owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n}\n\ntype ProjectTree {\n branches: [ProjectTreeBranch!]!\n defaultView: ID\n description: String\n leaves: [ProjectTreeLeaf!]!\n name: String\n views: [ProjectTreeView!]!\n}\n\ntype ProjectTreeBranch {\n \"\"\"Branch ID (generated at parse time)\"\"\"\n bid: Int!\n collapsed: Boolean\n label: String!\n \"\"\"Parent ID (generated at parse time)\"\"\"\n pid: Int!\n}\n\n\"\"\"\nProjectTreeLayerTypes is an enumeration to help us display layers with the\ncorrect icon and assign them to the right slot\n\"\"\"\nenum ProjectTreeLayerTypeEnum {\n FILE\n LINE\n POINT\n POLYGON\n RASTER\n REPORT\n TIN\n}\n\ntype ProjectTreeLeaf {\n \"\"\"\n blLayerId: The id on the Node element from the business logic that we use in Views to \n reference leaves in the tree\n \"\"\"\n blLayerId: String\n \"\"\"\n This is going to let us find the actual file we need to download (if applicable)\n \"\"\"\n filePath: String\n \"\"\"Tree id of this leaf. This is generated at parse-time\"\"\"\n id: Int!\n label: String!\n \"\"\"from the BL (Optional)\"\"\"\n labelxpath: String\n \"\"\"from BL. Renderable WebRave Types (Not DS Types)\"\"\"\n layerType: ProjectTreeLayerTypeEnum!\n \"\"\"This is going to let us find the DasetLayer (if applicaple)\"\"\"\n lyrName: String\n \"\"\"Business Logic id=\"\" attribute\"\"\"\n nodeId: ID\n \"\"\"\n parent ID (relates to bid from ProjectTreeBranch) \n generated at parse-time\n \"\"\"\n pid: Int!\n \"\"\"\n This is going to let us find the Dataset\n corresponding to the leaf we're trying to render\n \"\"\"\n rsXPath: String!\n symbology: String\n transparency: Int\n}\n\ntype ProjectTreeView {\n description: String\n id: ID!\n layers: [ProjectTreeViewLayer!]!\n name: String!\n}\n\ntype ProjectTreeViewLayer {\n id: ID!\n visible: Boolean\n}\n\ntype ProjectType implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n machineName: String!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n state: ProjectTypeStateEnum!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n url: URL\n}\n\ninput ProjectTypeInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaDataInput!]\n name: String\n summary: String\n url: URL\n}\n\nenum ProjectTypeStateEnum {\n ACTIVE\n DELETED\n SUGGESTED\n}\n\ntype ProjectUploadUrl {\n fields: JSONObject\n origPath: String\n url: String!\n}\n\ntype ProjectValidation {\n errors: [ProjectValidationError]\n valid: Boolean\n}\n\ntype ProjectValidationError {\n code: String\n message: String!\n severity: SeverityEnum\n}\n\nenum ProjectVisibilityEnum {\n PRIVATE\n PUBLIC\n SECRET\n}\n\ntype QAQCEvent implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The date this task was performed. This will help us sort out a timeline\n for the QA/QC workflow\n \"\"\"\n datePerformed: DateTime!\n description: String!\n id: ID!\n \"\"\"QA/QC Nodes may have extra metadata but it is not mandatory\"\"\"\n meta: [MetaData!]!\n \"\"\"The QAQC Task Name\"\"\"\n name: String!\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts\n \"\"\"\n performedBy: String!\n \"\"\"The state of this QAQC Task \"\"\"\n state: QAQCStateEnum!\n summary: String!\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [Link!]\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput QAQCEventInput {\n datePerformed: DateTime!\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n name: String\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts \n \"\"\"\n performedBy: String!\n \"\"\"The state of this QA/QC Task\"\"\"\n state: QAQCStateEnum!\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [LinkInput!]\n}\n\nenum QAQCStateEnum {\n FAILED\n PASSED\n PROVISIONAL\n}\n\ntype Query {\n \"\"\"\n Works for images, bounds and projects. Checks if they have been processed and are ready for use\n \"\"\"\n checkUpload(token: String!): JobStatusObj\n collection(id: ID!): Collection\n dirtyProjects(limit: Int!, offset: Int!): PaginatedProjects\n downloadFile(filePath: String!, projectId: ID!): FileDownloadMeta\n downloadZip(projectId: ID!): ZipFileDownloadMeta\n getLayerTiles(projectId: ID!, projectTypeId: String, rsXPath: String!): TileService\n \"\"\"\n getWebSymbology for a given project type. These types will be retrived from the curated WebRave Symbology repo\n \"\"\"\n getWebSymbology(isRaster: Boolean, name: String!, projectTypeId: String): Symbology\n \"\"\"\n There are some useful properties that are useful for the CLI and other apps\n \"\"\"\n info: WarehouseInfo\n organization(id: ID!): Organization\n \"\"\"\n Profile includes the User object but also specific fields to the person logged in\n \"\"\"\n profile: Profile\n project(id: ID!): Project\n projectType(id: String!): ProjectType\n \"\"\"projectTypes list. Default state is ACTIVE\"\"\"\n projectTypes(limit: Int!, offset: Int!, state: ProjectTypeStateEnum): PaginatedProjectTypes\n requestUploadBounds: UploadUrl\n requestUploadImage(entityId: ID!, entityType: EntitiesWithImagesEnum!): UploadUrl\n \"\"\"\n Request an upload start. Writes a manifest file on the upload bucket\n and creates upload urls for all the files we want to add. \n This is also wher ethe referenved/unreferenced sorting happens\n \n Notes:\n \n - If projectId is given then this projet is uploaded as an UPDATE operation\n - If token is given then we just return a previously calculated download object\n - If neither token nor projectId is given then this is processed as a new project\n \n Arguments:\n \n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n - etags: a string list of etags (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - sizes: a string list of file sizes (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - noDelete: indicates that we do NOT want to touch remote files that are not also present on the local server\n - tags: a list of tags to add to the project (these are the data exchange tags)\n - visibility: the visibility of the project. Defaults to PUBLIC\n \"\"\"\n requestUploadProject(etags: [String!]!, files: [String!]!, noDelete: Boolean, owner: OwnerInput, projectId: String, sizes: [BigInt!]!, tags: [String!], token: String, visibility: ProjectVisibilityEnum): UploadProjectRequest\n \"\"\"\n Using requestUploadProject() you can get a valid upload token. From there you can ask for presigned urls for any file you\n have specified above\n \"\"\"\n requestUploadProjectFilesUrl(files: [String!]!, token: String!): [UploadProjectFileUrls]\n savedSearch(id: ID!): SavedSearch\n searchCollections(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchCollectionPagination!\n \"\"\"\n This is a complementary search to \"searchProjects\". It can be run with essentially the same\n parameters\n \n Note: params.bbox MUST be included for the searchProjectsMap\n clusters: the number of clusters we should aim for\n \"\"\"\n searchMapBounds(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!): SearchMapBoundsResult!\n \"\"\"\n Discussion here https://github.com/Riverscapes/rs-web-monorepo/discussions/251\n limit: the maximum number of clusters to get back. After this number the list is truncated and any remaining projects are simply represented by the \"remaining\" property\n precision: The size of the grid to place the clusters on. We use npm's ngeohash for gridding\n \"\"\"\n searchMapClusters(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!, precision: Int!): SearchMapClusterResult!\n searchOrganizations(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchOrganizationPagination!\n searchProjects(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: ProjectSearchParamsInput!, sort: [SearchSortEnum!]): SearchProjectPagination!\n searchSavedSearches(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchSavedSearchPagination!\n \"\"\"\n As-you-type suggestions:\n TODO: this needs to be typed but for now it's just pure JSON\n \"\"\"\n searchSuggest(minScore: Float, text: String!, type: StarrableTypesEnum): SearchSuggestionResults\n searchUsers(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchUserPagination!\n \"\"\"A User is any user in the system\"\"\"\n user(id: ID!): User\n \"\"\"\n Validate a raw project.rs.xml file to check if it is a valida candidate for uploading\n It is highly recommended that you call this before requestUploadProjectFileUrls or uploading\n files to prevent a lengthy process with a preventable error at the end\n \n - xml: String contents of the project.rs.xml file\n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n \"\"\"\n validateProject(files: [String!]!, owner: OwnerInput, xml: String!): ProjectValidation\n}\n\nenum RampTypeEnum {\n DISCRETE\n EXACT\n INTERPOLATED\n}\n\ntype RebuildWebTilesResponse {\n queued: [String!]\n skipped: [String!]\n}\n\ntype SavedSearch implements DBObj & HasOwner & HasStar & HasTags {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n description: String!\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): SearchProjectPagination!\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParams!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput SavedSearchInput {\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParamsInput\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this object\"\"\"\n tags: [String!]\n \"\"\"Saved Search visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ntype SearchCollection implements SearchResult {\n highlights: JSONObject\n item: Collection!\n score: Float\n}\n\ntype SearchCollectionPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchCollection!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDataset implements SearchResult {\n highlights: JSONObject\n item: Dataset!\n score: Float\n}\n\ntype SearchDatasetPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchDataset!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDate {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ninput SearchDateInput {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ntype SearchMapBoundsItem {\n bounds: ProjectBounds!\n clusters: [MapCluster!]!\n projectCount: Int!\n}\n\ntype SearchMapBoundsResult {\n bounds: [SearchMapBoundsItem!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMapClusterResult {\n clusters: [MapCluster!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMeta {\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"Search Meta that are common to all types\"\"\"\ninterface SearchMetaInterface {\n \"\"\"The maximum relevance score\"\"\"\n maxScore: Float\n \"\"\"Collection of stats about the Metadata key value pairs for this object\"\"\"\n metaDataBuckets: JSONObject!\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\ntype SearchNotification implements SearchResult {\n highlights: JSONObject\n item: Notification!\n score: Float\n}\n\ntype SearchNotificationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchNotification!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganization implements SearchResult {\n highlights: JSONObject\n item: Organization!\n score: Float\n}\n\ntype SearchOrganizationInvite implements SearchResult {\n highlights: JSONObject\n item: OrganizationInvite!\n score: Float\n}\n\ntype SearchOrganizationInvitePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganizationInvite!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganizationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganization!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOwner {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\ninterface SearchPagination implements Pagination {\n \"\"\"The limit used for this query.\"\"\"\n limit: Int!\n \"\"\"The record offset for this query.\"\"\"\n offset: Int!\n \"\"\"The maximum score if this is a search result. Null otherwise\"\"\"\n stats: SearchStats\n \"\"\"\n The total objects in the system. OpenSearch can return this easily so it's useful for building pagination UI.\n \"\"\"\n total: Int!\n}\n\n\"\"\"SearchParams is used for search queries for everything except projects\"\"\"\ninput SearchParamsInput {\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only items that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to items owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n tags: [String!]\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n}\n\ntype SearchProject implements SearchResult {\n highlights: JSONObject\n item: Project!\n score: Float\n}\n\ntype SearchProjectPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProject!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchProjectType implements SearchResult {\n highlights: JSONObject\n item: ProjectType!\n score: Float\n}\n\ntype SearchProjectTypePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProjectType!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchQAQCEvent implements SearchResult {\n highlights: JSONObject\n item: QAQCEvent!\n score: Float\n}\n\ntype SearchQAQCEventPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchQAQCEvent!]!\n stats: SearchStats\n total: Int!\n}\n\ninterface SearchResult {\n \"\"\"\n Takes the form:\n \"highlights\" : {\n \"name\" : [\n \"Riverscapes <span>Context</span> for HUC 16040102\"\n ],\n \"fieldName\" : [\n \"match1 <span>with</span> highlight\",\n \"match2 <span>with</span> highlight\"\n ]\n } \n \"\"\"\n highlights: JSONObject\n score: Float\n}\n\n\"\"\"Search Meta that appears on individual items\"\"\"\ninterface SearchResultMeta {\n highlights: JSONObject\n score: Float!\n}\n\ntype SearchSavedSearch implements SearchResult {\n highlights: JSONObject\n item: SavedSearch!\n score: Float\n}\n\ntype SearchSavedSearchPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchSavedSearch!]!\n stats: SearchStats\n total: Int!\n}\n\n\"\"\"\nThese are the ways you can sort search results\n\nRanked sorting of return results. If NULL then the score will be the only factor\nIf specified then score is implicitly the last sort criteria\n\"\"\"\nenum SearchSortEnum {\n AREA_DESC\n DATE_CREATED_ASC\n DATE_CREATED_DESC\n DATE_UPDATED_ASC\n DATE_UPDATED_DESC\n MINE\n NAME_ASC\n NAME_DESC\n}\n\nunion SearchStats = ProjectSearchMeta | SearchMeta\n\ntype SearchSuggestionResult implements SearchResult {\n highlights: JSONObject\n item: DBObj\n score: Float\n}\n\ntype SearchSuggestionResults {\n metaKey: [SearchSuggestions!]!\n metaValues: [SearchSuggestions!]!\n results: [SearchSuggestionResult!]!\n tags: [SearchSuggestions!]!\n}\n\ntype SearchSuggestions {\n freq: Int\n score: Float!\n text: String!\n}\n\ntype SearchUser implements SearchResult {\n highlights: JSONObject\n item: User!\n score: Float\n}\n\ntype SearchUserPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchUser!]!\n stats: SearchStats\n total: Int!\n}\n\nenum SearchableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\nenum SeverityEnum {\n CRITICAL\n DEBUG\n ERROR\n INFO\n WARNING\n}\n\n\"\"\"Links to various social networks\"\"\"\ntype SocialLinks {\n facebook: URL\n instagram: URL\n linkedIn: URL\n tiktok: URL\n twitter: URL\n website: URL\n}\n\ninput SocialLinksInput {\n facebook: String\n instagram: String\n linkedIn: String\n tiktok: String\n twitter: String\n website: URL\n}\n\nenum StarrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\ntype Symbology {\n error: String\n legend: [[String!]!]\n mapboxJson: JSONObject\n name: String!\n rampType: RampTypeEnum\n state: SymbologyStateEnum!\n url: String\n}\n\n\"\"\"SymbologyStateEnum\"\"\"\nenum SymbologyStateEnum {\n ERROR\n FETCHING\n FOUND\n MISSING\n NOT_APPLICABLE\n UNKNOWN\n}\n\ntype TileIndexOriginFile implements FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype TileService {\n bounds: [Float]\n duration: Float\n errorMsg: String\n format: String\n indexUrl: String\n lastState: DateTime\n layers: [String!]\n localPath: String\n maxZoom: Int\n minZoom: Int\n numFiles: Int\n originFile: TileIndexOriginFile\n projectId: String\n rasterStats: JSONObject\n rsXPath: String!\n started: DateTime\n state: TilingStateEnum!\n symbologies: [String!]\n tileType: TileTypesEnum\n url: String\n}\n\nenum TileTypesEnum {\n HTML\n RASTER\n VECTOR_GPKG\n VECTOR_SHP\n}\n\nenum TilingStateEnum {\n CREATING\n FETCHING\n FETCH_ERROR\n INDEX_NOT_FOUND\n LAYER_NOT_FOUND\n NOT_APPLICABLE\n NO_GEOMETRIES\n QUEUED\n SUCCESS\n TILING_ERROR\n TIMEOUT\n UNKNOWN\n}\n\ntype Transfer implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n id: ID!\n includeProjects: Boolean\n \"\"\"Allows the request to have an attached note\"\"\"\n note: String!\n state: TransferStateEnum!\n \"\"\"Sorting and pagination are not available for these items\"\"\"\n transferObjects: [TransferObject!]!\n transferTo: Owner!\n transferType: TransferrableTypesEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput TransferEntityItemsInput {\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n}\n\ninput TransferInput {\n \"\"\"\n (Optional) When transferring a collection you can choose to transfer any projects in that collection (that you own) as well\n \"\"\"\n includeProjects: Boolean\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"DBIds of the items to transfer\"\"\"\n objectIds: [ID!]!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n \"\"\"\n What type of transfer is this:\n - project(s): one or more projects\n - collection: Transfer the colletion with an option for any owned projects\n - organization: this is different from simply making someone else the owner\n this means move all projects / collections to another user or org.\n - user: Transfer all my projects/collections to another org/user\n \"\"\"\n transferType: TransferrableTypesEnum!\n}\n\nunion TransferObject = Collection | Organization | Project | User\n\nenum TransferStateEnum {\n ACCEPTED\n EXPIRED\n IN_PROGRESS\n PROPOSED\n REJECTED\n}\n\nenum TransferrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n USER\n}\n\nscalar URL\n\ntype UploadProjectFileUrls {\n relPath: String!\n urls: [String]\n}\n\ntype UploadProjectRequest {\n create: [String!]!\n delete: [String!]!\n newId: String\n token: String!\n update: [String!]!\n}\n\ntype UploadUrl {\n fields: JSONObject!\n token: String!\n url: String!\n}\n\n\"\"\"A User object is any user in the system\"\"\"\ntype User implements DBObj & UserInterface {\n \"\"\"User affiliations (usually external to the data exchange)\"\"\"\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"\nAffiliation can be anything as long as it fits as a list of\nstrings with URLs\n\"\"\"\ntype UserAffiliation {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninput UserAffiliationInput {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninterface UserInterface {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliation]!\n \"\"\"URL To Avatar image\"\"\"\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"When did we last see the user?\"\"\"\n lastLogin: DateTime!\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n \"\"\"Object containing URLS to social media sites\"\"\"\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ntype WarehouseInfo {\n api: String\n businessLogic: String\n projectFile: String\n warehouse: String\n xml: String\n xsd: String\n}\n\ntype WatcherOutput {\n errors: [String]\n message: String\n results: [String]\n}\n\ntype ZipFileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n pendingSince: DateTime\n progress: Int\n size: BigInt\n}\n"])));
11
+ exports.default = (0, graphql_tag_1.default)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\nschema {\n query: Query\n mutation: Mutation\n}\n\nscalar BigInt\n\ntype Collection implements DBObj & HasOwner & HasStar & HasTags {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"(Optional) Who to contact (might be different from owner)\"\"\"\n contact: User\n createdBy: User!\n createdOn: DateTime!\n description: String!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n \"\"\"Paginated, ordered list of projects this collection contains\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput CollectionInput {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"Remove the contact for this collection\"\"\"\n clearContact: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"User ID of the contact for this collection (Optional)\"\"\"\n contact: OwnerInput\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Collection visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ninterface DBObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Key-value pairs for attaching metadata to objects\"\"\"\n meta: [MetaData!]!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\n\"\"\"Notifications get a stripped-down version of the DBObj\"\"\"\ninterface DBObjNotifications {\n createdBy: User!\n \"\"\"\n User who created object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields\n \"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n updatedBy: User!\n \"\"\"\n User who last updated object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields \n \"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninput DBObjNotificationsInput {\n \"\"\"User who created object\"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninterface DBSimpleObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ntype Dataset implements DBObj {\n analysisId: String\n \"\"\"These are the projects that use this layer\"\"\"\n attachedDatasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n citation: String\n createdBy: User!\n createdOn: DateTime!\n datasetContainer: DatasetContainerTypesEnum!\n \"\"\"\n All of these fields are actually derivatives of the rsXPath\n \n The type of dataset helps us understand how to work with it\n These types are derived directly from the XML enumeration\n \"\"\"\n datasetType: DatasetTypeEnum!\n datasetXMLId: String!\n description: String!\n \"\"\"\n For Direct S3 File listings. This is a query that depends on the type\n of dataset. Sometimes we also need sidecars to come back\n \"\"\"\n files: [FileDownloadMeta!]!\n \"\"\"\n The ID for datasets takes the form 'PROJ_ORIGIN_GUID/REALIZATION_ID/DATASET_ID'\n and corresponds to the S3 path we store things\n \n NOTE: ID is different from the dsId (which is the id attribute on the XML node) \n \"\"\"\n id: ID!\n \"\"\"Some datasets can have sublayers (mainly just Geopackages)\"\"\"\n layers: [DatasetLayer]\n localPath: String!\n meta: [MetaData!]!\n name: String!\n \"\"\"\n The original dataset (if there is one). THis is null if this is the origin\n \"\"\"\n origin: Dataset\n \"\"\"Backwards lookup of the project this dataset belongs to\"\"\"\n project: Project!\n realizationXMLId: String\n \"\"\"Backwards lookup to the project referenced b\"\"\"\n refProject: Project\n rsXPath: String!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"These are the XML tag containers where you can find datasets\"\"\"\nenum DatasetContainerTypesEnum {\n CommonDatasets\n Configuration\n Datasets\n Inputs\n Intermediates\n Logs\n Outputs\n Products\n}\n\ninput DatasetInput {\n citation: String\n description: String\n \"\"\"\n Optional. If this is a linked dataset then its extRef should be present. this is an attribute on the dataset node in the XML\n and it takes the form:\n badfe8c1-0342-4876-8fac-b2eb5493a90f:Project/REALIZATION/SLOPE\n PROJECT_UUID:rsXPath\n \"\"\"\n extRef: ID\n \"\"\"Geopackages can have sublayers\"\"\"\n layers: [DatasetLayerInput!]\n \"\"\"\n local path on the user's system. This comes directly from the <Path> node in the project xml\n \"\"\"\n localPath: String!\n meta: [MetaDataInput!]\n name: String!\n \"\"\"\n This is the rsXPath to the node in the project (not the origin project)\n It is a proprietary path system to uniquely identify datasets in our XML files\n This rsXPath takes the form: 'Project/Realizations/Realization#REAL1/Intermediates/Geopackage#GEO1'\n where the hashes are shorthand for IDS\n \"\"\"\n rsXPath: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ntype DatasetLayer {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaData!]\n name: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ninput DatasetLayerInput {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\ninput DatasetLayerUpdate {\n citation: String\n description: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\n\"\"\"\nenum DatasetTypeEnum {\n AuxInstrumentFile\n CSV\n ConfigFile\n DEM\n DataTable\n Database\n File\n Geopackage\n HTMLFile\n HillShade\n Image\n InstrumentFile\n LogFile\n MSAccessDB\n PDF\n Raster\n SQLiteDB\n SurveyQualityDB\n TIN\n Vector\n Video\n ZipFile\n}\n\ninput DatasetUpdate {\n citation: String\n description: String\n dsId: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\nscalar DateTime\n\nscalar EmailAddress\n\nenum EntitiesWithImagesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n PROJECT_TYPE\n USER\n}\n\nenum EntityDeleteActionsEnum {\n DELETE\n DELETE_COMPLETE\n MAKE_PUBLIC\n REQUEST_TRANSFER\n}\n\ninput EntityDeletionOptions {\n \"\"\"\n TotalDelete means This item has been cleaned up completely including\n shared dataset: this will break links for shared projects so it should\n be the exception and not the rule.\n \"\"\"\n totalDelete: Boolean\n \"\"\"\n Optional: request transfer of all projects and collections to another Owner in the system\n \"\"\"\n transfer: TransferEntityItemsInput\n}\n\ntype FileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ninput FileDownloadMetaInput {\n contentType: String\n localPath: String!\n md5: String!\n size: BigInt\n}\n\ninterface FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype FileUploadMeta {\n downloadUrl: String!\n key: String!\n}\n\ninterface HasOwner {\n ownedBy: Owner!\n}\n\ninterface HasStar {\n starred: Boolean!\n starredCount: Int!\n}\n\ninterface HasTags {\n tags: [String!]!\n}\n\n\"\"\"Small medium and large image sizes\"\"\"\ntype HeroImage {\n lg: URL\n md: URL\n sm: URL\n}\n\ntype HiddenResult {\n id: ID!\n}\n\nenum ImageTypeEnum {\n AVATAR\n HERO\n LOGO\n}\n\nscalar JSONObject\n\nenum JobStatusEnum {\n FAILED\n PROCESSING\n READY\n SUCCESS\n UNKNOWN\n}\n\n\"\"\"\nJobStatusObj: The shape of the JSON file that stores the state of the uploaded item.\n\"\"\"\ntype JobStatusObj {\n \"\"\"\n Jobs may store different settings. leave a data param as JSONObject so we can extend it\n without needing to modify the schema\n \"\"\"\n data: JSONObject\n errors: [String!]\n metaData: JSONObject\n percentComplete: Int\n projectId: String\n status: JobStatusEnum!\n}\n\ntype Link {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ninput LinkInput {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ntype MapCluster {\n \"\"\"[longitude, latitude]\"\"\"\n coords: [Float!]!\n count: Int!\n \"\"\"check out npm's 'ngeogrid' for how to turn this back into coordinates\"\"\"\n hash: String!\n}\n\ntype MetaData {\n ext: MetaDataExtEnum\n key: String!\n locked: Boolean\n type: MetaDataTypeEnum\n value: String\n}\n\nenum MetaDataExtEnum {\n DATASET\n PROJECT\n WAREHOUSE\n}\n\n\"\"\"When submitting metadata use this object\"\"\"\ninput MetaDataInput {\n \"\"\"\n If this metadata was impored from an external project then list what kind of MetaData it is.\n Options: PROJECT, DATASET, WAREHOUSE\n \"\"\"\n ext: MetaDataExtEnum\n \"\"\"Metadata key string\"\"\"\n key: String!\n \"\"\"\n Optional locked flag. Defaults to false. If true then this metadata value cannot be edited by the UI\n \"\"\"\n locked: Boolean\n \"\"\"Optional meta type value. Defaults to String\"\"\"\n type: MetaDataTypeEnum\n \"\"\"\n Strignified metadata value\n NOTE: In the XML spec null is allowed so technically it is allowed here too.\n \"\"\"\n value: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\nfind it here: RiverscapesXML/Projects/XSD/V2/RiverscapesProject.xsd\n\"\"\"\nenum MetaDataTypeEnum {\n BOOLEAN\n FILEPATH\n FLOAT\n GUID\n HIDDEN\n IMAGE\n INT\n ISODATE\n JSON\n MARKDOWN\n RICHTEXT\n STRING\n TIMESTAMP\n URL\n VIDEO\n}\n\ntype Mutation {\n \"\"\"\n Accept or reject an org invite. State afterward will be ACCEPTED or REJECTED\n \"\"\"\n actionOrganizationInvite(accept: Boolean!, id: ID!, role: OrganizationInviteRoleEnum): OrganizationInvite\n addCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n ADMIN: Scan over the dynamoDB and create appropriate OpenSearch entries\n \"\"\"\n adminReIndexOpenSearch(paginationToken: String): String\n \"\"\"\n ADMIN: Recreate/empty opensearch indeces (you will need to run adminRebuildOpenSearch after this)\n \"\"\"\n adminRecreateOpenSearch: Boolean\n \"\"\"ADMIN: Wipe DynamoDB except for users\"\"\"\n adminWipeDynamo: Int\n changeProjectOwner(owner: OwnerInput!, projectId: ID!): Project\n \"\"\"Create a collection of projects\"\"\"\n createCollection(collection: CollectionInput!, orgId: ID): Collection\n createNotification(notification: NotificationInput): Notification\n createOrganization(organization: OrganizationInput!): Organization\n \"\"\"\n Organization admins/owners can invite others. the invite will have the state: INVITED\n One of userId or email must be provided.\n \"\"\"\n createOrganizationInvite(email: String, organizationId: ID!, role: OrganizationInviteRoleEnum, userId: ID): OrganizationInvite\n \"\"\"For user when logging in for the first time\"\"\"\n createProfile(id: ID, profile: ProfileInput!): Profile\n \"\"\"\n Create a new project. This is the main mutation for creating a new project\n @param projectId: (optional) The ID of the project. If not given then a new one is generated. If it exists in the system then an error is thrown.\n @param project: The project object\n @param projectTypeId: The ID of the project type\n @param orgId: The ID of the organization. This will become the project owner. This field is mutually exclusive with userId\n @param userId: The ID of the user. This will become the project owner. This field is mutually exclusive with orgId\n @param agentId: The ID of the agent. This will become the createdBy field in the project\n \"\"\"\n createProject(agentId: ID, orgId: ID, project: ProjectInput!, projectId: ID, projectTypeId: String, userId: ID): Project\n \"\"\"\n For most users \"createProject\" is actually \"sugest a project type\" and will be created\n with state \"SUGGESTED\". Only admins can create a ProjectType that starts with state \"ACTIVE\"\n \"\"\"\n createProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n createSavedSearch(orgId: ID, savedSearch: SavedSearchInput!): SavedSearch\n createTransfer(transfer: TransferInput!): Transfer\n deleteCollection(id: ID!): MutationResult\n \"\"\"\n This is the equivalent of dismissing notifications. It is permanent\n - if ids is specified then specific notifications will be deleted\n - if all: True then all notifications for this user will be deleted\n \"\"\"\n deleteNotifications(all: Boolean, ids: [ID!]): MutationResult\n deleteOrganization(id: ID!, options: EntityDeletionOptions): MutationResult\n \"\"\"Organization admins/owners can dis-invite others.\"\"\"\n deleteOrganizationInvite(id: ID!): MutationResult\n \"\"\"Delete your user profile from the system\"\"\"\n deleteProfile(options: EntityDeletionOptions): MutationResult\n \"\"\"\n Delete a project. This will mark a project for deletion so it stops showing in search results. The actual deletion\n will happen in the background and only complete once the purgeProject() call has been fired.\n \"\"\"\n deleteProject(options: EntityDeletionOptions, projectId: ID!): MutationResult\n \"\"\"\n Delete is a super-rare, super high-privilege command that will only work for admins\n because it means deleting a project type and all projects with that type\n \"\"\"\n deleteProjectType(id: String!): MutationResult\n deleteSavedSearch(id: ID!): MutationResult\n deleteTransfer(transferId: ID!): MutationResult\n \"\"\"\n When all files have been uploaded you can call this to start processing the project\n \"\"\"\n finalizeProjectUpload(token: String!): JobStatusObj\n \"\"\"\n Purge a project. This will delete a project from the system. This is a machine-only call used by the janitor\n \"\"\"\n purgeProject(projectId: ID!): MutationResult\n reIndexProjectXML(projectId: ID!): WatcherOutput\n rebuildWebTiles(force: Boolean, projectId: ID!, rsXPaths: [String!]): RebuildWebTilesResponse!\n removeCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n Kick a user (or yourself) from the org (Owners cannot be removed until they are downgraded)\n \"\"\"\n removeOrganizationMember(organizationId: ID!, userId: ID!): MutationResult\n \"\"\"\n Users can request access to an organization with initial role of VIEWER. the invite will have the state: REQUESTED\n \"\"\"\n requestOrganizationInvite(organizationId: ID!): OrganizationInvite\n \"\"\"Organization admins/owners can resend expired invitiations.\"\"\"\n resendOrganizationInvite(id: ID!): OrganizationInvite\n \"\"\"updateCollection: Note that with projectIds, order matters\"\"\"\n updateCollection(collection: CollectionInput, id: ID!): Collection\n \"\"\"ids: Notification ids (large interger timestamp)\"\"\"\n updateNotifications(ids: [ID!]!, markAs: NotificationOperationEnum!): MutationResult\n updateOrganization(id: ID!, organization: OrganizationInput!): Organization\n updateOrganizationMember(organizationId: ID!, role: OrganizationRoleEnum, userId: ID!): OrganizationUser\n \"\"\"Updating your user proile\"\"\"\n updateProfile(profile: ProfileInput!): Profile\n \"\"\"\n Update a project. This is the main mutation for updating a project\n @param projectId: The ID of the project\n @param project: The project object\n @param skipXMLUpdate: If true then the XML file is not updated. This is used by the uploader\n @param agentId: The ID of the agent. This will become the updatedBy field in the project\n \"\"\"\n updateProject(agentId: ID, project: ProjectInput!, projectId: ID!, skipXMLUpdate: Boolean): Project\n updateProjectDataset(dataset: DatasetUpdate!, projectId: ID!, rsXPath: String!): Dataset\n updateProjectDatasetLayer(datasetLayer: DatasetLayerUpdate!, lyrName: String!, projectId: ID!, rsXPath: String!): DatasetLayer\n updateProjectQAQC(projectId: ID!, qaqc: QAQCEventInput!, qaqcId: ID!): QAQCEvent\n \"\"\"\n This call allows you to alter the project type object (including the ID)\n If the ID is changed then we'll need to go through all projects of that type\n and rename them. This should be a super rare operation but it's here for completeness\n \"\"\"\n updateProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n updateSavedSearch(id: ID!, savedSearch: SavedSearchInput!): SavedSearch\n updateStar(id: ID!, starred: Boolean!, type: StarrableTypesEnum!): MutationResult\n \"\"\"\n Transfers are fairly immutable. You can only change the note and the state\n \"\"\"\n updateTransfer(note: String, state: TransferStateEnum, transferId: ID!): Transfer\n zipRebuild(force: Boolean, projectId: ID!): Project\n}\n\n\"\"\"Generic Mutation results\"\"\"\ntype MutationResult {\n \"\"\"The error (if there is one)\"\"\"\n error: String\n \"\"\"the ID of the object being mutated\"\"\"\n ids: [ID!]\n \"\"\"Any non-error message returned by the mutation for use in the UI\"\"\"\n message: String\n \"\"\"did this mutation succeed?\"\"\"\n success: Boolean!\n}\n\ntype MyStars {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n users(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedUsers!\n}\n\ntype Notification {\n id: ID!\n object: DBObjNotifications!\n seen: Boolean!\n \"\"\"Same as Obj. this is a stripped-down user object\"\"\"\n subject: DBObjNotifications!\n time: DateTime!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationActionsEnum {\n CREATED\n DELETED\n RENAMED\n TRANSFERRED\n UPDATED\n}\n\ninput NotificationInput {\n object: DBObjNotificationsInput!\n subject: DBObjNotificationsInput!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationOperationEnum {\n DELETE\n MARK_READ\n MARK_UNREAD\n}\n\nenum NotificationTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\n\"\"\"On a per-object basis, tell me what I can and can't do\"\"\"\ntype ObjectPermissions {\n delete: Boolean\n update: Boolean\n view: Boolean\n}\n\ntype Organization implements DBObj & HasStar {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n meta: [MetaData!]!\n \"\"\"\n This is the role of the user making the query (or the role of the requested user)\n \"\"\"\n myRole: OrganizationRoleEnum!\n name: String!\n \"\"\"List of invites to manage\"\"\"\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"\n List of this organization's approved user (Does not include pending invites)\n \"\"\"\n organizationUsers(limit: Int!, offset: Int!, role: OrganizationRoleEnum, sort: [SearchSortEnum!]): PaginatedOrganizationUsers!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n preferences: JSONObject\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput OrganizationInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Social Links\"\"\"\n social: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype OrganizationInvite implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n email: String\n id: ID!\n \"\"\"\n The user being invited. Null if they don't have an account in the system yet\n \"\"\"\n invitee: User\n inviter: User!\n organization: Organization!\n retries: Int!\n role: OrganizationInviteRoleEnum!\n state: OrganizationInviteStateEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum OrganizationInviteRoleEnum {\n ADMIN\n CONTRIBUTOR\n VIEWER\n}\n\nenum OrganizationInviteStateEnum {\n ACCEPTED\n EXPIRED\n INVITED\n REJECTED\n REQUESTED\n}\n\nenum OrganizationRoleEnum {\n ADMIN\n CONTRIBUTOR\n NONE\n OWNER\n VIEWER\n}\n\ntype OrganizationUser {\n organization: Organization!\n role: OrganizationRoleEnum!\n user: User!\n}\n\nunion Owner = Organization | User\n\ninput OwnerInput {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\nenum OwnerInputTypesEnum {\n ORGANIZATION\n USER\n}\n\nunion Owners = PaginatedUsers\n\ntype PaginatedCollections implements Pagination {\n items: [Collection!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedDatasets implements Pagination {\n items: [Dataset!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedFileDownloadMeta implements Pagination {\n items: [FileDownloadMeta!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedNotifications implements Pagination {\n items: [Notification!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationInvites implements Pagination {\n items: [OrganizationInvite!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationUsers implements Pagination {\n items: [OrganizationUser!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizations implements Pagination {\n items: [Organization!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjectTypes implements Pagination {\n items: [ProjectType!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjects implements Pagination {\n items: [ProjectResult!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedQAQCEvents implements Pagination {\n items: [QAQCEvent!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedSavedSearches implements Pagination {\n items: [SavedSearch!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedUsers implements Pagination {\n items: [User!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"Generic Pagination Interface\"\"\"\ninterface Pagination {\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"A Profile is MY User object and there are extra fields I can look at\"\"\"\ntype Profile implements DBObj & UserInterface {\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"If the user has never logged in here this is uninitialized\"\"\"\n initialized: Boolean\n isAdmin: Boolean!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n notifications(limit: Int!, offset: Int!, op: NotificationOperationEnum): PaginatedNotifications!\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n preferences: JSONObject!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n stars: MyStars!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput ProfileInput {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliationInput!]\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n avatarToken: String\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearAvatar: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Specify a set of connection strings for Social media\"\"\"\n socialLinks: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype Project implements DBObj & HasOwner & HasStar {\n \"\"\"Banner image (optional)\"\"\"\n bounds: ProjectBounds\n citation: String\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n datasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n deleted: Boolean!\n description: String!\n dirty: Boolean!\n files: [FileDownloadMeta!]!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n projectType: ProjectType!\n qaqc(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedQAQCEvents!\n ref: String!\n sponsor: Owner\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n \"\"\"Bytesize of the unzipped project\"\"\"\n totalSize: BigInt\n tree: ProjectTree!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectVisibilityEnum!\n}\n\ntype ProjectBounds implements DBSimpleObj {\n \"\"\"Calculated area of \"\"\"\n area: Float\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]!\n \"\"\"centroid: [longitude, latitude]\"\"\"\n centroid: [Float!]!\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n Geohash is how we do clustering in ElasticSearch\n https://github.com/sunng87/node-geohash\n https://www.npmjs.com/package/ngeohash\n https://www.npmjs.com/package/@mapbox/geojson-area\n https://www.npmjs.com/package/@mapbox/geojson-extent\n https://www.npmjs.com/package/@mapbox/geojson-normalize\n https://github.com/hackergrrl/geojson-polygons-equal/blob/master/index.js\n https://github.com/jczaplew/geojson-precision/blob/master/index.js\n https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html\n \"\"\"\n geoHash: String\n \"\"\"\n This id is unique to specific shapes in the DB\n Useful for grouping multiple projects with the same bounding polygon\n It is a GUID\n \"\"\"\n id: ID!\n \"\"\"polygon: Simplified GeoJSON of project outputs.\"\"\"\n polygonUrl: URL!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum ProjectDeleteChoicesEnum {\n DELETE\n DELETE_COMPLETE\n}\n\nenum ProjectGroupVisibilityEnum {\n PUBLIC\n SECRET\n}\n\ninput ProjectInput {\n \"\"\"\n Project bounds object code you were given from the checkUploadBounds endpoint\n \"\"\"\n boundsToken: String\n \"\"\"Scientitfic or accademic citation (string)\"\"\"\n citation: String\n \"\"\"Resets/deletes the project's bounds\"\"\"\n clearBounds: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"remove the sponsor for the proejct\"\"\"\n clearSponsor: Boolean\n \"\"\"Attach new datasets or add/remove linked datasets\"\"\"\n datasets: [DatasetInput!]\n \"\"\"\n ONLY FOR UPDATING: Specify dataset ids (and by that I mean rsXPaths) to be deleted\n \"\"\"\n deleteDatasets: [ID!]\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the project.\"\"\"\n name: String\n \"\"\"Attache any QAQC tasks in order\"\"\"\n qaqc: [QAQCEventInput!]\n \"\"\"Optional: Sponsor ID\"\"\"\n sponsor: OwnerInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Byte size of entire project uncompressed\"\"\"\n totalSize: BigInt\n \"\"\"Project visibility settings: Either PUBLIC, PRIVATE or SECRET\"\"\"\n visibility: ProjectVisibilityEnum\n}\n\nunion ProjectResult = HiddenResult | Project\n\ntype ProjectSearchMeta {\n \"\"\"\n The area covered by all projects returned\n (all overlaps are included)\n \"\"\"\n area: Float\n \"\"\"\n bbox: [minLng, minLat, maxLng, maxLat]\n The geo bounds of all possible results\n (Applies to projects only)\n \"\"\"\n bbox: [Float!]\n \"\"\"\n Histogram of distances\n (Applies to projects only)\n \"\"\"\n geoBuckets: JSONObject\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"\n OpenSearch query/results for development. Only present when debug=true on the query and the user is an admin.\n \"\"\"\n openSearch: JSONObject\n \"\"\"\n ProjectTypes: Key-balue pairs of project types and counts\n (Applies to projects only)\n \"\"\"\n projectTypes: JSONObject\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ntype ProjectSearchParams {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDate\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaData!]\n name: String\n ownedBy: SearchOwner\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDate\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ninput ProjectSearchParamsInput {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"\n Filter to projects that have this particular Bound polygon assoicated with them by id\n \"\"\"\n boundsId: ID\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to projects owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n \"\"\"Filter to projects of a certain visibility\"\"\"\n visibility: ProjectVisibilityEnum\n}\n\ntype ProjectTree {\n branches: [ProjectTreeBranch!]!\n defaultView: ID\n description: String\n leaves: [ProjectTreeLeaf!]!\n name: String\n views: [ProjectTreeView!]!\n}\n\ntype ProjectTreeBranch {\n \"\"\"Branch ID (generated at parse time)\"\"\"\n bid: Int!\n collapsed: Boolean\n label: String!\n \"\"\"Parent ID (generated at parse time)\"\"\"\n pid: Int!\n}\n\n\"\"\"\nProjectTreeLayerTypes is an enumeration to help us display layers with the\ncorrect icon and assign them to the right slot\n\"\"\"\nenum ProjectTreeLayerTypeEnum {\n FILE\n LINE\n POINT\n POLYGON\n RASTER\n REPORT\n TIN\n}\n\ntype ProjectTreeLeaf {\n \"\"\"\n blLayerId: The id on the Node element from the business logic that we use in Views to \n reference leaves in the tree\n \"\"\"\n blLayerId: String\n \"\"\"\n This is going to let us find the actual file we need to download (if applicable)\n \"\"\"\n filePath: String\n \"\"\"Tree id of this leaf. This is generated at parse-time\"\"\"\n id: Int!\n label: String!\n \"\"\"from the BL (Optional)\"\"\"\n labelxpath: String\n \"\"\"from BL. Renderable WebRave Types (Not DS Types)\"\"\"\n layerType: ProjectTreeLayerTypeEnum!\n \"\"\"This is going to let us find the DasetLayer (if applicaple)\"\"\"\n lyrName: String\n \"\"\"Business Logic id=\"\" attribute\"\"\"\n nodeId: ID\n \"\"\"\n parent ID (relates to bid from ProjectTreeBranch) \n generated at parse-time\n \"\"\"\n pid: Int!\n \"\"\"\n This is going to let us find the Dataset\n corresponding to the leaf we're trying to render\n \"\"\"\n rsXPath: String!\n symbology: String\n transparency: Int\n}\n\ntype ProjectTreeView {\n description: String\n id: ID!\n layers: [ProjectTreeViewLayer!]!\n name: String!\n}\n\ntype ProjectTreeViewLayer {\n id: ID!\n visible: Boolean\n}\n\ntype ProjectType implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n machineName: String!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n state: ProjectTypeStateEnum!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n url: URL\n}\n\ninput ProjectTypeInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaDataInput!]\n name: String\n summary: String\n url: URL\n}\n\nenum ProjectTypeStateEnum {\n ACTIVE\n DELETED\n SUGGESTED\n}\n\ntype ProjectUploadUrl {\n fields: JSONObject\n origPath: String\n url: String!\n}\n\ntype ProjectValidation {\n errors: [ProjectValidationError]\n valid: Boolean\n}\n\ntype ProjectValidationError {\n code: String\n message: String!\n severity: SeverityEnum\n}\n\nenum ProjectVisibilityEnum {\n PRIVATE\n PUBLIC\n SECRET\n}\n\ntype QAQCEvent implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The date this task was performed. This will help us sort out a timeline\n for the QA/QC workflow\n \"\"\"\n datePerformed: DateTime!\n description: String!\n id: ID!\n \"\"\"QA/QC Nodes may have extra metadata but it is not mandatory\"\"\"\n meta: [MetaData!]!\n \"\"\"The QAQC Task Name\"\"\"\n name: String!\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts\n \"\"\"\n performedBy: String!\n \"\"\"The state of this QAQC Task \"\"\"\n state: QAQCStateEnum!\n summary: String!\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [Link!]\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput QAQCEventInput {\n datePerformed: DateTime!\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n name: String\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts \n \"\"\"\n performedBy: String!\n \"\"\"The state of this QA/QC Task\"\"\"\n state: QAQCStateEnum!\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [LinkInput!]\n}\n\nenum QAQCStateEnum {\n FAILED\n PASSED\n PROVISIONAL\n}\n\ntype Query {\n \"\"\"\n Works for images, bounds and projects. Checks if they have been processed and are ready for use\n \"\"\"\n checkUpload(token: String!): JobStatusObj\n collection(id: ID!): Collection\n dirtyProjects(limit: Int!, offset: Int!): PaginatedProjects\n downloadFile(filePath: String!, projectId: ID!): FileDownloadMeta\n downloadZip(projectId: ID!): ZipFileDownloadMeta\n getLayerTiles(projectId: ID!, projectTypeId: String, rsXPath: String!): TileService\n \"\"\"\n getWebSymbology for a given project type. These types will be retrived from the curated WebRave Symbology repo\n \"\"\"\n getWebSymbology(isRaster: Boolean, name: String!, projectTypeId: String): Symbology\n \"\"\"\n There are some useful properties that are useful for the CLI and other apps\n \"\"\"\n info: WarehouseInfo\n organization(id: ID!): Organization\n \"\"\"\n Profile includes the User object but also specific fields to the person logged in\n \"\"\"\n profile: Profile\n project(id: ID!): Project\n projectType(id: String!): ProjectType\n \"\"\"projectTypes list. Default state is ACTIVE\"\"\"\n projectTypes(limit: Int!, offset: Int!, state: ProjectTypeStateEnum): PaginatedProjectTypes\n requestUploadBounds: UploadUrl\n requestUploadImage(entityId: ID!, entityType: EntitiesWithImagesEnum!): UploadUrl\n \"\"\"\n Request an upload start. Writes a manifest file on the upload bucket\n and creates upload urls for all the files we want to add. \n This is also wher ethe referenved/unreferenced sorting happens\n \n Notes:\n \n - If projectId is given then this projet is uploaded as an UPDATE operation\n - If token is given then we just return a previously calculated download object\n - If neither token nor projectId is given then this is processed as a new project\n \n Arguments:\n \n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n - etags: a string list of etags (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - sizes: a string list of file sizes (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - noDelete: indicates that we do NOT want to touch remote files that are not also present on the local server\n - tags: a list of tags to add to the project (these are the data exchange tags)\n - visibility: the visibility of the project. Defaults to PUBLIC\n \"\"\"\n requestUploadProject(etags: [String!]!, files: [String!]!, noDelete: Boolean, owner: OwnerInput, projectId: String, sizes: [BigInt!]!, tags: [String!], token: String, visibility: ProjectVisibilityEnum): UploadProjectRequest\n \"\"\"\n Using requestUploadProject() you can get a valid upload token. From there you can ask for presigned urls for any file you\n have specified above\n \"\"\"\n requestUploadProjectFilesUrl(files: [String!]!, token: String!): [UploadProjectFileUrls]\n savedSearch(id: ID!): SavedSearch\n searchCollections(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchCollectionPagination!\n \"\"\"\n This is a complementary search to \"searchProjects\". It can be run with essentially the same\n parameters\n \n Note: params.bbox MUST be included for the searchProjectsMap\n clusters: the number of clusters we should aim for\n \"\"\"\n searchMapBounds(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!): SearchMapBoundsResult!\n \"\"\"\n Discussion here https://github.com/Riverscapes/rs-web-monorepo/discussions/251\n limit: the maximum number of clusters to get back. After this number the list is truncated and any remaining projects are simply represented by the \"remaining\" property\n precision: The size of the grid to place the clusters on. We use npm's ngeohash for gridding\n \"\"\"\n searchMapClusters(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!, precision: Int!): SearchMapClusterResult!\n searchOrganizations(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchOrganizationPagination!\n searchProjects(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: ProjectSearchParamsInput!, sort: [SearchSortEnum!]): SearchProjectPagination!\n searchSavedSearches(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchSavedSearchPagination!\n \"\"\"\n As-you-type suggestions:\n TODO: this needs to be typed but for now it's just pure JSON\n \"\"\"\n searchSuggest(minScore: Float, text: String!, type: StarrableTypesEnum): SearchSuggestionResults\n searchUsers(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchUserPagination!\n \"\"\"A User is any user in the system\"\"\"\n user(id: ID!): User\n \"\"\"\n Validate a raw project.rs.xml file to check if it is a valida candidate for uploading\n It is highly recommended that you call this before requestUploadProjectFileUrls or uploading\n files to prevent a lengthy process with a preventable error at the end\n \n - xml: String contents of the project.rs.xml file\n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n \"\"\"\n validateProject(files: [String!]!, owner: OwnerInput, xml: String!): ProjectValidation\n}\n\nenum RampTypeEnum {\n DISCRETE\n EXACT\n INTERPOLATED\n}\n\ntype RebuildWebTilesResponse {\n queued: [String!]\n skipped: [String!]\n}\n\ntype SavedSearch implements DBObj & HasOwner & HasStar & HasTags {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n description: String!\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): SearchProjectPagination!\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParams!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput SavedSearchInput {\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParamsInput\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this object\"\"\"\n tags: [String!]\n \"\"\"Saved Search visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ntype SearchCollection implements SearchResult {\n highlights: JSONObject\n item: Collection!\n score: Float\n}\n\ntype SearchCollectionPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchCollection!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDataset implements SearchResult {\n highlights: JSONObject\n item: Dataset!\n score: Float\n}\n\ntype SearchDatasetPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchDataset!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDate {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ninput SearchDateInput {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ntype SearchMapBoundsItem {\n bounds: ProjectBounds!\n clusters: [MapCluster!]!\n projectCount: Int!\n}\n\ntype SearchMapBoundsResult {\n bounds: [SearchMapBoundsItem!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMapClusterResult {\n clusters: [MapCluster!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMeta {\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"\n OpenSearch query/results for development. Only present when debug=true on the query and the user is an admin.\n \"\"\"\n openSearch: JSONObject\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"Search Meta that are common to all types\"\"\"\ninterface SearchMetaInterface {\n \"\"\"The maximum relevance score\"\"\"\n maxScore: Float\n \"\"\"Collection of stats about the Metadata key value pairs for this object\"\"\"\n metaDataBuckets: JSONObject!\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\ntype SearchNotification implements SearchResult {\n highlights: JSONObject\n item: Notification!\n score: Float\n}\n\ntype SearchNotificationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchNotification!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganization implements SearchResult {\n highlights: JSONObject\n item: Organization!\n score: Float\n}\n\ntype SearchOrganizationInvite implements SearchResult {\n highlights: JSONObject\n item: OrganizationInvite!\n score: Float\n}\n\ntype SearchOrganizationInvitePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganizationInvite!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganizationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganization!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOwner {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\ninterface SearchPagination implements Pagination {\n \"\"\"The limit used for this query.\"\"\"\n limit: Int!\n \"\"\"The record offset for this query.\"\"\"\n offset: Int!\n \"\"\"The maximum score if this is a search result. Null otherwise\"\"\"\n stats: SearchStats\n \"\"\"\n The total objects in the system. OpenSearch can return this easily so it's useful for building pagination UI.\n \"\"\"\n total: Int!\n}\n\n\"\"\"SearchParams is used for search queries for everything except projects\"\"\"\ninput SearchParamsInput {\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only items that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to items owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n tags: [String!]\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n \"\"\"\n Filter to items of a certain visibility (valid for collections and saved searches only)\n \"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ntype SearchProject implements SearchResult {\n highlights: JSONObject\n item: Project!\n score: Float\n}\n\ntype SearchProjectPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProject!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchProjectType implements SearchResult {\n highlights: JSONObject\n item: ProjectType!\n score: Float\n}\n\ntype SearchProjectTypePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProjectType!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchQAQCEvent implements SearchResult {\n highlights: JSONObject\n item: QAQCEvent!\n score: Float\n}\n\ntype SearchQAQCEventPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchQAQCEvent!]!\n stats: SearchStats\n total: Int!\n}\n\ninterface SearchResult {\n \"\"\"\n Takes the form:\n \"highlights\" : {\n \"name\" : [\n \"Riverscapes <span>Context</span> for HUC 16040102\"\n ],\n \"fieldName\" : [\n \"match1 <span>with</span> highlight\",\n \"match2 <span>with</span> highlight\"\n ]\n } \n \"\"\"\n highlights: JSONObject\n score: Float\n}\n\n\"\"\"Search Meta that appears on individual items\"\"\"\ninterface SearchResultMeta {\n highlights: JSONObject\n score: Float!\n}\n\ntype SearchSavedSearch implements SearchResult {\n highlights: JSONObject\n item: SavedSearch!\n score: Float\n}\n\ntype SearchSavedSearchPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchSavedSearch!]!\n stats: SearchStats\n total: Int!\n}\n\n\"\"\"\nThese are the ways you can sort search results\n\nRanked sorting of return results. If NULL then the score will be the only factor\nIf specified then score is implicitly the last sort criteria\n\"\"\"\nenum SearchSortEnum {\n AREA_DESC\n DATE_CREATED_ASC\n DATE_CREATED_DESC\n DATE_UPDATED_ASC\n DATE_UPDATED_DESC\n MINE\n MODEL_VERSION_ASC\n MODEL_VERSION_DESC\n NAME_ASC\n NAME_DESC\n}\n\nunion SearchStats = ProjectSearchMeta | SearchMeta\n\ntype SearchSuggestionResult implements SearchResult {\n highlights: JSONObject\n item: DBObj\n score: Float\n}\n\ntype SearchSuggestionResults {\n metaKey: [SearchSuggestions!]!\n metaValues: [SearchSuggestions!]!\n results: [SearchSuggestionResult!]!\n tags: [SearchSuggestions!]!\n}\n\ntype SearchSuggestions {\n freq: Int\n score: Float!\n text: String!\n}\n\ntype SearchUser implements SearchResult {\n highlights: JSONObject\n item: User!\n score: Float\n}\n\ntype SearchUserPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchUser!]!\n stats: SearchStats\n total: Int!\n}\n\nenum SearchableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\nenum SeverityEnum {\n CRITICAL\n DEBUG\n ERROR\n INFO\n WARNING\n}\n\n\"\"\"Links to various social networks\"\"\"\ntype SocialLinks {\n facebook: URL\n instagram: URL\n linkedIn: URL\n tiktok: URL\n twitter: URL\n website: URL\n}\n\ninput SocialLinksInput {\n facebook: String\n instagram: String\n linkedIn: String\n tiktok: String\n twitter: String\n website: URL\n}\n\nenum StarrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\ntype Symbology {\n error: String\n legend: [[String!]!]\n mapboxJson: JSONObject\n name: String!\n rampType: RampTypeEnum\n state: SymbologyStateEnum!\n url: String\n}\n\n\"\"\"SymbologyStateEnum\"\"\"\nenum SymbologyStateEnum {\n ERROR\n FETCHING\n FOUND\n MISSING\n NOT_APPLICABLE\n UNKNOWN\n}\n\ntype TileIndexOriginFile implements FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype TileService {\n bounds: [Float]\n duration: Float\n errorMsg: String\n format: String\n indexUrl: String\n lastState: DateTime\n layers: [String!]\n localPath: String\n maxZoom: Int\n minZoom: Int\n numFiles: Int\n originFile: TileIndexOriginFile\n projectId: String\n rasterStats: JSONObject\n rsXPath: String!\n started: DateTime\n state: TilingStateEnum!\n symbologies: [String!]\n tileType: TileTypesEnum\n url: String\n}\n\nenum TileTypesEnum {\n HTML\n RASTER\n VECTOR_GPKG\n VECTOR_SHP\n}\n\nenum TilingStateEnum {\n CREATING\n FETCHING\n FETCH_ERROR\n INDEX_NOT_FOUND\n LAYER_NOT_FOUND\n NOT_APPLICABLE\n NO_GEOMETRIES\n QUEUED\n SUCCESS\n TILING_ERROR\n TIMEOUT\n UNKNOWN\n}\n\ntype Transfer implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n id: ID!\n includeProjects: Boolean\n \"\"\"Allows the request to have an attached note\"\"\"\n note: String!\n state: TransferStateEnum!\n \"\"\"Sorting and pagination are not available for these items\"\"\"\n transferObjects: [TransferObject!]!\n transferTo: Owner!\n transferType: TransferrableTypesEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput TransferEntityItemsInput {\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n}\n\ninput TransferInput {\n \"\"\"\n (Optional) When transferring a collection you can choose to transfer any projects in that collection (that you own) as well\n \"\"\"\n includeProjects: Boolean\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"DBIds of the items to transfer\"\"\"\n objectIds: [ID!]!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n \"\"\"\n What type of transfer is this:\n - project(s): one or more projects\n - collection: Transfer the colletion with an option for any owned projects\n - organization: this is different from simply making someone else the owner\n this means move all projects / collections to another user or org.\n - user: Transfer all my projects/collections to another org/user\n \"\"\"\n transferType: TransferrableTypesEnum!\n}\n\nunion TransferObject = Collection | Organization | Project | User\n\nenum TransferStateEnum {\n ACCEPTED\n EXPIRED\n IN_PROGRESS\n PROPOSED\n REJECTED\n}\n\nenum TransferrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n USER\n}\n\nscalar URL\n\ntype UploadProjectFileUrls {\n relPath: String!\n urls: [String]\n}\n\ntype UploadProjectRequest {\n create: [String!]!\n delete: [String!]!\n newId: String\n token: String!\n update: [String!]!\n}\n\ntype UploadUrl {\n fields: JSONObject!\n token: String!\n url: String!\n}\n\n\"\"\"A User object is any user in the system\"\"\"\ntype User implements DBObj & UserInterface {\n \"\"\"User affiliations (usually external to the data exchange)\"\"\"\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"\nAffiliation can be anything as long as it fits as a list of\nstrings with URLs\n\"\"\"\ntype UserAffiliation {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninput UserAffiliationInput {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninterface UserInterface {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliation]!\n \"\"\"URL To Avatar image\"\"\"\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"When did we last see the user?\"\"\"\n lastLogin: DateTime!\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n \"\"\"Object containing URLS to social media sites\"\"\"\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ntype WarehouseInfo {\n api: String\n businessLogic: String\n projectFile: String\n warehouse: String\n xml: String\n xsd: String\n}\n\ntype WatcherOutput {\n errors: [String]\n message: String\n results: [String]\n}\n\ntype ZipFileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n pendingSince: DateTime\n progress: Int\n size: BigInt\n}\n"], ["\nschema {\n query: Query\n mutation: Mutation\n}\n\nscalar BigInt\n\ntype Collection implements DBObj & HasOwner & HasStar & HasTags {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"(Optional) Who to contact (might be different from owner)\"\"\"\n contact: User\n createdBy: User!\n createdOn: DateTime!\n description: String!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n \"\"\"Paginated, ordered list of projects this collection contains\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput CollectionInput {\n \"\"\"Citation string\"\"\"\n citation: String\n \"\"\"Remove the contact for this collection\"\"\"\n clearContact: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"User ID of the contact for this collection (Optional)\"\"\"\n contact: OwnerInput\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Collection visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ninterface DBObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Key-value pairs for attaching metadata to objects\"\"\"\n meta: [MetaData!]!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\n\"\"\"Notifications get a stripped-down version of the DBObj\"\"\"\ninterface DBObjNotifications {\n createdBy: User!\n \"\"\"\n User who created object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields\n \"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n updatedBy: User!\n \"\"\"\n User who last updated object\n NOTE: We need to account for users that are no longer there, \n That's why we have the duplicated fields \n \"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninput DBObjNotificationsInput {\n \"\"\"User who created object\"\"\"\n createdById: ID!\n createdByName: String!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"Name of the object\"\"\"\n name: String!\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String!\n \"\"\"User who last updated object\"\"\"\n updatedById: ID!\n updatedByName: String!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ninterface DBSimpleObj {\n \"\"\"User who created object\"\"\"\n createdBy: User!\n \"\"\"Identifies the date and time when the object was created.\"\"\"\n createdOn: DateTime!\n \"\"\"Db GUID\"\"\"\n id: ID!\n \"\"\"User who last updated object\"\"\"\n updatedBy: User!\n \"\"\"Identifies the date and time when the object was updated.\"\"\"\n updatedOn: DateTime!\n}\n\ntype Dataset implements DBObj {\n analysisId: String\n \"\"\"These are the projects that use this layer\"\"\"\n attachedDatasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n citation: String\n createdBy: User!\n createdOn: DateTime!\n datasetContainer: DatasetContainerTypesEnum!\n \"\"\"\n All of these fields are actually derivatives of the rsXPath\n \n The type of dataset helps us understand how to work with it\n These types are derived directly from the XML enumeration\n \"\"\"\n datasetType: DatasetTypeEnum!\n datasetXMLId: String!\n description: String!\n \"\"\"\n For Direct S3 File listings. This is a query that depends on the type\n of dataset. Sometimes we also need sidecars to come back\n \"\"\"\n files: [FileDownloadMeta!]!\n \"\"\"\n The ID for datasets takes the form 'PROJ_ORIGIN_GUID/REALIZATION_ID/DATASET_ID'\n and corresponds to the S3 path we store things\n \n NOTE: ID is different from the dsId (which is the id attribute on the XML node) \n \"\"\"\n id: ID!\n \"\"\"Some datasets can have sublayers (mainly just Geopackages)\"\"\"\n layers: [DatasetLayer]\n localPath: String!\n meta: [MetaData!]!\n name: String!\n \"\"\"\n The original dataset (if there is one). THis is null if this is the origin\n \"\"\"\n origin: Dataset\n \"\"\"Backwards lookup of the project this dataset belongs to\"\"\"\n project: Project!\n realizationXMLId: String\n \"\"\"Backwards lookup to the project referenced b\"\"\"\n refProject: Project\n rsXPath: String!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"These are the XML tag containers where you can find datasets\"\"\"\nenum DatasetContainerTypesEnum {\n CommonDatasets\n Configuration\n Datasets\n Inputs\n Intermediates\n Logs\n Outputs\n Products\n}\n\ninput DatasetInput {\n citation: String\n description: String\n \"\"\"\n Optional. If this is a linked dataset then its extRef should be present. this is an attribute on the dataset node in the XML\n and it takes the form:\n badfe8c1-0342-4876-8fac-b2eb5493a90f:Project/REALIZATION/SLOPE\n PROJECT_UUID:rsXPath\n \"\"\"\n extRef: ID\n \"\"\"Geopackages can have sublayers\"\"\"\n layers: [DatasetLayerInput!]\n \"\"\"\n local path on the user's system. This comes directly from the <Path> node in the project xml\n \"\"\"\n localPath: String!\n meta: [MetaDataInput!]\n name: String!\n \"\"\"\n This is the rsXPath to the node in the project (not the origin project)\n It is a proprietary path system to uniquely identify datasets in our XML files\n This rsXPath takes the form: 'Project/Realizations/Realization#REAL1/Intermediates/Geopackage#GEO1'\n where the hashes are shorthand for IDS\n \"\"\"\n rsXPath: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ntype DatasetLayer {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaData!]\n name: String!\n summary: String\n}\n\n\"\"\"Geopackages can have sublayers\"\"\"\ninput DatasetLayerInput {\n citation: String\n description: String\n lyrName: String!\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\ninput DatasetLayerUpdate {\n citation: String\n description: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\n\"\"\"\nenum DatasetTypeEnum {\n AuxInstrumentFile\n CSV\n ConfigFile\n DEM\n DataTable\n Database\n File\n Geopackage\n HTMLFile\n HillShade\n Image\n InstrumentFile\n LogFile\n MSAccessDB\n PDF\n Raster\n SQLiteDB\n SurveyQualityDB\n TIN\n Vector\n Video\n ZipFile\n}\n\ninput DatasetUpdate {\n citation: String\n description: String\n dsId: String\n meta: [MetaDataInput!]\n name: String\n summary: String\n}\n\nscalar DateTime\n\nscalar EmailAddress\n\nenum EntitiesWithImagesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n PROJECT_TYPE\n USER\n}\n\nenum EntityDeleteActionsEnum {\n DELETE\n DELETE_COMPLETE\n MAKE_PUBLIC\n REQUEST_TRANSFER\n}\n\ninput EntityDeletionOptions {\n \"\"\"\n TotalDelete means This item has been cleaned up completely including\n shared dataset: this will break links for shared projects so it should\n be the exception and not the rule.\n \"\"\"\n totalDelete: Boolean\n \"\"\"\n Optional: request transfer of all projects and collections to another Owner in the system\n \"\"\"\n transfer: TransferEntityItemsInput\n}\n\ntype FileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ninput FileDownloadMetaInput {\n contentType: String\n localPath: String!\n md5: String!\n size: BigInt\n}\n\ninterface FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype FileUploadMeta {\n downloadUrl: String!\n key: String!\n}\n\ninterface HasOwner {\n ownedBy: Owner!\n}\n\ninterface HasStar {\n starred: Boolean!\n starredCount: Int!\n}\n\ninterface HasTags {\n tags: [String!]!\n}\n\n\"\"\"Small medium and large image sizes\"\"\"\ntype HeroImage {\n lg: URL\n md: URL\n sm: URL\n}\n\ntype HiddenResult {\n id: ID!\n}\n\nenum ImageTypeEnum {\n AVATAR\n HERO\n LOGO\n}\n\nscalar JSONObject\n\nenum JobStatusEnum {\n FAILED\n PROCESSING\n READY\n SUCCESS\n UNKNOWN\n}\n\n\"\"\"\nJobStatusObj: The shape of the JSON file that stores the state of the uploaded item.\n\"\"\"\ntype JobStatusObj {\n \"\"\"\n Jobs may store different settings. leave a data param as JSONObject so we can extend it\n without needing to modify the schema\n \"\"\"\n data: JSONObject\n errors: [String!]\n metaData: JSONObject\n percentComplete: Int\n projectId: String\n status: JobStatusEnum!\n}\n\ntype Link {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ninput LinkInput {\n \"\"\"alt text\"\"\"\n alt: String\n \"\"\"Link to the object\"\"\"\n href: URL!\n \"\"\"Link text\"\"\"\n text: String\n}\n\ntype MapCluster {\n \"\"\"[longitude, latitude]\"\"\"\n coords: [Float!]!\n count: Int!\n \"\"\"check out npm's 'ngeogrid' for how to turn this back into coordinates\"\"\"\n hash: String!\n}\n\ntype MetaData {\n ext: MetaDataExtEnum\n key: String!\n locked: Boolean\n type: MetaDataTypeEnum\n value: String\n}\n\nenum MetaDataExtEnum {\n DATASET\n PROJECT\n WAREHOUSE\n}\n\n\"\"\"When submitting metadata use this object\"\"\"\ninput MetaDataInput {\n \"\"\"\n If this metadata was impored from an external project then list what kind of MetaData it is.\n Options: PROJECT, DATASET, WAREHOUSE\n \"\"\"\n ext: MetaDataExtEnum\n \"\"\"Metadata key string\"\"\"\n key: String!\n \"\"\"\n Optional locked flag. Defaults to false. If true then this metadata value cannot be edited by the UI\n \"\"\"\n locked: Boolean\n \"\"\"Optional meta type value. Defaults to String\"\"\"\n type: MetaDataTypeEnum\n \"\"\"\n Strignified metadata value\n NOTE: In the XML spec null is allowed so technically it is allowed here too.\n \"\"\"\n value: String\n}\n\n\"\"\"\nThis mirrors the RiverscapesXML XSD Schema\nUnfortunately we need to keep them in sync\nfind it here: RiverscapesXML/Projects/XSD/V2/RiverscapesProject.xsd\n\"\"\"\nenum MetaDataTypeEnum {\n BOOLEAN\n FILEPATH\n FLOAT\n GUID\n HIDDEN\n IMAGE\n INT\n ISODATE\n JSON\n MARKDOWN\n RICHTEXT\n STRING\n TIMESTAMP\n URL\n VIDEO\n}\n\ntype Mutation {\n \"\"\"\n Accept or reject an org invite. State afterward will be ACCEPTED or REJECTED\n \"\"\"\n actionOrganizationInvite(accept: Boolean!, id: ID!, role: OrganizationInviteRoleEnum): OrganizationInvite\n addCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n ADMIN: Scan over the dynamoDB and create appropriate OpenSearch entries\n \"\"\"\n adminReIndexOpenSearch(paginationToken: String): String\n \"\"\"\n ADMIN: Recreate/empty opensearch indeces (you will need to run adminRebuildOpenSearch after this)\n \"\"\"\n adminRecreateOpenSearch: Boolean\n \"\"\"ADMIN: Wipe DynamoDB except for users\"\"\"\n adminWipeDynamo: Int\n changeProjectOwner(owner: OwnerInput!, projectId: ID!): Project\n \"\"\"Create a collection of projects\"\"\"\n createCollection(collection: CollectionInput!, orgId: ID): Collection\n createNotification(notification: NotificationInput): Notification\n createOrganization(organization: OrganizationInput!): Organization\n \"\"\"\n Organization admins/owners can invite others. the invite will have the state: INVITED\n One of userId or email must be provided.\n \"\"\"\n createOrganizationInvite(email: String, organizationId: ID!, role: OrganizationInviteRoleEnum, userId: ID): OrganizationInvite\n \"\"\"For user when logging in for the first time\"\"\"\n createProfile(id: ID, profile: ProfileInput!): Profile\n \"\"\"\n Create a new project. This is the main mutation for creating a new project\n @param projectId: (optional) The ID of the project. If not given then a new one is generated. If it exists in the system then an error is thrown.\n @param project: The project object\n @param projectTypeId: The ID of the project type\n @param orgId: The ID of the organization. This will become the project owner. This field is mutually exclusive with userId\n @param userId: The ID of the user. This will become the project owner. This field is mutually exclusive with orgId\n @param agentId: The ID of the agent. This will become the createdBy field in the project\n \"\"\"\n createProject(agentId: ID, orgId: ID, project: ProjectInput!, projectId: ID, projectTypeId: String, userId: ID): Project\n \"\"\"\n For most users \"createProject\" is actually \"sugest a project type\" and will be created\n with state \"SUGGESTED\". Only admins can create a ProjectType that starts with state \"ACTIVE\"\n \"\"\"\n createProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n createSavedSearch(orgId: ID, savedSearch: SavedSearchInput!): SavedSearch\n createTransfer(transfer: TransferInput!): Transfer\n deleteCollection(id: ID!): MutationResult\n \"\"\"\n This is the equivalent of dismissing notifications. It is permanent\n - if ids is specified then specific notifications will be deleted\n - if all: True then all notifications for this user will be deleted\n \"\"\"\n deleteNotifications(all: Boolean, ids: [ID!]): MutationResult\n deleteOrganization(id: ID!, options: EntityDeletionOptions): MutationResult\n \"\"\"Organization admins/owners can dis-invite others.\"\"\"\n deleteOrganizationInvite(id: ID!): MutationResult\n \"\"\"Delete your user profile from the system\"\"\"\n deleteProfile(options: EntityDeletionOptions): MutationResult\n \"\"\"\n Delete a project. This will mark a project for deletion so it stops showing in search results. The actual deletion\n will happen in the background and only complete once the purgeProject() call has been fired.\n \"\"\"\n deleteProject(options: EntityDeletionOptions, projectId: ID!): MutationResult\n \"\"\"\n Delete is a super-rare, super high-privilege command that will only work for admins\n because it means deleting a project type and all projects with that type\n \"\"\"\n deleteProjectType(id: String!): MutationResult\n deleteSavedSearch(id: ID!): MutationResult\n deleteTransfer(transferId: ID!): MutationResult\n \"\"\"\n When all files have been uploaded you can call this to start processing the project\n \"\"\"\n finalizeProjectUpload(token: String!): JobStatusObj\n \"\"\"\n Purge a project. This will delete a project from the system. This is a machine-only call used by the janitor\n \"\"\"\n purgeProject(projectId: ID!): MutationResult\n reIndexProjectXML(projectId: ID!): WatcherOutput\n rebuildWebTiles(force: Boolean, projectId: ID!, rsXPaths: [String!]): RebuildWebTilesResponse!\n removeCollectionProjects(collectionId: ID!, projectIds: [ID!]!): Collection\n \"\"\"\n Kick a user (or yourself) from the org (Owners cannot be removed until they are downgraded)\n \"\"\"\n removeOrganizationMember(organizationId: ID!, userId: ID!): MutationResult\n \"\"\"\n Users can request access to an organization with initial role of VIEWER. the invite will have the state: REQUESTED\n \"\"\"\n requestOrganizationInvite(organizationId: ID!): OrganizationInvite\n \"\"\"Organization admins/owners can resend expired invitiations.\"\"\"\n resendOrganizationInvite(id: ID!): OrganizationInvite\n \"\"\"updateCollection: Note that with projectIds, order matters\"\"\"\n updateCollection(collection: CollectionInput, id: ID!): Collection\n \"\"\"ids: Notification ids (large interger timestamp)\"\"\"\n updateNotifications(ids: [ID!]!, markAs: NotificationOperationEnum!): MutationResult\n updateOrganization(id: ID!, organization: OrganizationInput!): Organization\n updateOrganizationMember(organizationId: ID!, role: OrganizationRoleEnum, userId: ID!): OrganizationUser\n \"\"\"Updating your user proile\"\"\"\n updateProfile(profile: ProfileInput!): Profile\n \"\"\"\n Update a project. This is the main mutation for updating a project\n @param projectId: The ID of the project\n @param project: The project object\n @param skipXMLUpdate: If true then the XML file is not updated. This is used by the uploader\n @param agentId: The ID of the agent. This will become the updatedBy field in the project\n \"\"\"\n updateProject(agentId: ID, project: ProjectInput!, projectId: ID!, skipXMLUpdate: Boolean): Project\n updateProjectDataset(dataset: DatasetUpdate!, projectId: ID!, rsXPath: String!): Dataset\n updateProjectDatasetLayer(datasetLayer: DatasetLayerUpdate!, lyrName: String!, projectId: ID!, rsXPath: String!): DatasetLayer\n updateProjectQAQC(projectId: ID!, qaqc: QAQCEventInput!, qaqcId: ID!): QAQCEvent\n \"\"\"\n This call allows you to alter the project type object (including the ID)\n If the ID is changed then we'll need to go through all projects of that type\n and rename them. This should be a super rare operation but it's here for completeness\n \"\"\"\n updateProjectType(id: String!, projectType: ProjectTypeInput!, state: ProjectTypeStateEnum): ProjectType\n updateSavedSearch(id: ID!, savedSearch: SavedSearchInput!): SavedSearch\n updateStar(id: ID!, starred: Boolean!, type: StarrableTypesEnum!): MutationResult\n \"\"\"\n Transfers are fairly immutable. You can only change the note and the state\n \"\"\"\n updateTransfer(note: String, state: TransferStateEnum, transferId: ID!): Transfer\n zipRebuild(force: Boolean, projectId: ID!): Project\n}\n\n\"\"\"Generic Mutation results\"\"\"\ntype MutationResult {\n \"\"\"The error (if there is one)\"\"\"\n error: String\n \"\"\"the ID of the object being mutated\"\"\"\n ids: [ID!]\n \"\"\"Any non-error message returned by the mutation for use in the UI\"\"\"\n message: String\n \"\"\"did this mutation succeed?\"\"\"\n success: Boolean!\n}\n\ntype MyStars {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n users(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedUsers!\n}\n\ntype Notification {\n id: ID!\n object: DBObjNotifications!\n seen: Boolean!\n \"\"\"Same as Obj. this is a stripped-down user object\"\"\"\n subject: DBObjNotifications!\n time: DateTime!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationActionsEnum {\n CREATED\n DELETED\n RENAMED\n TRANSFERRED\n UPDATED\n}\n\ninput NotificationInput {\n object: DBObjNotificationsInput!\n subject: DBObjNotificationsInput!\n type: NotificationTypesEnum!\n verb: NotificationActionsEnum!\n}\n\nenum NotificationOperationEnum {\n DELETE\n MARK_READ\n MARK_UNREAD\n}\n\nenum NotificationTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\n\"\"\"On a per-object basis, tell me what I can and can't do\"\"\"\ntype ObjectPermissions {\n delete: Boolean\n update: Boolean\n view: Boolean\n}\n\ntype Organization implements DBObj & HasStar {\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n meta: [MetaData!]!\n \"\"\"\n This is the role of the user making the query (or the role of the requested user)\n \"\"\"\n myRole: OrganizationRoleEnum!\n name: String!\n \"\"\"List of invites to manage\"\"\"\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"\n List of this organization's approved user (Does not include pending invites)\n \"\"\"\n organizationUsers(limit: Int!, offset: Int!, role: OrganizationRoleEnum, sort: [SearchSortEnum!]): PaginatedOrganizationUsers!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n preferences: JSONObject\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput OrganizationInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Social Links\"\"\"\n social: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype OrganizationInvite implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n email: String\n id: ID!\n \"\"\"\n The user being invited. Null if they don't have an account in the system yet\n \"\"\"\n invitee: User\n inviter: User!\n organization: Organization!\n retries: Int!\n role: OrganizationInviteRoleEnum!\n state: OrganizationInviteStateEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum OrganizationInviteRoleEnum {\n ADMIN\n CONTRIBUTOR\n VIEWER\n}\n\nenum OrganizationInviteStateEnum {\n ACCEPTED\n EXPIRED\n INVITED\n REJECTED\n REQUESTED\n}\n\nenum OrganizationRoleEnum {\n ADMIN\n CONTRIBUTOR\n NONE\n OWNER\n VIEWER\n}\n\ntype OrganizationUser {\n organization: Organization!\n role: OrganizationRoleEnum!\n user: User!\n}\n\nunion Owner = Organization | User\n\ninput OwnerInput {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\nenum OwnerInputTypesEnum {\n ORGANIZATION\n USER\n}\n\nunion Owners = PaginatedUsers\n\ntype PaginatedCollections implements Pagination {\n items: [Collection!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedDatasets implements Pagination {\n items: [Dataset!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedFileDownloadMeta implements Pagination {\n items: [FileDownloadMeta!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedNotifications implements Pagination {\n items: [Notification!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationInvites implements Pagination {\n items: [OrganizationInvite!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizationUsers implements Pagination {\n items: [OrganizationUser!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedOrganizations implements Pagination {\n items: [Organization!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjectTypes implements Pagination {\n items: [ProjectType!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedProjects implements Pagination {\n items: [ProjectResult!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedQAQCEvents implements Pagination {\n items: [QAQCEvent!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedSavedSearches implements Pagination {\n items: [SavedSearch!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\ntype PaginatedUsers implements Pagination {\n items: [User!]!\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"Generic Pagination Interface\"\"\"\ninterface Pagination {\n limit: Int!\n offset: Int!\n total: Int!\n}\n\n\"\"\"A Profile is MY User object and there are extra fields I can look at\"\"\"\ntype Profile implements DBObj & UserInterface {\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"If the user has never logged in here this is uninitialized\"\"\"\n initialized: Boolean\n isAdmin: Boolean!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n notifications(limit: Int!, offset: Int!, op: NotificationOperationEnum): PaginatedNotifications!\n organizationInvites(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizationInvites!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n preferences: JSONObject!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n stars: MyStars!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput ProfileInput {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliationInput!]\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n avatarToken: String\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearAvatar: Boolean\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the organization\"\"\"\n name: String\n \"\"\"Organization Preferences Object\"\"\"\n preferences: JSONObject\n \"\"\"Specify a set of connection strings for Social media\"\"\"\n socialLinks: SocialLinksInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n}\n\ntype Project implements DBObj & HasOwner & HasStar {\n \"\"\"Banner image (optional)\"\"\"\n bounds: ProjectBounds\n citation: String\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n datasets(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedDatasets!\n deleted: Boolean!\n description: String!\n dirty: Boolean!\n files: [FileDownloadMeta!]!\n \"\"\"Banner image (optional)\"\"\"\n heroImage: HeroImage\n id: ID!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n \"\"\"\n This is my relation to this project. This is relatively easy to calculate if I own this object.\n \"\"\"\n permissions: ObjectPermissions!\n projectType: ProjectType!\n qaqc(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedQAQCEvents!\n ref: String!\n sponsor: Owner\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n \"\"\"Bytesize of the unzipped project\"\"\"\n totalSize: BigInt\n tree: ProjectTree!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectVisibilityEnum!\n}\n\ntype ProjectBounds implements DBSimpleObj {\n \"\"\"Calculated area of \"\"\"\n area: Float\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]!\n \"\"\"centroid: [longitude, latitude]\"\"\"\n centroid: [Float!]!\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n Geohash is how we do clustering in ElasticSearch\n https://github.com/sunng87/node-geohash\n https://www.npmjs.com/package/ngeohash\n https://www.npmjs.com/package/@mapbox/geojson-area\n https://www.npmjs.com/package/@mapbox/geojson-extent\n https://www.npmjs.com/package/@mapbox/geojson-normalize\n https://github.com/hackergrrl/geojson-polygons-equal/blob/master/index.js\n https://github.com/jczaplew/geojson-precision/blob/master/index.js\n https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html\n \"\"\"\n geoHash: String\n \"\"\"\n This id is unique to specific shapes in the DB\n Useful for grouping multiple projects with the same bounding polygon\n It is a GUID\n \"\"\"\n id: ID!\n \"\"\"polygon: Simplified GeoJSON of project outputs.\"\"\"\n polygonUrl: URL!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\nenum ProjectDeleteChoicesEnum {\n DELETE\n DELETE_COMPLETE\n}\n\nenum ProjectGroupVisibilityEnum {\n PUBLIC\n SECRET\n}\n\ninput ProjectInput {\n \"\"\"\n Project bounds object code you were given from the checkUploadBounds endpoint\n \"\"\"\n boundsToken: String\n \"\"\"Scientitfic or accademic citation (string)\"\"\"\n citation: String\n \"\"\"Resets/deletes the project's bounds\"\"\"\n clearBounds: Boolean\n \"\"\"Resets/deletes the user's avatar back to the default\"\"\"\n clearHeroImage: Boolean\n \"\"\"remove the sponsor for the proejct\"\"\"\n clearSponsor: Boolean\n \"\"\"Attach new datasets or add/remove linked datasets\"\"\"\n datasets: [DatasetInput!]\n \"\"\"\n ONLY FOR UPDATING: Specify dataset ids (and by that I mean rsXPaths) to be deleted\n \"\"\"\n deleteDatasets: [ID!]\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n heroImageToken: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the project.\"\"\"\n name: String\n \"\"\"Attache any QAQC tasks in order\"\"\"\n qaqc: [QAQCEventInput!]\n \"\"\"Optional: Sponsor ID\"\"\"\n sponsor: OwnerInput\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Tags for this collection\"\"\"\n tags: [String!]\n \"\"\"Byte size of entire project uncompressed\"\"\"\n totalSize: BigInt\n \"\"\"Project visibility settings: Either PUBLIC, PRIVATE or SECRET\"\"\"\n visibility: ProjectVisibilityEnum\n}\n\nunion ProjectResult = HiddenResult | Project\n\ntype ProjectSearchMeta {\n \"\"\"\n The area covered by all projects returned\n (all overlaps are included)\n \"\"\"\n area: Float\n \"\"\"\n bbox: [minLng, minLat, maxLng, maxLat]\n The geo bounds of all possible results\n (Applies to projects only)\n \"\"\"\n bbox: [Float!]\n \"\"\"\n Histogram of distances\n (Applies to projects only)\n \"\"\"\n geoBuckets: JSONObject\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"\n OpenSearch query/results for development. Only present when debug=true on the query and the user is an admin.\n \"\"\"\n openSearch: JSONObject\n \"\"\"\n ProjectTypes: Key-balue pairs of project types and counts\n (Applies to projects only)\n \"\"\"\n projectTypes: JSONObject\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ntype ProjectSearchParams {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDate\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaData!]\n name: String\n ownedBy: SearchOwner\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDate\n}\n\n\"\"\"\nFor searching projects we use this for both the searchProjects query AND\nthe SavedSearchInput type\n\"\"\"\ninput ProjectSearchParamsInput {\n \"\"\"bbox: [minLng, minLat, maxLng, maxLat]\"\"\"\n bbox: [Float!]\n \"\"\"\n Filter to projects that have this particular Bound polygon assoicated with them by id\n \"\"\"\n boundsId: ID\n \"\"\"Filter to projects inside a collection\"\"\"\n collection: ID\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only projects that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to projects owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n \"\"\"The id (machineName) of the project type. Case insensitive.\"\"\"\n projectTypeId: String\n tags: [String!]\n \"\"\"\n Filter to projects between two dates {from, to}\n You can specify one of 'from' OR 'to' to find projects before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify projects BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n \"\"\"Filter to projects of a certain visibility\"\"\"\n visibility: ProjectVisibilityEnum\n}\n\ntype ProjectTree {\n branches: [ProjectTreeBranch!]!\n defaultView: ID\n description: String\n leaves: [ProjectTreeLeaf!]!\n name: String\n views: [ProjectTreeView!]!\n}\n\ntype ProjectTreeBranch {\n \"\"\"Branch ID (generated at parse time)\"\"\"\n bid: Int!\n collapsed: Boolean\n label: String!\n \"\"\"Parent ID (generated at parse time)\"\"\"\n pid: Int!\n}\n\n\"\"\"\nProjectTreeLayerTypes is an enumeration to help us display layers with the\ncorrect icon and assign them to the right slot\n\"\"\"\nenum ProjectTreeLayerTypeEnum {\n FILE\n LINE\n POINT\n POLYGON\n RASTER\n REPORT\n TIN\n}\n\ntype ProjectTreeLeaf {\n \"\"\"\n blLayerId: The id on the Node element from the business logic that we use in Views to \n reference leaves in the tree\n \"\"\"\n blLayerId: String\n \"\"\"\n This is going to let us find the actual file we need to download (if applicable)\n \"\"\"\n filePath: String\n \"\"\"Tree id of this leaf. This is generated at parse-time\"\"\"\n id: Int!\n label: String!\n \"\"\"from the BL (Optional)\"\"\"\n labelxpath: String\n \"\"\"from BL. Renderable WebRave Types (Not DS Types)\"\"\"\n layerType: ProjectTreeLayerTypeEnum!\n \"\"\"This is going to let us find the DasetLayer (if applicaple)\"\"\"\n lyrName: String\n \"\"\"Business Logic id=\"\" attribute\"\"\"\n nodeId: ID\n \"\"\"\n parent ID (relates to bid from ProjectTreeBranch) \n generated at parse-time\n \"\"\"\n pid: Int!\n \"\"\"\n This is going to let us find the Dataset\n corresponding to the leaf we're trying to render\n \"\"\"\n rsXPath: String!\n symbology: String\n transparency: Int\n}\n\ntype ProjectTreeView {\n description: String\n id: ID!\n layers: [ProjectTreeViewLayer!]!\n name: String!\n}\n\ntype ProjectTreeViewLayer {\n id: ID!\n visible: Boolean\n}\n\ntype ProjectType implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n logo: URL\n machineName: String!\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaData!]!\n name: String!\n state: ProjectTypeStateEnum!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n url: URL\n}\n\ninput ProjectTypeInput {\n \"\"\"Resets/deletes the organization logo back to the default\"\"\"\n clearLogo: Boolean\n description: String\n \"\"\"The Code you were given from the checkUploadImage endpoint\"\"\"\n logoToken: String\n \"\"\"\n This meta derives from the XML. When we change it we need to write back tot he XML\n The user should be warned that if the XML changes it will overwrite these values\n \"\"\"\n meta: [MetaDataInput!]\n name: String\n summary: String\n url: URL\n}\n\nenum ProjectTypeStateEnum {\n ACTIVE\n DELETED\n SUGGESTED\n}\n\ntype ProjectUploadUrl {\n fields: JSONObject\n origPath: String\n url: String!\n}\n\ntype ProjectValidation {\n errors: [ProjectValidationError]\n valid: Boolean\n}\n\ntype ProjectValidationError {\n code: String\n message: String!\n severity: SeverityEnum\n}\n\nenum ProjectVisibilityEnum {\n PRIVATE\n PUBLIC\n SECRET\n}\n\ntype QAQCEvent implements DBObj {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The date this task was performed. This will help us sort out a timeline\n for the QA/QC workflow\n \"\"\"\n datePerformed: DateTime!\n description: String!\n id: ID!\n \"\"\"QA/QC Nodes may have extra metadata but it is not mandatory\"\"\"\n meta: [MetaData!]!\n \"\"\"The QAQC Task Name\"\"\"\n name: String!\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts\n \"\"\"\n performedBy: String!\n \"\"\"The state of this QAQC Task \"\"\"\n state: QAQCStateEnum!\n summary: String!\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [Link!]\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput QAQCEventInput {\n datePerformed: DateTime!\n \"\"\"Long text (may include markdown)\"\"\"\n description: String\n \"\"\"Organization Metadata\"\"\"\n meta: [MetaDataInput!]\n name: String\n \"\"\"\n performed by: Some string indicating who is responsible for this task\n does NOT link to Riverscapes User accounts \n \"\"\"\n performedBy: String!\n \"\"\"The state of this QA/QC Task\"\"\"\n state: QAQCStateEnum!\n \"\"\"Summary or tagline\"\"\"\n summary: String\n \"\"\"Any supporting links to Github issues or anything else\"\"\"\n supportingLinks: [LinkInput!]\n}\n\nenum QAQCStateEnum {\n FAILED\n PASSED\n PROVISIONAL\n}\n\ntype Query {\n \"\"\"\n Works for images, bounds and projects. Checks if they have been processed and are ready for use\n \"\"\"\n checkUpload(token: String!): JobStatusObj\n collection(id: ID!): Collection\n dirtyProjects(limit: Int!, offset: Int!): PaginatedProjects\n downloadFile(filePath: String!, projectId: ID!): FileDownloadMeta\n downloadZip(projectId: ID!): ZipFileDownloadMeta\n getLayerTiles(projectId: ID!, projectTypeId: String, rsXPath: String!): TileService\n \"\"\"\n getWebSymbology for a given project type. These types will be retrived from the curated WebRave Symbology repo\n \"\"\"\n getWebSymbology(isRaster: Boolean, name: String!, projectTypeId: String): Symbology\n \"\"\"\n There are some useful properties that are useful for the CLI and other apps\n \"\"\"\n info: WarehouseInfo\n organization(id: ID!): Organization\n \"\"\"\n Profile includes the User object but also specific fields to the person logged in\n \"\"\"\n profile: Profile\n project(id: ID!): Project\n projectType(id: String!): ProjectType\n \"\"\"projectTypes list. Default state is ACTIVE\"\"\"\n projectTypes(limit: Int!, offset: Int!, state: ProjectTypeStateEnum): PaginatedProjectTypes\n requestUploadBounds: UploadUrl\n requestUploadImage(entityId: ID!, entityType: EntitiesWithImagesEnum!): UploadUrl\n \"\"\"\n Request an upload start. Writes a manifest file on the upload bucket\n and creates upload urls for all the files we want to add. \n This is also wher ethe referenved/unreferenced sorting happens\n \n Notes:\n \n - If projectId is given then this projet is uploaded as an UPDATE operation\n - If token is given then we just return a previously calculated download object\n - If neither token nor projectId is given then this is processed as a new project\n \n Arguments:\n \n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n - etags: a string list of etags (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - sizes: a string list of file sizes (S3 analog to MD5) for each file. List size must match \"files: [String!]!\"\n - noDelete: indicates that we do NOT want to touch remote files that are not also present on the local server\n - tags: a list of tags to add to the project (these are the data exchange tags)\n - visibility: the visibility of the project. Defaults to PUBLIC\n \"\"\"\n requestUploadProject(etags: [String!]!, files: [String!]!, noDelete: Boolean, owner: OwnerInput, projectId: String, sizes: [BigInt!]!, tags: [String!], token: String, visibility: ProjectVisibilityEnum): UploadProjectRequest\n \"\"\"\n Using requestUploadProject() you can get a valid upload token. From there you can ask for presigned urls for any file you\n have specified above\n \"\"\"\n requestUploadProjectFilesUrl(files: [String!]!, token: String!): [UploadProjectFileUrls]\n savedSearch(id: ID!): SavedSearch\n searchCollections(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchCollectionPagination!\n \"\"\"\n This is a complementary search to \"searchProjects\". It can be run with essentially the same\n parameters\n \n Note: params.bbox MUST be included for the searchProjectsMap\n clusters: the number of clusters we should aim for\n \"\"\"\n searchMapBounds(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!): SearchMapBoundsResult!\n \"\"\"\n Discussion here https://github.com/Riverscapes/rs-web-monorepo/discussions/251\n limit: the maximum number of clusters to get back. After this number the list is truncated and any remaining projects are simply represented by the \"remaining\" property\n precision: The size of the grid to place the clusters on. We use npm's ngeohash for gridding\n \"\"\"\n searchMapClusters(debug: Boolean, limit: Int!, minScore: Float, params: ProjectSearchParamsInput!, precision: Int!): SearchMapClusterResult!\n searchOrganizations(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchOrganizationPagination!\n searchProjects(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: ProjectSearchParamsInput!, sort: [SearchSortEnum!]): SearchProjectPagination!\n searchSavedSearches(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchSavedSearchPagination!\n \"\"\"\n As-you-type suggestions:\n TODO: this needs to be typed but for now it's just pure JSON\n \"\"\"\n searchSuggest(minScore: Float, text: String!, type: StarrableTypesEnum): SearchSuggestionResults\n searchUsers(debug: Boolean, limit: Int!, minScore: Float, offset: Int!, params: SearchParamsInput!, sort: [SearchSortEnum!]): SearchUserPagination!\n \"\"\"A User is any user in the system\"\"\"\n user(id: ID!): User\n \"\"\"\n Validate a raw project.rs.xml file to check if it is a valida candidate for uploading\n It is highly recommended that you call this before requestUploadProjectFileUrls or uploading\n files to prevent a lengthy process with a preventable error at the end\n \n - xml: String contents of the project.rs.xml file\n - owner: (optional) The intended owner of the new project. If left blank then UPDATE is assumed and the original owner is used.\n - files: a string list of filepaths to local files\n \"\"\"\n validateProject(files: [String!]!, owner: OwnerInput, xml: String!): ProjectValidation\n}\n\nenum RampTypeEnum {\n DISCRETE\n EXACT\n INTERPOLATED\n}\n\ntype RebuildWebTilesResponse {\n queued: [String!]\n skipped: [String!]\n}\n\ntype SavedSearch implements DBObj & HasOwner & HasStar & HasTags {\n createdBy: User!\n createdOn: DateTime!\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n description: String!\n id: ID!\n meta: [MetaData!]!\n name: String!\n ownedBy: Owner!\n permissions: ObjectPermissions!\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): SearchProjectPagination!\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParams!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n tags: [String!]!\n updatedBy: User!\n updatedOn: DateTime!\n visibility: ProjectGroupVisibilityEnum!\n}\n\ninput SavedSearchInput {\n \"\"\"\n The default sort to use. The UI may offer a way to change this on the fly\n \"\"\"\n defaultSort: [SearchSortEnum!]\n \"\"\"Verbose description of the object (< SOME_LIMIT kb of text)\"\"\"\n description: String\n \"\"\"Metadata for this object\"\"\"\n meta: [MetaDataInput!]\n \"\"\"Name of the object\"\"\"\n name: String\n \"\"\"The project search fields this saved search uses \"\"\"\n searchParams: ProjectSearchParamsInput\n \"\"\"Brief tagline or intro sentence for the item (<500 characters)\"\"\"\n summary: String\n \"\"\"Tags for this object\"\"\"\n tags: [String!]\n \"\"\"Saved Search visibility settings: Either PUBLIC or SECRET\"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ntype SearchCollection implements SearchResult {\n highlights: JSONObject\n item: Collection!\n score: Float\n}\n\ntype SearchCollectionPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchCollection!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDataset implements SearchResult {\n highlights: JSONObject\n item: Dataset!\n score: Float\n}\n\ntype SearchDatasetPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchDataset!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchDate {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ninput SearchDateInput {\n \"\"\"(Optional) , only use for BETWEEN operator\"\"\"\n from: DateTime\n \"\"\"(Optional), only use for BETWEEN operator\"\"\"\n to: DateTime\n}\n\ntype SearchMapBoundsItem {\n bounds: ProjectBounds!\n clusters: [MapCluster!]!\n projectCount: Int!\n}\n\ntype SearchMapBoundsResult {\n bounds: [SearchMapBoundsItem!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMapClusterResult {\n clusters: [MapCluster!]!\n \"\"\"The number of valid search results outstanding\"\"\"\n remaining: Int!\n}\n\ntype SearchMeta {\n maxScore: Float\n metaDataBuckets: JSONObject!\n \"\"\"\n OpenSearch query/results for development. Only present when debug=true on the query and the user is an admin.\n \"\"\"\n openSearch: JSONObject\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\n\"\"\"Search Meta that are common to all types\"\"\"\ninterface SearchMetaInterface {\n \"\"\"The maximum relevance score\"\"\"\n maxScore: Float\n \"\"\"Collection of stats about the Metadata key value pairs for this object\"\"\"\n metaDataBuckets: JSONObject!\n \"\"\"OpenSearch time to retrieve results (ms)\"\"\"\n searchTime: Float\n}\n\ntype SearchNotification implements SearchResult {\n highlights: JSONObject\n item: Notification!\n score: Float\n}\n\ntype SearchNotificationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchNotification!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganization implements SearchResult {\n highlights: JSONObject\n item: Organization!\n score: Float\n}\n\ntype SearchOrganizationInvite implements SearchResult {\n highlights: JSONObject\n item: OrganizationInvite!\n score: Float\n}\n\ntype SearchOrganizationInvitePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganizationInvite!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOrganizationPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchOrganization!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchOwner {\n id: String!\n type: OwnerInputTypesEnum!\n}\n\ninterface SearchPagination implements Pagination {\n \"\"\"The limit used for this query.\"\"\"\n limit: Int!\n \"\"\"The record offset for this query.\"\"\"\n offset: Int!\n \"\"\"The maximum score if this is a search result. Null otherwise\"\"\"\n stats: SearchStats\n \"\"\"\n The total objects in the system. OpenSearch can return this easily so it's useful for building pagination UI.\n \"\"\"\n total: Int!\n}\n\n\"\"\"SearchParams is used for search queries for everything except projects\"\"\"\ninput SearchParamsInput {\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n createdOn: SearchDateInput\n \"\"\"Only items that I can edit as a user\"\"\"\n editableOnly: Boolean\n keywords: String\n meta: [MetaDataInput!]\n name: String\n \"\"\"Filter to items owned by a user or organization\"\"\"\n ownedBy: OwnerInput\n tags: [String!]\n \"\"\"\n Filter to items between two dates {from, to}\n You can specify one of 'from' OR 'to' to find items before 'to' date or after 'from' date\n or you can specify both 'from' AND 'to' to specify items BETWEEN two dates\n \"\"\"\n updatedOn: SearchDateInput\n \"\"\"\n Filter to items of a certain visibility (valid for collections and saved searches only)\n \"\"\"\n visibility: ProjectGroupVisibilityEnum\n}\n\ntype SearchProject implements SearchResult {\n highlights: JSONObject\n item: Project!\n score: Float\n}\n\ntype SearchProjectPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProject!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchProjectType implements SearchResult {\n highlights: JSONObject\n item: ProjectType!\n score: Float\n}\n\ntype SearchProjectTypePagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchProjectType!]!\n stats: SearchStats\n total: Int!\n}\n\ntype SearchQAQCEvent implements SearchResult {\n highlights: JSONObject\n item: QAQCEvent!\n score: Float\n}\n\ntype SearchQAQCEventPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchQAQCEvent!]!\n stats: SearchStats\n total: Int!\n}\n\ninterface SearchResult {\n \"\"\"\n Takes the form:\n \"highlights\" : {\n \"name\" : [\n \"Riverscapes <span>Context</span> for HUC 16040102\"\n ],\n \"fieldName\" : [\n \"match1 <span>with</span> highlight\",\n \"match2 <span>with</span> highlight\"\n ]\n } \n \"\"\"\n highlights: JSONObject\n score: Float\n}\n\n\"\"\"Search Meta that appears on individual items\"\"\"\ninterface SearchResultMeta {\n highlights: JSONObject\n score: Float!\n}\n\ntype SearchSavedSearch implements SearchResult {\n highlights: JSONObject\n item: SavedSearch!\n score: Float\n}\n\ntype SearchSavedSearchPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchSavedSearch!]!\n stats: SearchStats\n total: Int!\n}\n\n\"\"\"\nThese are the ways you can sort search results\n\nRanked sorting of return results. If NULL then the score will be the only factor\nIf specified then score is implicitly the last sort criteria\n\"\"\"\nenum SearchSortEnum {\n AREA_DESC\n DATE_CREATED_ASC\n DATE_CREATED_DESC\n DATE_UPDATED_ASC\n DATE_UPDATED_DESC\n MINE\n MODEL_VERSION_ASC\n MODEL_VERSION_DESC\n NAME_ASC\n NAME_DESC\n}\n\nunion SearchStats = ProjectSearchMeta | SearchMeta\n\ntype SearchSuggestionResult implements SearchResult {\n highlights: JSONObject\n item: DBObj\n score: Float\n}\n\ntype SearchSuggestionResults {\n metaKey: [SearchSuggestions!]!\n metaValues: [SearchSuggestions!]!\n results: [SearchSuggestionResult!]!\n tags: [SearchSuggestions!]!\n}\n\ntype SearchSuggestions {\n freq: Int\n score: Float!\n text: String!\n}\n\ntype SearchUser implements SearchResult {\n highlights: JSONObject\n item: User!\n score: Float\n}\n\ntype SearchUserPagination implements Pagination & SearchPagination {\n limit: Int!\n offset: Int!\n results: [SearchUser!]!\n stats: SearchStats\n total: Int!\n}\n\nenum SearchableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\nenum SeverityEnum {\n CRITICAL\n DEBUG\n ERROR\n INFO\n WARNING\n}\n\n\"\"\"Links to various social networks\"\"\"\ntype SocialLinks {\n facebook: URL\n instagram: URL\n linkedIn: URL\n tiktok: URL\n twitter: URL\n website: URL\n}\n\ninput SocialLinksInput {\n facebook: String\n instagram: String\n linkedIn: String\n tiktok: String\n twitter: String\n website: URL\n}\n\nenum StarrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n SAVED_SEARCH\n USER\n}\n\ntype Symbology {\n error: String\n legend: [[String!]!]\n mapboxJson: JSONObject\n name: String!\n rampType: RampTypeEnum\n state: SymbologyStateEnum!\n url: String\n}\n\n\"\"\"SymbologyStateEnum\"\"\"\nenum SymbologyStateEnum {\n ERROR\n FETCHING\n FOUND\n MISSING\n NOT_APPLICABLE\n UNKNOWN\n}\n\ntype TileIndexOriginFile implements FileDownloadMetaInterface {\n contentType: String\n etag: String\n localPath: String\n size: BigInt\n}\n\ntype TileService {\n bounds: [Float]\n duration: Float\n errorMsg: String\n format: String\n indexUrl: String\n lastState: DateTime\n layers: [String!]\n localPath: String\n maxZoom: Int\n minZoom: Int\n numFiles: Int\n originFile: TileIndexOriginFile\n projectId: String\n rasterStats: JSONObject\n rsXPath: String!\n started: DateTime\n state: TilingStateEnum!\n symbologies: [String!]\n tileType: TileTypesEnum\n url: String\n}\n\nenum TileTypesEnum {\n HTML\n RASTER\n VECTOR_GPKG\n VECTOR_SHP\n}\n\nenum TilingStateEnum {\n CREATING\n FETCHING\n FETCH_ERROR\n INDEX_NOT_FOUND\n LAYER_NOT_FOUND\n NOT_APPLICABLE\n NO_GEOMETRIES\n QUEUED\n SUCCESS\n TILING_ERROR\n TIMEOUT\n UNKNOWN\n}\n\ntype Transfer implements DBSimpleObj {\n createdBy: User!\n createdOn: DateTime!\n id: ID!\n includeProjects: Boolean\n \"\"\"Allows the request to have an attached note\"\"\"\n note: String!\n state: TransferStateEnum!\n \"\"\"Sorting and pagination are not available for these items\"\"\"\n transferObjects: [TransferObject!]!\n transferTo: Owner!\n transferType: TransferrableTypesEnum!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ninput TransferEntityItemsInput {\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n}\n\ninput TransferInput {\n \"\"\"\n (Optional) When transferring a collection you can choose to transfer any projects in that collection (that you own) as well\n \"\"\"\n includeProjects: Boolean\n \"\"\"Attach a note to the transfer\"\"\"\n note: String!\n \"\"\"DBIds of the items to transfer\"\"\"\n objectIds: [ID!]!\n \"\"\"Organization or user to transfer this to\"\"\"\n transferTo: OwnerInput!\n \"\"\"\n What type of transfer is this:\n - project(s): one or more projects\n - collection: Transfer the colletion with an option for any owned projects\n - organization: this is different from simply making someone else the owner\n this means move all projects / collections to another user or org.\n - user: Transfer all my projects/collections to another org/user\n \"\"\"\n transferType: TransferrableTypesEnum!\n}\n\nunion TransferObject = Collection | Organization | Project | User\n\nenum TransferStateEnum {\n ACCEPTED\n EXPIRED\n IN_PROGRESS\n PROPOSED\n REJECTED\n}\n\nenum TransferrableTypesEnum {\n COLLECTION\n ORGANIZATION\n PROJECT\n USER\n}\n\nscalar URL\n\ntype UploadProjectFileUrls {\n relPath: String!\n urls: [String]\n}\n\ntype UploadProjectRequest {\n create: [String!]!\n delete: [String!]!\n newId: String\n token: String!\n update: [String!]!\n}\n\ntype UploadUrl {\n fields: JSONObject!\n token: String!\n url: String!\n}\n\n\"\"\"A User object is any user in the system\"\"\"\ntype User implements DBObj & UserInterface {\n \"\"\"User affiliations (usually external to the data exchange)\"\"\"\n affiliations: [UserAffiliation]!\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n jobTitle: String\n lastLogin: DateTime!\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Organizations this user is a member of.\"\"\"\n organizations(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedOrganizations!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\n\"\"\"\nAffiliation can be anything as long as it fits as a list of\nstrings with URLs\n\"\"\"\ntype UserAffiliation {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninput UserAffiliationInput {\n \"\"\"Who am I to this affiliation (Optional)\"\"\"\n affiliationRole: String\n \"\"\"\n Name of the affiliated entity or organization. Can be external to the data exchange\n \"\"\"\n name: String!\n \"\"\"(Optional) this affiliation may have a link\"\"\"\n url: URL\n}\n\ninterface UserInterface {\n \"\"\"Any organizational affiliation(s) the user specifies\"\"\"\n affiliations: [UserAffiliation]!\n \"\"\"URL To Avatar image\"\"\"\n avatar: URL\n \"\"\"\n Collections this user owns. Filtered if the querying user is someone else\n \"\"\"\n collections(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedCollections!\n createdBy: User!\n createdOn: DateTime!\n description: String!\n id: ID!\n \"\"\"Simple job title string field\"\"\"\n jobTitle: String\n \"\"\"When did we last see the user?\"\"\"\n lastLogin: DateTime!\n \"\"\"\n Simple location string (Optional) eg: \"Vancouver, Canada\"\n \"\"\"\n location: String\n meta: [MetaData!]!\n name: String!\n \"\"\"Projects this user owns. Filtered if the querying user is someone else\"\"\"\n projects(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedProjects!\n \"\"\"\n Saved Searches this user owns. Filtered if the querying user is someone else\n \"\"\"\n savedSearches(limit: Int!, offset: Int!, sort: [SearchSortEnum!]): PaginatedSavedSearches!\n \"\"\"Object containing URLS to social media sites\"\"\"\n social: SocialLinks!\n starred: Boolean!\n starredCount: Int!\n summary: String!\n updatedBy: User!\n updatedOn: DateTime!\n}\n\ntype WarehouseInfo {\n api: String\n businessLogic: String\n projectFile: String\n warehouse: String\n xml: String\n xsd: String\n}\n\ntype WatcherOutput {\n errors: [String]\n message: String\n results: [String]\n}\n\ntype ZipFileDownloadMeta implements FileDownloadMetaInterface {\n contentType: String\n downloadUrl: String\n etag: String\n localPath: String\n pendingSince: DateTime\n progress: Int\n size: BigInt\n}\n"])));
12
12
  var templateObject_1;
13
13
  //# sourceMappingURL=gqlSchema.js.map