import { BROWSER } from 'esm-env' import { derived, type Readable, writable } from 'svelte/store' import type { UserWorkspaceList } from '$lib/gen/models/UserWorkspaceList.js' import type { TokenResponse } from './gen' import type { IntrospectionQuery } from 'graphql' export interface UserExt { email: string username: string is_admin: boolean is_super_admin: boolean operator: boolean created_at: string groups: string[] pgroups: string[] folders: string[] folders_owners: string[] } const persistedWorkspace = BROWSER && localStorage.getItem('workspace') export const globalEmailInvite = writable('') export const awarenessStore = writable>(undefined) export const enterpriseLicense = writable(undefined) export const workerTags = writable(undefined) export const usageStore = writable(0) export const runFormStore = writable() export const oauthStore = writable(undefined) export const userStore = writable(undefined) export const workspaceStore = writable( persistedWorkspace ? String(persistedWorkspace) : undefined ) export const dbClockDrift = writable(undefined) export const premiumStore = writable<{ premium: boolean; usage?: number }>({ premium: false }) export const starStore = writable(1) export const usersWorkspaceStore = writable(undefined) export const superadmin = writable(undefined) export const userWorkspaces: Readable< Array<{ id: string name: string username: string }> > = derived([usersWorkspaceStore, superadmin], ([store, superadmin]) => { const originalWorkspaces = store?.workspaces ?? [] if (superadmin) { return [ ...originalWorkspaces.filter((x) => x.id != 'admins'), { id: 'admins', name: 'Admins', username: 'superadmin' } ] } else { return originalWorkspaces } }) export const hubScripts = writable< | Array<{ path: string summary: string approved: boolean kind: string app: string ask_id: number }> | undefined >(undefined) export const existsOpenaiResourcePath = writable(false) type SQLBaseSchema = { [schemaKey: string]: { [tableKey: string]: { [columnKey: string]: { type: string default: string required: boolean } } } } export interface MysqlSchema { lang: 'mysql' schema: SQLBaseSchema } export interface PostgresqlSchema { lang: 'postgresql' schema: SQLBaseSchema publicOnly: boolean } export interface GraphqlSchema { lang: 'graphql' schema: IntrospectionQuery } export type DBSchema = MysqlSchema | PostgresqlSchema | GraphqlSchema interface DBSchemas { [resourcePath: string]: DBSchema } export const dbSchemas = writable({}) export function switchWorkspace(workspace: string | undefined) { localStorage.removeItem('flow') localStorage.removeItem('app') workspaceStore.set(workspace) } export function clearStores(): void { localStorage.removeItem('flow') localStorage.removeItem('app') localStorage.removeItem('workspace') userStore.set(undefined) workspaceStore.set(undefined) usersWorkspaceStore.set(undefined) superadmin.set(undefined) }