Page MenuHomePhorge

D15214.1765115391.diff
No OneTemporary

Size
4 KB
Referenced Files
None
Subscribers
None

D15214.1765115391.diff

diff --git a/lib/permissions/farcaster-permissions.js b/lib/permissions/farcaster-permissions.js
--- a/lib/permissions/farcaster-permissions.js
+++ b/lib/permissions/farcaster-permissions.js
@@ -3,18 +3,35 @@
import type { RolePermissionBlobs } from './thread-permissions.js';
import type { FarcasterConversation } from '../shared/farcaster/farcaster-conversation-types.js';
import { threadPermissions } from '../types/thread-permission-types.js';
+import type { FarcasterThreadType } from '../types/thread-types-enum.js';
+import { farcasterThreadTypes } from '../types/thread-types-enum.js';
-function getFarcasterRolePermissionsBlobs(
+function getFarcasterRolePermissionsBlobsFromConversation(
conversation: FarcasterConversation,
): RolePermissionBlobs {
- if (conversation.isGroup) {
+ const threadType = conversation.isGroup
+ ? farcasterThreadTypes.FARCASTER_GROUP
+ : farcasterThreadTypes.FARCASTER_PERSONAL;
+ return getFarcasterRolePermissionsBlobs(
+ threadType,
+ conversation.groupPreferences?.onlyAdminsCanWrite,
+ conversation.groupPreferences?.membersCanInvite,
+ );
+}
+
+function getFarcasterRolePermissionsBlobs(
+ threadType: FarcasterThreadType,
+ onlyAdminsCanWrite: boolean = false,
+ membersCanInvite: boolean = true,
+): RolePermissionBlobs {
+ if (threadType === farcasterThreadTypes.FARCASTER_GROUP) {
// These permissions are based on the experimentation:
// Only admins can create invite links
// Admins can decide who can add users (admins or all the members)
// Admins can change a role of a user
// Only admins can edit a thread
let membersPermissions;
- if (conversation.groupPreferences?.onlyAdminsCanWrite) {
+ if (onlyAdminsCanWrite) {
membersPermissions = {
[threadPermissions.KNOW_OF]: true,
[threadPermissions.VISIBLE]: true,
@@ -28,8 +45,7 @@
[threadPermissions.REACT_TO_MESSAGE]: true,
[threadPermissions.EDIT_MESSAGE]: true,
[threadPermissions.DELETE_OWN_MESSAGES]: true,
- [threadPermissions.ADD_MEMBERS]:
- !!conversation.groupPreferences?.membersCanInvite,
+ [threadPermissions.ADD_MEMBERS]: membersCanInvite,
[threadPermissions.LEAVE_THREAD]: true,
};
}
@@ -73,4 +89,7 @@
}
}
-export { getFarcasterRolePermissionsBlobs };
+export {
+ getFarcasterRolePermissionsBlobsFromConversation,
+ getFarcasterRolePermissionsBlobs,
+};
diff --git a/lib/shared/threads/protocols/farcaster-thread-protocol.js b/lib/shared/threads/protocols/farcaster-thread-protocol.js
--- a/lib/shared/threads/protocols/farcaster-thread-protocol.js
+++ b/lib/shared/threads/protocols/farcaster-thread-protocol.js
@@ -1,5 +1,6 @@
// @flow
+import { getFarcasterRolePermissionsBlobs } from '../../../permissions/farcaster-permissions.js';
import type { RolePermissionBlobs } from '../../../permissions/thread-permissions.js';
import type { SetThreadUnreadStatusPayload } from '../../../types/activity-types.js';
import type {
@@ -17,6 +18,7 @@
} from '../../../types/minimally-encoded-thread-permissions-types.js';
import type { SubscriptionUpdateResult } from '../../../types/subscription-types.js';
import type { ThreadType } from '../../../types/thread-types-enum.js';
+import { assertFarcasterThreadType } from '../../../types/thread-types-enum.js';
import type {
ChangeThreadSettingsPayload,
ThreadJoinPayload,
@@ -115,8 +117,9 @@
);
},
- getRolePermissionBlobs: (): RolePermissionBlobs => {
- throw new Error('getRolePermissionBlobs method is not yet implemented');
+ getRolePermissionBlobs: (threadType: ThreadType): RolePermissionBlobs => {
+ const farcasterThreadType = assertFarcasterThreadType(threadType);
+ return getFarcasterRolePermissionsBlobs(farcasterThreadType);
},
deleteMessage: async (): Promise<void> => {
diff --git a/lib/utils/farcaster-utils.js b/lib/utils/farcaster-utils.js
--- a/lib/utils/farcaster-utils.js
+++ b/lib/utils/farcaster-utils.js
@@ -10,7 +10,7 @@
import { farcasterIDPrefix } from './validation-utils.js';
import { setSyncedMetadataEntryActionType } from '../actions/synced-metadata-actions.js';
import { useUserIdentityCache } from '../components/user-identity-cache.react.js';
-import { getFarcasterRolePermissionsBlobs } from '../permissions/farcaster-permissions.js';
+import { getFarcasterRolePermissionsBlobsFromConversation } from '../permissions/farcaster-permissions.js';
import { specialRoles } from '../permissions/special-roles.js';
import {
getAllThreadPermissions,
@@ -288,7 +288,8 @@
const threadType = conversation.isGroup
? farcasterThreadTypes.FARCASTER_GROUP
: farcasterThreadTypes.FARCASTER_PERSONAL;
- const permissionBlobs = getFarcasterRolePermissionsBlobs(conversation);
+ const permissionBlobs =
+ getFarcasterRolePermissionsBlobsFromConversation(conversation);
const membersRole: RoleInfo = {
...minimallyEncodeRoleInfo({

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 1:49 PM (15 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5844375
Default Alt Text
D15214.1765115391.diff (4 KB)

Event Timeline