Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32203856
D15214.1765115391.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D15214.1765115391.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D15214: [lib] Connect the permissions to a spec
Attached
Detach File
Event Timeline
Log In to Comment