first commit
This commit is contained in:
commit
ff482ebe23
251 files changed
+19126
No files matched your search
@@ -0,0 +1,24 @@
|
||||
const SECTIONS=Object.freeze(['appearance','library','ai','passwords','documentScan','agents']);
|
||||
const DEFAULT_APPEARANCE=Object.freeze({mode:'system',accent:'blue',tabMode:'separate'});
|
||||
// This object is computed in the privileged process, never from renderer storage.
|
||||
function settingsState({policy,ready,preferences={},now=Date.now()}){
|
||||
const available=!!ready&&!!policy&&Date.parse(policy.expiresAt)>now;
|
||||
const rules=policy?.browser?.settings||{};
|
||||
const visible=available&&rules.visible!==false;
|
||||
const hiddenSections=Array.isArray(rules.hiddenSections)?rules.hiddenSections:[];
|
||||
const lockedSections=Array.isArray(rules.lockedSections)?rules.lockedSections:[];
|
||||
const forced=!visible||hiddenSections.includes('appearance')||lockedSections.includes('appearance');
|
||||
return {available,visible,hiddenSections:[...hiddenSections],lockedSections:[...lockedSections],appearance:{...DEFAULT_APPEARANCE,...rules.appearance,...(forced?{}:preferences)}};
|
||||
}
|
||||
function sectionVisible(state,section){return SECTIONS.includes(section)&&state.available&&state.visible&&!state.hiddenSections.includes(section);}
|
||||
function sectionAllowed(state,section){return sectionVisible(state,section)&&!state.lockedSections.includes(section);}
|
||||
function featureAllowed(state,section){return SECTIONS.includes(section)&&state.available&&!state.hiddenSections.includes(section)&&!state.lockedSections.includes(section);}
|
||||
function requireFeature(state,section){if(!featureAllowed(state,section))throw Error('This feature is controlled by your administrator');}
|
||||
function requireSection(state,section){if(!sectionAllowed(state,section))throw Error('This setting is controlled by your administrator');}
|
||||
function validateAppearance(input){
|
||||
if(!input||typeof input!=='object'||Array.isArray(input)||Object.keys(input).some(key=>!Object.hasOwn(DEFAULT_APPEARANCE,key))||!Object.keys(input).length)throw Error('Invalid appearance settings');
|
||||
const values={mode:['system','light','dark'],accent:['blue','teal','violet'],tabMode:['separate','compact']};
|
||||
for(const [key,value] of Object.entries(input))if(!values[key].includes(value))throw Error('Invalid appearance settings');
|
||||
return {...input};
|
||||
}
|
||||
module.exports={settingsState,sectionVisible,sectionAllowed,featureAllowed,requireFeature,requireSection,validateAppearance};
|
||||
Reference in new issue
Block a user