@ttt-productions/ttt-core 0.79.74 → 0.79.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/permissions/work-project-permissions-data.d.ts +8 -12
- package/dist/permissions/work-project-permissions-data.d.ts.map +1 -1
- package/dist/permissions/work-project-permissions-data.js +6 -12
- package/dist/permissions/work-project-permissions-data.js.map +1 -1
- package/dist/utils/guild-chat-access.d.ts +0 -22
- package/dist/utils/guild-chat-access.d.ts.map +1 -1
- package/dist/utils/guild-chat-access.js +0 -22
- package/dist/utils/guild-chat-access.js.map +1 -1
- package/package.json +1 -1
|
@@ -81,17 +81,13 @@ export declare const GUILD_STANDING_VALUES: GuildStandingValue[];
|
|
|
81
81
|
export declare const WORK_FILE_ADMIN_GUILD_STANDING_IDS: readonly ["StewardOwner", "WorkProjectManager", "WorkAssetAdmin"];
|
|
82
82
|
/**
|
|
83
83
|
* A Work's invite handlers: they send the Work's invites, list them, cancel them, and take the
|
|
84
|
-
* Work's side in every invite conversation — they see it, reply in it,
|
|
84
|
+
* Work's side in every invite conversation — they see it, reply in it, share files in it, and
|
|
85
|
+
* agree for the Work. A Stake Share Manager is one: it handles invites like an Invite Manager and
|
|
86
|
+
* also changes their offers.
|
|
85
87
|
*/
|
|
86
|
-
export declare const GUILD_INVITE_HANDLER_GUILD_STANDING_IDS: readonly ["StewardOwner", "WorkProjectManager", "InviteManager"];
|
|
88
|
+
export declare const GUILD_INVITE_HANDLER_GUILD_STANDING_IDS: readonly ["StewardOwner", "WorkProjectManager", "InviteManager", "StakeShareManager"];
|
|
87
89
|
/** The standings that change stake amounts — active Guildmates' stakes and pending invite offers. */
|
|
88
90
|
export declare const STAKE_SHARE_POWER_GUILD_STANDING_IDS: readonly ["StewardOwner", "WorkProjectManager", "StakeShareManager"];
|
|
89
|
-
/**
|
|
90
|
-
* The standings that open the Work's invites: the invite handlers, and the stake-power standings,
|
|
91
|
-
* which open an invite to change its offer. Opening an invite is not taking part in it — the
|
|
92
|
-
* conversation, its files, the Work's agreement, and cancelling stay the handlers'.
|
|
93
|
-
*/
|
|
94
|
-
export declare const GUILD_INVITE_VIEWER_GUILD_STANDING_IDS: readonly GuildStandingId[];
|
|
95
91
|
export declare const WORK_PROJECT_ACTIONS: {
|
|
96
92
|
readonly 'workProject.read': {
|
|
97
93
|
readonly label: "Read workProject";
|
|
@@ -121,17 +117,17 @@ export declare const WORK_PROJECT_ACTIONS: {
|
|
|
121
117
|
readonly 'guildInvite.send': {
|
|
122
118
|
readonly label: "Send invites";
|
|
123
119
|
readonly description: "Start a workProject invite conversation and reserve pending stakes.";
|
|
124
|
-
readonly grantedTo: readonly ["StewardOwner", "WorkProjectManager", "InviteManager"];
|
|
120
|
+
readonly grantedTo: readonly ["StewardOwner", "WorkProjectManager", "InviteManager", "StakeShareManager"];
|
|
125
121
|
};
|
|
126
122
|
readonly 'guildInvite.list': {
|
|
127
123
|
readonly label: "List invites";
|
|
128
|
-
readonly description:
|
|
129
|
-
readonly grantedTo: readonly
|
|
124
|
+
readonly description: "Open the Work's invites and see their state and offers.";
|
|
125
|
+
readonly grantedTo: readonly ["StewardOwner", "WorkProjectManager", "InviteManager", "StakeShareManager"];
|
|
130
126
|
};
|
|
131
127
|
readonly 'guildInvite.revokeAny': {
|
|
132
128
|
readonly label: "Revoke pending invites";
|
|
133
129
|
readonly description: "Cancel or revoke pending workProject invites.";
|
|
134
|
-
readonly grantedTo: readonly ["StewardOwner", "WorkProjectManager", "InviteManager"];
|
|
130
|
+
readonly grantedTo: readonly ["StewardOwner", "WorkProjectManager", "InviteManager", "StakeShareManager"];
|
|
135
131
|
};
|
|
136
132
|
readonly 'guildInvite.stakeShares.update': {
|
|
137
133
|
readonly label: "Update invite stakes";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-project-permissions-data.d.ts","sourceRoot":"","sources":["../../src/permissions/work-project-permissions-data.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDlB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,eAAe,CAAC;AAC3D,eAAO,MAAM,kBAAkB,EAAmC,eAAe,EAAE,CAAC;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,gBAAoD,CAAC;AACjG,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;CAaa,CAAC;AACrD,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,eAAe,CAAC,CAAC;AACtF,eAAO,MAAM,qBAAqB,EAAgD,kBAAkB,EAAE,CAAC;AAEvG;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,mEAIA,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"work-project-permissions-data.d.ts","sourceRoot":"","sources":["../../src/permissions/work-project-permissions-data.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDlB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,eAAe,CAAC;AAC3D,eAAO,MAAM,kBAAkB,EAAmC,eAAe,EAAE,CAAC;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,gBAAoD,CAAC;AACjG,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;CAaa,CAAC;AACrD,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,eAAe,CAAC,CAAC;AACtF,eAAO,MAAM,qBAAqB,EAAgD,kBAAkB,EAAE,CAAC;AAEvG;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,mEAIA,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,uFAKL,CAAC;AAEhD,qGAAqG;AACrG,eAAO,MAAM,oCAAoC,sEAIF,CAAC;AAEhD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkN/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AACpE,eAAO,MAAM,uBAAuB,EAAwC,mBAAmB,EAAE,CAAC"}
|
|
@@ -83,12 +83,15 @@ export const WORK_FILE_ADMIN_GUILD_STANDING_IDS = [
|
|
|
83
83
|
];
|
|
84
84
|
/**
|
|
85
85
|
* A Work's invite handlers: they send the Work's invites, list them, cancel them, and take the
|
|
86
|
-
* Work's side in every invite conversation — they see it, reply in it,
|
|
86
|
+
* Work's side in every invite conversation — they see it, reply in it, share files in it, and
|
|
87
|
+
* agree for the Work. A Stake Share Manager is one: it handles invites like an Invite Manager and
|
|
88
|
+
* also changes their offers.
|
|
87
89
|
*/
|
|
88
90
|
export const GUILD_INVITE_HANDLER_GUILD_STANDING_IDS = [
|
|
89
91
|
'StewardOwner',
|
|
90
92
|
'WorkProjectManager',
|
|
91
93
|
'InviteManager',
|
|
94
|
+
'StakeShareManager',
|
|
92
95
|
];
|
|
93
96
|
/** The standings that change stake amounts — active Guildmates' stakes and pending invite offers. */
|
|
94
97
|
export const STAKE_SHARE_POWER_GUILD_STANDING_IDS = [
|
|
@@ -96,14 +99,6 @@ export const STAKE_SHARE_POWER_GUILD_STANDING_IDS = [
|
|
|
96
99
|
'WorkProjectManager',
|
|
97
100
|
'StakeShareManager',
|
|
98
101
|
];
|
|
99
|
-
/**
|
|
100
|
-
* The standings that open the Work's invites: the invite handlers, and the stake-power standings,
|
|
101
|
-
* which open an invite to change its offer. Opening an invite is not taking part in it — the
|
|
102
|
-
* conversation, its files, the Work's agreement, and cancelling stay the handlers'.
|
|
103
|
-
*/
|
|
104
|
-
export const GUILD_INVITE_VIEWER_GUILD_STANDING_IDS = [
|
|
105
|
-
...new Set([...GUILD_INVITE_HANDLER_GUILD_STANDING_IDS, ...STAKE_SHARE_POWER_GUILD_STANDING_IDS]),
|
|
106
|
-
];
|
|
107
102
|
export const WORK_PROJECT_ACTIONS = {
|
|
108
103
|
'workProject.read': {
|
|
109
104
|
label: 'Read workProject',
|
|
@@ -141,9 +136,8 @@ export const WORK_PROJECT_ACTIONS = {
|
|
|
141
136
|
},
|
|
142
137
|
'guildInvite.list': {
|
|
143
138
|
label: 'List invites',
|
|
144
|
-
description: "Open the Work's invites and see their state and offers.
|
|
145
|
-
|
|
146
|
-
grantedTo: GUILD_INVITE_VIEWER_GUILD_STANDING_IDS,
|
|
139
|
+
description: "Open the Work's invites and see their state and offers.",
|
|
140
|
+
grantedTo: GUILD_INVITE_HANDLER_GUILD_STANDING_IDS,
|
|
147
141
|
},
|
|
148
142
|
'guildInvite.revokeAny': {
|
|
149
143
|
label: 'Revoke pending invites',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-project-permissions-data.js","sourceRoot":"","sources":["../../src/permissions/work-project-permissions-data.ts"],"names":[],"mappings":"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","sourcesContent":["export const GUILD_STANDINGS = {\n StewardOwner: {\n label: 'Steward',\n description: 'Work steward. Holds all workProject actions implicitly. Assigned automatically at workProject creation and non-assignable via guild standing management UIs.',\n },\n WorkProjectManager: {\n label: 'WorkProject Manager',\n description: 'Can perform every workProject action except granting Steward, WorkProjectManager, GuildStandingManager, or StakeShareManager.',\n },\n PublicWorkProjectEditor: {\n label: 'Public WorkProject Editor',\n description: 'Can edit public-facing workProject title, description, and copy.',\n },\n GuildStandingManager: {\n label: 'Guild Standing Manager',\n description: 'Can assign and remove ordinary workProject guild standings without escalating manager, stake-share, or trade-profession authority (tradeProfessions are folder/chat access keys, editable only by file-admin standings).',\n },\n StakeShareManager: {\n label: 'Stake Share Manager',\n description: 'Can adjust active Guildmate stakes and pending invite stake offers.',\n },\n InviteManager: {\n label: 'Invite Manager',\n description: 'Can send workProject invites, view invite state, and cancel or revoke pending invites.',\n },\n WorkAssetAdmin: {\n label: 'Work Asset Admin',\n description: 'Delegated file-system administration: create/rename file folders, assign folder trade-profession access, view every folder and file, and delete any file. Assignable only by the Steward.',\n },\n CommissionManager: {\n label: 'Commission Manager',\n description: 'Can open and close workProject commissions and manage proposals without starting invite conversations.',\n },\n AuditionManager: {\n label: 'Audition Manager',\n description: 'Can open and close workProject auditions without starting invite conversations.',\n },\n HallLibraryEditor: {\n label: 'Hall Editor',\n description: 'Can create and edit Tales, Tunes, Television content, Genres, and media assets.',\n },\n HallLibrarySubmitter: {\n label: 'Hall Submitter',\n description: 'Can submit workProject hall content for admin hall review.',\n },\n GuildChatChannelManager: {\n label: 'Guild Chat Channel Manager',\n description: 'Can create, update, archive, and delete workProject chat channels.',\n },\n} as const;\n\nexport type GuildStandingId = keyof typeof GUILD_STANDINGS;\nexport const GUILD_STANDING_IDS = Object.keys(GUILD_STANDINGS) as GuildStandingId[];\n\n/**\n * The work steward's standing id — the one standing that is never assignable and that\n * `GuildmateUser.guildStandings` carries (that array stores IDs, not display values;\n * this id's display value is 'Steward', so the two are not interchangeable).\n * Consumers branch on this rather than re-quoting the member.\n */\nexport const STEWARD_OWNER_GUILD_STANDING_ID = 'StewardOwner' as const satisfies GuildStandingId;\nexport const GUILD_STANDING_VALUE_BY_ID = {\n StewardOwner: 'Steward',\n WorkProjectManager: 'WorkProjectManager',\n PublicWorkProjectEditor: 'PublicWorkProjectEditor',\n GuildStandingManager: 'GuildStandingManager',\n StakeShareManager: 'StakeShareManager',\n InviteManager: 'InviteManager',\n WorkAssetAdmin: 'WorkAssetAdmin',\n CommissionManager: 'CommissionManager',\n AuditionManager: 'AuditionManager',\n HallLibraryEditor: 'HallLibraryEditor',\n HallLibrarySubmitter: 'HallLibrarySubmitter',\n GuildChatChannelManager: 'GuildChatChannelManager',\n} as const satisfies Record<GuildStandingId, string>;\nexport type GuildStandingValue = (typeof GUILD_STANDING_VALUE_BY_ID)[GuildStandingId];\nexport const GUILD_STANDING_VALUES = Object.values(GUILD_STANDING_VALUE_BY_ID) as GuildStandingValue[];\n\n/**\n * The standings that administer a Work's file system: create and manage folders, see every folder\n * and file, upload anywhere, delete any file, and request a file's share to the Realm. Every file\n * action's grant reads this list, and so does the file-admin check (`isWorkFileAdmin`).\n */\nexport const WORK_FILE_ADMIN_GUILD_STANDING_IDS = [\n 'StewardOwner',\n 'WorkProjectManager',\n 'WorkAssetAdmin',\n] as const satisfies readonly GuildStandingId[];\n\n/**\n * A Work's invite handlers: they send the Work's invites, list them, cancel them, and take the\n * Work's side in every invite conversation — they see it, reply in it, and accept for the Work.\n */\nexport const GUILD_INVITE_HANDLER_GUILD_STANDING_IDS = [\n 'StewardOwner',\n 'WorkProjectManager',\n 'InviteManager',\n] as const satisfies readonly GuildStandingId[];\n\n/** The standings that change stake amounts — active Guildmates' stakes and pending invite offers. */\nexport const STAKE_SHARE_POWER_GUILD_STANDING_IDS = [\n 'StewardOwner',\n 'WorkProjectManager',\n 'StakeShareManager',\n] as const satisfies readonly GuildStandingId[];\n\n/**\n * The standings that open the Work's invites: the invite handlers, and the stake-power standings,\n * which open an invite to change its offer. Opening an invite is not taking part in it — the\n * conversation, its files, the Work's agreement, and cancelling stay the handlers'.\n */\nexport const GUILD_INVITE_VIEWER_GUILD_STANDING_IDS: readonly GuildStandingId[] = [\n ...new Set<GuildStandingId>([...GUILD_INVITE_HANDLER_GUILD_STANDING_IDS, ...STAKE_SHARE_POWER_GUILD_STANDING_IDS]),\n];\n\nexport const WORK_PROJECT_ACTIONS = {\n 'workProject.read': {\n label: 'Read workProject',\n description: 'Baseline active-Guildmate read floor for internal workProject state.',\n grantedTo: GUILD_STANDING_IDS,\n },\n 'workProject.metadata.update': {\n label: 'Update workProject metadata',\n description: 'Edit working title, description, and public workProject copy.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'PublicWorkProjectEditor'],\n },\n 'guildmateUser.guildStanding.update': {\n label: 'Update Guildmate guild standings',\n description: 'Assign or remove workProject guild standings on active Guildmates.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildStandingManager'],\n },\n 'guildmateUser.tradeProfession.update': {\n label: 'Update Guildmate tradeProfessions',\n description:\n 'Assign or remove Guildmate tradeProfessions. tradeProfessions gate custom-folder ' +\n 'visibility and chat-channel access targeting — they are access keys, not just staffing ' +\n 'labels — so this is restricted to file-admin standings (Steward + WorkProject Manager). ' +\n 'A trade edit can never grant the editor access they lack, since every grantee already ' +\n 'holds file-admin override.',\n grantedTo: ['StewardOwner', 'WorkProjectManager'],\n },\n 'workProject.stakeShares.addActive': {\n label: 'Add active Guildmate stakes',\n description: 'Increase stakes for an existing active workProject Guildmate.',\n grantedTo: STAKE_SHARE_POWER_GUILD_STANDING_IDS,\n },\n 'guildInvite.send': {\n label: 'Send invites',\n description: 'Start a workProject invite conversation and reserve pending stakes.',\n grantedTo: GUILD_INVITE_HANDLER_GUILD_STANDING_IDS,\n },\n 'guildInvite.list': {\n label: 'List invites',\n description:\n \"Open the Work's invites and see their state and offers. A stake-power standing opens an invite \" +\n 'to change its offer; replying, agreeing for the Work, and cancelling stay with the invite handlers.',\n grantedTo: GUILD_INVITE_VIEWER_GUILD_STANDING_IDS,\n },\n 'guildInvite.revokeAny': {\n label: 'Revoke pending invites',\n description: 'Cancel or revoke pending workProject invites.',\n grantedTo: GUILD_INVITE_HANDLER_GUILD_STANDING_IDS,\n },\n 'guildInvite.stakeShares.update': {\n label: 'Update invite stakes',\n description: 'Increase stakes offered on a pending invite.',\n grantedTo: STAKE_SHARE_POWER_GUILD_STANDING_IDS,\n },\n 'fileFolder.create': {\n label: 'Create file folders',\n description: 'Create workProject file folders and set their trade-profession access lists.',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'fileFolder.manage': {\n label: 'Manage file folders',\n description: 'Rename folders, edit folder trade-profession access lists, and delete folders.',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'fileFolder.viewAll': {\n label: 'View all file folders',\n description: 'View every folder and file regardless of folder trade-profession access (admin override).',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'workFile.uploadAny': {\n label: 'Upload to any folder',\n description: 'Upload files to any folder regardless of folder trade-profession access (admin override).',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'workFile.deleteAny': {\n label: 'Delete any file',\n description: 'Delete any file regardless of folder trade-profession access (admin override).',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'workFile.promoteToRealm': {\n label: 'Request file sharing to realm',\n description: 'Submit a request to share a work file into its realm shared-file pool. ' +\n 'The realm steward approves the request and chooses the folder, or declines it; ' +\n 'nothing is shared to the realm until then. Canon promotion is a separate ' +\n 'realm-steward power, evaluated at the realm level, not here.',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'commission.open': {\n label: 'Open commissions',\n description: 'Create workProject commission postings.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'commission.close': {\n label: 'Close commissions',\n description: 'Close workProject commission postings.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'commission.commissionProposal.save': {\n label: 'Save commission proposals',\n description: 'Save or unsave workProject commission proposals.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'commission.commissionProposal.reject': {\n label: 'Reject commission proposals',\n description: 'Reject workProject commission proposals.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'audition.open': {\n label: 'Open auditions',\n description: 'Create workProject audition prompts.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'AuditionManager'],\n },\n 'audition.close': {\n label: 'Close auditions',\n description: 'Close workProject auditions.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'AuditionManager'],\n },\n 'hallLibrary.chapter.create': {\n label: 'Create Tale chapters',\n description: 'Create Tale chapter content.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tuneTrack.create': {\n label: 'Create Tune tracks',\n description: 'Create Tune track content.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.televisionEpisode.create': {\n label: 'Create Television episodes',\n description: 'Create Television episode content.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.chapter.details.update': {\n label: 'Update chapter details',\n description: 'Edit chapter details and body fields.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tuneTrack.details.update': {\n label: 'Update track details',\n description: 'Edit track details and media metadata.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.televisionEpisode.details.update': {\n label: 'Update episode details',\n description: 'Edit episode details and media metadata.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tale.workGenres.update': {\n label: 'Update Tale Genres',\n description: 'Edit Tale Genre assignments.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tune.workGenres.update': {\n label: 'Update Tune Genres',\n description: 'Edit Tune Genre assignments.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.television.workGenres.update': {\n label: 'Update Television Genres',\n description: 'Edit Television Genre assignments.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.asset.upload': {\n label: 'Upload hallLibrary assets',\n description: 'Upload or replace covers and sub-item media assets.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.review.submit': {\n label: 'Submit hall review',\n description: 'Submit workProject content for admin hall review. Also gates withdrawing a still-pending submission.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibrarySubmitter'],\n },\n 'hallLibrary.changeRequest.submit': {\n label: 'Request published changes',\n description: 'Propose text changes to a PUBLISHED hall item (reviewed by admins before anything changes).',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibrarySubmitter'],\n },\n 'guildChatChannel.create': {\n label: 'Create chat channels',\n description: 'Create workProject chat channels.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.update': {\n label: 'Update chat channels',\n description: 'Update workProject chat channel settings and access policy.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.archive': {\n label: 'Archive chat channels',\n description: 'Archive workProject chat channels.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.unarchive': {\n label: 'Restore archived chat channels',\n description: 'Restore workProject chat channels out of the archive.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.delete': {\n label: 'Delete chat channels',\n description: 'Delete (tombstone) workProject chat channels; storage is retained.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'adminDispatch.start': {\n label: 'Start admin correspondence',\n description:\n 'Open a platform correspondence thread with the admin team on behalf of the workProject. ' +\n 'Replying in an open workProject thread is any active Guildmate (not gated here).',\n grantedTo: ['StewardOwner', 'WorkProjectManager'],\n },\n} as const satisfies Record<string, {\n label: string;\n description: string;\n grantedTo: readonly GuildStandingId[];\n}>;\n\nexport type WorkProjectActionId = keyof typeof WORK_PROJECT_ACTIONS;\nexport const WORK_PROJECT_ACTION_IDS = Object.keys(WORK_PROJECT_ACTIONS) as WorkProjectActionId[];\n\n\n\n"]}
|
|
1
|
+
{"version":3,"file":"work-project-permissions-data.js","sourceRoot":"","sources":["../../src/permissions/work-project-permissions-data.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY,EAAE;QACZ,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,8JAA8J;KAC5K;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,+HAA+H;KAC7I;IACD,uBAAuB,EAAE;QACvB,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,kEAAkE;KAChF;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,0NAA0N;KACxO;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,qEAAqE;KACnF;IACD,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,wFAAwF;KACtG;IACD,cAAc,EAAE;QACd,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,2LAA2L;KACzM;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,wGAAwG;KACtH;IACD,eAAe,EAAE;QACf,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,iFAAiF;KAC/F;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,iFAAiF;KAC/F;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,4DAA4D;KAC1E;IACD,uBAAuB,EAAE;QACvB,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,oEAAoE;KAClF;CACO,CAAC;AAGX,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAsB,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,cAAiD,CAAC;AACjG,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,YAAY,EAAE,SAAS;IACvB,kBAAkB,EAAE,oBAAoB;IACxC,uBAAuB,EAAE,yBAAyB;IAClD,oBAAoB,EAAE,sBAAsB;IAC5C,iBAAiB,EAAE,mBAAmB;IACtC,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,uBAAuB,EAAE,yBAAyB;CACA,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAyB,CAAC;AAEvG;;;;GAIG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,cAAc;IACd,oBAAoB;IACpB,gBAAgB;CAC6B,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,cAAc;IACd,oBAAoB;IACpB,eAAe;IACf,mBAAmB;CAC0B,CAAC;AAEhD,qGAAqG;AACrG,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAClD,cAAc;IACd,oBAAoB;IACpB,mBAAmB;CAC0B,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,kBAAkB,EAAE;QAClB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,sEAAsE;QACnF,SAAS,EAAE,kBAAkB;KAC9B;IACD,6BAA6B,EAAE;QAC7B,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,+DAA+D;QAC5E,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,CAAC;KAC7E;IACD,oCAAoC,EAAE;QACpC,KAAK,EAAE,kCAAkC;QACzC,WAAW,EAAE,oEAAoE;QACjF,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,sBAAsB,CAAC;KAC1E;IACD,sCAAsC,EAAE;QACtC,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,mFAAmF;YACnF,yFAAyF;YACzF,0FAA0F;YAC1F,wFAAwF;YACxF,4BAA4B;QAC9B,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC;KAClD;IACD,mCAAmC,EAAE;QACnC,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,+DAA+D;QAC5E,SAAS,EAAE,oCAAoC;KAChD;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,qEAAqE;QAClF,SAAS,EAAE,uCAAuC;KACnD;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,yDAAyD;QACtE,SAAS,EAAE,uCAAuC;KACnD;IACD,uBAAuB,EAAE;QACvB,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,+CAA+C;QAC5D,SAAS,EAAE,uCAAuC;KACnD;IACD,gCAAgC,EAAE;QAChC,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,8CAA8C;QAC3D,SAAS,EAAE,oCAAoC;KAChD;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,8EAA8E;QAC3F,SAAS,EAAE,kCAAkC;KAC9C;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,gFAAgF;QAC7F,SAAS,EAAE,kCAAkC;KAC9C;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,2FAA2F;QACxG,SAAS,EAAE,kCAAkC;KAC9C;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,2FAA2F;QACxG,SAAS,EAAE,kCAAkC;KAC9C;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,gFAAgF;QAC7F,SAAS,EAAE,kCAAkC;KAC9C;IACD,yBAAyB,EAAE;QACzB,KAAK,EAAE,+BAA+B;QACtC,WAAW,EAAE,yEAAyE;YACpF,iFAAiF;YACjF,2EAA2E;YAC3E,8DAA8D;QAChE,SAAS,EAAE,kCAAkC;KAC9C;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,yCAAyC;QACtD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,wCAAwC;QACrD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,oCAAoC,EAAE;QACpC,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,kDAAkD;QAC/D,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,sCAAsC,EAAE;QACtC,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,0CAA0C;QACvD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,eAAe,EAAE;QACf,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,CAAC;KACrE;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,CAAC;KACrE;IACD,4BAA4B,EAAE;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,8BAA8B,EAAE;QAC9B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,sCAAsC,EAAE;QACtC,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,oCAAoC;QACjD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,oCAAoC,EAAE;QACpC,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,uCAAuC;QACpD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,sCAAsC,EAAE;QACtC,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,wCAAwC;QACrD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,8CAA8C,EAAE;QAC9C,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,0CAA0C;QACvD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,oCAAoC,EAAE;QACpC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,oCAAoC,EAAE;QACpC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,0CAA0C,EAAE;QAC1C,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,oCAAoC;QACjD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,0BAA0B,EAAE;QAC1B,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,qDAAqD;QAClE,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;KACvE;IACD,2BAA2B,EAAE;QAC3B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,sGAAsG;QACnH,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,sBAAsB,CAAC;KAC1E;IACD,kCAAkC,EAAE;QAClC,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,6FAA6F;QAC1G,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,sBAAsB,CAAC;KAC1E;IACD,yBAAyB,EAAE;QACzB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,mCAAmC;QAChD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,CAAC;KAC7E;IACD,yBAAyB,EAAE;QACzB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,6DAA6D;QAC1E,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,CAAC;KAC7E;IACD,0BAA0B,EAAE;QAC1B,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,oCAAoC;QACjD,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,CAAC;KAC7E;IACD,4BAA4B,EAAE;QAC5B,KAAK,EAAE,gCAAgC;QACvC,WAAW,EAAE,uDAAuD;QACpE,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,CAAC;KAC7E;IACD,yBAAyB,EAAE;QACzB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,oEAAoE;QACjF,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,CAAC;KAC7E;IACD,qBAAqB,EAAE;QACrB,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,0FAA0F;YAC1F,kFAAkF;QACpF,SAAS,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC;KAClD;CAKD,CAAC;AAGH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAA0B,CAAC","sourcesContent":["export const GUILD_STANDINGS = {\n StewardOwner: {\n label: 'Steward',\n description: 'Work steward. Holds all workProject actions implicitly. Assigned automatically at workProject creation and non-assignable via guild standing management UIs.',\n },\n WorkProjectManager: {\n label: 'WorkProject Manager',\n description: 'Can perform every workProject action except granting Steward, WorkProjectManager, GuildStandingManager, or StakeShareManager.',\n },\n PublicWorkProjectEditor: {\n label: 'Public WorkProject Editor',\n description: 'Can edit public-facing workProject title, description, and copy.',\n },\n GuildStandingManager: {\n label: 'Guild Standing Manager',\n description: 'Can assign and remove ordinary workProject guild standings without escalating manager, stake-share, or trade-profession authority (tradeProfessions are folder/chat access keys, editable only by file-admin standings).',\n },\n StakeShareManager: {\n label: 'Stake Share Manager',\n description: 'Can adjust active Guildmate stakes and pending invite stake offers.',\n },\n InviteManager: {\n label: 'Invite Manager',\n description: 'Can send workProject invites, view invite state, and cancel or revoke pending invites.',\n },\n WorkAssetAdmin: {\n label: 'Work Asset Admin',\n description: 'Delegated file-system administration: create/rename file folders, assign folder trade-profession access, view every folder and file, and delete any file. Assignable only by the Steward.',\n },\n CommissionManager: {\n label: 'Commission Manager',\n description: 'Can open and close workProject commissions and manage proposals without starting invite conversations.',\n },\n AuditionManager: {\n label: 'Audition Manager',\n description: 'Can open and close workProject auditions without starting invite conversations.',\n },\n HallLibraryEditor: {\n label: 'Hall Editor',\n description: 'Can create and edit Tales, Tunes, Television content, Genres, and media assets.',\n },\n HallLibrarySubmitter: {\n label: 'Hall Submitter',\n description: 'Can submit workProject hall content for admin hall review.',\n },\n GuildChatChannelManager: {\n label: 'Guild Chat Channel Manager',\n description: 'Can create, update, archive, and delete workProject chat channels.',\n },\n} as const;\n\nexport type GuildStandingId = keyof typeof GUILD_STANDINGS;\nexport const GUILD_STANDING_IDS = Object.keys(GUILD_STANDINGS) as GuildStandingId[];\n\n/**\n * The work steward's standing id — the one standing that is never assignable and that\n * `GuildmateUser.guildStandings` carries (that array stores IDs, not display values;\n * this id's display value is 'Steward', so the two are not interchangeable).\n * Consumers branch on this rather than re-quoting the member.\n */\nexport const STEWARD_OWNER_GUILD_STANDING_ID = 'StewardOwner' as const satisfies GuildStandingId;\nexport const GUILD_STANDING_VALUE_BY_ID = {\n StewardOwner: 'Steward',\n WorkProjectManager: 'WorkProjectManager',\n PublicWorkProjectEditor: 'PublicWorkProjectEditor',\n GuildStandingManager: 'GuildStandingManager',\n StakeShareManager: 'StakeShareManager',\n InviteManager: 'InviteManager',\n WorkAssetAdmin: 'WorkAssetAdmin',\n CommissionManager: 'CommissionManager',\n AuditionManager: 'AuditionManager',\n HallLibraryEditor: 'HallLibraryEditor',\n HallLibrarySubmitter: 'HallLibrarySubmitter',\n GuildChatChannelManager: 'GuildChatChannelManager',\n} as const satisfies Record<GuildStandingId, string>;\nexport type GuildStandingValue = (typeof GUILD_STANDING_VALUE_BY_ID)[GuildStandingId];\nexport const GUILD_STANDING_VALUES = Object.values(GUILD_STANDING_VALUE_BY_ID) as GuildStandingValue[];\n\n/**\n * The standings that administer a Work's file system: create and manage folders, see every folder\n * and file, upload anywhere, delete any file, and request a file's share to the Realm. Every file\n * action's grant reads this list, and so does the file-admin check (`isWorkFileAdmin`).\n */\nexport const WORK_FILE_ADMIN_GUILD_STANDING_IDS = [\n 'StewardOwner',\n 'WorkProjectManager',\n 'WorkAssetAdmin',\n] as const satisfies readonly GuildStandingId[];\n\n/**\n * A Work's invite handlers: they send the Work's invites, list them, cancel them, and take the\n * Work's side in every invite conversation — they see it, reply in it, share files in it, and\n * agree for the Work. A Stake Share Manager is one: it handles invites like an Invite Manager and\n * also changes their offers.\n */\nexport const GUILD_INVITE_HANDLER_GUILD_STANDING_IDS = [\n 'StewardOwner',\n 'WorkProjectManager',\n 'InviteManager',\n 'StakeShareManager',\n] as const satisfies readonly GuildStandingId[];\n\n/** The standings that change stake amounts — active Guildmates' stakes and pending invite offers. */\nexport const STAKE_SHARE_POWER_GUILD_STANDING_IDS = [\n 'StewardOwner',\n 'WorkProjectManager',\n 'StakeShareManager',\n] as const satisfies readonly GuildStandingId[];\n\nexport const WORK_PROJECT_ACTIONS = {\n 'workProject.read': {\n label: 'Read workProject',\n description: 'Baseline active-Guildmate read floor for internal workProject state.',\n grantedTo: GUILD_STANDING_IDS,\n },\n 'workProject.metadata.update': {\n label: 'Update workProject metadata',\n description: 'Edit working title, description, and public workProject copy.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'PublicWorkProjectEditor'],\n },\n 'guildmateUser.guildStanding.update': {\n label: 'Update Guildmate guild standings',\n description: 'Assign or remove workProject guild standings on active Guildmates.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildStandingManager'],\n },\n 'guildmateUser.tradeProfession.update': {\n label: 'Update Guildmate tradeProfessions',\n description:\n 'Assign or remove Guildmate tradeProfessions. tradeProfessions gate custom-folder ' +\n 'visibility and chat-channel access targeting — they are access keys, not just staffing ' +\n 'labels — so this is restricted to file-admin standings (Steward + WorkProject Manager). ' +\n 'A trade edit can never grant the editor access they lack, since every grantee already ' +\n 'holds file-admin override.',\n grantedTo: ['StewardOwner', 'WorkProjectManager'],\n },\n 'workProject.stakeShares.addActive': {\n label: 'Add active Guildmate stakes',\n description: 'Increase stakes for an existing active workProject Guildmate.',\n grantedTo: STAKE_SHARE_POWER_GUILD_STANDING_IDS,\n },\n 'guildInvite.send': {\n label: 'Send invites',\n description: 'Start a workProject invite conversation and reserve pending stakes.',\n grantedTo: GUILD_INVITE_HANDLER_GUILD_STANDING_IDS,\n },\n 'guildInvite.list': {\n label: 'List invites',\n description: \"Open the Work's invites and see their state and offers.\",\n grantedTo: GUILD_INVITE_HANDLER_GUILD_STANDING_IDS,\n },\n 'guildInvite.revokeAny': {\n label: 'Revoke pending invites',\n description: 'Cancel or revoke pending workProject invites.',\n grantedTo: GUILD_INVITE_HANDLER_GUILD_STANDING_IDS,\n },\n 'guildInvite.stakeShares.update': {\n label: 'Update invite stakes',\n description: 'Increase stakes offered on a pending invite.',\n grantedTo: STAKE_SHARE_POWER_GUILD_STANDING_IDS,\n },\n 'fileFolder.create': {\n label: 'Create file folders',\n description: 'Create workProject file folders and set their trade-profession access lists.',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'fileFolder.manage': {\n label: 'Manage file folders',\n description: 'Rename folders, edit folder trade-profession access lists, and delete folders.',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'fileFolder.viewAll': {\n label: 'View all file folders',\n description: 'View every folder and file regardless of folder trade-profession access (admin override).',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'workFile.uploadAny': {\n label: 'Upload to any folder',\n description: 'Upload files to any folder regardless of folder trade-profession access (admin override).',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'workFile.deleteAny': {\n label: 'Delete any file',\n description: 'Delete any file regardless of folder trade-profession access (admin override).',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'workFile.promoteToRealm': {\n label: 'Request file sharing to realm',\n description: 'Submit a request to share a work file into its realm shared-file pool. ' +\n 'The realm steward approves the request and chooses the folder, or declines it; ' +\n 'nothing is shared to the realm until then. Canon promotion is a separate ' +\n 'realm-steward power, evaluated at the realm level, not here.',\n grantedTo: WORK_FILE_ADMIN_GUILD_STANDING_IDS,\n },\n 'commission.open': {\n label: 'Open commissions',\n description: 'Create workProject commission postings.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'commission.close': {\n label: 'Close commissions',\n description: 'Close workProject commission postings.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'commission.commissionProposal.save': {\n label: 'Save commission proposals',\n description: 'Save or unsave workProject commission proposals.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'commission.commissionProposal.reject': {\n label: 'Reject commission proposals',\n description: 'Reject workProject commission proposals.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'CommissionManager'],\n },\n 'audition.open': {\n label: 'Open auditions',\n description: 'Create workProject audition prompts.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'AuditionManager'],\n },\n 'audition.close': {\n label: 'Close auditions',\n description: 'Close workProject auditions.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'AuditionManager'],\n },\n 'hallLibrary.chapter.create': {\n label: 'Create Tale chapters',\n description: 'Create Tale chapter content.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tuneTrack.create': {\n label: 'Create Tune tracks',\n description: 'Create Tune track content.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.televisionEpisode.create': {\n label: 'Create Television episodes',\n description: 'Create Television episode content.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.chapter.details.update': {\n label: 'Update chapter details',\n description: 'Edit chapter details and body fields.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tuneTrack.details.update': {\n label: 'Update track details',\n description: 'Edit track details and media metadata.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.televisionEpisode.details.update': {\n label: 'Update episode details',\n description: 'Edit episode details and media metadata.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tale.workGenres.update': {\n label: 'Update Tale Genres',\n description: 'Edit Tale Genre assignments.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.tune.workGenres.update': {\n label: 'Update Tune Genres',\n description: 'Edit Tune Genre assignments.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.television.workGenres.update': {\n label: 'Update Television Genres',\n description: 'Edit Television Genre assignments.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.asset.upload': {\n label: 'Upload hallLibrary assets',\n description: 'Upload or replace covers and sub-item media assets.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibraryEditor'],\n },\n 'hallLibrary.review.submit': {\n label: 'Submit hall review',\n description: 'Submit workProject content for admin hall review. Also gates withdrawing a still-pending submission.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibrarySubmitter'],\n },\n 'hallLibrary.changeRequest.submit': {\n label: 'Request published changes',\n description: 'Propose text changes to a PUBLISHED hall item (reviewed by admins before anything changes).',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'HallLibrarySubmitter'],\n },\n 'guildChatChannel.create': {\n label: 'Create chat channels',\n description: 'Create workProject chat channels.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.update': {\n label: 'Update chat channels',\n description: 'Update workProject chat channel settings and access policy.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.archive': {\n label: 'Archive chat channels',\n description: 'Archive workProject chat channels.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.unarchive': {\n label: 'Restore archived chat channels',\n description: 'Restore workProject chat channels out of the archive.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'guildChatChannel.delete': {\n label: 'Delete chat channels',\n description: 'Delete (tombstone) workProject chat channels; storage is retained.',\n grantedTo: ['StewardOwner', 'WorkProjectManager', 'GuildChatChannelManager'],\n },\n 'adminDispatch.start': {\n label: 'Start admin correspondence',\n description:\n 'Open a platform correspondence thread with the admin team on behalf of the workProject. ' +\n 'Replying in an open workProject thread is any active Guildmate (not gated here).',\n grantedTo: ['StewardOwner', 'WorkProjectManager'],\n },\n} as const satisfies Record<string, {\n label: string;\n description: string;\n grantedTo: readonly GuildStandingId[];\n}>;\n\nexport type WorkProjectActionId = keyof typeof WORK_PROJECT_ACTIONS;\nexport const WORK_PROJECT_ACTION_IDS = Object.keys(WORK_PROJECT_ACTIONS) as WorkProjectActionId[];\n\n\n\n"]}
|
|
@@ -32,28 +32,6 @@ export declare function guildInvitePartyOf(args: {
|
|
|
32
32
|
recipientUid: string;
|
|
33
33
|
member: GuildChatAccessMember | null;
|
|
34
34
|
}): GuildInviteParty | null;
|
|
35
|
-
/** How a person opens an invite: as one of its two sides, or as a stake editor of the inviting Work. */
|
|
36
|
-
export type GuildInviteViewerRole = GuildInviteParty | 'stakeEditor';
|
|
37
|
-
/**
|
|
38
|
-
* How a person may open an invite, or null when they may not. A party opens it on its own side
|
|
39
|
-
* (`guildInvitePartyOf`). Any other active person Guildmate of the inviting Work whose standings
|
|
40
|
-
* grant both `guildInvite.list` and `guildInvite.stakeShares.update` — a stake-power standing that
|
|
41
|
-
* handles no invites — opens it as a `stakeEditor`: they see the invite and its offer to change
|
|
42
|
-
* the offer, and take no part in the conversation, its files, the Work's agreement, or a cancel.
|
|
43
|
-
*/
|
|
44
|
-
export declare function guildInviteViewerRoleOf(args: {
|
|
45
|
-
uid: string;
|
|
46
|
-
senderUid: string;
|
|
47
|
-
recipientUid: string;
|
|
48
|
-
member: GuildChatAccessMember | null;
|
|
49
|
-
}): GuildInviteViewerRole | null;
|
|
50
|
-
/** Whether a person may open an invite (read the invite itself): a party, or a stake editor. */
|
|
51
|
-
export declare function canViewGuildInvite(args: {
|
|
52
|
-
uid: string;
|
|
53
|
-
senderUid: string;
|
|
54
|
-
recipientUid: string;
|
|
55
|
-
member: GuildChatAccessMember | null;
|
|
56
|
-
}): boolean;
|
|
57
35
|
/** Whether a person may use an invite's conversation now: a party to it, while it is open. */
|
|
58
36
|
export declare function canAccessGuildInviteConversation(args: {
|
|
59
37
|
uid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guild-chat-access.d.ts","sourceRoot":"","sources":["../../src/utils/guild-chat-access.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAOpE,qDAAqD;AACrD,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;AAMzH;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,qBAAqB,GAAG,IAAI,EACpC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,GAAG,WAAW,CAAC,GAAG,IAAI,GAC7E,OAAO,CAMT;AAED,oGAAoG;AACpG,eAAO,MAAM,uCAAuC,kCAGS,CAAC;AAE9D,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,MAAM,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACtC,GAAG,gBAAgB,GAAG,IAAI,CAU1B;AAED,
|
|
1
|
+
{"version":3,"file":"guild-chat-access.d.ts","sourceRoot":"","sources":["../../src/utils/guild-chat-access.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAOpE,qDAAqD;AACrD,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;AAMzH;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,qBAAqB,GAAG,IAAI,EACpC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,GAAG,WAAW,CAAC,GAAG,IAAI,GAC7E,OAAO,CAMT;AAED,oGAAoG;AACpG,eAAO,MAAM,uCAAuC,kCAGS,CAAC;AAE9D,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,MAAM,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACtC,GAAG,gBAAgB,GAAG,IAAI,CAU1B;AAED,8FAA8F;AAC9F,wBAAgB,gCAAgC,CAAC,IAAI,EAAE;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAEV;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,OAAO,CAElF"}
|
|
@@ -52,28 +52,6 @@ export function guildInvitePartyOf(args) {
|
|
|
52
52
|
const handles = member.guildStandings.some((standing) => GUILD_INVITE_HANDLER_GUILD_STANDING_IDS.includes(standing));
|
|
53
53
|
return handles ? 'work' : null;
|
|
54
54
|
}
|
|
55
|
-
/**
|
|
56
|
-
* How a person may open an invite, or null when they may not. A party opens it on its own side
|
|
57
|
-
* (`guildInvitePartyOf`). Any other active person Guildmate of the inviting Work whose standings
|
|
58
|
-
* grant both `guildInvite.list` and `guildInvite.stakeShares.update` — a stake-power standing that
|
|
59
|
-
* handles no invites — opens it as a `stakeEditor`: they see the invite and its offer to change
|
|
60
|
-
* the offer, and take no part in the conversation, its files, the Work's agreement, or a cancel.
|
|
61
|
-
*/
|
|
62
|
-
export function guildInviteViewerRoleOf(args) {
|
|
63
|
-
const party = guildInvitePartyOf(args);
|
|
64
|
-
if (party !== null)
|
|
65
|
-
return party;
|
|
66
|
-
const { uid, member } = args;
|
|
67
|
-
if (!uid || !isActivePersonGuildmate(member))
|
|
68
|
-
return null;
|
|
69
|
-
const opensToChangeOffer = guildStandingsGrantAction(member.guildStandings, 'guildInvite.list') &&
|
|
70
|
-
guildStandingsGrantAction(member.guildStandings, 'guildInvite.stakeShares.update');
|
|
71
|
-
return opensToChangeOffer ? 'stakeEditor' : null;
|
|
72
|
-
}
|
|
73
|
-
/** Whether a person may open an invite (read the invite itself): a party, or a stake editor. */
|
|
74
|
-
export function canViewGuildInvite(args) {
|
|
75
|
-
return guildInviteViewerRoleOf(args) !== null;
|
|
76
|
-
}
|
|
77
55
|
/** Whether a person may use an invite's conversation now: a party to it, while it is open. */
|
|
78
56
|
export function canAccessGuildInviteConversation(args) {
|
|
79
57
|
return guildInvitePartyOf(args) !== null && isGuildInviteConversationLive(args.status);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guild-chat-access.js","sourceRoot":"","sources":["../../src/utils/guild-chat-access.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EACL,uCAAuC,EACvC,yBAAyB,GAC1B,MAAM,4CAA4C,CAAC;AAKpD,SAAS,uBAAuB,CAAC,MAAoC;IACnE,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,yBAAyB,CAAC;AAC1G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAoC,EACpC,OAA8E;IAE9E,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,OAAO,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACrF,OAAO,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,SAAS;IACT,UAAU;CACiD,CAAC;AAE9D,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,OAAQ,uCAA6D,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACzF,CAAC;AAKD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAKlC;IACC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,GAAG,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC;IAC7C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACrD,uCAA6D,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAClF,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"guild-chat-access.js","sourceRoot":"","sources":["../../src/utils/guild-chat-access.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EACL,uCAAuC,EACvC,yBAAyB,GAC1B,MAAM,4CAA4C,CAAC;AAKpD,SAAS,uBAAuB,CAAC,MAAoC;IACnE,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,yBAAyB,CAAC;AAC1G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAoC,EACpC,OAA8E;IAE9E,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,OAAO,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACrF,OAAO,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,SAAS;IACT,UAAU;CACiD,CAAC;AAE9D,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,OAAQ,uCAA6D,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACzF,CAAC;AAKD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAKlC;IACC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,GAAG,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC;IAC7C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACrD,uCAA6D,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAClF,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,gCAAgC,CAAC,IAMhD;IACC,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoC;IACvE,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,yBAAyB,CAAC,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;AACtH,CAAC","sourcesContent":["/**\n * Who may take part in TTT's realtime conversations — ONE rule per conversation kind. The grant\n * minting, the access projection the chat rooms enforce, the conversation-file checks, and every\n * screen that lists or offers a conversation decide from these, never from a restatement.\n */\n\nimport type { GuildmateUser } from '../doc-schemas/work-project.js';\nimport { FOUNDING_WORK_HOLDER_TYPE } from '../doc-schemas/work-project.js';\nimport type { GuildChatChannel } from '../doc-schemas/messaging.js';\nimport type { GuildInviteConversationStatus } from '../schemas/atoms.js';\nimport {\n GUILD_INVITE_HANDLER_GUILD_STANDING_IDS,\n guildStandingsGrantAction,\n} from '../permissions/work-project-permissions.js';\n\n/** The Guildmate facts a conversation rule reads. */\nexport type GuildChatAccessMember = Pick<GuildmateUser, 'status' | 'holderType' | 'guildStandings' | 'tradeProfessions'>;\n\nfunction isActivePersonGuildmate(member: GuildChatAccessMember | null): member is GuildChatAccessMember {\n return member !== null && member.status === 'active' && member.holderType !== FOUNDING_WORK_HOLDER_TYPE;\n}\n\n/**\n * Whether a Guildmate may use a Work's guild chat channel: an active person Guildmate (never the\n * founding-Work stake holder) of a channel that exists and is not deleted, holding one of the\n * channel's required standings OR trade professions — an empty requirement admits every active\n * Guildmate.\n */\nexport function canAccessGuildChatChannel(\n member: GuildChatAccessMember | null,\n channel: Pick<GuildChatChannel, 'requiredGuildStandings' | 'isDeleted'> | null,\n): boolean {\n if (!channel || channel.isDeleted === true) return false;\n if (!isActivePersonGuildmate(member)) return false;\n if (channel.requiredGuildStandings.length === 0) return true;\n const held = new Set<string>([...member.guildStandings, ...member.tradeProfessions]);\n return channel.requiredGuildStandings.some((required) => held.has(required));\n}\n\n/** The invite statuses whose conversation is open: negotiating, or accepted and being confirmed. */\nexport const GUILD_INVITE_CONVERSATION_LIVE_STATUSES = [\n 'pending',\n 'accepted',\n] as const satisfies readonly GuildInviteConversationStatus[];\n\nexport function isGuildInviteConversationLive(status: string): boolean {\n return (GUILD_INVITE_CONVERSATION_LIVE_STATUSES as readonly string[]).includes(status);\n}\n\n/** The two sides of an invite: the person invited, and the inviting Work. */\nexport type GuildInviteParty = 'recipient' | 'work';\n\n/**\n * Which side of an invite a person takes part on, or null when they take no part. The recipient\n * is the `recipient` side. The Work's side is the sender, and every active person Guildmate of the\n * inviting Work who holds an invite-handling standing (`GUILD_INVITE_HANDLER_GUILD_STANDING_IDS`):\n * they see the conversation, reply in it, and accept for the Work. `member` is the person's\n * Guildmate record in the inviting Work, or null when they have none.\n */\nexport function guildInvitePartyOf(args: {\n uid: string;\n senderUid: string;\n recipientUid: string;\n member: GuildChatAccessMember | null;\n}): GuildInviteParty | null {\n const { uid, senderUid, recipientUid, member } = args;\n if (!uid) return null;\n if (uid === recipientUid) return 'recipient';\n if (uid === senderUid) return 'work';\n if (!isActivePersonGuildmate(member)) return null;\n const handles = member.guildStandings.some((standing) =>\n (GUILD_INVITE_HANDLER_GUILD_STANDING_IDS as readonly string[]).includes(standing),\n );\n return handles ? 'work' : null;\n}\n\n/** Whether a person may use an invite's conversation now: a party to it, while it is open. */\nexport function canAccessGuildInviteConversation(args: {\n uid: string;\n senderUid: string;\n recipientUid: string;\n member: GuildChatAccessMember | null;\n status: string;\n}): boolean {\n return guildInvitePartyOf(args) !== null && isGuildInviteConversationLive(args.status);\n}\n\n/**\n * Whether a Guildmate may cancel the Work's invites: an active person Guildmate whose standings\n * grant `guildInvite.revokeAny`. Sending an invite gives no power to cancel it — a sender cancels\n * only while holding one of those standings.\n */\nexport function canCancelGuildInvite(member: GuildChatAccessMember | null): boolean {\n return isActivePersonGuildmate(member) && guildStandingsGrantAction(member.guildStandings, 'guildInvite.revokeAny');\n}\n"]}
|