playing with FFI to golang to make graphql calls...gruesome
This commit is contained in:
@@ -0,0 +1,861 @@
|
||||
scalar URL
|
||||
scalar Time
|
||||
scalar Upload
|
||||
|
||||
enum ErrorCode {
|
||||
NOT_REGISTERED
|
||||
ALREADY_REGISTERED
|
||||
INVALID_EMAIL
|
||||
INVALID_CODE
|
||||
BAD_USER_INPUT
|
||||
UNAUTHENTICATED
|
||||
FORBIDDEN
|
||||
NOT_FOUND
|
||||
INTERNAL_SERVER_ERROR
|
||||
SIGNIN_CODE_EXPIRED_OR_NOT_FOUND
|
||||
}
|
||||
|
||||
type Query {
|
||||
"""
|
||||
Roles: flowy-admin
|
||||
"""
|
||||
getWaitlist: [WaitlistEntry!]!
|
||||
|
||||
"""
|
||||
Temporary public way to pull all humans.
|
||||
"""
|
||||
humans: [Human!]!
|
||||
|
||||
"""
|
||||
"""
|
||||
human(id: ID!): Human!
|
||||
|
||||
"""
|
||||
[Temporary] Must set 'Authorization' header to auth-token.
|
||||
"""
|
||||
viewer: Human!
|
||||
|
||||
"""
|
||||
Search for humans including contacts by their display name, email.
|
||||
"""
|
||||
searchHumans(query: String!): [Human!]!
|
||||
|
||||
"""
|
||||
Returns all of the spaces for the authed human.
|
||||
"""
|
||||
spaces: SpaceConnection!
|
||||
}
|
||||
|
||||
type Subscription {
|
||||
"""
|
||||
Subscribes to new echoes relevant to the authed human. This means the echo is in 'SENT' state.
|
||||
Includes echoes sent by the authed human.
|
||||
"""
|
||||
echoSent: Echo!
|
||||
|
||||
"""
|
||||
Notifies authed human when relevant echo is expired.
|
||||
"""
|
||||
echoExpired(echoId: ID!): Echo!
|
||||
|
||||
"""
|
||||
New conversation created which involves the authed human.
|
||||
"""
|
||||
newConversation: ID!
|
||||
|
||||
"""
|
||||
Watch the basic online status of a human.
|
||||
"""
|
||||
humanStatus(humanId: ID!): Boolean!
|
||||
|
||||
"""
|
||||
Watches for signals for people echoing in a conversation.
|
||||
"""
|
||||
echoSignal(conversationId: ID!): ID!
|
||||
|
||||
"""
|
||||
Receive instructions (for the chrome extension) sent by given human on the keypad.
|
||||
"""
|
||||
instruction(humanId: ID!): Instruction!
|
||||
|
||||
"""
|
||||
Receive messages from the chrome extension.
|
||||
"""
|
||||
peripheralMessage: PeripheralMessage!
|
||||
}
|
||||
|
||||
type OpenUrlInstruction {
|
||||
url: URL!
|
||||
}
|
||||
type ChatGptFollowUpInstruction {
|
||||
query: String!
|
||||
}
|
||||
type ChatGptToggleWebSearchInstruction {
|
||||
# FIX: required to have one field for some reason
|
||||
fakeField: Boolean
|
||||
}
|
||||
type GoogleCalendarUpdateViewInstruction {
|
||||
hotkey: String!
|
||||
}
|
||||
type VariableInstruction {
|
||||
"""
|
||||
Will be a json representation of a instruction defined in keypad & chrome extension.
|
||||
"""
|
||||
message: String!
|
||||
}
|
||||
union Instruction = OpenUrlInstruction | ChatGptFollowUpInstruction | ChatGptToggleWebSearchInstruction | GoogleCalendarUpdateViewInstruction | VariableInstruction
|
||||
|
||||
type UrlUpdatedMessage {
|
||||
currentUrl: URL!
|
||||
}
|
||||
type StateUpdateMessage {
|
||||
url: URL!
|
||||
"""
|
||||
Json representation for specific application context.
|
||||
"""
|
||||
state: String
|
||||
}
|
||||
union PeripheralMessage = UrlUpdatedMessage | StateUpdateMessage
|
||||
|
||||
type Mutation {
|
||||
"""
|
||||
Registers a new human.
|
||||
Errors if already registered.
|
||||
"""
|
||||
register(email: String!, displayName: String!): Boolean!
|
||||
|
||||
"""
|
||||
Sends email with a code.
|
||||
ErrorCodeNotFound if not registered.
|
||||
"""
|
||||
signIn(email: String!): Boolean!
|
||||
|
||||
"""
|
||||
Verifies the code and returns a token.
|
||||
ErrorCodeNotFound if not registered.
|
||||
ErrorSignInCodeExpiredOrNotFound if the code is expired or not found.
|
||||
"""
|
||||
signInVerify(email: String!, code: String!): TokenOutput!
|
||||
|
||||
"""
|
||||
If already in the waitlist, gracefully returns success.
|
||||
Roles: public
|
||||
"""
|
||||
joinWaitlist(input: JoinWaitlistInput!): Boolean!
|
||||
|
||||
"""
|
||||
Add a human into the system.
|
||||
Returns the human.
|
||||
"""
|
||||
addHuman(input: AddHumanInput!): Human!
|
||||
|
||||
"""
|
||||
The first step in flowy.llink (thought).
|
||||
Returns ID of the draft echo.
|
||||
"""
|
||||
draftEcho(input: DraftEchoInput!): DraftEchoOutput!
|
||||
|
||||
"""
|
||||
The second step in flowy.llink (top-of-mind people).
|
||||
Requires authentication as the human who drafted.
|
||||
The system will prepare and send the echo after this step and you will be notified in echoReceived subscription.
|
||||
Returns true if successful.
|
||||
"""
|
||||
commitEcho(input: CommitEchoInput!): Boolean!
|
||||
|
||||
"""
|
||||
Adds a human to a conversation.
|
||||
Requires authentication as the admin of the conversation.
|
||||
"""
|
||||
addHumanToConversation(input: AddHumanToConversationInput!): Boolean!
|
||||
|
||||
"""
|
||||
Updates the profile picture of the authed human.
|
||||
"""
|
||||
updateHumanProfile(input: UpdateHumanProfileInput!): Boolean!
|
||||
|
||||
"""
|
||||
Updates the playback marker for the authed human in a conversation.
|
||||
Must be a member of the conversation.
|
||||
"""
|
||||
updatePlaybackMarker(conversationId: ID!, echoId: ID!, currentPositionSeconds: Int!): ConversationPlaybackMarker!
|
||||
|
||||
"""
|
||||
Updates the last seen time of the authed human.
|
||||
"""
|
||||
updateLastSeen: Boolean!
|
||||
"""
|
||||
Updates the presence of the authed human.
|
||||
"""
|
||||
disconnectPresence: Boolean!
|
||||
|
||||
"""
|
||||
Must be a member of the conversation.
|
||||
Signals to others in the conversation that the authed human is echoing.
|
||||
"""
|
||||
sendEchoSignal(conversationId: ID!): Boolean!
|
||||
|
||||
"""
|
||||
Generates a token to join the live room.
|
||||
"""
|
||||
generateLiveToken(conversationId: ID!): String!
|
||||
|
||||
"""
|
||||
Sends instruction to chrome extension.
|
||||
"""
|
||||
sendInstruction(input: SendInstructionInput!): Boolean!
|
||||
|
||||
"""
|
||||
For sending responses/messages from the chrome extension to the keypad.
|
||||
"""
|
||||
sendMessageToKeypad(input: SendMessageToKeypadInput!): Boolean!
|
||||
|
||||
addSpace(input: AddSpaceInput!): Space!
|
||||
updateSpace(input: UpdateSpaceInput!): Space!
|
||||
moveSpace(input: MoveSpaceInput!): Boolean!
|
||||
deleteSpace(input: DeleteSpaceInput!): Boolean!
|
||||
setKey(input: SetKeyInput!): Key!
|
||||
swapKeys(input: SwapKeysInput!): Boolean!
|
||||
deleteKey(input: DeleteKeyInput!): Boolean!
|
||||
}
|
||||
|
||||
input AddSpaceInput {
|
||||
name: String!
|
||||
|
||||
"""
|
||||
Optional. Either set this or `iconUrl`, not both.
|
||||
"""
|
||||
iconName: String
|
||||
"""
|
||||
Optional. Either set this or `iconName`, not both.
|
||||
"""
|
||||
iconUrl: URL
|
||||
|
||||
"""
|
||||
Optional. Either specify a domain or an app name followed by the extension
|
||||
(e.g. 'app:Visual Studio Code' or 'url_contains:flowy.com' or 'url_contains:youtube.com/watch').
|
||||
"""
|
||||
trigger: String
|
||||
}
|
||||
|
||||
input UpdateSpaceInput {
|
||||
spaceId: ID!
|
||||
|
||||
name: String!
|
||||
|
||||
"""
|
||||
Optional. Either set this or `iconUrl`, not both.
|
||||
"""
|
||||
iconName: String
|
||||
"""
|
||||
Optional. Either set this or `iconName`, not both.
|
||||
"""
|
||||
iconUrl: URL
|
||||
|
||||
"""
|
||||
Optional. Either specify a domain or an app name followed by the extension
|
||||
(e.g. 'app:Visual Studio Code' or 'url_contains:flowy.com' or 'url_contains:youtube.com/watch').
|
||||
"""
|
||||
trigger: String
|
||||
}
|
||||
|
||||
enum MoveSpaceDirection {
|
||||
UP
|
||||
DOWN
|
||||
}
|
||||
|
||||
input MoveSpaceInput {
|
||||
spaceId: ID!
|
||||
direction: MoveSpaceDirection!
|
||||
}
|
||||
|
||||
input DeleteSpaceInput {
|
||||
spaceId: ID!
|
||||
}
|
||||
|
||||
input KeyTypeKeypressInput {
|
||||
mainKey: String!
|
||||
shiftKey: Boolean!
|
||||
commandKey: Boolean!
|
||||
optionKey: Boolean!
|
||||
controlKey: Boolean!
|
||||
}
|
||||
|
||||
input KeyTypeOpenUrlInput {
|
||||
url: String! # URL is typically represented as a String in GraphQL
|
||||
newWindow: Boolean!
|
||||
}
|
||||
|
||||
input KeyTypeOpenAppInput {
|
||||
appName: String!
|
||||
}
|
||||
|
||||
input KeyTypeTextSnippetInput {
|
||||
text: String!
|
||||
pasteInCurrentInput: Boolean!
|
||||
copyToClipboard: Boolean!
|
||||
}
|
||||
|
||||
input KeyTypeTerminalCommandInput {
|
||||
command: String!
|
||||
directory: String!
|
||||
}
|
||||
|
||||
input KeyTypeWriteForMeInput {
|
||||
prependedInstruction: String!
|
||||
writingStyle: String
|
||||
formatForCurrentApp: Boolean!
|
||||
attachScreenshot: Boolean!
|
||||
}
|
||||
|
||||
input KeyTypeTypeForMeInput {
|
||||
minimallyProcess: Boolean!
|
||||
formatForCurrentApp: Boolean!
|
||||
}
|
||||
|
||||
input KeyTypeFlowyChatInput {
|
||||
prependedInstruction: String!
|
||||
}
|
||||
|
||||
input KeyTypeMacOsCommandInput {
|
||||
commandType: MacOsCommandType!
|
||||
}
|
||||
|
||||
input KeyConfigurationInput {
|
||||
keypress: KeyTypeKeypressInput
|
||||
openUrl: KeyTypeOpenUrlInput
|
||||
openApp: KeyTypeOpenAppInput
|
||||
textSnippet: KeyTypeTextSnippetInput
|
||||
terminalCommand: KeyTypeTerminalCommandInput
|
||||
writeForMe: KeyTypeWriteForMeInput
|
||||
typeForMe: KeyTypeTypeForMeInput
|
||||
flowyChat: KeyTypeFlowyChatInput
|
||||
macOsCommand: KeyTypeMacOsCommandInput
|
||||
}
|
||||
input SetKeyInput {
|
||||
spaceId: ID!
|
||||
position: Int!
|
||||
|
||||
title: String!
|
||||
|
||||
"""
|
||||
Optional. Either set this or `iconUrl`, not both.
|
||||
"""
|
||||
iconName: String
|
||||
"""
|
||||
Optional. Either set this or `iconName`, not both.
|
||||
"""
|
||||
iconUrl: URL
|
||||
|
||||
hexColor: String
|
||||
|
||||
"""
|
||||
Must specify one of the inputs.
|
||||
"""
|
||||
keyConfiguration: KeyConfigurationInput!
|
||||
}
|
||||
|
||||
input SwapKeysInput {
|
||||
spaceId: ID!
|
||||
positionA: Int!
|
||||
positionB: Int!
|
||||
}
|
||||
|
||||
input DeleteKeyInput {
|
||||
spaceId: ID!
|
||||
position: Int!
|
||||
}
|
||||
|
||||
enum Role {
|
||||
ADMIN,
|
||||
HUMAN,
|
||||
}
|
||||
|
||||
type TokenOutput {
|
||||
token: String!
|
||||
role: Role!
|
||||
}
|
||||
|
||||
input UrlUpdatedMessageInput {
|
||||
"""
|
||||
Current url of the active tab and focused window.
|
||||
"""
|
||||
currentUrl: URL!
|
||||
}
|
||||
input StateUpdateInput {
|
||||
url: URL!
|
||||
|
||||
"""
|
||||
State of specific site in url in json form.
|
||||
"""
|
||||
state: String
|
||||
}
|
||||
input SendMessageToKeypadInput {
|
||||
humanId: ID!
|
||||
urlUpdated: UrlUpdatedMessageInput
|
||||
stateUpdate: StateUpdateInput
|
||||
}
|
||||
|
||||
input SendInstructionUpdateGoogleCalendarViewInput {
|
||||
"""
|
||||
The hotkey to update the google calendar view.
|
||||
"""
|
||||
hotkey: String!
|
||||
}
|
||||
input SendInstructionOpenUrlInput {
|
||||
url: URL!
|
||||
}
|
||||
input SendInstructionChatGptFollowUpInput {
|
||||
query: String!
|
||||
}
|
||||
input SendInstructionChatGptToggleWebSearchInput {
|
||||
# FIX: required to have one field for some reason
|
||||
fakeField: Boolean
|
||||
}
|
||||
input SendVariableInstructionInput {
|
||||
"""
|
||||
Will be a json representation of a instruction defined in keypad & chrome extension.
|
||||
"""
|
||||
message: String!
|
||||
}
|
||||
### FIX: dealing with polymorphism here by having different optional fields because can't have a union in an input type
|
||||
input SendInstructionInput {
|
||||
openUrl: SendInstructionOpenUrlInput
|
||||
chatGptFollowUp: SendInstructionChatGptFollowUpInput
|
||||
chatGptToggleWebSearch: SendInstructionChatGptToggleWebSearchInput
|
||||
updateGoogleCalendarView: SendInstructionUpdateGoogleCalendarViewInput
|
||||
variable: SendVariableInstructionInput
|
||||
}
|
||||
|
||||
type Header {
|
||||
key: String!
|
||||
value: String!
|
||||
}
|
||||
|
||||
type DraftEchoOutput {
|
||||
draftEchoId: ID!
|
||||
"""
|
||||
The URL to upload the asset to. Must be done before committing the echo.
|
||||
"""
|
||||
assetUploadUrl: URL!
|
||||
"""
|
||||
Use these headers to upload the asset to the given URL.
|
||||
"""
|
||||
uploadHeaders: [Header!]!
|
||||
}
|
||||
|
||||
enum CompanyWorkspaceSuite {
|
||||
GSuite
|
||||
Office365
|
||||
}
|
||||
|
||||
type WaitlistEntry {
|
||||
email: String!
|
||||
firstName: String
|
||||
lastName: String
|
||||
companyWebsite: URL
|
||||
companyWorkspaceSuite: CompanyWorkspaceSuite
|
||||
isDecisionMaker: Boolean
|
||||
}
|
||||
|
||||
input JoinWaitlistInput {
|
||||
email: String!
|
||||
firstName: String
|
||||
lastName: String
|
||||
companyWebsite: URL
|
||||
companyWorkspaceSuite: CompanyWorkspaceSuite
|
||||
isDecisionMaker: Boolean
|
||||
}
|
||||
|
||||
input AddHumanInput {
|
||||
email: String!
|
||||
displayName: String!
|
||||
profilePicture: Upload
|
||||
}
|
||||
|
||||
input DraftEchoInput {
|
||||
contentLength: Int!
|
||||
contentType: String!
|
||||
|
||||
"""
|
||||
Must match the mime type of the asset. If `video/*`, then you can use `VIDEO` or `SCREEN`.
|
||||
"""
|
||||
echoType: EchoType!
|
||||
}
|
||||
|
||||
input CommitEchoInput {
|
||||
draftEchoId: ID!
|
||||
|
||||
"""
|
||||
Send to the given existing conversation.
|
||||
Authed human must be a member of the conversation.
|
||||
Must have this or `newConversation`.
|
||||
"""
|
||||
existingConversation: String
|
||||
|
||||
"""
|
||||
Send to a new conversation with the given human ids.
|
||||
Authed human becomes the admin of the conversation.
|
||||
Must have this or `existingConversation`.
|
||||
Do NOT include the echo creator in the list.
|
||||
"""
|
||||
newConversation: [ID!]
|
||||
}
|
||||
|
||||
input AddHumanToConversationInput {
|
||||
conversationId: ID!
|
||||
humanId: ID!
|
||||
}
|
||||
|
||||
input UpdateHumanProfileInput {
|
||||
"""
|
||||
The profile picture to update. Optional.
|
||||
If kept empty, will retain the former profile picture.
|
||||
"""
|
||||
profilePicture: Upload
|
||||
"""
|
||||
The display name to update. Optional.
|
||||
If kept empty, will retain the former display name.
|
||||
"""
|
||||
displayName: String
|
||||
}
|
||||
|
||||
"""
|
||||
Orders by all types DESC
|
||||
"""
|
||||
enum PaginationOrderBy {
|
||||
CREATED_AT
|
||||
UPDATED_AT
|
||||
}
|
||||
|
||||
type PageInfo {
|
||||
hasNextPage: Boolean!
|
||||
hasPreviousPage: Boolean!
|
||||
startCursor: String
|
||||
endCursor: String
|
||||
}
|
||||
|
||||
type Human {
|
||||
id: ID!
|
||||
email: String!
|
||||
displayName: String!
|
||||
profilePictureUrl: URL
|
||||
"""
|
||||
Two letters based on the display name.
|
||||
"""
|
||||
initials: String!
|
||||
isFlowyAdmin: Boolean!
|
||||
createdAt: Time!
|
||||
|
||||
"""
|
||||
Conversations that the human is involved.
|
||||
Only available if the viewer is this human or flowy-admin.
|
||||
"""
|
||||
conversations(
|
||||
"""
|
||||
Whether or not to show expired conversations.
|
||||
"""
|
||||
includeExpired: Boolean! = false
|
||||
): HumanConversationConnection!
|
||||
}
|
||||
|
||||
type HumanConversationConnection {
|
||||
edges: [HumanConversationEdge!]!
|
||||
nodes: [Conversation!]!
|
||||
pageInfo: PageInfo!
|
||||
}
|
||||
|
||||
type ConversationPlaybackMarker {
|
||||
"""
|
||||
This is the id of the echo that the human last played within this conversation.
|
||||
Serves as a playback marker for the human to enable 'continue playing a youtube video'.
|
||||
"""
|
||||
echoId: String
|
||||
|
||||
"""
|
||||
This is how far we are on the current marker echo. Used for precision.
|
||||
If we are at the end, will start playing the next echo.
|
||||
Similar to [MDN audio currentTime](https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/currentTime)
|
||||
"""
|
||||
currentPositionSeconds: Int
|
||||
|
||||
# """
|
||||
# Whether or not the current marker is at the latest echo in the conversation.
|
||||
# """
|
||||
# FIXME: want data from echoes resolver to update this upstream resolver...how? consolidate resolvers?
|
||||
# isLatestEcho: Boolean!
|
||||
}
|
||||
|
||||
type HumanConversationEdge {
|
||||
cursor: String!
|
||||
node: Conversation!
|
||||
|
||||
"""
|
||||
A set of properties for seamless playback experience for a human in a conversation.
|
||||
"""
|
||||
playbackMarker: ConversationPlaybackMarker!
|
||||
}
|
||||
|
||||
type Conversation {
|
||||
id: ID!
|
||||
|
||||
"""
|
||||
All members of a conversation *excluding* the viewer.
|
||||
"""
|
||||
members: ConversationMemberConnection!
|
||||
|
||||
"""
|
||||
Echoes for this conversation, sorted by createdAt ASC.
|
||||
"""
|
||||
echoes(
|
||||
"""
|
||||
Whether or not to show all echoes for this conversation.
|
||||
An echo is considered expired if it was created more than 48 hours ago.
|
||||
"""
|
||||
includeExpired: Boolean! = false
|
||||
): EchoConnection!
|
||||
|
||||
"""
|
||||
The last time that an echo, radio, or chat happened in this conversation.
|
||||
"""
|
||||
lastActivityAt: Time
|
||||
|
||||
"""
|
||||
A conversation is considered expired if the last activity was more than 48 hours ago.
|
||||
"""
|
||||
isExpired: Boolean!
|
||||
}
|
||||
|
||||
type ConversationMemberConnection {
|
||||
edges: [ConversationMemberEdge!]!
|
||||
# NOTE: be careful to not to trigger infinite fetch here.
|
||||
nodes: [Human!]!
|
||||
pageInfo: PageInfo!
|
||||
}
|
||||
|
||||
type ConversationMemberEdge {
|
||||
cursor: String!
|
||||
node: Human!
|
||||
}
|
||||
|
||||
type EchoConnection {
|
||||
edges: [EchoEdge!]!
|
||||
nodes: [Echo!]!
|
||||
pageInfo: PageInfo!
|
||||
# lastEchoTranscript: String
|
||||
}
|
||||
|
||||
type EchoEdge {
|
||||
cursor: ID!
|
||||
node: Echo!
|
||||
}
|
||||
|
||||
enum EchoType {
|
||||
AUDIO_ONLY
|
||||
VIDEO
|
||||
SCREEN
|
||||
}
|
||||
|
||||
enum EchoState {
|
||||
DRAFT
|
||||
"""
|
||||
The creator has committed this to be sent to a conversation when complete.
|
||||
"""
|
||||
COMMITTED
|
||||
"""
|
||||
Transcribing, transcoding and other activities in progress.
|
||||
"""
|
||||
PREPARING
|
||||
"""
|
||||
Everything ready for playback experience, going to send soon.
|
||||
"""
|
||||
READY
|
||||
"""
|
||||
The echo is sent within a conversation.
|
||||
"""
|
||||
SENT
|
||||
"""
|
||||
The echo failed in some way.
|
||||
"""
|
||||
FAILURE
|
||||
}
|
||||
|
||||
type Echo {
|
||||
id: ID!
|
||||
createdBy: Human!
|
||||
createdByViewer: Boolean!
|
||||
createdAt: Time!
|
||||
echoType: EchoType!
|
||||
echoState: EchoState!
|
||||
|
||||
"""
|
||||
URL to download the asset. Will be a temporary pre-signed URL.
|
||||
"""
|
||||
assetUrl: URL!
|
||||
|
||||
"""
|
||||
HLS streal URL for asset. Only available if the echo is in 'SENT' state.
|
||||
"""
|
||||
streamUrl: URL
|
||||
|
||||
"""
|
||||
Thumbnail image for the asset. Only available if the echo is in 'SENT' state.
|
||||
"""
|
||||
thumbnailUrl: URL
|
||||
|
||||
"""
|
||||
Thumbnail gif for the asset. Only available if the echo is in 'SENT' state.
|
||||
"""
|
||||
thumbnailGifUrl: URL
|
||||
|
||||
"""
|
||||
Duration in seconds. Only available if the echo is in 'SENT' state.
|
||||
"""
|
||||
durationSeconds: Float
|
||||
|
||||
"""
|
||||
The conversation that this echo belongs to.
|
||||
Only available if the echo is past the 'DRAFT' state.
|
||||
"""
|
||||
conversation: Conversation
|
||||
|
||||
"""
|
||||
The transcript of the echo. Only available if the echo is in 'SENT' state.
|
||||
"""
|
||||
transcript: Transcript
|
||||
}
|
||||
|
||||
type TranscriptWord {
|
||||
word: String!
|
||||
start: Float!
|
||||
end: Float!
|
||||
}
|
||||
|
||||
type Transcript {
|
||||
fullText: String!
|
||||
words: [TranscriptWord!]!
|
||||
}
|
||||
|
||||
type IconName {
|
||||
value: String!
|
||||
}
|
||||
type IconUrl {
|
||||
value: URL!
|
||||
}
|
||||
union VariableIcon = IconName | IconUrl
|
||||
type KeyTypeKeypress {
|
||||
mainKey: String!
|
||||
shiftKey: Boolean!
|
||||
commandKey: Boolean!
|
||||
optionKey: Boolean!
|
||||
controlKey: Boolean!
|
||||
}
|
||||
type KeyTypeOpenUrl {
|
||||
url: URL!
|
||||
newWindow: Boolean!
|
||||
}
|
||||
type KeyTypeOpenApp {
|
||||
appName: String!
|
||||
}
|
||||
type KeyTypeTextSnippet {
|
||||
text: String!
|
||||
pasteInCurrentInput: Boolean!
|
||||
copyToClipboard: Boolean!
|
||||
}
|
||||
type KeyTypeTerminalCommand {
|
||||
command: String!
|
||||
directory: String!
|
||||
}
|
||||
type KeyTypeWriteForMe {
|
||||
prependedInstruction: String!
|
||||
"""
|
||||
e.g. casual, friendly, formal, concise (or any combination)
|
||||
"""
|
||||
writingStyle: String!
|
||||
"""
|
||||
Whether or not to format for the current app (e.g. Notion in markdown vs. email formatting differences)
|
||||
Default: true.
|
||||
"""
|
||||
formatForCurrentApp: Boolean!
|
||||
"""
|
||||
Optional. Provides more context of what I am doing and reading.
|
||||
"""
|
||||
attachScreenshot: Boolean!
|
||||
}
|
||||
type KeyTypeTypeForMe {
|
||||
"""
|
||||
Help with breaking sentences apart and small grammar rules.
|
||||
"""
|
||||
minimallyProcess: Boolean!
|
||||
"""
|
||||
Whether or not to format for the current app (e.g. Notion in markdown vs. email formatting differences)
|
||||
Default: true.
|
||||
"""
|
||||
formatForCurrentApp: Boolean!
|
||||
}
|
||||
type KeyTypeFlowyChat {
|
||||
prependedInstruction: String!
|
||||
}
|
||||
enum MacOsCommandType {
|
||||
INCREASE_BRIGHTNESS
|
||||
DECREASE_BRIGHTNESS
|
||||
MUTE_VOLUME
|
||||
INCREASE_VOLUME
|
||||
DECREASE_VOLUME
|
||||
PLAY_PAUSE
|
||||
NEXT_TRACK
|
||||
PREVIOUS_TRACK
|
||||
DO_NOT_DISTURB
|
||||
LOCK_SCREEN
|
||||
LOG_OUT
|
||||
SLEEP
|
||||
SHUT_DOWN
|
||||
RESTART
|
||||
MISSION_CONTROL
|
||||
APP_DRAWER
|
||||
SPOTLIGHT
|
||||
"""
|
||||
MacOS: ⌘ + SHIFT + 3
|
||||
"""
|
||||
SCREENSHOT_SCREEN
|
||||
"""
|
||||
MacOS: ⌘ + SHIFT + 4
|
||||
"""
|
||||
SCREENSHOT_AREA_SELECT
|
||||
"""
|
||||
MacOS: ⌘ + SHIFT + 5
|
||||
"""
|
||||
SCREENSHOT_FULL_OPTIONS
|
||||
}
|
||||
type KeyTypeMacOsCommand {
|
||||
commandType: MacOsCommandType!
|
||||
}
|
||||
union KeyConfiguration = KeyTypeKeypress | KeyTypeOpenUrl | KeyTypeOpenApp | KeyTypeTextSnippet | KeyTypeTerminalCommand | KeyTypeWriteForMe | KeyTypeTypeForMe | KeyTypeFlowyChat | KeyTypeMacOsCommand
|
||||
type Key {
|
||||
id: ID!
|
||||
title: String!
|
||||
position: Int!
|
||||
hexColor: String
|
||||
icon: VariableIcon
|
||||
createdAt: Time!
|
||||
keyConfiguration: KeyConfiguration!
|
||||
}
|
||||
type Space {
|
||||
id: ID!
|
||||
name: String!
|
||||
keys: [Key!]!
|
||||
createdAt: Time!
|
||||
icon: VariableIcon
|
||||
trigger: String
|
||||
}
|
||||
|
||||
type SpaceConnection {
|
||||
edges: [SpaceEdge!]!
|
||||
nodes: [Space!]!
|
||||
pageInfo: PageInfo!
|
||||
}
|
||||
|
||||
type SpaceEdge {
|
||||
cursor: ID!
|
||||
node: Space!
|
||||
}
|
||||
Reference in New Issue
Block a user