diff --git a/JitsiConference.ts b/JitsiConference.ts index 9a2d425b0f..c0f8f02b55 100644 --- a/JitsiConference.ts +++ b/JitsiConference.ts @@ -522,7 +522,7 @@ export default class JitsiConference extends Listenable { this._iceRestarts = 0; this._unsubscribers = []; - this.eventEmitter.on(JitsiConferenceEvents.E2EE_CHAT_KEY_RECEIVED, key => { + this.eventEmitter.once(JitsiConferenceEvents.E2EE_CHAT_KEY_RECEIVED, key => { this.room.eventEmitter.emit(JitsiConferenceEvents.E2EE_CHAT_KEY_RECEIVED, key); }); } @@ -1243,7 +1243,7 @@ export default class JitsiConference extends Listenable { this.p2pJingleSession.invite(localTracks) .then(() => { - this.p2pJingleSession.addEventListener(MediaSessionEvents.VIDEO_CODEC_CHANGED, () => { + this.p2pJingleSession?.addEventListener(MediaSessionEvents.VIDEO_CODEC_CHANGED, () => { this.eventEmitter.emit(JitsiConferenceEvents.VIDEO_CODEC_CHANGED); }); }) @@ -2482,6 +2482,13 @@ export default class JitsiConference extends Listenable { ); } + public cleanUpWebWorkers(): void { + if (this._e2eEncryption) { + this._e2eEncryption.dispose(); + this._e2eEncryption = null; + } + } + /** * Leaves the conference. * @param {string|undefined} reason - The reason for leaving the conference. @@ -2508,6 +2515,8 @@ export default class JitsiConference extends Listenable { this.statistics.dispose(); } + this.cleanUpWebWorkers(); + this._delayedIceFailed?.cancel(); this._maybeClearSITimeout(); diff --git a/modules/RTC/JitsiRemoteTrack.ts b/modules/RTC/JitsiRemoteTrack.ts index 122652159e..49e82a8f41 100644 --- a/modules/RTC/JitsiRemoteTrack.ts +++ b/modules/RTC/JitsiRemoteTrack.ts @@ -88,7 +88,6 @@ export default class JitsiRemoteTrack extends JitsiTrack { public isP2P: boolean; public rtcId: Nullable; public inputTensor: Nullable; - public imageDataOutput: Nullable; public dataOutput: Nullable; public input: Nullable; public frame: Nullable; @@ -186,7 +185,6 @@ export default class JitsiRemoteTrack extends JitsiTrack { this._decodedTrack = null; // Steam objects this.inputTensor = null; - this.imageDataOutput = null; this.dataOutput = null; this.input = { input: null @@ -720,6 +718,9 @@ export default class JitsiRemoteTrack extends JitsiTrack { this.attachoff = false; this.width = 0; this.height = 0; + this.dataOutput = null; + this.input = null; + this.inputBuffer = null; if (this.disposed) { return; } diff --git a/modules/e2ee-internxt/E2EEContext.ts b/modules/e2ee-internxt/E2EEContext.ts index 17762aa5c1..2c0807a59a 100644 --- a/modules/e2ee-internxt/E2EEContext.ts +++ b/modules/e2ee-internxt/E2EEContext.ts @@ -14,6 +14,8 @@ const logger = getLogger('modules/e2ee-internxt/E2EEContext'); */ export default class E2EEcontext extends Listenable { private readonly _worker: Worker; + private _workerUrl: string | null = null; + private scriptEl: HTMLScriptElement | null = null; constructor() { super(); @@ -31,15 +33,15 @@ export default class E2EEcontext extends Listenable { } private _initializeWorker(): Worker { - const scriptEl = document.querySelector( + this.scriptEl = document.querySelector( 'script[src*="lib-jitsi-meet"]', ); let baseUrl = ''; - if (scriptEl) { - const idx = scriptEl.src.lastIndexOf('/'); + if (this.scriptEl) { + const idx = this.scriptEl.src.lastIndexOf('/'); - baseUrl = `${scriptEl.src.substring(0, idx)}/`; + baseUrl = `${this.scriptEl.src.substring(0, idx)}/`; } let workerUrl = `${baseUrl}lib-jitsi-meet.e2ee-worker.js`; @@ -50,6 +52,7 @@ export default class E2EEcontext extends Listenable { }); workerUrl = URL.createObjectURL(workerBlob); + this._workerUrl = workerUrl; } return new Worker(workerUrl, { name: 'E2EE Worker' }); @@ -59,6 +62,22 @@ export default class E2EEcontext extends Listenable { this.emit('sasUpdated', sas); } + /** + * Disposes of the worker and cleans up resources. + */ + dispose() { + logger.info('E2EE: Disposing E2EE context and terminating worker'); + + this.cleanupAll(); + this._worker.terminate(); + if (this._workerUrl) { + URL.revokeObjectURL(this._workerUrl); + this._workerUrl = null; + } + this.scriptEl?.remove(); + this.scriptEl = null; + } + cleanup(participantId: string) { this._worker.postMessage({ operation: 'cleanup', diff --git a/modules/e2ee-internxt/E2EEncryption.ts b/modules/e2ee-internxt/E2EEncryption.ts index 7515d245f5..2dbc3141d4 100644 --- a/modules/e2ee-internxt/E2EEncryption.ts +++ b/modules/e2ee-internxt/E2EEncryption.ts @@ -43,6 +43,10 @@ export class E2EEncryption { return this._keyHandler.isEnabled(); } + dispose() { + this._keyHandler.dispose(); + } + /** * Enables / disables End-To-End encryption. * diff --git a/modules/e2ee-internxt/ManagedKeyHandler.ts b/modules/e2ee-internxt/ManagedKeyHandler.ts index cd9772d53f..d334f95565 100644 --- a/modules/e2ee-internxt/ManagedKeyHandler.ts +++ b/modules/e2ee-internxt/ManagedKeyHandler.ts @@ -5,6 +5,7 @@ import { JitsiConferenceEvents } from '../../JitsiConferenceEvents'; import JitsiParticipant from '../../JitsiParticipant'; import { RTCEvents } from '../../service/RTC/RTCEvents'; import JitsiLocalTrack from '../RTC/JitsiLocalTrack'; +import JitsiTrack from '../RTC/JitsiTrack'; import TraceablePeerConnection from '../RTC/TraceablePeerConnection'; import browser from '../browser'; import Listenable from '../util/Listenable'; @@ -63,6 +64,17 @@ export class ManagedKeyHandler extends Listenable { _olmAdapter: OlmAdapter; _conferenceJoined: boolean; + onUserJoined: EventListener; + onUserLeft: EventListener; + onEndpointMessageReceived: EventListener; + onConferenceJoined: EventListener; + onConferenceLeft: EventListener; + onMediaSessionStarted: EventListener; + onTrackAdded: EventListener; + onRemoteTrackAdded: EventListener; + onTrackMuteChanged: EventListener; + onSasUpdated: EventListener; + /** * Build a new AutomaticKeyHandler instance, which will be used in a given conference. */ @@ -83,59 +95,77 @@ export class ManagedKeyHandler extends Listenable { this._participantEventQueue = []; this._processingEvents = false; + this.onUserJoined = this._onParticipantJoined.bind(this); + this.onUserLeft = this._onParticipantLeft.bind(this); + this.onEndpointMessageReceived = this._onEndpointMessageReceived.bind(this); + this.onConferenceLeft = this._onConferenceLeft.bind(this); + this.onConferenceJoined = () => this._conferenceJoined = true; + this.onMediaSessionStarted = this._onMediaSessionStarted.bind(this); + this.onTrackAdded = this._onTrackAddedHandler.bind(this); + this.onRemoteTrackAdded = this._setupReceiverE2EEForTrack.bind(this); + this.onTrackMuteChanged = this._trackMuteChanged.bind(this); + this.onSasUpdated = this.sasUpdatedHandler.bind(this); + this.conference.on( JitsiConferenceEvents.USER_JOINED, - this._onParticipantJoined.bind(this), + this.onUserJoined, ); this.conference.on( JitsiConferenceEvents.USER_LEFT, - this._onParticipantLeft.bind(this), + this.onUserLeft, ); this.conference.on( JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, - this._onEndpointMessageReceived.bind(this), + this.onEndpointMessageReceived, ); this.conference.on( JitsiConferenceEvents.CONFERENCE_LEFT, - this._onConferenceLeft.bind(this), + this.onConferenceLeft, + ); + this.conference.on( + JitsiConferenceEvents.CONFERENCE_JOINED, + this.onConferenceJoined ); - this.conference.on(JitsiConferenceEvents.CONFERENCE_JOINED, () => { - this._conferenceJoined = true; - }); this.conference.on( JitsiConferenceEvents._MEDIA_SESSION_STARTED, - this._onMediaSessionStarted.bind(this), + this.onMediaSessionStarted, ); this.conference.on( JitsiConferenceEvents.TRACK_ADDED, - (track: JitsiLocalTrack) => - track.isLocal() && this._onLocalTrackAdded(track), + this.onTrackAdded, ); this.conference.rtc.on( RTCEvents.REMOTE_TRACK_ADDED, - (track: JitsiLocalTrack, tpc: TraceablePeerConnection) => - this._setupReceiverE2EEForTrack(tpc, track), + this.onRemoteTrackAdded, ); this.conference.on( JitsiConferenceEvents.TRACK_MUTE_CHANGED, - this._trackMuteChanged.bind(this), + this.onTrackMuteChanged, ); this._conferenceJoined = false; this._olmAdapter = new OlmAdapter(this.myID); - this.e2eeCtx.on('sasUpdated', (sasStr: string) => { - const sas = generateEmojiSas(sasStr); - - this.log('info', `Emitting SAS: ${sas.join(', ')}`); - this.conference.eventEmitter.emit( - JitsiConferenceEvents.E2EE_SAS_AVAILABLE, - sas, - ); - }); + this.e2eeCtx.on('sasUpdated', this.onSasUpdated); } + private _onTrackAddedHandler = (track: JitsiTrack) => { + if (track.isLocal()) { + this._onLocalTrackAdded(track as JitsiLocalTrack); + } + }; + + private sasUpdatedHandler = (sasStr: string) => { + const sas = generateEmojiSas(sasStr); + + this.log('info', `Emitting SAS: ${sas.join(', ')}`); + this.conference.eventEmitter.emit( + JitsiConferenceEvents.E2EE_SAS_AVAILABLE, + sas, + ); + }; + private async init() { await this._olmAdapter.init(); this.initialized = true; @@ -222,8 +252,8 @@ export class ManagedKeyHandler extends Listenable { * @private */ private _setupReceiverE2EEForTrack( - tpc: TraceablePeerConnection, track: JitsiLocalTrack, + tpc: TraceablePeerConnection, ) { if (!this.enabled) { return; @@ -390,8 +420,8 @@ export class ManagedKeyHandler extends Listenable { } private _onConferenceLeft() { - this.clearAllSessions(); - this._olmAdapter.clearMySession(); + this._conferenceJoined = false; + this.dispose(); } private async updateKey(pId: string, ciphertext: string, pqCiphertext: string) { @@ -410,12 +440,20 @@ export class ManagedKeyHandler extends Listenable { } } - private noOtherModerators(): boolean { - if (this.conference.isModerator()) return true; - + private isThisParticipantFirst(pId: string): boolean { + const localParticipantId = this.myID; const participants = this.conference.getParticipants(); + const list = participants.filter( + participant => + (participant.hasFeature(FEATURE_E2EE) + || participant.getProperty('e2ee.enabled') === 'true') + && localParticipantId > participant.getId(), + ).sort((a, b) => a.getId().localeCompare(b.getId())); + + if (list.length === 0) return false; + const firstParticipant = list[0].getId(); - return !participants.some(p => p.isModerator()); + return firstParticipant === pId; } private async _onEndpointMessageReceived(participant: JitsiParticipant, payload) { @@ -516,7 +554,7 @@ export class ManagedKeyHandler extends Listenable { pId, ); - if (!this.askedForChatKey && (participant.isModerator() || this.noOtherModerators())) { + if (!this.askedForChatKey && this.isThisParticipantFirst(pId)) { this.log('info', `Requesting chat key from ${pId}.`); this._sendMessage( OLM_MESSAGE_TYPES.CHAT_KEY_REQUEST, @@ -787,7 +825,7 @@ export class ManagedKeyHandler extends Listenable { `Should send session-init to IDs: [ ${list.map(p => p.getId())}]`, ); - if (!this.askedForChatKey && list.length == 0) { + if (!this.askedForChatKey && list.length === 0) { this.log('info', 'Generated chat keys'); const chatKeyECC = genSymmetricKey(); const chatKeyPQ = genSymmetricKey(); @@ -853,6 +891,63 @@ export class ManagedKeyHandler extends Listenable { await this.initSessions; } + dispose() { + this._olmAdapter.clearMySession(); + this.clearAllSessions(); + this.conference.off( + JitsiConferenceEvents.USER_JOINED, + this.onUserJoined, + ); + this.conference.off( + JitsiConferenceEvents.USER_LEFT, + this.onUserLeft, + ); + this.conference.off( + JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, + this.onEndpointMessageReceived, + ); + this.conference.off( + JitsiConferenceEvents.CONFERENCE_LEFT, + this.onConferenceLeft, + ); + this.conference.off( + JitsiConferenceEvents.CONFERENCE_JOINED, + this.onConferenceJoined + ); + this.conference.off( + JitsiConferenceEvents._MEDIA_SESSION_STARTED, + this.onMediaSessionStarted, + ); + this.conference.off( + JitsiConferenceEvents.TRACK_ADDED, + this.onTrackAdded, + ); + this.conference.rtc.off( + RTCEvents.REMOTE_TRACK_ADDED, + this.onRemoteTrackAdded, + ); + this.conference.off( + JitsiConferenceEvents.TRACK_MUTE_CHANGED, + this.onTrackMuteChanged, + ); + this.e2eeCtx.off('sasUpdated', this.onSasUpdated); + + this.onUserJoined = null; + this.onUserLeft = null; + this.onEndpointMessageReceived = null; + this.onConferenceJoined = null; + this.onConferenceLeft = null; + this.onMediaSessionStarted = null; + this.onTrackAdded = null; + this.onRemoteTrackAdded = null; + this.onTrackMuteChanged = null; + this.onSasUpdated = null; + + this.e2eeCtx.dispose(); + this._reqs.clear(); + this.update.clear(); + } + /** * Disables End-To-End encryption. */ diff --git a/modules/e2ee-internxt/OlmAdapter.ts b/modules/e2ee-internxt/OlmAdapter.ts index cdfe6c353d..58fd22ab61 100644 --- a/modules/e2ee-internxt/OlmAdapter.ts +++ b/modules/e2ee-internxt/OlmAdapter.ts @@ -127,6 +127,7 @@ export class OlmAdapter { async clearMySession() { this._olmAccount?.free(); + this._olmDataMap.clear(); } async createPQsessionInitMessage( diff --git a/modules/e2ee-internxt/Worker.ts b/modules/e2ee-internxt/Worker.ts index b9b173ca65..f50677b9b5 100644 --- a/modules/e2ee-internxt/Worker.ts +++ b/modules/e2ee-internxt/Worker.ts @@ -13,6 +13,7 @@ class E2EEWorker { private readonly _self: WorkerLike; constructor(selfInstance: WorkerLike) { + console.info('E2EE: Web Worker created'); this.contexts = new Map(); this._self = selfInstance; diff --git a/modules/xmpp/ChatRoom.ts b/modules/xmpp/ChatRoom.ts index cb1cd21a37..e9139e10f8 100644 --- a/modules/xmpp/ChatRoom.ts +++ b/modules/xmpp/ChatRoom.ts @@ -236,7 +236,7 @@ function extractIdentityInformation(node: IPresenceNode, hiddenFromRecorderFeatu */ export default class ChatRoom extends Listenable { - private encyptionKey?: Uint8Array; + private encryptionKey?: Uint8Array; private password?: string; private replaceParticipant: boolean; private members: Record; @@ -342,7 +342,7 @@ export default class ChatRoom extends Listenable { this.transcriptionStatus = JitsiTranscriptionStatus.OFF; this.initialDiscoRoomInfoReceived = false; - this.eventEmitter.on(JitsiConferenceEvents.E2EE_CHAT_KEY_RECEIVED, this.setEncryptionKey.bind(this)); + this.eventEmitter.once(JitsiConferenceEvents.E2EE_CHAT_KEY_RECEIVED, this.setEncryptionKey.bind(this)); } @@ -456,14 +456,14 @@ export default class ChatRoom extends Listenable { } public setEncryptionKey(key: Uint8Array): void { - this.encyptionKey = key; + this.encryptionKey = key; logger.info('E2E: ChatRoom got encryption key.'); if (this.pendingEncryptedMessages.length > 0) { logger.info(`E2E: Decrypting ${this.pendingEncryptedMessages.length} queued messages`); this.pendingEncryptedMessages.forEach(msg => { try { - const chatMessage = decryptSymmetricallySync(msg.txt, this.encyptionKey); + const chatMessage = decryptSymmetricallySync(msg.txt, this.encryptionKey); this.eventEmitter.emit(XMPPEvents.MESSAGE_RECEIVED, msg.from, chatMessage, this.myroomjid, msg.stamp, msg.displayName, @@ -1170,10 +1170,10 @@ export default class ChatRoom extends Listenable { type: 'groupchat' }); - if (this.encyptionKey) { - const payload = typeof message === 'object' ? JSON.stringify(message) : message; + if (this.encryptionKey) { + const plaintext = message; - message = encryptSymmetricallySync(payload, this.encyptionKey); + message = encryptSymmetricallySync(plaintext, this.encryptionKey); } // We are adding the message in a packet extension. If this element @@ -1547,7 +1547,7 @@ export default class ChatRoom extends Listenable { } const source = isVisitorMessage ? undefined : sourceAttrValue; - if (this.options.isChatEncrypted && !this.encyptionKey) { + if (this.options.isChatEncrypted && !this.encryptionKey) { this.pendingEncryptedMessages.push({ displayName, from, @@ -1562,7 +1562,7 @@ export default class ChatRoom extends Listenable { return; } - const chatMessage = this.encyptionKey ? decryptSymmetricallySync(txt, this.encyptionKey) : txt; + const chatMessage = this.encryptionKey ? decryptSymmetricallySync(txt, this.encryptionKey) : txt; // we will fire explicitly that this is a visitor(isVisitor:true) to the conference // a message with explicit name set diff --git a/modules/xmpp/JingleSessionPC.ts b/modules/xmpp/JingleSessionPC.ts index 3f1d4feba4..e3ec8e0d72 100644 --- a/modules/xmpp/JingleSessionPC.ts +++ b/modules/xmpp/JingleSessionPC.ts @@ -2042,7 +2042,7 @@ export default class JingleSessionPC extends JingleSession { // been received before the updated source map is received on the bridge channel. const { muted, videoType } = this._signalingLayer.getPeerMediaInfo(owner, mediaType, source); - muted && this.peerconnection._sourceMutedChanged(source, muted); + typeof muted !== 'undefined' && this.peerconnection._sourceMutedChanged(source, muted); this.room.eventEmitter.emit(JitsiTrackEvents.TRACK_OWNER_SET, track, owner, source, videoType); } } diff --git a/modules/xmpp/RoomMetadata.ts b/modules/xmpp/RoomMetadata.ts index a309bbe139..71e6be10fa 100644 --- a/modules/xmpp/RoomMetadata.ts +++ b/modules/xmpp/RoomMetadata.ts @@ -95,7 +95,7 @@ export default class RoomMetadata { } this._metadata = metadata; - logger.debug('Received metadata update', metadata); + logger.debug('Received metadata update', JSON.stringify(metadata)); this.room.eventEmitter.emit(XMPPEvents.ROOM_METADATA_UPDATED, metadata); } diff --git a/modules/xmpp/XmppConnection.ts b/modules/xmpp/XmppConnection.ts index 044af21a45..b932a095b1 100644 --- a/modules/xmpp/XmppConnection.ts +++ b/modules/xmpp/XmppConnection.ts @@ -405,17 +405,16 @@ export default class XmppConnection extends Listenable { if (this._usesWebsocket) { if (this._oneSuccessfulConnect) { // on reconnect we do it immediately - this._keepAliveAndCheckShard(); + this._maybeStartWSKeepAlive(0); } else { // delay it a bit to not interfere with the connection process // and to allow backend to correct any possible split brain issues // Store timeout so it can be cleared if needed - this._wsKeepAlive = setTimeout(() => this._keepAliveAndCheckShard(), 5000); + this._maybeStartWSKeepAlive(5000); } } this._oneSuccessfulConnect = true; - this._maybeStartWSKeepAlive(); this._processDeferredIQs(); this._resumeTask.cancel(); this.ping.startInterval(this._options.pingOptions?.domain || this.domain); @@ -526,24 +525,29 @@ export default class XmppConnection extends Listenable { /** * Starts the Websocket keep alive if enabled. * + * @param {number|undefined} forcedTimeout - If provided, this timeout will be used instead of + * the configured one with added jitter. + * * @private * @returns {void} */ - _maybeStartWSKeepAlive(): void { + _maybeStartWSKeepAlive(forcedTimeout?: number): void { const { websocketKeepAlive } = this._options; + // if websocketKeepAlive is not set keepAlive is disabled if (this._usesWebsocket && websocketKeepAlive > 0) { this._wsKeepAlive || logger.info(`WebSocket keep alive interval: ${websocketKeepAlive}ms`); clearTimeout(this._wsKeepAlive); - const intervalWithJitter = /* base */ websocketKeepAlive + /* jitter */ (Math.random() * 60 * 1000); + const interval = forcedTimeout + ?? (/* base */ websocketKeepAlive + /* jitter */ (Math.random() * 60 * 1000)); - logger.debug(`Scheduling next WebSocket keep-alive in ${intervalWithJitter}ms`); + logger.debug(`Scheduling next WebSocket keep-alive in ${interval}ms`); this._wsKeepAlive = setTimeout( () => this._keepAliveAndCheckShard() .then(() => this._maybeStartWSKeepAlive()), - intervalWithJitter); + interval); } } @@ -568,7 +572,10 @@ export default class XmppConnection extends Listenable { const responseShard = response.headers.get('x-jitsi-shard'); - if (responseShard !== shard) { + !responseShard && logger.warn('No x-jitsi-shard header present in keep-alive response'); + + // Ignore if no shard header is present. + if (responseShard && responseShard !== shard) { logger.error( `Detected that shard changed from ${shard} to ${responseShard}`); this.eventEmitter.emit(XmppConnection.Events.CONN_SHARD_CHANGED); diff --git a/modules/xmpp/moderator.js b/modules/xmpp/moderator.js index 834fa35e9d..402a31e361 100644 --- a/modules/xmpp/moderator.js +++ b/modules/xmpp/moderator.js @@ -107,11 +107,7 @@ export default class Moderator extends Listenable { } // Register - if (window.addEventListener) { - window.addEventListener('message', listener, false); - } else { - window.attachEvent('onmessage', listener); - } + window.addEventListener('message', listener, false); } /** diff --git a/modules/xmpp/xmpp.ts b/modules/xmpp/xmpp.ts index af2707a063..6e021a1562 100644 --- a/modules/xmpp/xmpp.ts +++ b/modules/xmpp/xmpp.ts @@ -353,11 +353,13 @@ export default class XMPP extends Listenable { /* eslint-enable camelcase */ if (this.options.testing?.enableGracefulReconnect) { + logger.debug('Shard changed, attempting graceful reconnect'); this.eventEmitter.emit( JitsiConnectionEvents.CONNECTION_FAILED, JitsiConnectionErrors.SHARD_CHANGED_ERROR ); } else { + logger.error('Shard changed, kicking the user off the conference and forcing reload', JSON.stringify(details)); this.eventEmitter.emit( JitsiConnectionEvents.CONNECTION_FAILED, JitsiConnectionErrors.OTHER_ERROR, diff --git a/package-lock.json b/package-lock.json index 57eca8ece8..e2f19ed24d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lib-jitsi-meet", - "version": "0.0.20", + "version": "0.0.21", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "lib-jitsi-meet", - "version": "0.0.20", + "version": "0.0.21", "license": "Apache-2.0", "dependencies": { "@hexagon/base64": "^2.0.4", @@ -56,9 +56,9 @@ "typedoc-plugin-no-inherit": "1.6.1", "typedoc-plugin-rename-defaults": "0.7.3", "typescript": "5.7.2", - "webpack": "5.98.0", - "webpack-bundle-analyzer": "4.4.2", - "webpack-cli": "4.9.0" + "webpack": "5.105.1", + "webpack-bundle-analyzer": "5.2.0", + "webpack-cli": "6.0.1" } }, "node_modules/@ampproject/remapping": { @@ -2991,37 +2991,45 @@ } }, "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", "dev": true, "license": "MIT", - "dependencies": { - "envinfo": "^7.7.3" + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { - "webpack-cli": "4.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, "peerDependencies": { - "webpack-cli": "4.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" }, "peerDependenciesMeta": { "webpack-dev-server": { @@ -3070,6 +3078,19 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -3496,9 +3517,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.19.tgz", - "integrity": "sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3529,24 +3550,24 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -3594,9 +3615,9 @@ } }, "node_modules/browserslist": { - "version": "4.26.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", - "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -3614,11 +3635,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.9", - "caniuse-lite": "^1.0.30001746", - "electron-to-chromium": "^1.5.227", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -3718,9 +3739,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001751", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", "dev": true, "funding": [ { @@ -4080,6 +4101,13 @@ "node": ">=4.0" } }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true, + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -4223,13 +4251,6 @@ "node": ">= 0.4" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4238,9 +4259,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.237", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.237.tgz", - "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true, "license": "ISC" }, @@ -4320,14 +4341,14 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -4363,9 +4384,9 @@ } }, "node_modules/envinfo": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.19.0.tgz", - "integrity": "sha512-DoSM9VyG6O3vqBf+p3Gjgr/Q52HYBBtO3v+4koAxt1MnWr+zEnxE+nke/yXS4lt2P4SYCHQ4V3f1i88LQVOpAw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, "license": "MIT", "bin": { @@ -4465,9 +4486,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, "license": "MIT" }, @@ -5017,30 +5038,6 @@ "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5468,19 +5465,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", @@ -5662,22 +5646,6 @@ "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==", "license": "ISC" }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -5772,27 +5740,38 @@ "node": ">= 0.4" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", "engines": { @@ -5814,16 +5793,6 @@ "node": ">=8.0.0" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5929,13 +5898,13 @@ } }, "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/is-array-buffer": { @@ -6279,19 +6248,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -6478,9 +6434,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -6855,9 +6811,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, @@ -7062,16 +7018,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -7112,9 +7058,9 @@ } }, "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, "license": "MIT", "engines": { @@ -7160,9 +7106,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.26", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", - "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, @@ -7176,19 +7122,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7319,22 +7252,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/onnxruntime-common": { "version": "1.23.0", "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.23.0.tgz", @@ -7707,13 +7624,13 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -7764,16 +7681,16 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -7806,16 +7723,16 @@ } }, "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "license": "MIT", "dependencies": { - "resolve": "^1.9.0" + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/reflect.getprototypeof": { @@ -8365,26 +8282,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dev": true, "license": "MIT", "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" } }, "node_modules/slash": { @@ -8684,16 +8594,6 @@ "node": ">=4" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -8754,9 +8654,9 @@ } }, "node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8773,9 +8673,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8905,9 +8805,9 @@ } }, "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "license": "MIT", "engines": { @@ -9291,9 +9191,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -9360,13 +9260,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true, - "license": "MIT" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9392,9 +9285,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, "license": "MIT", "dependencies": { @@ -9406,35 +9299,37 @@ } }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.105.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.1.tgz", + "integrity": "sha512-Gdj3X74CLJJ8zy4URmK42W7wTZUJrqL+z8nyGEr4dTN0kb3nVs+ZvjbTOqRYPD7qX4tUmwyHL9Q9K6T1seW6Yw==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -9453,51 +9348,53 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", - "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.2.0.tgz", + "integrity": "sha512-Etrauj1wYO/xjiz/Vfd6bW1lG9fEhrJpNmu10tv0X9kv+gyY3qiE09uYepqg1Xd0PxOvllRXwWYWjtQYoO/glQ==", "dev": true, "license": "MIT", "dependencies": { + "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^6.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "html-escaper": "^2.0.2", "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" + "picocolors": "^1.0.0", + "sirv": "^3.0.2", + "ws": "^8.19.0" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 20.9.0" } }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -9509,42 +9406,40 @@ } }, "node_modules/webpack-cli": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", - "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=10.13.0" + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x" + "webpack": "^5.82.0" }, "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, "webpack-bundle-analyzer": { "optional": true }, @@ -9553,29 +9448,39 @@ } } }, + "node_modules/webpack-cli/node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=18" } }, "node_modules/webpack-cli/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-merge": { diff --git a/package.json b/package.json index b07930ebc0..a63b3c1729 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lib-jitsi-meet", - "version": "0.0.20", + "version": "0.0.21", "description": "JS library for accessing Jitsi server side deployments", "repository": { "type": "git", @@ -63,9 +63,9 @@ "typedoc-plugin-no-inherit": "1.6.1", "typedoc-plugin-rename-defaults": "0.7.3", "typescript": "5.7.2", - "webpack": "5.98.0", - "webpack-bundle-analyzer": "4.4.2", - "webpack-cli": "4.9.0" + "webpack": "5.105.1", + "webpack-bundle-analyzer": "5.2.0", + "webpack-cli": "6.0.1" }, "scripts": { "build": "npm run gen-version && npm run build:webpack && npm run build:tsc", diff --git a/tests/ChatRoomEncrypted.spec.ts b/tests/ChatRoomEncrypted.spec.ts index f16a050adc..f6cc2297a8 100644 --- a/tests/ChatRoomEncrypted.spec.ts +++ b/tests/ChatRoomEncrypted.spec.ts @@ -68,25 +68,6 @@ describe('ChatRoomEncrypted', () => { const decryptedText = decryptSymmetricallySync(ciphertext!, key); expect(decryptedText).toBe('string message'); - }); - it('EncryptedChat: sends a object msg with elementName body correctly', () => { - room.sendMessage({ object: 'message' } as any, 'body'); - const xml = connectionSpy.calls.argsFor(0).toString(); - expect(xml).not.toBe( - '' + - '' + - ''); - expect(xml).toMatch( - '' + - '.*' + - '' - ); - const match = xml.match(/([\s\S]*?)<\/body>/); - const ciphertext = match ? match[1] : null; - - const decryptedText = decryptSymmetricallySync(ciphertext!, key); - expect(decryptedText).toBe('{"object":"message"}'); - }); it('EncryptedChat: sends a string msg with elementName json-message correctly', () => { room.sendMessage('string message', 'json-message'); @@ -107,24 +88,6 @@ describe('ChatRoomEncrypted', () => { const decryptedText = decryptSymmetricallySync(ciphertext!, key); expect(decryptedText).toBe('string message'); }); - it('EncryptedChat: sends a object msg with elementName json-message correctly', () => { - room.sendMessage({ object: 'message' } as any, 'json-message'); - const xml = connectionSpy.calls.argsFor(0).toString(); - expect(xml).not.toBe( - '' + - '' + - ''); - expect(xml).toMatch( - '' + - '.*' + - ''); - - const match = xml.match(/([\s\S]*?)<\/json-message>/); - const ciphertext = match ? match[1] : null; - - const decryptedText = decryptSymmetricallySync(ciphertext!, key); - expect(decryptedText).toBe('{"object":"message"}'); - }); }); describe('EncryptedChat: onMessage - group messages with display-name extension', () => { diff --git a/tests/mocks.ts b/tests/mocks.ts index 445f50e2b2..374f59e549 100644 --- a/tests/mocks.ts +++ b/tests/mocks.ts @@ -41,6 +41,12 @@ export class WorkerMock { postMessage(data: any) { this._fakeWorkerSelf.onmessage?.({ data } as MessageEvent); } + + terminate() { + this.onmessage = null; + this.onerror = null; + this._fakeWorkerSelf.onmessage = null; + } } export class XmppServerMock {