import type { ComputedRef, Ref, ToRefs } from 'vue' import type { WritableComputedRef } from '@vue/reactivity' import type { JwtPayload } from 'jwt-decode' import type { Language, ProjectRole, User } from '~/lib' import type { useCounter } from '#imports' export interface AppInfo { ncSiteUrl: string authType: 'jwt' | 'none' connectToExternalDB: boolean defaultLimit: number firstUser: boolean githubAuthEnabled: boolean googleAuthEnabled: boolean ncMin: boolean oneClick: boolean projectHasAdmin: boolean teleEnabled: boolean auditEnabled: boolean type: string version: string ee?: boolean ncAttachmentFieldSize: number ncMaxAttachmentsAllowed: number isCloud: boolean automationLogLevel: 'OFF' | 'ERROR' | 'ALL' } export interface StoredState { token: string | null lang: keyof typeof Language darkMode: boolean filterAutoSave: boolean previewAs: ProjectRole | null includeM2M: boolean showNull: boolean currentVersion: string | null latestRelease: string | null hiddenRelease: string | null isMobileMode: boolean | null } export type State = ToRefs> & { storage: Ref user: Ref token: WritableComputedRef jwtPayload: ComputedRef<(JwtPayload & User) | null> timestamp: Ref runningRequests: ReturnType error: Ref appInfo: Ref } export interface Getters { signedIn: ComputedRef isLoading: WritableComputedRef } export interface Actions { signOut: () => void signIn: (token: string) => void refreshToken: () => void loadAppInfo: () => void setIsMobileMode: (isMobileMode: boolean) => void } export type ReadonlyState = Readonly> & Omit export type UseGlobalReturn = Getters & Actions & ReadonlyState