shared/graphql/schema.graphql (171 lines of code) (raw):

schema { query: Query mutation: Mutation subscription: Subscription } type Query { # database-bridge-lambda queries listItems(pinboardId: String!, maybeAspectRatioFilter: String): [Item] listLastItemSeenByUsers(pinboardId: String!): [LastItemSeenByUser] getMyUser: MyUser searchMentionableUsers(prefix: String!): UsersAndGroups getUsers(emails: [String!]!): [User] getGroupPinboardIds: [PinboardIdWithClaimCounts!]! getItemCounts(pinboardIds: [String!]!): [PinboardIdWithItemCounts!]! # workflow-bridge-lambda queries listPinboards(searchText: String): [WorkflowStub] getPinboardsByIds(ids: [String!]!): [WorkflowStub] getPinboardsByPaths(paths: [String!]!): [WorkflowStub] getPinboardByComposerId(composerId: String!): WorkflowStub # grid-bridge-lambda queries getGridSearchSummary(apiUrl: String!): GridSearchSummary asGridPayload(gridUrl: String!): AWSJSON } type Mutation { createItem(input: CreateItemInput!): Item editItem(itemId: String!, input: EditItemInput!): Item deleteItem(itemId: String!): Item claimItem(itemId: String!): Claimed seenItem(input: LastItemSeenByUserInput!): LastItemSeenByUser setWebPushSubscriptionForUser(webPushSubscription: AWSJSON): MyUser addManuallyOpenedPinboardIds(pinboardId: String!, maybeEmailOverride: String): MyUser removeManuallyOpenedPinboardIds(pinboardIdToClose: String!): MyUser visitTourStep(tourStepId: String!): MyUser changeFeatureFlag(flagId: String!, newValue: Boolean!): MyUser } type Subscription { onMutateItem( pinboardId: String ): Item @aws_subscribe(mutations: ["createItem", "editItem", "deleteItem"]) onClaimItem( pinboardId: String ): Claimed @aws_subscribe(mutations: ["claimItem"]) onSeenItem( pinboardId: String ): LastItemSeenByUser @aws_subscribe(mutations: ["seenItem"]) onMyUserChanges( email: String! # unfortunately this can't be done via 'identity' in the resolver ): MyUser @aws_subscribe(mutations: [ "addManuallyOpenedPinboardIds", "removeManuallyOpenedPinboardIds", "changeFeatureFlag" ]) } type MentionHandle { label: String! isMe: Boolean! } type Item { id: ID! message: String payload: AWSJSON timestamp: AWSDateTime! type: String! userEmail: String! pinboardId: String! mentions: [MentionHandle!] groupMentions: [MentionHandle!] claimedByEmail: String claimable: Boolean! relatedItemId: String editHistory: [AWSDateTime!] deletedAt: AWSDateTime } type LastItemSeenByUser { pinboardId: String! userEmail: String! itemID: String! seenAt: AWSDateTime! } type User { email: String! firstName: String! lastName: String! avatarUrl: String isMentionable: Boolean } type MyUser { email: String! firstName: String! lastName: String! avatarUrl: String hasWebPushSubscription: Boolean manuallyOpenedPinboardIds: [String!] hasEverUsedTour: Boolean! featureFlags: AWSJSON } type Group { shorthand: String! name: String! memberEmails: [String!]! } type UsersAndGroups { users: [User!]! groups: [Group!]! } type WorkflowStub { id: String! title: String headline: String composerId: String path: String status: String trashed: Boolean isNotFound: Boolean } type GridBadgeData { text: String! color: String! } type GridSearchQueryBreakdown { collections: [GridBadgeData!] labels: [GridBadgeData!] chips: [GridBadgeData!] restOfSearch: String } type GridSearchSummary { total: Int! thumbnails: [String!]! queryBreakdown: GridSearchQueryBreakdown } input CreateItemInput { message: String payload: AWSJSON type: String! pinboardId: String! mentions: [String!] groupMentions: [String!] claimable: Boolean relatedItemId: String } input EditItemInput { message: String payload: AWSJSON type: String! } input LastItemSeenByUserInput { pinboardId: String! itemID: String! } type Claimed { pinboardId: String! updatedItem: Item! newItem: Item! } type PinboardIdWithClaimCounts { pinboardId: String! unclaimedCount: Int! yourClaimedCount: Int! othersClaimedCount: Int! notClaimableCount: Int! latestGroupMentionItemId: String! hasUnread: Boolean! } type PinboardIdWithItemCounts { pinboardId: String! unreadCount: Int! totalCount: Int! totalCropCount: Int! fiveByFourCount: Int! fourByFiveCount: Int! }