matrix-js-sdk 37.1.0 → 37.2.0-rc.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/git-revision.txt +1 -1
- package/lib/client.d.ts +11 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +24 -5
- package/lib/client.js.map +1 -1
- package/lib/content-helpers.d.ts.map +1 -1
- package/lib/crypto-api/index.d.ts +9 -0
- package/lib/crypto-api/index.d.ts.map +1 -1
- package/lib/crypto-api/index.js.map +1 -1
- package/lib/embedded.d.ts.map +1 -1
- package/lib/embedded.js +27 -14
- package/lib/embedded.js.map +1 -1
- package/lib/errors.d.ts +7 -0
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +11 -0
- package/lib/errors.js.map +1 -1
- package/lib/http-api/fetch.d.ts +4 -2
- package/lib/http-api/fetch.d.ts.map +1 -1
- package/lib/http-api/fetch.js.map +1 -1
- package/lib/matrixrtc/EncryptionManager.d.ts.map +1 -1
- package/lib/matrixrtc/{MembershipManager.d.ts → LegacyMembershipManager.d.ts} +4 -40
- package/lib/matrixrtc/LegacyMembershipManager.d.ts.map +1 -0
- package/lib/matrixrtc/{MembershipManager.js → LegacyMembershipManager.js} +19 -11
- package/lib/matrixrtc/LegacyMembershipManager.js.map +1 -0
- package/lib/matrixrtc/LivekitFocus.d.ts.map +1 -1
- package/lib/matrixrtc/MatrixRTCSession.d.ts +28 -1
- package/lib/matrixrtc/MatrixRTCSession.d.ts.map +1 -1
- package/lib/matrixrtc/MatrixRTCSession.js +19 -5
- package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
- package/lib/matrixrtc/NewMembershipManager.d.ts +210 -0
- package/lib/matrixrtc/NewMembershipManager.d.ts.map +1 -0
- package/lib/matrixrtc/NewMembershipManager.js +784 -0
- package/lib/matrixrtc/NewMembershipManager.js.map +1 -0
- package/lib/matrixrtc/NewMembershipManagerActionScheduler.d.ts +57 -0
- package/lib/matrixrtc/NewMembershipManagerActionScheduler.d.ts.map +1 -0
- package/lib/matrixrtc/NewMembershipManagerActionScheduler.js +124 -0
- package/lib/matrixrtc/NewMembershipManagerActionScheduler.js.map +1 -0
- package/lib/models/beacon.d.ts.map +1 -1
- package/lib/models/poll.d.ts.map +1 -1
- package/lib/oidc/authorize.d.ts.map +1 -1
- package/lib/oidc/discovery.d.ts.map +1 -1
- package/lib/oidc/register.d.ts +2 -1
- package/lib/oidc/register.d.ts.map +1 -1
- package/lib/oidc/register.js +15 -4
- package/lib/oidc/register.js.map +1 -1
- package/lib/oidc/validate.d.ts.map +1 -1
- package/lib/rust-crypto/rust-crypto.d.ts +9 -0
- package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
- package/lib/rust-crypto/rust-crypto.js +136 -106
- package/lib/rust-crypto/rust-crypto.js.map +1 -1
- package/lib/store/indexeddb-store-worker.d.ts.map +1 -1
- package/lib/testing.d.ts.map +1 -1
- package/lib/utils.d.ts +8 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +20 -3
- package/lib/utils.js.map +1 -1
- package/lib/webrtc/call.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/client.ts +35 -5
- package/src/crypto-api/index.ts +10 -0
- package/src/embedded.ts +62 -27
- package/src/errors.ts +13 -0
- package/src/http-api/fetch.ts +4 -4
- package/src/matrixrtc/{MembershipManager.ts → LegacyMembershipManager.ts} +19 -39
- package/src/matrixrtc/MatrixRTCSession.ts +52 -7
- package/src/matrixrtc/NewMembershipManager.ts +943 -0
- package/src/matrixrtc/NewMembershipManagerActionScheduler.ts +133 -0
- package/src/oidc/register.ts +17 -4
- package/src/rust-crypto/rust-crypto.ts +37 -11
- package/src/utils.ts +17 -0
- package/lib/matrixrtc/MembershipManager.d.ts.map +0 -1
- package/lib/matrixrtc/MembershipManager.js.map +0 -1
package/lib/embedded.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded.js","names":["WidgetApiToWidgetAction","WidgetApiResponseError","MatrixCapabilities","MatrixEvent","EventStatus","EventType","logger","MatrixClient","ClientEvent","UNSTABLE_MSC4140_DELAYED_EVENTS","SyncApi","SyncState","SlidingSyncSdk","MatrixError","User","MapWithDefault","recursiveMapToObject","TypedEventEmitter","RoomWidgetClientEvent","RoomWidgetClient","constructor","widgetApi","capabilities","roomId","opts","sendContentLoaded","_this","_capabilities$sendEve","_capabilities$receive","_capabilities$sendSta","_capabilities$receive2","_capabilities$sendEve2","_capabilities$receive3","_capabilities$sendSta2","_capabilities$receive4","_capabilities$sendToD","_capabilities$receive5","_capabilities$sendEve3","_capabilities$sendSta3","this","_defineProperty","_ref","_asyncToGenerator","event","getSender","getUserId","pendingSendingEventsTxId","some","p","getType","type","_this$pendingSendingE","matchingTxId","find","id","getId","txId","length","_this$pendingSendingE2","Promise","resolve","eventEmitter","once","PendingEventsChanged","setTxnId","setUnsigned","_objectSpread","getUnsigned","transaction_id","filter","emit","_x","apply","arguments","_ref2","ev","preventDefault","detail","data","room_id","updateTxId","syncApi","injectRoomEvents","room","undefined","Event","setSyncState","Syncing","info","concat","getStateKey","event_id","eventId","ack","_x2","_ref3","sender","content","encrypted","makeEncrypted","RoomMessageEncrypted","ToDeviceEvent","_x3","transportSend","transport","send","bind","_ref4","action","error","processAndThrow","_x4","_x5","transportSendComplete","sendComplete","_ref5","_x6","_x7","widgetApiReady","sendEvent","receiveEvent","sendMessage","Array","isArray","receiveMessage","sendState","receiveState","requestCapabilityForRoomTimeline","forEach","eventType","requestCapabilityToSendEvent","requestCapabilityToReceiveEvent","requestCapabilityToSendMessage","msgType","requestCapabilityToReceiveMessage","_ref6","stateKey","requestCapabilityToSendState","_ref7","requestCapabilityToReceiveState","sendToDevice","requestCapabilityToSendToDevice","receiveToDevice","requestCapabilityToReceiveToDevice","sendDelayedEvents","requestCapability","MSC4157SendDelayedEvent","updateDelayedEvents","MSC4157UpdateDelayedEvent","turnServers","MSC3846TurnServers","on","SendEvent","onEvent","SendToDevice","onToDevice","start","startClient","_arguments","_this2","_this2$capabilities$r","_this2$capabilities$r2","lifecycle","AbortController","userId","store","storeUser","slidingSync","buildSyncApiOptions","createRoom","storeRoom","all","map","_ref9","_ref8","rawEvents","readStateEvents","events","rawEvent","_x8","clientWellKnownPollPeriod","clientWellKnownIntervalID","setInterval","fetchClientWellKnown","matrixRTC","watchTurnServers","stopClient","off","abort","joinRoom","roomIdOrAlias","_this3","Error","encryptAndSendEvent","delayOpts","_this4","redacts","getContent","response","sendRoomEvent","delay","parent_delay_id","validateSendDelayedEventResponse","getTxnId","push","e","updatePendingEventStatus","NOT_SENT","updatePendingEvent","SENT","sendStateEvent","_arguments2","_this5","_unstable_sendDelayedStateEvent","_arguments3","_this6","doesServerSupportUnstableFeature","delay_id","_unstable_updateDelayedEvent","delayId","_this7","updateDelayedEvent","contentMap","_this8","getOpenIdToken","_this9","token","requestOpenIDConnectToken","access_token","expires_in","matrix_server_name","token_type","queueToDevice","_ref10","_this10","batch","Map","deviceId","payload","getOrCreate","set","encryptAndSendToDevices","userDeviceInfoArr","_this11","sendToDeviceViaWidgetApi","_this12","checkTurnServers","_this13","getSyncState","syncState","state","oldState","Sync","_this14","reply","_this15","servers","getTurnServers","onClientStopped","return","signal","addEventListener","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_asyncIterator","_step","next","done","server","value","urls","uris","username","credential","password","TurnServers","log","err","warn","removeEventListener","matrix_api_error","fromWidgetApiErrorData"],"sources":["../src/embedded.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport {\n type WidgetApi,\n WidgetApiToWidgetAction,\n WidgetApiResponseError,\n MatrixCapabilities,\n type IWidgetApiRequest,\n type IWidgetApiAcknowledgeResponseData,\n type ISendEventToWidgetActionRequest,\n type ISendToDeviceToWidgetActionRequest,\n type ISendEventFromWidgetResponseData,\n type IWidgetApiRequestData,\n type WidgetApiAction,\n type IWidgetApiResponse,\n type IWidgetApiResponseData,\n} from \"matrix-widget-api\";\n\nimport { MatrixEvent, type IEvent, type IContent, EventStatus } from \"./models/event.ts\";\nimport {\n type ISendEventResponse,\n type SendDelayedEventRequestOpts,\n type SendDelayedEventResponse,\n type UpdateDelayedEventAction,\n} from \"./@types/requests.ts\";\nimport { EventType, type StateEvents } from \"./@types/event.ts\";\nimport { logger } from \"./logger.ts\";\nimport {\n MatrixClient,\n ClientEvent,\n type IMatrixClientCreateOpts,\n type IStartClientOpts,\n type SendToDeviceContentMap,\n type IOpenIDToken,\n UNSTABLE_MSC4140_DELAYED_EVENTS,\n} from \"./client.ts\";\nimport { SyncApi, SyncState } from \"./sync.ts\";\nimport { SlidingSyncSdk } from \"./sliding-sync-sdk.ts\";\nimport { MatrixError } from \"./http-api/errors.ts\";\nimport { User } from \"./models/user.ts\";\nimport { type Room } from \"./models/room.ts\";\nimport { type ToDeviceBatch, type ToDevicePayload } from \"./models/ToDeviceMessage.ts\";\nimport { MapWithDefault, recursiveMapToObject } from \"./utils.ts\";\nimport { type EmptyObject, TypedEventEmitter } from \"./matrix.ts\";\n\ninterface IStateEventRequest {\n eventType: string;\n stateKey?: string;\n}\n\nexport interface OlmDevice {\n /**\n * The user ID of the device owner.\n */\n userId: string;\n /**\n * The device ID of the device.\n */\n deviceId: string;\n}\n\nexport interface ICapabilities {\n /**\n * Event types that this client expects to send.\n */\n sendEvent?: string[];\n /**\n * Event types that this client expects to receive.\n */\n receiveEvent?: string[];\n\n /**\n * Message types that this client expects to send, or true for all message\n * types.\n */\n sendMessage?: string[] | true;\n /**\n * Message types that this client expects to receive, or true for all\n * message types.\n */\n receiveMessage?: string[] | true;\n\n /**\n * Types of state events that this client expects to send.\n */\n sendState?: IStateEventRequest[];\n /**\n * Types of state events that this client expects to receive.\n */\n receiveState?: IStateEventRequest[];\n\n /**\n * To-device event types that this client expects to send.\n */\n sendToDevice?: string[];\n /**\n * To-device event types that this client expects to receive.\n */\n receiveToDevice?: string[];\n\n /**\n * Whether this client needs access to TURN servers.\n * @defaultValue false\n */\n turnServers?: boolean;\n\n /**\n * Whether this client needs to be able to send delayed events.\n * @experimental Part of MSC4140 & MSC4157\n * @defaultValue false\n */\n sendDelayedEvents?: boolean;\n\n /**\n * Whether this client needs to be able to update delayed events.\n * @experimental Part of MSC4140 & MSC4157\n * @defaultValue false\n */\n updateDelayedEvents?: boolean;\n}\n\nexport enum RoomWidgetClientEvent {\n PendingEventsChanged = \"PendingEvent.pendingEventsChanged\",\n}\nexport type EventHandlerMap = { [RoomWidgetClientEvent.PendingEventsChanged]: () => void };\n\n/**\n * A MatrixClient that routes its requests through the widget API instead of the\n * real CS API.\n * @experimental This class is considered unstable!\n */\nexport class RoomWidgetClient extends MatrixClient {\n private room?: Room;\n private readonly widgetApiReady: Promise<void>;\n private lifecycle?: AbortController;\n private syncState: SyncState | null = null;\n\n private pendingSendingEventsTxId: { type: string; id: string | undefined; txId: string }[] = [];\n private eventEmitter = new TypedEventEmitter<keyof EventHandlerMap, EventHandlerMap>();\n\n /**\n *\n * @param widgetApi - The widget api to use for communication.\n * @param capabilities - The capabilities the widget client will request.\n * @param roomId - The room id the widget is associated with.\n * @param opts - The configuration options for this client.\n * @param sendContentLoaded - Whether to send a content loaded widget action immediately after initial setup.\n * Set to `false` if the widget uses `waitForIFrameLoad=true` (in this case the client does not expect a content loaded action at all),\n * or if the the widget wants to send the `ContentLoaded` action at a later point in time after the initial setup.\n */\n public constructor(\n private readonly widgetApi: WidgetApi,\n private readonly capabilities: ICapabilities,\n private readonly roomId: string,\n opts: IMatrixClientCreateOpts,\n sendContentLoaded: boolean,\n ) {\n super(opts);\n\n const transportSend = this.widgetApi.transport.send.bind(this.widgetApi.transport);\n this.widgetApi.transport.send = async <\n T extends IWidgetApiRequestData,\n R extends IWidgetApiResponseData = IWidgetApiAcknowledgeResponseData,\n >(\n action: WidgetApiAction,\n data: T,\n ): Promise<R> => {\n try {\n return await transportSend(action, data);\n } catch (error) {\n processAndThrow(error);\n }\n };\n\n const transportSendComplete = this.widgetApi.transport.sendComplete.bind(this.widgetApi.transport);\n this.widgetApi.transport.sendComplete = async <T extends IWidgetApiRequestData, R extends IWidgetApiResponse>(\n action: WidgetApiAction,\n data: T,\n ): Promise<R> => {\n try {\n return await transportSendComplete(action, data);\n } catch (error) {\n processAndThrow(error);\n }\n };\n\n this.widgetApiReady = new Promise<void>((resolve) => this.widgetApi.once(\"ready\", resolve));\n\n // Request capabilities for the functionality this client needs to support\n if (\n capabilities.sendEvent?.length ||\n capabilities.receiveEvent?.length ||\n capabilities.sendMessage === true ||\n (Array.isArray(capabilities.sendMessage) && capabilities.sendMessage.length) ||\n capabilities.receiveMessage === true ||\n (Array.isArray(capabilities.receiveMessage) && capabilities.receiveMessage.length) ||\n capabilities.sendState?.length ||\n capabilities.receiveState?.length\n ) {\n widgetApi.requestCapabilityForRoomTimeline(roomId);\n }\n capabilities.sendEvent?.forEach((eventType) => widgetApi.requestCapabilityToSendEvent(eventType));\n capabilities.receiveEvent?.forEach((eventType) => widgetApi.requestCapabilityToReceiveEvent(eventType));\n if (capabilities.sendMessage === true) {\n widgetApi.requestCapabilityToSendMessage();\n } else if (Array.isArray(capabilities.sendMessage)) {\n capabilities.sendMessage.forEach((msgType) => widgetApi.requestCapabilityToSendMessage(msgType));\n }\n if (capabilities.receiveMessage === true) {\n widgetApi.requestCapabilityToReceiveMessage();\n } else if (Array.isArray(capabilities.receiveMessage)) {\n capabilities.receiveMessage.forEach((msgType) => widgetApi.requestCapabilityToReceiveMessage(msgType));\n }\n capabilities.sendState?.forEach(({ eventType, stateKey }) =>\n widgetApi.requestCapabilityToSendState(eventType, stateKey),\n );\n capabilities.receiveState?.forEach(({ eventType, stateKey }) =>\n widgetApi.requestCapabilityToReceiveState(eventType, stateKey),\n );\n capabilities.sendToDevice?.forEach((eventType) => widgetApi.requestCapabilityToSendToDevice(eventType));\n capabilities.receiveToDevice?.forEach((eventType) => widgetApi.requestCapabilityToReceiveToDevice(eventType));\n if (\n capabilities.sendDelayedEvents &&\n (capabilities.sendEvent?.length ||\n capabilities.sendMessage === true ||\n (Array.isArray(capabilities.sendMessage) && capabilities.sendMessage.length) ||\n capabilities.sendState?.length)\n ) {\n widgetApi.requestCapability(MatrixCapabilities.MSC4157SendDelayedEvent);\n }\n if (capabilities.updateDelayedEvents) {\n widgetApi.requestCapability(MatrixCapabilities.MSC4157UpdateDelayedEvent);\n }\n if (capabilities.turnServers) {\n widgetApi.requestCapability(MatrixCapabilities.MSC3846TurnServers);\n }\n\n widgetApi.on(`action:${WidgetApiToWidgetAction.SendEvent}`, this.onEvent);\n widgetApi.on(`action:${WidgetApiToWidgetAction.SendToDevice}`, this.onToDevice);\n\n // Open communication with the host\n widgetApi.start();\n // Send a content loaded event now we've started the widget API\n // Note that element-web currently does not use waitForIFrameLoad=false and so\n // does *not* (yes, that is the right way around) wait for this event. Let's\n // start sending this, then once this has rolled out, we can change element-web to\n // use waitForIFrameLoad=false and have a widget API that's less racy.\n if (sendContentLoaded) widgetApi.sendContentLoaded();\n }\n\n public async startClient(opts: IStartClientOpts = {}): Promise<void> {\n this.lifecycle = new AbortController();\n\n // Create our own user object artificially (instead of waiting for sync)\n // so it's always available, even if the user is not in any rooms etc.\n const userId = this.getUserId();\n if (userId) {\n this.store.storeUser(new User(userId));\n }\n\n // Even though we have no access token and cannot sync, the sync class\n // still has some valuable helper methods that we make use of, so we\n // instantiate it anyways\n if (opts.slidingSync) {\n this.syncApi = new SlidingSyncSdk(opts.slidingSync, this, opts, this.buildSyncApiOptions());\n } else {\n this.syncApi = new SyncApi(this, opts, this.buildSyncApiOptions());\n }\n\n this.room = this.syncApi.createRoom(this.roomId);\n this.store.storeRoom(this.room);\n\n await this.widgetApiReady;\n\n // Backfill the requested events\n // We only get the most recent event for every type + state key combo,\n // so it doesn't really matter what order we inject them in\n await Promise.all(\n this.capabilities.receiveState?.map(async ({ eventType, stateKey }) => {\n const rawEvents = await this.widgetApi.readStateEvents(eventType, undefined, stateKey, [this.roomId]);\n const events = rawEvents.map((rawEvent) => new MatrixEvent(rawEvent as Partial<IEvent>));\n\n if (this.syncApi instanceof SyncApi) {\n // Passing undefined for `stateAfterEventList` allows will make `injectRoomEvents` run in legacy mode\n // -> state events in `timelineEventList` will update the state.\n await this.syncApi.injectRoomEvents(this.room!, undefined, events);\n } else {\n await this.syncApi!.injectRoomEvents(this.room!, events); // Sliding Sync\n }\n events.forEach((event) => {\n this.emit(ClientEvent.Event, event);\n logger.info(`Backfilled event ${event.getId()} ${event.getType()} ${event.getStateKey()}`);\n });\n }) ?? [],\n );\n\n if (opts.clientWellKnownPollPeriod !== undefined) {\n this.clientWellKnownIntervalID = setInterval(() => {\n this.fetchClientWellKnown();\n }, 1000 * opts.clientWellKnownPollPeriod);\n this.fetchClientWellKnown();\n }\n\n this.setSyncState(SyncState.Syncing);\n logger.info(\"Finished backfilling events\");\n\n this.matrixRTC.start();\n\n // Watch for TURN servers, if requested\n if (this.capabilities.turnServers) this.watchTurnServers();\n }\n\n public stopClient(): void {\n this.widgetApi.off(`action:${WidgetApiToWidgetAction.SendEvent}`, this.onEvent);\n this.widgetApi.off(`action:${WidgetApiToWidgetAction.SendToDevice}`, this.onToDevice);\n\n super.stopClient();\n this.lifecycle!.abort(); // Signal to other async tasks that the client has stopped\n }\n\n public async joinRoom(roomIdOrAlias: string): Promise<Room> {\n if (roomIdOrAlias === this.roomId) return this.room!;\n throw new Error(`Unknown room: ${roomIdOrAlias}`);\n }\n\n protected async encryptAndSendEvent(room: Room, event: MatrixEvent): Promise<ISendEventResponse>;\n protected async encryptAndSendEvent(\n room: Room,\n event: MatrixEvent,\n delayOpts: SendDelayedEventRequestOpts,\n ): Promise<SendDelayedEventResponse>;\n protected async encryptAndSendEvent(\n room: Room,\n event: MatrixEvent,\n delayOpts?: SendDelayedEventRequestOpts,\n ): Promise<ISendEventResponse | SendDelayedEventResponse> {\n // We need to extend the content with the redacts parameter\n // The js sdk uses event.redacts but the widget api uses event.content.redacts\n // This will be converted back to event.redacts in the widget driver.\n const content = event.event.redacts\n ? { ...event.getContent(), redacts: event.event.redacts }\n : event.getContent();\n\n // Delayed event special case.\n if (delayOpts) {\n // TODO: updatePendingEvent for delayed events?\n const response = await this.widgetApi.sendRoomEvent(\n event.getType(),\n content,\n room.roomId,\n \"delay\" in delayOpts ? delayOpts.delay : undefined,\n \"parent_delay_id\" in delayOpts ? delayOpts.parent_delay_id : undefined,\n );\n return this.validateSendDelayedEventResponse(response);\n }\n\n const txId = event.getTxnId();\n // Add the txnId to the pending list (still with unknown evID)\n if (txId) this.pendingSendingEventsTxId.push({ type: event.getType(), id: undefined, txId });\n\n let response: ISendEventFromWidgetResponseData;\n try {\n response = await this.widgetApi.sendRoomEvent(event.getType(), content, room.roomId);\n } catch (e) {\n this.updatePendingEventStatus(room, event, EventStatus.NOT_SENT);\n throw e;\n }\n // This also checks for an event id on the response\n room.updatePendingEvent(event, EventStatus.SENT, response.event_id);\n\n // Update the pending events list with the eventId\n this.pendingSendingEventsTxId.forEach((p) => {\n if (p.txId === txId) p.id = response.event_id;\n });\n this.eventEmitter.emit(RoomWidgetClientEvent.PendingEventsChanged);\n\n return { event_id: response.event_id! };\n }\n\n public async sendStateEvent(\n roomId: string,\n eventType: string,\n content: any,\n stateKey = \"\",\n ): Promise<ISendEventResponse> {\n const response = await this.widgetApi.sendStateEvent(eventType, stateKey, content, roomId);\n if (response.event_id === undefined) {\n throw new Error(\"'event_id' absent from response to an event request\");\n }\n return { event_id: response.event_id };\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line\n public async _unstable_sendDelayedStateEvent<K extends keyof StateEvents>(\n roomId: string,\n delayOpts: SendDelayedEventRequestOpts,\n eventType: K,\n content: StateEvents[K],\n stateKey = \"\",\n ): Promise<SendDelayedEventResponse> {\n if (!(await this.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw Error(\"Server does not support the delayed events API\");\n }\n\n const response = await this.widgetApi.sendStateEvent(\n eventType,\n stateKey,\n content,\n roomId,\n \"delay\" in delayOpts ? delayOpts.delay : undefined,\n \"parent_delay_id\" in delayOpts ? delayOpts.parent_delay_id : undefined,\n );\n return this.validateSendDelayedEventResponse(response);\n }\n\n private validateSendDelayedEventResponse(response: ISendEventFromWidgetResponseData): SendDelayedEventResponse {\n if (response.delay_id === undefined) {\n throw new Error(\"'delay_id' absent from response to a delayed event request\");\n }\n return { delay_id: response.delay_id };\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line\n public async _unstable_updateDelayedEvent(delayId: string, action: UpdateDelayedEventAction): Promise<EmptyObject> {\n if (!(await this.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw Error(\"Server does not support the delayed events API\");\n }\n\n await this.widgetApi.updateDelayedEvent(delayId, action);\n return {};\n }\n\n public async sendToDevice(eventType: string, contentMap: SendToDeviceContentMap): Promise<EmptyObject> {\n await this.widgetApi.sendToDevice(eventType, false, recursiveMapToObject(contentMap));\n return {};\n }\n\n public async getOpenIdToken(): Promise<IOpenIDToken> {\n const token = await this.widgetApi.requestOpenIDConnectToken();\n // the IOpenIDCredentials from the widget-api and IOpenIDToken form the matrix-js-sdk are compatible.\n // we still recreate the token to make this transparent and catch'able by the linter in case the types change in the future.\n return <IOpenIDToken>{\n access_token: token.access_token,\n expires_in: token.expires_in,\n matrix_server_name: token.matrix_server_name,\n token_type: token.token_type,\n };\n }\n\n public async queueToDevice({ eventType, batch }: ToDeviceBatch): Promise<void> {\n // map: user Id → device Id → payload\n const contentMap: MapWithDefault<string, Map<string, ToDevicePayload>> = new MapWithDefault(() => new Map());\n for (const { userId, deviceId, payload } of batch) {\n contentMap.getOrCreate(userId).set(deviceId, payload);\n }\n\n await this.widgetApi.sendToDevice(eventType, false, recursiveMapToObject(contentMap));\n }\n\n public async encryptAndSendToDevices(userDeviceInfoArr: OlmDevice[], payload: object): Promise<void> {\n // map: user Id → device Id → payload\n const contentMap: MapWithDefault<string, Map<string, object>> = new MapWithDefault(() => new Map());\n for (const { userId, deviceId } of userDeviceInfoArr) {\n contentMap.getOrCreate(userId).set(deviceId, payload);\n }\n\n await this.widgetApi.sendToDevice((payload as { type: string }).type, true, recursiveMapToObject(contentMap));\n }\n\n /**\n * Send an event to a specific list of devices via the widget API. Optionally encrypts the event.\n *\n * If you are using a full MatrixClient you would be calling {@link MatrixClient.getCrypto().encryptToDeviceMessages()} followed\n * by {@link MatrixClient.queueToDevice}.\n *\n * However, this is combined into a single step when running as an embedded widget client. So, we expose this method for those\n * that need it.\n *\n * @param eventType - Type of the event to send.\n * @param encrypted - Whether the event should be encrypted.\n * @param contentMap - The content to send. Map from user_id to device_id to content object.\n */\n public async sendToDeviceViaWidgetApi(\n eventType: string,\n encrypted: boolean,\n contentMap: SendToDeviceContentMap,\n ): Promise<void> {\n await this.widgetApi.sendToDevice(eventType, encrypted, recursiveMapToObject(contentMap));\n }\n\n // Overridden since we get TURN servers automatically over the widget API,\n // and this method would otherwise complain about missing an access token\n public async checkTurnServers(): Promise<boolean> {\n return this.turnServers.length > 0;\n }\n\n // Overridden since we 'sync' manually without the sync API\n public getSyncState(): SyncState | null {\n return this.syncState;\n }\n\n private setSyncState(state: SyncState): void {\n const oldState = this.syncState;\n this.syncState = state;\n this.emit(ClientEvent.Sync, state, oldState);\n }\n\n private async ack(ev: CustomEvent<IWidgetApiRequest>): Promise<void> {\n await this.widgetApi.transport.reply<IWidgetApiAcknowledgeResponseData>(ev.detail, {});\n }\n\n private updateTxId = async (event: MatrixEvent): Promise<void> => {\n // We update the txId for remote echos that originate from this client.\n // This happens with the help of `pendingSendingEventsTxId` where we store all events that are currently sending\n // with their widget txId and once ready the final evId.\n if (\n // This could theoretically be an event send by this device\n // In that case we need to update the txId of the event because the embedded client/widget\n // knows this event with a different transaction Id than what was used by the host client.\n event.getSender() === this.getUserId() &&\n // We optimize by not blocking events from types that we have not send\n // with this client.\n this.pendingSendingEventsTxId.some((p) => event.getType() === p.type)\n ) {\n // Compare by event Id if we have a matching pending event where we know the txId.\n let matchingTxId = this.pendingSendingEventsTxId.find((p) => p.id === event.getId())?.txId;\n // Block any further processing of this event until we have received the sending response.\n // -> until we know the event id.\n // -> until we have not pending events anymore.\n while (!matchingTxId && this.pendingSendingEventsTxId.length > 0) {\n // Recheck whenever the PendingEventsChanged\n await new Promise<void>((resolve) =>\n this.eventEmitter.once(RoomWidgetClientEvent.PendingEventsChanged, () => resolve()),\n );\n matchingTxId = this.pendingSendingEventsTxId.find((p) => p.id === event.getId())?.txId;\n }\n\n // We found the correct txId: we update the event and delete the entry of the pending events.\n if (matchingTxId) {\n event.setTxnId(matchingTxId);\n event.setUnsigned({ ...event.getUnsigned(), transaction_id: matchingTxId });\n }\n this.pendingSendingEventsTxId = this.pendingSendingEventsTxId.filter((p) => p.id !== event.getId());\n\n // Emit once there are no pending events anymore to release all other events that got\n // awaited in the `while (!matchingTxId && this.pendingSendingEventsTxId.length > 0)` loop\n // but are not send by this client.\n if (this.pendingSendingEventsTxId.length === 0) {\n this.eventEmitter.emit(RoomWidgetClientEvent.PendingEventsChanged);\n }\n }\n };\n\n private onEvent = async (ev: CustomEvent<ISendEventToWidgetActionRequest>): Promise<void> => {\n ev.preventDefault();\n\n // Verify the room ID matches, since it's possible for the client to\n // send us events from other rooms if this widget is always on screen\n if (ev.detail.data.room_id === this.roomId) {\n const event = new MatrixEvent(ev.detail.data as Partial<IEvent>);\n\n // Only inject once we have update the txId\n await this.updateTxId(event);\n\n // The widget API does not tell us whether a state event came from `state_after` or not so we assume legacy behaviour for now.\n if (this.syncApi instanceof SyncApi) {\n // The code will want to be something like:\n // ```\n // if (!params.addToTimeline && !params.addToState) {\n // // Passing undefined for `stateAfterEventList` makes `injectRoomEvents` run in \"legacy mode\"\n // // -> state events part of the `timelineEventList` parameter will update the state.\n // this.injectRoomEvents(this.room!, [], undefined, [event]);\n // } else {\n // this.injectRoomEvents(this.room!, undefined, params.addToState ? [event] : [], params.addToTimeline ? [event] : []);\n // }\n // ```\n\n // Passing undefined for `stateAfterEventList` allows will make `injectRoomEvents` run in legacy mode\n // -> state events in `timelineEventList` will update the state.\n await this.syncApi.injectRoomEvents(this.room!, [], undefined, [event]);\n } else {\n // The code will want to be something like:\n // ```\n // if (!params.addToTimeline && !params.addToState) {\n // this.injectRoomEvents(this.room!, [], [event]);\n // } else {\n // this.injectRoomEvents(this.room!, params.addToState ? [event] : [], params.addToTimeline ? [event] : []);\n // }\n // ```\n await this.syncApi!.injectRoomEvents(this.room!, [], [event]); // Sliding Sync\n }\n this.emit(ClientEvent.Event, event);\n this.setSyncState(SyncState.Syncing);\n logger.info(`Received event ${event.getId()} ${event.getType()} ${event.getStateKey()}`);\n } else {\n const { event_id: eventId, room_id: roomId } = ev.detail.data;\n logger.info(`Received event ${eventId} for a different room ${roomId}; discarding`);\n }\n\n await this.ack(ev);\n };\n\n private onToDevice = async (ev: CustomEvent<ISendToDeviceToWidgetActionRequest>): Promise<void> => {\n ev.preventDefault();\n\n const event = new MatrixEvent({\n type: ev.detail.data.type,\n sender: ev.detail.data.sender,\n content: ev.detail.data.content as IContent,\n });\n // Mark the event as encrypted if it was, using fake contents and keys since those are unknown to us\n if (ev.detail.data.encrypted) event.makeEncrypted(EventType.RoomMessageEncrypted, {}, \"\", \"\");\n\n this.emit(ClientEvent.ToDeviceEvent, event);\n this.setSyncState(SyncState.Syncing);\n await this.ack(ev);\n };\n\n private async watchTurnServers(): Promise<void> {\n const servers = this.widgetApi.getTurnServers();\n const onClientStopped = (): void => {\n servers.return(undefined);\n };\n this.lifecycle!.signal.addEventListener(\"abort\", onClientStopped);\n\n try {\n for await (const server of servers) {\n this.turnServers = [\n {\n urls: server.uris,\n username: server.username,\n credential: server.password,\n },\n ];\n this.emit(ClientEvent.TurnServers, this.turnServers);\n logger.log(`Received TURN server: ${server.uris}`);\n }\n } catch (e) {\n logger.warn(\"Error watching TURN servers\", e);\n } finally {\n this.lifecycle!.signal.removeEventListener(\"abort\", onClientStopped);\n }\n }\n}\n\nfunction processAndThrow(error: unknown): never {\n if (error instanceof WidgetApiResponseError && error.data.matrix_api_error) {\n throw MatrixError.fromWidgetApiErrorData(error.data.matrix_api_error);\n } else {\n throw error;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"embedded.js","names":["WidgetApiToWidgetAction","WidgetApiResponseError","MatrixCapabilities","MatrixEvent","EventStatus","EventType","logger","MatrixClient","ClientEvent","UNSTABLE_MSC4140_DELAYED_EVENTS","SyncApi","SyncState","SlidingSyncSdk","ConnectionError","MatrixError","User","MapWithDefault","recursiveMapToObject","TypedEventEmitter","UnsupportedDelayedEventsEndpointError","RoomWidgetClientEvent","RoomWidgetClient","constructor","widgetApi","capabilities","roomId","opts","sendContentLoaded","_this","_capabilities$sendEve","_capabilities$receive","_capabilities$sendSta","_capabilities$receive2","_capabilities$sendEve2","_capabilities$receive3","_capabilities$sendSta2","_capabilities$receive4","_capabilities$sendToD","_capabilities$receive5","_capabilities$sendEve3","_capabilities$sendSta3","this","_defineProperty","_ref","_asyncToGenerator","event","getSender","getUserId","pendingSendingEventsTxId","some","p","getType","type","_this$pendingSendingE","matchingTxId","find","id","getId","txId","length","_this$pendingSendingE2","Promise","resolve","eventEmitter","once","PendingEventsChanged","setTxnId","setUnsigned","_objectSpread","getUnsigned","transaction_id","filter","emit","_x","apply","arguments","_ref2","ev","preventDefault","detail","data","room_id","updateTxId","syncApi","injectRoomEvents","room","undefined","Event","setSyncState","Syncing","info","concat","getStateKey","event_id","eventId","ack","_x2","_ref3","sender","content","encrypted","makeEncrypted","RoomMessageEncrypted","ToDeviceEvent","_x3","transportSend","transport","send","bind","_ref4","action","error","processAndThrow","_x4","_x5","transportSendComplete","sendComplete","_ref5","_x6","_x7","widgetApiReady","sendEvent","receiveEvent","sendMessage","Array","isArray","receiveMessage","sendState","receiveState","requestCapabilityForRoomTimeline","forEach","eventType","requestCapabilityToSendEvent","requestCapabilityToReceiveEvent","requestCapabilityToSendMessage","msgType","requestCapabilityToReceiveMessage","_ref6","stateKey","requestCapabilityToSendState","_ref7","requestCapabilityToReceiveState","sendToDevice","requestCapabilityToSendToDevice","receiveToDevice","requestCapabilityToReceiveToDevice","sendDelayedEvents","requestCapability","MSC4157SendDelayedEvent","updateDelayedEvents","MSC4157UpdateDelayedEvent","turnServers","MSC3846TurnServers","on","SendEvent","onEvent","SendToDevice","onToDevice","start","startClient","_arguments","_this2","_this2$capabilities$r","_this2$capabilities$r2","lifecycle","AbortController","userId","store","storeUser","slidingSync","buildSyncApiOptions","createRoom","storeRoom","all","map","_ref9","_ref8","rawEvents","readStateEvents","events","rawEvent","_x8","clientWellKnownPollPeriod","clientWellKnownIntervalID","setInterval","fetchClientWellKnown","matrixRTC","watchTurnServers","stopClient","off","abort","joinRoom","roomIdOrAlias","_this3","Error","encryptAndSendEvent","delayOpts","_this4","redacts","getContent","response","sendRoomEvent","delay","parent_delay_id","catch","timeoutToConnectionError","validateSendDelayedEventResponse","getTxnId","push","e","updatePendingEventStatus","NOT_SENT","updatePendingEvent","SENT","sendStateEvent","_arguments2","_this5","_unstable_sendDelayedStateEvent","_arguments3","_this6","doesServerSupportUnstableFeature","delay_id","_unstable_updateDelayedEvent","delayId","_this7","updateDelayedEvent","contentMap","_this8","getOpenIdToken","_this9","token","requestOpenIDConnectToken","access_token","expires_in","matrix_server_name","token_type","queueToDevice","_ref10","_this10","batch","Map","deviceId","payload","getOrCreate","set","encryptAndSendToDevices","userDeviceInfoArr","_this11","sendToDeviceViaWidgetApi","_this12","checkTurnServers","_this13","getSyncState","syncState","state","oldState","Sync","_this14","reply","_this15","servers","getTurnServers","onClientStopped","return","signal","addEventListener","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_asyncIterator","_step","next","done","server","value","urls","uris","username","credential","password","TurnServers","log","err","warn","removeEventListener","matrix_api_error","fromWidgetApiErrorData","message"],"sources":["../src/embedded.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport {\n type WidgetApi,\n WidgetApiToWidgetAction,\n WidgetApiResponseError,\n MatrixCapabilities,\n type IWidgetApiRequest,\n type IWidgetApiAcknowledgeResponseData,\n type ISendEventToWidgetActionRequest,\n type ISendToDeviceToWidgetActionRequest,\n type ISendEventFromWidgetResponseData,\n type IWidgetApiRequestData,\n type WidgetApiAction,\n type IWidgetApiResponse,\n type IWidgetApiResponseData,\n} from \"matrix-widget-api\";\n\nimport { MatrixEvent, type IEvent, type IContent, EventStatus } from \"./models/event.ts\";\nimport {\n type ISendEventResponse,\n type SendDelayedEventRequestOpts,\n type SendDelayedEventResponse,\n type UpdateDelayedEventAction,\n} from \"./@types/requests.ts\";\nimport { EventType, type StateEvents } from \"./@types/event.ts\";\nimport { logger } from \"./logger.ts\";\nimport {\n MatrixClient,\n ClientEvent,\n type IMatrixClientCreateOpts,\n type IStartClientOpts,\n type SendToDeviceContentMap,\n type IOpenIDToken,\n UNSTABLE_MSC4140_DELAYED_EVENTS,\n} from \"./client.ts\";\nimport { SyncApi, SyncState } from \"./sync.ts\";\nimport { SlidingSyncSdk } from \"./sliding-sync-sdk.ts\";\nimport { ConnectionError, MatrixError } from \"./http-api/errors.ts\";\nimport { User } from \"./models/user.ts\";\nimport { type Room } from \"./models/room.ts\";\nimport { type ToDeviceBatch, type ToDevicePayload } from \"./models/ToDeviceMessage.ts\";\nimport { MapWithDefault, recursiveMapToObject } from \"./utils.ts\";\nimport { type EmptyObject, TypedEventEmitter, UnsupportedDelayedEventsEndpointError } from \"./matrix.ts\";\n\ninterface IStateEventRequest {\n eventType: string;\n stateKey?: string;\n}\n\nexport interface OlmDevice {\n /**\n * The user ID of the device owner.\n */\n userId: string;\n /**\n * The device ID of the device.\n */\n deviceId: string;\n}\n\nexport interface ICapabilities {\n /**\n * Event types that this client expects to send.\n */\n sendEvent?: string[];\n /**\n * Event types that this client expects to receive.\n */\n receiveEvent?: string[];\n\n /**\n * Message types that this client expects to send, or true for all message\n * types.\n */\n sendMessage?: string[] | true;\n /**\n * Message types that this client expects to receive, or true for all\n * message types.\n */\n receiveMessage?: string[] | true;\n\n /**\n * Types of state events that this client expects to send.\n */\n sendState?: IStateEventRequest[];\n /**\n * Types of state events that this client expects to receive.\n */\n receiveState?: IStateEventRequest[];\n\n /**\n * To-device event types that this client expects to send.\n */\n sendToDevice?: string[];\n /**\n * To-device event types that this client expects to receive.\n */\n receiveToDevice?: string[];\n\n /**\n * Whether this client needs access to TURN servers.\n * @defaultValue false\n */\n turnServers?: boolean;\n\n /**\n * Whether this client needs to be able to send delayed events.\n * @experimental Part of MSC4140 & MSC4157\n * @defaultValue false\n */\n sendDelayedEvents?: boolean;\n\n /**\n * Whether this client needs to be able to update delayed events.\n * @experimental Part of MSC4140 & MSC4157\n * @defaultValue false\n */\n updateDelayedEvents?: boolean;\n}\n\nexport enum RoomWidgetClientEvent {\n PendingEventsChanged = \"PendingEvent.pendingEventsChanged\",\n}\nexport type EventHandlerMap = { [RoomWidgetClientEvent.PendingEventsChanged]: () => void };\n\n/**\n * A MatrixClient that routes its requests through the widget API instead of the\n * real CS API.\n * @experimental This class is considered unstable!\n */\nexport class RoomWidgetClient extends MatrixClient {\n private room?: Room;\n private readonly widgetApiReady: Promise<void>;\n private lifecycle?: AbortController;\n private syncState: SyncState | null = null;\n\n private pendingSendingEventsTxId: { type: string; id: string | undefined; txId: string }[] = [];\n private eventEmitter = new TypedEventEmitter<keyof EventHandlerMap, EventHandlerMap>();\n\n /**\n *\n * @param widgetApi - The widget api to use for communication.\n * @param capabilities - The capabilities the widget client will request.\n * @param roomId - The room id the widget is associated with.\n * @param opts - The configuration options for this client.\n * @param sendContentLoaded - Whether to send a content loaded widget action immediately after initial setup.\n * Set to `false` if the widget uses `waitForIFrameLoad=true` (in this case the client does not expect a content loaded action at all),\n * or if the the widget wants to send the `ContentLoaded` action at a later point in time after the initial setup.\n */\n public constructor(\n private readonly widgetApi: WidgetApi,\n private readonly capabilities: ICapabilities,\n private readonly roomId: string,\n opts: IMatrixClientCreateOpts,\n sendContentLoaded: boolean,\n ) {\n super(opts);\n\n const transportSend = this.widgetApi.transport.send.bind(this.widgetApi.transport);\n this.widgetApi.transport.send = async <\n T extends IWidgetApiRequestData,\n R extends IWidgetApiResponseData = IWidgetApiAcknowledgeResponseData,\n >(\n action: WidgetApiAction,\n data: T,\n ): Promise<R> => {\n try {\n return await transportSend(action, data);\n } catch (error) {\n processAndThrow(error);\n }\n };\n\n const transportSendComplete = this.widgetApi.transport.sendComplete.bind(this.widgetApi.transport);\n this.widgetApi.transport.sendComplete = async <T extends IWidgetApiRequestData, R extends IWidgetApiResponse>(\n action: WidgetApiAction,\n data: T,\n ): Promise<R> => {\n try {\n return await transportSendComplete(action, data);\n } catch (error) {\n processAndThrow(error);\n }\n };\n\n this.widgetApiReady = new Promise<void>((resolve) => this.widgetApi.once(\"ready\", resolve));\n\n // Request capabilities for the functionality this client needs to support\n if (\n capabilities.sendEvent?.length ||\n capabilities.receiveEvent?.length ||\n capabilities.sendMessage === true ||\n (Array.isArray(capabilities.sendMessage) && capabilities.sendMessage.length) ||\n capabilities.receiveMessage === true ||\n (Array.isArray(capabilities.receiveMessage) && capabilities.receiveMessage.length) ||\n capabilities.sendState?.length ||\n capabilities.receiveState?.length\n ) {\n widgetApi.requestCapabilityForRoomTimeline(roomId);\n }\n capabilities.sendEvent?.forEach((eventType) => widgetApi.requestCapabilityToSendEvent(eventType));\n capabilities.receiveEvent?.forEach((eventType) => widgetApi.requestCapabilityToReceiveEvent(eventType));\n if (capabilities.sendMessage === true) {\n widgetApi.requestCapabilityToSendMessage();\n } else if (Array.isArray(capabilities.sendMessage)) {\n capabilities.sendMessage.forEach((msgType) => widgetApi.requestCapabilityToSendMessage(msgType));\n }\n if (capabilities.receiveMessage === true) {\n widgetApi.requestCapabilityToReceiveMessage();\n } else if (Array.isArray(capabilities.receiveMessage)) {\n capabilities.receiveMessage.forEach((msgType) => widgetApi.requestCapabilityToReceiveMessage(msgType));\n }\n capabilities.sendState?.forEach(({ eventType, stateKey }) =>\n widgetApi.requestCapabilityToSendState(eventType, stateKey),\n );\n capabilities.receiveState?.forEach(({ eventType, stateKey }) =>\n widgetApi.requestCapabilityToReceiveState(eventType, stateKey),\n );\n capabilities.sendToDevice?.forEach((eventType) => widgetApi.requestCapabilityToSendToDevice(eventType));\n capabilities.receiveToDevice?.forEach((eventType) => widgetApi.requestCapabilityToReceiveToDevice(eventType));\n if (\n capabilities.sendDelayedEvents &&\n (capabilities.sendEvent?.length ||\n capabilities.sendMessage === true ||\n (Array.isArray(capabilities.sendMessage) && capabilities.sendMessage.length) ||\n capabilities.sendState?.length)\n ) {\n widgetApi.requestCapability(MatrixCapabilities.MSC4157SendDelayedEvent);\n }\n if (capabilities.updateDelayedEvents) {\n widgetApi.requestCapability(MatrixCapabilities.MSC4157UpdateDelayedEvent);\n }\n if (capabilities.turnServers) {\n widgetApi.requestCapability(MatrixCapabilities.MSC3846TurnServers);\n }\n\n widgetApi.on(`action:${WidgetApiToWidgetAction.SendEvent}`, this.onEvent);\n widgetApi.on(`action:${WidgetApiToWidgetAction.SendToDevice}`, this.onToDevice);\n\n // Open communication with the host\n widgetApi.start();\n // Send a content loaded event now we've started the widget API\n // Note that element-web currently does not use waitForIFrameLoad=false and so\n // does *not* (yes, that is the right way around) wait for this event. Let's\n // start sending this, then once this has rolled out, we can change element-web to\n // use waitForIFrameLoad=false and have a widget API that's less racy.\n if (sendContentLoaded) widgetApi.sendContentLoaded();\n }\n\n public async startClient(opts: IStartClientOpts = {}): Promise<void> {\n this.lifecycle = new AbortController();\n\n // Create our own user object artificially (instead of waiting for sync)\n // so it's always available, even if the user is not in any rooms etc.\n const userId = this.getUserId();\n if (userId) {\n this.store.storeUser(new User(userId));\n }\n\n // Even though we have no access token and cannot sync, the sync class\n // still has some valuable helper methods that we make use of, so we\n // instantiate it anyways\n if (opts.slidingSync) {\n this.syncApi = new SlidingSyncSdk(opts.slidingSync, this, opts, this.buildSyncApiOptions());\n } else {\n this.syncApi = new SyncApi(this, opts, this.buildSyncApiOptions());\n }\n\n this.room = this.syncApi.createRoom(this.roomId);\n this.store.storeRoom(this.room);\n\n await this.widgetApiReady;\n\n // Backfill the requested events\n // We only get the most recent event for every type + state key combo,\n // so it doesn't really matter what order we inject them in\n await Promise.all(\n this.capabilities.receiveState?.map(async ({ eventType, stateKey }) => {\n const rawEvents = await this.widgetApi.readStateEvents(eventType, undefined, stateKey, [this.roomId]);\n const events = rawEvents.map((rawEvent) => new MatrixEvent(rawEvent as Partial<IEvent>));\n\n if (this.syncApi instanceof SyncApi) {\n // Passing undefined for `stateAfterEventList` allows will make `injectRoomEvents` run in legacy mode\n // -> state events in `timelineEventList` will update the state.\n await this.syncApi.injectRoomEvents(this.room!, undefined, events);\n } else {\n await this.syncApi!.injectRoomEvents(this.room!, events); // Sliding Sync\n }\n events.forEach((event) => {\n this.emit(ClientEvent.Event, event);\n logger.info(`Backfilled event ${event.getId()} ${event.getType()} ${event.getStateKey()}`);\n });\n }) ?? [],\n );\n\n if (opts.clientWellKnownPollPeriod !== undefined) {\n this.clientWellKnownIntervalID = setInterval(() => {\n this.fetchClientWellKnown();\n }, 1000 * opts.clientWellKnownPollPeriod);\n this.fetchClientWellKnown();\n }\n\n this.setSyncState(SyncState.Syncing);\n logger.info(\"Finished backfilling events\");\n\n this.matrixRTC.start();\n\n // Watch for TURN servers, if requested\n if (this.capabilities.turnServers) this.watchTurnServers();\n }\n\n public stopClient(): void {\n this.widgetApi.off(`action:${WidgetApiToWidgetAction.SendEvent}`, this.onEvent);\n this.widgetApi.off(`action:${WidgetApiToWidgetAction.SendToDevice}`, this.onToDevice);\n\n super.stopClient();\n this.lifecycle!.abort(); // Signal to other async tasks that the client has stopped\n }\n\n public async joinRoom(roomIdOrAlias: string): Promise<Room> {\n if (roomIdOrAlias === this.roomId) return this.room!;\n throw new Error(`Unknown room: ${roomIdOrAlias}`);\n }\n\n protected async encryptAndSendEvent(room: Room, event: MatrixEvent): Promise<ISendEventResponse>;\n protected async encryptAndSendEvent(\n room: Room,\n event: MatrixEvent,\n delayOpts: SendDelayedEventRequestOpts,\n ): Promise<SendDelayedEventResponse>;\n protected async encryptAndSendEvent(\n room: Room,\n event: MatrixEvent,\n delayOpts?: SendDelayedEventRequestOpts,\n ): Promise<ISendEventResponse | SendDelayedEventResponse> {\n // We need to extend the content with the redacts parameter\n // The js sdk uses event.redacts but the widget api uses event.content.redacts\n // This will be converted back to event.redacts in the widget driver.\n const content = event.event.redacts\n ? { ...event.getContent(), redacts: event.event.redacts }\n : event.getContent();\n\n // Delayed event special case.\n if (delayOpts) {\n // TODO: updatePendingEvent for delayed events?\n const response = await this.widgetApi\n .sendRoomEvent(\n event.getType(),\n content,\n room.roomId,\n \"delay\" in delayOpts ? delayOpts.delay : undefined,\n \"parent_delay_id\" in delayOpts ? delayOpts.parent_delay_id : undefined,\n )\n .catch(timeoutToConnectionError);\n return this.validateSendDelayedEventResponse(response);\n }\n\n const txId = event.getTxnId();\n // Add the txnId to the pending list (still with unknown evID)\n if (txId) this.pendingSendingEventsTxId.push({ type: event.getType(), id: undefined, txId });\n\n let response: ISendEventFromWidgetResponseData;\n try {\n response = await this.widgetApi\n .sendRoomEvent(event.getType(), content, room.roomId)\n .catch(timeoutToConnectionError);\n } catch (e) {\n this.updatePendingEventStatus(room, event, EventStatus.NOT_SENT);\n throw e;\n }\n // This also checks for an event id on the response\n room.updatePendingEvent(event, EventStatus.SENT, response.event_id);\n\n // Update the pending events list with the eventId\n this.pendingSendingEventsTxId.forEach((p) => {\n if (p.txId === txId) p.id = response.event_id;\n });\n this.eventEmitter.emit(RoomWidgetClientEvent.PendingEventsChanged);\n\n return { event_id: response.event_id! };\n }\n\n public async sendStateEvent(\n roomId: string,\n eventType: string,\n content: any,\n stateKey = \"\",\n ): Promise<ISendEventResponse> {\n const response = await this.widgetApi\n .sendStateEvent(eventType, stateKey, content, roomId)\n .catch(timeoutToConnectionError);\n if (response.event_id === undefined) {\n throw new Error(\"'event_id' absent from response to an event request\");\n }\n return { event_id: response.event_id };\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line\n public async _unstable_sendDelayedStateEvent<K extends keyof StateEvents>(\n roomId: string,\n delayOpts: SendDelayedEventRequestOpts,\n eventType: K,\n content: StateEvents[K],\n stateKey = \"\",\n ): Promise<SendDelayedEventResponse> {\n if (!(await this.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\n \"Server does not support the delayed events API\",\n \"sendDelayedStateEvent\",\n );\n }\n\n const response = await this.widgetApi\n .sendStateEvent(\n eventType,\n stateKey,\n content,\n roomId,\n \"delay\" in delayOpts ? delayOpts.delay : undefined,\n \"parent_delay_id\" in delayOpts ? delayOpts.parent_delay_id : undefined,\n )\n .catch(timeoutToConnectionError);\n return this.validateSendDelayedEventResponse(response);\n }\n\n private validateSendDelayedEventResponse(response: ISendEventFromWidgetResponseData): SendDelayedEventResponse {\n if (response.delay_id === undefined) {\n throw new Error(\"'delay_id' absent from response to a delayed event request\");\n }\n return { delay_id: response.delay_id };\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line\n public async _unstable_updateDelayedEvent(delayId: string, action: UpdateDelayedEventAction): Promise<EmptyObject> {\n if (!(await this.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\n \"Server does not support the delayed events API\",\n \"updateDelayedEvent\",\n );\n }\n\n await this.widgetApi.updateDelayedEvent(delayId, action).catch(timeoutToConnectionError);\n return {};\n }\n\n public async sendToDevice(eventType: string, contentMap: SendToDeviceContentMap): Promise<EmptyObject> {\n await this.widgetApi\n .sendToDevice(eventType, false, recursiveMapToObject(contentMap))\n .catch(timeoutToConnectionError);\n return {};\n }\n\n public async getOpenIdToken(): Promise<IOpenIDToken> {\n const token = await this.widgetApi.requestOpenIDConnectToken().catch(timeoutToConnectionError);\n // the IOpenIDCredentials from the widget-api and IOpenIDToken form the matrix-js-sdk are compatible.\n // we still recreate the token to make this transparent and catch'able by the linter in case the types change in the future.\n return <IOpenIDToken>{\n access_token: token.access_token,\n expires_in: token.expires_in,\n matrix_server_name: token.matrix_server_name,\n token_type: token.token_type,\n };\n }\n\n public async queueToDevice({ eventType, batch }: ToDeviceBatch): Promise<void> {\n // map: user Id → device Id → payload\n const contentMap: MapWithDefault<string, Map<string, ToDevicePayload>> = new MapWithDefault(() => new Map());\n for (const { userId, deviceId, payload } of batch) {\n contentMap.getOrCreate(userId).set(deviceId, payload);\n }\n\n await this.widgetApi\n .sendToDevice(eventType, false, recursiveMapToObject(contentMap))\n .catch(timeoutToConnectionError);\n }\n\n public async encryptAndSendToDevices(userDeviceInfoArr: OlmDevice[], payload: object): Promise<void> {\n // map: user Id → device Id → payload\n const contentMap: MapWithDefault<string, Map<string, object>> = new MapWithDefault(() => new Map());\n for (const { userId, deviceId } of userDeviceInfoArr) {\n contentMap.getOrCreate(userId).set(deviceId, payload);\n }\n\n await this.widgetApi\n .sendToDevice((payload as { type: string }).type, true, recursiveMapToObject(contentMap))\n .catch(timeoutToConnectionError);\n }\n\n /**\n * Send an event to a specific list of devices via the widget API. Optionally encrypts the event.\n *\n * If you are using a full MatrixClient you would be calling {@link MatrixClient.getCrypto().encryptToDeviceMessages()} followed\n * by {@link MatrixClient.queueToDevice}.\n *\n * However, this is combined into a single step when running as an embedded widget client. So, we expose this method for those\n * that need it.\n *\n * @param eventType - Type of the event to send.\n * @param encrypted - Whether the event should be encrypted.\n * @param contentMap - The content to send. Map from user_id to device_id to content object.\n */\n public async sendToDeviceViaWidgetApi(\n eventType: string,\n encrypted: boolean,\n contentMap: SendToDeviceContentMap,\n ): Promise<void> {\n await this.widgetApi\n .sendToDevice(eventType, encrypted, recursiveMapToObject(contentMap))\n .catch(timeoutToConnectionError);\n }\n\n // Overridden since we get TURN servers automatically over the widget API,\n // and this method would otherwise complain about missing an access token\n public async checkTurnServers(): Promise<boolean> {\n return this.turnServers.length > 0;\n }\n\n // Overridden since we 'sync' manually without the sync API\n public getSyncState(): SyncState | null {\n return this.syncState;\n }\n\n private setSyncState(state: SyncState): void {\n const oldState = this.syncState;\n this.syncState = state;\n this.emit(ClientEvent.Sync, state, oldState);\n }\n\n private async ack(ev: CustomEvent<IWidgetApiRequest>): Promise<void> {\n await this.widgetApi.transport.reply<IWidgetApiAcknowledgeResponseData>(ev.detail, {});\n }\n\n private updateTxId = async (event: MatrixEvent): Promise<void> => {\n // We update the txId for remote echos that originate from this client.\n // This happens with the help of `pendingSendingEventsTxId` where we store all events that are currently sending\n // with their widget txId and once ready the final evId.\n if (\n // This could theoretically be an event send by this device\n // In that case we need to update the txId of the event because the embedded client/widget\n // knows this event with a different transaction Id than what was used by the host client.\n event.getSender() === this.getUserId() &&\n // We optimize by not blocking events from types that we have not send\n // with this client.\n this.pendingSendingEventsTxId.some((p) => event.getType() === p.type)\n ) {\n // Compare by event Id if we have a matching pending event where we know the txId.\n let matchingTxId = this.pendingSendingEventsTxId.find((p) => p.id === event.getId())?.txId;\n // Block any further processing of this event until we have received the sending response.\n // -> until we know the event id.\n // -> until we have not pending events anymore.\n while (!matchingTxId && this.pendingSendingEventsTxId.length > 0) {\n // Recheck whenever the PendingEventsChanged\n await new Promise<void>((resolve) =>\n this.eventEmitter.once(RoomWidgetClientEvent.PendingEventsChanged, () => resolve()),\n );\n matchingTxId = this.pendingSendingEventsTxId.find((p) => p.id === event.getId())?.txId;\n }\n\n // We found the correct txId: we update the event and delete the entry of the pending events.\n if (matchingTxId) {\n event.setTxnId(matchingTxId);\n event.setUnsigned({ ...event.getUnsigned(), transaction_id: matchingTxId });\n }\n this.pendingSendingEventsTxId = this.pendingSendingEventsTxId.filter((p) => p.id !== event.getId());\n\n // Emit once there are no pending events anymore to release all other events that got\n // awaited in the `while (!matchingTxId && this.pendingSendingEventsTxId.length > 0)` loop\n // but are not send by this client.\n if (this.pendingSendingEventsTxId.length === 0) {\n this.eventEmitter.emit(RoomWidgetClientEvent.PendingEventsChanged);\n }\n }\n };\n\n private onEvent = async (ev: CustomEvent<ISendEventToWidgetActionRequest>): Promise<void> => {\n ev.preventDefault();\n\n // Verify the room ID matches, since it's possible for the client to\n // send us events from other rooms if this widget is always on screen\n if (ev.detail.data.room_id === this.roomId) {\n const event = new MatrixEvent(ev.detail.data as Partial<IEvent>);\n\n // Only inject once we have update the txId\n await this.updateTxId(event);\n\n // The widget API does not tell us whether a state event came from `state_after` or not so we assume legacy behaviour for now.\n if (this.syncApi instanceof SyncApi) {\n // The code will want to be something like:\n // ```\n // if (!params.addToTimeline && !params.addToState) {\n // // Passing undefined for `stateAfterEventList` makes `injectRoomEvents` run in \"legacy mode\"\n // // -> state events part of the `timelineEventList` parameter will update the state.\n // this.injectRoomEvents(this.room!, [], undefined, [event]);\n // } else {\n // this.injectRoomEvents(this.room!, undefined, params.addToState ? [event] : [], params.addToTimeline ? [event] : []);\n // }\n // ```\n\n // Passing undefined for `stateAfterEventList` allows will make `injectRoomEvents` run in legacy mode\n // -> state events in `timelineEventList` will update the state.\n await this.syncApi.injectRoomEvents(this.room!, [], undefined, [event]);\n } else {\n // The code will want to be something like:\n // ```\n // if (!params.addToTimeline && !params.addToState) {\n // this.injectRoomEvents(this.room!, [], [event]);\n // } else {\n // this.injectRoomEvents(this.room!, params.addToState ? [event] : [], params.addToTimeline ? [event] : []);\n // }\n // ```\n await this.syncApi!.injectRoomEvents(this.room!, [], [event]); // Sliding Sync\n }\n this.emit(ClientEvent.Event, event);\n this.setSyncState(SyncState.Syncing);\n logger.info(`Received event ${event.getId()} ${event.getType()} ${event.getStateKey()}`);\n } else {\n const { event_id: eventId, room_id: roomId } = ev.detail.data;\n logger.info(`Received event ${eventId} for a different room ${roomId}; discarding`);\n }\n\n await this.ack(ev);\n };\n\n private onToDevice = async (ev: CustomEvent<ISendToDeviceToWidgetActionRequest>): Promise<void> => {\n ev.preventDefault();\n\n const event = new MatrixEvent({\n type: ev.detail.data.type,\n sender: ev.detail.data.sender,\n content: ev.detail.data.content as IContent,\n });\n // Mark the event as encrypted if it was, using fake contents and keys since those are unknown to us\n if (ev.detail.data.encrypted) event.makeEncrypted(EventType.RoomMessageEncrypted, {}, \"\", \"\");\n\n this.emit(ClientEvent.ToDeviceEvent, event);\n this.setSyncState(SyncState.Syncing);\n await this.ack(ev);\n };\n\n private async watchTurnServers(): Promise<void> {\n const servers = this.widgetApi.getTurnServers();\n const onClientStopped = (): void => {\n servers.return(undefined);\n };\n this.lifecycle!.signal.addEventListener(\"abort\", onClientStopped);\n\n try {\n for await (const server of servers) {\n this.turnServers = [\n {\n urls: server.uris,\n username: server.username,\n credential: server.password,\n },\n ];\n this.emit(ClientEvent.TurnServers, this.turnServers);\n logger.log(`Received TURN server: ${server.uris}`);\n }\n } catch (e) {\n logger.warn(\"Error watching TURN servers\", e);\n } finally {\n this.lifecycle!.signal.removeEventListener(\"abort\", onClientStopped);\n }\n }\n}\n\nfunction processAndThrow(error: unknown): never {\n if (error instanceof WidgetApiResponseError && error.data.matrix_api_error) {\n throw MatrixError.fromWidgetApiErrorData(error.data.matrix_api_error);\n } else {\n throw error;\n }\n}\n\n/**\n * This converts an \"Request timed out\" error from the PostmessageTransport into a ConnectionError.\n * It either throws the original error or a new ConnectionError.\n **/\nfunction timeoutToConnectionError(error: unknown): never {\n // TODO: this should not check on error.message but instead it should be a specific type\n // error instanceof WidgetTimeoutError\n if (error instanceof Error && error.message === \"Request timed out\") {\n throw new ConnectionError(\"widget api timeout\");\n }\n throw error;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/errors.d.ts
CHANGED
|
@@ -21,4 +21,11 @@ export declare class KeySignatureUploadError extends Error {
|
|
|
21
21
|
export declare class ClientStoppedError extends Error {
|
|
22
22
|
constructor();
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* This error is thrown when the Homeserver does not support the delayed events enpdpoints.
|
|
26
|
+
*/
|
|
27
|
+
export declare class UnsupportedDelayedEventsEndpointError extends Error {
|
|
28
|
+
clientEndpoint: "sendDelayedEvent" | "updateDelayedEvent" | "sendDelayedStateEvent" | "getDelayedEvents";
|
|
29
|
+
constructor(message: string, clientEndpoint: "sendDelayedEvent" | "updateDelayedEvent" | "sendDelayedStateEvent" | "getDelayedEvents");
|
|
30
|
+
}
|
|
24
31
|
//# sourceMappingURL=errors.d.ts.map
|
package/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAgBA,oBAAY,uBAAuB;IAC/B,MAAM,YAAY;CACrB;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAGX,MAAM,EAAE,uBAAuB;IAFlE,OAAc,OAAO,0BAAkC;gBAEpB,MAAM,EAAE,uBAAuB;CAOrE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAG1B,KAAK,EAAE,GAAG;gBAD1B,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,GAAG;CAIjC;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;;CAI5C"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAgBA,oBAAY,uBAAuB;IAC/B,MAAM,YAAY;CACrB;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAGX,MAAM,EAAE,uBAAuB;IAFlE,OAAc,OAAO,0BAAkC;gBAEpB,MAAM,EAAE,uBAAuB;CAOrE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAG1B,KAAK,EAAE,GAAG;gBAD1B,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,GAAG;CAIjC;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;;CAI5C;AAED;;GAEG;AACH,qBAAa,qCAAsC,SAAQ,KAAK;IAGjD,cAAc,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,uBAAuB,GAAG,kBAAkB;gBAD/G,OAAO,EAAE,MAAM,EACR,cAAc,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,uBAAuB,GAAG,kBAAkB;CAKtH"}
|
package/lib/errors.js
CHANGED
|
@@ -48,4 +48,15 @@ export class ClientStoppedError extends Error {
|
|
|
48
48
|
super("MatrixClient has been stopped");
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* This error is thrown when the Homeserver does not support the delayed events enpdpoints.
|
|
54
|
+
*/
|
|
55
|
+
export class UnsupportedDelayedEventsEndpointError extends Error {
|
|
56
|
+
constructor(message, clientEndpoint) {
|
|
57
|
+
super(message);
|
|
58
|
+
this.clientEndpoint = clientEndpoint;
|
|
59
|
+
this.name = "UnsupportedDelayedEventsEndpointError";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
51
62
|
//# sourceMappingURL=errors.js.map
|
package/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":["InvalidCryptoStoreState","InvalidCryptoStoreError","Error","constructor","reason","message","concat","name","_defineProperty","TooNew","KeySignatureUploadError","value","ClientStoppedError"],"sources":["../src/errors.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport enum InvalidCryptoStoreState {\n TooNew = \"TOO_NEW\",\n}\n\nexport class InvalidCryptoStoreError extends Error {\n public static TOO_NEW = InvalidCryptoStoreState.TooNew;\n\n public constructor(public readonly reason: InvalidCryptoStoreState) {\n const message =\n `Crypto store is invalid because ${reason}, ` +\n `please stop the client, delete all data and start the client again`;\n super(message);\n this.name = \"InvalidCryptoStoreError\";\n }\n}\n\nexport class KeySignatureUploadError extends Error {\n public constructor(\n message: string,\n public readonly value: any,\n ) {\n super(message);\n }\n}\n\n/**\n * It is invalid to call most methods once {@link MatrixClient#stopClient} has been called.\n *\n * This error will be thrown if you attempt to do so.\n *\n * {@link MatrixClient#stopClient} itself is an exception to this: it may safely be called multiple times on the same\n * instance.\n */\nexport class ClientStoppedError extends Error {\n public constructor() {\n super(\"MatrixClient has been stopped\");\n }\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAYA,uBAAuB,0BAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAA,OAAvBA,uBAAuB;AAAA;AAInC,OAAO,MAAMC,uBAAuB,SAASC,KAAK,CAAC;EAGxCC,WAAWA,CAAiBC,MAA+B,EAAE;IAChE,IAAMC,OAAO,GACT,mCAAAC,MAAA,CAAmCF,MAAM,8EAC2B;IACxE,KAAK,CAACC,OAAO,CAAC;IAAC,KAJgBD,MAA+B,GAA/BA,MAA+B;IAK9D,IAAI,CAACG,IAAI,GAAG,yBAAyB;EACzC;AACJ;AAACC,eAAA,CAVYP,uBAAuB,aACRD,uBAAuB,CAACS,MAAM;AAW1D,OAAO,MAAMC,uBAAuB,SAASR,KAAK,CAAC;EACxCC,WAAWA,CACdE,OAAe,EACCM,KAAU,EAC5B;IACE,KAAK,CAACN,OAAO,CAAC;IAAC,KAFCM,KAAU,GAAVA,KAAU;EAG9B;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,SAASV,KAAK,CAAC;EACnCC,WAAWA,CAAA,EAAG;IACjB,KAAK,CAAC,+BAA+B,CAAC;EAC1C;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"errors.js","names":["InvalidCryptoStoreState","InvalidCryptoStoreError","Error","constructor","reason","message","concat","name","_defineProperty","TooNew","KeySignatureUploadError","value","ClientStoppedError","UnsupportedDelayedEventsEndpointError","clientEndpoint"],"sources":["../src/errors.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport enum InvalidCryptoStoreState {\n TooNew = \"TOO_NEW\",\n}\n\nexport class InvalidCryptoStoreError extends Error {\n public static TOO_NEW = InvalidCryptoStoreState.TooNew;\n\n public constructor(public readonly reason: InvalidCryptoStoreState) {\n const message =\n `Crypto store is invalid because ${reason}, ` +\n `please stop the client, delete all data and start the client again`;\n super(message);\n this.name = \"InvalidCryptoStoreError\";\n }\n}\n\nexport class KeySignatureUploadError extends Error {\n public constructor(\n message: string,\n public readonly value: any,\n ) {\n super(message);\n }\n}\n\n/**\n * It is invalid to call most methods once {@link MatrixClient#stopClient} has been called.\n *\n * This error will be thrown if you attempt to do so.\n *\n * {@link MatrixClient#stopClient} itself is an exception to this: it may safely be called multiple times on the same\n * instance.\n */\nexport class ClientStoppedError extends Error {\n public constructor() {\n super(\"MatrixClient has been stopped\");\n }\n}\n\n/**\n * This error is thrown when the Homeserver does not support the delayed events enpdpoints.\n */\nexport class UnsupportedDelayedEventsEndpointError extends Error {\n public constructor(\n message: string,\n public clientEndpoint: \"sendDelayedEvent\" | \"updateDelayedEvent\" | \"sendDelayedStateEvent\" | \"getDelayedEvents\",\n ) {\n super(message);\n this.name = \"UnsupportedDelayedEventsEndpointError\";\n }\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAYA,uBAAuB,0BAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAA,OAAvBA,uBAAuB;AAAA;AAInC,OAAO,MAAMC,uBAAuB,SAASC,KAAK,CAAC;EAGxCC,WAAWA,CAAiBC,MAA+B,EAAE;IAChE,IAAMC,OAAO,GACT,mCAAAC,MAAA,CAAmCF,MAAM,8EAC2B;IACxE,KAAK,CAACC,OAAO,CAAC;IAAC,KAJgBD,MAA+B,GAA/BA,MAA+B;IAK9D,IAAI,CAACG,IAAI,GAAG,yBAAyB;EACzC;AACJ;AAACC,eAAA,CAVYP,uBAAuB,aACRD,uBAAuB,CAACS,MAAM;AAW1D,OAAO,MAAMC,uBAAuB,SAASR,KAAK,CAAC;EACxCC,WAAWA,CACdE,OAAe,EACCM,KAAU,EAC5B;IACE,KAAK,CAACN,OAAO,CAAC;IAAC,KAFCM,KAAU,GAAVA,KAAU;EAG9B;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,SAASV,KAAK,CAAC;EACnCC,WAAWA,CAAA,EAAG;IACjB,KAAK,CAAC,+BAA+B,CAAC;EAC1C;AACJ;;AAEA;AACA;AACA;AACA,OAAO,MAAMU,qCAAqC,SAASX,KAAK,CAAC;EACtDC,WAAWA,CACdE,OAAe,EACRS,cAAwG,EACjH;IACE,KAAK,CAACT,OAAO,CAAC;IAAC,KAFRS,cAAwG,GAAxGA,cAAwG;IAG/G,IAAI,CAACP,IAAI,GAAG,uCAAuC;EACvD;AACJ","ignoreList":[]}
|
package/lib/http-api/fetch.d.ts
CHANGED
|
@@ -5,9 +5,11 @@ import { type QueryDict } from "../utils.ts";
|
|
|
5
5
|
interface TypedResponse<T> extends Response {
|
|
6
6
|
json(): Promise<T>;
|
|
7
7
|
}
|
|
8
|
-
export type ResponseType<T, O extends IHttpOpts> = O extends
|
|
8
|
+
export type ResponseType<T, O extends IHttpOpts> = O extends {
|
|
9
|
+
json: false;
|
|
10
|
+
} ? string : O extends {
|
|
9
11
|
onlyData: true;
|
|
10
|
-
} ? T : TypedResponse<T>;
|
|
12
|
+
} | undefined ? T : TypedResponse<T>;
|
|
11
13
|
export declare class FetchHttpApi<O extends IHttpOpts> {
|
|
12
14
|
private eventEmitter;
|
|
13
15
|
readonly opts: O;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/http-api/fetch.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EACH,YAAY,EACZ,KAAK,sBAAsB,EAC3B,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,IAAI,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,UAAU,aAAa,CAAC,CAAC,CAAE,SAAQ,QAAQ;IACvC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/http-api/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","names":["ErrorResponse","OidcAuthError","checkObjectHasKeys","encodeParams","Method","ConnectionError","MatrixError","TokenRefreshError","HttpApiEvent","anySignal","parseErrorResponse","timeoutSignal","singleAsyncExecution","TokenRefreshOutcome","FetchHttpApi","constructor","eventEmitter","opts","_opts$useAuthorizatio","_defineProperty","_initProto","AbortController","onlyData","useAuthorizationHeader","abort","abortController","fetch","resource","options","fetchFn","globalThis","setIdBaseUrl","url","idBaseUrl","idServerRequest","method","path","params","prefix","accessToken","Error","queryParams","undefined","body","Get","fullUri","getUrl","json","headers","Authorization","concat","requestOtherUrl","authedRequest","_arguments","arguments","_this","_asyncToGenerator","paramOpts","length","_objectSpread","access_token","tokenRefreshPromise","response","request","error","errcode","doNotAttemptTokenRefresh","tryRefreshToken","Promise","allSettled","outcome","Success","Failure","inhibitLogoutEmit","emit","SessionLoggedOut","NoConsent","message","data","consent_uri","_this2","refreshToken","tokenRefreshFunction","Logout","_this2$opts$logger","logger","warn","baseUrl","_arguments2","_this3","_this3$opts$logger","_opts$json","_body$constructor","_opts$localTimeoutMs","_opts$keepAlive","urlForLogs","sanitizeUrlForLogs","debug","Object","assign","jsonBody","name","timeout","localTimeoutMs","keepAlive","signals","signal","push","abortSignal","JSON","stringify","cleanup","res","start","Date","now","_this3$opts$logger2","mode","redirect","referrer","referrerPolicy","cache","credentials","keepalive","priority","status","e","_this3$opts$logger3","ok","text","asUrl","URL","sanitizedQs","URLSearchParams","key","searchParams","keys","append","sanitizedQsString","toString","sanitizedQsUrlPiece","origin","pathname","_unused","baseUrlWithFallback","baseUrlWithoutTrailingSlash","endsWith","slice","_FetchHttpApi","_applyDecs"],"sources":["../../src/http-api/fetch.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MatrixHttpApi} for the public class.\n */\n\nimport { ErrorResponse as OidcAuthError } from \"oidc-client-ts\";\n\nimport { checkObjectHasKeys, encodeParams } from \"../utils.ts\";\nimport { type TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { Method } from \"./method.ts\";\nimport { ConnectionError, MatrixError, TokenRefreshError } from \"./errors.ts\";\nimport {\n HttpApiEvent,\n type HttpApiEventHandlerMap,\n type IHttpOpts,\n type IRequestOpts,\n type Body,\n} from \"./interface.ts\";\nimport { anySignal, parseErrorResponse, timeoutSignal } from \"./utils.ts\";\nimport { type QueryDict } from \"../utils.ts\";\nimport { singleAsyncExecution } from \"../utils/decorators.ts\";\n\ninterface TypedResponse<T> extends Response {\n json(): Promise<T>;\n}\n\nexport type ResponseType<T, O extends IHttpOpts> = O extends undefined\n ? T\n : O extends { onlyData: true }\n ? T\n : TypedResponse<T>;\n\nconst enum TokenRefreshOutcome {\n Success = \"success\",\n Failure = \"failure\",\n Logout = \"logout\",\n}\n\nexport class FetchHttpApi<O extends IHttpOpts> {\n private abortController = new AbortController();\n\n public constructor(\n private eventEmitter: TypedEventEmitter<HttpApiEvent, HttpApiEventHandlerMap>,\n public readonly opts: O,\n ) {\n checkObjectHasKeys(opts, [\"baseUrl\", \"prefix\"]);\n opts.onlyData = !!opts.onlyData;\n opts.useAuthorizationHeader = opts.useAuthorizationHeader ?? true;\n }\n\n public abort(): void {\n this.abortController.abort();\n this.abortController = new AbortController();\n }\n\n public fetch(resource: URL | string, options?: RequestInit): ReturnType<typeof globalThis.fetch> {\n if (this.opts.fetchFn) {\n return this.opts.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n\n /**\n * Sets the base URL for the identity server\n * @param url - The new base url\n */\n public setIdBaseUrl(url?: string): void {\n this.opts.idBaseUrl = url;\n }\n\n public idServerRequest<T extends object = Record<string, unknown>>(\n method: Method,\n path: string,\n params: Record<string, string | string[]> | undefined,\n prefix: string,\n accessToken?: string,\n ): Promise<ResponseType<T, O>> {\n if (!this.opts.idBaseUrl) {\n throw new Error(\"No identity server base URL set\");\n }\n\n let queryParams: QueryDict | undefined = undefined;\n let body: Record<string, string | string[]> | undefined = undefined;\n if (method === Method.Get) {\n queryParams = params;\n } else {\n body = params;\n }\n\n const fullUri = this.getUrl(path, queryParams, prefix, this.opts.idBaseUrl);\n\n const opts: IRequestOpts = {\n json: true,\n headers: {},\n };\n if (accessToken) {\n opts.headers!.Authorization = `Bearer ${accessToken}`;\n }\n\n return this.requestOtherUrl(method, fullUri, body, opts);\n }\n\n /**\n * Promise used to block authenticated requests during a token refresh to avoid repeated expected errors.\n * @private\n */\n private tokenRefreshPromise?: Promise<unknown>;\n\n /**\n * Perform an authorised request to the homeserver.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param paramOpts - additional options.\n * When `paramOpts.doNotAttemptTokenRefresh` is true, token refresh will not be attempted\n * when an expired token is encountered. Used to only attempt token refresh once.\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData` is set, this will resolve to the `data` object only.\n * @returns Rejects with an error if a problem occurred.\n * This includes network problems and Matrix-specific error JSON.\n */\n public async authedRequest<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n paramOpts: IRequestOpts & { doNotAttemptTokenRefresh?: boolean } = {},\n ): Promise<ResponseType<T, O>> {\n if (!queryParams) queryParams = {};\n\n // avoid mutating paramOpts so they can be used on retry\n const opts = { ...paramOpts };\n\n if (this.opts.accessToken) {\n if (this.opts.useAuthorizationHeader) {\n if (!opts.headers) {\n opts.headers = {};\n }\n if (!opts.headers.Authorization) {\n opts.headers.Authorization = \"Bearer \" + this.opts.accessToken;\n }\n if (queryParams.access_token) {\n delete queryParams.access_token;\n }\n } else if (!queryParams.access_token) {\n queryParams.access_token = this.opts.accessToken;\n }\n }\n\n try {\n // Await any ongoing token refresh\n await this.tokenRefreshPromise;\n const response = await this.request<T>(method, path, queryParams, body, opts);\n return response;\n } catch (error) {\n if (!(error instanceof MatrixError)) {\n throw error;\n }\n\n if (error.errcode === \"M_UNKNOWN_TOKEN\" && !opts.doNotAttemptTokenRefresh) {\n const tokenRefreshPromise = this.tryRefreshToken();\n this.tokenRefreshPromise = Promise.allSettled([tokenRefreshPromise]);\n const outcome = await tokenRefreshPromise;\n\n if (outcome === TokenRefreshOutcome.Success) {\n // if we got a new token retry the request\n return this.authedRequest(method, path, queryParams, body, {\n ...paramOpts,\n doNotAttemptTokenRefresh: true,\n });\n }\n if (outcome === TokenRefreshOutcome.Failure) {\n throw new TokenRefreshError(error);\n }\n // Fall through to SessionLoggedOut handler below\n }\n\n // otherwise continue with error handling\n if (error.errcode == \"M_UNKNOWN_TOKEN\" && !opts?.inhibitLogoutEmit) {\n this.eventEmitter.emit(HttpApiEvent.SessionLoggedOut, error);\n } else if (error.errcode == \"M_CONSENT_NOT_GIVEN\") {\n this.eventEmitter.emit(HttpApiEvent.NoConsent, error.message, error.data.consent_uri);\n }\n\n throw error;\n }\n }\n\n /**\n * Attempt to refresh access tokens.\n * On success, sets new access and refresh tokens in opts.\n * @returns Promise that resolves to a boolean - true when token was refreshed successfully\n */\n @singleAsyncExecution\n private async tryRefreshToken(): Promise<TokenRefreshOutcome> {\n if (!this.opts.refreshToken || !this.opts.tokenRefreshFunction) {\n return TokenRefreshOutcome.Logout;\n }\n\n try {\n const { accessToken, refreshToken } = await this.opts.tokenRefreshFunction(this.opts.refreshToken);\n this.opts.accessToken = accessToken;\n this.opts.refreshToken = refreshToken;\n // successfully got new tokens\n return TokenRefreshOutcome.Success;\n } catch (error) {\n this.opts.logger?.warn(\"Failed to refresh token\", error);\n if (error instanceof OidcAuthError || error instanceof MatrixError) {\n return TokenRefreshOutcome.Logout;\n }\n return TokenRefreshOutcome.Failure;\n }\n }\n\n /**\n * Perform a request to the homeserver without any credentials.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData</code> is set, this will resolve to the <code>data`\n * object only.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public request<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n opts?: IRequestOpts,\n ): Promise<ResponseType<T, O>> {\n const fullUri = this.getUrl(path, queryParams, opts?.prefix, opts?.baseUrl);\n return this.requestOtherUrl<T>(method, fullUri, body, opts);\n }\n\n /**\n * Perform a request to an arbitrary URL.\n * @param method - The HTTP method e.g. \"GET\".\n * @param url - The HTTP URL object.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to data unless `onlyData` is specified as false,\n * where the resolved value will be a fetch Response object.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public async requestOtherUrl<T>(\n method: Method,\n url: URL | string,\n body?: Body,\n opts: Pick<IRequestOpts, \"headers\" | \"json\" | \"localTimeoutMs\" | \"keepAlive\" | \"abortSignal\" | \"priority\"> = {},\n ): Promise<ResponseType<T, O>> {\n const urlForLogs = this.sanitizeUrlForLogs(url);\n this.opts.logger?.debug(`FetchHttpApi: --> ${method} ${urlForLogs}`);\n\n const headers = Object.assign({}, opts.headers || {});\n const json = opts.json ?? true;\n // We can't use getPrototypeOf here as objects made in other contexts e.g. over postMessage won't have same ref\n const jsonBody = json && body?.constructor?.name === Object.name;\n\n if (json) {\n if (jsonBody && !headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (!headers[\"Accept\"]) {\n headers[\"Accept\"] = \"application/json\";\n }\n }\n\n const timeout = opts.localTimeoutMs ?? this.opts.localTimeoutMs;\n const keepAlive = opts.keepAlive ?? false;\n const signals = [this.abortController.signal];\n if (timeout !== undefined) {\n signals.push(timeoutSignal(timeout));\n }\n if (opts.abortSignal) {\n signals.push(opts.abortSignal);\n }\n\n let data: BodyInit;\n if (jsonBody) {\n data = JSON.stringify(body);\n } else {\n data = body as BodyInit;\n }\n\n const { signal, cleanup } = anySignal(signals);\n\n let res: Response;\n const start = Date.now();\n try {\n res = await this.fetch(url, {\n signal,\n method,\n body: data,\n headers,\n mode: \"cors\",\n redirect: \"follow\",\n referrer: \"\",\n referrerPolicy: \"no-referrer\",\n cache: \"no-cache\",\n credentials: \"omit\", // we send credentials via headers\n keepalive: keepAlive,\n priority: opts.priority,\n });\n\n this.opts.logger?.debug(\n `FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${res.status}]`,\n );\n } catch (e) {\n this.opts.logger?.debug(`FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${e}]`);\n if ((<Error>e).name === \"AbortError\") {\n throw e;\n }\n throw new ConnectionError(\"fetch failed\", <Error>e);\n } finally {\n cleanup();\n }\n\n if (!res.ok) {\n throw parseErrorResponse(res, await res.text());\n }\n\n if (this.opts.onlyData) {\n return json ? res.json() : res.text();\n }\n return res as ResponseType<T, O>;\n }\n\n private sanitizeUrlForLogs(url: URL | string): string {\n try {\n let asUrl: URL;\n if (typeof url === \"string\") {\n asUrl = new URL(url);\n } else {\n asUrl = url;\n }\n // Remove the values of any URL params that could contain potential secrets\n const sanitizedQs = new URLSearchParams();\n for (const key of asUrl.searchParams.keys()) {\n sanitizedQs.append(key, \"xxx\");\n }\n const sanitizedQsString = sanitizedQs.toString();\n const sanitizedQsUrlPiece = sanitizedQsString ? `?${sanitizedQsString}` : \"\";\n\n return asUrl.origin + asUrl.pathname + sanitizedQsUrlPiece;\n } catch {\n // defensive coding for malformed url\n return \"??\";\n }\n }\n /**\n * Form and return a homeserver request URL based on the given path params and prefix.\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g. \"/createRoom\".\n * @param queryParams - A dict of query params (these will NOT be urlencoded).\n * @param prefix - The full prefix to use e.g. \"/_matrix/client/v2_alpha\", defaulting to this.opts.prefix.\n * @param baseUrl - The baseUrl to use e.g. \"https://matrix.org\", defaulting to this.opts.baseUrl.\n * @returns URL\n */\n public getUrl(path: string, queryParams?: QueryDict, prefix?: string, baseUrl?: string): URL {\n const baseUrlWithFallback = baseUrl ?? this.opts.baseUrl;\n const baseUrlWithoutTrailingSlash = baseUrlWithFallback.endsWith(\"/\")\n ? baseUrlWithFallback.slice(0, -1)\n : baseUrlWithFallback;\n const url = new URL(baseUrlWithoutTrailingSlash + (prefix ?? this.opts.prefix) + path);\n if (queryParams) {\n encodeParams(queryParams, url.searchParams);\n }\n return url;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"fetch.js","names":["ErrorResponse","OidcAuthError","checkObjectHasKeys","encodeParams","Method","ConnectionError","MatrixError","TokenRefreshError","HttpApiEvent","anySignal","parseErrorResponse","timeoutSignal","singleAsyncExecution","TokenRefreshOutcome","FetchHttpApi","constructor","eventEmitter","opts","_opts$useAuthorizatio","_defineProperty","_initProto","AbortController","onlyData","useAuthorizationHeader","abort","abortController","fetch","resource","options","fetchFn","globalThis","setIdBaseUrl","url","idBaseUrl","idServerRequest","method","path","params","prefix","accessToken","Error","queryParams","undefined","body","Get","fullUri","getUrl","json","headers","Authorization","concat","requestOtherUrl","authedRequest","_arguments","arguments","_this","_asyncToGenerator","paramOpts","length","_objectSpread","access_token","tokenRefreshPromise","response","request","error","errcode","doNotAttemptTokenRefresh","tryRefreshToken","Promise","allSettled","outcome","Success","Failure","inhibitLogoutEmit","emit","SessionLoggedOut","NoConsent","message","data","consent_uri","_this2","refreshToken","tokenRefreshFunction","Logout","_this2$opts$logger","logger","warn","baseUrl","_arguments2","_this3","_this3$opts$logger","_opts$json","_body$constructor","_opts$localTimeoutMs","_opts$keepAlive","urlForLogs","sanitizeUrlForLogs","debug","Object","assign","jsonBody","name","timeout","localTimeoutMs","keepAlive","signals","signal","push","abortSignal","JSON","stringify","cleanup","res","start","Date","now","_this3$opts$logger2","mode","redirect","referrer","referrerPolicy","cache","credentials","keepalive","priority","status","e","_this3$opts$logger3","ok","text","asUrl","URL","sanitizedQs","URLSearchParams","key","searchParams","keys","append","sanitizedQsString","toString","sanitizedQsUrlPiece","origin","pathname","_unused","baseUrlWithFallback","baseUrlWithoutTrailingSlash","endsWith","slice","_FetchHttpApi","_applyDecs"],"sources":["../../src/http-api/fetch.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MatrixHttpApi} for the public class.\n */\n\nimport { ErrorResponse as OidcAuthError } from \"oidc-client-ts\";\n\nimport { checkObjectHasKeys, encodeParams } from \"../utils.ts\";\nimport { type TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { Method } from \"./method.ts\";\nimport { ConnectionError, MatrixError, TokenRefreshError } from \"./errors.ts\";\nimport {\n HttpApiEvent,\n type HttpApiEventHandlerMap,\n type IHttpOpts,\n type IRequestOpts,\n type Body,\n} from \"./interface.ts\";\nimport { anySignal, parseErrorResponse, timeoutSignal } from \"./utils.ts\";\nimport { type QueryDict } from \"../utils.ts\";\nimport { singleAsyncExecution } from \"../utils/decorators.ts\";\n\ninterface TypedResponse<T> extends Response {\n json(): Promise<T>;\n}\n\nexport type ResponseType<T, O extends IHttpOpts> = O extends { json: false }\n ? string\n : O extends { onlyData: true } | undefined\n ? T\n : TypedResponse<T>;\n\nconst enum TokenRefreshOutcome {\n Success = \"success\",\n Failure = \"failure\",\n Logout = \"logout\",\n}\n\nexport class FetchHttpApi<O extends IHttpOpts> {\n private abortController = new AbortController();\n\n public constructor(\n private eventEmitter: TypedEventEmitter<HttpApiEvent, HttpApiEventHandlerMap>,\n public readonly opts: O,\n ) {\n checkObjectHasKeys(opts, [\"baseUrl\", \"prefix\"]);\n opts.onlyData = !!opts.onlyData;\n opts.useAuthorizationHeader = opts.useAuthorizationHeader ?? true;\n }\n\n public abort(): void {\n this.abortController.abort();\n this.abortController = new AbortController();\n }\n\n public fetch(resource: URL | string, options?: RequestInit): ReturnType<typeof globalThis.fetch> {\n if (this.opts.fetchFn) {\n return this.opts.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n\n /**\n * Sets the base URL for the identity server\n * @param url - The new base url\n */\n public setIdBaseUrl(url?: string): void {\n this.opts.idBaseUrl = url;\n }\n\n public idServerRequest<T extends object = Record<string, unknown>>(\n method: Method,\n path: string,\n params: Record<string, string | string[]> | undefined,\n prefix: string,\n accessToken?: string,\n ): Promise<ResponseType<T, O>> {\n if (!this.opts.idBaseUrl) {\n throw new Error(\"No identity server base URL set\");\n }\n\n let queryParams: QueryDict | undefined = undefined;\n let body: Record<string, string | string[]> | undefined = undefined;\n if (method === Method.Get) {\n queryParams = params;\n } else {\n body = params;\n }\n\n const fullUri = this.getUrl(path, queryParams, prefix, this.opts.idBaseUrl);\n\n const opts: IRequestOpts = {\n json: true,\n headers: {},\n };\n if (accessToken) {\n opts.headers!.Authorization = `Bearer ${accessToken}`;\n }\n\n return this.requestOtherUrl(method, fullUri, body, opts);\n }\n\n /**\n * Promise used to block authenticated requests during a token refresh to avoid repeated expected errors.\n * @private\n */\n private tokenRefreshPromise?: Promise<unknown>;\n\n /**\n * Perform an authorised request to the homeserver.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param paramOpts - additional options.\n * When `paramOpts.doNotAttemptTokenRefresh` is true, token refresh will not be attempted\n * when an expired token is encountered. Used to only attempt token refresh once.\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData` is set, this will resolve to the `data` object only.\n * @returns Rejects with an error if a problem occurred.\n * This includes network problems and Matrix-specific error JSON.\n */\n public async authedRequest<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n paramOpts: IRequestOpts & { doNotAttemptTokenRefresh?: boolean } = {},\n ): Promise<ResponseType<T, O>> {\n if (!queryParams) queryParams = {};\n\n // avoid mutating paramOpts so they can be used on retry\n const opts = { ...paramOpts };\n\n if (this.opts.accessToken) {\n if (this.opts.useAuthorizationHeader) {\n if (!opts.headers) {\n opts.headers = {};\n }\n if (!opts.headers.Authorization) {\n opts.headers.Authorization = \"Bearer \" + this.opts.accessToken;\n }\n if (queryParams.access_token) {\n delete queryParams.access_token;\n }\n } else if (!queryParams.access_token) {\n queryParams.access_token = this.opts.accessToken;\n }\n }\n\n try {\n // Await any ongoing token refresh\n await this.tokenRefreshPromise;\n const response = await this.request<T>(method, path, queryParams, body, opts);\n return response;\n } catch (error) {\n if (!(error instanceof MatrixError)) {\n throw error;\n }\n\n if (error.errcode === \"M_UNKNOWN_TOKEN\" && !opts.doNotAttemptTokenRefresh) {\n const tokenRefreshPromise = this.tryRefreshToken();\n this.tokenRefreshPromise = Promise.allSettled([tokenRefreshPromise]);\n const outcome = await tokenRefreshPromise;\n\n if (outcome === TokenRefreshOutcome.Success) {\n // if we got a new token retry the request\n return this.authedRequest(method, path, queryParams, body, {\n ...paramOpts,\n doNotAttemptTokenRefresh: true,\n });\n }\n if (outcome === TokenRefreshOutcome.Failure) {\n throw new TokenRefreshError(error);\n }\n // Fall through to SessionLoggedOut handler below\n }\n\n // otherwise continue with error handling\n if (error.errcode == \"M_UNKNOWN_TOKEN\" && !opts?.inhibitLogoutEmit) {\n this.eventEmitter.emit(HttpApiEvent.SessionLoggedOut, error);\n } else if (error.errcode == \"M_CONSENT_NOT_GIVEN\") {\n this.eventEmitter.emit(HttpApiEvent.NoConsent, error.message, error.data.consent_uri);\n }\n\n throw error;\n }\n }\n\n /**\n * Attempt to refresh access tokens.\n * On success, sets new access and refresh tokens in opts.\n * @returns Promise that resolves to a boolean - true when token was refreshed successfully\n */\n @singleAsyncExecution\n private async tryRefreshToken(): Promise<TokenRefreshOutcome> {\n if (!this.opts.refreshToken || !this.opts.tokenRefreshFunction) {\n return TokenRefreshOutcome.Logout;\n }\n\n try {\n const { accessToken, refreshToken } = await this.opts.tokenRefreshFunction(this.opts.refreshToken);\n this.opts.accessToken = accessToken;\n this.opts.refreshToken = refreshToken;\n // successfully got new tokens\n return TokenRefreshOutcome.Success;\n } catch (error) {\n this.opts.logger?.warn(\"Failed to refresh token\", error);\n if (error instanceof OidcAuthError || error instanceof MatrixError) {\n return TokenRefreshOutcome.Logout;\n }\n return TokenRefreshOutcome.Failure;\n }\n }\n\n /**\n * Perform a request to the homeserver without any credentials.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData</code> is set, this will resolve to the <code>data`\n * object only.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public request<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n opts?: IRequestOpts,\n ): Promise<ResponseType<T, O>> {\n const fullUri = this.getUrl(path, queryParams, opts?.prefix, opts?.baseUrl);\n return this.requestOtherUrl<T>(method, fullUri, body, opts);\n }\n\n /**\n * Perform a request to an arbitrary URL.\n * @param method - The HTTP method e.g. \"GET\".\n * @param url - The HTTP URL object.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to data unless `onlyData` is specified as false,\n * where the resolved value will be a fetch Response object.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public async requestOtherUrl<T>(\n method: Method,\n url: URL | string,\n body?: Body,\n opts: Pick<IRequestOpts, \"headers\" | \"json\" | \"localTimeoutMs\" | \"keepAlive\" | \"abortSignal\" | \"priority\"> = {},\n ): Promise<ResponseType<T, O>> {\n const urlForLogs = this.sanitizeUrlForLogs(url);\n this.opts.logger?.debug(`FetchHttpApi: --> ${method} ${urlForLogs}`);\n\n const headers = Object.assign({}, opts.headers || {});\n const json = opts.json ?? true;\n // We can't use getPrototypeOf here as objects made in other contexts e.g. over postMessage won't have same ref\n const jsonBody = json && body?.constructor?.name === Object.name;\n\n if (json) {\n if (jsonBody && !headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (!headers[\"Accept\"]) {\n headers[\"Accept\"] = \"application/json\";\n }\n }\n\n const timeout = opts.localTimeoutMs ?? this.opts.localTimeoutMs;\n const keepAlive = opts.keepAlive ?? false;\n const signals = [this.abortController.signal];\n if (timeout !== undefined) {\n signals.push(timeoutSignal(timeout));\n }\n if (opts.abortSignal) {\n signals.push(opts.abortSignal);\n }\n\n let data: BodyInit;\n if (jsonBody) {\n data = JSON.stringify(body);\n } else {\n data = body as BodyInit;\n }\n\n const { signal, cleanup } = anySignal(signals);\n\n let res: Response;\n const start = Date.now();\n try {\n res = await this.fetch(url, {\n signal,\n method,\n body: data,\n headers,\n mode: \"cors\",\n redirect: \"follow\",\n referrer: \"\",\n referrerPolicy: \"no-referrer\",\n cache: \"no-cache\",\n credentials: \"omit\", // we send credentials via headers\n keepalive: keepAlive,\n priority: opts.priority,\n });\n\n this.opts.logger?.debug(\n `FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${res.status}]`,\n );\n } catch (e) {\n this.opts.logger?.debug(`FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${e}]`);\n if ((<Error>e).name === \"AbortError\") {\n throw e;\n }\n throw new ConnectionError(\"fetch failed\", <Error>e);\n } finally {\n cleanup();\n }\n\n if (!res.ok) {\n throw parseErrorResponse(res, await res.text());\n }\n\n if (this.opts.onlyData) {\n return (json ? res.json() : res.text()) as ResponseType<T, O>;\n }\n return res as ResponseType<T, O>;\n }\n\n private sanitizeUrlForLogs(url: URL | string): string {\n try {\n let asUrl: URL;\n if (typeof url === \"string\") {\n asUrl = new URL(url);\n } else {\n asUrl = url;\n }\n // Remove the values of any URL params that could contain potential secrets\n const sanitizedQs = new URLSearchParams();\n for (const key of asUrl.searchParams.keys()) {\n sanitizedQs.append(key, \"xxx\");\n }\n const sanitizedQsString = sanitizedQs.toString();\n const sanitizedQsUrlPiece = sanitizedQsString ? `?${sanitizedQsString}` : \"\";\n\n return asUrl.origin + asUrl.pathname + sanitizedQsUrlPiece;\n } catch {\n // defensive coding for malformed url\n return \"??\";\n }\n }\n /**\n * Form and return a homeserver request URL based on the given path params and prefix.\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g. \"/createRoom\".\n * @param queryParams - A dict of query params (these will NOT be urlencoded).\n * @param prefix - The full prefix to use e.g. \"/_matrix/client/v2_alpha\", defaulting to this.opts.prefix.\n * @param baseUrl - The baseUrl to use e.g. \"https://matrix.org\", defaulting to this.opts.baseUrl.\n * @returns URL\n */\n public getUrl(path: string, queryParams?: QueryDict, prefix?: string, baseUrl?: string): URL {\n const baseUrlWithFallback = baseUrl ?? this.opts.baseUrl;\n const baseUrlWithoutTrailingSlash = baseUrlWithFallback.endsWith(\"/\")\n ? baseUrlWithFallback.slice(0, -1)\n : baseUrlWithFallback;\n const url = new URL(baseUrlWithoutTrailingSlash + (prefix ?? this.opts.prefix) + path);\n if (queryParams) {\n encodeParams(queryParams, url.searchParams);\n }\n return url;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptionManager.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/EncryptionManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"EncryptionManager.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/EncryptionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,44 +3,7 @@ import { type Room } from "../models/room.ts";
|
|
|
3
3
|
import { type CallMembership } from "./CallMembership.ts";
|
|
4
4
|
import { type Focus } from "./focus.ts";
|
|
5
5
|
import { type MembershipConfig } from "./MatrixRTCSession.ts";
|
|
6
|
-
|
|
7
|
-
* This interface defines what a MembershipManager uses and exposes.
|
|
8
|
-
* This interface is what we use to write tests and allows to change the actual implementation
|
|
9
|
-
* Without breaking tests because of some internal method renaming.
|
|
10
|
-
*
|
|
11
|
-
* @internal
|
|
12
|
-
*/
|
|
13
|
-
export interface IMembershipManager {
|
|
14
|
-
/**
|
|
15
|
-
* If we are trying to join the session.
|
|
16
|
-
* It does not reflect if the room state is already configures to represent us being joined.
|
|
17
|
-
* It only means that the Manager is running.
|
|
18
|
-
* @returns true if we intend to be participating in the MatrixRTC session
|
|
19
|
-
*/
|
|
20
|
-
isJoined(): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Start sending all necessary events to make this user participant in the RTC session.
|
|
23
|
-
* @param fociPreferred the list of preferred foci to use in the joined RTC membership event.
|
|
24
|
-
* @param fociActive the active focus to use in the joined RTC membership event.
|
|
25
|
-
*/
|
|
26
|
-
join(fociPreferred: Focus[], fociActive?: Focus): void;
|
|
27
|
-
/**
|
|
28
|
-
* Send all necessary events to make this user leave the RTC session.
|
|
29
|
-
* @param timeout the maximum duration in ms until the promise is forced to resolve.
|
|
30
|
-
* @returns It resolves with true in case the leave was sent successfully.
|
|
31
|
-
* It resolves with false in case we hit the timeout before sending successfully.
|
|
32
|
-
*/
|
|
33
|
-
leave(timeout?: number): Promise<boolean>;
|
|
34
|
-
/**
|
|
35
|
-
* Call this if the MatrixRTC session members have changed.
|
|
36
|
-
*/
|
|
37
|
-
onRTCSessionMemberUpdate(memberships: CallMembership[]): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* The used active focus in the currently joined session.
|
|
40
|
-
* @returns the used active focus in the currently joined session or undefined if not joined.
|
|
41
|
-
*/
|
|
42
|
-
getActiveFocus(): Focus | undefined;
|
|
43
|
-
}
|
|
6
|
+
import { type IMembershipManager } from "./NewMembershipManager.ts";
|
|
44
7
|
/**
|
|
45
8
|
* This internal class is used by the MatrixRTCSession to manage the local user's own membership of the session.
|
|
46
9
|
*
|
|
@@ -55,7 +18,8 @@ export interface IMembershipManager {
|
|
|
55
18
|
*
|
|
56
19
|
* It is recommended to only use this interface for testing to allow replacing this class.
|
|
57
20
|
*
|
|
58
|
-
*
|
|
21
|
+
* @internal
|
|
22
|
+
* @deprecated Use {@link MembershipManager} instead
|
|
59
23
|
*/
|
|
60
24
|
export declare class LegacyMembershipManager implements IMembershipManager {
|
|
61
25
|
private joinConfig;
|
|
@@ -102,4 +66,4 @@ export declare class LegacyMembershipManager implements IMembershipManager {
|
|
|
102
66
|
private readonly delayDisconnection;
|
|
103
67
|
private makeMembershipStateKey;
|
|
104
68
|
}
|
|
105
|
-
//# sourceMappingURL=
|
|
69
|
+
//# sourceMappingURL=LegacyMembershipManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegacyMembershipManager.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/LegacyMembershipManager.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,KAAK,cAAc,EAAuD,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IA4C1D,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,mBAAmB;IArD/B,OAAO,CAAC,cAAc,CAAqB;IAE3C,OAAO,CAAC,kBAAkB,CAAC,CAAgC;IAE3D;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAC,CAAU;IACnC;;OAEG;IACH,OAAO,CAAC,cAAc,CAAC,CAAQ;IAE/B,OAAO,CAAC,2BAA2B,CAAS;IAC5C,OAAO,CAAC,wBAAwB,CAAS;IACzC;;;OAGG;IACH,OAAO,CAAC,yCAAyC,CAAC,CAAS;IAC3D,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,OAAO,KAAK,gCAAgC,GAE3C;IACD,OAAO,KAAK,uBAAuB,GAElC;IACD,OAAO,KAAK,iCAAiC,GAM5C;IACD,OAAO,KAAK,yBAAyB,GAEpC;IACD,OAAO,KAAK,0BAA0B,GAErC;gBAGW,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,GAAG,YAAY,CAAC,EAC7D,MAAM,EAAE,IAAI,CAChB,YAAY,EACV,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,iCAAiC,GACjC,8BAA8B,CACnC,EACO,mBAAmB,EAAE,MAAM,cAAc,GAAG,SAAS;IAG1D,QAAQ,IAAI,OAAO;IAInB,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,IAAI;IAShD,KAAK,CAAC,OAAO,GAAE,MAAM,GAAG,SAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhE,wBAAwB,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5E,cAAc,IAAI,KAAK,GAAG,SAAS;IAmB1C,OAAO,CAAC,gCAAgC,CAiBtC;IACF,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAYV,yBAAyB;IA4HvC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAUjC;IAEF,OAAO,CAAC,sBAAsB;CAQjC"}
|