import { ActorModel } from '../../../models/activitypub/actor' import { FunctionProperties, PickWith, PickWithOpt } from '../../utils' import { MAccount, MAccountDefault, MAccountId, MAccountIdActor } from './account' import { MServer, MServerHost, MServerHostBlocks, MServerRedundancyAllowed } from '../server' import { MAvatar, MAvatarFormattable } from './avatar' import { MChannel, MChannelAccountActor, MChannelAccountDefault, MChannelId, MChannelIdActor } from '../video' type Use = PickWith // ############################################################################ export type MActor = Omit // ############################################################################ export type MActorUrl = Pick export type MActorId = Pick export type MActorUsername = Pick export type MActorFollowersUrl = Pick export type MActorAudience = MActorUrl & MActorFollowersUrl export type MActorWithInboxes = Pick export type MActorSignature = MActorAccountChannelId export type MActorLight = Omit // ############################################################################ // Some association attributes export type MActorHost = Use<'Server', MServerHost> export type MActorRedundancyAllowedOpt = PickWithOpt export type MActorDefaultLight = MActorLight & Use<'Server', MServerHost> & Use<'Avatar', MAvatar> export type MActorAccountId = MActor & Use<'Account', MAccountId> export type MActorAccountIdActor = MActor & Use<'Account', MAccountIdActor> export type MActorChannelId = MActor & Use<'VideoChannel', MChannelId> export type MActorChannelIdActor = MActor & Use<'VideoChannel', MChannelIdActor> export type MActorAccountChannelId = MActorAccountId & MActorChannelId export type MActorAccountChannelIdActor = MActorAccountIdActor & MActorChannelIdActor // ############################################################################ // Include raw account/channel/server export type MActorAccount = MActor & Use<'Account', MAccount> export type MActorChannel = MActor & Use<'VideoChannel', MChannel> export type MActorDefaultAccountChannel = MActorDefault & MActorAccount & MActorChannel export type MActorServer = MActor & Use<'Server', MServer> // ############################################################################ // Complex actor associations export type MActorDefault = MActor & Use<'Server', MServer> & Use<'Avatar', MAvatar> // Actor with channel that is associated to an account and its actor // Actor -> VideoChannel -> Account -> Actor export type MActorChannelAccountActor = MActor & Use<'VideoChannel', MChannelAccountActor> export type MActorFull = MActor & Use<'Server', MServer> & Use<'Avatar', MAvatar> & Use<'Account', MAccount> & Use<'VideoChannel', MChannelAccountActor> // Same than ActorFull, but the account and the channel have their actor export type MActorFullActor = MActor & Use<'Server', MServer> & Use<'Avatar', MAvatar> & Use<'Account', MAccountDefault> & Use<'VideoChannel', MChannelAccountDefault> // ############################################################################ // API export type MActorSummary = FunctionProperties & Pick & Use<'Server', MServerHost> & Use<'Avatar', MAvatar> export type MActorSummaryBlocks = MActorSummary & Use<'Server', MServerHostBlocks> export type MActorAPI = Omit // ############################################################################ // Format for API or AP object export type MActorSummaryFormattable = FunctionProperties & Pick & Use<'Server', MServerHost> & Use<'Avatar', MAvatarFormattable> export type MActorFormattable = MActorSummaryFormattable & Pick & Use<'Server', MServerHost & Partial>> export type MActorAP = MActor & Use<'Avatar', MAvatar>