import type { Channel, ChannelOptions } from "./channel.js" import * as Events from "../../events.js" import { Configuration } from "../../configuration.js" import { Maybe } from "../../common/types.js" import { Session } from "../../session.js" export type Implementation = { type: string // `Session` producer session: ( components: C, authenticatedUsername: Maybe, config: Configuration, eventEmitters: { fileSystem: Events.Emitter; session: Events.Emitter> } ) => Promise> // Account creation isUsernameAvailable: (username: string) => Promise isUsernameValid: (username: string) => Promise register: (options: { username: string; email?: string }) => Promise<{ success: boolean }> // Account delegation canDelegateAccount: (username: string) => Promise delegateAccount: (username: string, audience: string) => Promise> linkDevice: (username: string, data: Record) => Promise // Primitives createChannel: (options: ChannelOptions) => Promise }