51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import { getFeatures, HOLLO, ICESHRIMP_NET, PLEROMA, TOKI, type Instance } from 'pl-api';
|
|
|
|
import type { RootState } from 'pl-fe/store';
|
|
|
|
/**
|
|
* Get the OAuth scopes to use for login & signup.
|
|
* Mastodon will refuse scopes it doesn't know, so care is needed.
|
|
*/
|
|
const getInstanceScopes = (instance: Instance, admin: boolean = true) => {
|
|
const v = getFeatures(instance).version;
|
|
|
|
let scopes;
|
|
|
|
switch (v.software) {
|
|
case ICESHRIMP_NET:
|
|
scopes = 'read write follow push iceshrimp';
|
|
break;
|
|
case TOKI:
|
|
scopes = 'read write follow push write:bites';
|
|
break;
|
|
case PLEROMA:
|
|
scopes = 'read write follow push';
|
|
break;
|
|
default:
|
|
scopes = 'read write follow push';
|
|
}
|
|
|
|
if (admin) {
|
|
switch (v.software) {
|
|
case HOLLO:
|
|
case ICESHRIMP_NET:
|
|
break;
|
|
case PLEROMA:
|
|
scopes += ' admin';
|
|
break;
|
|
default:
|
|
scopes += ' admin:read admin:write';
|
|
}
|
|
}
|
|
|
|
return scopes;
|
|
};
|
|
|
|
/** Convenience function to get scopes from instance in store. */
|
|
const getScopes = (state: RootState) => getInstanceScopes(state.instance);
|
|
|
|
export {
|
|
getInstanceScopes,
|
|
getScopes,
|
|
};
|