- Clone of github.com/fluxerapp/fluxer (official upstream) - SELF_HOSTING.md: full VM rebuild procedure, architecture overview, service reference, step-by-step setup, troubleshooting, seattle reference - dev/.env.example: all env vars with secrets redacted and generation instructions - dev/livekit.yaml: LiveKit config template with placeholder keys - fluxer-seattle/: existing seattle deployment setup scripts
128 lines
4.7 KiB
TypeScript
128 lines
4.7 KiB
TypeScript
/*
|
|
* Copyright (C) 2026 Fluxer Contributors
|
|
*
|
|
* This file is part of Fluxer.
|
|
*
|
|
* Fluxer is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Fluxer is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with Fluxer. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import {
|
|
RelationshipTypes,
|
|
RelationshipTypesDescriptions,
|
|
RenderSpoilers,
|
|
RenderSpoilersDescriptions,
|
|
StickerAnimationOptions,
|
|
StickerAnimationOptionsDescriptions,
|
|
TimeFormatTypes,
|
|
TimeFormatTypesDescriptions,
|
|
UserAuthenticatorTypes,
|
|
UserAuthenticatorTypesDescriptions,
|
|
UserExplicitContentFilterTypes,
|
|
UserNotificationSettings,
|
|
UserNotificationSettingsDescriptions,
|
|
UserPremiumTypes,
|
|
UserPremiumTypesDescriptions,
|
|
} from '@fluxer/constants/src/UserConstants';
|
|
import {createInt32EnumType} from '@fluxer/schema/src/primitives/SchemaPrimitives';
|
|
|
|
export const StickerAnimationOptionsSchema = createInt32EnumType(
|
|
[
|
|
[StickerAnimationOptions.ALWAYS_ANIMATE, 'ALWAYS_ANIMATE', StickerAnimationOptionsDescriptions.ALWAYS_ANIMATE],
|
|
[
|
|
StickerAnimationOptions.ANIMATE_ON_INTERACTION,
|
|
'ANIMATE_ON_INTERACTION',
|
|
StickerAnimationOptionsDescriptions.ANIMATE_ON_INTERACTION,
|
|
],
|
|
[StickerAnimationOptions.NEVER_ANIMATE, 'NEVER_ANIMATE', StickerAnimationOptionsDescriptions.NEVER_ANIMATE],
|
|
],
|
|
'Sticker animation preference',
|
|
'StickerAnimationOptions',
|
|
);
|
|
|
|
export const RenderSpoilersSchema = createInt32EnumType(
|
|
[
|
|
[RenderSpoilers.ALWAYS, 'ALWAYS', RenderSpoilersDescriptions.ALWAYS],
|
|
[RenderSpoilers.ON_CLICK, 'ON_CLICK', RenderSpoilersDescriptions.ON_CLICK],
|
|
[RenderSpoilers.IF_MODERATOR, 'IF_MODERATOR', RenderSpoilersDescriptions.IF_MODERATOR],
|
|
],
|
|
'Spoiler rendering preference',
|
|
'RenderSpoilers',
|
|
);
|
|
|
|
export const TimeFormatTypesSchema = createInt32EnumType(
|
|
[
|
|
[TimeFormatTypes.AUTO, 'AUTO', TimeFormatTypesDescriptions.AUTO],
|
|
[TimeFormatTypes.TWELVE_HOUR, 'TWELVE_HOUR', TimeFormatTypesDescriptions.TWELVE_HOUR],
|
|
[TimeFormatTypes.TWENTY_FOUR_HOUR, 'TWENTY_FOUR_HOUR', TimeFormatTypesDescriptions.TWENTY_FOUR_HOUR],
|
|
],
|
|
'Time format preference',
|
|
'TimeFormatTypes',
|
|
);
|
|
|
|
export const UserNotificationSettingsSchema = createInt32EnumType(
|
|
[
|
|
[UserNotificationSettings.ALL_MESSAGES, 'ALL_MESSAGES', UserNotificationSettingsDescriptions.ALL_MESSAGES],
|
|
[UserNotificationSettings.ONLY_MENTIONS, 'ONLY_MENTIONS', UserNotificationSettingsDescriptions.ONLY_MENTIONS],
|
|
[UserNotificationSettings.NO_MESSAGES, 'NO_MESSAGES', UserNotificationSettingsDescriptions.NO_MESSAGES],
|
|
[UserNotificationSettings.INHERIT, 'INHERIT', UserNotificationSettingsDescriptions.INHERIT],
|
|
],
|
|
'Notification level preference',
|
|
'UserNotificationSettings',
|
|
);
|
|
|
|
export const RelationshipTypesSchema = createInt32EnumType(
|
|
[
|
|
[RelationshipTypes.FRIEND, 'FRIEND', RelationshipTypesDescriptions.FRIEND],
|
|
[RelationshipTypes.BLOCKED, 'BLOCKED', RelationshipTypesDescriptions.BLOCKED],
|
|
[RelationshipTypes.INCOMING_REQUEST, 'INCOMING_REQUEST', RelationshipTypesDescriptions.INCOMING_REQUEST],
|
|
[RelationshipTypes.OUTGOING_REQUEST, 'OUTGOING_REQUEST', RelationshipTypesDescriptions.OUTGOING_REQUEST],
|
|
],
|
|
'Relationship type',
|
|
'RelationshipTypes',
|
|
);
|
|
|
|
export const UserPremiumTypesSchema = createInt32EnumType(
|
|
[
|
|
[UserPremiumTypes.NONE, 'NONE', UserPremiumTypesDescriptions.NONE],
|
|
[UserPremiumTypes.SUBSCRIPTION, 'SUBSCRIPTION', UserPremiumTypesDescriptions.SUBSCRIPTION],
|
|
[UserPremiumTypes.LIFETIME, 'LIFETIME', UserPremiumTypesDescriptions.LIFETIME],
|
|
],
|
|
'Premium subscription type',
|
|
'UserPremiumTypes',
|
|
);
|
|
|
|
export const UserAuthenticatorTypesSchema = createInt32EnumType(
|
|
[
|
|
[UserAuthenticatorTypes.TOTP, 'TOTP', UserAuthenticatorTypesDescriptions.TOTP],
|
|
[UserAuthenticatorTypes.SMS, 'SMS', UserAuthenticatorTypesDescriptions.SMS],
|
|
[UserAuthenticatorTypes.WEBAUTHN, 'WEBAUTHN', UserAuthenticatorTypesDescriptions.WEBAUTHN],
|
|
],
|
|
'Authenticator type',
|
|
'UserAuthenticatorTypes',
|
|
);
|
|
|
|
export const UserExplicitContentFilterTypesSchema = createInt32EnumType(
|
|
[
|
|
[UserExplicitContentFilterTypes.DISABLED, 'DISABLED', 'Explicit content filter disabled'],
|
|
[UserExplicitContentFilterTypes.NON_FRIENDS, 'NON_FRIENDS', 'Filter explicit content from non-friends only'],
|
|
[
|
|
UserExplicitContentFilterTypes.FRIENDS_AND_NON_FRIENDS,
|
|
'FRIENDS_AND_NON_FRIENDS',
|
|
'Filter explicit content from all users',
|
|
],
|
|
],
|
|
'Explicit content filter level',
|
|
'UserExplicitContentFilterTypes',
|
|
);
|