import { Capability, IDownloadFileActionFromWidgetResponseData, IGetMediaConfigActionFromWidgetResponseData, IModalWidgetCreateData, IModalWidgetOpenRequestDataButton, IModalWidgetReturnData, IOpenIDCredentials, ISendEventFromWidgetResponseData, IUploadFileActionFromWidgetResponseData, IWidgetApiRequestData, WidgetApi as MatrixWidgetApi, ModalButtonID, Symbols, UpdateDelayedEventAction, WidgetEventCapability } from 'matrix-widget-api'; import { Observable } from 'rxjs'; import { RoomEvent, StateEvent, ToDeviceMessageEvent, TurnServer, WidgetApi, WidgetConfig, WidgetParameters } from './types'; /** * Options for the {@link WidgetApiImpl.create} function. */ export type WidgetApiOptions = { /** * Optional initial capabilities that should be requested from the user on * load. */ capabilities?: Array; /** * Enable the the pop-out button for pinned widgets that support running * without the Widget API. */ supportStandalone?: boolean; }; /** * Implementation of the API from the widget to the client. * * @remarks Widget API is specified here: * https://docs.google.com/document/d/1uPF7XWY_dXTKVKV7jZQ2KmsI19wn9-kFRgQ1tFQP7wQ/edit#heading=h.9rn9lt6ctkgi */ export declare class WidgetApiImpl implements WidgetApi { /** * Provide access to the underlying widget API from `matrix-widget-sdk`. * * @remarks Normally there is no need to use it, however if features are * missing from `WidgetApi` it can be handy to work with the * original API. */ readonly matrixWidgetApi: MatrixWidgetApi; /** {@inheritDoc WidgetApi.widgetId} */ readonly widgetId: string; /** {@inheritDoc WidgetApi.widgetParameters} */ readonly widgetParameters: WidgetParameters; /** * Initialize a new widget API instance and wait till it is ready. * There should only be one instance of the widget API. The widget API should * be created as early as possible when starting the application. This is * required to match the timing of the API connection establishment with the * client, especially in Safari. Therefore it is recommended to create it * inside the entrypoint, before initializing rendering engines like react. * * @param param0 - {@link WidgetApiOptions} * * @returns A widget API instance ready to use. */ static create({ capabilities, supportStandalone, }?: WidgetApiOptions): Promise; private widgetConfig; private outstandingCapabilitiesRequest; private outstandingOpenIDConnectTokenRequest; private cachedOpenIdToken; private readonly events$; private readonly toDeviceMessages$; private readonly initialCapabilities; constructor( /** * Provide access to the underlying widget API from `matrix-widget-sdk`. * * @remarks Normally there is no need to use it, however if features are * missing from `WidgetApi` it can be handy to work with the * original API. */ matrixWidgetApi: MatrixWidgetApi, /** {@inheritDoc WidgetApi.widgetId} */ widgetId: string, /** {@inheritDoc WidgetApi.widgetParameters} */ widgetParameters: WidgetParameters, { capabilities, supportStandalone }?: WidgetApiOptions); /** * Initialize the widget API and wait till a connection with the client is * fully established. * * Waits till the user has approved the initial set of capabilities. The * method doesn't fail if the user doesn't approve all of them. It is * required to check manually afterwards. * In case of modal widgets it waits till the `widgetConfig` is received. * * @remarks Should only be called once during startup. */ initialize(): Promise; /** {@inheritDoc WidgetApi.getWidgetConfig} */ getWidgetConfig(): Readonly | undefined>; /** {@inheritDoc WidgetApi.rerequestInitialCapabilities} */ rerequestInitialCapabilities(): Promise; /** {@inheritDoc WidgetApi.hasInitialCapabilities} */ hasInitialCapabilities(): boolean; /** {@inheritDoc WidgetApi.requestCapabilities} */ requestCapabilities(capabilities: Array): Promise; private requestCapabilitiesInternal; /** {@inheritDoc WidgetApi.hasCapabilities} */ hasCapabilities(capabilities: Array): boolean; /** {@inheritDoc WidgetApi.receiveSingleStateEvent} */ receiveSingleStateEvent(eventType: string, stateKey?: string): Promise | undefined>; /** {@inheritDoc WidgetApi.receiveStateEvents} */ receiveStateEvents(eventType: string, { stateKey, roomIds, }?: { stateKey?: string; roomIds?: string[] | Symbols.AnyRoom; }): Promise[]>; /** {@inheritDoc WidgetApi.observeStateEvents} */ observeStateEvents(eventType: string, { stateKey, roomIds, }?: { stateKey?: string; roomIds?: string[] | Symbols.AnyRoom; }): Observable>; /** {@inheritDoc WidgetApi.sendStateEvent} */ sendStateEvent(eventType: string, content: T, { roomId, stateKey }?: { roomId?: string; stateKey?: string; }): Promise; /** {@inheritDoc WidgetApi.sendDelayedStateEvent} */ sendDelayedStateEvent(eventType: string, content: T, delay: number, { roomId, stateKey }?: { roomId?: string; stateKey?: string; }): Promise<{ delay_id: string; }>; /** {@inheritDoc WidgetApi.receiveRoomEvents} */ receiveRoomEvents(eventType: string, { messageType, roomIds, }?: { messageType?: string; roomIds?: string[] | Symbols.AnyRoom; }): Promise>>; /** {@inheritDoc WidgetApi.observeRoomEvents} */ observeRoomEvents(eventType: string, { messageType, roomIds, }?: { messageType?: string; roomIds?: string[] | Symbols.AnyRoom; }): Observable>; /** {@inheritDoc WidgetApi.sendRoomEvent} */ sendRoomEvent(eventType: string, content: T, { roomId }?: { roomId?: string; }): Promise>; /** {@inheritDoc WidgetApi.sendDelayedRoomEvent} */ sendDelayedRoomEvent(eventType: string, content: T, delay: number, { roomId }?: { roomId?: string; }): Promise<{ delay_id: string; }>; /** {@inheritDoc WidgetApi.updateDelayedEvent} */ updateDelayedEvent(delayId: string, action: UpdateDelayedEventAction): Promise; /** {@inheritDoc WidgetApi.readEventRelations} */ readEventRelations(eventId: string, options?: { roomId?: string; limit?: number; from?: string; relationType?: string; eventType?: string; direction?: 'f' | 'b'; }): Promise<{ chunk: Array; nextToken?: string; }>; /** {@inheritDoc WidgetApi.sendToDeviceMessage} */ sendToDeviceMessage(eventType: string, encrypted: boolean, content: { [userId: string]: { [deviceId: string | '*']: T; }; }): Promise; /** {@inheritDoc WidgetApi.observeToDeviceMessages} */ observeToDeviceMessages(eventType: string): Observable>; /** {@inheritDoc WidgetApi.openModal} */ openModal = Record, U extends IModalWidgetCreateData = IModalWidgetCreateData>(pathName: string, name: string, options?: { buttons?: IModalWidgetOpenRequestDataButton[]; data?: U; }): Promise; /** {@inheritDoc WidgetApi.setModalButtonEnabled} */ setModalButtonEnabled(buttonId: ModalButtonID, isEnabled: boolean): Promise; /** {@inheritDoc WidgetApi.observeModalButtons} */ observeModalButtons(): Observable; /** {@inheritDoc WidgetApi.closeModal} */ closeModal(data?: T): Promise; /** {@inheritdoc WidgetApi.navigateTo} */ navigateTo(uri: string): Promise; /** {@inheritdoc WidgetApi.requestOpenIDConnectToken} */ requestOpenIDConnectToken(): Promise; private requestOpenIDConnectTokenInternal; /** {@inheritdoc WidgetApi.observeTurnServers} */ observeTurnServers(): Observable; /** {@inheritdoc WidgetApi.searchUserDirectory} */ searchUserDirectory(searchTerm: string, options?: { limit?: number | undefined; } | undefined): Promise<{ results: Array<{ userId: string; displayName?: string; avatarUrl?: string; }>; }>; /** {@inheritdoc WidgetApi.getMediaConfig} */ getMediaConfig(): Promise; /** {@inheritdoc WidgetApi.uploadFile} */ uploadFile(file: XMLHttpRequestBodyInit): Promise; /** {@inheritdoc WidgetApi.downloadFile} */ downloadFile(contentUrl: string): Promise; }