import { registerOidcClient, OidcClientConfig, OidcRegistrationClientMetadata, createClient, MatrixClient, } from "matrix-js-sdk"; import { SessionConfigStore, SessionConfig } from "./storage/SessionStore.js"; const CLIENT_PREFIX = "wildcard"; export class SessionManager { store: SessionConfigStore; constructor(store: SessionConfigStore) { this.store = store; } async createSession(config: SessionConfig): Promise { const client = createClient({ baseUrl: config.baseUrl, accessToken: config.accessToken, deviceId: config.deviceId, ...(config.refreshToken && { refreshToken: config.refreshToken }), }); void (await this.store.storeNewSessionConfig(config)); return client; } } /** * Registers a client with the homeserver for authentication. * @param oidcClientConfig - The OIDC client configuration provided by MatrixClient.getAuthMetadata(). * @param clientMetadata - The OIDC registration client metadata, should be configured by your app. * @returns A promise that resolves to the client ID you should use when logging in clients. */ export async function registerClientWithHomeserver( oidcClientConfig: OidcClientConfig, clientMetadata: OidcRegistrationClientMetadata, ): Promise { const clientId = await registerOidcClient(oidcClientConfig, clientMetadata); return clientId; } export function generateDeviceId(): string { function generateRandomChars(length: number): string { const allowedCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; let result = ""; for (let i = 0; i < length; i++) { result += allowedCharacters.charAt(Math.floor(Math.random() * allowedCharacters.length)); } return result; } return CLIENT_PREFIX + generateRandomChars(10); }