diff --git a/.eslintrc.json b/.eslintrc.json --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,8 @@ { "root": true, "env": { - "es6": true + "es6": true, + "es2020": true }, "extends": [ "eslint:recommended", diff --git a/keyserver/src/responders/responder-validators.test.js b/keyserver/src/responders/responder-validators.test.js --- a/keyserver/src/responders/responder-validators.test.js +++ b/keyserver/src/responders/responder-validators.test.js @@ -96,7 +96,6 @@ role: '83796', permissions: { know_of: { value: true, source: '1' }, - membership: { value: false, source: null }, visible: { value: true, source: '1' }, voiced: { value: true, source: '1' }, edit_entries: { value: true, source: '1' }, @@ -136,7 +135,6 @@ role: '83795', permissions: { know_of: { value: true, source: '1' }, - membership: { value: false, source: null }, visible: { value: true, source: '1' }, voiced: { value: false, source: null }, edit_entries: { value: false, source: null }, @@ -227,7 +225,6 @@ role: '83796', permissions: { know_of: { value: true, source: '1' }, - membership: { value: false, source: null }, visible: { value: true, source: '1' }, voiced: { value: true, source: '1' }, edit_entries: { value: true, source: '1' }, @@ -253,7 +250,6 @@ role: '83795', permissions: { know_of: { value: true, source: '1' }, - membership: { value: false, source: null }, visible: { value: true, source: '1' }, voiced: { value: false, source: null }, edit_entries: { value: false, source: null }, @@ -331,7 +327,6 @@ role: '83795', permissions: { know_of: { value: true, source: '1' }, - membership: { value: false, source: null }, visible: { value: true, source: '1' }, voiced: { value: false, source: null }, edit_entries: { value: false, source: null }, diff --git a/lib/permissions/minimally-encoded-thread-permissions.js b/lib/permissions/minimally-encoded-thread-permissions.js new file mode 100644 --- /dev/null +++ b/lib/permissions/minimally-encoded-thread-permissions.js @@ -0,0 +1,78 @@ +// @flow + +import invariant from 'invariant'; + +import type { + ThreadPermission, + ThreadPermissionsInfo, +} from '../types/thread-permission-types.js'; +import { entries } from '../utils/objects.js'; + +const minimallyEncodedThreadPermissions = Object.freeze({ + // TODO (atul): Update flow to `194.0.0` for bigint support + // $FlowIssue bigint-unsupported + know_of: BigInt(1) << BigInt(0), + visible: BigInt(1) << BigInt(1), + voiced: BigInt(1) << BigInt(2), + edit_entries: BigInt(1) << BigInt(3), + edit_thread: BigInt(1) << BigInt(4), // EDIT_THREAD_NAME + edit_thread_description: BigInt(1) << BigInt(5), + edit_thread_color: BigInt(1) << BigInt(6), + delete_thread: BigInt(1) << BigInt(7), + create_subthreads: BigInt(1) << BigInt(8), // CREATE_SUBCHANNELS + create_sidebars: BigInt(1) << BigInt(9), + join_thread: BigInt(1) << BigInt(10), + edit_permissions: BigInt(1) << BigInt(11), + add_members: BigInt(1) << BigInt(12), + remove_members: BigInt(1) << BigInt(13), + change_role: BigInt(1) << BigInt(14), + leave_thread: BigInt(1) << BigInt(15), + react_to_message: BigInt(1) << BigInt(16), + edit_message: BigInt(1) << BigInt(17), + edit_thread_avatar: BigInt(1) << BigInt(18), + manage_pins: BigInt(1) << BigInt(19), + manage_invite_links: BigInt(1) << BigInt(20), +}); + +// TODO (atul): Update flow to `194.0.0` for bigint support +// $FlowIssue bigint-unsupported +const permissionsToBitmask = (permissions: ThreadPermissionsInfo): bigint => { + let bitmask = BigInt(0); + for (const [key, permission] of entries(permissions)) { + if (permission.value && key in minimallyEncodedThreadPermissions) { + invariant( + // TODO (atul): Update flow to `194.0.0` for bigint support + // $FlowIssue illegal-typeof + typeof minimallyEncodedThreadPermissions[key] === 'bigint', + 'must be bigint', + ); + bitmask |= minimallyEncodedThreadPermissions[key]; + } + } + return bitmask; +}; + +const hasPermission = ( + // TODO (atul): Update flow to `194.0.0` for bigint support + // $FlowIssue bigint-unsupported + permissionsBitmask: bigint, + permission: ThreadPermission, +): boolean => { + if (!(permission in minimallyEncodedThreadPermissions)) { + return false; + } + const permissionBitmask = minimallyEncodedThreadPermissions[permission]; + invariant( + // TODO (atul): Update flow to `194.0.0` for bigint support + // $FlowIssue illegal-typeof + typeof permissionBitmask === 'bigint', + 'permissionBitmask must be of type bigint', + ); + return (permissionsBitmask & permissionBitmask) !== BigInt(0); +}; + +export { + minimallyEncodedThreadPermissions, + permissionsToBitmask, + hasPermission, +}; diff --git a/lib/permissions/minimally-encoded-thread-permissions.test.js b/lib/permissions/minimally-encoded-thread-permissions.test.js new file mode 100644 --- /dev/null +++ b/lib/permissions/minimally-encoded-thread-permissions.test.js @@ -0,0 +1,53 @@ +// @flow + +import { + hasPermission, + permissionsToBitmask, +} from './minimally-encoded-thread-permissions.js'; + +describe('minimallyEncodedThreadPermissions', () => { + const permissions = { + know_of: { value: true, source: '1' }, + visible: { value: true, source: '1' }, + voiced: { value: true, source: '1' }, + edit_entries: { value: true, source: '1' }, + edit_thread: { value: true, source: '1' }, + edit_thread_description: { value: true, source: '1' }, + edit_thread_color: { value: true, source: '1' }, + delete_thread: { value: true, source: '1' }, + create_subthreads: { value: true, source: '1' }, + create_sidebars: { value: true, source: '1' }, + join_thread: { value: false, source: null }, + edit_permissions: { value: false, source: null }, + add_members: { value: true, source: '1' }, + remove_members: { value: true, source: '1' }, + change_role: { value: true, source: '1' }, + leave_thread: { value: false, source: null }, + react_to_message: { value: true, source: '1' }, + edit_message: { value: true, source: '1' }, + }; + + it('should encode ThreadPermissionsInfo as bitmask', () => { + const permissionsBitmask = permissionsToBitmask(permissions); + expect(permissionsBitmask.toString(2)).toBe('110111001111111111'); + expect(hasPermission(permissionsBitmask, 'know_of')).toBe(true); + expect(hasPermission(permissionsBitmask, 'visible')).toBe(true); + expect(hasPermission(permissionsBitmask, 'voiced')).toBe(true); + expect(hasPermission(permissionsBitmask, 'edit_entries')).toBe(true); + expect(hasPermission(permissionsBitmask, 'edit_thread')).toBe(true); + expect(hasPermission(permissionsBitmask, 'edit_thread_description')).toBe( + true, + ); + expect(hasPermission(permissionsBitmask, 'edit_thread_color')).toBe(true); + expect(hasPermission(permissionsBitmask, 'delete_thread')).toBe(true); + expect(hasPermission(permissionsBitmask, 'create_subthreads')).toBe(true); + expect(hasPermission(permissionsBitmask, 'create_sidebars')).toBe(true); + expect(hasPermission(permissionsBitmask, 'join_thread')).toBe(false); + expect(hasPermission(permissionsBitmask, 'edit_permissions')).toBe(false); + expect(hasPermission(permissionsBitmask, 'remove_members')).toBe(true); + expect(hasPermission(permissionsBitmask, 'change_role')).toBe(true); + expect(hasPermission(permissionsBitmask, 'leave_thread')).toBe(false); + expect(hasPermission(permissionsBitmask, 'react_to_message')).toBe(true); + expect(hasPermission(permissionsBitmask, 'edit_message')).toBe(true); + }); +}); diff --git a/lib/types/thread-permission-types.js b/lib/types/thread-permission-types.js --- a/lib/types/thread-permission-types.js +++ b/lib/types/thread-permission-types.js @@ -12,7 +12,6 @@ // across all roles, it should be added to `universalCommunityPermissions`. export const threadPermissions = Object.freeze({ KNOW_OF: 'know_of', - MEMBERSHIP_DEPRECATED: 'membership', VISIBLE: 'visible', VOICED: 'voiced', EDIT_ENTRIES: 'edit_entries', @@ -41,7 +40,6 @@ ): ThreadPermission { invariant( ourThreadPermissions === 'know_of' || - ourThreadPermissions === 'membership' || ourThreadPermissions === 'visible' || ourThreadPermissions === 'voiced' || ourThreadPermissions === 'edit_entries' || diff --git a/lib/types/validation.test.js b/lib/types/validation.test.js --- a/lib/types/validation.test.js +++ b/lib/types/validation.test.js @@ -363,10 +363,6 @@ value: true, source: '1', }, - membership: { - value: false, - source: null, - }, visible: { value: true, source: '1', @@ -450,10 +446,6 @@ value: true, source: '85171', }, - membership: { - value: false, - source: null, - }, visible: { value: true, source: '85171', @@ -559,10 +551,6 @@ value: true, source: '85171', }, - membership: { - value: false, - source: null, - }, visible: { value: true, source: '85171', diff --git a/lib/utils/thread-ops-utils.test.js b/lib/utils/thread-ops-utils.test.js --- a/lib/utils/thread-ops-utils.test.js +++ b/lib/utils/thread-ops-utils.test.js @@ -26,10 +26,6 @@ value: true, source: '1', }, - membership: { - value: false, - source: null, - }, visible: { value: true, source: '1', @@ -109,10 +105,6 @@ value: true, source: '84015', }, - membership: { - value: false, - source: null, - }, visible: { value: true, source: '84015', @@ -192,10 +184,6 @@ value: true, source: '84015', }, - membership: { - value: false, - source: null, - }, visible: { value: true, source: '84015', @@ -297,10 +285,6 @@ value: true, source: '84015', }, - membership: { - value: false, - source: null, - }, visible: { value: true, source: '84015', @@ -391,11 +375,11 @@ creationTime: '1679595843051', parentThreadID: '1', members: - '[{"id":"256","role":null,"permissions":{"know_of":{"value":true,"source":"1"},"membership":{"value":false,"source":null},"visible":{"value":true,"source":"1"},"voiced":{"value":true,"source":"1"},"edit_entries":{"value":true,"source":"1"},"edit_thread":{"value":true,"source":"1"},"edit_thread_description":{"value":true,"source":"1"},"edit_thread_color":{"value":true,"source":"1"},"delete_thread":{"value":true,"source":"1"},"create_subthreads":{"value":true,"source":"1"},"create_sidebars":{"value":true,"source":"1"},"join_thread":{"value":true,"source":"1"},"edit_permissions":{"value":true,"source":"1"},"add_members":{"value":true,"source":"1"},"remove_members":{"value":true,"source":"1"},"change_role":{"value":true,"source":"1"},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":false,"source":null},"edit_message":{"value":false,"source":null}},"isSender":false},{"id":"83809","role":"84016","permissions":{"know_of":{"value":true,"source":"84015"},"membership":{"value":false,"source":null},"visible":{"value":true,"source":"84015"},"voiced":{"value":true,"source":"84015"},"edit_entries":{"value":true,"source":"84015"},"edit_thread":{"value":true,"source":"84015"},"edit_thread_description":{"value":true,"source":"84015"},"edit_thread_color":{"value":true,"source":"84015"},"delete_thread":{"value":false,"source":null},"create_subthreads":{"value":false,"source":null},"create_sidebars":{"value":true,"source":"84015"},"join_thread":{"value":false,"source":null},"edit_permissions":{"value":false,"source":null},"add_members":{"value":false,"source":null},"remove_members":{"value":false,"source":null},"change_role":{"value":false,"source":null},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":true,"source":"84015"},"edit_message":{"value":true,"source":"84015"}},"isSender":true},{"id":"83969","role":"84016","permissions":{"know_of":{"value":true,"source":"84015"},"membership":{"value":false,"source":null},"visible":{"value":true,"source":"84015"},"voiced":{"value":true,"source":"84015"},"edit_entries":{"value":true,"source":"84015"},"edit_thread":{"value":true,"source":"84015"},"edit_thread_description":{"value":true,"source":"84015"},"edit_thread_color":{"value":true,"source":"84015"},"delete_thread":{"value":false,"source":null},"create_subthreads":{"value":false,"source":null},"create_sidebars":{"value":true,"source":"84015"},"join_thread":{"value":false,"source":null},"edit_permissions":{"value":false,"source":null},"add_members":{"value":false,"source":null},"remove_members":{"value":false,"source":null},"change_role":{"value":false,"source":null},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":true,"source":"84015"},"edit_message":{"value":true,"source":"84015"}},"isSender":true}]', + '[{"id":"256","role":null,"permissions":{"know_of":{"value":true,"source":"1"},"visible":{"value":true,"source":"1"},"voiced":{"value":true,"source":"1"},"edit_entries":{"value":true,"source":"1"},"edit_thread":{"value":true,"source":"1"},"edit_thread_description":{"value":true,"source":"1"},"edit_thread_color":{"value":true,"source":"1"},"delete_thread":{"value":true,"source":"1"},"create_subthreads":{"value":true,"source":"1"},"create_sidebars":{"value":true,"source":"1"},"join_thread":{"value":true,"source":"1"},"edit_permissions":{"value":true,"source":"1"},"add_members":{"value":true,"source":"1"},"remove_members":{"value":true,"source":"1"},"change_role":{"value":true,"source":"1"},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":false,"source":null},"edit_message":{"value":false,"source":null}},"isSender":false},{"id":"83809","role":"84016","permissions":{"know_of":{"value":true,"source":"84015"},"visible":{"value":true,"source":"84015"},"voiced":{"value":true,"source":"84015"},"edit_entries":{"value":true,"source":"84015"},"edit_thread":{"value":true,"source":"84015"},"edit_thread_description":{"value":true,"source":"84015"},"edit_thread_color":{"value":true,"source":"84015"},"delete_thread":{"value":false,"source":null},"create_subthreads":{"value":false,"source":null},"create_sidebars":{"value":true,"source":"84015"},"join_thread":{"value":false,"source":null},"edit_permissions":{"value":false,"source":null},"add_members":{"value":false,"source":null},"remove_members":{"value":false,"source":null},"change_role":{"value":false,"source":null},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":true,"source":"84015"},"edit_message":{"value":true,"source":"84015"}},"isSender":true},{"id":"83969","role":"84016","permissions":{"know_of":{"value":true,"source":"84015"},"visible":{"value":true,"source":"84015"},"voiced":{"value":true,"source":"84015"},"edit_entries":{"value":true,"source":"84015"},"edit_thread":{"value":true,"source":"84015"},"edit_thread_description":{"value":true,"source":"84015"},"edit_thread_color":{"value":true,"source":"84015"},"delete_thread":{"value":false,"source":null},"create_subthreads":{"value":false,"source":null},"create_sidebars":{"value":true,"source":"84015"},"join_thread":{"value":false,"source":null},"edit_permissions":{"value":false,"source":null},"add_members":{"value":false,"source":null},"remove_members":{"value":false,"source":null},"change_role":{"value":false,"source":null},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":true,"source":"84015"},"edit_message":{"value":true,"source":"84015"}},"isSender":true}]', roles: '{"84016":{"id":"84016","name":"Members","permissions":{"know_of":true,"visible":true,"voiced":true,"react_to_message":true,"edit_message":true,"edit_entries":true,"edit_thread":true,"edit_thread_color":true,"edit_thread_description":true,"create_sidebars":true,"descendant_open_know_of":true,"descendant_open_visible":true,"child_open_join_thread":true},"isDefault":true}}', currentUser: - '{"role":"84016","permissions":{"know_of":{"value":true,"source":"84015"},"membership":{"value":false,"source":null},"visible":{"value":true,"source":"84015"},"voiced":{"value":true,"source":"84015"},"edit_entries":{"value":true,"source":"84015"},"edit_thread":{"value":true,"source":"84015"},"edit_thread_description":{"value":true,"source":"84015"},"edit_thread_color":{"value":true,"source":"84015"},"delete_thread":{"value":false,"source":null},"create_subthreads":{"value":false,"source":null},"create_sidebars":{"value":true,"source":"84015"},"join_thread":{"value":false,"source":null},"edit_permissions":{"value":false,"source":null},"add_members":{"value":false,"source":null},"remove_members":{"value":false,"source":null},"change_role":{"value":false,"source":null},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":true,"source":"84015"},"edit_message":{"value":true,"source":"84015"}},"subscription":{"home":true,"pushNotifs":true},"unread":false}', + '{"role":"84016","permissions":{"know_of":{"value":true,"source":"84015"},"visible":{"value":true,"source":"84015"},"voiced":{"value":true,"source":"84015"},"edit_entries":{"value":true,"source":"84015"},"edit_thread":{"value":true,"source":"84015"},"edit_thread_description":{"value":true,"source":"84015"},"edit_thread_color":{"value":true,"source":"84015"},"delete_thread":{"value":false,"source":null},"create_subthreads":{"value":false,"source":null},"create_sidebars":{"value":true,"source":"84015"},"join_thread":{"value":false,"source":null},"edit_permissions":{"value":false,"source":null},"add_members":{"value":false,"source":null},"remove_members":{"value":false,"source":null},"change_role":{"value":false,"source":null},"leave_thread":{"value":false,"source":null},"react_to_message":{"value":true,"source":"84015"},"edit_message":{"value":true,"source":"84015"}},"subscription":{"home":true,"pushNotifs":true},"unread":false}', repliesCount: 0, containingThreadID: '1', community: '1', diff --git a/native/redux/update-roles-and-permissions-test-data.js b/native/redux/update-roles-and-permissions-test-data.js --- a/native/redux/update-roles-and-permissions-test-data.js +++ b/native/redux/update-roles-and-permissions-test-data.js @@ -74,10 +74,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -174,10 +170,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '1', value: true, @@ -265,10 +257,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -422,10 +410,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84596', value: true, @@ -522,10 +506,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -613,10 +593,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84596', value: true, @@ -735,10 +711,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84598', value: true, @@ -834,10 +806,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84598', value: true, @@ -925,10 +893,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84598', value: true, @@ -1048,10 +1012,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84627', value: true, @@ -1147,10 +1107,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -1238,10 +1194,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84627', value: true, @@ -1329,10 +1281,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84627', value: true, @@ -1452,10 +1400,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -1551,10 +1495,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -1642,10 +1582,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -1733,10 +1669,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -1824,10 +1756,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -1954,10 +1882,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '86071', value: true, @@ -2053,10 +1977,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -2144,10 +2064,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '86071', value: true, @@ -2235,10 +2151,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '86071', value: true, @@ -2358,10 +2270,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87789', value: true, @@ -2457,10 +2365,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -2548,10 +2452,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -2639,10 +2539,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87789', value: true, @@ -2730,10 +2626,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87789', value: true, @@ -2860,10 +2752,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87817', value: true, @@ -2959,10 +2847,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -3050,10 +2934,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -3141,10 +3021,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87817', value: true, @@ -3232,10 +3108,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87817', value: true, @@ -3362,10 +3234,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87837', value: true, @@ -3461,10 +3329,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -3552,10 +3416,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87837', value: true, @@ -3643,10 +3503,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87837', value: true, @@ -3770,10 +3626,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -3870,10 +3722,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '1', value: true, @@ -3961,10 +3809,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -4076,10 +3920,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84596', value: true, @@ -4176,10 +4016,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -4267,10 +4103,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84596', value: true, @@ -4376,10 +4208,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84598', value: true, @@ -4475,10 +4303,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84598', value: true, @@ -4566,10 +4390,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84598', value: true, @@ -4675,10 +4495,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84627', value: true, @@ -4774,10 +4590,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -4865,10 +4677,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84627', value: true, @@ -4956,10 +4764,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84627', value: true, @@ -5065,10 +4869,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -5164,10 +4964,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -5255,10 +5051,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -5346,10 +5138,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -5437,10 +5225,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -5546,10 +5330,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '86071', value: true, @@ -5645,10 +5425,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -5736,10 +5512,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '86071', value: true, @@ -5827,10 +5599,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '86071', value: true, @@ -5936,10 +5704,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87789', value: true, @@ -6035,10 +5799,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -6126,10 +5886,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -6217,10 +5973,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87789', value: true, @@ -6308,10 +6060,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87789', value: true, @@ -6417,10 +6165,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87817', value: true, @@ -6516,10 +6260,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -6607,10 +6347,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -6698,10 +6434,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87817', value: true, @@ -6789,10 +6521,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87817', value: true, @@ -6898,10 +6626,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87837', value: true, @@ -6997,10 +6721,6 @@ source: '1', value: true, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -7088,10 +6808,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87837', value: true, @@ -7179,10 +6895,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87837', value: true, @@ -7296,10 +7008,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: null, value: false, @@ -7432,10 +7140,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84596', value: true, @@ -7562,10 +7266,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84598', value: true, @@ -7691,10 +7391,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84627', value: true, @@ -7826,10 +7522,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '84656', value: true, @@ -7967,10 +7659,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '86071', value: true, @@ -8102,10 +7790,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87789', value: true, @@ -8243,10 +7927,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87817', value: true, @@ -8384,10 +8064,6 @@ source: null, value: false, }, - membership: { - source: null, - value: false, - }, react_to_message: { source: '87837', value: true,