Changeset View
Changeset View
Standalone View
Standalone View
lib/shared/messages/update-relationship-message-spec.js
Show All 16 Lines | import { | ||||
type RawLegacyUpdateRelationshipMessageInfo, | type RawLegacyUpdateRelationshipMessageInfo, | ||||
rawLegacyUpdateRelationshipMessageInfoValidator, | rawLegacyUpdateRelationshipMessageInfoValidator, | ||||
type LegacyUpdateRelationshipMessageData, | type LegacyUpdateRelationshipMessageData, | ||||
type LegacyUpdateRelationshipMessageInfo, | type LegacyUpdateRelationshipMessageInfo, | ||||
} from '../../types/messages/legacy-update-relationship.js'; | } from '../../types/messages/legacy-update-relationship.js'; | ||||
import type { | import type { | ||||
RawUpdateRelationshipMessageInfo, | RawUpdateRelationshipMessageInfo, | ||||
UpdateRelationshipMessageData, | UpdateRelationshipMessageData, | ||||
UpdateRelationshipMessageInfo, | |||||
} from '../../types/messages/update-relationship.js'; | } from '../../types/messages/update-relationship.js'; | ||||
import type { ThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js'; | import type { ThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js'; | ||||
import type { NotifTexts } from '../../types/notif-types.js'; | import type { NotifTexts } from '../../types/notif-types.js'; | ||||
import type { RelativeUserInfo } from '../../types/user-types.js'; | import type { RelativeUserInfo } from '../../types/user-types.js'; | ||||
import { type EntityText, ET } from '../../utils/entity-text.js'; | import { type EntityText, ET } from '../../utils/entity-text.js'; | ||||
type UpdateRelationshipMessageSpec = MessageSpec< | type UpdateRelationshipMessageSpec = MessageSpec< | ||||
LegacyUpdateRelationshipMessageData, | LegacyUpdateRelationshipMessageData | UpdateRelationshipMessageData, | ||||
RawLegacyUpdateRelationshipMessageInfo, | RawLegacyUpdateRelationshipMessageInfo | RawUpdateRelationshipMessageInfo, | ||||
LegacyUpdateRelationshipMessageInfo, | LegacyUpdateRelationshipMessageInfo | UpdateRelationshipMessageInfo, | ||||
> & { | > & { | ||||
// We need to explicitly type this as non-optional so that | // We need to explicitly type this as non-optional so that | ||||
// it can be referenced from messageContentForClientDB below | // it can be referenced from messageContentForClientDB below | ||||
+messageContentForServerDB: ( | +messageContentForServerDB: ( | ||||
data: | data: | ||||
| LegacyUpdateRelationshipMessageData | | LegacyUpdateRelationshipMessageData | ||||
| RawLegacyUpdateRelationshipMessageInfo | | RawLegacyUpdateRelationshipMessageInfo | ||||
| UpdateRelationshipMessageData | | UpdateRelationshipMessageData | ||||
Show All 13 Lines | Object.freeze({ | ||||
): string { | ): string { | ||||
return JSON.stringify({ | return JSON.stringify({ | ||||
operation: data.operation, | operation: data.operation, | ||||
targetID: data.targetID, | targetID: data.targetID, | ||||
}); | }); | ||||
}, | }, | ||||
messageContentForClientDB( | messageContentForClientDB( | ||||
data: RawLegacyUpdateRelationshipMessageInfo, | data: | ||||
| RawLegacyUpdateRelationshipMessageInfo | |||||
| RawUpdateRelationshipMessageInfo, | |||||
): string { | ): string { | ||||
return updateRelationshipMessageSpec.messageContentForServerDB(data); | return updateRelationshipMessageSpec.messageContentForServerDB(data); | ||||
}, | }, | ||||
rawMessageInfoFromServerDBRow( | rawMessageInfoFromServerDBRow( | ||||
row: Object, | row: Object, | ||||
): RawLegacyUpdateRelationshipMessageInfo { | ): | ||||
| RawLegacyUpdateRelationshipMessageInfo | |||||
| RawUpdateRelationshipMessageInfo { | |||||
const content = JSON.parse(row.content); | const content = JSON.parse(row.content); | ||||
return { | return { | ||||
type: messageTypes.LEGACY_UPDATE_RELATIONSHIP, | type: row.type, | ||||
id: row.id.toString(), | id: row.id.toString(), | ||||
threadID: row.threadID.toString(), | threadID: row.threadID.toString(), | ||||
time: row.time, | time: row.time, | ||||
creatorID: row.creatorID.toString(), | creatorID: row.creatorID.toString(), | ||||
targetID: content.targetID, | targetID: content.targetID, | ||||
operation: content.operation, | operation: content.operation, | ||||
}; | }; | ||||
}, | }, | ||||
Show All 16 Lines | ): RawLegacyUpdateRelationshipMessageInfo { | ||||
creatorID: clientDBMessageInfo.user, | creatorID: clientDBMessageInfo.user, | ||||
targetID: content.targetID, | targetID: content.targetID, | ||||
operation: content.operation, | operation: content.operation, | ||||
}; | }; | ||||
return rawUpdateRelationshipMessageInfo; | return rawUpdateRelationshipMessageInfo; | ||||
}, | }, | ||||
createMessageInfo( | createMessageInfo( | ||||
rawMessageInfo: RawLegacyUpdateRelationshipMessageInfo, | rawMessageInfo: | ||||
| RawLegacyUpdateRelationshipMessageInfo | |||||
| RawUpdateRelationshipMessageInfo, | |||||
creator: RelativeUserInfo, | creator: RelativeUserInfo, | ||||
params: CreateMessageInfoParams, | params: CreateMessageInfoParams, | ||||
): ?LegacyUpdateRelationshipMessageInfo { | ): ?LegacyUpdateRelationshipMessageInfo | ?UpdateRelationshipMessageInfo { | ||||
const target = params.createRelativeUserInfos([ | const target = params.createRelativeUserInfos([ | ||||
rawMessageInfo.targetID, | rawMessageInfo.targetID, | ||||
])[0]; | ])[0]; | ||||
if (!target) { | if (!target) { | ||||
return null; | return null; | ||||
} | } | ||||
if (rawMessageInfo.type === messageTypes.LEGACY_UPDATE_RELATIONSHIP) { | |||||
return { | return { | ||||
type: messageTypes.LEGACY_UPDATE_RELATIONSHIP, | type: messageTypes.LEGACY_UPDATE_RELATIONSHIP, | ||||
id: rawMessageInfo.id, | id: rawMessageInfo.id, | ||||
threadID: rawMessageInfo.threadID, | threadID: rawMessageInfo.threadID, | ||||
creator, | creator, | ||||
target, | target, | ||||
time: rawMessageInfo.time, | time: rawMessageInfo.time, | ||||
operation: rawMessageInfo.operation, | operation: rawMessageInfo.operation, | ||||
}; | }; | ||||
} else { | |||||
return { | |||||
type: messageTypes.UPDATE_RELATIONSHIP, | |||||
id: rawMessageInfo.id, | |||||
threadID: rawMessageInfo.threadID, | |||||
creator, | |||||
target, | |||||
time: rawMessageInfo.time, | |||||
operation: rawMessageInfo.operation, | |||||
}; | |||||
} | |||||
}, | }, | ||||
rawMessageInfoFromMessageData( | rawMessageInfoFromMessageData( | ||||
messageData: LegacyUpdateRelationshipMessageData, | messageData: | ||||
| LegacyUpdateRelationshipMessageData | |||||
| UpdateRelationshipMessageData, | |||||
id: ?string, | id: ?string, | ||||
): RawLegacyUpdateRelationshipMessageInfo { | ): | ||||
| RawLegacyUpdateRelationshipMessageInfo | |||||
| RawUpdateRelationshipMessageInfo { | |||||
invariant(id, 'RawUpdateRelationshipMessageInfo needs id'); | invariant(id, 'RawUpdateRelationshipMessageInfo needs id'); | ||||
return { ...messageData, id }; | return { ...messageData, id }; | ||||
}, | }, | ||||
// ESLint doesn't recognize that invariant always throws | // ESLint doesn't recognize that invariant always throws | ||||
// eslint-disable-next-line consistent-return | // eslint-disable-next-line consistent-return | ||||
robotext(messageInfo: LegacyUpdateRelationshipMessageInfo): EntityText { | robotext( | ||||
messageInfo: | |||||
| LegacyUpdateRelationshipMessageInfo | |||||
| UpdateRelationshipMessageInfo, | |||||
): EntityText { | |||||
const creator = ET.user({ userInfo: messageInfo.creator }); | const creator = ET.user({ userInfo: messageInfo.creator }); | ||||
if (messageInfo.operation === 'request_sent') { | if (messageInfo.operation === 'request_sent') { | ||||
const target = ET.user({ userInfo: messageInfo.target }); | const target = ET.user({ userInfo: messageInfo.target }); | ||||
return ET`${creator} sent ${target} a friend request`; | return ET`${creator} sent ${target} a friend request`; | ||||
} else if (messageInfo.operation === 'request_accepted') { | } else if (messageInfo.operation === 'request_accepted') { | ||||
const targetPossessive = ET.user({ | const targetPossessive = ET.user({ | ||||
userInfo: messageInfo.target, | userInfo: messageInfo.target, | ||||
possessive: true, | possessive: true, | ||||
}); | }); | ||||
return ET`${creator} accepted ${targetPossessive} friend request`; | return ET`${creator} accepted ${targetPossessive} friend request`; | ||||
} | } | ||||
invariant( | invariant( | ||||
false, | false, | ||||
`Invalid operation ${messageInfo.operation} ` + | `Invalid operation ${messageInfo.operation} ` + | ||||
`of message with type ${messageInfo.type}`, | `of message with type ${messageInfo.type}`, | ||||
); | ); | ||||
}, | }, | ||||
unshimMessageInfo( | unshimMessageInfo( | ||||
unwrapped: RawLegacyUpdateRelationshipMessageInfo, | unwrapped: | ||||
): RawLegacyUpdateRelationshipMessageInfo { | | RawLegacyUpdateRelationshipMessageInfo | ||||
| RawUpdateRelationshipMessageInfo, | |||||
): | |||||
| RawLegacyUpdateRelationshipMessageInfo | |||||
| RawUpdateRelationshipMessageInfo { | |||||
return unwrapped; | return unwrapped; | ||||
}, | }, | ||||
async notificationTexts( | async notificationTexts( | ||||
messageInfos: $ReadOnlyArray<MessageInfo>, | messageInfos: $ReadOnlyArray<MessageInfo>, | ||||
threadInfo: ThreadInfo, | threadInfo: ThreadInfo, | ||||
): Promise<NotifTexts> { | ): Promise<NotifTexts> { | ||||
const messageInfo = assertSingleMessageInfo(messageInfos); | const messageInfo = assertSingleMessageInfo(messageInfos); | ||||
Show All 24 Lines |