/* tslint:disable */ /* eslint-disable */ /* auto-generated by NAPI-RS */ export const SECOND: number export const MINUTE: number export const HOUR: number export const DAY: number export const USER_ONLINE_THRESHOLD: number export const USER_ACTIVE_THRESHOLD: number /** * List of file types allowed to be viewed directly in the browser * * Anything not included here will be responded as application/octet-stream * SVG is not allowed because it generates XSS (TODO: fix this and later allow it to be viewed directly) * * * * * * */ export const FILE_TYPE_BROWSERSAFE: string[] export function fetchMeta(): Promise export function updateMetaCache(): Promise export interface PugArgs { img: string | null title: string instanceName: string desc: string | null icon: string | null splashIcon: string | null themeColor: string | null randomMotd: string privateMode: boolean | null } export function metaToPugArgs(meta: Meta): PugArgs export interface ServerConfig { url: string port: number /** the host address to bind to */ bind?: string disableHsts?: boolean /** PostgreSQL configurations */ db: DbConfig /** Redis configurations */ redis: RedisConfig /** secondary Redis server configurations */ cacheServer?: RedisConfig /** proxy host used for HTTP requests */ proxy?: string /** proxy host used for SMTP requests */ proxySmtp?: string /** hosts to bypass the proxy */ proxyBypassHosts?: Array allowedPrivateNetworks?: Array /** maximum file size that can be uploaded to the drive (in bytes) */ maxFileSize?: number accessLog?: string clusterLimits?: WorkerConfigInternal cuid?: IdConfig outgoingAddress?: string deliverJobConcurrency?: number inboxJobConcurrency?: number deliverJobPerSec?: number inboxJobPerSec?: number deliverJobMaxAttempts?: number inboxJobMaxAttempts?: number /** deprecated in favor of `max_log_level` */ logLevel?: Array /** verbosity of the server log. `error`, `warn`, `info`, `debug`, or `trace` */ maxLogLevel?: string syslog?: SysLogConfig proxyRemoteFiles?: boolean mediaProxy?: string summalyProxyUrl?: string reservedUsernames?: Array maxUserSignups?: number isManagedHosting?: boolean maxNoteLength?: number maxCaptionLength?: number deepl?: DeepLConfig libreTranslate?: LibreTranslateConfig email?: EmailConfig objectStorage?: ObjectStorageConfig } export interface DbConfig { host: string port: number db: string user: string pass: string disableCache?: boolean extra?: any } export interface RedisConfig { host: string port: number family?: number user?: string pass?: string tls?: TlsConfig db: number prefix?: string } export interface TlsConfig { host: string rejectUnauthorized: boolean } export interface WorkerConfig { web: number queue: number } export interface WorkerConfigInternal { web?: number queue?: number } export interface IdConfig { length?: number fingerprint?: string } export interface SysLogConfig { host: string port: number } export interface DeepLConfig { managed?: boolean authKey?: string isPro?: boolean } export interface LibreTranslateConfig { managed?: boolean apiUrl?: string apiKey?: string } export interface EmailConfig { managed?: boolean address?: string host?: string port?: number user?: string pass?: string useImplicitSslTls?: boolean } export interface ObjectStorageConfig { managed?: boolean baseUrl?: string bucket?: string prefix?: string endpoint?: string region?: string accessKey?: string secretKey?: string useSsl?: boolean connnectOverProxy?: boolean setPublicReadOnUpload?: boolean s3ForcePathStyle?: boolean } export interface Config { url: string port: number bind?: string disableHsts?: boolean db: DbConfig redis: RedisConfig cacheServer?: RedisConfig proxy?: string proxySmtp?: string proxyBypassHosts?: Array allowedPrivateNetworks?: Array maxFileSize?: number accessLog?: string clusterLimits: WorkerConfig cuid?: IdConfig outgoingAddress?: string deliverJobConcurrency?: number inboxJobConcurrency?: number deliverJobPerSec?: number inboxJobPerSec?: number deliverJobMaxAttempts?: number inboxJobMaxAttempts?: number /** deprecated */ logLevel?: Array maxLogLevel?: string syslog?: SysLogConfig proxyRemoteFiles?: boolean mediaProxy?: string summalyProxyUrl?: string reservedUsernames?: Array maxUserSignups?: number isManagedHosting?: boolean maxNoteLength: number maxCaptionLength: number deepl?: DeepLConfig libreTranslate?: LibreTranslateConfig email?: EmailConfig objectStorage?: ObjectStorageConfig version: string host: string hostname: string redisKeyPrefix: string scheme: string wsScheme: string apiUrl: string wsUrl: string authUrl: string driveUrl: string userAgent: string } export function loadConfig(): Config export interface Acct { username: string host: string | null } export function stringToAcct(acct: string): Acct export function acctToString(acct: Acct): string /** Fetches and returns the NodeInfo (version 2.0) of a remote server. */ export function fetchNodeinfo(host: string): Promise export function nodeinfo_2_1(): Promise export function nodeinfo_2_0(): Promise export function updateNodeinfoCache(): Promise /** NodeInfo schema version 2.0. */ export interface Nodeinfo { /** The schema version, must be 2.0. */ version: string /** Metadata about server software in use. */ software: Software20 /** The protocols supported on this server. */ protocols: Array /** The third party sites this server can connect to via their application API. */ services: Services /** Whether this server allows open self-registration. */ openRegistrations: boolean /** Usage statistics for this server. */ usage: Usage /** Free form key value pairs for software specific values. Clients should not rely on any specific key present. */ metadata: Record } /** Metadata about server software in use (version 2.0). */ export interface Software20 { /** The canonical name of this server software. */ name: string /** The version of this server software. */ version: string } export enum Protocol { Activitypub = 0, Buddycloud = 1, Dfrn = 2, Diaspora = 3, Libertree = 4, Ostatus = 5, Pumpio = 6, Tent = 7, Xmpp = 8, Zot = 9 } /** The third party sites this server can connect to via their application API. */ export interface Services { /** The third party sites this server can retrieve messages from for combined display with regular traffic. */ inbound: Array /** The third party sites this server can publish messages to on the behalf of a user. */ outbound: Array } /** The third party sites this server can retrieve messages from for combined display with regular traffic. */ export enum Inbound { Atom1 = 0, Gnusocial = 1, Imap = 2, Pnut = 3, Pop3 = 4, Pumpio = 5, Rss2 = 6, Twitter = 7 } /** The third party sites this server can publish messages to on the behalf of a user. */ export enum Outbound { Atom1 = 0, Blogger = 1, Buddycloud = 2, Diaspora = 3, Dreamwidth = 4, Drupal = 5, Facebook = 6, Friendica = 7, Gnusocial = 8, Google = 9, Insanejournal = 10, Libertree = 11, Linkedin = 12, Livejournal = 13, Mediagoblin = 14, Myspace = 15, Pinterest = 16, Pnut = 17, Posterous = 18, Pumpio = 19, Redmatrix = 20, Rss2 = 21, Smtp = 22, Tent = 23, Tumblr = 24, Twitter = 25, Wordpress = 26, Xmpp = 27 } /** Usage statistics for this server. */ export interface Usage { users: Users localPosts: number | null localComments: number | null } /** statistics about the users of this server. */ export interface Users { total: number | null activeHalfyear: number | null activeMonth: number | null } /** Prints the greeting message and the Firefish version to stdout. */ export function greet(): void /** Initializes the [tracing] logger. */ export function initializeRustLogger(): void /** Prints the server hardware information as the server info log. */ export function showServerInfo(): void /** * Checks if a server is blocked. * * # Argument * `host` - punycoded instance host * * # Example * ```no_run * # use backend_rs::misc::check_server_block::is_blocked_server; * # async fn f() -> Result<(), Box> { * assert_eq!(true, is_blocked_server("blocked.com").await?); * assert_eq!(false, is_blocked_server("not-blocked.com").await?); * assert_eq!(true, is_blocked_server("subdomain.of.blocked.com").await?); * assert_eq!(true, is_blocked_server("xn--l8jegik.blocked.com").await?); * # Ok(()) * # } * ``` */ export function isBlockedServer(host: string): Promise /** * Checks if a server is silenced. * * # Argument * `host` - punycoded instance host * * # Example * ```no_run * # use backend_rs::misc::check_server_block::is_silenced_server; * # async fn f() -> Result<(), Box> { * assert_eq!(true, is_silenced_server("silenced.com").await?); * assert_eq!(false, is_silenced_server("not-silenced.com").await?); * assert_eq!(true, is_silenced_server("subdomain.of.silenced.com").await?); * assert_eq!(true, is_silenced_server("xn--l8jegik.silenced.com").await?); * # Ok(()) * # } * ``` */ export function isSilencedServer(host: string): Promise /** * Checks if a server is allowlisted. * Returns `Ok(true)` if private mode is disabled. * * # Argument * `host` - punycoded instance host * * # Example * ```no_run * # use backend_rs::misc::check_server_block::is_allowed_server; * # async fn f() -> Result<(), Box> { * assert_eq!(true, is_allowed_server("allowed.com").await?); * assert_eq!(false, is_allowed_server("not-allowed.com").await?); * assert_eq!(false, is_allowed_server("subdomain.of.allowed.com").await?); * assert_eq!(false, is_allowed_server("xn--l8jegik.allowed.com").await?); * # Ok(()) * # } * ``` */ export function isAllowedServer(host: string): Promise export interface PartialNoteToCheckWordMute { fileIds: Array text: string | null cw: string | null renoteId: string | null replyId: string | null } /** * Returns whether `note` should be hard-muted. * * More specifically, this function returns `Ok(true)` * if and only if one or more of these conditions are met: * * * the note (text or CW) contains any of the words/patterns * * the "parent" note(s) (reply, quote) contain any of the words/patterns * * the alt text of the attached files contains any of the words/patterns * * # Arguments * * * `note` : [PartialNoteToCheckWordMute] object * * `muted_words` : list of muted keyword lists (each array item is a space-separated keyword list that represents an AND condition) * * `muted_patterns` : list of JavaScript-style (e.g., `/foo/i`) regular expressions */ export function checkWordMute(note: PartialNoteToCheckWordMute, mutedWords: Array, mutedPatterns: Array): Promise export function getFullApAccount(username: string, host?: string | undefined | null): string export function isSelfHost(host?: string | undefined | null): boolean export function isSameOrigin(uri: string): boolean export function extractHost(uri: string): string export function toPuny(host: string): string export function isUnicodeEmoji(s: string): boolean /** Escapes `%` and `\` in the given string. */ export function sqlLikeEscape(src: string): string /** Returns `true` if `src` does not contain suspicious characters like `%`. */ export function safeForSql(src: string): boolean /** Converts milliseconds to a human readable string. */ export function formatMilliseconds(milliseconds: number): string export interface ImageSize { width: number height: number } export function getImageSizeFromUrl(url: string): Promise export function isQuote(note: Note): boolean export function isSafeUrl(url: string): boolean /** Returns the latest Firefish version. */ export function latestVersion(): Promise export function toMastodonId(firefishId: string): string | null export function fromMastodonId(mastodonId: string): string | null export function getNoteSummary(fileIds: Array, text: string | undefined | null, cw: string | undefined | null, hasPoll: boolean): string /** * Converts the given text into the cat language. * * refs: * * * * * * # Arguments * * * `text` : original text * * `lang` : language code (e.g., `Some("en")`, `Some("en-US")`, `Some("uk-UA")`, `None`) * * # Example * * ``` * # use backend_rs::misc::nyaify::nyaify; * assert_eq!(nyaify("I'll take a nap.", Some("en")), "I'll take a nyap."); * ``` */ export function nyaify(text: string, lang?: string | undefined | null): string /** Hashes the given password using [argon2] algorithm. */ export function hashPassword(password: string): string /** Checks whether the given password and hash match. */ export function verifyPassword(password: string, hash: string): boolean /** Returns whether the [bcrypt] algorithm is used for the password hash. */ export function isOldPasswordAlgorithm(hash: string): boolean export interface DecodedReaction { reaction: string name: string | null host: string | null } export function decodeReaction(reaction: string): DecodedReaction export function countReactions(reactions: Record): Record export function toDbReaction(reaction?: string | undefined | null, host?: string | undefined | null): Promise /** Delete all entries in the [attestation_challenge] table created at more than 5 minutes ago */ export function removeOldAttestationChallenges(): Promise export interface Cpu { model: string cores: number } export interface Memory { /** Total memory amount in bytes */ total: number /** Used memory amount in bytes */ used: number /** Available (for (re)use) memory amount in bytes */ available: number } export interface Storage { /** Total storage space in bytes */ total: number /** Used storage space in bytes */ used: number } export function cpuInfo(): Cpu export function cpuUsage(): number export function memoryUsage(): Memory export function storageUsage(): Storage | null export interface AbuseUserReport { id: string createdAt: DateTimeWithTimeZone targetUserId: string reporterId: string assigneeId: string | null resolved: boolean comment: string targetUserHost: string | null reporterHost: string | null forwarded: boolean } export interface AccessToken { id: string createdAt: DateTimeWithTimeZone token: string hash: string userId: string appId: string | null lastUsedAt: DateTimeWithTimeZone | null session: string | null name: string | null description: string | null iconUrl: string | null permission: Array fetched: boolean } export interface Ad { id: string createdAt: DateTimeWithTimeZone expiresAt: DateTimeWithTimeZone place: string priority: string url: string imageUrl: string memo: string ratio: number } export interface Announcement { id: string createdAt: DateTimeWithTimeZone text: string title: string imageUrl: string | null updatedAt: DateTimeWithTimeZone | null showPopup: boolean isGoodNews: boolean } export interface AnnouncementRead { id: string userId: string announcementId: string createdAt: DateTimeWithTimeZone } export interface Antenna { id: string createdAt: DateTimeWithTimeZone userId: string name: string src: AntennaSrc userListId: string | null withFile: boolean expression: string | null notify: boolean caseSensitive: boolean withReplies: boolean userGroupJoiningId: string | null users: Array instances: Array keywords: Array excludeKeywords: Array } export interface App { id: string createdAt: DateTimeWithTimeZone userId: string | null secret: string name: string description: string permission: Array callbackUrl: string | null } export interface AttestationChallenge { id: string userId: string challenge: string createdAt: DateTimeWithTimeZone registrationChallenge: boolean } export interface AuthSession { id: string createdAt: DateTimeWithTimeZone token: string userId: string | null appId: string } export interface Blocking { id: string createdAt: DateTimeWithTimeZone blockeeId: string blockerId: string } export interface Channel { id: string createdAt: DateTimeWithTimeZone lastNotedAt: DateTimeWithTimeZone | null userId: string | null name: string description: string | null bannerId: string | null notesCount: number usersCount: number } export interface ChannelFollowing { id: string createdAt: DateTimeWithTimeZone followeeId: string followerId: string } export interface ChannelNotePining { id: string createdAt: DateTimeWithTimeZone channelId: string noteId: string } export interface Clip { id: string createdAt: DateTimeWithTimeZone userId: string name: string isPublic: boolean description: string | null } export interface ClipNote { id: string noteId: string clipId: string } export interface DriveFile { id: string createdAt: DateTimeWithTimeZone userId: string | null userHost: string | null md5: string name: string type: string size: number comment: string | null properties: Json storedInternal: boolean url: string thumbnailUrl: string | null webpublicUrl: string | null accessKey: string | null thumbnailAccessKey: string | null webpublicAccessKey: string | null uri: string | null src: string | null folderId: string | null isSensitive: boolean isLink: boolean blurhash: string | null webpublicType: string | null requestHeaders: Json | null requestIp: string | null usageHint: DriveFileUsageHint | null } export interface DriveFolder { id: string createdAt: DateTimeWithTimeZone name: string userId: string | null parentId: string | null } export interface Emoji { id: string updatedAt: DateTimeWithTimeZone | null name: string host: string | null originalUrl: string uri: string | null type: string | null aliases: Array category: string | null publicUrl: string license: string | null width: number | null height: number | null } export interface FollowRequest { id: string createdAt: DateTimeWithTimeZone followeeId: string followerId: string requestId: string | null followerHost: string | null followerInbox: string | null followerSharedInbox: string | null followeeHost: string | null followeeInbox: string | null followeeSharedInbox: string | null } export interface Following { id: string createdAt: DateTimeWithTimeZone followeeId: string followerId: string followerHost: string | null followerInbox: string | null followerSharedInbox: string | null followeeHost: string | null followeeInbox: string | null followeeSharedInbox: string | null } export interface GalleryLike { id: string createdAt: DateTimeWithTimeZone userId: string postId: string } export interface GalleryPost { id: string createdAt: DateTimeWithTimeZone updatedAt: DateTimeWithTimeZone title: string description: string | null userId: string fileIds: Array isSensitive: boolean likedCount: number tags: Array } export interface Hashtag { id: string name: string mentionedUserIds: Array mentionedUsersCount: number mentionedLocalUserIds: Array mentionedLocalUsersCount: number mentionedRemoteUserIds: Array mentionedRemoteUsersCount: number attachedUserIds: Array attachedUsersCount: number attachedLocalUserIds: Array attachedLocalUsersCount: number attachedRemoteUserIds: Array attachedRemoteUsersCount: number } export interface Instance { id: string caughtAt: DateTimeWithTimeZone host: string usersCount: number notesCount: number followingCount: number followersCount: number latestRequestSentAt: DateTimeWithTimeZone | null latestStatus: number | null latestRequestReceivedAt: DateTimeWithTimeZone | null lastCommunicatedAt: DateTimeWithTimeZone isNotResponding: boolean softwareName: string | null softwareVersion: string | null openRegistrations: boolean | null name: string | null description: string | null maintainerName: string | null maintainerEmail: string | null infoUpdatedAt: DateTimeWithTimeZone | null isSuspended: boolean iconUrl: string | null themeColor: string | null faviconUrl: string | null } export interface MessagingMessage { id: string createdAt: DateTimeWithTimeZone userId: string recipientId: string | null text: string | null isRead: boolean fileId: string | null groupId: string | null reads: Array uri: string | null } export interface Meta { id: string name: string | null description: string | null maintainerName: string | null maintainerEmail: string | null disableRegistration: boolean disableLocalTimeline: boolean disableGlobalTimeline: boolean useStarForReactionFallback: boolean langs: Array hiddenTags: Array blockedHosts: Array mascotImageUrl: string | null bannerUrl: string | null errorImageUrl: string | null iconUrl: string | null cacheRemoteFiles: boolean enableRecaptcha: boolean recaptchaSiteKey: string | null recaptchaSecretKey: string | null localDriveCapacityMb: number remoteDriveCapacityMb: number summalyProxy: string | null enableEmail: boolean email: string | null smtpSecure: boolean smtpHost: string | null smtpPort: number | null smtpUser: string | null smtpPass: string | null enableServiceWorker: boolean swPublicKey: string | null swPrivateKey: string | null pinnedUsers: Array tosUrl: string | null repositoryUrl: string feedbackUrl: string | null useObjectStorage: boolean objectStorageBucket: string | null objectStoragePrefix: string | null objectStorageBaseUrl: string | null objectStorageEndpoint: string | null objectStorageRegion: string | null objectStorageAccessKey: string | null objectStorageSecretKey: string | null objectStoragePort: number | null objectStorageUseSsl: boolean proxyAccountId: string | null objectStorageUseProxy: boolean enableHcaptcha: boolean hcaptchaSiteKey: string | null hcaptchaSecretKey: string | null objectStorageSetPublicRead: boolean pinnedPages: Array backgroundImageUrl: string | null logoImageUrl: string | null pinnedClipId: string | null objectStorageS3ForcePathStyle: boolean allowedHosts: Array | null secureMode: boolean | null privateMode: boolean | null deeplAuthKey: string | null deeplIsPro: boolean emailRequiredForSignup: boolean themeColor: string | null defaultLightTheme: string | null defaultDarkTheme: string | null enableIpLogging: boolean enableActiveEmailValidation: boolean customMotd: Array customSplashIcons: Array disableRecommendedTimeline: boolean recommendedInstances: Array enableGuestTimeline: boolean defaultReaction: string libreTranslateApiUrl: string | null libreTranslateApiKey: string | null silencedHosts: Array experimentalFeatures: Json enableServerMachineStats: boolean enableIdenticonGeneration: boolean donationLink: string | null moreUrls: Json markLocalFilesNsfwByDefault: boolean antennaLimit: number } export interface Migrations { id: number timestamp: number name: string } export interface ModerationLog { id: string createdAt: DateTimeWithTimeZone userId: string type: string info: Json } export interface MutedNote { id: string noteId: string userId: string reason: MutedNoteReason } export interface Muting { id: string createdAt: DateTimeWithTimeZone muteeId: string muterId: string expiresAt: DateTimeWithTimeZone | null } export interface Note { id: string createdAt: DateTimeWithTimeZone replyId: string | null renoteId: string | null text: string | null name: string | null cw: string | null userId: string localOnly: boolean renoteCount: number repliesCount: number reactions: Json visibility: NoteVisibility uri: string | null score: number fileIds: Array attachedFileTypes: Array visibleUserIds: Array mentions: Array mentionedRemoteUsers: string emojis: Array tags: Array hasPoll: boolean userHost: string | null replyUserId: string | null replyUserHost: string | null renoteUserId: string | null renoteUserHost: string | null url: string | null channelId: string | null threadId: string | null updatedAt: DateTimeWithTimeZone | null lang: string | null scheduledAt: DateTimeWithTimeZone | null } export interface NoteEdit { id: string noteId: string text: string | null cw: string | null fileIds: Array updatedAt: DateTimeWithTimeZone emojis: Array } export interface NoteFavorite { id: string createdAt: DateTimeWithTimeZone userId: string noteId: string } export interface NoteFile { serialNo: number noteId: string fileId: string } export interface NoteReaction { id: string createdAt: DateTimeWithTimeZone userId: string noteId: string reaction: string } export interface NoteThreadMuting { id: string createdAt: DateTimeWithTimeZone userId: string threadId: string } export interface NoteUnread { id: string userId: string noteId: string noteUserId: string isSpecified: boolean isMentioned: boolean noteChannelId: string | null } export interface NoteWatching { id: string createdAt: DateTimeWithTimeZone userId: string noteId: string noteUserId: string } export interface Notification { id: string createdAt: DateTimeWithTimeZone notifieeId: string notifierId: string | null isRead: boolean noteId: string | null reaction: string | null choice: number | null followRequestId: string | null type: NotificationType userGroupInvitationId: string | null customBody: string | null customHeader: string | null customIcon: string | null appAccessTokenId: string | null } export interface Page { id: string createdAt: DateTimeWithTimeZone updatedAt: DateTimeWithTimeZone title: string name: string summary: string | null alignCenter: boolean font: string userId: string eyeCatchingImageId: string | null content: Json variables: Json visibility: PageVisibility visibleUserIds: Array likedCount: number hideTitleWhenPinned: boolean script: string isPublic: boolean } export interface PageLike { id: string createdAt: DateTimeWithTimeZone userId: string pageId: string } export interface PasswordResetRequest { id: string createdAt: DateTimeWithTimeZone token: string userId: string } export interface Poll { noteId: string expiresAt: DateTimeWithTimeZone | null multiple: boolean choices: Array votes: Array noteVisibility: PollNoteVisibility userId: string userHost: string | null } export interface PollVote { id: string createdAt: DateTimeWithTimeZone userId: string noteId: string choice: number } export interface PromoNote { noteId: string expiresAt: DateTimeWithTimeZone userId: string } export interface PromoRead { id: string createdAt: DateTimeWithTimeZone userId: string noteId: string } export interface RegistrationTicket { id: string createdAt: DateTimeWithTimeZone code: string } export interface RegistryItem { id: string createdAt: DateTimeWithTimeZone updatedAt: DateTimeWithTimeZone userId: string key: string scope: Array domain: string | null value: Json | null } export interface Relay { id: string inbox: string status: RelayStatus } export interface RenoteMuting { id: string createdAt: DateTimeWithTimeZone muteeId: string muterId: string } export interface ReplyMuting { id: string createdAt: DateTimeWithTimeZone muteeId: string muterId: string } export enum AntennaSrc { All = 'all', Group = 'group', Home = 'home', Instances = 'instances', List = 'list', Users = 'users' } export enum DriveFileUsageHint { UserAvatar = 'userAvatar', UserBanner = 'userBanner' } export enum MutedNoteReason { Manual = 'manual', Other = 'other', Spam = 'spam', Word = 'word' } export enum NoteVisibility { Followers = 'followers', Hidden = 'hidden', Home = 'home', Public = 'public', Specified = 'specified' } export enum NotificationType { App = 'app', Follow = 'follow', FollowRequestAccepted = 'followRequestAccepted', GroupInvited = 'groupInvited', Mention = 'mention', PollEnded = 'pollEnded', PollVote = 'pollVote', Quote = 'quote', Reaction = 'reaction', ReceiveFollowRequest = 'receiveFollowRequest', Renote = 'renote', Reply = 'reply' } export enum PageVisibility { Followers = 'followers', Public = 'public', Specified = 'specified' } export enum PollNoteVisibility { Followers = 'followers', Home = 'home', Public = 'public', Specified = 'specified' } export enum RelayStatus { Accepted = 'accepted', Rejected = 'rejected', Requesting = 'requesting' } export enum UserEmojiModPerm { Add = 'add', Full = 'full', Mod = 'mod', Unauthorized = 'unauthorized' } export enum UserProfileFfvisibility { Followers = 'followers', Private = 'private', Public = 'public' } export enum UserProfileMutingNotificationTypes { App = 'app', Follow = 'follow', FollowRequestAccepted = 'followRequestAccepted', GroupInvited = 'groupInvited', Mention = 'mention', PollEnded = 'pollEnded', PollVote = 'pollVote', Quote = 'quote', Reaction = 'reaction', ReceiveFollowRequest = 'receiveFollowRequest', Renote = 'renote', Reply = 'reply' } export interface Signin { id: string createdAt: DateTimeWithTimeZone userId: string ip: string headers: Json success: boolean } export interface SwSubscription { id: string createdAt: DateTimeWithTimeZone userId: string endpoint: string auth: string publickey: string sendReadMessage: boolean } export interface UsedUsername { username: string createdAt: DateTimeWithTimeZone } export interface User { id: string createdAt: DateTimeWithTimeZone updatedAt: DateTimeWithTimeZone | null lastFetchedAt: DateTimeWithTimeZone | null username: string usernameLower: string name: string | null followersCount: number followingCount: number notesCount: number avatarId: string | null bannerId: string | null tags: Array isSuspended: boolean isSilenced: boolean isLocked: boolean isBot: boolean isCat: boolean isAdmin: boolean isModerator: boolean emojis: Array host: string | null inbox: string | null sharedInbox: string | null featured: string | null uri: string | null token: string | null isExplorable: boolean followersUri: string | null lastActiveDate: DateTimeWithTimeZone | null hideOnlineStatus: boolean isDeleted: boolean driveCapacityOverrideMb: number | null movedToUri: string | null speakAsCat: boolean emojiModPerm: UserEmojiModPerm isIndexable: boolean alsoKnownAs: Array | null } export interface UserGroup { id: string createdAt: DateTimeWithTimeZone name: string userId: string isPrivate: boolean } export interface UserGroupInvitation { id: string createdAt: DateTimeWithTimeZone userId: string userGroupId: string } export interface UserGroupInvite { id: string createdAt: DateTimeWithTimeZone userId: string userGroupId: string } export interface UserGroupJoining { id: string createdAt: DateTimeWithTimeZone userId: string userGroupId: string } export interface UserIp { id: number createdAt: DateTimeWithTimeZone userId: string ip: string } export interface UserKeypair { userId: string publicKey: string privateKey: string } export interface UserList { id: string createdAt: DateTimeWithTimeZone userId: string name: string } export interface UserListJoining { id: string createdAt: DateTimeWithTimeZone userId: string userListId: string } export interface UserNotePining { id: string createdAt: DateTimeWithTimeZone userId: string noteId: string } export interface UserPending { id: string createdAt: DateTimeWithTimeZone code: string username: string email: string password: string } export interface UserProfile { userId: string location: string | null birthday: string | null description: string | null fields: Json url: string | null email: string | null emailVerifyCode: string | null emailVerified: boolean twoFactorTempSecret: string | null twoFactorSecret: string | null twoFactorEnabled: boolean password: string | null autoAcceptFollowed: boolean alwaysMarkNsfw: boolean carefulBot: boolean userHost: string | null securityKeysAvailable: boolean usePasswordLessLogin: boolean pinnedPageId: string | null injectFeaturedNote: boolean enableWordMute: boolean mutingNotificationTypes: Array noCrawle: boolean receiveAnnouncementEmail: boolean emailNotificationTypes: Json publicReactions: boolean ffVisibility: UserProfileFfvisibility moderationNote: string preventAiLearning: boolean isIndexable: boolean mutedPatterns: Array mutedInstances: Array mutedWords: Array lang: string | null } export interface UserPublickey { userId: string keyId: string keyPem: string } export interface UserSecurityKey { id: string userId: string publicKey: string lastUsed: DateTimeWithTimeZone name: string } export interface Webhook { id: string createdAt: DateTimeWithTimeZone userId: string name: string on: Array url: string secret: string active: boolean latestSentAt: DateTimeWithTimeZone | null latestStatus: number | null } export function updateAntennasOnNewNote(note: Note, noteAuthor: Acct, noteMutedUsers: Array): Promise export function updateAntennaCache(): Promise export function watchNote(watcherId: string, noteAuthorId: string, noteId: string): Promise export function unwatchNote(watcherId: string, noteId: string): Promise export enum PushNotificationKind { Generic = 0, Chat = 1, ReadAllChats = 2, ReadAllChatsInTheRoom = 3, ReadNotifications = 4, ReadAllNotifications = 5, Mastodon = 6 } export function sendPushNotification(receiverUserId: string, kind: PushNotificationKind, content: any): Promise export function publishToChannelStream(channelId: string, userId: string): Promise export function publishToChatStream(senderUserId: string, receiverUserId: string, kind: ChatEvent, object: any): Promise export enum ChatIndexEvent { Message = 0, Read = 1 } export function publishToChatIndexStream(userId: string, kind: ChatIndexEvent, object: any): Promise export interface PackedEmoji { id: string aliases: Array name: string category: string | null host: string | null url: string license: string | null width: number | null height: number | null } export function publishToBroadcastStream(emoji: PackedEmoji): Promise export enum DriveFileEvent { Create = 0, Update = 1, Delete = 2 } export enum DriveFolderEvent { Create = 0, Update = 1, Delete = 2 } export function publishToDriveFileStream(userId: string, kind: DriveFileEvent, object: any): Promise export function publishToDriveFolderStream(userId: string, kind: DriveFolderEvent, object: any): Promise export function publishToGroupChatStream(groupId: string, kind: ChatEvent, object: any): Promise export interface AbuseUserReportLike { id: string targetUserId: string reporterId: string comment: string } export function publishToModerationStream(moderatorId: string, report: AbuseUserReportLike): Promise export function publishToNotesStream(note: Note): Promise export enum ChatEvent { Message = 0, Read = 1, Deleted = 2, Typing = 3 } export function getTimestamp(id: string): number /** * The generated ID results in the form of `[8 chars timestamp] + [cuid2]`. * The minimum and maximum lengths are 16 and 24, respectively. * With the length of 16, namely 8 for cuid2, roughly 1427399 IDs are needed * in the same millisecond to reach 50% chance of collision. * * Ref: */ export function genId(): string /** Generate an ID using a specific datetime */ export function genIdAt(date: Date): string /** Generates a random string based on [thread_rng] and [Alphanumeric]. */ export function generateSecureRandomString(length: number): string export function generateUserToken(): string