From 4d0d2727bda1f2f052596afdef0135e4be4dba00 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Tue, 23 Jun 2020 10:51:15 +1000 Subject: [PATCH 1/3] Added strict type checking to group id --- .../outgoing/content/data/group/ClosedGroupMessage.ts | 10 ++++++---- ts/session/sending/MessageQueue.ts | 2 +- ts/session/utils/Groups.ts | 10 +++++----- ts/test/session/sending/MessageQueue_test.ts | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts b/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts index ccdb8f121..fda7a7b01 100644 --- a/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts +++ b/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts @@ -2,26 +2,28 @@ import { DataMessage } from '../DataMessage'; import { SignalService } from '../../../../../../protobuf'; import { TextEncoder } from 'util'; import { MessageParams } from '../../../Message'; +import { PubKey } from '../../../../../types'; interface ClosedGroupMessageParams extends MessageParams { - groupId: string; + groupId: string | PubKey; } export abstract class ClosedGroupMessage extends DataMessage { - public readonly groupId: string; + public readonly groupId: PubKey; constructor(params: ClosedGroupMessageParams) { super({ timestamp: params.timestamp, identifier: params.identifier, }); - this.groupId = params.groupId; + const { groupId } = params; + this.groupId = typeof groupId === 'string' ? new PubKey(groupId) : groupId; } protected abstract groupContextType(): SignalService.GroupContext.Type; protected groupContext(): SignalService.GroupContext { - const id = new TextEncoder().encode(this.groupId); + const id = new TextEncoder().encode(this.groupId.key); const type = this.groupContextType(); return new SignalService.GroupContext({ id, type }); diff --git a/ts/session/sending/MessageQueue.ts b/ts/session/sending/MessageQueue.ts index 465dfb91a..cf03ab551 100644 --- a/ts/session/sending/MessageQueue.ts +++ b/ts/session/sending/MessageQueue.ts @@ -139,7 +139,7 @@ export class MessageQueue implements MessageQueueInterface { public async processPending(device: PubKey) { const messages = await this.pendingMessageCache.getForDevice(device); - const isMediumGroup = GroupUtils.isMediumGroup(device.key); + const isMediumGroup = GroupUtils.isMediumGroup(device); const hasSession = await SessionProtocol.hasSession(device); if (!isMediumGroup && !hasSession) { diff --git a/ts/session/utils/Groups.ts b/ts/session/utils/Groups.ts index c3c4cf1b9..adce15790 100644 --- a/ts/session/utils/Groups.ts +++ b/ts/session/utils/Groups.ts @@ -1,11 +1,11 @@ import _ from 'lodash'; -import { PrimaryPubKey } from '../types'; +import { PrimaryPubKey, PubKey } from '../types'; import { MultiDeviceProtocol } from '../protocols'; export async function getGroupMembers( - groupId: string + groupId: PubKey ): Promise> { - const groupConversation = window.ConversationController.get(groupId); + const groupConversation = window.ConversationController.get(groupId.key); const groupMembers = groupConversation ? groupConversation.attributes.members : undefined; @@ -22,8 +22,8 @@ export async function getGroupMembers( return _.uniqWith(primaryDevices, (a, b) => a.isEqual(b)); } -export function isMediumGroup(groupId: string): boolean { - const conversation = window.ConversationController.get(groupId); +export function isMediumGroup(groupId: PubKey): boolean { + const conversation = window.ConversationController.get(groupId.key); if (!conversation) { return false; diff --git a/ts/test/session/sending/MessageQueue_test.ts b/ts/test/session/sending/MessageQueue_test.ts index c0d223ffc..7d3bf5fc3 100644 --- a/ts/test/session/sending/MessageQueue_test.ts +++ b/ts/test/session/sending/MessageQueue_test.ts @@ -43,7 +43,7 @@ describe('MessageQueue', () => { // Message Sender Stubs let sendStub: sinon.SinonStub<[RawMessage, (number | undefined)?]>; // Utils Stubs - let isMediumGroupStub: sinon.SinonStub<[string], boolean>; + let isMediumGroupStub: sinon.SinonStub<[PubKey], boolean>; // Session Protocol Stubs let hasSessionStub: sinon.SinonStub<[PubKey]>; let sendSessionRequestIfNeededStub: sinon.SinonStub<[PubKey], Promise>; From 53727b7e59493bc102a27b31e082c07d2ff6a0cf Mon Sep 17 00:00:00 2001 From: Mikunj Date: Tue, 23 Jun 2020 13:37:18 +1000 Subject: [PATCH 2/3] Update ClosedGroupChatMessage --- .../outgoing/content/data/group/ClosedGroupChatMessage.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ts/session/messages/outgoing/content/data/group/ClosedGroupChatMessage.ts b/ts/session/messages/outgoing/content/data/group/ClosedGroupChatMessage.ts index fc7d4250f..a0f75f4b0 100644 --- a/ts/session/messages/outgoing/content/data/group/ClosedGroupChatMessage.ts +++ b/ts/session/messages/outgoing/content/data/group/ClosedGroupChatMessage.ts @@ -1,10 +1,11 @@ import { SignalService } from '../../../../../../protobuf'; import { ChatMessage } from '../ChatMessage'; import { ClosedGroupMessage } from './ClosedGroupMessage'; +import { PubKey } from '../../../../../types'; interface ClosedGroupChatMessageParams { identifier?: string; - groupId: string; + groupId: string | PubKey; chatMessage: ChatMessage; } From 9c1d2fad7836d7ed1ed48f9306c6d69790fcf4c8 Mon Sep 17 00:00:00 2001 From: Ryan Tharp Date: Mon, 22 Jun 2020 20:39:18 -0700 Subject: [PATCH 3/3] scope buildNewOnionPathsWorker call properly --- js/modules/loki_snode_api.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/js/modules/loki_snode_api.js b/js/modules/loki_snode_api.js index b9d4ffa32..e6247c828 100644 --- a/js/modules/loki_snode_api.js +++ b/js/modules/loki_snode_api.js @@ -488,10 +488,9 @@ class LokiSnodeAPI { async buildNewOnionPaths() { // this function may be called concurrently make sure we only have one inflight - return primitives.allowOnlyOneAtATime( - 'buildNewOnionPaths', - this.buildNewOnionPathsWorker - ); + return primitives.allowOnlyOneAtATime('buildNewOnionPaths', async () => { + await this.buildNewOnionPathsWorker(); + }); } async getRandomSnodeAddress() {