@tagea/capacitor-matrix 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -12
- package/android/src/main/kotlin/de/tremaze/capacitor/matrix/CapMatrix.kt +168 -9
- package/dist/docs.json +69 -0
- package/dist/esm/definitions.d.ts +10 -0
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +1 -0
- package/dist/esm/web.js +43 -4
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +43 -4
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +43 -4
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/CapMatrixPlugin/CapMatrix.swift +76 -16
- package/package.json +1 -1
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst Matrix = registerPlugin('Matrix', {\n web: () => import('./web').then((m) => new m.MatrixWeb()),\n});\nexport * from './definitions';\nexport { Matrix };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { initAsync as initCryptoWasm } from '@matrix-org/matrix-sdk-crypto-wasm';\nimport { createClient, ClientEvent, RoomEvent, RoomMemberEvent, Direction, MsgType, EventType, RelationType, UserEvent, } from 'matrix-js-sdk';\nimport { deriveRecoveryKeyFromPassphrase } from 'matrix-js-sdk/lib/crypto-api/key-passphrase';\nimport { decodeRecoveryKey } from 'matrix-js-sdk/lib/crypto-api/recovery-key';\nconst SESSION_KEY = 'matrix_session';\nexport class MatrixWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this._cryptoCallbacks = {\n getSecretStorageKey: async (opts) => {\n var _a, _b;\n const keyId = Object.keys(opts.keys)[0];\n if (!keyId)\n return null;\n // Exact match: only return the cached raw key for the key ID it was cached under.\n // (bootstrapSecretStorage uses createSecretStorageKey for the new key, so this\n // path is only reached for an already-established key — e.g. after recoverAndSetup.)\n if (this.secretStorageKey && this.secretStorageKeyId === keyId) {\n return [keyId, this.secretStorageKey];\n }\n // Derive from the current passphrase (set during recoverAndSetup)\n if (this.recoveryPassphrase) {\n const keyInfo = opts.keys[keyId];\n if (keyInfo === null || keyInfo === void 0 ? void 0 : keyInfo.passphrase) {\n const derived = await deriveRecoveryKeyFromPassphrase(this.recoveryPassphrase, keyInfo.passphrase.salt, keyInfo.passphrase.iterations, (_a = keyInfo.passphrase.bits) !== null && _a !== void 0 ? _a : 256);\n // Cache with the correct key ID for subsequent calls\n this.secretStorageKey = derived;\n this.secretStorageKeyId = keyId;\n return [keyId, derived];\n }\n }\n // Fallback: derive from the OLD passphrase when bootstrapSecretStorage is\n // migrating existing cross-signing / backup secrets into a new SSSS.\n if (this.fallbackPassphrase) {\n const keyInfo = opts.keys[keyId];\n if (keyInfo === null || keyInfo === void 0 ? void 0 : keyInfo.passphrase) {\n const derived = await deriveRecoveryKeyFromPassphrase(this.fallbackPassphrase, keyInfo.passphrase.salt, keyInfo.passphrase.iterations, (_b = keyInfo.passphrase.bits) !== null && _b !== void 0 ? _b : 256);\n return [keyId, derived];\n }\n }\n return null;\n },\n cacheSecretStorageKey: (keyId, _keyInfo, key) => {\n this.secretStorageKey = key;\n this.secretStorageKeyId = keyId;\n },\n };\n }\n // ── Auth ──────────────────────────────────────────────\n async login(options) {\n const tmpClient = createClient({ baseUrl: options.homeserverUrl });\n const res = await tmpClient.loginWithPassword(options.userId, options.password);\n this.client = createClient({\n baseUrl: options.homeserverUrl,\n accessToken: res.access_token,\n userId: res.user_id,\n deviceId: res.device_id,\n cryptoCallbacks: this._cryptoCallbacks,\n refreshToken: 'jwt-placeholder',\n tokenRefreshFunction: this.createTokenRefreshFunction(),\n });\n const session = {\n accessToken: res.access_token,\n userId: res.user_id,\n deviceId: res.device_id,\n homeserverUrl: options.homeserverUrl,\n };\n this.persistSession(session);\n return session;\n }\n async loginWithToken(options) {\n // Stop any previously running client to avoid parallel instances that\n // would deadlock on the shared IndexedDB crypto store.\n if (this.client) {\n this.client.stopClient();\n this.client = undefined;\n }\n this.client = createClient({\n baseUrl: options.homeserverUrl,\n accessToken: options.accessToken,\n userId: options.userId,\n deviceId: options.deviceId,\n cryptoCallbacks: this._cryptoCallbacks,\n refreshToken: 'jwt-placeholder',\n tokenRefreshFunction: this.createTokenRefreshFunction(),\n });\n const session = {\n accessToken: options.accessToken,\n userId: options.userId,\n deviceId: options.deviceId,\n homeserverUrl: options.homeserverUrl,\n };\n this.persistSession(session);\n return session;\n }\n async logout() {\n if (this.client) {\n this.client.stopClient();\n try {\n await this.client.logout(true);\n }\n catch (_a) {\n // ignore logout errors (e.g. token already invalidated)\n }\n this.client = undefined;\n }\n localStorage.removeItem(SESSION_KEY);\n }\n async clearAllData() {\n if (this.client) {\n this.client.stopClient();\n this.client = undefined;\n }\n // Reset all cached crypto state\n this.secretStorageKey = undefined;\n this.secretStorageKeyId = undefined;\n this.recoveryPassphrase = undefined;\n this.fallbackPassphrase = undefined;\n localStorage.removeItem(SESSION_KEY);\n await this.deleteCryptoStore();\n }\n async getSession() {\n const raw = localStorage.getItem(SESSION_KEY);\n if (!raw)\n return null;\n try {\n return JSON.parse(raw);\n }\n catch (_a) {\n return null;\n }\n }\n async updateAccessToken(options) {\n this.requireClient();\n this.client.setAccessToken(options.accessToken);\n // Update persisted session\n const raw = localStorage.getItem(SESSION_KEY);\n if (raw) {\n const session = JSON.parse(raw);\n session.accessToken = options.accessToken;\n this.persistSession(session);\n }\n // Resolve pending tokenRefreshFunction promise (if SDK is waiting)\n if (this._tokenRefreshResolve) {\n const resolve = this._tokenRefreshResolve;\n this._tokenRefreshResolve = undefined;\n if (this._tokenRefreshTimeout) {\n clearTimeout(this._tokenRefreshTimeout);\n this._tokenRefreshTimeout = undefined;\n }\n resolve({ accessToken: options.accessToken, refreshToken: 'jwt-placeholder' });\n }\n }\n // ── Sync ──────────────────────────────────────────────\n async startSync() {\n this.requireClient();\n this.client.on(ClientEvent.Sync, (state, _prev, data) => {\n var _a;\n const mapped = this.mapSyncState(state);\n this.notifyListeners('syncStateChange', {\n state: mapped,\n error: (_a = data === null || data === void 0 ? void 0 : data.error) === null || _a === void 0 ? void 0 : _a.message,\n });\n });\n this.client.on(RoomEvent.Timeline, (event, room, toStartOfTimeline) => {\n var _a;\n // Skip back-paginated events — they're loaded via getRoomMessages.\n if (toStartOfTimeline)\n return;\n this.notifyListeners('messageReceived', {\n event: this.serializeEvent(event, room === null || room === void 0 ? void 0 : room.roomId),\n });\n // When an encrypted event arrives, listen for decryption and re-notify\n if (event.isBeingDecrypted() || event.getType() === 'm.room.encrypted') {\n event.once('Event.decrypted', () => {\n this.notifyListeners('messageReceived', {\n event: this.serializeEvent(event, room === null || room === void 0 ? void 0 : room.roomId),\n });\n });\n }\n // When a reaction or redaction arrives, re-emit the parent event with updated aggregated reactions\n if (event.getType() === EventType.Reaction || event.getType() === EventType.RoomRedaction) {\n const rel = (_a = event.getContent()) === null || _a === void 0 ? void 0 : _a['m.relates_to'];\n const targetId = (rel === null || rel === void 0 ? void 0 : rel.event_id) || event.getAssociatedId();\n if (targetId && room) {\n const targetEvent = room.findEventById(targetId);\n if (targetEvent) {\n // Small delay to let the SDK finish aggregation\n setTimeout(() => {\n this.notifyListeners('messageReceived', {\n event: this.serializeEvent(targetEvent, room.roomId),\n });\n }, 100);\n }\n }\n }\n });\n this.client.on(RoomEvent.Receipt, (event, room) => {\n var _a, _b;\n const receiptContent = event.getContent();\n for (const [eventId, receiptTypes] of Object.entries(receiptContent)) {\n const mRead = (_a = receiptTypes['m.read']) !== null && _a !== void 0 ? _a : {};\n for (const userId of Object.keys(mRead)) {\n this.notifyListeners('receiptReceived', {\n roomId: room.roomId,\n eventId,\n userId,\n });\n }\n }\n // Re-emit own sent messages with updated read status\n const myUserId = (_b = this.client) === null || _b === void 0 ? void 0 : _b.getUserId();\n if (myUserId) {\n const timeline = room.getLiveTimeline().getEvents();\n // Walk backwards through recent events; stop after checking a reasonable batch\n const limit = Math.min(timeline.length, 50);\n for (let i = timeline.length - 1; i >= timeline.length - limit; i--) {\n const evt = timeline[i];\n if (evt.getSender() !== myUserId)\n continue;\n const serialized = this.serializeEvent(evt, room.roomId);\n if (serialized.status === 'read') {\n this.notifyListeners('messageReceived', { event: serialized });\n }\n }\n }\n });\n this.client.on(RoomEvent.Name, (room) => {\n this.notifyListeners('roomUpdated', {\n roomId: room.roomId,\n summary: this.serializeRoom(room),\n });\n });\n this.client.on(RoomMemberEvent.Typing, (_event, member) => {\n const roomId = member === null || member === void 0 ? void 0 : member.roomId;\n if (roomId) {\n const room = this.client.getRoom(roomId);\n if (room) {\n const userIds = room\n .getMembers()\n .filter((m) => m.typing)\n .map((m) => m.userId);\n this.notifyListeners('typingChanged', { roomId, userIds });\n }\n }\n });\n this.client.on(UserEvent.Presence, (_event, user) => {\n var _a, _b, _c;\n this.notifyListeners('presenceChanged', {\n userId: user.userId,\n presence: {\n presence: (_a = user.presence) !== null && _a !== void 0 ? _a : 'offline',\n statusMsg: (_b = user.presenceStatusMsg) !== null && _b !== void 0 ? _b : undefined,\n lastActiveAgo: (_c = user.lastActiveAgo) !== null && _c !== void 0 ? _c : undefined,\n },\n });\n });\n await this.client.startClient({ initialSyncLimit: 20 });\n }\n async stopSync() {\n this.requireClient();\n this.client.stopClient();\n }\n async getSyncState() {\n this.requireClient();\n const raw = this.client.getSyncState();\n return { state: this.mapSyncState(raw) };\n }\n // ── Rooms ─────────────────────────────────────────────\n async createRoom(options) {\n var _a;\n this.requireClient();\n const createOpts = {\n visibility: 'private',\n };\n if (options.name)\n createOpts.name = options.name;\n if (options.topic)\n createOpts.topic = options.topic;\n if ((_a = options.invite) === null || _a === void 0 ? void 0 : _a.length)\n createOpts.invite = options.invite;\n if (options.preset)\n createOpts.preset = options.preset;\n if (options.isDirect)\n createOpts.is_direct = true;\n const initialState = [];\n if (options.isEncrypted) {\n initialState.push({\n type: 'm.room.encryption',\n state_key: '',\n content: { algorithm: 'm.megolm.v1.aes-sha2' },\n });\n }\n if (options.historyVisibility) {\n initialState.push({\n type: 'm.room.history_visibility',\n state_key: '',\n content: { history_visibility: options.historyVisibility },\n });\n }\n if (initialState.length > 0) {\n createOpts.initial_state = initialState;\n }\n const res = await this.client.createRoom(createOpts);\n return { roomId: res.room_id };\n }\n async getRooms() {\n this.requireClient();\n const rooms = this.client.getRooms().map((r) => this.serializeRoom(r));\n return { rooms };\n }\n async getRoomMembers(options) {\n this.requireClient();\n const room = this.client.getRoom(options.roomId);\n if (!room)\n throw new Error(`Room ${options.roomId} not found`);\n await room.loadMembersIfNeeded();\n const members = room.getMembers().map((m) => {\n var _a, _b;\n return ({\n userId: m.userId,\n displayName: (_a = m.name) !== null && _a !== void 0 ? _a : undefined,\n membership: m.membership,\n avatarUrl: (_b = m.getMxcAvatarUrl()) !== null && _b !== void 0 ? _b : undefined,\n });\n });\n return { members };\n }\n async joinRoom(options) {\n this.requireClient();\n const room = await this.client.joinRoom(options.roomIdOrAlias);\n return { roomId: room.roomId };\n }\n async leaveRoom(options) {\n this.requireClient();\n await this.client.leave(options.roomId);\n }\n async forgetRoom(options) {\n this.requireClient();\n await this.client.forget(options.roomId);\n }\n // ── Messaging ─────────────────────────────────────────\n async sendMessage(options) {\n var _a, _b, _c;\n this.requireClient();\n const msgtype = (_a = options.msgtype) !== null && _a !== void 0 ? _a : 'm.text';\n const mediaTypes = ['m.image', 'm.audio', 'm.video', 'm.file'];\n if (mediaTypes.includes(msgtype) && options.fileUri) {\n // Media message: upload file then send\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const uploadRes = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n const mxcUrl = uploadRes.content_uri;\n const content = {\n msgtype,\n body: options.body || options.fileName || 'file',\n url: mxcUrl,\n info: Object.assign(Object.assign(Object.assign({ mimetype: options.mimeType, size: (_b = options.fileSize) !== null && _b !== void 0 ? _b : blob.size }, (options.duration !== undefined && { duration: options.duration })), (options.width !== undefined && { w: options.width })), (options.height !== undefined && { h: options.height })),\n };\n const res = await this.client.sendMessage(options.roomId, content);\n return { eventId: res.event_id };\n }\n // Text message\n const msgtypeMap = {\n 'm.text': MsgType.Text,\n 'm.notice': MsgType.Notice,\n 'm.emote': MsgType.Emote,\n };\n const mappedType = (_c = msgtypeMap[msgtype]) !== null && _c !== void 0 ? _c : MsgType.Text;\n const res = await this.client.sendMessage(options.roomId, {\n msgtype: mappedType,\n body: options.body,\n });\n return { eventId: res.event_id };\n }\n async editMessage(options) {\n var _a, _b;\n this.requireClient();\n const msgtype = (_a = options.msgtype) !== null && _a !== void 0 ? _a : 'm.text';\n const mediaTypes = ['m.image', 'm.audio', 'm.video', 'm.file'];\n let newContent;\n if (mediaTypes.includes(msgtype) && options.fileUri) {\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const uploadRes = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n newContent = {\n msgtype,\n body: options.newBody || options.fileName || 'file',\n url: uploadRes.content_uri,\n info: Object.assign(Object.assign(Object.assign({ mimetype: options.mimeType, size: (_b = options.fileSize) !== null && _b !== void 0 ? _b : blob.size }, (options.duration !== undefined && { duration: options.duration })), (options.width !== undefined && { w: options.width })), (options.height !== undefined && { h: options.height })),\n };\n }\n else {\n newContent = {\n msgtype,\n body: options.newBody,\n };\n }\n const content = Object.assign(Object.assign({}, newContent), { body: `* ${options.newBody}`, 'm.new_content': newContent, 'm.relates_to': {\n rel_type: 'm.replace',\n event_id: options.eventId,\n } });\n const res = await this.client.sendMessage(options.roomId, content);\n return { eventId: res.event_id };\n }\n async sendReply(options) {\n var _a, _b;\n this.requireClient();\n const msgtype = (_a = options.msgtype) !== null && _a !== void 0 ? _a : 'm.text';\n const mediaTypes = ['m.image', 'm.audio', 'm.video', 'm.file'];\n let content;\n if (mediaTypes.includes(msgtype) && options.fileUri) {\n // Media reply: upload file then send with reply relation\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const uploadRes = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n content = {\n msgtype,\n body: options.body || options.fileName || 'file',\n url: uploadRes.content_uri,\n info: Object.assign(Object.assign(Object.assign({ mimetype: options.mimeType, size: (_b = options.fileSize) !== null && _b !== void 0 ? _b : blob.size }, (options.duration !== undefined && { duration: options.duration })), (options.width !== undefined && { w: options.width })), (options.height !== undefined && { h: options.height })),\n 'm.relates_to': {\n 'm.in_reply_to': {\n event_id: options.replyToEventId,\n },\n },\n };\n }\n else {\n // Text reply\n content = {\n msgtype: MsgType.Text,\n body: options.body,\n 'm.relates_to': {\n 'm.in_reply_to': {\n event_id: options.replyToEventId,\n },\n },\n };\n }\n const res = await this.client.sendMessage(options.roomId, content);\n return { eventId: res.event_id };\n }\n async getRoomMessages(options) {\n var _a, _b, _c, _d, _e;\n this.requireClient();\n const limit = (_a = options.limit) !== null && _a !== void 0 ? _a : 20;\n const room = this.client.getRoom(options.roomId);\n // If no explicit pagination token, return events from the synced timeline\n if (!options.from && room) {\n // Paginate backwards so we have enough events (initial sync may be small)\n try {\n await this.client.scrollback(room, limit);\n }\n catch (_f) {\n // scrollback may fail if there's no more history\n }\n const timeline = room.getLiveTimeline();\n const timelineEvents = timeline.getEvents();\n // Filter out reactions and redactions before slicing — they're aggregated into parent events\n const displayableEvents = timelineEvents.filter((e) => {\n const t = e.getType();\n return t !== EventType.Reaction && t !== EventType.RoomRedaction;\n });\n const events = displayableEvents\n .map((e) => this.serializeEvent(e, options.roomId))\n .sort((a, b) => a.originServerTs - b.originServerTs);\n const backToken = (_b = timeline.getPaginationToken(Direction.Backward)) !== null && _b !== void 0 ? _b : undefined;\n return { events, nextBatch: backToken };\n }\n // Paginate further back using the token\n const fromToken = (_c = options.from) !== null && _c !== void 0 ? _c : null;\n const res = await this.client.createMessagesRequest(options.roomId, fromToken, limit, Direction.Backward);\n const events = ((_d = res.chunk) !== null && _d !== void 0 ? _d : []).map((e) => {\n var _a;\n return ({\n eventId: e.event_id,\n roomId: options.roomId,\n senderId: e.sender,\n type: e.type,\n content: ((_a = e.content) !== null && _a !== void 0 ? _a : {}),\n originServerTs: e.origin_server_ts,\n });\n });\n return { events, nextBatch: (_e = res.end) !== null && _e !== void 0 ? _e : undefined };\n }\n async markRoomAsRead(options) {\n this.requireClient();\n const room = this.client.getRoom(options.roomId);\n if (room) {\n const event = room.findEventById(options.eventId);\n if (event) {\n await this.client.sendReadReceipt(event);\n return;\n }\n }\n // Fallback to HTTP request if event not found locally\n await this.client.setRoomReadMarkersHttpRequest(options.roomId, options.eventId, options.eventId);\n }\n async refreshEventStatuses(options) {\n this.requireClient();\n const room = this.client.getRoom(options.roomId);\n if (!room)\n return { events: [] };\n const events = [];\n for (const eid of options.eventIds) {\n const event = room.findEventById(eid);\n if (event) {\n events.push(this.serializeEvent(event, options.roomId));\n }\n }\n return { events };\n }\n // ── Redactions & Reactions ───────────────────────────────\n async redactEvent(options) {\n this.requireClient();\n await this.client.redactEvent(options.roomId, options.eventId, undefined, {\n reason: options.reason,\n });\n }\n async sendReaction(options) {\n this.requireClient();\n const myUserId = this.client.getUserId();\n // Check if the user already reacted with this key — if so, toggle off (redact)\n const room = this.client.getRoom(options.roomId);\n if (room && myUserId) {\n try {\n const relations = room.relations.getChildEventsForEvent(options.eventId, RelationType.Annotation, EventType.Reaction);\n if (relations) {\n const existing = relations.getRelations().find((e) => { var _a, _b; return e.getSender() === myUserId && ((_b = (_a = e.getContent()) === null || _a === void 0 ? void 0 : _a['m.relates_to']) === null || _b === void 0 ? void 0 : _b.key) === options.key; });\n if (existing) {\n const existingId = existing.getId();\n if (existingId) {\n await this.client.redactEvent(options.roomId, existingId);\n return { eventId: existingId };\n }\n }\n }\n }\n catch (_a) {\n // fall through to send\n }\n }\n const res = await this.client.sendEvent(options.roomId, EventType.Reaction, {\n 'm.relates_to': {\n rel_type: RelationType.Annotation,\n event_id: options.eventId,\n key: options.key,\n },\n });\n return { eventId: res.event_id };\n }\n // ── Room Management ────────────────────────────────────\n async setRoomName(options) {\n this.requireClient();\n await this.client.setRoomName(options.roomId, options.name);\n }\n async setRoomTopic(options) {\n this.requireClient();\n await this.client.setRoomTopic(options.roomId, options.topic);\n }\n async setRoomAvatar(options) {\n this.requireClient();\n await this.client.sendStateEvent(options.roomId, 'm.room.avatar', { url: options.mxcUrl });\n }\n async inviteUser(options) {\n this.requireClient();\n await this.client.invite(options.roomId, options.userId);\n }\n async kickUser(options) {\n this.requireClient();\n await this.client.kick(options.roomId, options.userId, options.reason);\n }\n async banUser(options) {\n this.requireClient();\n await this.client.ban(options.roomId, options.userId, options.reason);\n }\n async unbanUser(options) {\n this.requireClient();\n await this.client.unban(options.roomId, options.userId);\n }\n // ── Typing ─────────────────────────────────────────────\n async sendTyping(options) {\n var _a;\n this.requireClient();\n await this.client.sendTyping(options.roomId, options.isTyping, (_a = options.timeout) !== null && _a !== void 0 ? _a : 30000);\n }\n // ── Media ──────────────────────────────────────────────\n async getMediaUrl(options) {\n this.requireClient();\n // Use the authenticated media endpoint (Matrix v1.11+)\n const mxcPath = options.mxcUrl.replace('mxc://', '');\n const baseUrl = this.client.getHomeserverUrl().replace(/\\/$/, '');\n const accessToken = this.client.getAccessToken();\n const httpUrl = `${baseUrl}/_matrix/client/v1/media/download/${mxcPath}?access_token=${accessToken}`;\n return { httpUrl };\n }\n async getThumbnailUrl(options) {\n var _a;\n this.requireClient();\n const mxcPath = options.mxcUrl.replace('mxc://', '');\n const baseUrl = this.client.getHomeserverUrl().replace(/\\/$/, '');\n const accessToken = this.client.getAccessToken();\n const method = (_a = options.method) !== null && _a !== void 0 ? _a : 'scale';\n const httpUrl = `${baseUrl}/_matrix/client/v1/media/thumbnail/${mxcPath}?width=${options.width}&height=${options.height}&method=${method}&access_token=${accessToken}`;\n return { httpUrl };\n }\n async uploadContent(options) {\n this.requireClient();\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const res = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n return { contentUri: res.content_uri };\n }\n // ── Presence ───────────────────────────────────────────\n async setPresence(options) {\n this.requireClient();\n await this.client.setPresence({\n presence: options.presence,\n status_msg: options.statusMsg,\n });\n }\n async getPresence(options) {\n var _a, _b, _c;\n this.requireClient();\n const user = this.client.getUser(options.userId);\n return {\n presence: (_a = user === null || user === void 0 ? void 0 : user.presence) !== null && _a !== void 0 ? _a : 'offline',\n statusMsg: (_b = user === null || user === void 0 ? void 0 : user.presenceStatusMsg) !== null && _b !== void 0 ? _b : undefined,\n lastActiveAgo: (_c = user === null || user === void 0 ? void 0 : user.lastActiveAgo) !== null && _c !== void 0 ? _c : undefined,\n };\n }\n // ── Device Management ──────────────────────────────────\n async getDevices() {\n var _a, _b;\n this.requireClient();\n const res = await this.client.getDevices();\n const crypto = this.client.getCrypto();\n const myUserId = (_a = this.client.getUserId()) !== null && _a !== void 0 ? _a : '';\n const devices = await Promise.all(((_b = res.devices) !== null && _b !== void 0 ? _b : []).map(async (d) => {\n var _a, _b, _c, _d;\n let isCrossSigningVerified;\n if (crypto) {\n try {\n const status = await crypto.getDeviceVerificationStatus(myUserId, d.device_id);\n isCrossSigningVerified = (_a = status === null || status === void 0 ? void 0 : status.crossSigningVerified) !== null && _a !== void 0 ? _a : false;\n }\n catch (_e) {\n // ignore — crypto may not be ready\n }\n }\n return {\n deviceId: d.device_id,\n displayName: (_b = d.display_name) !== null && _b !== void 0 ? _b : undefined,\n lastSeenTs: (_c = d.last_seen_ts) !== null && _c !== void 0 ? _c : undefined,\n lastSeenIp: (_d = d.last_seen_ip) !== null && _d !== void 0 ? _d : undefined,\n isCrossSigningVerified,\n };\n }));\n return { devices };\n }\n async deleteDevice(options) {\n this.requireClient();\n await this.client.deleteDevice(options.deviceId, options.auth);\n }\n // ── Push ──────────────────────────────────────────────\n async setPusher(options) {\n var _a;\n this.requireClient();\n await this.client.setPusher({\n pushkey: options.pushkey,\n kind: (_a = options.kind) !== null && _a !== void 0 ? _a : undefined,\n app_id: options.appId,\n app_display_name: options.appDisplayName,\n device_display_name: options.deviceDisplayName,\n lang: options.lang,\n data: options.data,\n });\n }\n // ── Encryption ──────────────────────────────────────────\n async initializeCrypto() {\n var _a, _b;\n this.requireClient();\n // Pre-initialize the WASM module with a root-relative URL before\n // matrix-js-sdk tries with a URL relative to the bundled chunk\n // (which breaks in bundlers like esbuild/Vite that relocate modules).\n // The host app must serve the WASM file at /matrix_sdk_crypto_wasm_bg.wasm\n // (e.g. via an asset copy in angular.json / project.json).\n // initAsync's internal guard ensures this is a no-op if already loaded.\n try {\n await initCryptoWasm(new URL('/matrix_sdk_crypto_wasm_bg.wasm', window.location.origin));\n }\n catch (e) {\n console.warn('[CapMatrix] WASM pre-init failed, falling back to default URL:', e);\n }\n const cryptoOpts = { cryptoDatabasePrefix: 'matrix-js-sdk' };\n try {\n await this.client.initRustCrypto(cryptoOpts);\n }\n catch (e) {\n // After logout + re-login the server issues a new deviceId, but the\n // shared IndexedDB crypto store still references the old one.\n // Delete the stale store and retry so crypto initialises cleanly.\n if ((_a = e === null || e === void 0 ? void 0 : e.message) === null || _a === void 0 ? void 0 : _a.includes(\"account in the store doesn't match\")) {\n await this.deleteCryptoStore();\n await this.client.initRustCrypto(cryptoOpts);\n }\n else {\n throw e;\n }\n }\n // Flush the initial /keys/query request that initRustCrypto enqueues.\n // Without this, any call to getIdentity (e.g. via getCrossSigningStatus)\n // will spin-wait and emit periodic WARN logs until sync processes it.\n const crypto = this.client.getCrypto();\n if ((_b = crypto === null || crypto === void 0 ? void 0 : crypto.outgoingRequestsManager) === null || _b === void 0 ? void 0 : _b.doProcessOutgoingRequests) {\n await crypto.outgoingRequestsManager.doProcessOutgoingRequests();\n }\n }\n async deleteCryptoStore() {\n if (typeof indexedDB === 'undefined')\n return;\n try {\n const dbs = await indexedDB.databases();\n await Promise.all(dbs\n .filter((db) => { var _a; return (_a = db.name) === null || _a === void 0 ? void 0 : _a.startsWith('matrix-js-sdk'); })\n .map((db) => new Promise((resolve) => {\n const req = indexedDB.deleteDatabase(db.name);\n req.onsuccess = () => resolve();\n req.onerror = () => resolve();\n })));\n }\n catch (_a) {\n // indexedDB.databases() not available in all environments\n }\n }\n async getEncryptionStatus() {\n this.requireClient();\n const crypto = this.client.getCrypto();\n if (!crypto) {\n return {\n isCrossSigningReady: false,\n crossSigningStatus: { hasMaster: false, hasSelfSigning: false, hasUserSigning: false, isReady: false },\n isKeyBackupEnabled: false,\n isSecretStorageReady: false,\n };\n }\n const csReady = await crypto.isCrossSigningReady();\n const csStatus = await crypto.getCrossSigningStatus();\n const backupVersion = await crypto.getActiveSessionBackupVersion();\n // Use getSecretStorageStatus().defaultKeyId to check if secret storage was\n // set up at all, rather than isSecretStorageReady() which also checks that\n // cross-signing keys are stored (too strict for Phase 1).\n const ssStatus = await crypto.getSecretStorageStatus();\n const ssHasKey = ssStatus.defaultKeyId !== null;\n return {\n isCrossSigningReady: csReady,\n crossSigningStatus: {\n hasMaster: csStatus.publicKeysOnDevice,\n hasSelfSigning: csStatus.privateKeysCachedLocally.selfSigningKey,\n hasUserSigning: csStatus.privateKeysCachedLocally.userSigningKey,\n isReady: csReady,\n },\n isKeyBackupEnabled: backupVersion !== null,\n keyBackupVersion: backupVersion !== null && backupVersion !== void 0 ? backupVersion : undefined,\n isSecretStorageReady: ssHasKey,\n };\n }\n async bootstrapCrossSigning() {\n const crypto = await this.ensureCrypto();\n await crypto.bootstrapCrossSigning({\n authUploadDeviceSigningKeys: async (makeRequest) => {\n var _a;\n // UIA flow: attempt with dummy auth, fall back to session-based retry\n try {\n await makeRequest({ type: 'm.login.dummy' });\n }\n catch (e) {\n const session = (_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.session;\n if (session) {\n await makeRequest({ type: 'm.login.dummy', session });\n }\n else {\n throw e;\n }\n }\n },\n });\n }\n async setupKeyBackup() {\n const crypto = await this.ensureCrypto();\n await crypto.resetKeyBackup();\n const version = await crypto.getActiveSessionBackupVersion();\n return { exists: true, version: version !== null && version !== void 0 ? version : undefined, enabled: true };\n }\n async getKeyBackupStatus() {\n this.requireClient();\n const crypto = this.requireCrypto();\n const version = await crypto.getActiveSessionBackupVersion();\n return {\n exists: version !== null,\n version: version !== null && version !== void 0 ? version : undefined,\n enabled: version !== null,\n };\n }\n async restoreKeyBackup(_options) {\n var _a;\n this.requireClient();\n const crypto = this.requireCrypto();\n const result = await crypto.restoreKeyBackup();\n return { importedKeys: (_a = result === null || result === void 0 ? void 0 : result.imported) !== null && _a !== void 0 ? _a : 0 };\n }\n async setupRecovery(options) {\n var _a;\n const crypto = await this.ensureCrypto();\n const keyInfo = await crypto.createRecoveryKeyFromPassphrase(options === null || options === void 0 ? void 0 : options.passphrase);\n // Pre-cache the new key bytes. secretStorageKeyId will be set by\n // cacheSecretStorageKey once bootstrapSecretStorage writes the new key\n // into SSSS and the SDK calls back.\n this.secretStorageKey = keyInfo.privateKey;\n this.secretStorageKeyId = undefined;\n // If the caller provides the same or old passphrase, keep it so\n // getSecretStorageKey can derive the key for the SDK.\n if (options === null || options === void 0 ? void 0 : options.passphrase) {\n this.recoveryPassphrase = options.passphrase;\n }\n // If the caller knows the OLD passphrase, keep it as fallbackPassphrase so\n // that getSecretStorageKey can decrypt the existing SSSS during\n // bootstrapSecretStorage's migration of cross-signing / backup secrets.\n if (options === null || options === void 0 ? void 0 : options.existingPassphrase) {\n this.fallbackPassphrase = options.existingPassphrase;\n }\n try {\n await crypto.bootstrapSecretStorage({\n createSecretStorageKey: async () => keyInfo,\n setupNewSecretStorage: true,\n setupNewKeyBackup: true,\n });\n }\n finally {\n // Always clear transient crypto state so it doesn't bleed into subsequent calls.\n this.fallbackPassphrase = undefined;\n this.recoveryPassphrase = undefined;\n }\n return { recoveryKey: (_a = keyInfo.encodedPrivateKey) !== null && _a !== void 0 ? _a : '' };\n }\n async isRecoveryEnabled() {\n const crypto = await this.ensureCrypto();\n const ready = await crypto.isSecretStorageReady();\n return { enabled: ready };\n }\n async recoverAndSetup(options) {\n const crypto = await this.ensureCrypto();\n // Derive/decode the secret storage key\n if (options.recoveryKey) {\n this.secretStorageKey = decodeRecoveryKey(options.recoveryKey);\n }\n else if (options.passphrase) {\n // Store passphrase — the getSecretStorageKey callback will derive\n // the key using the server's stored PBKDF2 params (salt, iterations)\n this.recoveryPassphrase = options.passphrase;\n this.secretStorageKey = undefined; // Clear any stale raw key\n }\n else {\n throw new Error('Either recoveryKey or passphrase must be provided');\n }\n // Load the backup decryption key from secret storage into the Rust crypto store.\n // This triggers the getSecretStorageKey callback.\n try {\n console.debug('[CapMatrix] Loading backup key from SSSS…');\n await crypto.loadSessionBackupPrivateKeyFromSecretStorage();\n console.debug('[CapMatrix] Backup key loaded successfully');\n }\n catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.warn('[CapMatrix] loadSessionBackupPrivateKey failed:', msg);\n if (msg.includes('decryption key does not match')) {\n console.info('[CapMatrix] Backup key mismatch — re-creating backup via bootstrapSecretStorage');\n await crypto.bootstrapSecretStorage({\n setupNewKeyBackup: true,\n });\n console.debug('[CapMatrix] bootstrapSecretStorage complete');\n }\n else {\n this.secretStorageKey = undefined;\n this.secretStorageKeyId = undefined;\n this.recoveryPassphrase = undefined;\n throw e;\n }\n }\n // Activate backup in the running client\n console.debug('[CapMatrix] Enabling key backup…');\n await crypto.checkKeyBackupAndEnable();\n const backupVersion = await crypto.getActiveSessionBackupVersion();\n console.debug('[CapMatrix] Key backup version:', backupVersion);\n // Restore cross-signing trust for the current device.\n console.debug('[CapMatrix] Bootstrapping cross-signing…');\n try {\n await crypto.bootstrapCrossSigning({\n authUploadDeviceSigningKeys: async (makeRequest) => {\n var _a;\n try {\n await makeRequest({ type: 'm.login.dummy' });\n }\n catch (e) {\n const session = (_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.session;\n if (session) {\n await makeRequest({ type: 'm.login.dummy', session });\n }\n else {\n throw e;\n }\n }\n },\n });\n console.debug('[CapMatrix] Cross-signing bootstrap succeeded');\n }\n catch (e) {\n console.error('[CapMatrix] Cross-signing bootstrap failed:', e);\n }\n // Log final status\n const csReady = await crypto.isCrossSigningReady();\n const csStatus = await crypto.getCrossSigningStatus();\n console.debug('[CapMatrix] Final status — isCrossSigningReady:', csReady, 'csStatus:', JSON.stringify(csStatus));\n }\n async verifyDevice(options) {\n const crypto = await this.ensureCrypto();\n await crypto.crossSignDevice(options.deviceId);\n }\n async resetRecoveryKey(options) {\n return this.setupRecovery(options);\n }\n async exportRoomKeys(options) {\n this.requireClient();\n const crypto = this.requireCrypto();\n const keys = await crypto.exportRoomKeysAsJson();\n // The exported JSON is not encrypted by default; for passphrase encryption\n // the caller should handle it, or we return the raw JSON\n void options.passphrase; // passphrase encryption is handled natively; on web we return raw\n return { data: keys };\n }\n async importRoomKeys(options) {\n this.requireClient();\n const crypto = this.requireCrypto();\n void options.passphrase; // passphrase decryption handled natively; on web we import raw\n await crypto.importRoomKeysAsJson(options.data);\n return { importedKeys: -1 }; // count not available from importRoomKeysAsJson\n }\n // ── Helpers ───────────────────────────────────────────\n requireClient() {\n if (!this.client) {\n throw new Error('Not logged in. Call login() or loginWithToken() first.');\n }\n }\n requireCrypto() {\n const crypto = this.client.getCrypto();\n if (!crypto) {\n throw new Error('Crypto not initialized. Call initializeCrypto() first.');\n }\n return crypto;\n }\n async ensureCrypto() {\n this.requireClient();\n if (!this.client.getCrypto()) {\n await this.initializeCrypto();\n }\n return this.requireCrypto();\n }\n persistSession(session) {\n localStorage.setItem(SESSION_KEY, JSON.stringify(session));\n }\n createTokenRefreshFunction() {\n return (_refreshToken) => {\n this.notifyListeners('tokenRefreshRequired', {});\n return new Promise((resolve, reject) => {\n if (this._tokenRefreshTimeout)\n clearTimeout(this._tokenRefreshTimeout);\n this._tokenRefreshResolve = resolve;\n this._tokenRefreshTimeout = setTimeout(() => {\n this._tokenRefreshResolve = undefined;\n reject(new Error('Token refresh timed out'));\n }, 30000);\n });\n };\n }\n serializeEvent(event, fallbackRoomId) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const roomId = (_b = (_a = event.getRoomId()) !== null && _a !== void 0 ? _a : fallbackRoomId) !== null && _b !== void 0 ? _b : '';\n // Redacted events should be marked clearly\n if (event.isRedacted()) {\n return {\n eventId: (_c = event.getId()) !== null && _c !== void 0 ? _c : '',\n roomId,\n senderId: (_d = event.getSender()) !== null && _d !== void 0 ? _d : '',\n type: 'm.room.redaction',\n content: { body: 'Message deleted' },\n originServerTs: event.getTs(),\n };\n }\n const content = Object.assign({}, ((_e = event.getContent()) !== null && _e !== void 0 ? _e : {}));\n // Include aggregated reactions from the room's relations container\n const eventId = event.getId();\n if (eventId && roomId) {\n const room = (_f = this.client) === null || _f === void 0 ? void 0 : _f.getRoom(roomId);\n if (room) {\n try {\n const relations = room.relations.getChildEventsForEvent(eventId, RelationType.Annotation, EventType.Reaction);\n if (relations) {\n const sorted = relations.getSortedAnnotationsByKey();\n if (sorted && sorted.length > 0) {\n content.reactions = sorted.map(([key, events]) => ({\n key,\n count: events.size,\n senders: Array.from(events).map((e) => e.getSender()),\n }));\n }\n }\n }\n catch (_l) {\n // relations may not be available\n }\n }\n }\n // Determine delivery/read status\n let status;\n const readBy = [];\n const myUserId = (_g = this.client) === null || _g === void 0 ? void 0 : _g.getUserId();\n const sender = event.getSender();\n const room = eventId && roomId ? (_h = this.client) === null || _h === void 0 ? void 0 : _h.getRoom(roomId) : undefined;\n if (sender === myUserId && eventId) {\n // Own message — check delivery status\n const evtStatus = event.status; // null = sent & echoed, 'sending', 'sent', etc.\n if (evtStatus === 'sending' || evtStatus === 'encrypting' || evtStatus === 'queued') {\n status = 'sending';\n }\n else {\n // Event is at least sent; check if anyone has read it\n if (room) {\n try {\n const members = room.getJoinedMembers();\n for (const member of members) {\n if (member.userId === myUserId)\n continue;\n if (room.hasUserReadEvent(member.userId, eventId)) {\n readBy.push(member.userId);\n }\n }\n }\n catch (_m) {\n // ignore errors\n }\n }\n status = readBy.length > 0 ? 'read' : 'sent';\n }\n }\n else if (eventId && room) {\n // Other's message — collect who has read it\n try {\n const members = room.getJoinedMembers();\n for (const member of members) {\n if (member.userId === sender)\n continue;\n if (room.hasUserReadEvent(member.userId, eventId)) {\n readBy.push(member.userId);\n }\n }\n }\n catch (_o) {\n // ignore\n }\n }\n // Include unsigned data (e.g. m.relations for edits, transaction_id for local echo)\n const unsignedData = (_j = event.getUnsigned) === null || _j === void 0 ? void 0 : _j.call(event);\n const unsigned = unsignedData && Object.keys(unsignedData).length > 0\n ? unsignedData\n : undefined;\n // Include state_key for state events (e.g. target user in m.room.member)\n const sk = (_k = event.getStateKey) === null || _k === void 0 ? void 0 : _k.call(event);\n return Object.assign(Object.assign({ eventId: eventId !== null && eventId !== void 0 ? eventId : '', roomId, senderId: sender !== null && sender !== void 0 ? sender : '', type: event.getType() }, (sk !== undefined && { stateKey: sk })), { content, originServerTs: event.getTs(), status, readBy: readBy.length > 0 ? readBy : undefined, unsigned });\n }\n serializeRoom(room) {\n var _a, _b, _c, _d, _e, _f;\n // Detect DM: check m.direct account data or guess from room state\n let isDirect = false;\n try {\n const directEvent = (_a = this.client) === null || _a === void 0 ? void 0 : _a.getAccountData('m.direct');\n if (directEvent) {\n const directContent = directEvent.getContent();\n for (const roomIds of Object.values(directContent)) {\n if (roomIds.includes(room.roomId)) {\n isDirect = true;\n break;\n }\n }\n }\n }\n catch (_g) {\n // ignore\n }\n // Get avatar URL\n let avatarUrl;\n const avatarEvent = room.currentState.getStateEvents('m.room.avatar', '');\n if (avatarEvent) {\n const mxcUrl = (_b = avatarEvent.getContent()) === null || _b === void 0 ? void 0 : _b.url;\n if (mxcUrl) {\n avatarUrl = mxcUrl;\n }\n }\n return {\n roomId: room.roomId,\n name: room.name,\n topic: (_e = (_d = (_c = room.currentState.getStateEvents('m.room.topic', '')) === null || _c === void 0 ? void 0 : _c.getContent()) === null || _d === void 0 ? void 0 : _d.topic) !== null && _e !== void 0 ? _e : undefined,\n memberCount: room.getJoinedMemberCount(),\n isEncrypted: room.hasEncryptionStateEvent(),\n unreadCount: (_f = room.getUnreadNotificationCount()) !== null && _f !== void 0 ? _f : 0,\n lastEventTs: room.getLastActiveTimestamp() || undefined,\n membership: room.getMyMembership(),\n avatarUrl,\n isDirect,\n };\n }\n async searchUsers(options) {\n var _a;\n this.requireClient();\n const resp = await this.client.searchUserDirectory({\n term: options.searchTerm,\n limit: (_a = options.limit) !== null && _a !== void 0 ? _a : 10,\n });\n return {\n results: resp.results.map((u) => ({\n userId: u.user_id,\n displayName: u.display_name,\n avatarUrl: u.avatar_url,\n })),\n limited: resp.limited,\n };\n }\n mapSyncState(state) {\n switch (state) {\n case 'PREPARED':\n case 'SYNCING':\n case 'CATCHUP':\n case 'RECONNECTING':\n return 'SYNCING';\n case 'ERROR':\n return 'ERROR';\n case 'STOPPED':\n return 'STOPPED';\n default:\n return 'INITIAL';\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin","deriveRecoveryKeyFromPassphrase","createClient","ClientEvent","RoomEvent","EventType","RoomMemberEvent","UserEvent","MsgType","Direction","RelationType","initCryptoWasm","decodeRecoveryKey"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst Matrix = registerPlugin('Matrix', {\n web: () => import('./web').then((m) => new m.MatrixWeb()),\n});\nexport * from './definitions';\nexport { Matrix };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { initAsync as initCryptoWasm } from '@matrix-org/matrix-sdk-crypto-wasm';\nimport { createClient, ClientEvent, RoomEvent, RoomMemberEvent, Direction, MsgType, EventType, RelationType, UserEvent, } from 'matrix-js-sdk';\nimport { deriveRecoveryKeyFromPassphrase } from 'matrix-js-sdk/lib/crypto-api/key-passphrase';\nimport { decodeRecoveryKey } from 'matrix-js-sdk/lib/crypto-api/recovery-key';\nconst SESSION_KEY = 'matrix_session';\nexport class MatrixWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this._roomUpdateTimers = new Map();\n this._cryptoCallbacks = {\n getSecretStorageKey: async (opts) => {\n var _a, _b;\n const keyId = Object.keys(opts.keys)[0];\n if (!keyId)\n return null;\n // Exact match: only return the cached raw key for the key ID it was cached under.\n // (bootstrapSecretStorage uses createSecretStorageKey for the new key, so this\n // path is only reached for an already-established key — e.g. after recoverAndSetup.)\n if (this.secretStorageKey && this.secretStorageKeyId === keyId) {\n return [keyId, this.secretStorageKey];\n }\n // Derive from the current passphrase (set during recoverAndSetup)\n if (this.recoveryPassphrase) {\n const keyInfo = opts.keys[keyId];\n if (keyInfo === null || keyInfo === void 0 ? void 0 : keyInfo.passphrase) {\n const derived = await deriveRecoveryKeyFromPassphrase(this.recoveryPassphrase, keyInfo.passphrase.salt, keyInfo.passphrase.iterations, (_a = keyInfo.passphrase.bits) !== null && _a !== void 0 ? _a : 256);\n // Cache with the correct key ID for subsequent calls\n this.secretStorageKey = derived;\n this.secretStorageKeyId = keyId;\n return [keyId, derived];\n }\n }\n // Fallback: derive from the OLD passphrase when bootstrapSecretStorage is\n // migrating existing cross-signing / backup secrets into a new SSSS.\n if (this.fallbackPassphrase) {\n const keyInfo = opts.keys[keyId];\n if (keyInfo === null || keyInfo === void 0 ? void 0 : keyInfo.passphrase) {\n const derived = await deriveRecoveryKeyFromPassphrase(this.fallbackPassphrase, keyInfo.passphrase.salt, keyInfo.passphrase.iterations, (_b = keyInfo.passphrase.bits) !== null && _b !== void 0 ? _b : 256);\n return [keyId, derived];\n }\n }\n return null;\n },\n cacheSecretStorageKey: (keyId, _keyInfo, key) => {\n this.secretStorageKey = key;\n this.secretStorageKeyId = keyId;\n },\n };\n }\n // ── Auth ──────────────────────────────────────────────\n async login(options) {\n const tmpClient = createClient({ baseUrl: options.homeserverUrl });\n const res = await tmpClient.loginWithPassword(options.userId, options.password);\n this.client = createClient({\n baseUrl: options.homeserverUrl,\n accessToken: res.access_token,\n userId: res.user_id,\n deviceId: res.device_id,\n cryptoCallbacks: this._cryptoCallbacks,\n refreshToken: 'jwt-placeholder',\n tokenRefreshFunction: this.createTokenRefreshFunction(),\n });\n const session = {\n accessToken: res.access_token,\n userId: res.user_id,\n deviceId: res.device_id,\n homeserverUrl: options.homeserverUrl,\n };\n this.persistSession(session);\n return session;\n }\n async loginWithToken(options) {\n // Stop any previously running client to avoid parallel instances that\n // would deadlock on the shared IndexedDB crypto store.\n if (this.client) {\n this.client.stopClient();\n this.client = undefined;\n }\n this.client = createClient({\n baseUrl: options.homeserverUrl,\n accessToken: options.accessToken,\n userId: options.userId,\n deviceId: options.deviceId,\n cryptoCallbacks: this._cryptoCallbacks,\n refreshToken: 'jwt-placeholder',\n tokenRefreshFunction: this.createTokenRefreshFunction(),\n });\n const session = {\n accessToken: options.accessToken,\n userId: options.userId,\n deviceId: options.deviceId,\n homeserverUrl: options.homeserverUrl,\n };\n this.persistSession(session);\n return session;\n }\n async logout() {\n if (this.client) {\n this.client.stopClient();\n try {\n await this.client.logout(true);\n }\n catch (_a) {\n // ignore logout errors (e.g. token already invalidated)\n }\n this.client = undefined;\n }\n localStorage.removeItem(SESSION_KEY);\n }\n async clearAllData() {\n if (this.client) {\n this.client.stopClient();\n this.client = undefined;\n }\n // Reset all cached crypto state\n this.secretStorageKey = undefined;\n this.secretStorageKeyId = undefined;\n this.recoveryPassphrase = undefined;\n this.fallbackPassphrase = undefined;\n localStorage.removeItem(SESSION_KEY);\n await this.deleteCryptoStore();\n }\n async getSession() {\n const raw = localStorage.getItem(SESSION_KEY);\n if (!raw)\n return null;\n try {\n return JSON.parse(raw);\n }\n catch (_a) {\n return null;\n }\n }\n async updateAccessToken(options) {\n this.requireClient();\n this.client.setAccessToken(options.accessToken);\n // Update persisted session\n const raw = localStorage.getItem(SESSION_KEY);\n if (raw) {\n const session = JSON.parse(raw);\n session.accessToken = options.accessToken;\n this.persistSession(session);\n }\n // Resolve pending tokenRefreshFunction promise (if SDK is waiting)\n if (this._tokenRefreshResolve) {\n const resolve = this._tokenRefreshResolve;\n this._tokenRefreshResolve = undefined;\n if (this._tokenRefreshTimeout) {\n clearTimeout(this._tokenRefreshTimeout);\n this._tokenRefreshTimeout = undefined;\n }\n resolve({ accessToken: options.accessToken, refreshToken: 'jwt-placeholder' });\n }\n }\n // ── Sync ──────────────────────────────────────────────\n async startSync() {\n this.requireClient();\n this.client.on(ClientEvent.Sync, (state, _prev, data) => {\n var _a;\n const mapped = this.mapSyncState(state);\n this.notifyListeners('syncStateChange', {\n state: mapped,\n error: (_a = data === null || data === void 0 ? void 0 : data.error) === null || _a === void 0 ? void 0 : _a.message,\n });\n });\n this.client.on(RoomEvent.Timeline, (event, room, toStartOfTimeline) => {\n var _a;\n // Skip back-paginated events — they're loaded via getRoomMessages.\n if (toStartOfTimeline)\n return;\n this.notifyListeners('messageReceived', {\n event: this.serializeEvent(event, room === null || room === void 0 ? void 0 : room.roomId),\n });\n // When an encrypted event arrives, listen for decryption and re-notify\n if (event.isBeingDecrypted() || event.getType() === 'm.room.encrypted') {\n event.once('Event.decrypted', () => {\n this.notifyListeners('messageReceived', {\n event: this.serializeEvent(event, room === null || room === void 0 ? void 0 : room.roomId),\n });\n });\n }\n // When a reaction or redaction arrives, re-emit the parent event with updated aggregated reactions\n if (event.getType() === EventType.Reaction || event.getType() === EventType.RoomRedaction) {\n const rel = (_a = event.getContent()) === null || _a === void 0 ? void 0 : _a['m.relates_to'];\n const targetId = (rel === null || rel === void 0 ? void 0 : rel.event_id) || event.getAssociatedId();\n if (targetId && room) {\n const targetEvent = room.findEventById(targetId);\n if (targetEvent) {\n // Small delay to let the SDK finish aggregation\n setTimeout(() => {\n this.notifyListeners('messageReceived', {\n event: this.serializeEvent(targetEvent, room.roomId),\n });\n }, 100);\n }\n }\n }\n // Debounced roomUpdated emission so room list stays current (unread count, sort order)\n if (room) {\n const existing = this._roomUpdateTimers.get(room.roomId);\n if (existing)\n clearTimeout(existing);\n this._roomUpdateTimers.set(room.roomId, setTimeout(() => {\n this._roomUpdateTimers.delete(room.roomId);\n this.notifyListeners('roomUpdated', {\n roomId: room.roomId,\n summary: this.serializeRoom(room),\n });\n }, 200));\n }\n });\n this.client.on(RoomEvent.Receipt, (event, room) => {\n var _a, _b;\n const receiptContent = event.getContent();\n for (const [eventId, receiptTypes] of Object.entries(receiptContent)) {\n const mRead = (_a = receiptTypes['m.read']) !== null && _a !== void 0 ? _a : {};\n for (const userId of Object.keys(mRead)) {\n this.notifyListeners('receiptReceived', {\n roomId: room.roomId,\n eventId,\n userId,\n });\n }\n }\n // Re-emit own sent messages with updated read status\n const myUserId = (_b = this.client) === null || _b === void 0 ? void 0 : _b.getUserId();\n if (myUserId) {\n const timeline = room.getLiveTimeline().getEvents();\n // Walk backwards through recent events; stop after checking a reasonable batch\n const limit = Math.min(timeline.length, 50);\n for (let i = timeline.length - 1; i >= timeline.length - limit; i--) {\n const evt = timeline[i];\n if (evt.getSender() !== myUserId)\n continue;\n const serialized = this.serializeEvent(evt, room.roomId);\n if (serialized.status === 'read') {\n this.notifyListeners('messageReceived', { event: serialized });\n }\n }\n }\n });\n this.client.on(RoomEvent.Name, (room) => {\n this.notifyListeners('roomUpdated', {\n roomId: room.roomId,\n summary: this.serializeRoom(room),\n });\n });\n this.client.on(RoomMemberEvent.Typing, (_event, member) => {\n const roomId = member === null || member === void 0 ? void 0 : member.roomId;\n if (roomId) {\n const room = this.client.getRoom(roomId);\n if (room) {\n const userIds = room\n .getMembers()\n .filter((m) => m.typing)\n .map((m) => m.userId);\n this.notifyListeners('typingChanged', { roomId, userIds });\n }\n }\n });\n this.client.on(UserEvent.Presence, (_event, user) => {\n var _a, _b, _c;\n this.notifyListeners('presenceChanged', {\n userId: user.userId,\n presence: {\n presence: (_a = user.presence) !== null && _a !== void 0 ? _a : 'offline',\n statusMsg: (_b = user.presenceStatusMsg) !== null && _b !== void 0 ? _b : undefined,\n lastActiveAgo: (_c = user.lastActiveAgo) !== null && _c !== void 0 ? _c : undefined,\n },\n });\n });\n await this.client.startClient({ initialSyncLimit: 20 });\n }\n async stopSync() {\n this.requireClient();\n this.client.stopClient();\n }\n async getSyncState() {\n this.requireClient();\n const raw = this.client.getSyncState();\n return { state: this.mapSyncState(raw) };\n }\n // ── Rooms ─────────────────────────────────────────────\n async createRoom(options) {\n var _a;\n this.requireClient();\n const createOpts = {\n visibility: 'private',\n };\n if (options.name)\n createOpts.name = options.name;\n if (options.topic)\n createOpts.topic = options.topic;\n if ((_a = options.invite) === null || _a === void 0 ? void 0 : _a.length)\n createOpts.invite = options.invite;\n if (options.preset)\n createOpts.preset = options.preset;\n if (options.isDirect)\n createOpts.is_direct = true;\n const initialState = [];\n if (options.isEncrypted) {\n initialState.push({\n type: 'm.room.encryption',\n state_key: '',\n content: { algorithm: 'm.megolm.v1.aes-sha2' },\n });\n }\n if (options.historyVisibility) {\n initialState.push({\n type: 'm.room.history_visibility',\n state_key: '',\n content: { history_visibility: options.historyVisibility },\n });\n }\n if (initialState.length > 0) {\n createOpts.initial_state = initialState;\n }\n const res = await this.client.createRoom(createOpts);\n return { roomId: res.room_id };\n }\n async getRooms() {\n this.requireClient();\n const rooms = this.client.getRooms().map((r) => this.serializeRoom(r));\n return { rooms };\n }\n async getRoomMembers(options) {\n this.requireClient();\n const room = this.client.getRoom(options.roomId);\n if (!room)\n throw new Error(`Room ${options.roomId} not found`);\n await room.loadMembersIfNeeded();\n const members = room.getMembers().map((m) => {\n var _a, _b;\n return ({\n userId: m.userId,\n displayName: (_a = m.name) !== null && _a !== void 0 ? _a : undefined,\n membership: m.membership,\n avatarUrl: (_b = m.getMxcAvatarUrl()) !== null && _b !== void 0 ? _b : undefined,\n });\n });\n return { members };\n }\n async joinRoom(options) {\n this.requireClient();\n const room = await this.client.joinRoom(options.roomIdOrAlias);\n return { roomId: room.roomId };\n }\n async leaveRoom(options) {\n this.requireClient();\n await this.client.leave(options.roomId);\n }\n async forgetRoom(options) {\n this.requireClient();\n await this.client.forget(options.roomId);\n }\n // ── Messaging ─────────────────────────────────────────\n async sendMessage(options) {\n var _a, _b, _c;\n this.requireClient();\n const msgtype = (_a = options.msgtype) !== null && _a !== void 0 ? _a : 'm.text';\n const mediaTypes = ['m.image', 'm.audio', 'm.video', 'm.file'];\n if (mediaTypes.includes(msgtype) && options.fileUri) {\n // Media message: upload file then send\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const uploadRes = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n const mxcUrl = uploadRes.content_uri;\n const content = {\n msgtype,\n body: options.body || options.fileName || 'file',\n url: mxcUrl,\n info: Object.assign(Object.assign(Object.assign({ mimetype: options.mimeType, size: (_b = options.fileSize) !== null && _b !== void 0 ? _b : blob.size }, (options.duration !== undefined && { duration: options.duration })), (options.width !== undefined && { w: options.width })), (options.height !== undefined && { h: options.height })),\n };\n const res = await this.client.sendMessage(options.roomId, content);\n return { eventId: res.event_id };\n }\n // Text message\n const msgtypeMap = {\n 'm.text': MsgType.Text,\n 'm.notice': MsgType.Notice,\n 'm.emote': MsgType.Emote,\n };\n const mappedType = (_c = msgtypeMap[msgtype]) !== null && _c !== void 0 ? _c : MsgType.Text;\n const res = await this.client.sendMessage(options.roomId, {\n msgtype: mappedType,\n body: options.body,\n });\n return { eventId: res.event_id };\n }\n async editMessage(options) {\n var _a, _b;\n this.requireClient();\n const msgtype = (_a = options.msgtype) !== null && _a !== void 0 ? _a : 'm.text';\n const mediaTypes = ['m.image', 'm.audio', 'm.video', 'm.file'];\n let newContent;\n if (mediaTypes.includes(msgtype) && options.fileUri) {\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const uploadRes = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n newContent = {\n msgtype,\n body: options.newBody || options.fileName || 'file',\n url: uploadRes.content_uri,\n info: Object.assign(Object.assign(Object.assign({ mimetype: options.mimeType, size: (_b = options.fileSize) !== null && _b !== void 0 ? _b : blob.size }, (options.duration !== undefined && { duration: options.duration })), (options.width !== undefined && { w: options.width })), (options.height !== undefined && { h: options.height })),\n };\n }\n else {\n newContent = {\n msgtype,\n body: options.newBody,\n };\n }\n const content = Object.assign(Object.assign({}, newContent), { body: `* ${options.newBody}`, 'm.new_content': newContent, 'm.relates_to': {\n rel_type: 'm.replace',\n event_id: options.eventId,\n } });\n const res = await this.client.sendMessage(options.roomId, content);\n return { eventId: res.event_id };\n }\n async sendReply(options) {\n var _a, _b;\n this.requireClient();\n const msgtype = (_a = options.msgtype) !== null && _a !== void 0 ? _a : 'm.text';\n const mediaTypes = ['m.image', 'm.audio', 'm.video', 'm.file'];\n let content;\n if (mediaTypes.includes(msgtype) && options.fileUri) {\n // Media reply: upload file then send with reply relation\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const uploadRes = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n content = {\n msgtype,\n body: options.body || options.fileName || 'file',\n url: uploadRes.content_uri,\n info: Object.assign(Object.assign(Object.assign({ mimetype: options.mimeType, size: (_b = options.fileSize) !== null && _b !== void 0 ? _b : blob.size }, (options.duration !== undefined && { duration: options.duration })), (options.width !== undefined && { w: options.width })), (options.height !== undefined && { h: options.height })),\n 'm.relates_to': {\n 'm.in_reply_to': {\n event_id: options.replyToEventId,\n },\n },\n };\n }\n else {\n // Text reply\n content = {\n msgtype: MsgType.Text,\n body: options.body,\n 'm.relates_to': {\n 'm.in_reply_to': {\n event_id: options.replyToEventId,\n },\n },\n };\n }\n const res = await this.client.sendMessage(options.roomId, content);\n return { eventId: res.event_id };\n }\n async getRoomMessages(options) {\n var _a, _b, _c, _d, _e;\n this.requireClient();\n const limit = (_a = options.limit) !== null && _a !== void 0 ? _a : 20;\n const room = this.client.getRoom(options.roomId);\n // If no explicit pagination token, return events from the synced timeline\n if (!options.from && room) {\n // Paginate backwards so we have enough events (initial sync may be small)\n try {\n await this.client.scrollback(room, limit);\n }\n catch (_f) {\n // scrollback may fail if there's no more history\n }\n const timeline = room.getLiveTimeline();\n const timelineEvents = timeline.getEvents();\n // Filter out reactions and redactions before slicing — they're aggregated into parent events\n const displayableEvents = timelineEvents.filter((e) => {\n const t = e.getType();\n return t !== EventType.Reaction && t !== EventType.RoomRedaction;\n });\n const events = displayableEvents\n .map((e) => this.serializeEvent(e, options.roomId))\n .sort((a, b) => a.originServerTs - b.originServerTs);\n const backToken = (_b = timeline.getPaginationToken(Direction.Backward)) !== null && _b !== void 0 ? _b : undefined;\n return { events, nextBatch: backToken };\n }\n // Paginate further back using the token\n const fromToken = (_c = options.from) !== null && _c !== void 0 ? _c : null;\n const res = await this.client.createMessagesRequest(options.roomId, fromToken, limit, Direction.Backward);\n const events = ((_d = res.chunk) !== null && _d !== void 0 ? _d : []).map((e) => {\n var _a;\n return ({\n eventId: e.event_id,\n roomId: options.roomId,\n senderId: e.sender,\n type: e.type,\n content: ((_a = e.content) !== null && _a !== void 0 ? _a : {}),\n originServerTs: e.origin_server_ts,\n });\n });\n return { events, nextBatch: (_e = res.end) !== null && _e !== void 0 ? _e : undefined };\n }\n async markRoomAsRead(options) {\n this.requireClient();\n const room = this.client.getRoom(options.roomId);\n if (room) {\n const event = room.findEventById(options.eventId);\n if (event) {\n await this.client.sendReadReceipt(event);\n return;\n }\n }\n // Fallback to HTTP request if event not found locally\n await this.client.setRoomReadMarkersHttpRequest(options.roomId, options.eventId, options.eventId);\n }\n async refreshEventStatuses(options) {\n this.requireClient();\n const room = this.client.getRoom(options.roomId);\n if (!room)\n return { events: [] };\n const events = [];\n for (const eid of options.eventIds) {\n const event = room.findEventById(eid);\n if (event) {\n events.push(this.serializeEvent(event, options.roomId));\n }\n }\n return { events };\n }\n // ── Redactions & Reactions ───────────────────────────────\n async redactEvent(options) {\n this.requireClient();\n await this.client.redactEvent(options.roomId, options.eventId, undefined, {\n reason: options.reason,\n });\n }\n async sendReaction(options) {\n this.requireClient();\n const myUserId = this.client.getUserId();\n // Check if the user already reacted with this key — if so, toggle off (redact)\n const room = this.client.getRoom(options.roomId);\n if (room && myUserId) {\n try {\n const relations = room.relations.getChildEventsForEvent(options.eventId, RelationType.Annotation, EventType.Reaction);\n if (relations) {\n const existing = relations.getRelations().find((e) => { var _a, _b; return e.getSender() === myUserId && ((_b = (_a = e.getContent()) === null || _a === void 0 ? void 0 : _a['m.relates_to']) === null || _b === void 0 ? void 0 : _b.key) === options.key; });\n if (existing) {\n const existingId = existing.getId();\n if (existingId) {\n await this.client.redactEvent(options.roomId, existingId);\n return { eventId: existingId };\n }\n }\n }\n }\n catch (_a) {\n // fall through to send\n }\n }\n const res = await this.client.sendEvent(options.roomId, EventType.Reaction, {\n 'm.relates_to': {\n rel_type: RelationType.Annotation,\n event_id: options.eventId,\n key: options.key,\n },\n });\n return { eventId: res.event_id };\n }\n // ── Room Management ────────────────────────────────────\n async setRoomName(options) {\n this.requireClient();\n await this.client.setRoomName(options.roomId, options.name);\n }\n async setRoomTopic(options) {\n this.requireClient();\n await this.client.setRoomTopic(options.roomId, options.topic);\n }\n async setRoomAvatar(options) {\n this.requireClient();\n await this.client.sendStateEvent(options.roomId, 'm.room.avatar', { url: options.mxcUrl });\n }\n async inviteUser(options) {\n this.requireClient();\n await this.client.invite(options.roomId, options.userId);\n }\n async kickUser(options) {\n this.requireClient();\n await this.client.kick(options.roomId, options.userId, options.reason);\n }\n async banUser(options) {\n this.requireClient();\n await this.client.ban(options.roomId, options.userId, options.reason);\n }\n async unbanUser(options) {\n this.requireClient();\n await this.client.unban(options.roomId, options.userId);\n }\n // ── Typing ─────────────────────────────────────────────\n async sendTyping(options) {\n var _a;\n this.requireClient();\n await this.client.sendTyping(options.roomId, options.isTyping, (_a = options.timeout) !== null && _a !== void 0 ? _a : 30000);\n }\n // ── Media ──────────────────────────────────────────────\n async getMediaUrl(options) {\n this.requireClient();\n // Use the authenticated media endpoint (Matrix v1.11+)\n const mxcPath = options.mxcUrl.replace('mxc://', '');\n const baseUrl = this.client.getHomeserverUrl().replace(/\\/$/, '');\n const accessToken = this.client.getAccessToken();\n const httpUrl = `${baseUrl}/_matrix/client/v1/media/download/${mxcPath}?access_token=${accessToken}`;\n return { httpUrl };\n }\n async getThumbnailUrl(options) {\n var _a;\n this.requireClient();\n const mxcPath = options.mxcUrl.replace('mxc://', '');\n const baseUrl = this.client.getHomeserverUrl().replace(/\\/$/, '');\n const accessToken = this.client.getAccessToken();\n const method = (_a = options.method) !== null && _a !== void 0 ? _a : 'scale';\n const httpUrl = `${baseUrl}/_matrix/client/v1/media/thumbnail/${mxcPath}?width=${options.width}&height=${options.height}&method=${method}&access_token=${accessToken}`;\n return { httpUrl };\n }\n async uploadContent(options) {\n this.requireClient();\n const response = await fetch(options.fileUri);\n const blob = await response.blob();\n const res = await this.client.uploadContent(blob, {\n name: options.fileName,\n type: options.mimeType,\n });\n return { contentUri: res.content_uri };\n }\n // ── Presence ───────────────────────────────────────────\n async setPresence(options) {\n this.requireClient();\n await this.client.setPresence({\n presence: options.presence,\n status_msg: options.statusMsg,\n });\n }\n async getPresence(options) {\n var _a, _b, _c;\n this.requireClient();\n const user = this.client.getUser(options.userId);\n return {\n presence: (_a = user === null || user === void 0 ? void 0 : user.presence) !== null && _a !== void 0 ? _a : 'offline',\n statusMsg: (_b = user === null || user === void 0 ? void 0 : user.presenceStatusMsg) !== null && _b !== void 0 ? _b : undefined,\n lastActiveAgo: (_c = user === null || user === void 0 ? void 0 : user.lastActiveAgo) !== null && _c !== void 0 ? _c : undefined,\n };\n }\n // ── Device Management ──────────────────────────────────\n async getDevices() {\n var _a, _b;\n this.requireClient();\n const res = await this.client.getDevices();\n const crypto = this.client.getCrypto();\n const myUserId = (_a = this.client.getUserId()) !== null && _a !== void 0 ? _a : '';\n const devices = await Promise.all(((_b = res.devices) !== null && _b !== void 0 ? _b : []).map(async (d) => {\n var _a, _b, _c, _d;\n let isCrossSigningVerified;\n if (crypto) {\n try {\n const status = await crypto.getDeviceVerificationStatus(myUserId, d.device_id);\n isCrossSigningVerified = (_a = status === null || status === void 0 ? void 0 : status.crossSigningVerified) !== null && _a !== void 0 ? _a : false;\n }\n catch (_e) {\n // ignore — crypto may not be ready\n }\n }\n return {\n deviceId: d.device_id,\n displayName: (_b = d.display_name) !== null && _b !== void 0 ? _b : undefined,\n lastSeenTs: (_c = d.last_seen_ts) !== null && _c !== void 0 ? _c : undefined,\n lastSeenIp: (_d = d.last_seen_ip) !== null && _d !== void 0 ? _d : undefined,\n isCrossSigningVerified,\n };\n }));\n return { devices };\n }\n async deleteDevice(options) {\n this.requireClient();\n await this.client.deleteDevice(options.deviceId, options.auth);\n }\n // ── Push ──────────────────────────────────────────────\n async setPusher(options) {\n var _a;\n this.requireClient();\n await this.client.setPusher({\n pushkey: options.pushkey,\n kind: (_a = options.kind) !== null && _a !== void 0 ? _a : undefined,\n app_id: options.appId,\n app_display_name: options.appDisplayName,\n device_display_name: options.deviceDisplayName,\n lang: options.lang,\n data: options.data,\n });\n }\n // ── Encryption ──────────────────────────────────────────\n async initializeCrypto() {\n var _a, _b;\n this.requireClient();\n // Pre-initialize the WASM module with a root-relative URL before\n // matrix-js-sdk tries with a URL relative to the bundled chunk\n // (which breaks in bundlers like esbuild/Vite that relocate modules).\n // The host app must serve the WASM file at /matrix_sdk_crypto_wasm_bg.wasm\n // (e.g. via an asset copy in angular.json / project.json).\n // initAsync's internal guard ensures this is a no-op if already loaded.\n try {\n await initCryptoWasm(new URL('/matrix_sdk_crypto_wasm_bg.wasm', window.location.origin));\n }\n catch (e) {\n console.warn('[CapMatrix] WASM pre-init failed, falling back to default URL:', e);\n }\n const cryptoOpts = { cryptoDatabasePrefix: 'matrix-js-sdk' };\n try {\n await this.client.initRustCrypto(cryptoOpts);\n }\n catch (e) {\n // After logout + re-login the server issues a new deviceId, but the\n // shared IndexedDB crypto store still references the old one.\n // Delete the stale store and retry so crypto initialises cleanly.\n if ((_a = e === null || e === void 0 ? void 0 : e.message) === null || _a === void 0 ? void 0 : _a.includes(\"account in the store doesn't match\")) {\n await this.deleteCryptoStore();\n await this.client.initRustCrypto(cryptoOpts);\n }\n else {\n throw e;\n }\n }\n // Flush the initial /keys/query request that initRustCrypto enqueues.\n // Without this, any call to getIdentity (e.g. via getCrossSigningStatus)\n // will spin-wait and emit periodic WARN logs until sync processes it.\n const crypto = this.client.getCrypto();\n if ((_b = crypto === null || crypto === void 0 ? void 0 : crypto.outgoingRequestsManager) === null || _b === void 0 ? void 0 : _b.doProcessOutgoingRequests) {\n await crypto.outgoingRequestsManager.doProcessOutgoingRequests();\n }\n }\n async deleteCryptoStore() {\n if (typeof indexedDB === 'undefined')\n return;\n try {\n const dbs = await indexedDB.databases();\n await Promise.all(dbs\n .filter((db) => { var _a; return (_a = db.name) === null || _a === void 0 ? void 0 : _a.startsWith('matrix-js-sdk'); })\n .map((db) => new Promise((resolve) => {\n const req = indexedDB.deleteDatabase(db.name);\n req.onsuccess = () => resolve();\n req.onerror = () => resolve();\n })));\n }\n catch (_a) {\n // indexedDB.databases() not available in all environments\n }\n }\n async getEncryptionStatus() {\n this.requireClient();\n const crypto = this.client.getCrypto();\n if (!crypto) {\n return {\n isCrossSigningReady: false,\n crossSigningStatus: { hasMaster: false, hasSelfSigning: false, hasUserSigning: false, isReady: false },\n isKeyBackupEnabled: false,\n isSecretStorageReady: false,\n };\n }\n const csReady = await crypto.isCrossSigningReady();\n const csStatus = await crypto.getCrossSigningStatus();\n const backupVersion = await crypto.getActiveSessionBackupVersion();\n // Use getSecretStorageStatus().defaultKeyId to check if secret storage was\n // set up at all, rather than isSecretStorageReady() which also checks that\n // cross-signing keys are stored (too strict for Phase 1).\n const ssStatus = await crypto.getSecretStorageStatus();\n const ssHasKey = ssStatus.defaultKeyId !== null;\n return {\n isCrossSigningReady: csReady,\n crossSigningStatus: {\n hasMaster: csStatus.publicKeysOnDevice,\n hasSelfSigning: csStatus.privateKeysCachedLocally.selfSigningKey,\n hasUserSigning: csStatus.privateKeysCachedLocally.userSigningKey,\n isReady: csReady,\n },\n isKeyBackupEnabled: backupVersion !== null,\n keyBackupVersion: backupVersion !== null && backupVersion !== void 0 ? backupVersion : undefined,\n isSecretStorageReady: ssHasKey,\n };\n }\n async bootstrapCrossSigning() {\n const crypto = await this.ensureCrypto();\n await crypto.bootstrapCrossSigning({\n authUploadDeviceSigningKeys: async (makeRequest) => {\n var _a;\n // UIA flow: attempt with dummy auth, fall back to session-based retry\n try {\n await makeRequest({ type: 'm.login.dummy' });\n }\n catch (e) {\n const session = (_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.session;\n if (session) {\n await makeRequest({ type: 'm.login.dummy', session });\n }\n else {\n throw e;\n }\n }\n },\n });\n }\n async setupKeyBackup() {\n const crypto = await this.ensureCrypto();\n await crypto.resetKeyBackup();\n const version = await crypto.getActiveSessionBackupVersion();\n return { exists: true, version: version !== null && version !== void 0 ? version : undefined, enabled: true };\n }\n async getKeyBackupStatus() {\n this.requireClient();\n const crypto = this.requireCrypto();\n const version = await crypto.getActiveSessionBackupVersion();\n return {\n exists: version !== null,\n version: version !== null && version !== void 0 ? version : undefined,\n enabled: version !== null,\n };\n }\n async restoreKeyBackup(_options) {\n var _a;\n this.requireClient();\n const crypto = this.requireCrypto();\n const result = await crypto.restoreKeyBackup();\n return { importedKeys: (_a = result === null || result === void 0 ? void 0 : result.imported) !== null && _a !== void 0 ? _a : 0 };\n }\n async setupRecovery(options) {\n var _a;\n const crypto = await this.ensureCrypto();\n const keyInfo = await crypto.createRecoveryKeyFromPassphrase(options === null || options === void 0 ? void 0 : options.passphrase);\n // Pre-cache the new key bytes. secretStorageKeyId will be set by\n // cacheSecretStorageKey once bootstrapSecretStorage writes the new key\n // into SSSS and the SDK calls back.\n this.secretStorageKey = keyInfo.privateKey;\n this.secretStorageKeyId = undefined;\n // If the caller provides the same or old passphrase, keep it so\n // getSecretStorageKey can derive the key for the SDK.\n if (options === null || options === void 0 ? void 0 : options.passphrase) {\n this.recoveryPassphrase = options.passphrase;\n }\n // If the caller knows the OLD passphrase, keep it as fallbackPassphrase so\n // that getSecretStorageKey can decrypt the existing SSSS during\n // bootstrapSecretStorage's migration of cross-signing / backup secrets.\n if (options === null || options === void 0 ? void 0 : options.existingPassphrase) {\n this.fallbackPassphrase = options.existingPassphrase;\n }\n try {\n await crypto.bootstrapSecretStorage({\n createSecretStorageKey: async () => keyInfo,\n setupNewSecretStorage: true,\n setupNewKeyBackup: true,\n });\n }\n finally {\n // Always clear transient crypto state so it doesn't bleed into subsequent calls.\n this.fallbackPassphrase = undefined;\n this.recoveryPassphrase = undefined;\n }\n return { recoveryKey: (_a = keyInfo.encodedPrivateKey) !== null && _a !== void 0 ? _a : '' };\n }\n async isRecoveryEnabled() {\n const crypto = await this.ensureCrypto();\n const ready = await crypto.isSecretStorageReady();\n return { enabled: ready };\n }\n async recoverAndSetup(options) {\n const crypto = await this.ensureCrypto();\n // Derive/decode the secret storage key\n if (options.recoveryKey) {\n this.secretStorageKey = decodeRecoveryKey(options.recoveryKey);\n }\n else if (options.passphrase) {\n // Store passphrase — the getSecretStorageKey callback will derive\n // the key using the server's stored PBKDF2 params (salt, iterations)\n this.recoveryPassphrase = options.passphrase;\n this.secretStorageKey = undefined; // Clear any stale raw key\n }\n else {\n throw new Error('Either recoveryKey or passphrase must be provided');\n }\n // Load the backup decryption key from secret storage into the Rust crypto store.\n // This triggers the getSecretStorageKey callback.\n try {\n console.debug('[CapMatrix] Loading backup key from SSSS…');\n await crypto.loadSessionBackupPrivateKeyFromSecretStorage();\n console.debug('[CapMatrix] Backup key loaded successfully');\n }\n catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.warn('[CapMatrix] loadSessionBackupPrivateKey failed:', msg);\n if (msg.includes('decryption key does not match')) {\n console.info('[CapMatrix] Backup key mismatch — re-creating backup via bootstrapSecretStorage');\n await crypto.bootstrapSecretStorage({\n setupNewKeyBackup: true,\n });\n console.debug('[CapMatrix] bootstrapSecretStorage complete');\n }\n else {\n this.secretStorageKey = undefined;\n this.secretStorageKeyId = undefined;\n this.recoveryPassphrase = undefined;\n throw e;\n }\n }\n // Activate backup in the running client\n console.debug('[CapMatrix] Enabling key backup…');\n await crypto.checkKeyBackupAndEnable();\n const backupVersion = await crypto.getActiveSessionBackupVersion();\n console.debug('[CapMatrix] Key backup version:', backupVersion);\n // Restore cross-signing trust for the current device.\n console.debug('[CapMatrix] Bootstrapping cross-signing…');\n try {\n await crypto.bootstrapCrossSigning({\n authUploadDeviceSigningKeys: async (makeRequest) => {\n var _a;\n try {\n await makeRequest({ type: 'm.login.dummy' });\n }\n catch (e) {\n const session = (_a = e === null || e === void 0 ? void 0 : e.data) === null || _a === void 0 ? void 0 : _a.session;\n if (session) {\n await makeRequest({ type: 'm.login.dummy', session });\n }\n else {\n throw e;\n }\n }\n },\n });\n console.debug('[CapMatrix] Cross-signing bootstrap succeeded');\n }\n catch (e) {\n console.error('[CapMatrix] Cross-signing bootstrap failed:', e);\n }\n // Log final status\n const csReady = await crypto.isCrossSigningReady();\n const csStatus = await crypto.getCrossSigningStatus();\n console.debug('[CapMatrix] Final status — isCrossSigningReady:', csReady, 'csStatus:', JSON.stringify(csStatus));\n }\n async verifyDevice(options) {\n const crypto = await this.ensureCrypto();\n await crypto.crossSignDevice(options.deviceId);\n }\n async resetRecoveryKey(options) {\n return this.setupRecovery(options);\n }\n async exportRoomKeys(options) {\n this.requireClient();\n const crypto = this.requireCrypto();\n const keys = await crypto.exportRoomKeysAsJson();\n // The exported JSON is not encrypted by default; for passphrase encryption\n // the caller should handle it, or we return the raw JSON\n void options.passphrase; // passphrase encryption is handled natively; on web we return raw\n return { data: keys };\n }\n async importRoomKeys(options) {\n this.requireClient();\n const crypto = this.requireCrypto();\n void options.passphrase; // passphrase decryption handled natively; on web we import raw\n await crypto.importRoomKeysAsJson(options.data);\n return { importedKeys: -1 }; // count not available from importRoomKeysAsJson\n }\n // ── Helpers ───────────────────────────────────────────\n requireClient() {\n if (!this.client) {\n throw new Error('Not logged in. Call login() or loginWithToken() first.');\n }\n }\n requireCrypto() {\n const crypto = this.client.getCrypto();\n if (!crypto) {\n throw new Error('Crypto not initialized. Call initializeCrypto() first.');\n }\n return crypto;\n }\n async ensureCrypto() {\n this.requireClient();\n if (!this.client.getCrypto()) {\n await this.initializeCrypto();\n }\n return this.requireCrypto();\n }\n persistSession(session) {\n localStorage.setItem(SESSION_KEY, JSON.stringify(session));\n }\n createTokenRefreshFunction() {\n return (_refreshToken) => {\n this.notifyListeners('tokenRefreshRequired', {});\n return new Promise((resolve, reject) => {\n if (this._tokenRefreshTimeout)\n clearTimeout(this._tokenRefreshTimeout);\n this._tokenRefreshResolve = resolve;\n this._tokenRefreshTimeout = setTimeout(() => {\n this._tokenRefreshResolve = undefined;\n reject(new Error('Token refresh timed out'));\n }, 30000);\n });\n };\n }\n serializeEvent(event, fallbackRoomId) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const roomId = (_b = (_a = event.getRoomId()) !== null && _a !== void 0 ? _a : fallbackRoomId) !== null && _b !== void 0 ? _b : '';\n // Redacted events should be marked clearly\n if (event.isRedacted()) {\n return {\n eventId: (_c = event.getId()) !== null && _c !== void 0 ? _c : '',\n roomId,\n senderId: (_d = event.getSender()) !== null && _d !== void 0 ? _d : '',\n type: 'm.room.redaction',\n content: { body: 'Message deleted' },\n originServerTs: event.getTs(),\n };\n }\n const content = Object.assign({}, ((_e = event.getContent()) !== null && _e !== void 0 ? _e : {}));\n // Include aggregated reactions from the room's relations container\n const eventId = event.getId();\n if (eventId && roomId) {\n const room = (_f = this.client) === null || _f === void 0 ? void 0 : _f.getRoom(roomId);\n if (room) {\n try {\n const relations = room.relations.getChildEventsForEvent(eventId, RelationType.Annotation, EventType.Reaction);\n if (relations) {\n const sorted = relations.getSortedAnnotationsByKey();\n if (sorted && sorted.length > 0) {\n content.reactions = sorted.map(([key, events]) => ({\n key,\n count: events.size,\n senders: Array.from(events).map((e) => e.getSender()),\n }));\n }\n }\n }\n catch (_l) {\n // relations may not be available\n }\n }\n }\n // Determine delivery/read status\n let status;\n const readBy = [];\n const myUserId = (_g = this.client) === null || _g === void 0 ? void 0 : _g.getUserId();\n const sender = event.getSender();\n const room = eventId && roomId ? (_h = this.client) === null || _h === void 0 ? void 0 : _h.getRoom(roomId) : undefined;\n if (sender === myUserId && eventId) {\n // Own message — check delivery status\n const evtStatus = event.status; // null = sent & echoed, 'sending', 'sent', etc.\n if (evtStatus === 'sending' || evtStatus === 'encrypting' || evtStatus === 'queued') {\n status = 'sending';\n }\n else {\n // Event is at least sent; check if anyone has read it\n if (room) {\n try {\n const members = room.getJoinedMembers();\n for (const member of members) {\n if (member.userId === myUserId)\n continue;\n if (room.hasUserReadEvent(member.userId, eventId)) {\n readBy.push(member.userId);\n }\n }\n }\n catch (_m) {\n // ignore errors\n }\n }\n status = readBy.length > 0 ? 'read' : 'sent';\n }\n }\n else if (eventId && room) {\n // Other's message — collect who has read it\n try {\n const members = room.getJoinedMembers();\n for (const member of members) {\n if (member.userId === sender)\n continue;\n if (room.hasUserReadEvent(member.userId, eventId)) {\n readBy.push(member.userId);\n }\n }\n }\n catch (_o) {\n // ignore\n }\n }\n // Include unsigned data (e.g. m.relations for edits, transaction_id for local echo)\n const unsignedData = (_j = event.getUnsigned) === null || _j === void 0 ? void 0 : _j.call(event);\n const unsigned = unsignedData && Object.keys(unsignedData).length > 0\n ? unsignedData\n : undefined;\n // Include state_key for state events (e.g. target user in m.room.member)\n const sk = (_k = event.getStateKey) === null || _k === void 0 ? void 0 : _k.call(event);\n return Object.assign(Object.assign({ eventId: eventId !== null && eventId !== void 0 ? eventId : '', roomId, senderId: sender !== null && sender !== void 0 ? sender : '', type: event.getType() }, (sk !== undefined && { stateKey: sk })), { content, originServerTs: event.getTs(), status, readBy: readBy.length > 0 ? readBy : undefined, unsigned });\n }\n serializeRoom(room) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n // Detect DM: check m.direct account data or guess from room state\n let isDirect = false;\n try {\n const directEvent = (_a = this.client) === null || _a === void 0 ? void 0 : _a.getAccountData('m.direct');\n if (directEvent) {\n const directContent = directEvent.getContent();\n for (const roomIds of Object.values(directContent)) {\n if (roomIds.includes(room.roomId)) {\n isDirect = true;\n break;\n }\n }\n }\n }\n catch (_m) {\n // ignore\n }\n // Get avatar URL\n let avatarUrl;\n const avatarEvent = room.currentState.getStateEvents('m.room.avatar', '');\n if (avatarEvent) {\n const mxcUrl = (_b = avatarEvent.getContent()) === null || _b === void 0 ? void 0 : _b.url;\n if (mxcUrl) {\n avatarUrl = mxcUrl;\n }\n }\n // Build latestEvent from the room's last displayable timeline event\n let latestEvent;\n const timeline = room.getLiveTimeline().getEvents();\n for (let i = timeline.length - 1; i >= 0; i--) {\n const evt = timeline[i];\n const evtType = evt.getType();\n if (evtType === EventType.RoomMessage || evtType === EventType.Reaction) {\n const relatesTo = (_c = evt.getContent()) === null || _c === void 0 ? void 0 : _c['m.relates_to'];\n if ((relatesTo === null || relatesTo === void 0 ? void 0 : relatesTo['rel_type']) === RelationType.Replace)\n continue;\n const sender = (_d = evt.getSender()) !== null && _d !== void 0 ? _d : '';\n const senderMember = room.getMember(sender);\n latestEvent = {\n roomId: room.roomId,\n senderId: sender,\n type: evtType,\n content: evt.getContent(),\n originServerTs: evt.getTs(),\n senderDisplayName: (_e = senderMember === null || senderMember === void 0 ? void 0 : senderMember.name) !== null && _e !== void 0 ? _e : undefined,\n };\n break;\n }\n }\n return {\n roomId: room.roomId,\n name: room.name,\n topic: (_h = (_g = (_f = room.currentState.getStateEvents('m.room.topic', '')) === null || _f === void 0 ? void 0 : _f.getContent()) === null || _g === void 0 ? void 0 : _g.topic) !== null && _h !== void 0 ? _h : undefined,\n memberCount: room.getJoinedMemberCount(),\n isEncrypted: room.hasEncryptionStateEvent(),\n unreadCount: (_j = room.getUnreadNotificationCount()) !== null && _j !== void 0 ? _j : 0,\n lastEventTs: room.getLastActiveTimestamp() || undefined,\n createdAt: (_l = (_k = room.currentState.getStateEvents('m.room.create', '')) === null || _k === void 0 ? void 0 : _k.getTs()) !== null && _l !== void 0 ? _l : undefined,\n membership: room.getMyMembership(),\n avatarUrl,\n isDirect,\n latestEvent,\n };\n }\n async searchUsers(options) {\n var _a;\n this.requireClient();\n const resp = await this.client.searchUserDirectory({\n term: options.searchTerm,\n limit: (_a = options.limit) !== null && _a !== void 0 ? _a : 10,\n });\n return {\n results: resp.results.map((u) => ({\n userId: u.user_id,\n displayName: u.display_name,\n avatarUrl: u.avatar_url,\n })),\n limited: resp.limited,\n };\n }\n mapSyncState(state) {\n switch (state) {\n case 'PREPARED':\n case 'SYNCING':\n case 'CATCHUP':\n case 'RECONNECTING':\n return 'SYNCING';\n case 'ERROR':\n return 'ERROR';\n case 'STOPPED':\n return 'STOPPED';\n default:\n return 'INITIAL';\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin","deriveRecoveryKeyFromPassphrase","createClient","ClientEvent","RoomEvent","EventType","RoomMemberEvent","UserEvent","MsgType","Direction","RelationType","initCryptoWasm","decodeRecoveryKey"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -9,6 +9,7 @@ var capacitorCapMatrix = (function (exports, core, matrixSdkCryptoWasm, matrixJs
|
|
|
9
9
|
class MatrixWeb extends core.WebPlugin {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments);
|
|
12
|
+
this._roomUpdateTimers = new Map();
|
|
12
13
|
this._cryptoCallbacks = {
|
|
13
14
|
getSecretStorageKey: async (opts) => {
|
|
14
15
|
var _a, _b;
|
|
@@ -197,6 +198,19 @@ var capacitorCapMatrix = (function (exports, core, matrixSdkCryptoWasm, matrixJs
|
|
|
197
198
|
}
|
|
198
199
|
}
|
|
199
200
|
}
|
|
201
|
+
// Debounced roomUpdated emission so room list stays current (unread count, sort order)
|
|
202
|
+
if (room) {
|
|
203
|
+
const existing = this._roomUpdateTimers.get(room.roomId);
|
|
204
|
+
if (existing)
|
|
205
|
+
clearTimeout(existing);
|
|
206
|
+
this._roomUpdateTimers.set(room.roomId, setTimeout(() => {
|
|
207
|
+
this._roomUpdateTimers.delete(room.roomId);
|
|
208
|
+
this.notifyListeners('roomUpdated', {
|
|
209
|
+
roomId: room.roomId,
|
|
210
|
+
summary: this.serializeRoom(room),
|
|
211
|
+
});
|
|
212
|
+
}, 200));
|
|
213
|
+
}
|
|
200
214
|
});
|
|
201
215
|
this.client.on(matrixJsSdk.RoomEvent.Receipt, (event, room) => {
|
|
202
216
|
var _a, _b;
|
|
@@ -1094,7 +1108,7 @@ var capacitorCapMatrix = (function (exports, core, matrixSdkCryptoWasm, matrixJs
|
|
|
1094
1108
|
return Object.assign(Object.assign({ eventId: eventId !== null && eventId !== void 0 ? eventId : '', roomId, senderId: sender !== null && sender !== void 0 ? sender : '', type: event.getType() }, (sk !== undefined && { stateKey: sk })), { content, originServerTs: event.getTs(), status, readBy: readBy.length > 0 ? readBy : undefined, unsigned });
|
|
1095
1109
|
}
|
|
1096
1110
|
serializeRoom(room) {
|
|
1097
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1111
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
1098
1112
|
// Detect DM: check m.direct account data or guess from room state
|
|
1099
1113
|
let isDirect = false;
|
|
1100
1114
|
try {
|
|
@@ -1109,7 +1123,7 @@ var capacitorCapMatrix = (function (exports, core, matrixSdkCryptoWasm, matrixJs
|
|
|
1109
1123
|
}
|
|
1110
1124
|
}
|
|
1111
1125
|
}
|
|
1112
|
-
catch (
|
|
1126
|
+
catch (_m) {
|
|
1113
1127
|
// ignore
|
|
1114
1128
|
}
|
|
1115
1129
|
// Get avatar URL
|
|
@@ -1121,17 +1135,42 @@ var capacitorCapMatrix = (function (exports, core, matrixSdkCryptoWasm, matrixJs
|
|
|
1121
1135
|
avatarUrl = mxcUrl;
|
|
1122
1136
|
}
|
|
1123
1137
|
}
|
|
1138
|
+
// Build latestEvent from the room's last displayable timeline event
|
|
1139
|
+
let latestEvent;
|
|
1140
|
+
const timeline = room.getLiveTimeline().getEvents();
|
|
1141
|
+
for (let i = timeline.length - 1; i >= 0; i--) {
|
|
1142
|
+
const evt = timeline[i];
|
|
1143
|
+
const evtType = evt.getType();
|
|
1144
|
+
if (evtType === matrixJsSdk.EventType.RoomMessage || evtType === matrixJsSdk.EventType.Reaction) {
|
|
1145
|
+
const relatesTo = (_c = evt.getContent()) === null || _c === void 0 ? void 0 : _c['m.relates_to'];
|
|
1146
|
+
if ((relatesTo === null || relatesTo === void 0 ? void 0 : relatesTo['rel_type']) === matrixJsSdk.RelationType.Replace)
|
|
1147
|
+
continue;
|
|
1148
|
+
const sender = (_d = evt.getSender()) !== null && _d !== void 0 ? _d : '';
|
|
1149
|
+
const senderMember = room.getMember(sender);
|
|
1150
|
+
latestEvent = {
|
|
1151
|
+
roomId: room.roomId,
|
|
1152
|
+
senderId: sender,
|
|
1153
|
+
type: evtType,
|
|
1154
|
+
content: evt.getContent(),
|
|
1155
|
+
originServerTs: evt.getTs(),
|
|
1156
|
+
senderDisplayName: (_e = senderMember === null || senderMember === void 0 ? void 0 : senderMember.name) !== null && _e !== void 0 ? _e : undefined,
|
|
1157
|
+
};
|
|
1158
|
+
break;
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1124
1161
|
return {
|
|
1125
1162
|
roomId: room.roomId,
|
|
1126
1163
|
name: room.name,
|
|
1127
|
-
topic: (
|
|
1164
|
+
topic: (_h = (_g = (_f = room.currentState.getStateEvents('m.room.topic', '')) === null || _f === void 0 ? void 0 : _f.getContent()) === null || _g === void 0 ? void 0 : _g.topic) !== null && _h !== void 0 ? _h : undefined,
|
|
1128
1165
|
memberCount: room.getJoinedMemberCount(),
|
|
1129
1166
|
isEncrypted: room.hasEncryptionStateEvent(),
|
|
1130
|
-
unreadCount: (
|
|
1167
|
+
unreadCount: (_j = room.getUnreadNotificationCount()) !== null && _j !== void 0 ? _j : 0,
|
|
1131
1168
|
lastEventTs: room.getLastActiveTimestamp() || undefined,
|
|
1169
|
+
createdAt: (_l = (_k = room.currentState.getStateEvents('m.room.create', '')) === null || _k === void 0 ? void 0 : _k.getTs()) !== null && _l !== void 0 ? _l : undefined,
|
|
1132
1170
|
membership: room.getMyMembership(),
|
|
1133
1171
|
avatarUrl,
|
|
1134
1172
|
isDirect,
|
|
1173
|
+
latestEvent,
|
|
1135
1174
|
};
|
|
1136
1175
|
}
|
|
1137
1176
|
async searchUsers(options) {
|