aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--client/package.json1
-rw-r--r--client/src/assets/player/p2p-media-loader/hls-plugin.ts311
-rw-r--r--client/src/assets/player/p2p-media-loader/p2p-media-loader-plugin.ts8
-rw-r--r--client/src/assets/player/peertube-player-manager.ts2
-rw-r--r--client/src/assets/player/peertube-plugin.ts38
-rw-r--r--client/src/assets/player/peertube-resolutions-plugin.ts88
-rw-r--r--client/src/assets/player/peertube-videojs-typings.ts38
-rw-r--r--client/src/assets/player/videojs-components/resolution-menu-button.ts41
-rw-r--r--client/src/assets/player/videojs-components/resolution-menu-item.ts48
-rw-r--r--client/src/assets/player/videojs-components/settings-menu-item.ts2
-rw-r--r--client/src/assets/player/webtorrent/webtorrent-plugin.ts111
-rw-r--r--client/src/standalone/videos/embed-api.ts74
-rw-r--r--client/src/standalone/videos/test-embed.ts2
-rw-r--r--client/yarn.lock8
-rw-r--r--package.json2
-rwxr-xr-xscripts/generate-cli-doc.sh5
-rw-r--r--server/tools/README.md83
-rw-r--r--server/tools/package.json3
-rw-r--r--server/tools/peertube-repl.ts83
-rw-r--r--server/tools/peertube-watch.ts42
-rw-r--r--server/tools/peertube.ts9
-rw-r--r--server/tools/test-live.ts102
-rw-r--r--server/tools/yarn.lock1852
-rw-r--r--support/doc/dependencies.md8
-rw-r--r--support/doc/tools.md161
-rw-r--r--yarn.lock10
26 files changed, 252 insertions, 2880 deletions
diff --git a/client/package.json b/client/package.json
index ffe7df4cd..afa0efe13 100644
--- a/client/package.json
+++ b/client/package.json
@@ -128,7 +128,6 @@
128 "typescript": "~4.3.4", 128 "typescript": "~4.3.4",
129 "video.js": "^7", 129 "video.js": "^7",
130 "videojs-contextmenu-pt": "^5.4.1", 130 "videojs-contextmenu-pt": "^5.4.1",
131 "videojs-contrib-quality-levels": "^2.0.9",
132 "videojs-dock": "^2.0.2", 131 "videojs-dock": "^2.0.2",
133 "videojs-hotkeys": "^0.2.27", 132 "videojs-hotkeys": "^0.2.27",
134 "videostream": "~3.2.1", 133 "videostream": "~3.2.1",
diff --git a/client/src/assets/player/p2p-media-loader/hls-plugin.ts b/client/src/assets/player/p2p-media-loader/hls-plugin.ts
index a1b07aea6..17b9aba97 100644
--- a/client/src/assets/player/p2p-media-loader/hls-plugin.ts
+++ b/client/src/assets/player/p2p-media-loader/hls-plugin.ts
@@ -1,9 +1,9 @@
1// Thanks https://github.com/streamroot/videojs-hlsjs-plugin 1// Thanks https://github.com/streamroot/videojs-hlsjs-plugin
2// We duplicated this plugin to choose the hls.js version we want, because streamroot only provide a bundled file 2// We duplicated this plugin to choose the hls.js version we want, because streamroot only provide a bundled file
3 3
4import Hlsjs, { ErrorData, HlsConfig, Level, ManifestLoadedData } from 'hls.js' 4import Hlsjs, { ErrorData, HlsConfig, Level, LevelSwitchingData, ManifestParsedData } from 'hls.js'
5import videojs from 'video.js' 5import videojs from 'video.js'
6import { HlsjsConfigHandlerOptions, QualityLevelRepresentation, QualityLevels, VideoJSTechHLS } from '../peertube-videojs-typings' 6import { HlsjsConfigHandlerOptions, PeerTubeResolution, VideoJSTechHLS } from '../peertube-videojs-typings'
7 7
8type ErrorCounts = { 8type ErrorCounts = {
9 [ type: string ]: number 9 [ type: string ]: number
@@ -102,15 +102,10 @@ class Html5Hlsjs {
102 private dvrDuration: number = null 102 private dvrDuration: number = null
103 private edgeMargin: number = null 103 private edgeMargin: number = null
104 104
105 private handlers: { [ id in 'play' | 'playing' | 'textTracksChange' | 'audioTracksChange' ]: EventListener } = { 105 private handlers: { [ id in 'play' ]: EventListener } = {
106 play: null, 106 play: null
107 playing: null,
108 textTracksChange: null,
109 audioTracksChange: null
110 } 107 }
111 108
112 private uiTextTrackHandled = false
113
114 constructor (vjs: typeof videojs, source: videojs.Tech.SourceObject, tech: videojs.Tech) { 109 constructor (vjs: typeof videojs, source: videojs.Tech.SourceObject, tech: videojs.Tech) {
115 this.vjs = vjs 110 this.vjs = vjs
116 this.source = source 111 this.source = source
@@ -177,10 +172,6 @@ class Html5Hlsjs {
177 // See comment for `initialize` method. 172 // See comment for `initialize` method.
178 dispose () { 173 dispose () {
179 this.videoElement.removeEventListener('play', this.handlers.play) 174 this.videoElement.removeEventListener('play', this.handlers.play)
180 this.videoElement.removeEventListener('playing', this.handlers.playing)
181
182 this.player.textTracks().removeEventListener('change', this.handlers.textTracksChange)
183 this.uiTextTrackHandled = false
184 175
185 this.hls.destroy() 176 this.hls.destroy()
186 } 177 }
@@ -281,11 +272,7 @@ class Html5Hlsjs {
281 } 272 }
282 } 273 }
283 274
284 private switchQuality (qualityId: number) { 275 private buildLevelLabel (level: Level) {
285 this.hls.currentLevel = qualityId
286 }
287
288 private _levelLabel (level: Level) {
289 if (this.player.srOptions_.levelLabelHandler) { 276 if (this.player.srOptions_.levelLabelHandler) {
290 return this.player.srOptions_.levelLabelHandler(level as any) 277 return this.player.srOptions_.levelLabelHandler(level as any)
291 } 278 }
@@ -294,167 +281,37 @@ class Html5Hlsjs {
294 if (level.width) return Math.round(level.width * 9 / 16) + 'p' 281 if (level.width) return Math.round(level.width * 9 / 16) + 'p'
295 if (level.bitrate) return (level.bitrate / 1000) + 'kbps' 282 if (level.bitrate) return (level.bitrate / 1000) + 'kbps'
296 283
297 return 0 284 return '0'
298 }
299
300 private _relayQualityChange (qualityLevels: QualityLevels) {
301 // Determine if it is "Auto" (all tracks enabled)
302 let isAuto = true
303
304 for (let i = 0; i < qualityLevels.length; i++) {
305 if (!qualityLevels[i]._enabled) {
306 isAuto = false
307 break
308 }
309 }
310
311 // Interact with ME
312 if (isAuto) {
313 this.hls.currentLevel = -1
314 return
315 }
316
317 // Find ID of highest enabled track
318 let selectedTrack: number
319
320 for (selectedTrack = qualityLevels.length - 1; selectedTrack >= 0; selectedTrack--) {
321 if (qualityLevels[selectedTrack]._enabled) {
322 break
323 }
324 }
325
326 this.hls.currentLevel = selectedTrack
327 }
328
329 private _handleQualityLevels () {
330 if (!this.metadata) return
331
332 const qualityLevels = this.player.qualityLevels?.()
333 if (!qualityLevels) return
334
335 for (let i = 0; i < this.metadata.levels.length; i++) {
336 const details = this.metadata.levels[i]
337 const representation: QualityLevelRepresentation = {
338 id: i,
339 width: details.width,
340 height: details.height,
341 bandwidth: details.bitrate,
342 bitrate: details.bitrate,
343 _enabled: true
344 }
345
346 const self = this
347 representation.enabled = function (this: QualityLevels, level: number, toggle?: boolean) {
348 // Brightcove switcher works TextTracks-style (enable tracks that it wants to ABR on)
349 if (typeof toggle === 'boolean') {
350 this[level]._enabled = toggle
351 self._relayQualityChange(this)
352 }
353
354 return this[level]._enabled
355 }
356
357 qualityLevels.addQualityLevel(representation)
358 }
359 } 285 }
360 286
361 private _notifyVideoQualities () { 287 private _notifyVideoQualities () {
362 if (!this.metadata) return 288 if (!this.metadata) return
363 const cleanTracklist = []
364 289
365 if (this.metadata.levels.length > 1) { 290 const resolutions: PeerTubeResolution[] = []
366 const autoLevel = {
367 id: -1,
368 label: 'auto',
369 selected: this.hls.manualLevel === -1
370 }
371 cleanTracklist.push(autoLevel)
372 }
373 291
374 this.metadata.levels.forEach((level, index) => { 292 this.metadata.levels.forEach((level, index) => {
375 // Don't write in level (shared reference with Hls.js) 293 resolutions.push({
376 const quality = {
377 id: index, 294 id: index,
378 selected: index === this.hls.manualLevel, 295 height: level.height,
379 label: this._levelLabel(level) 296 width: level.width,
380 } 297 bitrate: level.bitrate,
381 298 label: this.buildLevelLabel(level),
382 cleanTracklist.push(quality) 299 selected: level.id === this.hls.manualLevel,
300
301 selectCallback: () => {
302 this.hls.currentLevel = index
303 }
304 })
383 }) 305 })
384 306
385 const payload = { 307 resolutions.push({
386 qualityData: { video: cleanTracklist }, 308 id: -1,
387 qualitySwitchCallback: this.switchQuality.bind(this) 309 label: this.player.localize('Auto'),
388 } 310 selected: true,
389 311 selectCallback: () => this.hls.currentLevel = -1
390 this.tech.trigger('loadedqualitydata', payload) 312 })
391
392 // Self-de-register so we don't raise the payload multiple times
393 this.videoElement.removeEventListener('playing', this.handlers.playing)
394 }
395
396 private _updateSelectedAudioTrack () {
397 const playerAudioTracks = this.tech.audioTracks()
398 for (let j = 0; j < playerAudioTracks.length; j++) {
399 // FIXME: typings
400 if ((playerAudioTracks[j] as any).enabled) {
401 this.hls.audioTrack = j
402 break
403 }
404 }
405 }
406
407 private _onAudioTracks () {
408 const hlsAudioTracks = this.hls.audioTracks
409 const playerAudioTracks = this.tech.audioTracks()
410
411 if (hlsAudioTracks.length > 1 && playerAudioTracks.length === 0) {
412 // Add Hls.js audio tracks if not added yet
413 for (let i = 0; i < hlsAudioTracks.length; i++) {
414 playerAudioTracks.addTrack(new this.vjs.AudioTrack({
415 id: i.toString(),
416 kind: 'alternative',
417 label: hlsAudioTracks[i].name || hlsAudioTracks[i].lang,
418 language: hlsAudioTracks[i].lang,
419 enabled: i === this.hls.audioTrack
420 }))
421 }
422
423 // Handle audio track change event
424 this.handlers.audioTracksChange = this._updateSelectedAudioTrack.bind(this)
425 playerAudioTracks.addEventListener('change', this.handlers.audioTracksChange)
426 }
427 }
428
429 private _getTextTrackLabel (textTrack: TextTrack) {
430 // Label here is readable label and is optional (used in the UI so if it is there it should be different)
431 return textTrack.label ? textTrack.label : textTrack.language
432 }
433
434 private _isSameTextTrack (track1: TextTrack, track2: TextTrack) {
435 return this._getTextTrackLabel(track1) === this._getTextTrackLabel(track2) &&
436 track1.kind === track2.kind
437 }
438
439 private _updateSelectedTextTrack () {
440 const playerTextTracks = this.player.textTracks()
441 let activeTrack: TextTrack = null
442
443 for (let j = 0; j < playerTextTracks.length; j++) {
444 if (playerTextTracks[j].mode === 'showing') {
445 activeTrack = playerTextTracks[j]
446 break
447 }
448 }
449 313
450 const hlsjsTracks = this.videoElement.textTracks 314 this.player.peertubeResolutions().add(resolutions)
451 for (let k = 0; k < hlsjsTracks.length; k++) {
452 if (hlsjsTracks[k].kind === 'subtitles' || hlsjsTracks[k].kind === 'captions') {
453 hlsjsTracks[k].mode = activeTrack && this._isSameTextTrack(hlsjsTracks[k], activeTrack)
454 ? 'showing'
455 : 'disabled'
456 }
457 }
458 } 315 }
459 316
460 private _startLoad () { 317 private _startLoad () {
@@ -472,97 +329,10 @@ class Html5Hlsjs {
472 return result 329 return result
473 } 330 }
474 331
475 private _filterDisplayableTextTracks (textTracks: TextTrackList) { 332 private _onMetaData (_event: any, data: ManifestParsedData) {
476 const displayableTracks = []
477
478 // Filter out tracks that is displayable (captions or subtitles)
479 for (let idx = 0; idx < textTracks.length; idx++) {
480 if (textTracks[idx].kind === 'subtitles' || textTracks[idx].kind === 'captions') {
481 displayableTracks.push(textTracks[idx])
482 }
483 }
484
485 return displayableTracks
486 }
487
488 private _updateTextTrackList () {
489 const displayableTracks = this._filterDisplayableTextTracks(this.videoElement.textTracks)
490 const playerTextTracks = this.player.textTracks()
491
492 // Add stubs to make the caption switcher shows up
493 // Adding the Hls.js text track in will make us have double captions
494 for (let idx = 0; idx < displayableTracks.length; idx++) {
495 let isAdded = false
496
497 for (let jdx = 0; jdx < playerTextTracks.length; jdx++) {
498 if (this._isSameTextTrack(displayableTracks[idx], playerTextTracks[jdx])) {
499 isAdded = true
500 break
501 }
502 }
503
504 if (!isAdded) {
505 const hlsjsTextTrack = displayableTracks[idx]
506 this.player.addRemoteTextTrack({
507 kind: hlsjsTextTrack.kind as videojs.TextTrack.Kind,
508 label: this._getTextTrackLabel(hlsjsTextTrack),
509 language: hlsjsTextTrack.language,
510 srclang: hlsjsTextTrack.language
511 }, false)
512 }
513 }
514
515 // Handle UI switching
516 this._updateSelectedTextTrack()
517
518 if (!this.uiTextTrackHandled) {
519 this.handlers.textTracksChange = this._updateSelectedTextTrack.bind(this)
520 playerTextTracks.addEventListener('change', this.handlers.textTracksChange)
521
522 this.uiTextTrackHandled = true
523 }
524 }
525
526 private _onMetaData (_event: any, data: ManifestLoadedData) {
527 // This could arrive before 'loadedqualitydata' handlers is registered, remember it so we can raise it later 333 // This could arrive before 'loadedqualitydata' handlers is registered, remember it so we can raise it later
528 this.metadata = data as any 334 this.metadata = data
529 this._handleQualityLevels() 335 this._notifyVideoQualities()
530 }
531
532 private _createCueHandler (captionConfig: any) {
533 return {
534 newCue: (track: any, startTime: number, endTime: number, captionScreen: { rows: any[] }) => {
535 let row: any
536 let cue: VTTCue
537 let text: string
538 const VTTCue = (window as any).VTTCue || (window as any).TextTrackCue
539
540 for (let r = 0; r < captionScreen.rows.length; r++) {
541 row = captionScreen.rows[r]
542 text = ''
543
544 if (!row.isEmpty()) {
545 for (let c = 0; c < row.chars.length; c++) {
546 text += row.chars[c].ucharj
547 }
548
549 cue = new VTTCue(startTime, endTime, text.trim())
550
551 // typeof null === 'object'
552 if (captionConfig != null && typeof captionConfig === 'object') {
553 // Copy client overridden property into the cue object
554 const configKeys = Object.keys(captionConfig)
555
556 for (let k = 0; k < configKeys.length; k++) {
557 cue[configKeys[k]] = captionConfig[configKeys[k]]
558 }
559 }
560 track.addCue(cue)
561 if (endTime === startTime) track.addCue(new VTTCue(endTime + 5, ''))
562 }
563 }
564 }
565 }
566 } 336 }
567 337
568 private _initHlsjs () { 338 private _initHlsjs () {
@@ -577,11 +347,6 @@ class Html5Hlsjs {
577 this.hlsjsConfig.autoStartLoad = false 347 this.hlsjsConfig.autoStartLoad = false
578 } 348 }
579 349
580 const captionConfig = srOptions_?.captionConfig || techOptions.captionConfig
581 if (captionConfig) {
582 this.hlsjsConfig.cueHandler = this._createCueHandler(captionConfig)
583 }
584
585 // If the user explicitly sets autoStartLoad to false, we're not going to enter the if block above 350 // If the user explicitly sets autoStartLoad to false, we're not going to enter the if block above
586 // That's why we have a separate if block here to set the 'play' listener 351 // That's why we have a separate if block here to set the 'play' listener
587 if (this.hlsjsConfig.autoStartLoad === false) { 352 if (this.hlsjsConfig.autoStartLoad === false) {
@@ -589,17 +354,12 @@ class Html5Hlsjs {
589 this.videoElement.addEventListener('play', this.handlers.play) 354 this.videoElement.addEventListener('play', this.handlers.play)
590 } 355 }
591 356
592 // _notifyVideoQualities sometimes runs before the quality picker event handler is registered -> no video switcher
593 this.handlers.playing = this._notifyVideoQualities.bind(this)
594 this.videoElement.addEventListener('playing', this.handlers.playing)
595
596 this.hls = new Hlsjs(this.hlsjsConfig) 357 this.hls = new Hlsjs(this.hlsjsConfig)
597 358
598 this._executeHooksFor('beforeinitialize') 359 this._executeHooksFor('beforeinitialize')
599 360
600 this.hls.on(Hlsjs.Events.ERROR, (event, data) => this._onError(event, data)) 361 this.hls.on(Hlsjs.Events.ERROR, (event, data) => this._onError(event, data))
601 this.hls.on(Hlsjs.Events.AUDIO_TRACKS_UPDATED, () => this._onAudioTracks()) 362 this.hls.on(Hlsjs.Events.MANIFEST_PARSED, (event, data) => this._onMetaData(event, data))
602 this.hls.on(Hlsjs.Events.MANIFEST_PARSED, (event, data) => this._onMetaData(event, data as any)) // FIXME: typings
603 this.hls.on(Hlsjs.Events.LEVEL_LOADED, (event, data) => { 363 this.hls.on(Hlsjs.Events.LEVEL_LOADED, (event, data) => {
604 // The DVR plugin will auto seek to "live edge" on start up 364 // The DVR plugin will auto seek to "live edge" on start up
605 if (this.hlsjsConfig.liveSyncDuration) { 365 if (this.hlsjsConfig.liveSyncDuration) {
@@ -612,12 +372,25 @@ class Html5Hlsjs {
612 this.dvrDuration = data.details.totalduration 372 this.dvrDuration = data.details.totalduration
613 this._duration = this.isLive ? Infinity : data.details.totalduration 373 this._duration = this.isLive ? Infinity : data.details.totalduration
614 }) 374 })
375
615 this.hls.once(Hlsjs.Events.FRAG_LOADED, () => { 376 this.hls.once(Hlsjs.Events.FRAG_LOADED, () => {
616 // Emit custom 'loadedmetadata' event for parity with `videojs-contrib-hls` 377 // Emit custom 'loadedmetadata' event for parity with `videojs-contrib-hls`
617 // Ref: https://github.com/videojs/videojs-contrib-hls#loadedmetadata 378 // Ref: https://github.com/videojs/videojs-contrib-hls#loadedmetadata
618 this.tech.trigger('loadedmetadata') 379 this.tech.trigger('loadedmetadata')
619 }) 380 })
620 381
382 this.hls.on(Hlsjs.Events.LEVEL_SWITCHING, (_e, data: LevelSwitchingData) => {
383 const resolutionId = this.hls.autoLevelEnabled
384 ? -1
385 : data.level
386
387 const autoResolutionChosenId = this.hls.autoLevelEnabled
388 ? data.level
389 : -1
390
391 this.player.peertubeResolutions().select({ id: resolutionId, autoResolutionChosenId, byEngine: true })
392 })
393
621 this.hls.attachMedia(this.videoElement) 394 this.hls.attachMedia(this.videoElement)
622 395
623 this.hls.loadSource(this.source.src) 396 this.hls.loadSource(this.source.src)
diff --git a/client/src/assets/player/p2p-media-loader/p2p-media-loader-plugin.ts b/client/src/assets/player/p2p-media-loader/p2p-media-loader-plugin.ts
index acd40636e..d917fda03 100644
--- a/client/src/assets/player/p2p-media-loader/p2p-media-loader-plugin.ts
+++ b/client/src/assets/player/p2p-media-loader/p2p-media-loader-plugin.ts
@@ -116,14 +116,6 @@ class P2pMediaLoaderPlugin extends Plugin {
116 const options = this.player.tech(true).options_ as any 116 const options = this.player.tech(true).options_ as any
117 this.p2pEngine = options.hlsjsConfig.loader.getEngine() 117 this.p2pEngine = options.hlsjsConfig.loader.getEngine()
118 118
119 this.hlsjs.on(Hlsjs.Events.LEVEL_SWITCHING, (_: any, data: any) => {
120 this.trigger('resolutionChange', { auto: this.hlsjs.autoLevelEnabled, resolutionId: data.height })
121 })
122
123 this.hlsjs.on(Hlsjs.Events.MANIFEST_LOADED, (_: any, data: any) => {
124 this.trigger('resolutionsLoaded')
125 })
126
127 this.p2pEngine.on(Events.SegmentError, (segment: Segment, err) => { 119 this.p2pEngine.on(Events.SegmentError, (segment: Segment, err) => {
128 console.error('Segment error.', segment, err) 120 console.error('Segment error.', segment, err)
129 121
diff --git a/client/src/assets/player/peertube-player-manager.ts b/client/src/assets/player/peertube-player-manager.ts
index f3c21fc4c..230d6298b 100644
--- a/client/src/assets/player/peertube-player-manager.ts
+++ b/client/src/assets/player/peertube-player-manager.ts
@@ -1,13 +1,13 @@
1import 'videojs-hotkeys/videojs.hotkeys' 1import 'videojs-hotkeys/videojs.hotkeys'
2import 'videojs-dock' 2import 'videojs-dock'
3import 'videojs-contextmenu-pt' 3import 'videojs-contextmenu-pt'
4import 'videojs-contrib-quality-levels'
5import './upnext/end-card' 4import './upnext/end-card'
6import './upnext/upnext-plugin' 5import './upnext/upnext-plugin'
7import './stats/stats-card' 6import './stats/stats-card'
8import './stats/stats-plugin' 7import './stats/stats-plugin'
9import './bezels/bezels-plugin' 8import './bezels/bezels-plugin'
10import './peertube-plugin' 9import './peertube-plugin'
10import './peertube-resolutions-plugin'
11import './videojs-components/next-previous-video-button' 11import './videojs-components/next-previous-video-button'
12import './videojs-components/p2p-info-button' 12import './videojs-components/p2p-info-button'
13import './videojs-components/peertube-link-button' 13import './videojs-components/peertube-link-button'
diff --git a/client/src/assets/player/peertube-plugin.ts b/client/src/assets/player/peertube-plugin.ts
index b4841b235..9b4dc9bd5 100644
--- a/client/src/assets/player/peertube-plugin.ts
+++ b/client/src/assets/player/peertube-plugin.ts
@@ -1,4 +1,3 @@
1import './videojs-components/settings-menu-button'
2import videojs from 'video.js' 1import videojs from 'video.js'
3import { timeToInt } from '@shared/core-utils' 2import { timeToInt } from '@shared/core-utils'
4import { 3import {
@@ -10,7 +9,7 @@ import {
10 saveVideoWatchHistory, 9 saveVideoWatchHistory,
11 saveVolumeInStore 10 saveVolumeInStore
12} from './peertube-player-local-storage' 11} from './peertube-player-local-storage'
13import { PeerTubePluginOptions, ResolutionUpdateData, UserWatching, VideoJSCaption } from './peertube-videojs-typings' 12import { PeerTubePluginOptions, UserWatching, VideoJSCaption } from './peertube-videojs-typings'
14import { isMobile } from './utils' 13import { isMobile } from './utils'
15 14
16const Plugin = videojs.getPlugin('plugin') 15const Plugin = videojs.getPlugin('plugin')
@@ -27,7 +26,6 @@ class PeerTubePlugin extends Plugin {
27 26
28 private videoViewInterval: any 27 private videoViewInterval: any
29 private userWatchingVideoInterval: any 28 private userWatchingVideoInterval: any
30 private lastResolutionChange: ResolutionUpdateData
31 29
32 private isLive: boolean 30 private isLive: boolean
33 31
@@ -54,22 +52,6 @@ class PeerTubePlugin extends Plugin {
54 this.player.ready(() => { 52 this.player.ready(() => {
55 const playerOptions = this.player.options_ 53 const playerOptions = this.player.options_
56 54
57 if (options.mode === 'webtorrent') {
58 this.player.webtorrent().on('resolutionChange', (_: any, d: any) => this.handleResolutionChange(d))
59 this.player.webtorrent().on('autoResolutionChange', (_: any, d: any) => this.trigger('autoResolutionChange', d))
60 }
61
62 if (options.mode === 'p2p-media-loader') {
63 this.player.p2pMediaLoader().on('resolutionChange', (_: any, d: any) => this.handleResolutionChange(d))
64 }
65
66 this.player.tech(true).on('loadedqualitydata', () => {
67 setTimeout(() => {
68 // Replay a resolution change, now we loaded all quality data
69 if (this.lastResolutionChange) this.handleResolutionChange(this.lastResolutionChange)
70 }, 0)
71 })
72
73 const volume = getStoredVolume() 55 const volume = getStoredVolume()
74 if (volume !== undefined) this.player.volume(volume) 56 if (volume !== undefined) this.player.volume(volume)
75 57
@@ -97,7 +79,7 @@ class PeerTubePlugin extends Plugin {
97 }) 79 })
98 } 80 }
99 81
100 this.player.textTracks().on('change', () => { 82 this.player.textTracks().addEventListener('change', () => {
101 const showing = this.player.textTracks().tracks_.find(t => { 83 const showing = this.player.textTracks().tracks_.find(t => {
102 return t.kind === 'captions' && t.mode === 'showing' 84 return t.kind === 'captions' && t.mode === 'showing'
103 }) 85 })
@@ -216,22 +198,6 @@ class PeerTubePlugin extends Plugin {
216 return fetch(url, { method: 'PUT', body, headers }) 198 return fetch(url, { method: 'PUT', body, headers })
217 } 199 }
218 200
219 private handleResolutionChange (data: ResolutionUpdateData) {
220 this.lastResolutionChange = data
221
222 const qualityLevels = this.player.qualityLevels()
223
224 for (let i = 0; i < qualityLevels.length; i++) {
225 if (qualityLevels[i].height === data.resolutionId) {
226 data.id = qualityLevels[i].id
227 break
228 }
229 }
230
231 console.log('Resolution changed.', data)
232 this.trigger('resolutionChange', data)
233 }
234
235 private listenControlBarMouse () { 201 private listenControlBarMouse () {
236 this.player.controlBar.on('mouseenter', () => { 202 this.player.controlBar.on('mouseenter', () => {
237 this.mouseInControlBar = true 203 this.mouseInControlBar = true
diff --git a/client/src/assets/player/peertube-resolutions-plugin.ts b/client/src/assets/player/peertube-resolutions-plugin.ts
new file mode 100644
index 000000000..cc36f18f3
--- /dev/null
+++ b/client/src/assets/player/peertube-resolutions-plugin.ts
@@ -0,0 +1,88 @@
1import videojs from 'video.js'
2import { PeerTubeResolution } from './peertube-videojs-typings'
3
4const Plugin = videojs.getPlugin('plugin')
5
6class PeerTubeResolutionsPlugin extends Plugin {
7 private currentSelection: PeerTubeResolution
8 private resolutions: PeerTubeResolution[] = []
9
10 private autoResolutionChosenId: number
11 private autoResolutionEnabled = true
12
13 add (resolutions: PeerTubeResolution[]) {
14 for (const r of resolutions) {
15 this.resolutions.push(r)
16 }
17
18 this.currentSelection = this.getSelected()
19
20 this.sort()
21 this.trigger('resolutionsAdded')
22 }
23
24 getResolutions () {
25 return this.resolutions
26 }
27
28 getSelected () {
29 return this.resolutions.find(r => r.selected)
30 }
31
32 getAutoResolutionChosen () {
33 return this.resolutions.find(r => r.id === this.autoResolutionChosenId)
34 }
35
36 select (options: {
37 id: number
38 byEngine: boolean
39 autoResolutionChosenId?: number
40 }) {
41 const { id, autoResolutionChosenId, byEngine } = options
42
43 if (this.currentSelection?.id === id && this.autoResolutionChosenId === autoResolutionChosenId) return
44
45 this.autoResolutionChosenId = autoResolutionChosenId
46
47 for (const r of this.resolutions) {
48 r.selected = r.id === id
49
50 if (r.selected) {
51 this.currentSelection = r
52
53 if (!byEngine) r.selectCallback()
54 }
55 }
56
57 this.trigger('resolutionChanged')
58 }
59
60 disableAutoResolution () {
61 this.autoResolutionEnabled = false
62 this.trigger('autoResolutionEnabledChanged')
63 }
64
65 enabledAutoResolution () {
66 this.autoResolutionEnabled = true
67 this.trigger('autoResolutionEnabledChanged')
68 }
69
70 isAutoResolutionEnabeld () {
71 return this.autoResolutionEnabled
72 }
73
74 private sort () {
75 this.resolutions.sort((a, b) => {
76 if (a.id === -1) return 1
77 if (b.id === -1) return -1
78
79 if (a.height > b.height) return -1
80 if (a.height === b.height) return 0
81 return 1
82 })
83 }
84
85}
86
87videojs.registerPlugin('peertubeResolutions', PeerTubeResolutionsPlugin)
88export { PeerTubeResolutionsPlugin }
diff --git a/client/src/assets/player/peertube-videojs-typings.ts b/client/src/assets/player/peertube-videojs-typings.ts
index 97828c802..bd6db4ffc 100644
--- a/client/src/assets/player/peertube-videojs-typings.ts
+++ b/client/src/assets/player/peertube-videojs-typings.ts
@@ -1,6 +1,3 @@
1// FIXME: lint
2/* eslint-disable @typescript-eslint/ban-types */
3
4import { HlsConfig, Level } from 'hls.js' 1import { HlsConfig, Level } from 'hls.js'
5import videojs from 'video.js' 2import videojs from 'video.js'
6import { VideoFile, VideoPlaylist, VideoPlaylistElement } from '@shared/models' 3import { VideoFile, VideoPlaylist, VideoPlaylistElement } from '@shared/models'
@@ -8,11 +5,12 @@ import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin
8import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager' 5import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
9import { PlayerMode } from './peertube-player-manager' 6import { PlayerMode } from './peertube-player-manager'
10import { PeerTubePlugin } from './peertube-plugin' 7import { PeerTubePlugin } from './peertube-plugin'
8import { PeerTubeResolutionsPlugin } from './peertube-resolutions-plugin'
11import { PlaylistPlugin } from './playlist/playlist-plugin' 9import { PlaylistPlugin } from './playlist/playlist-plugin'
12import { EndCardOptions } from './upnext/end-card'
13import { StatsCardOptions } from './stats/stats-card' 10import { StatsCardOptions } from './stats/stats-card'
14import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
15import { StatsForNerdsPlugin } from './stats/stats-plugin' 11import { StatsForNerdsPlugin } from './stats/stats-plugin'
12import { EndCardOptions } from './upnext/end-card'
13import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
16 14
17declare module 'video.js' { 15declare module 'video.js' {
18 16
@@ -37,16 +35,15 @@ declare module 'video.js' {
37 35
38 p2pMediaLoader (): P2pMediaLoaderPlugin 36 p2pMediaLoader (): P2pMediaLoaderPlugin
39 37
38 peertubeResolutions (): PeerTubeResolutionsPlugin
39
40 contextmenuUI (options: any): any 40 contextmenuUI (options: any): any
41 41
42 bezels (): void 42 bezels (): void
43 43
44 stats (options?: StatsCardOptions): StatsForNerdsPlugin 44 stats (options?: StatsCardOptions): StatsForNerdsPlugin
45 45
46 qualityLevels (): QualityLevels
47
48 textTracks (): TextTrackList & { 46 textTracks (): TextTrackList & {
49 on: Function
50 tracks_: (TextTrack & { id: string, label: string, src: string })[] 47 tracks_: (TextTrack & { id: string, label: string, src: string })[]
51 } 48 }
52 49
@@ -69,24 +66,16 @@ export interface HlsjsConfigHandlerOptions {
69 levelLabelHandler?: (level: Level) => string 66 levelLabelHandler?: (level: Level) => string
70} 67}
71 68
72type QualityLevelRepresentation = { 69type PeerTubeResolution = {
73 id: number 70 id: number
74 height: number
75 71
72 height?: number
76 label?: string 73 label?: string
77 width?: number 74 width?: number
78 bandwidth?: number
79 bitrate?: number 75 bitrate?: number
80 76
81 enabled?: Function 77 selected: boolean
82 _enabled: boolean 78 selectCallback: () => void
83}
84
85type QualityLevels = QualityLevelRepresentation[] & {
86 selectedIndex: number
87 selectedIndex_: number
88
89 addQualityLevel (representation: QualityLevelRepresentation): void
90} 79}
91 80
92type VideoJSCaption = { 81type VideoJSCaption = {
@@ -131,7 +120,7 @@ type PlaylistPluginOptions = {
131 120
132type NextPreviousVideoButtonOptions = { 121type NextPreviousVideoButtonOptions = {
133 type: 'next' | 'previous' 122 type: 'next' | 'previous'
134 handler: Function 123 handler: () => void
135 isDisabled: () => boolean 124 isDisabled: () => boolean
136} 125}
137 126
@@ -214,7 +203,7 @@ type PlayerNetworkInfo = {
214type PlaylistItemOptions = { 203type PlaylistItemOptions = {
215 element: VideoPlaylistElement 204 element: VideoPlaylistElement
216 205
217 onClicked: Function 206 onClicked: () => void
218} 207}
219 208
220export { 209export {
@@ -229,9 +218,8 @@ export {
229 PeerTubePluginOptions, 218 PeerTubePluginOptions,
230 WebtorrentPluginOptions, 219 WebtorrentPluginOptions,
231 P2PMediaLoaderPluginOptions, 220 P2PMediaLoaderPluginOptions,
221 PeerTubeResolution,
232 VideoJSPluginOptions, 222 VideoJSPluginOptions,
233 LoadedQualityData, 223 LoadedQualityData,
234 QualityLevelRepresentation, 224 PeerTubeLinkButtonOptions
235 PeerTubeLinkButtonOptions,
236 QualityLevels
237} 225}
diff --git a/client/src/assets/player/videojs-components/resolution-menu-button.ts b/client/src/assets/player/videojs-components/resolution-menu-button.ts
index 98e7f56fc..8bd5b4f03 100644
--- a/client/src/assets/player/videojs-components/resolution-menu-button.ts
+++ b/client/src/assets/player/videojs-components/resolution-menu-button.ts
@@ -1,6 +1,4 @@
1import videojs from 'video.js' 1import videojs from 'video.js'
2
3import { LoadedQualityData } from '../peertube-videojs-typings'
4import { ResolutionMenuItem } from './resolution-menu-item' 2import { ResolutionMenuItem } from './resolution-menu-item'
5 3
6const Menu = videojs.getComponent('Menu') 4const Menu = videojs.getComponent('Menu')
@@ -13,9 +11,12 @@ class ResolutionMenuButton extends MenuButton {
13 11
14 this.controlText('Quality') 12 this.controlText('Quality')
15 13
16 player.tech(true).on('loadedqualitydata', (e: any, data: any) => this.buildQualities(data)) 14 player.peertubeResolutions().on('resolutionsAdded', () => this.buildQualities())
17 15
18 player.peertube().on('resolutionChange', () => setTimeout(() => this.trigger('updateLabel'), 0)) 16 // For parent
17 player.peertubeResolutions().on('resolutionChanged', () => {
18 setTimeout(() => this.trigger('labelUpdated'))
19 })
19 } 20 }
20 21
21 createEl () { 22 createEl () {
@@ -58,20 +59,8 @@ class ResolutionMenuButton extends MenuButton {
58 }) 59 })
59 } 60 }
60 61
61 private buildQualities (data: LoadedQualityData) { 62 private buildQualities () {
62 // The automatic resolution item will need other labels 63 for (const d of this.player().peertubeResolutions().getResolutions()) {
63 const labels: { [ id: number ]: string } = {}
64
65 data.qualityData.video.sort((a, b) => {
66 if (a.id > b.id) return -1
67 if (a.id === b.id) return 0
68 return 1
69 })
70
71 for (const d of data.qualityData.video) {
72 // Skip auto resolution, we'll add it ourselves
73 if (d.id === -1) continue
74
75 const label = d.label === '0p' 64 const label = d.label === '0p'
76 ? this.player().localize('Audio-only') 65 ? this.player().localize('Audio-only')
77 : d.label 66 : d.label
@@ -81,25 +70,11 @@ class ResolutionMenuButton extends MenuButton {
81 { 70 {
82 id: d.id, 71 id: d.id,
83 label, 72 label,
84 selected: d.selected, 73 selected: d.selected
85 callback: data.qualitySwitchCallback
86 }) 74 })
87 ) 75 )
88
89 labels[d.id] = d.label
90 } 76 }
91 77
92 this.menu.addChild(new ResolutionMenuItem(
93 this.player_,
94 {
95 id: -1,
96 label: this.player_.localize('Auto'),
97 labels,
98 callback: data.qualitySwitchCallback,
99 selected: true // By default, in auto mode
100 }
101 ))
102
103 for (const m of this.menu.children()) { 78 for (const m of this.menu.children()) {
104 this.addClickListener(m) 79 this.addClickListener(m)
105 } 80 }
diff --git a/client/src/assets/player/videojs-components/resolution-menu-item.ts b/client/src/assets/player/videojs-components/resolution-menu-item.ts
index c1f502600..6047f52f7 100644
--- a/client/src/assets/player/videojs-components/resolution-menu-item.ts
+++ b/client/src/assets/player/videojs-components/resolution-menu-item.ts
@@ -1,82 +1,72 @@
1import videojs from 'video.js' 1import videojs from 'video.js'
2import { AutoResolutionUpdateData, ResolutionUpdateData } from '../peertube-videojs-typings'
3 2
4const MenuItem = videojs.getComponent('MenuItem') 3const MenuItem = videojs.getComponent('MenuItem')
5 4
6export interface ResolutionMenuItemOptions extends videojs.MenuItemOptions { 5export interface ResolutionMenuItemOptions extends videojs.MenuItemOptions {
7 labels?: { [id: number]: string }
8 id: number 6 id: number
9 callback: (resolutionId: number, type: 'video') => void
10} 7}
11 8
12class ResolutionMenuItem extends MenuItem { 9class ResolutionMenuItem extends MenuItem {
13 private readonly resolutionId: number 10 private readonly resolutionId: number
14 private readonly label: string 11 private readonly label: string
15 // Only used for the automatic item
16 private readonly labels: { [id: number]: string }
17 private readonly callback: (resolutionId: number, type: 'video') => void
18 12
19 private autoResolutionPossible: boolean 13 private autoResolutionEnabled: boolean
20 private currentResolutionLabel: string 14 private autoResolutionChosen: string
21 15
22 constructor (player: videojs.Player, options?: ResolutionMenuItemOptions) { 16 constructor (player: videojs.Player, options?: ResolutionMenuItemOptions) {
23 options.selectable = true 17 options.selectable = true
24 18
25 super(player, options) 19 super(player, options)
26 20
27 this.autoResolutionPossible = true 21 this.autoResolutionEnabled = true
28 this.currentResolutionLabel = '' 22 this.autoResolutionChosen = ''
29 23
30 this.resolutionId = options.id 24 this.resolutionId = options.id
31 this.label = options.label 25 this.label = options.label
32 this.labels = options.labels
33 this.callback = options.callback
34 26
35 player.peertube().on('resolutionChange', (_: any, data: ResolutionUpdateData) => this.updateSelection(data)) 27 player.peertubeResolutions().on('resolutionChanged', () => this.updateSelection())
36 28
37 // We only want to disable the "Auto" item 29 // We only want to disable the "Auto" item
38 if (this.resolutionId === -1) { 30 if (this.resolutionId === -1) {
39 player.peertube().on('autoResolutionChange', (_: any, data: AutoResolutionUpdateData) => this.updateAutoResolution(data)) 31 player.peertubeResolutions().on('autoResolutionEnabledChanged', () => this.updateAutoResolution())
40 } 32 }
41 } 33 }
42 34
43 handleClick (event: any) { 35 handleClick (event: any) {
44 // Auto button disabled? 36 // Auto button disabled?
45 if (this.autoResolutionPossible === false && this.resolutionId === -1) return 37 if (this.autoResolutionEnabled === false && this.resolutionId === -1) return
46 38
47 super.handleClick(event) 39 super.handleClick(event)
48 40
49 this.callback(this.resolutionId, 'video') 41 this.player().peertubeResolutions().select({ id: this.resolutionId, byEngine: false })
50 } 42 }
51 43
52 updateSelection (data: ResolutionUpdateData) { 44 updateSelection () {
53 if (this.resolutionId === -1) { 45 const selectedResolution = this.player().peertubeResolutions().getSelected()
54 this.currentResolutionLabel = this.labels[data.id]
55 }
56 46
57 // Automatic resolution only 47 if (this.resolutionId === -1) {
58 if (data.auto === true) { 48 this.autoResolutionChosen = this.player().peertubeResolutions().getAutoResolutionChosen()?.label
59 this.selected(this.resolutionId === -1)
60 return
61 } 49 }
62 50
63 this.selected(this.resolutionId === data.id) 51 this.selected(this.resolutionId === selectedResolution.id)
64 } 52 }
65 53
66 updateAutoResolution (data: AutoResolutionUpdateData) { 54 updateAutoResolution () {
55 const enabled = this.player().peertubeResolutions().isAutoResolutionEnabeld()
56
67 // Check if the auto resolution is enabled or not 57 // Check if the auto resolution is enabled or not
68 if (data.possible === false) { 58 if (enabled === false) {
69 this.addClass('disabled') 59 this.addClass('disabled')
70 } else { 60 } else {
71 this.removeClass('disabled') 61 this.removeClass('disabled')
72 } 62 }
73 63
74 this.autoResolutionPossible = data.possible 64 this.autoResolutionEnabled = enabled
75 } 65 }
76 66
77 getLabel () { 67 getLabel () {
78 if (this.resolutionId === -1) { 68 if (this.resolutionId === -1) {
79 return this.label + ' <small>' + this.currentResolutionLabel + '</small>' 69 return this.label + ' <small>' + this.autoResolutionChosen + '</small>'
80 } 70 }
81 71
82 return this.label 72 return this.label
diff --git a/client/src/assets/player/videojs-components/settings-menu-item.ts b/client/src/assets/player/videojs-components/settings-menu-item.ts
index 1871d41f8..48fed0fd9 100644
--- a/client/src/assets/player/videojs-components/settings-menu-item.ts
+++ b/client/src/assets/player/videojs-components/settings-menu-item.ts
@@ -248,7 +248,7 @@ class SettingsMenuItem extends MenuItem {
248 } 248 }
249 249
250 build () { 250 build () {
251 this.subMenu.on('updateLabel', () => { 251 this.subMenu.on('labelUpdated', () => {
252 this.update() 252 this.update()
253 }) 253 })
254 this.subMenu.on('menuChanged', () => { 254 this.subMenu.on('menuChanged', () => {
diff --git a/client/src/assets/player/webtorrent/webtorrent-plugin.ts b/client/src/assets/player/webtorrent/webtorrent-plugin.ts
index 0587ddee6..1a1cd7f1a 100644
--- a/client/src/assets/player/webtorrent/webtorrent-plugin.ts
+++ b/client/src/assets/player/webtorrent/webtorrent-plugin.ts
@@ -9,7 +9,7 @@ import {
9 getStoredVolume, 9 getStoredVolume,
10 saveAverageBandwidth 10 saveAverageBandwidth
11} from '../peertube-player-local-storage' 11} from '../peertube-player-local-storage'
12import { LoadedQualityData, PlayerNetworkInfo, WebtorrentPluginOptions } from '../peertube-videojs-typings' 12import { PeerTubeResolution, PlayerNetworkInfo, WebtorrentPluginOptions } from '../peertube-videojs-typings'
13import { getRtcConfig, isIOS, videoFileMaxByResolution, videoFileMinByResolution } from '../utils' 13import { getRtcConfig, isIOS, videoFileMaxByResolution, videoFileMinByResolution } from '../utils'
14import { PeertubeChunkStore } from './peertube-chunk-store' 14import { PeertubeChunkStore } from './peertube-chunk-store'
15import { renderVideo } from './video-renderer' 15import { renderVideo } from './video-renderer'
@@ -175,11 +175,10 @@ class WebTorrentPlugin extends Plugin {
175 return done() 175 return done()
176 }) 176 })
177 177
178 this.changeQuality() 178 this.selectAppropriateResolution(true)
179 this.trigger('resolutionChange', { auto: this.autoResolution, resolutionId: this.currentVideoFile.resolution.id })
180 } 179 }
181 180
182 updateResolution (resolutionId: number, delay = 0) { 181 updateEngineResolution (resolutionId: number, delay = 0) {
183 // Remember player state 182 // Remember player state
184 const currentTime = this.player.currentTime() 183 const currentTime = this.player.currentTime()
185 const isPaused = this.player.paused() 184 const isPaused = this.player.paused()
@@ -219,17 +218,10 @@ class WebTorrentPlugin extends Plugin {
219 } 218 }
220 } 219 }
221 220
222 enableAutoResolution () { 221 disableAutoResolution () {
223 this.autoResolution = true
224 this.trigger('resolutionChange', { auto: this.autoResolution, resolutionId: this.getCurrentResolutionId() })
225 }
226
227 disableAutoResolution (forbid = false) {
228 if (forbid === true) this.autoResolutionPossible = false
229
230 this.autoResolution = false 222 this.autoResolution = false
231 this.trigger('autoResolutionChange', { possible: this.autoResolutionPossible }) 223 this.autoResolutionPossible = false
232 this.trigger('resolutionChange', { auto: this.autoResolution, resolutionId: this.getCurrentResolutionId() }) 224 this.player.peertubeResolutions().disableAutoResolution()
233 } 225 }
234 226
235 isAutoResolutionPossible () { 227 isAutoResolutionPossible () {
@@ -244,6 +236,22 @@ class WebTorrentPlugin extends Plugin {
244 return this.currentVideoFile 236 return this.currentVideoFile
245 } 237 }
246 238
239 changeQuality (id: number) {
240 if (id === -1) {
241 if (this.autoResolutionPossible === true) {
242 this.autoResolution = true
243
244 this.selectAppropriateResolution(false)
245 }
246
247 return
248 }
249
250 this.autoResolution = false
251 this.updateEngineResolution(id)
252 this.selectAppropriateResolution(false)
253 }
254
247 private addTorrent ( 255 private addTorrent (
248 magnetOrTorrentUrl: string, 256 magnetOrTorrentUrl: string,
249 previousVideoFile: VideoFile, 257 previousVideoFile: VideoFile,
@@ -466,7 +474,7 @@ class WebTorrentPlugin extends Plugin {
466 } 474 }
467 475
468 if (changeResolution === true) { 476 if (changeResolution === true) {
469 this.updateResolution(file.resolution.id, changeResolutionDelay) 477 this.updateEngineResolution(file.resolution.id, changeResolutionDelay)
470 478
471 // Wait some seconds in observation of our new resolution 479 // Wait some seconds in observation of our new resolution
472 this.isAutoResolutionObservation = true 480 this.isAutoResolutionObservation = true
@@ -516,7 +524,7 @@ class WebTorrentPlugin extends Plugin {
516 private fallbackToHttp (options: PlayOptions, done?: (err?: Error) => void) { 524 private fallbackToHttp (options: PlayOptions, done?: (err?: Error) => void) {
517 const paused = this.player.paused() 525 const paused = this.player.paused()
518 526
519 this.disableAutoResolution(true) 527 this.disableAutoResolution()
520 528
521 this.flushVideoFile(this.currentVideoFile, true) 529 this.flushVideoFile(this.currentVideoFile, true)
522 this.torrent = null 530 this.torrent = null
@@ -528,7 +536,7 @@ class WebTorrentPlugin extends Plugin {
528 this.player.src = this.savePlayerSrcFunction 536 this.player.src = this.savePlayerSrcFunction
529 this.player.src(httpUrl) 537 this.player.src(httpUrl)
530 538
531 this.changeQuality() 539 this.selectAppropriateResolution(true)
532 540
533 // We changed the source, so reinit captions 541 // We changed the source, so reinit captions
534 this.player.trigger('sourcechange') 542 this.player.trigger('sourcechange')
@@ -601,32 +609,22 @@ class WebTorrentPlugin extends Plugin {
601 } 609 }
602 610
603 private buildQualities () { 611 private buildQualities () {
604 const qualityLevelsPayload = [] 612 const resolutions: PeerTubeResolution[] = this.videoFiles.map(file => ({
605 613 id: file.resolution.id,
606 for (const file of this.videoFiles) { 614 label: this.buildQualityLabel(file),
607 const representation = { 615 height: file.resolution.id,
608 id: file.resolution.id, 616 selected: false,
609 label: this.buildQualityLabel(file), 617 selectCallback: () => this.changeQuality(file.resolution.id)
610 height: file.resolution.id, 618 }))
611 _enabled: true 619
612 } 620 resolutions.push({
613 621 id: -1,
614 this.player.qualityLevels().addQualityLevel(representation) 622 label: this.player.localize('Auto'),
615 623 selected: true,
616 qualityLevelsPayload.push({ 624 selectCallback: () => this.changeQuality(-1)
617 id: representation.id, 625 })
618 label: representation.label,
619 selected: false
620 })
621 }
622 626
623 const payload: LoadedQualityData = { 627 this.player.peertubeResolutions().add(resolutions)
624 qualitySwitchCallback: (d: any) => this.qualitySwitchCallback(d),
625 qualityData: {
626 video: qualityLevelsPayload
627 }
628 }
629 this.player.tech(true).trigger('loadedqualitydata', payload)
630 } 628 }
631 629
632 private buildQualityLabel (file: VideoFile) { 630 private buildQualityLabel (file: VideoFile) {
@@ -639,29 +637,16 @@ class WebTorrentPlugin extends Plugin {
639 return label 637 return label
640 } 638 }
641 639
642 private qualitySwitchCallback (id: number) { 640 private selectAppropriateResolution (byEngine: boolean) {
643 if (id === -1) { 641 const resolution = this.autoResolution
644 if (this.autoResolutionPossible === true) this.enableAutoResolution() 642 ? -1
645 return 643 : this.getCurrentResolutionId()
646 }
647
648 this.disableAutoResolution()
649 this.updateResolution(id)
650 }
651
652 private changeQuality () {
653 const resolutionId = this.currentVideoFile.resolution.id as number
654 const qualityLevels = this.player.qualityLevels()
655 644
656 if (resolutionId === -1) { 645 const autoResolutionChosen = this.autoResolution
657 qualityLevels.selectedIndex = -1 646 ? this.getCurrentResolutionId()
658 return 647 : undefined
659 }
660 648
661 for (let i = 0; i < qualityLevels.length; i++) { 649 this.player.peertubeResolutions().select({ id: resolution, autoResolutionChosenId: autoResolutionChosen, byEngine })
662 const q = qualityLevels[i]
663 if (q.height === resolutionId) qualityLevels.selectedIndex_ = i
664 }
665 } 650 }
666} 651}
667 652
diff --git a/client/src/standalone/videos/embed-api.ts b/client/src/standalone/videos/embed-api.ts
index b5c9da431..a28aeeaef 100644
--- a/client/src/standalone/videos/embed-api.ts
+++ b/client/src/standalone/videos/embed-api.ts
@@ -64,19 +64,12 @@ export class PeerTubeEmbedApi {
64 if (this.isWebtorrent()) { 64 if (this.isWebtorrent()) {
65 if (resolutionId === -1 && this.embed.player.webtorrent().isAutoResolutionPossible() === false) return 65 if (resolutionId === -1 && this.embed.player.webtorrent().isAutoResolutionPossible() === false) return
66 66
67 // Auto resolution 67 this.embed.player.webtorrent().changeQuality(resolutionId)
68 if (resolutionId === -1) {
69 this.embed.player.webtorrent().enableAutoResolution()
70 return
71 }
72
73 this.embed.player.webtorrent().disableAutoResolution()
74 this.embed.player.webtorrent().updateResolution(resolutionId)
75 68
76 return 69 return
77 } 70 }
78 71
79 this.embed.player.p2pMediaLoader().getHLSJS().nextLevel = resolutionId 72 this.embed.player.p2pMediaLoader().getHLSJS().currentLevel = resolutionId
80 } 73 }
81 74
82 private getCaptions (): PeerTubeTextTrack[] { 75 private getCaptions (): PeerTubeTextTrack[] {
@@ -139,15 +132,10 @@ export class PeerTubeEmbedApi {
139 }) 132 })
140 133
141 // PeerTube specific capabilities 134 // PeerTube specific capabilities
142 if (this.isWebtorrent()) { 135 this.embed.player.peertubeResolutions().on('resolutionsAdded', () => this.loadResolutions())
143 this.embed.player.webtorrent().on('autoResolutionUpdate', () => this.loadWebTorrentResolutions()) 136 this.embed.player.peertubeResolutions().on('resolutionChanged', () => this.loadResolutions())
144 this.embed.player.webtorrent().on('videoFileUpdate', () => this.loadWebTorrentResolutions())
145 137
146 this.loadWebTorrentResolutions() 138 this.loadResolutions()
147 } else {
148 this.embed.player.p2pMediaLoader().on('resolutionChange', () => this.loadP2PMediaLoaderResolutions())
149 this.embed.player.p2pMediaLoader().on('resolutionsLoaded', () => this.loadP2PMediaLoaderResolutions())
150 }
151 139
152 this.embed.player.on('volumechange', () => { 140 this.embed.player.on('volumechange', () => {
153 this.channel.notify({ 141 this.channel.notify({
@@ -157,49 +145,15 @@ export class PeerTubeEmbedApi {
157 }) 145 })
158 } 146 }
159 147
160 private loadWebTorrentResolutions () { 148 private loadResolutions () {
161 this.resolutions = [] 149 this.resolutions = this.embed.player.peertubeResolutions().getResolutions()
162 150 .map(r => ({
163 const currentResolutionId = this.embed.player.webtorrent().getCurrentResolutionId() 151 id: r.id,
164 152 label: r.label,
165 for (const videoFile of this.embed.player.webtorrent().videoFiles) { 153 active: r.selected,
166 let label = videoFile.resolution.label 154 width: r.width,
167 if (videoFile.fps && videoFile.fps >= 50) { 155 height: r.height
168 label += videoFile.fps 156 }))
169 }
170
171 this.resolutions.push({
172 id: videoFile.resolution.id,
173 label,
174 src: videoFile.magnetUri,
175 active: videoFile.resolution.id === currentResolutionId,
176 height: videoFile.resolution.id
177 })
178 }
179
180 this.channel.notify({
181 method: 'resolutionUpdate',
182 params: this.resolutions
183 })
184 }
185
186 private loadP2PMediaLoaderResolutions () {
187 this.resolutions = []
188
189 const qualityLevels = this.embed.player.qualityLevels()
190 const currentResolutionId = this.embed.player.qualityLevels().selectedIndex
191
192 for (let i = 0; i < qualityLevels.length; i++) {
193 const level = qualityLevels[i]
194
195 this.resolutions.push({
196 id: level.id,
197 label: level.height + 'p',
198 active: level.id === currentResolutionId,
199 width: level.width,
200 height: level.height
201 })
202 }
203 157
204 this.channel.notify({ 158 this.channel.notify({
205 method: 'resolutionUpdate', 159 method: 'resolutionUpdate',
diff --git a/client/src/standalone/videos/test-embed.ts b/client/src/standalone/videos/test-embed.ts
index a28a83cc1..18c338a2d 100644
--- a/client/src/standalone/videos/test-embed.ts
+++ b/client/src/standalone/videos/test-embed.ts
@@ -86,8 +86,6 @@ window.addEventListener('load', async () => {
86 captionEl.innerHTML = '' 86 captionEl.innerHTML = ''
87 87
88 captions.forEach(c => { 88 captions.forEach(c => {
89 console.log(c)
90
91 if (c.mode === 'showing') { 89 if (c.mode === 'showing') {
92 const itemEl = document.createElement('strong') 90 const itemEl = document.createElement('strong')
93 itemEl.innerText = `${c.label} (active)` 91 itemEl.innerText = `${c.label} (active)`
diff --git a/client/yarn.lock b/client/yarn.lock
index 8f41b3102..508b8ad28 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -12618,14 +12618,6 @@ videojs-contextmenu-pt@^5.4.1:
12618 global "^4.4.0" 12618 global "^4.4.0"
12619 video.js "^7.6.0" 12619 video.js "^7.6.0"
12620 12620
12621videojs-contrib-quality-levels@^2.0.9:
12622 version "2.1.0"
12623 resolved "https://registry.yarnpkg.com/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-2.1.0.tgz#046e9e21ed01043f512b83a1916001d552457083"
12624 integrity sha512-dqGQGbL9AFhucxki7Zh0c3kIhH0PAPcHEh6jUdRyaFCVeOuqnJrOYs/3wNtsokDdBdRf2Du2annpu4Z2XaSZRg==
12625 dependencies:
12626 global "^4.3.2"
12627 video.js "^6 || ^7"
12628
12629videojs-dock@^2.0.2: 12621videojs-dock@^2.0.2:
12630 version "2.2.0" 12622 version "2.2.0"
12631 resolved "https://registry.yarnpkg.com/videojs-dock/-/videojs-dock-2.2.0.tgz#57e4f942da1b8e930c4387fed85942473bc40829" 12623 resolved "https://registry.yarnpkg.com/videojs-dock/-/videojs-dock-2.2.0.tgz#57e4f942da1b8e930c4387fed85942473bc40829"
diff --git a/package.json b/package.json
index ef22e2961..91b2be0da 100644
--- a/package.json
+++ b/package.json
@@ -198,8 +198,6 @@
198 "eslint-plugin-standard": "^5.0.0", 198 "eslint-plugin-standard": "^5.0.0",
199 "fast-xml-parser": "^3.19.0", 199 "fast-xml-parser": "^3.19.0",
200 "maildev": "^1.0.0-rc3", 200 "maildev": "^1.0.0-rc3",
201 "marked": "^3.0.2",
202 "marked-man": "^0.7.0",
203 "mocha": "^9.0.0", 201 "mocha": "^9.0.0",
204 "nodemon": "^2.0.1", 202 "nodemon": "^2.0.1",
205 "proxy": "^1.0.2", 203 "proxy": "^1.0.2",
diff --git a/scripts/generate-cli-doc.sh b/scripts/generate-cli-doc.sh
deleted file mode 100755
index 0d00f183b..000000000
--- a/scripts/generate-cli-doc.sh
+++ /dev/null
@@ -1,5 +0,0 @@
1#!/bin/sh
2
3set -eu
4
5node_modules/marked-man/bin/marked-man server/tools/README.md > dist/server/tools/peertube.8
diff --git a/server/tools/README.md b/server/tools/README.md
index e86df3bfc..449c57ce1 100644
--- a/server/tools/README.md
+++ b/server/tools/README.md
@@ -1,82 +1,3 @@
1peertube(8) -- companion CLI for PeerTube 1# PeerTube CLI
2=========================================
3 2
4SYNOPSIS 3See https://docs.joinpeertube.org/maintain-tools?id=remote-tools
5--------
6
7```
8peertube [command] [options]
9```
10
11DESCRIPTION
12-----------
13
14`peertube` wraps various utilities around PeerTube that are used either on a running local, running remote, or cold local instance.
15
16COMMANDS
17--------
18
19Unless otherwise specified, every command can be queried for its own help or manual by passing its name to the `help` command, or by using the `--help` option.
20
21`auth [action]`: stores credentials for your accounts on remote instances, so that you don't need to pass them at every command
22
23`upload|up`: upload a video to a remote instance
24
25 $ peertube upload \
26 -u "PEERTUBE_URL" \
27 -U "PEERTUBE_USER" \
28 --password "PEERTUBE_PASSWORD"
29
30`import-videos|import`: import a video from a streaming platform to a remote instance
31
32 $ peertube import \
33 -u "PEERTUBE_URL" \
34 -U "PEERTUBE_USER" \
35 --password "PEERTUBE_PASSWORD" \
36 -t "TARGET_URL"
37
38 The target URL can be directly the video file, or any of the supported sites of youtube-dl. The video is downloaded locally and then uploaded. Already downloaded videos will not be uploaded twice, so you can run and re-run the script in case of crash, disconnection…
39
40`watch|w`: watch a video in the terminal ✩°。⋆
41
42 -g, --gui <player> player type (default: ascii)
43 -i, --invert invert colors (ascii player only)
44 -r, --resolution <res> video resolution (default: 720)
45
46 It provides support for different players:
47
48 - ascii (default ; plays in ascii art in your terminal!)
49 - mpv
50 - mplayer
51 - vlc
52 - stdout
53 - xbmc
54 - airplay
55 - chromecast
56
57`repl`: interact with the application libraries and objects even when PeerTube is not running
58
59 Type .help to see the repl-only functions, or to see the available PeerTube core functions:
60
61 repl> lodash.keys(context)
62
63`help [cmd]`: display help for [cmd]
64
65EXAMPLES
66--------
67
68 $ peertube auth add -u "PEERTUBE_URL" -U "PEERTUBE_USER" --password "PEERTUBE_PASSWORD"
69 $ peertube up <videoFile>
70 $ peertube watch https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10
71
72SEE ALSO
73--------
74
75[PeerTube Tools Documentation](https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/tools.md)
76
77[PeerTube Admin Documentation](https://docs.joinpeertube.org/lang/en/docs/)
78
79REPORTING BUGS
80--------------
81
82See [PeerTube repository](https://github.com/Chocobozzz/PeerTube).
diff --git a/server/tools/package.json b/server/tools/package.json
index e3899f3b2..b20f38244 100644
--- a/server/tools/package.json
+++ b/server/tools/package.json
@@ -5,8 +5,7 @@
5 "dependencies": { 5 "dependencies": {
6 "application-config": "^2.0.0", 6 "application-config": "^2.0.0",
7 "cli-table3": "^0.6.0", 7 "cli-table3": "^0.6.0",
8 "netrc-parser": "^3.1.6", 8 "netrc-parser": "^3.1.6"
9 "webtorrent-hybrid": "^4.0.3"
10 }, 9 },
11 "devDependencies": {} 10 "devDependencies": {}
12} 11}
diff --git a/server/tools/peertube-repl.ts b/server/tools/peertube-repl.ts
deleted file mode 100644
index eb0a776b8..000000000
--- a/server/tools/peertube-repl.ts
+++ /dev/null
@@ -1,83 +0,0 @@
1import { registerTSPaths } from '../helpers/register-ts-paths'
2registerTSPaths()
3
4import * as repl from 'repl'
5import * as path from 'path'
6import * as _ from 'lodash'
7import * as Sequelize from 'sequelize'
8import * as YoutubeDL from 'youtube-dl'
9import { initDatabaseModels, sequelizeTypescript } from '../initializers/database'
10import * as cli from '../tools/cli'
11import { logger } from '../helpers/logger'
12import * as constants from '../initializers/constants'
13import * as modelsUtils from '../models/utils'
14import * as coreUtils from '../helpers/core-utils'
15import * as ffmpegUtils from '../helpers/ffmpeg-utils'
16import * as peertubeCryptoUtils from '../helpers/peertube-crypto'
17import * as utils from '../helpers/utils'
18import * as YoutubeDLUtils from '../helpers/youtube-dl'
19
20const start = async () => {
21 await initDatabaseModels(true)
22
23 const versionCommitHash = await utils.getServerCommit()
24
25 const initContext = (replServer) => {
26 return (context) => {
27 const properties = {
28 context,
29 repl: replServer,
30 env: process.env,
31 lodash: _,
32 path,
33 cli,
34 logger,
35 constants,
36 Sequelize,
37 sequelizeTypescript,
38 modelsUtils,
39 models: sequelizeTypescript.models,
40 transaction: sequelizeTypescript.transaction,
41 query: sequelizeTypescript.query,
42 queryInterface: sequelizeTypescript.getQueryInterface(),
43 YoutubeDL,
44 coreUtils,
45 ffmpegUtils,
46 peertubeCryptoUtils,
47 utils,
48 YoutubeDLUtils
49 }
50
51 for (const prop in properties) {
52 Object.defineProperty(context, prop, {
53 configurable: false,
54 enumerable: true,
55 value: properties[prop]
56 })
57 }
58 }
59 }
60
61 const replServer = repl.start({
62 prompt: `PeerTube [${cli.version}] (${versionCommitHash})> `
63 })
64
65 initContext(replServer)(replServer.context)
66 replServer.on('reset', initContext(replServer))
67 replServer.on('exit', () => process.exit())
68
69 const resetCommand = {
70 help: 'Reset REPL',
71 action () {
72 this.write('.clear\n')
73 this.displayPrompt()
74 }
75 }
76 replServer.defineCommand('reset', resetCommand)
77 replServer.defineCommand('r', resetCommand)
78}
79
80start()
81 .catch((err) => {
82 console.error(err)
83 })
diff --git a/server/tools/peertube-watch.ts b/server/tools/peertube-watch.ts
deleted file mode 100644
index 892c9e7a6..000000000
--- a/server/tools/peertube-watch.ts
+++ /dev/null
@@ -1,42 +0,0 @@
1import { registerTSPaths } from '../helpers/register-ts-paths'
2registerTSPaths()
3
4import { program, Option, OptionValues } from 'commander'
5import { join } from 'path'
6import { execSync } from 'child_process'
7
8program
9 .name('watch')
10 .arguments('<url>')
11 .addOption(
12 new Option('-g, --gui <player>', 'player type')
13 .default('vlc')
14 .choices([ 'airplay', 'stdout', 'chromecast', 'mpv', 'vlc', 'mplayer', 'xbmc' ])
15 )
16 .option('-r, --resolution <res>', 'video resolution', '480')
17 .addHelpText('after', '\n\n Examples:\n\n' +
18 ' $ peertube watch -g mpv https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10\n' +
19 ' $ peertube watch --gui stdout https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10\n' +
20 ' $ peertube watch https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10\n'
21 )
22 .action((url, options) => run(url, options))
23 .parse(process.argv)
24
25function run (url: string, options: OptionValues) {
26 if (!url) {
27 console.error('<url> positional argument is required.')
28 process.exit(-1)
29 }
30
31 const cmd = 'node ' + join(__dirname, 'node_modules', 'webtorrent-hybrid', 'bin', 'cmd.js')
32 const args = ` --${options.gui} ` +
33 url.replace(/(\/videos\/watch\/)|\/w\//, '/download/torrents/') +
34 `-${options.resolution}.torrent`
35
36 try {
37 execSync(cmd + args)
38 } catch (err) {
39 console.error('Cannto exec command.', err)
40 process.exit(-1)
41 }
42}
diff --git a/server/tools/peertube.ts b/server/tools/peertube.ts
index a40c1332e..9e07640f0 100644
--- a/server/tools/peertube.ts
+++ b/server/tools/peertube.ts
@@ -1,7 +1,5 @@
1#!/usr/bin/env node 1#!/usr/bin/env node
2 2
3/* eslint-disable no-useless-escape */
4
5import { registerTSPaths } from '../helpers/register-ts-paths' 3import { registerTSPaths } from '../helpers/register-ts-paths'
6registerTSPaths() 4registerTSPaths()
7 5
@@ -18,8 +16,6 @@ program
18 .command('upload', 'upload a video').alias('up') 16 .command('upload', 'upload a video').alias('up')
19 .command('import-videos', 'import a video from a streaming platform').alias('import') 17 .command('import-videos', 'import a video from a streaming platform').alias('import')
20 .command('get-access-token', 'get a peertube access token', { noHelp: true }).alias('token') 18 .command('get-access-token', 'get a peertube access token', { noHelp: true }).alias('token')
21 .command('watch', 'watch a video in the terminal ✩°。⋆').alias('w')
22 .command('repl', 'initiate a REPL to access internals')
23 .command('plugins [action]', 'manage instance plugins/themes').alias('p') 19 .command('plugins [action]', 'manage instance plugins/themes').alias('p')
24 .command('redundancy [action]', 'manage instance redundancies').alias('r') 20 .command('redundancy [action]', 'manage instance redundancies').alias('r')
25 21
@@ -47,7 +43,7 @@ if (!process.argv.slice(2).length) {
47 / / -" _/"/ 43 / / -" _/"/
48 / | ._\\\\ |\\ |_.".-" / 44 / | ._\\\\ |\\ |_.".-" /
49 / | __\\)|)|),/|_." _,." 45 / | __\\)|)|),/|_." _,."
50 / \_." " ") | ).-""---''-- 46 / \\_." " ") | ).-""---''--
51 ( "/.""7__-""'' 47 ( "/.""7__-""''
52 | " ."._--._ 48 | " ."._--._
53 \\ \\ (_ __ "" ".,_ 49 \\ \\ (_ __ "" ".,_
@@ -72,8 +68,7 @@ getSettings()
72 .addHelpText('after', '\n\n State: ' + state + '\n\n' + 68 .addHelpText('after', '\n\n State: ' + state + '\n\n' +
73 ' Examples:\n\n' + 69 ' Examples:\n\n' +
74 ' $ peertube auth add -u "PEERTUBE_URL" -U "PEERTUBE_USER" --password "PEERTUBE_PASSWORD"\n' + 70 ' $ peertube auth add -u "PEERTUBE_URL" -U "PEERTUBE_USER" --password "PEERTUBE_PASSWORD"\n' +
75 ' $ peertube up <videoFile>\n' + 71 ' $ peertube up <videoFile>\n'
76 ' $ peertube watch https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10\n'
77 ) 72 )
78 .parse(process.argv) 73 .parse(process.argv)
79 }) 74 })
diff --git a/server/tools/test-live.ts b/server/tools/test-live.ts
deleted file mode 100644
index 27f2a4a92..000000000
--- a/server/tools/test-live.ts
+++ /dev/null
@@ -1,102 +0,0 @@
1import { program } from 'commander'
2import { LiveVideoCreate, VideoPrivacy } from '@shared/models'
3import {
4 createSingleServer,
5 killallServers,
6 sendRTMPStream,
7 PeerTubeServer,
8 setAccessTokensToServers,
9 setDefaultVideoChannel
10} from '../../shared/extra-utils'
11import { registerTSPaths } from '../helpers/register-ts-paths'
12
13registerTSPaths()
14
15type CommandType = 'live-mux' | 'live-transcoding'
16
17registerTSPaths()
18
19const command = program
20 .name('test-live')
21 .option('-t, --type <type>', 'live-muxing|live-transcoding')
22 .parse(process.argv)
23
24run()
25 .catch(err => {
26 console.error(err)
27 process.exit(-1)
28 })
29
30async function run () {
31 const commandType: CommandType = command['type']
32 if (!commandType) {
33 console.error('Miss command type')
34 process.exit(-1)
35 }
36
37 console.log('Starting server.')
38
39 const server = await createSingleServer(1, {}, { hideLogs: false, nodeArgs: [ '--inspect' ] })
40
41 const cleanup = async () => {
42 console.log('Killing server')
43 await killallServers([ server ])
44 }
45
46 process.on('exit', cleanup)
47 process.on('SIGINT', cleanup)
48
49 await setAccessTokensToServers([ server ])
50 await setDefaultVideoChannel([ server ])
51
52 await buildConfig(server, commandType)
53
54 const attributes: LiveVideoCreate = {
55 name: 'live',
56 saveReplay: true,
57 channelId: server.store.channel.id,
58 privacy: VideoPrivacy.PUBLIC
59 }
60
61 console.log('Creating live.')
62
63 const { uuid: liveVideoUUID } = await server.live.create({ fields: attributes })
64
65 const live = await server.live.get({ videoId: liveVideoUUID })
66
67 console.log('Sending RTMP stream.')
68
69 const ffmpegCommand = sendRTMPStream({ rtmpBaseUrl: live.rtmpUrl, streamKey: live.streamKey })
70
71 ffmpegCommand.on('error', err => {
72 console.error(err)
73 process.exit(-1)
74 })
75
76 ffmpegCommand.on('end', () => {
77 console.log('ffmpeg ended')
78 process.exit(0)
79 })
80}
81
82// ----------------------------------------------------------------------------
83
84async function buildConfig (server: PeerTubeServer, commandType: CommandType) {
85 await server.config.updateCustomSubConfig({
86 newConfig: {
87 instance: {
88 customizations: {
89 javascript: '',
90 css: ''
91 }
92 },
93 live: {
94 enabled: true,
95 allowReplay: true,
96 transcoding: {
97 enabled: commandType === 'live-transcoding'
98 }
99 }
100 }
101 })
102}
diff --git a/server/tools/yarn.lock b/server/tools/yarn.lock
index dceacb223..28e9779da 100644
--- a/server/tools/yarn.lock
+++ b/server/tools/yarn.lock
@@ -23,97 +23,6 @@
23 chalk "^2.0.0" 23 chalk "^2.0.0"
24 js-tokens "^4.0.0" 24 js-tokens "^4.0.0"
25 25
26"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
27 version "1.1.2"
28 resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
29 integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
30
31"@protobufjs/base64@^1.1.2":
32 version "1.1.2"
33 resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
34 integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
35
36"@protobufjs/codegen@^2.0.4":
37 version "2.0.4"
38 resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
39 integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
40
41"@protobufjs/eventemitter@^1.1.0":
42 version "1.1.0"
43 resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
44 integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
45
46"@protobufjs/fetch@^1.1.0":
47 version "1.1.0"
48 resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
49 integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
50 dependencies:
51 "@protobufjs/aspromise" "^1.1.1"
52 "@protobufjs/inquire" "^1.1.0"
53
54"@protobufjs/float@^1.0.2":
55 version "1.0.2"
56 resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
57 integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
58
59"@protobufjs/inquire@^1.1.0":
60 version "1.1.0"
61 resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
62 integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
63
64"@protobufjs/path@^1.1.2":
65 version "1.1.2"
66 resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
67 integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
68
69"@protobufjs/pool@^1.1.0":
70 version "1.1.0"
71 resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
72 integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
73
74"@protobufjs/utf8@^1.1.0":
75 version "1.1.0"
76 resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
77 integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
78
79"@types/long@^4.0.1":
80 version "4.0.1"
81 resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
82 integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
83
84"@types/node@>=13.7.0":
85 version "15.12.2"
86 resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d"
87 integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==
88
89abbrev@1:
90 version "1.1.1"
91 resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
92 integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
93
94addr-to-ip-port@^1.0.1, addr-to-ip-port@^1.5.1:
95 version "1.5.1"
96 resolved "https://registry.yarnpkg.com/addr-to-ip-port/-/addr-to-ip-port-1.5.1.tgz#bfada13fd6aeeeac19f1e9f7d84b4bbab45e5208"
97 integrity sha512-bA+dyydTNuQtrEDJ0g9eR7XabNhvrM5yZY0hvTbNK3yvoeC73ZqMES6E1cEqH9WPxs4uMtMsOjfwS4FmluhsAA==
98
99airplay-js@^0.3.0:
100 version "0.3.0"
101 resolved "https://registry.yarnpkg.com/airplay-js/-/airplay-js-0.3.0.tgz#16bac2ef91b31249382924bfdeeabaddc9db7398"
102 integrity sha1-FrrC75GzEkk4KSS/3uq63cnbc5g=
103 dependencies:
104 mdns-js "0.5.0"
105 plist-with-patches "0.5.1"
106
107ansi-regex@^2.0.0:
108 version "2.1.1"
109 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
110 integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
111
112ansi-regex@^3.0.0:
113 version "3.0.0"
114 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
115 integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
116
117ansi-regex@^5.0.0: 26ansi-regex@^5.0.0:
118 version "5.0.0" 27 version "5.0.0"
119 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 28 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
@@ -140,221 +49,6 @@ application-config@^2.0.0:
140 load-json-file "^6.2.0" 49 load-json-file "^6.2.0"
141 write-json-file "^4.2.0" 50 write-json-file "^4.2.0"
142 51
143aproba@^1.0.3:
144 version "1.2.0"
145 resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
146 integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
147
148are-we-there-yet@~1.1.2:
149 version "1.1.5"
150 resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
151 integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
152 dependencies:
153 delegates "^1.0.0"
154 readable-stream "^2.0.6"
155
156balanced-match@^1.0.0:
157 version "1.0.2"
158 resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
159 integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
160
161base64-js@^1.3.1:
162 version "1.5.1"
163 resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
164 integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
165
166bencode@^2.0.0, bencode@^2.0.1:
167 version "2.0.1"
168 resolved "https://registry.yarnpkg.com/bencode/-/bencode-2.0.1.tgz#667a6a31c5e038d558608333da6b7c94e836c85b"
169 integrity sha512-2uhEl8FdjSBUyb69qDTgOEeeqDTa+n3yMQzLW0cOzNf1Ow5bwcg3idf+qsWisIKRH8Bk8oC7UXL8irRcPA8ZEQ==
170 dependencies:
171 safe-buffer "^5.1.1"
172
173bep53-range@^1.1.0:
174 version "1.1.0"
175 resolved "https://registry.yarnpkg.com/bep53-range/-/bep53-range-1.1.0.tgz#a009311710c955d27eb3a30cf329e8c139693d27"
176 integrity sha512-yGQTG4NtwTciX0Bkgk1FqQL4p+NiCQKpTSFho2lrxvUkXIlzyJDwraj8aYxAxRZMnnOhRr7QlIBoMRPEnIR34Q==
177
178binary-search@^1.3.4:
179 version "1.3.6"
180 resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c"
181 integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==
182
183bitfield@^4.0.0:
184 version "4.0.0"
185 resolved "https://registry.yarnpkg.com/bitfield/-/bitfield-4.0.0.tgz#3094123c870030dc6198a283d779639bd2a8e256"
186 integrity sha512-jtuSG9CQr5yoHFuvhgf50+DH8Aezl3C/mMSfqdG4DqP7Kqe34uBUtCEHPN9oWaldTm96/i7y5e778SnM5ES4rw==
187
188bittorrent-dht@^10.0.0:
189 version "10.0.0"
190 resolved "https://registry.yarnpkg.com/bittorrent-dht/-/bittorrent-dht-10.0.0.tgz#01de59bb03ed86a8847cb533134925d236d7f565"
191 integrity sha512-mrM18HMabvd3n/hQa4PYe942nWvBsJCBQb5PfT9kUJLlspNPGiulZYSCgWs7+XarS7nufYrGEp07f9eKTKIrgw==
192 dependencies:
193 bencode "^2.0.0"
194 debug "^4.1.1"
195 k-bucket "^5.0.0"
196 k-rpc "^5.0.0"
197 last-one-wins "^1.0.4"
198 lru "^3.1.0"
199 randombytes "^2.0.5"
200 record-cache "^1.0.2"
201 simple-sha1 "^3.0.0"
202
203bittorrent-lsd@^1.0.0:
204 version "1.1.0"
205 resolved "https://registry.yarnpkg.com/bittorrent-lsd/-/bittorrent-lsd-1.1.0.tgz#64f7fa5a277e0236af6c03d475065f2bb3fc6ade"
206 integrity sha512-j9F+bDt1R//+kLfeSgkmc1A3x0u70gjb/FXaRgTtw+V3wIeYjOekiIlmsXf1SNKuxU5YHDkNL8CFNHx+MfSPSw==
207 dependencies:
208 chrome-dgram "^3.0.6"
209 debug "^4.2.0"
210
211bittorrent-peerid@^1.3.3:
212 version "1.3.3"
213 resolved "https://registry.yarnpkg.com/bittorrent-peerid/-/bittorrent-peerid-1.3.3.tgz#b8dc79e421f8136d2ffd0b163a18e9d70da09949"
214 integrity sha512-tSh9HdQgwyEAfo1jzoGEis6o/zs4CcdRTchG93XVl5jct+DCAN90M5MVUV76k2vJ9Xg3GAzLB5NLsY/vnVTh6w==
215
216bittorrent-protocol@^3.3.1:
217 version "3.4.1"
218 resolved "https://registry.yarnpkg.com/bittorrent-protocol/-/bittorrent-protocol-3.4.1.tgz#b481d09dbf910fa7fcca5f06a7c1c4246151d4d1"
219 integrity sha512-3qBW4ZZrUZKN7HzHbX4+kbiphrTNeraMp3i9n3wobicysjibAV8SBDY+sGiBN4SgXV6WvEW4kyRPIjoSqW+khw==
220 dependencies:
221 bencode "^2.0.1"
222 bitfield "^4.0.0"
223 buffer-xor "^2.0.2"
224 debug "^4.3.1"
225 randombytes "^2.1.0"
226 rc4 "^0.1.5"
227 readable-stream "^3.6.0"
228 simple-sha1 "^3.0.0"
229 speedometer "^1.1.0"
230 unordered-array-remove "^1.0.2"
231
232bittorrent-tracker@^9.0.0:
233 version "9.17.2"
234 resolved "https://registry.yarnpkg.com/bittorrent-tracker/-/bittorrent-tracker-9.17.2.tgz#1afb02d3d2fb474c13389c45e8a2b6919bff40bd"
235 integrity sha512-hXjed0OnB16da+ScJUZnrAZbf9gMgSLKqh5rJebtYnTRgN4o1mX0DOPH3Nf5RFCs935ibhSmZN5nwbkh+3MdEA==
236 dependencies:
237 bencode "^2.0.1"
238 bittorrent-peerid "^1.3.3"
239 bn.js "^5.2.0"
240 chrome-dgram "^3.0.6"
241 compact2string "^1.4.1"
242 debug "^4.1.1"
243 ip "^1.1.5"
244 lru "^3.1.0"
245 minimist "^1.2.5"
246 once "^1.4.0"
247 queue-microtask "^1.2.3"
248 random-iterate "^1.0.1"
249 randombytes "^2.1.0"
250 run-parallel "^1.2.0"
251 run-series "^1.1.9"
252 simple-get "^4.0.0"
253 simple-peer "^9.11.0"
254 simple-websocket "^9.1.0"
255 string2compact "^1.3.0"
256 unordered-array-remove "^1.0.2"
257 ws "^7.4.5"
258 optionalDependencies:
259 bufferutil "^4.0.3"
260 utf-8-validate "^5.0.5"
261
262blob-to-buffer@^1.2.9:
263 version "1.2.9"
264 resolved "https://registry.yarnpkg.com/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz#a17fd6c1c564011408f8971e451544245daaa84a"
265 integrity sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==
266
267block-stream2@^2.0.0, block-stream2@^2.1.0:
268 version "2.1.0"
269 resolved "https://registry.yarnpkg.com/block-stream2/-/block-stream2-2.1.0.tgz#ac0c5ef4298b3857796e05be8ebed72196fa054b"
270 integrity sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==
271 dependencies:
272 readable-stream "^3.4.0"
273
274bn.js@^5.2.0:
275 version "5.2.0"
276 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
277 integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
278
279brace-expansion@^1.1.7:
280 version "1.1.11"
281 resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
282 integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
283 dependencies:
284 balanced-match "^1.0.0"
285 concat-map "0.0.1"
286
287browserify-package-json@^1.0.0:
288 version "1.0.1"
289 resolved "https://registry.yarnpkg.com/browserify-package-json/-/browserify-package-json-1.0.1.tgz#98dde8aa5c561fd6d3fe49bbaa102b74b396fdea"
290 integrity sha1-mN3oqlxWH9bT/km7qhArdLOW/eo=
291
292buffer-alloc-unsafe@^1.1.0:
293 version "1.1.0"
294 resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
295 integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
296
297buffer-alloc@^1.1.0:
298 version "1.2.0"
299 resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
300 integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
301 dependencies:
302 buffer-alloc-unsafe "^1.1.0"
303 buffer-fill "^1.0.0"
304
305buffer-fill@^1.0.0:
306 version "1.0.0"
307 resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
308 integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
309
310buffer-from@^1.0.0:
311 version "1.1.1"
312 resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
313 integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
314
315buffer-indexof@^1.0.0:
316 version "1.1.1"
317 resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
318 integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
319
320buffer-xor@^2.0.2:
321 version "2.0.2"
322 resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289"
323 integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==
324 dependencies:
325 safe-buffer "^5.1.1"
326
327buffer@^6.0.3:
328 version "6.0.3"
329 resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
330 integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
331 dependencies:
332 base64-js "^1.3.1"
333 ieee754 "^1.2.1"
334
335bufferutil@^4.0.3:
336 version "4.0.3"
337 resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b"
338 integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==
339 dependencies:
340 node-gyp-build "^4.2.0"
341
342castv2-client@^1.1.0:
343 version "1.2.0"
344 resolved "https://registry.yarnpkg.com/castv2-client/-/castv2-client-1.2.0.tgz#a9193b1a5448b8cb9a0415bd021c8811ed7b0544"
345 integrity sha1-qRk7GlRIuMuaBBW9AhyIEe17BUQ=
346 dependencies:
347 castv2 "~0.1.4"
348 debug "^2.2.0"
349
350castv2@~0.1.4:
351 version "0.1.10"
352 resolved "https://registry.yarnpkg.com/castv2/-/castv2-0.1.10.tgz#d3df00124f1ba8a97691c69dd44221d3b5f93c56"
353 integrity sha512-3QWevHrjT22KdF08Y2a217IYCDQDP7vEJaY4n0lPBeC5UBYbMFMadDfVTsaQwq7wqsEgYUHElPGm3EO1ey+TNw==
354 dependencies:
355 debug "^4.1.1"
356 protobufjs "^6.8.8"
357
358chalk@^2.0.0: 52chalk@^2.0.0:
359 version "2.4.2" 53 version "2.4.2"
360 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 54 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -364,62 +58,6 @@ chalk@^2.0.0:
364 escape-string-regexp "^1.0.5" 58 escape-string-regexp "^1.0.5"
365 supports-color "^5.3.0" 59 supports-color "^5.3.0"
366 60
367charset@^1.0.1:
368 version "1.0.1"
369 resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd"
370 integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==
371
372chownr@^1.1.1:
373 version "1.1.4"
374 resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
375 integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
376
377chrome-dgram@^3.0.2, chrome-dgram@^3.0.6:
378 version "3.0.6"
379 resolved "https://registry.yarnpkg.com/chrome-dgram/-/chrome-dgram-3.0.6.tgz#2288b5c7471f66f073691206d36319dda713cf55"
380 integrity sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==
381 dependencies:
382 inherits "^2.0.4"
383 run-series "^1.1.9"
384
385chrome-dns@^1.0.0:
386 version "1.0.1"
387 resolved "https://registry.yarnpkg.com/chrome-dns/-/chrome-dns-1.0.1.tgz#6870af680a40d2c4b2efc2154a378793f5a4ce4b"
388 integrity sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==
389 dependencies:
390 chrome-net "^3.3.2"
391
392chrome-net@^3.3.2, chrome-net@^3.3.3, chrome-net@^3.3.4:
393 version "3.3.4"
394 resolved "https://registry.yarnpkg.com/chrome-net/-/chrome-net-3.3.4.tgz#0e604a31d226ebfb8d2d1c381cab47d35309825d"
395 integrity sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==
396 dependencies:
397 inherits "^2.0.1"
398
399chromecasts@^1.9.1:
400 version "1.10.0"
401 resolved "https://registry.yarnpkg.com/chromecasts/-/chromecasts-1.10.0.tgz#7016c9f31b99e40636b21a75976c9364e3fbabbb"
402 integrity sha512-vrOiuHxqLb0bWRBlvyL18cHU8PcbZ7iJvwDB6aHdbtdIDVWuzWWZwDyAWHu54j4JNqyaAyYBJiJ6bbHInVcqBQ==
403 dependencies:
404 castv2-client "^1.1.0"
405 debug "^2.1.3"
406 dns-txt "^2.0.2"
407 mime "^1.3.4"
408 multicast-dns "^7.2.2"
409 simple-get "^2.0.0"
410 thunky "^0.1.0"
411 xml2js "^0.4.8"
412 optionalDependencies:
413 node-ssdp "^2.2.0"
414
415chunk-store-stream@^4.3.0:
416 version "4.3.0"
417 resolved "https://registry.yarnpkg.com/chunk-store-stream/-/chunk-store-stream-4.3.0.tgz#3de5f4dfe19729366c29bb7ed52d139f9af29f0e"
418 integrity sha512-qby+/RXoiMoTVtPiylWZt7KFF1jy6M829TzMi2hxZtBIH9ptV19wxcft6zGiXLokJgCbuZPGNGab6DWHqiSEKw==
419 dependencies:
420 block-stream2 "^2.0.0"
421 readable-stream "^3.6.0"
422
423cli-table3@^0.6.0: 61cli-table3@^0.6.0:
424 version "0.6.0" 62 version "0.6.0"
425 resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" 63 resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee"
@@ -430,16 +68,6 @@ cli-table3@^0.6.0:
430 optionalDependencies: 68 optionalDependencies:
431 colors "^1.1.2" 69 colors "^1.1.2"
432 70
433clivas@^0.2.0:
434 version "0.2.0"
435 resolved "https://registry.yarnpkg.com/clivas/-/clivas-0.2.0.tgz#b8d19188b3243e390f302410bd0cb1622db82649"
436 integrity sha1-uNGRiLMkPjkPMCQQvQyxYi24Jkk=
437
438code-point-at@^1.0.0:
439 version "1.1.0"
440 resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
441 integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
442
443color-convert@^1.9.0: 71color-convert@^1.9.0:
444 version "1.9.3" 72 version "1.9.3"
445 resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 73 resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -457,67 +85,6 @@ colors@^1.1.2:
457 resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 85 resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
458 integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 86 integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
459 87
460common-tags@^1.8.0:
461 version "1.8.0"
462 resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
463 integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
464
465compact2string@^1.4.1:
466 version "1.4.1"
467 resolved "https://registry.yarnpkg.com/compact2string/-/compact2string-1.4.1.tgz#8d34929055f8300a13cfc030ad1832e2e53c2e25"
468 integrity sha512-3D+EY5nsRhqnOwDxveBv5T8wGo4DEvYxjDtPGmdOX+gfr5gE92c2RC0w2wa+xEefm07QuVqqcF3nZJUZ92l/og==
469 dependencies:
470 ipaddr.js ">= 0.1.5"
471
472concat-map@0.0.1:
473 version "0.0.1"
474 resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
475 integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
476
477concat-stream@^1.4.8:
478 version "1.6.2"
479 resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
480 integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
481 dependencies:
482 buffer-from "^1.0.0"
483 inherits "^2.0.3"
484 readable-stream "^2.2.2"
485 typedarray "^0.0.6"
486
487console-control-strings@^1.0.0, console-control-strings@~1.1.0:
488 version "1.1.0"
489 resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
490 integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
491
492core-util-is@~1.0.0:
493 version "1.0.2"
494 resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
495 integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
496
497cpus@^1.0.3:
498 version "1.0.3"
499 resolved "https://registry.yarnpkg.com/cpus/-/cpus-1.0.3.tgz#4ef6deea461968d6329d07dd01205685df2934a2"
500 integrity sha512-PXHBvGLuL69u55IkLa5e5838fLhIMHxmkV4ge42a8alGyn7BtawYgI0hQ849EedvtHIOLNNH3i6eQU1BiE9SUA==
501
502create-torrent@^4.4.2, create-torrent@^4.7.0:
503 version "4.7.0"
504 resolved "https://registry.yarnpkg.com/create-torrent/-/create-torrent-4.7.0.tgz#ba5d52d41e7621d0d61c895c8026d3fb22aa4333"
505 integrity sha512-Pb3XjZNKdCs0Nk46yFKb82y+a3xRQeMvGi1AlJfIV40y/iwkgBqzS5EfqdnakEOvh2jzTOx3v8QxZpkz4hPzyw==
506 dependencies:
507 bencode "^2.0.1"
508 block-stream2 "^2.1.0"
509 filestream "^5.0.0"
510 is-file "^1.0.0"
511 junk "^3.1.0"
512 minimist "^1.2.5"
513 multistream "^4.0.1"
514 once "^1.4.0"
515 piece-length "^2.0.1"
516 queue-microtask "^1.2.2"
517 readable-stream "^3.6.0"
518 run-parallel "^1.1.10"
519 simple-sha1 "^3.0.1"
520
521cross-spawn@^6.0.0: 88cross-spawn@^6.0.0:
522 version "6.0.5" 89 version "6.0.5"
523 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 90 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -529,142 +96,23 @@ cross-spawn@^6.0.0:
529 shebang-command "^1.2.0" 96 shebang-command "^1.2.0"
530 which "^1.2.9" 97 which "^1.2.9"
531 98
532debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0: 99debug@^3.1.0:
533 version "2.6.9"
534 resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
535 integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
536 dependencies:
537 ms "2.0.0"
538
539debug@^3.1.0, debug@^3.2.6:
540 version "3.2.7" 100 version "3.2.7"
541 resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 101 resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
542 integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 102 integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
543 dependencies: 103 dependencies:
544 ms "^2.1.1" 104 ms "^2.1.1"
545 105
546debug@^4.0.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1:
547 version "4.3.1"
548 resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
549 integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
550 dependencies:
551 ms "2.1.2"
552
553decompress-response@^3.3.0:
554 version "3.3.0"
555 resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
556 integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
557 dependencies:
558 mimic-response "^1.0.0"
559
560decompress-response@^6.0.0:
561 version "6.0.0"
562 resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
563 integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
564 dependencies:
565 mimic-response "^3.1.0"
566
567deep-extend@^0.6.0:
568 version "0.6.0"
569 resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
570 integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
571
572define-lazy-prop@^2.0.0:
573 version "2.0.0"
574 resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
575 integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
576
577delegates@^1.0.0:
578 version "1.0.0"
579 resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
580 integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
581
582detect-indent@^6.0.0: 106detect-indent@^6.0.0:
583 version "6.1.0" 107 version "6.1.0"
584 resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" 108 resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
585 integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== 109 integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
586 110
587detect-libc@^1.0.2:
588 version "1.0.3"
589 resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
590 integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
591
592dlnacasts@^0.1.0:
593 version "0.1.0"
594 resolved "https://registry.yarnpkg.com/dlnacasts/-/dlnacasts-0.1.0.tgz#f805211dcac74f6bb3a4d5d5541ad783b1b67d22"
595 integrity sha1-+AUhHcrHT2uzpNXVVBrXg7G2fSI=
596 dependencies:
597 debug "^2.1.3"
598 mime "^1.3.4"
599 node-ssdp "^2.7.1"
600 run-parallel "^1.1.6"
601 simple-get "^2.1.0"
602 thunky "^0.1.0"
603 upnp-mediarenderer-client "^1.2.2"
604 xml2js "^0.4.8"
605
606dns-packet@^5.2.2:
607 version "5.2.4"
608 resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.2.4.tgz#e004f409eadfa8ec861964dcb9eb395884fcf67d"
609 integrity sha512-vgu5Bx5IV8mXmh/9cn1lzn+J7okFlXe1vBRp+kCBJXg1nBED6Z/Q4e+QaDxQRSozMr14p/VQmdXwsf/I2wGjUA==
610 dependencies:
611 ip "^1.1.5"
612
613dns-txt@^2.0.2:
614 version "2.0.2"
615 resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
616 integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
617 dependencies:
618 buffer-indexof "^1.0.0"
619
620domexception@^1.0.1:
621 version "1.0.1"
622 resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
623 integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
624 dependencies:
625 webidl-conversions "^4.0.2"
626
627ecstatic@^4.1.4:
628 version "4.1.4"
629 resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-4.1.4.tgz#86bf340dabe56c4d0c93d406ac36c040f68e1d79"
630 integrity sha512-8E4ZLK4uRuB9pwywGpy/B9vcz4gCp6IY7u4cMbeCINr/fjb1v+0wf0Ae2XlfSnG8xZYnE4uaJBjFkYI0bqcIdw==
631 dependencies:
632 charset "^1.0.1"
633 he "^1.1.1"
634 mime "^2.4.1"
635 minimist "^1.1.0"
636 on-finished "^2.3.0"
637 url-join "^4.0.0"
638
639ee-first@1.1.1:
640 version "1.1.1"
641 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
642 integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
643
644elementtree@^0.1.6, elementtree@~0.1.6:
645 version "0.1.7"
646 resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0"
647 integrity sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=
648 dependencies:
649 sax "1.1.4"
650
651emoji-regex@^8.0.0: 111emoji-regex@^8.0.0:
652 version "8.0.0" 112 version "8.0.0"
653 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 113 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
654 integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 114 integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
655 115
656end-of-stream@^1.1.0, end-of-stream@^1.4.4:
657 version "1.4.4"
658 resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
659 integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
660 dependencies:
661 once "^1.4.0"
662
663err-code@^3.0.1:
664 version "3.0.1"
665 resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920"
666 integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==
667
668error-ex@^1.3.1: 116error-ex@^1.3.1:
669 version "1.3.2" 117 version "1.3.2"
670 resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 118 resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -672,11 +120,6 @@ error-ex@^1.3.1:
672 dependencies: 120 dependencies:
673 is-arrayish "^0.2.1" 121 is-arrayish "^0.2.1"
674 122
675escape-html@^1.0.3:
676 version "1.0.3"
677 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
678 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
679
680escape-string-regexp@^1.0.5: 123escape-string-regexp@^1.0.5:
681 version "1.0.5" 124 version "1.0.5"
682 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 125 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@@ -695,91 +138,11 @@ execa@^0.10.0:
695 signal-exit "^3.0.0" 138 signal-exit "^3.0.0"
696 strip-eof "^1.0.0" 139 strip-eof "^1.0.0"
697 140
698executable@^4.1.1:
699 version "4.1.1"
700 resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
701 integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
702 dependencies:
703 pify "^2.2.0"
704
705filestream@^5.0.0:
706 version "5.0.0"
707 resolved "https://registry.yarnpkg.com/filestream/-/filestream-5.0.0.tgz#79015f3bae95ad0f47ef818694846f085087b92e"
708 integrity sha512-5H3RqSaJp12THfZiNWodYM7TiKfQvrpX+EIOrB1XvCceTys4yvfEIl8wDp+/yI8qj6Bxym8m0NYWwVXDAet/+A==
709 dependencies:
710 readable-stream "^3.4.0"
711 typedarray-to-buffer "^3.0.0"
712
713freelist@^1.0.3:
714 version "1.0.3"
715 resolved "https://registry.yarnpkg.com/freelist/-/freelist-1.0.3.tgz#006775509f3935701784d3ed2fc9f12c9df1bab2"
716 integrity sha1-AGd1UJ85NXAXhNPtL8nxLJ3xurI=
717
718fs-chunk-store@^2.0.3:
719 version "2.0.3"
720 resolved "https://registry.yarnpkg.com/fs-chunk-store/-/fs-chunk-store-2.0.3.tgz#21e51f1833a84a07cb5e911d058dae084030375a"
721 integrity sha512-qQi93nHX3880gtoQPt1hKQcuYBNVfCbMk8OVRDqR0cJ0riheELW25ry9yl7pII8E9gOAONTGKBD5N/zGHFSVQg==
722 dependencies:
723 queue-microtask "^1.2.2"
724 random-access-file "^2.0.1"
725 randombytes "^2.0.3"
726 rimraf "^3.0.0"
727 run-parallel "^1.1.2"
728 thunky "^1.0.1"
729
730fs-minipass@^1.2.5:
731 version "1.2.7"
732 resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
733 integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
734 dependencies:
735 minipass "^2.6.0"
736
737fs.realpath@^1.0.0:
738 version "1.0.0"
739 resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
740 integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
741
742gauge@~2.7.3:
743 version "2.7.4"
744 resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
745 integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
746 dependencies:
747 aproba "^1.0.3"
748 console-control-strings "^1.0.0"
749 has-unicode "^2.0.0"
750 object-assign "^4.1.0"
751 signal-exit "^3.0.0"
752 string-width "^1.0.1"
753 strip-ansi "^3.0.1"
754 wide-align "^1.1.0"
755
756get-browser-rtc@^1.1.0:
757 version "1.1.0"
758 resolved "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz#d1494e299b00f33fc8e9d6d3343ba4ba99711a2c"
759 integrity sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==
760
761get-stdin@^8.0.0:
762 version "8.0.0"
763 resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
764 integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
765
766get-stream@^3.0.0: 141get-stream@^3.0.0:
767 version "3.0.0" 142 version "3.0.0"
768 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 143 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
769 integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 144 integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
770 145
771glob@^7.1.3:
772 version "7.1.7"
773 resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
774 integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
775 dependencies:
776 fs.realpath "^1.0.0"
777 inflight "^1.0.4"
778 inherits "2"
779 minimatch "^3.0.4"
780 once "^1.3.0"
781 path-is-absolute "^1.0.0"
782
783graceful-fs@^4.1.15: 146graceful-fs@^4.1.15:
784 version "4.2.6" 147 version "4.2.6"
785 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 148 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
@@ -790,132 +153,16 @@ has-flag@^3.0.0:
790 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 153 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
791 integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 154 integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
792 155
793has-unicode@^2.0.0:
794 version "2.0.1"
795 resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
796 integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
797
798he@^1.1.1:
799 version "1.2.0"
800 resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
801 integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
802
803"http-node@github:feross/http-node#webtorrent":
804 version "1.2.0"
805 resolved "https://codeload.github.com/feross/http-node/tar.gz/342ef8624495343ffd050bd0808b3750cf0e3974"
806 dependencies:
807 chrome-net "^3.3.3"
808 freelist "^1.0.3"
809 http-parser-js "^0.4.3"
810
811http-parser-js@^0.4.3:
812 version "0.4.13"
813 resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137"
814 integrity sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=
815
816iconv-lite@^0.4.4:
817 version "0.4.24"
818 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
819 integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
820 dependencies:
821 safer-buffer ">= 2.1.2 < 3"
822
823ieee754@^1.2.1:
824 version "1.2.1"
825 resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
826 integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
827
828ignore-walk@^3.0.1:
829 version "3.0.4"
830 resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
831 integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
832 dependencies:
833 minimatch "^3.0.4"
834
835immediate-chunk-store@^2.2.0:
836 version "2.2.0"
837 resolved "https://registry.yarnpkg.com/immediate-chunk-store/-/immediate-chunk-store-2.2.0.tgz#f56d30ecc7171f6cfcf632b0eb8395a89f92c03c"
838 integrity sha512-1bHBna0hCa6arRXicu91IiL9RvvkbNYLVq+mzWdaLGZC3hXvX4doh8e1dLhMKez5siu63CYgO5NrGJbRX5lbPA==
839 dependencies:
840 queue-microtask "^1.2.3"
841
842imurmurhash@^0.1.4: 156imurmurhash@^0.1.4:
843 version "0.1.4" 157 version "0.1.4"
844 resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 158 resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
845 integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 159 integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
846 160
847inflight@^1.0.4:
848 version "1.0.6"
849 resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
850 integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
851 dependencies:
852 once "^1.3.0"
853 wrappy "1"
854
855inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
856 version "2.0.4"
857 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
858 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
859
860ini@~1.3.0:
861 version "1.3.8"
862 resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
863 integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
864
865ip-set@^2.1.0:
866 version "2.1.0"
867 resolved "https://registry.yarnpkg.com/ip-set/-/ip-set-2.1.0.tgz#9a47b9f5d220c38bc7fe5db8efc4baa45b0a0a35"
868 integrity sha512-JdHz4tSMx1IeFj8yEcQU0i58qiSkOlmZXkZ8+HJ0ROV5KcgLRDO9F703oJ1GeZCvqggrcCbmagD/V7hghY62wA==
869 dependencies:
870 ip "^1.1.5"
871
872ip@^1.0.1, ip@^1.1.5:
873 version "1.1.5"
874 resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
875 integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
876
877"ipaddr.js@>= 0.1.5":
878 version "2.0.1"
879 resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
880 integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
881
882ipaddr.js@^1.0.1:
883 version "1.9.1"
884 resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
885 integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
886
887is-arrayish@^0.2.1: 161is-arrayish@^0.2.1:
888 version "0.2.1" 162 version "0.2.1"
889 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 163 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
890 integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 164 integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
891 165
892is-ascii@^1.0.0:
893 version "1.0.0"
894 resolved "https://registry.yarnpkg.com/is-ascii/-/is-ascii-1.0.0.tgz#f02ad0259a0921cd199ff21ce1b09e0f6b4e3929"
895 integrity sha1-8CrQJZoJIc0Zn/Ic4bCeD2tOOSk=
896
897is-docker@^2.0.0, is-docker@^2.1.1:
898 version "2.2.1"
899 resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
900 integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
901
902is-file@^1.0.0:
903 version "1.0.0"
904 resolved "https://registry.yarnpkg.com/is-file/-/is-file-1.0.0.tgz#28a44cfbd9d3db193045f22b65fce8edf9620596"
905 integrity sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=
906
907is-fullwidth-code-point@^1.0.0:
908 version "1.0.0"
909 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
910 integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
911 dependencies:
912 number-is-nan "^1.0.0"
913
914is-fullwidth-code-point@^2.0.0:
915 version "2.0.0"
916 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
917 integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
918
919is-fullwidth-code-point@^3.0.0: 166is-fullwidth-code-point@^3.0.0:
920 version "3.0.0" 167 version "3.0.0"
921 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 168 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@@ -936,18 +183,6 @@ is-typedarray@^1.0.0:
936 resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 183 resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
937 integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 184 integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
938 185
939is-wsl@^2.2.0:
940 version "2.2.0"
941 resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
942 integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
943 dependencies:
944 is-docker "^2.0.0"
945
946isarray@~1.0.0:
947 version "1.0.0"
948 resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
949 integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
950
951isexe@^2.0.0: 186isexe@^2.0.0:
952 version "2.0.0" 187 version "2.0.0"
953 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 188 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -963,58 +198,11 @@ json-parse-even-better-errors@^2.3.0:
963 resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 198 resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
964 integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 199 integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
965 200
966junk@^3.1.0:
967 version "3.1.0"
968 resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1"
969 integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==
970
971k-bucket@^5.0.0:
972 version "5.1.0"
973 resolved "https://registry.yarnpkg.com/k-bucket/-/k-bucket-5.1.0.tgz#db2c9e72bd168b432e3f3e8fc092e2ccb61bff89"
974 integrity sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==
975 dependencies:
976 randombytes "^2.1.0"
977
978k-rpc-socket@^1.7.2:
979 version "1.11.1"
980 resolved "https://registry.yarnpkg.com/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz#f14b4b240a716c6cad7b6434b21716dbd7c7b0e8"
981 integrity sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==
982 dependencies:
983 bencode "^2.0.0"
984 chrome-dgram "^3.0.2"
985 chrome-dns "^1.0.0"
986 chrome-net "^3.3.2"
987
988k-rpc@^5.0.0:
989 version "5.1.0"
990 resolved "https://registry.yarnpkg.com/k-rpc/-/k-rpc-5.1.0.tgz#af2052de2e84994d55da3032175da5dad8640174"
991 integrity sha512-FGc+n70Hcjoa/X2JTwP+jMIOpBz+pkRffHnSl9yrYiwUxg3FIgD50+u1ePfJUOnRCnx6pbjmVk5aAeB1wIijuQ==
992 dependencies:
993 k-bucket "^5.0.0"
994 k-rpc-socket "^1.7.2"
995 randombytes "^2.0.5"
996
997last-one-wins@^1.0.4:
998 version "1.0.4"
999 resolved "https://registry.yarnpkg.com/last-one-wins/-/last-one-wins-1.0.4.tgz#c1bfd0cbcb46790ec9156b8d1aee8fcb86cda22a"
1000 integrity sha1-wb/Qy8tGeQ7JFWuNGu6Py4bNoio=
1001
1002lines-and-columns@^1.1.6: 201lines-and-columns@^1.1.6:
1003 version "1.1.6" 202 version "1.1.6"
1004 resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 203 resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
1005 integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 204 integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
1006 205
1007load-ip-set@^2.2.1:
1008 version "2.2.1"
1009 resolved "https://registry.yarnpkg.com/load-ip-set/-/load-ip-set-2.2.1.tgz#9496ab8aa14ebf81aeb7c8bb38e7abdf50af3563"
1010 integrity sha512-G3hQXehU2LTOp52e+lPffpK4EvidfjwbvHaGqmFcp4ptiZagR4xFdL+D08kMX906dxeqZyWhfonEjdUxrWcldg==
1011 dependencies:
1012 ip-set "^2.1.0"
1013 netmask "^2.0.1"
1014 once "^1.4.0"
1015 simple-get "^4.0.0"
1016 split "^1.0.1"
1017
1018load-json-file@^6.2.0: 206load-json-file@^6.2.0:
1019 version "6.2.0" 207 version "6.2.0"
1020 resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" 208 resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1"
@@ -1025,34 +213,6 @@ load-json-file@^6.2.0:
1025 strip-bom "^4.0.0" 213 strip-bom "^4.0.0"
1026 type-fest "^0.6.0" 214 type-fest "^0.6.0"
1027 215
1028long@^4.0.0:
1029 version "4.0.0"
1030 resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
1031 integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
1032
1033lru@^3.1.0:
1034 version "3.1.0"
1035 resolved "https://registry.yarnpkg.com/lru/-/lru-3.1.0.tgz#ea7fb8546d83733396a13091d76cfeb4c06837d5"
1036 integrity sha1-6n+4VG2DczOWoTCR12z+tMBoN9U=
1037 dependencies:
1038 inherits "^2.0.1"
1039
1040lt_donthave@^1.0.1:
1041 version "1.0.1"
1042 resolved "https://registry.yarnpkg.com/lt_donthave/-/lt_donthave-1.0.1.tgz#a160e08bdf15b9e092172063688855a6c031d8b3"
1043 integrity sha512-PfOXfDN9GnUjlNHjjxKQuMxPC8s12iSrnmg+Ff1BU1uLn7S1BFAKzpZCu6Gwg3WsCUvTZrZoDSHvy6B/j+N4/Q==
1044 dependencies:
1045 debug "^4.2.0"
1046 unordered-array-remove "^1.0.2"
1047
1048magnet-uri@^6.0.0:
1049 version "6.2.0"
1050 resolved "https://registry.yarnpkg.com/magnet-uri/-/magnet-uri-6.2.0.tgz#10f7be050bf23452df210838239b118463c3eeff"
1051 integrity sha512-O9AgdDwT771fnUj0giPYu/rACpz8173y8UXCSOdLITjOVfBenZ9H9q3FqQmveK+ORUMuD+BkKNSZP8C3+IMAKQ==
1052 dependencies:
1053 bep53-range "^1.1.0"
1054 thirty-two "^1.0.2"
1055
1056make-dir@^3.0.0: 216make-dir@^3.0.0:
1057 version "3.1.0" 217 version "3.1.0"
1058 resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 218 resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
@@ -1060,170 +220,11 @@ make-dir@^3.0.0:
1060 dependencies: 220 dependencies:
1061 semver "^6.0.0" 221 semver "^6.0.0"
1062 222
1063mdns-js-packet@~0.2.0:
1064 version "0.2.0"
1065 resolved "https://registry.yarnpkg.com/mdns-js-packet/-/mdns-js-packet-0.2.0.tgz#642409e8183c7561cc60615bbd1420ec2fad7616"
1066 integrity sha1-ZCQJ6Bg8dWHMYGFbvRQg7C+tdhY=
1067 dependencies:
1068 debug "^2.1.0"
1069 qap "^3.1.2"
1070
1071mdns-js@0.5.0:
1072 version "0.5.0"
1073 resolved "https://registry.yarnpkg.com/mdns-js/-/mdns-js-0.5.0.tgz#4c8abb6ba7cabdc892d39228c3faa2556e09cf87"
1074 integrity sha1-TIq7a6fKvciS05Iow/qiVW4Jz4c=
1075 dependencies:
1076 debug "^2.1.1"
1077 mdns-js-packet "~0.2.0"
1078 semver "~5.1.0"
1079
1080mediasource@^2.2.2, mediasource@^2.4.0:
1081 version "2.4.0"
1082 resolved "https://registry.yarnpkg.com/mediasource/-/mediasource-2.4.0.tgz#7b03378054c41400374e9bade50aa0d7a758c39b"
1083 integrity sha512-SKUMrbFMHgiCUZFOWZcL0aiF/KgHx9SPIKzxrl6+7nMUMDK/ZnOmJdY/9wKzYeM0g3mybt3ueg+W+/mrYfmeFQ==
1084 dependencies:
1085 inherits "^2.0.4"
1086 readable-stream "^3.6.0"
1087 to-arraybuffer "^1.0.1"
1088
1089memory-chunk-store@^1.3.5:
1090 version "1.3.5"
1091 resolved "https://registry.yarnpkg.com/memory-chunk-store/-/memory-chunk-store-1.3.5.tgz#700f712415895600bc5466007333efa19f1de07c"
1092 integrity sha512-E1Xc1U4ifk/FkC2ZsWhCaW1xg9HbE/OBmQTLe2Tr9c27YPSLbW7kw1cnb3kQWD1rDtErFJHa7mB9EVrs7aTx9g==
1093 dependencies:
1094 queue-microtask "^1.2.3"
1095
1096mime@^1.3.4:
1097 version "1.6.0"
1098 resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
1099 integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
1100
1101mime@^2.4.1, mime@^2.4.6, mime@^2.5.2:
1102 version "2.5.2"
1103 resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
1104 integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
1105
1106mimic-response@^1.0.0:
1107 version "1.0.1"
1108 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
1109 integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
1110
1111mimic-response@^3.1.0:
1112 version "3.1.0"
1113 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
1114 integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
1115
1116minimatch@^3.0.4:
1117 version "3.0.4"
1118 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1119 integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1120 dependencies:
1121 brace-expansion "^1.1.7"
1122
1123minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5:
1124 version "1.2.5"
1125 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
1126 integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
1127
1128minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
1129 version "2.9.0"
1130 resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
1131 integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
1132 dependencies:
1133 safe-buffer "^5.1.2"
1134 yallist "^3.0.0"
1135
1136minizlib@^1.2.1:
1137 version "1.3.3"
1138 resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
1139 integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
1140 dependencies:
1141 minipass "^2.9.0"
1142
1143mkdirp-classic@^0.5.2:
1144 version "0.5.3"
1145 resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
1146 integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
1147
1148mkdirp@^0.5.0, mkdirp@^0.5.1:
1149 version "0.5.5"
1150 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
1151 integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
1152 dependencies:
1153 minimist "^1.2.5"
1154
1155moment@^2.27.0:
1156 version "2.29.1"
1157 resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
1158 integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
1159
1160mp4-box-encoding@^1.3.0:
1161 version "1.4.1"
1162 resolved "https://registry.yarnpkg.com/mp4-box-encoding/-/mp4-box-encoding-1.4.1.tgz#19b31804c896bc1adf1c21b497bcf951aa3b9098"
1163 integrity sha512-2/PRtGGiqPc/VEhbm7xAQ+gbb7yzHjjMAv6MpAifr5pCpbh3fQUdj93uNgwPiTppAGu8HFKe3PeU+OdRyAxStA==
1164 dependencies:
1165 uint64be "^2.0.2"
1166
1167mp4-stream@^3.0.0:
1168 version "3.1.3"
1169 resolved "https://registry.yarnpkg.com/mp4-stream/-/mp4-stream-3.1.3.tgz#79b8a19900337203a9bd607a02eccc64419a379c"
1170 integrity sha512-DUT8f0x2jHbZjNMdqe9h6lZdt6RENWTTdGn8z3TXa4uEsoltuNY9lCCij84mdm0q7xcV0E2W25WRxlKBMo4hSw==
1171 dependencies:
1172 mp4-box-encoding "^1.3.0"
1173 next-event "^1.0.0"
1174 queue-microtask "^1.2.2"
1175 readable-stream "^3.0.6"
1176
1177ms@2.0.0:
1178 version "2.0.0"
1179 resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1180 integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1181
1182ms@2.1.2:
1183 version "2.1.2"
1184 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1185 integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1186
1187ms@^2.1.1: 223ms@^2.1.1:
1188 version "2.1.3" 224 version "2.1.3"
1189 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 225 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1190 integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 226 integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1191 227
1192multicast-dns@^7.2.2:
1193 version "7.2.3"
1194 resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.3.tgz#cbd07571dda41807b36f71067681f19e85ccc2cd"
1195 integrity sha512-TzxgGSLRLB7tqAlzjgd2x2ZE0cDsGFq4rs9W4yE5xp+7hlRXeUQGtXZsTGfGw2FwWB45rfe8DtXMYBpZGMLUng==
1196 dependencies:
1197 dns-packet "^5.2.2"
1198 thunky "^1.0.2"
1199
1200multistream@^4.0.1, multistream@^4.1.0:
1201 version "4.1.0"
1202 resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8"
1203 integrity sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==
1204 dependencies:
1205 once "^1.4.0"
1206 readable-stream "^3.6.0"
1207
1208napi-macros@^2.0.0:
1209 version "2.0.0"
1210 resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b"
1211 integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==
1212
1213needle@^2.2.1:
1214 version "2.6.0"
1215 resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe"
1216 integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==
1217 dependencies:
1218 debug "^3.2.6"
1219 iconv-lite "^0.4.4"
1220 sax "^1.2.4"
1221
1222netmask@^2.0.1:
1223 version "2.0.2"
1224 resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
1225 integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
1226
1227netrc-parser@^3.1.6: 228netrc-parser@^3.1.6:
1228 version "3.1.6" 229 version "3.1.6"
1229 resolved "https://registry.yarnpkg.com/netrc-parser/-/netrc-parser-3.1.6.tgz#7243c9ec850b8e805b9bdc7eae7b1450d4a96e72" 230 resolved "https://registry.yarnpkg.com/netrc-parser/-/netrc-parser-3.1.6.tgz#7243c9ec850b8e805b9bdc7eae7b1450d4a96e72"
@@ -1232,86 +233,11 @@ netrc-parser@^3.1.6:
1232 debug "^3.1.0" 233 debug "^3.1.0"
1233 execa "^0.10.0" 234 execa "^0.10.0"
1234 235
1235network-address@^1.0.0, network-address@^1.1.2:
1236 version "1.1.2"
1237 resolved "https://registry.yarnpkg.com/network-address/-/network-address-1.1.2.tgz#4aa7bfd43f03f0b81c9702b13d6a858ddb326f3e"
1238 integrity sha1-Sqe/1D8D8LgclwKxPWqFjdsybz4=
1239
1240next-event@^1.0.0:
1241 version "1.0.0"
1242 resolved "https://registry.yarnpkg.com/next-event/-/next-event-1.0.0.tgz#e7778acde2e55802e0ad1879c39cf6f75eda61d8"
1243 integrity sha1-53eKzeLlWALgrRh5w5z2917aYdg=
1244
1245nice-try@^1.0.4: 236nice-try@^1.0.4:
1246 version "1.0.5" 237 version "1.0.5"
1247 resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 238 resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
1248 integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 239 integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
1249 240
1250node-gyp-build@^4.2.0:
1251 version "4.2.3"
1252 resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
1253 integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==
1254
1255node-pre-gyp@^0.13.0:
1256 version "0.13.0"
1257 resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz#df9ab7b68dd6498137717838e4f92a33fc9daa42"
1258 integrity sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==
1259 dependencies:
1260 detect-libc "^1.0.2"
1261 mkdirp "^0.5.1"
1262 needle "^2.2.1"
1263 nopt "^4.0.1"
1264 npm-packlist "^1.1.6"
1265 npmlog "^4.0.2"
1266 rc "^1.2.7"
1267 rimraf "^2.6.1"
1268 semver "^5.3.0"
1269 tar "^4"
1270
1271node-ssdp@^2.2.0, node-ssdp@^2.7.1:
1272 version "2.9.1"
1273 resolved "https://registry.yarnpkg.com/node-ssdp/-/node-ssdp-2.9.1.tgz#2d6ba8e7eff9bf5b338564f91f7ac5d5cdddc55b"
1274 integrity sha1-LWuo5+/5v1szhWT5H3rF1c3dxVs=
1275 dependencies:
1276 debug "^2.2.0"
1277 ip "^1.0.1"
1278
1279nodebmc@0.0.7:
1280 version "0.0.7"
1281 resolved "https://registry.yarnpkg.com/nodebmc/-/nodebmc-0.0.7.tgz#fae179165265509302cefbebeabd29bd4035184d"
1282 integrity sha1-+uF5FlJlUJMCzvvr6r0pvUA1GE0=
1283 dependencies:
1284 mdns-js "0.5.0"
1285
1286nopt@^4.0.1:
1287 version "4.0.3"
1288 resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
1289 integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
1290 dependencies:
1291 abbrev "1"
1292 osenv "^0.1.4"
1293
1294npm-bundled@^1.0.1:
1295 version "1.1.2"
1296 resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
1297 integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
1298 dependencies:
1299 npm-normalize-package-bin "^1.0.1"
1300
1301npm-normalize-package-bin@^1.0.1:
1302 version "1.0.1"
1303 resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
1304 integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
1305
1306npm-packlist@^1.1.6:
1307 version "1.4.8"
1308 resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
1309 integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
1310 dependencies:
1311 ignore-walk "^3.0.1"
1312 npm-bundled "^1.0.1"
1313 npm-normalize-package-bin "^1.0.1"
1314
1315npm-run-path@^2.0.0: 241npm-run-path@^2.0.0:
1316 version "2.0.2" 242 version "2.0.2"
1317 resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 243 resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -1319,79 +245,16 @@ npm-run-path@^2.0.0:
1319 dependencies: 245 dependencies:
1320 path-key "^2.0.0" 246 path-key "^2.0.0"
1321 247
1322npmlog@^4.0.2:
1323 version "4.1.2"
1324 resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1325 integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
1326 dependencies:
1327 are-we-there-yet "~1.1.2"
1328 console-control-strings "~1.1.0"
1329 gauge "~2.7.3"
1330 set-blocking "~2.0.0"
1331
1332number-is-nan@^1.0.0:
1333 version "1.0.1"
1334 resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1335 integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
1336
1337object-assign@^4.1.0: 248object-assign@^4.1.0:
1338 version "4.1.1" 249 version "4.1.1"
1339 resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 250 resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1340 integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 251 integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1341 252
1342on-finished@^2.3.0:
1343 version "2.3.0"
1344 resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1345 integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
1346 dependencies:
1347 ee-first "1.1.1"
1348
1349once@^1.3.0, once@^1.3.1, once@^1.4.0:
1350 version "1.4.0"
1351 resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1352 integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1353 dependencies:
1354 wrappy "1"
1355
1356open@^8.0.0:
1357 version "8.2.0"
1358 resolved "https://registry.yarnpkg.com/open/-/open-8.2.0.tgz#d6a4788b00009a9d60df471ecb89842a15fdcfc1"
1359 integrity sha512-O8uInONB4asyY3qUcEytpgwxQG3O0fJ/hlssoUHsBboOIRVZzT6Wq+Rwj5nffbeUhOdMjpXeISpDDzHCMRDuOQ==
1360 dependencies:
1361 define-lazy-prop "^2.0.0"
1362 is-docker "^2.1.1"
1363 is-wsl "^2.2.0"
1364
1365os-homedir@^1.0.0:
1366 version "1.0.2"
1367 resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1368 integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
1369
1370os-tmpdir@^1.0.0:
1371 version "1.0.2"
1372 resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1373 integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1374
1375osenv@^0.1.4:
1376 version "0.1.5"
1377 resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
1378 integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
1379 dependencies:
1380 os-homedir "^1.0.0"
1381 os-tmpdir "^1.0.0"
1382
1383p-finally@^1.0.0: 253p-finally@^1.0.0:
1384 version "1.0.0" 254 version "1.0.0"
1385 resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 255 resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
1386 integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 256 integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
1387 257
1388package-json-versionify@^1.0.4:
1389 version "1.0.4"
1390 resolved "https://registry.yarnpkg.com/package-json-versionify/-/package-json-versionify-1.0.4.tgz#5860587a944873a6b7e6d26e8e51ffb22315bf17"
1391 integrity sha1-WGBYepRIc6a35tJujlH/siMVvxc=
1392 dependencies:
1393 browserify-package-json "^1.0.0"
1394
1395parse-json@^5.0.0: 258parse-json@^5.0.0:
1396 version "5.2.0" 259 version "5.2.0"
1397 resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 260 resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
@@ -1402,250 +265,12 @@ parse-json@^5.0.0:
1402 json-parse-even-better-errors "^2.3.0" 265 json-parse-even-better-errors "^2.3.0"
1403 lines-and-columns "^1.1.6" 266 lines-and-columns "^1.1.6"
1404 267
1405parse-torrent@^9.0.0, parse-torrent@^9.1.3:
1406 version "9.1.3"
1407 resolved "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-9.1.3.tgz#9b4bc8dca243b356bf449938d6d38a259a2a707c"
1408 integrity sha512-/Yr951CvJM8S6TjMaqrsmMxeQEAjDeCX+MZ3hGXXc7DG2wqzp/rzOsHtDzIVqN6NsFRCqy6wYLF/W7Sgvq7bXw==
1409 dependencies:
1410 bencode "^2.0.1"
1411 blob-to-buffer "^1.2.9"
1412 get-stdin "^8.0.0"
1413 magnet-uri "^6.0.0"
1414 queue-microtask "^1.2.2"
1415 simple-get "^4.0.0"
1416 simple-sha1 "^3.0.1"
1417
1418path-is-absolute@^1.0.0:
1419 version "1.0.1"
1420 resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1421 integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1422
1423path-key@^2.0.0, path-key@^2.0.1: 268path-key@^2.0.0, path-key@^2.0.1:
1424 version "2.0.1" 269 version "2.0.1"
1425 resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 270 resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
1426 integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 271 integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
1427 272
1428piece-length@^2.0.1: 273semver@^5.5.0:
1429 version "2.0.1"
1430 resolved "https://registry.yarnpkg.com/piece-length/-/piece-length-2.0.1.tgz#dbed4e78976955f34466d0a65304d0cb21914ac9"
1431 integrity sha512-dBILiDmm43y0JPISWEmVGKBETQjwJe6mSU9GND+P9KW0SJGUwoU/odyH1nbalOP9i8WSYuqf1lQnaj92Bhw+Ug==
1432
1433pify@^2.2.0:
1434 version "2.3.0"
1435 resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1436 integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
1437
1438plist-with-patches@0.5.1:
1439 version "0.5.1"
1440 resolved "https://registry.yarnpkg.com/plist-with-patches/-/plist-with-patches-0.5.1.tgz#868aae2e0df8989b026562b35cbc19cfd8bb780d"
1441 integrity sha1-hoquLg34mJsCZWKzXLwZz9i7eA0=
1442 dependencies:
1443 xmlbuilder "0.4.x"
1444 xmldom "0.1.x"
1445
1446prettier-bytes@^1.0.4:
1447 version "1.0.4"
1448 resolved "https://registry.yarnpkg.com/prettier-bytes/-/prettier-bytes-1.0.4.tgz#994b02aa46f699c50b6257b5faaa7fe2557e62d6"
1449 integrity sha1-mUsCqkb2mcULYle1+qp/4lV+YtY=
1450
1451process-nextick-args@~2.0.0:
1452 version "2.0.1"
1453 resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1454 integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1455
1456protobufjs@^6.8.8:
1457 version "6.11.2"
1458 resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b"
1459 integrity sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==
1460 dependencies:
1461 "@protobufjs/aspromise" "^1.1.2"
1462 "@protobufjs/base64" "^1.1.2"
1463 "@protobufjs/codegen" "^2.0.4"
1464 "@protobufjs/eventemitter" "^1.1.0"
1465 "@protobufjs/fetch" "^1.1.0"
1466 "@protobufjs/float" "^1.0.2"
1467 "@protobufjs/inquire" "^1.1.0"
1468 "@protobufjs/path" "^1.1.2"
1469 "@protobufjs/pool" "^1.1.0"
1470 "@protobufjs/utf8" "^1.1.0"
1471 "@types/long" "^4.0.1"
1472 "@types/node" ">=13.7.0"
1473 long "^4.0.0"
1474
1475pump@^3.0.0:
1476 version "3.0.0"
1477 resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
1478 integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
1479 dependencies:
1480 end-of-stream "^1.1.0"
1481 once "^1.3.1"
1482
1483qap@^3.1.2:
1484 version "3.3.1"
1485 resolved "https://registry.yarnpkg.com/qap/-/qap-3.3.1.tgz#11f9e8fa8890fe7cb99210c0f44d0613b7372cac"
1486 integrity sha1-Efno+oiQ/ny5khDA9E0GE7c3LKw=
1487
1488queue-microtask@^1.2.2, queue-microtask@^1.2.3:
1489 version "1.2.3"
1490 resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1491 integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1492
1493random-access-file@^2.0.1:
1494 version "2.2.0"
1495 resolved "https://registry.yarnpkg.com/random-access-file/-/random-access-file-2.2.0.tgz#b49b999efefb374afb7587f219071fec5ce66546"
1496 integrity sha512-B744003Mj7v3EcuPl9hCiB2Ot4aZjgtU2mV6yFY1THiWU/XfGf1uSadR+SlQdJcwHgAWeG7Lbos0aUqjtj8FQg==
1497 dependencies:
1498 mkdirp-classic "^0.5.2"
1499 random-access-storage "^1.1.1"
1500
1501random-access-storage@^1.1.1:
1502 version "1.4.1"
1503 resolved "https://registry.yarnpkg.com/random-access-storage/-/random-access-storage-1.4.1.tgz#39a524dd428ade9161ce61a8ae677766e6117ffb"
1504 integrity sha512-DbCc2TIzOxPaHF6KCbr8zLtiYOJQQQCBHUVNHV/SckUQobCBB2YkDtbLdxGnPwPNpJfEyMWxDAm36A2xkbxxtw==
1505 dependencies:
1506 inherits "^2.0.3"
1507
1508random-iterate@^1.0.1:
1509 version "1.0.1"
1510 resolved "https://registry.yarnpkg.com/random-iterate/-/random-iterate-1.0.1.tgz#f7d97d92dee6665ec5f6da08c7f963cad4b2ac99"
1511 integrity sha1-99l9kt7mZl7F9toIx/ljytSyrJk=
1512
1513randombytes@^2.0.3, randombytes@^2.0.5, randombytes@^2.1.0:
1514 version "2.1.0"
1515 resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1516 integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1517 dependencies:
1518 safe-buffer "^5.1.0"
1519
1520range-parser@^1.2.1:
1521 version "1.2.1"
1522 resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
1523 integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
1524
1525range-slice-stream@^2.0.0:
1526 version "2.0.0"
1527 resolved "https://registry.yarnpkg.com/range-slice-stream/-/range-slice-stream-2.0.0.tgz#1f25fc7a2cacf9ccd140c46f9cf670a1a7fe3ce6"
1528 integrity sha512-PPYLwZ63lXi6Tv2EZ8w3M4FzC0rVqvxivaOVS8pXSp5FMIHFnvi4MWHL3UdFLhwSy50aNtJsgjY0mBC6oFL26Q==
1529 dependencies:
1530 readable-stream "^3.0.2"
1531
1532rc4@^0.1.5:
1533 version "0.1.5"
1534 resolved "https://registry.yarnpkg.com/rc4/-/rc4-0.1.5.tgz#08c6e04a0168f6eb621c22ab6cb1151bd9f4a64d"
1535 integrity sha1-CMbgSgFo9utiHCKrbLEVG9n0pk0=
1536
1537rc@^1.2.7:
1538 version "1.2.8"
1539 resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
1540 integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
1541 dependencies:
1542 deep-extend "^0.6.0"
1543 ini "~1.3.0"
1544 minimist "^1.2.0"
1545 strip-json-comments "~2.0.1"
1546
1547readable-stream@^2.0.6, readable-stream@^2.2.2:
1548 version "2.3.7"
1549 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1550 integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1551 dependencies:
1552 core-util-is "~1.0.0"
1553 inherits "~2.0.3"
1554 isarray "~1.0.0"
1555 process-nextick-args "~2.0.0"
1556 safe-buffer "~5.1.1"
1557 string_decoder "~1.1.1"
1558 util-deprecate "~1.0.1"
1559
1560readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0:
1561 version "3.6.0"
1562 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
1563 integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
1564 dependencies:
1565 inherits "^2.0.3"
1566 string_decoder "^1.1.1"
1567 util-deprecate "^1.0.1"
1568
1569record-cache@^1.0.2:
1570 version "1.1.1"
1571 resolved "https://registry.yarnpkg.com/record-cache/-/record-cache-1.1.1.tgz#ba3088a489f50491a4af7b14d410822c394fb811"
1572 integrity sha512-L5hZlgWc7CmGbztnemQoKE1bLu9rtI2skOB0ttE4C5+TVszLE8Rd0YLTROSgvXKLAqPumS/soyN5tJW5wJLmJQ==
1573
1574render-media@^4.1.0:
1575 version "4.1.0"
1576 resolved "https://registry.yarnpkg.com/render-media/-/render-media-4.1.0.tgz#9188376822653d7e56c2d789d157c81e74fee0cb"
1577 integrity sha512-F5BMWDmgATEoyPCtKjmGNTGN1ghoZlfRQ3MJh8dS/MrvIUIxupiof/Y9uahChipXcqQ57twVbgMmyQmuO1vokw==
1578 dependencies:
1579 debug "^4.2.0"
1580 is-ascii "^1.0.0"
1581 mediasource "^2.4.0"
1582 stream-to-blob-url "^3.0.2"
1583 videostream "^3.2.2"
1584
1585rimraf@^2.6.1:
1586 version "2.7.1"
1587 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
1588 integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
1589 dependencies:
1590 glob "^7.1.3"
1591
1592rimraf@^3.0.0:
1593 version "3.0.2"
1594 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1595 integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1596 dependencies:
1597 glob "^7.1.3"
1598
1599run-parallel-limit@^1.1.0:
1600 version "1.1.0"
1601 resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba"
1602 integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==
1603 dependencies:
1604 queue-microtask "^1.2.2"
1605
1606run-parallel@^1.1.10, run-parallel@^1.1.2, run-parallel@^1.1.6, run-parallel@^1.2.0:
1607 version "1.2.0"
1608 resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1609 integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1610 dependencies:
1611 queue-microtask "^1.2.2"
1612
1613run-series@^1.1.9:
1614 version "1.1.9"
1615 resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.9.tgz#15ba9cb90e6a6c054e67c98e1dc063df0ecc113a"
1616 integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==
1617
1618rusha@^0.8.13:
1619 version "0.8.14"
1620 resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.14.tgz#a977d0de9428406138b7bb90d3de5dcd024e2f68"
1621 integrity sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==
1622
1623safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
1624 version "5.2.1"
1625 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1626 integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1627
1628safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1629 version "5.1.2"
1630 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1631 integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1632
1633"safer-buffer@>= 2.1.2 < 3":
1634 version "2.1.2"
1635 resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1636 integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1637
1638sax@1.1.4:
1639 version "1.1.4"
1640 resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9"
1641 integrity sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=
1642
1643sax@>=0.6.0, sax@^1.2.4:
1644 version "1.2.4"
1645 resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
1646 integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
1647
1648semver@^5.3.0, semver@^5.5.0:
1649 version "5.7.1" 274 version "5.7.1"
1650 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 275 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1651 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 276 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -1655,16 +280,6 @@ semver@^6.0.0:
1655 resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 280 resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1656 integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 281 integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1657 282
1658semver@~5.1.0:
1659 version "5.1.1"
1660 resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19"
1661 integrity sha1-oykqNz5vPgeY2gsgZBuanFvEfhk=
1662
1663set-blocking@~2.0.0:
1664 version "2.0.0"
1665 resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1666 integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
1667
1668shebang-command@^1.2.0: 283shebang-command@^1.2.0:
1669 version "1.2.0" 284 version "1.2.0"
1670 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 285 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -1682,61 +297,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
1682 resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 297 resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
1683 integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 298 integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
1684 299
1685simple-concat@^1.0.0, simple-concat@^1.0.1:
1686 version "1.0.1"
1687 resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
1688 integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
1689
1690simple-get@^2.0.0, simple-get@^2.1.0:
1691 version "2.8.1"
1692 resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d"
1693 integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==
1694 dependencies:
1695 decompress-response "^3.3.0"
1696 once "^1.3.1"
1697 simple-concat "^1.0.0"
1698
1699simple-get@^4.0.0:
1700 version "4.0.0"
1701 resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"
1702 integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==
1703 dependencies:
1704 decompress-response "^6.0.0"
1705 once "^1.3.1"
1706 simple-concat "^1.0.0"
1707
1708simple-peer@^9.11.0:
1709 version "9.11.0"
1710 resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.11.0.tgz#e8d27609c7a610c3ddd75767da868e8daab67571"
1711 integrity sha512-qvdNu/dGMHBm2uQ7oLhQBMhYlrOZC1ywXNCH/i8I4etxR1vrjCnU6ZSQBptndB1gcakjo2+w4OHo7Sjza1SHxg==
1712 dependencies:
1713 buffer "^6.0.3"
1714 debug "^4.3.1"
1715 err-code "^3.0.1"
1716 get-browser-rtc "^1.1.0"
1717 queue-microtask "^1.2.3"
1718 randombytes "^2.1.0"
1719 readable-stream "^3.6.0"
1720
1721simple-sha1@^3.0.0, simple-sha1@^3.0.1, simple-sha1@^3.1.0:
1722 version "3.1.0"
1723 resolved "https://registry.yarnpkg.com/simple-sha1/-/simple-sha1-3.1.0.tgz#40cac8436dfaf9924332fc46a5c7bca45f656131"
1724 integrity sha512-ArTptMRC1v08H8ihPD6l0wesKvMfF9e8XL5rIHPanI7kGOsSsbY514MwVu6X1PITHCTB2F08zB7cyEbfc4wQjg==
1725 dependencies:
1726 queue-microtask "^1.2.2"
1727 rusha "^0.8.13"
1728
1729simple-websocket@^9.1.0:
1730 version "9.1.0"
1731 resolved "https://registry.yarnpkg.com/simple-websocket/-/simple-websocket-9.1.0.tgz#91cbb39eafefbe7e66979da6c639109352786a7f"
1732 integrity sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==
1733 dependencies:
1734 debug "^4.3.1"
1735 queue-microtask "^1.2.2"
1736 randombytes "^2.1.0"
1737 readable-stream "^3.6.0"
1738 ws "^7.4.2"
1739
1740sort-keys@^4.0.0: 300sort-keys@^4.0.0:
1741 version "4.2.0" 301 version "4.2.0"
1742 resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" 302 resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18"
@@ -1744,54 +304,6 @@ sort-keys@^4.0.0:
1744 dependencies: 304 dependencies:
1745 is-plain-obj "^2.0.0" 305 is-plain-obj "^2.0.0"
1746 306
1747speedometer@^1.1.0:
1748 version "1.1.0"
1749 resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.1.0.tgz#a30b13abda45687a1a76977012c060f2ac8a7934"
1750 integrity sha512-z/wAiTESw2XVPssY2XRcme4niTc4S5FkkJ4gknudtVoc33Zil8TdTxHy5torRcgqMqksJV2Yz8HQcvtbsnw0mQ==
1751
1752split@^1.0.1:
1753 version "1.0.1"
1754 resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
1755 integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
1756 dependencies:
1757 through "2"
1758
1759stream-to-blob-url@^3.0.2:
1760 version "3.0.2"
1761 resolved "https://registry.yarnpkg.com/stream-to-blob-url/-/stream-to-blob-url-3.0.2.tgz#5574d139e2a6d1435945476f0a9469947f2da4fb"
1762 integrity sha512-PS6wT2ZyyR38Cy+lE6PBEI1ZmO2HdzZoLeDGG0zZbYikCZd0dh8FUoSeFzgWLItpBYw1WJmPVRLpykRV+lAWLQ==
1763 dependencies:
1764 stream-to-blob "^2.0.0"
1765
1766stream-to-blob@^2.0.0, stream-to-blob@^2.0.1:
1767 version "2.0.1"
1768 resolved "https://registry.yarnpkg.com/stream-to-blob/-/stream-to-blob-2.0.1.tgz#59ab71d7a7f0bfb899570e886e44d39f4ac4381a"
1769 integrity sha512-GXlqXt3svqwIVWoICenix5Poxi4KbCF0BdXXUbpU1X4vq1V8wmjiEIU3aFJzCGNFpKxfbnG0uoowS3nKUgSPYg==
1770
1771stream-with-known-length-to-buffer@^1.0.4:
1772 version "1.0.4"
1773 resolved "https://registry.yarnpkg.com/stream-with-known-length-to-buffer/-/stream-with-known-length-to-buffer-1.0.4.tgz#6a8aec53f27b8f481f962337c951aa3916fb60d1"
1774 integrity sha512-ztP79ug6S+I7td0Nd2GBeIKCm+vA54c+e60FY87metz5n/l6ydPELd2lxsljz8OpIhsRM9HkIiAwz85+S5G5/A==
1775 dependencies:
1776 once "^1.4.0"
1777
1778string-width@^1.0.1:
1779 version "1.0.2"
1780 resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1781 integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
1782 dependencies:
1783 code-point-at "^1.0.0"
1784 is-fullwidth-code-point "^1.0.0"
1785 strip-ansi "^3.0.0"
1786
1787"string-width@^1.0.2 || 2":
1788 version "2.1.1"
1789 resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
1790 integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
1791 dependencies:
1792 is-fullwidth-code-point "^2.0.0"
1793 strip-ansi "^4.0.0"
1794
1795string-width@^4.2.0: 307string-width@^4.2.0:
1796 version "4.2.2" 308 version "4.2.2"
1797 resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 309 resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
@@ -1801,42 +313,6 @@ string-width@^4.2.0:
1801 is-fullwidth-code-point "^3.0.0" 313 is-fullwidth-code-point "^3.0.0"
1802 strip-ansi "^6.0.0" 314 strip-ansi "^6.0.0"
1803 315
1804string2compact@^1.3.0:
1805 version "1.3.0"
1806 resolved "https://registry.yarnpkg.com/string2compact/-/string2compact-1.3.0.tgz#22d946127b082d1203c51316af60117a337423c3"
1807 integrity sha512-004ulKKANDuQilQsNxy2lisrpMG0qUJxBU+2YCEF7KziRyNR0Nredm2qk0f1V82nva59H3y9GWeHXE63HzGRFw==
1808 dependencies:
1809 addr-to-ip-port "^1.0.1"
1810 ipaddr.js "^1.0.1"
1811
1812string_decoder@^1.1.1:
1813 version "1.3.0"
1814 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1815 integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1816 dependencies:
1817 safe-buffer "~5.2.0"
1818
1819string_decoder@~1.1.1:
1820 version "1.1.1"
1821 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1822 integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1823 dependencies:
1824 safe-buffer "~5.1.0"
1825
1826strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1827 version "3.0.1"
1828 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1829 integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
1830 dependencies:
1831 ansi-regex "^2.0.0"
1832
1833strip-ansi@^4.0.0:
1834 version "4.0.0"
1835 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
1836 integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
1837 dependencies:
1838 ansi-regex "^3.0.0"
1839
1840strip-ansi@^6.0.0: 316strip-ansi@^6.0.0:
1841 version "6.0.0" 317 version "6.0.0"
1842 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 318 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
@@ -1854,11 +330,6 @@ strip-eof@^1.0.0:
1854 resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 330 resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
1855 integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 331 integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
1856 332
1857strip-json-comments@~2.0.1:
1858 version "2.0.1"
1859 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
1860 integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
1861
1862supports-color@^5.3.0: 333supports-color@^5.3.0:
1863 version "5.5.0" 334 version "5.5.0"
1864 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 335 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -1866,276 +337,18 @@ supports-color@^5.3.0:
1866 dependencies: 337 dependencies:
1867 has-flag "^3.0.0" 338 has-flag "^3.0.0"
1868 339
1869tar@^4:
1870 version "4.4.13"
1871 resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
1872 integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
1873 dependencies:
1874 chownr "^1.1.1"
1875 fs-minipass "^1.2.5"
1876 minipass "^2.8.6"
1877 minizlib "^1.2.1"
1878 mkdirp "^0.5.0"
1879 safe-buffer "^5.1.2"
1880 yallist "^3.0.3"
1881
1882thirty-two@^1.0.2:
1883 version "1.0.2"
1884 resolved "https://registry.yarnpkg.com/thirty-two/-/thirty-two-1.0.2.tgz#4ca2fffc02a51290d2744b9e3f557693ca6b627a"
1885 integrity sha1-TKL//AKlEpDSdEueP1V2k8prYno=
1886
1887through@2:
1888 version "2.3.8"
1889 resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1890 integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
1891
1892thunky@^0.1.0:
1893 version "0.1.0"
1894 resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
1895 integrity sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=
1896
1897thunky@^1.0.1, thunky@^1.0.2:
1898 version "1.1.0"
1899 resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
1900 integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
1901
1902timeout-refresh@^1.0.0:
1903 version "1.0.3"
1904 resolved "https://registry.yarnpkg.com/timeout-refresh/-/timeout-refresh-1.0.3.tgz#7024a8ce0a09a57acc2ea86002048e6c0bff7375"
1905 integrity sha512-Mz0CX4vBGM5lj8ttbIFt7o4ZMxk/9rgudJRh76EvB7xXZMur7T/cjRiH2w4Fmkq0zxf2QpM8IFvOSRn8FEu3gA==
1906
1907to-arraybuffer@^1.0.1:
1908 version "1.0.1"
1909 resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
1910 integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
1911
1912torrent-discovery@^9.4.0:
1913 version "9.4.0"
1914 resolved "https://registry.yarnpkg.com/torrent-discovery/-/torrent-discovery-9.4.0.tgz#e6b5f8244e6ea0c48efbcfc88792e033d15e6f56"
1915 integrity sha512-+YW9JGbO5bCuDw9YYW//p4iVLV0aP4C+AYrNQjL/+dSNPUtD1ufK1V8UZERt6rIoeNGhutkSVyeO4Fid9Tjxjg==
1916 dependencies:
1917 bittorrent-dht "^10.0.0"
1918 bittorrent-lsd "^1.0.0"
1919 bittorrent-tracker "^9.0.0"
1920 debug "^4.0.0"
1921 run-parallel "^1.1.2"
1922
1923torrent-piece@^2.0.1:
1924 version "2.0.1"
1925 resolved "https://registry.yarnpkg.com/torrent-piece/-/torrent-piece-2.0.1.tgz#a1a50fffa589d9bf9560e38837230708bc3afdc6"
1926 integrity sha512-JLSOyvQVLI6JTWqioY4vFL0JkEUKQcaHQsU3loxkCvPTSttw8ePs2tFwsP4XIjw99Fz8EdOzt/4faykcbnPbCQ==
1927
1928type-fest@^0.6.0: 340type-fest@^0.6.0:
1929 version "0.6.0" 341 version "0.6.0"
1930 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" 342 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
1931 integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== 343 integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
1932 344
1933typedarray-to-buffer@^3.0.0, typedarray-to-buffer@^3.1.5: 345typedarray-to-buffer@^3.1.5:
1934 version "3.1.5" 346 version "3.1.5"
1935 resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 347 resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
1936 integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 348 integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
1937 dependencies: 349 dependencies:
1938 is-typedarray "^1.0.0" 350 is-typedarray "^1.0.0"
1939 351
1940typedarray@^0.0.6:
1941 version "0.0.6"
1942 resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1943 integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
1944
1945uint64be@^2.0.2:
1946 version "2.0.2"
1947 resolved "https://registry.yarnpkg.com/uint64be/-/uint64be-2.0.2.tgz#ef4a179752fe8f9ddaa29544ecfc13490031e8e5"
1948 integrity sha512-9QqdvpGQTXgxthP+lY4e/gIBy+RuqcBaC6JVwT5I3bDLgT/btL6twZMR0pI3/Fgah9G/pdwzIprE5gL6v9UvyQ==
1949 dependencies:
1950 buffer-alloc "^1.1.0"
1951
1952unordered-array-remove@^1.0.2:
1953 version "1.0.2"
1954 resolved "https://registry.yarnpkg.com/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz#c546e8f88e317a0cf2644c97ecb57dba66d250ef"
1955 integrity sha1-xUbo+I4xegzyZEyX7LV9umbSUO8=
1956
1957unordered-set@^2.0.1:
1958 version "2.0.1"
1959 resolved "https://registry.yarnpkg.com/unordered-set/-/unordered-set-2.0.1.tgz#4cd0fe27b8814bcf5d6073e5f0966ec7a50841e6"
1960 integrity sha512-eUmNTPzdx+q/WvOHW0bgGYLWvWHNT3PTKEQLg0MAQhc0AHASHVHoP/9YytYd4RBVariqno/mEUhVZN98CmD7bg==
1961
1962upnp-device-client@^1.0.0:
1963 version "1.0.2"
1964 resolved "https://registry.yarnpkg.com/upnp-device-client/-/upnp-device-client-1.0.2.tgz#91f84705f2349bf89082855fff4e3006ac435337"
1965 integrity sha1-kfhHBfI0m/iQgoVf/04wBqxDUzc=
1966 dependencies:
1967 concat-stream "^1.4.8"
1968 debug "^2.1.3"
1969 elementtree "~0.1.6"
1970 network-address "^1.0.0"
1971
1972upnp-mediarenderer-client@^1.2.2:
1973 version "1.4.0"
1974 resolved "https://registry.yarnpkg.com/upnp-mediarenderer-client/-/upnp-mediarenderer-client-1.4.0.tgz#06788675c00223d90f605f7971587ab8f3c6783b"
1975 integrity sha512-F+C3Yceoz0j3ZWEchz5tpaOEqkbpObRUmeuPGc9+2u2YvC1CDbXGQ6mjbM10MDhnUJ0tTWYTufpj6xsWctnULw==
1976 dependencies:
1977 debug "^2.1.3"
1978 elementtree "^0.1.6"
1979 upnp-device-client "^1.0.0"
1980
1981url-join@^4.0.0:
1982 version "4.0.1"
1983 resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
1984 integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
1985
1986ut_metadata@^3.5.2:
1987 version "3.5.2"
1988 resolved "https://registry.yarnpkg.com/ut_metadata/-/ut_metadata-3.5.2.tgz#2351c9348759e929978fa6a08d56ef6f584749e7"
1989 integrity sha512-3XZZuJSeoIUyMYSuDbTbVtP4KAVGHPfU8nmHFkr8LJc+THCaUXwnu/2AV+LCSLarET/hL9IlbNfYTGrt6fOVuQ==
1990 dependencies:
1991 bencode "^2.0.1"
1992 bitfield "^4.0.0"
1993 debug "^4.2.0"
1994 simple-sha1 "^3.0.1"
1995
1996ut_pex@^3.0.0:
1997 version "3.0.1"
1998 resolved "https://registry.yarnpkg.com/ut_pex/-/ut_pex-3.0.1.tgz#fb8b6e066f8f6f6de3e6b3e28e7d18e697be5854"
1999 integrity sha512-t1MHIDHSISgOJcmq8UM6Qv9/hRQYVaUvzqSNnXa5ATDbS9hXfhBpyBo2HcSyJtwPSHsmMtNui8G6yKirwJ8vow==
2000 dependencies:
2001 bencode "^2.0.1"
2002 compact2string "^1.4.1"
2003 string2compact "^1.3.0"
2004
2005utf-8-validate@^5.0.5:
2006 version "5.0.5"
2007 resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1"
2008 integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==
2009 dependencies:
2010 node-gyp-build "^4.2.0"
2011
2012util-deprecate@^1.0.1, util-deprecate@~1.0.1:
2013 version "1.0.2"
2014 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2015 integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2016
2017utp-native@^2.4.0:
2018 version "2.5.0"
2019 resolved "https://registry.yarnpkg.com/utp-native/-/utp-native-2.5.0.tgz#3d8321760108b30cb15391196c8cc93db85b61ce"
2020 integrity sha512-HoHPE6gwLxC0xlpYJUl+Xw2sh809lhXx3TexHsb2/xY8vEd6NwuvAxOI/X27dBTc/TOT5diWUpCJWDaunkcVvA==
2021 dependencies:
2022 napi-macros "^2.0.0"
2023 node-gyp-build "^4.2.0"
2024 readable-stream "^3.0.2"
2025 timeout-refresh "^1.0.0"
2026 unordered-set "^2.0.1"
2027
2028videostream@^3.2.2:
2029 version "3.2.2"
2030 resolved "https://registry.yarnpkg.com/videostream/-/videostream-3.2.2.tgz#e3e8d44f5159892f8f31ad35cbf9302d7a6e6afc"
2031 integrity sha512-4tz23yGGeATmbzj/ZnUm6wgQ4E1lzmMXu2mUA/c0G6adtWKxm1Di5YejdZdRsK6SdkLjKjhplFFYT7r+UUDKvA==
2032 dependencies:
2033 binary-search "^1.3.4"
2034 mediasource "^2.2.2"
2035 mp4-box-encoding "^1.3.0"
2036 mp4-stream "^3.0.0"
2037 pump "^3.0.0"
2038 range-slice-stream "^2.0.0"
2039
2040vlc-command@^1.2.0:
2041 version "1.2.0"
2042 resolved "https://registry.yarnpkg.com/vlc-command/-/vlc-command-1.2.0.tgz#a5bac48c6948f587c0be412a07dcdc7b8eb07c9c"
2043 integrity sha512-YTr1w5KmxRN5CBCvplKOD6g/OjwCl5iz+SIjDbq8gWTkByYZun5duHm+OLUkBlbJrCGvMyFyNhTMQxV4Ny0v8g==
2044 dependencies:
2045 run-parallel "^1.1.6"
2046 winreg "^1.2.1"
2047
2048webidl-conversions@^4.0.2:
2049 version "4.0.2"
2050 resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
2051 integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
2052
2053webtorrent-cli@^3.2.0:
2054 version "3.3.0"
2055 resolved "https://registry.yarnpkg.com/webtorrent-cli/-/webtorrent-cli-3.3.0.tgz#465e9fb82373c6b279904b5876d4745cb8ac6b43"
2056 integrity sha512-E0gb1fXb8xNScgewQmvAmNLrnEto6MOaKlfzITVzR+bbU80LeV/YdrLw536ffcwiUv0arKQyfR/WIweBFrKWbg==
2057 dependencies:
2058 clivas "^0.2.0"
2059 common-tags "^1.8.0"
2060 create-torrent "^4.4.2"
2061 dlnacasts "^0.1.0"
2062 ecstatic "^4.1.4"
2063 executable "^4.1.1"
2064 mime "^2.4.6"
2065 minimist "^1.2.5"
2066 moment "^2.27.0"
2067 network-address "^1.1.2"
2068 open "^8.0.0"
2069 parse-torrent "^9.0.0"
2070 prettier-bytes "^1.0.4"
2071 vlc-command "^1.2.0"
2072 webtorrent "^1.0.0"
2073 winreg "^1.2.4"
2074 optionalDependencies:
2075 airplay-js "^0.3.0"
2076 chromecasts "^1.9.1"
2077 nodebmc "0.0.7"
2078
2079webtorrent-hybrid@^4.0.3:
2080 version "4.1.0"
2081 resolved "https://registry.yarnpkg.com/webtorrent-hybrid/-/webtorrent-hybrid-4.1.0.tgz#86e397a8f051de225c60ce751f47d28a906cbfdc"
2082 integrity sha512-IqRWVI+gXHjv/ybj3YK6Q4gJM1OaIgy3Nw3ec0iPS7TeBrG6R3yhfHupF39DIwyKFERZDnYoxVnxHOt8TAaucw==
2083 dependencies:
2084 create-torrent "^4.4.2"
2085 webtorrent "^1.0.0"
2086 webtorrent-cli "^3.2.0"
2087 wrtc "^0.4.6"
2088
2089webtorrent@^1.0.0:
2090 version "1.0.0"
2091 resolved "https://registry.yarnpkg.com/webtorrent/-/webtorrent-1.0.0.tgz#1d8fd388726ca013feb17d2437b1b9df2d24b5e8"
2092 integrity sha512-htwcY5OBOWL/OMwaw3xi1Mp2gE9k5UmGTKeO3n1ixQDH9QgeqqRlBJz2ZLEyOL8yN1FdS/D9z+ijm06bZ3oW5w==
2093 dependencies:
2094 addr-to-ip-port "^1.5.1"
2095 bitfield "^4.0.0"
2096 bittorrent-dht "^10.0.0"
2097 bittorrent-protocol "^3.3.1"
2098 chrome-net "^3.3.4"
2099 chunk-store-stream "^4.3.0"
2100 cpus "^1.0.3"
2101 create-torrent "^4.7.0"
2102 debug "^4.3.1"
2103 end-of-stream "^1.4.4"
2104 escape-html "^1.0.3"
2105 fs-chunk-store "^2.0.3"
2106 http-node "github:feross/http-node#webtorrent"
2107 immediate-chunk-store "^2.2.0"
2108 load-ip-set "^2.2.1"
2109 lt_donthave "^1.0.1"
2110 memory-chunk-store "^1.3.5"
2111 mime "^2.5.2"
2112 multistream "^4.1.0"
2113 package-json-versionify "^1.0.4"
2114 parse-torrent "^9.1.3"
2115 pump "^3.0.0"
2116 queue-microtask "^1.2.3"
2117 random-iterate "^1.0.1"
2118 randombytes "^2.1.0"
2119 range-parser "^1.2.1"
2120 readable-stream "^3.6.0"
2121 render-media "^4.1.0"
2122 run-parallel "^1.2.0"
2123 run-parallel-limit "^1.1.0"
2124 simple-concat "^1.0.1"
2125 simple-get "^4.0.0"
2126 simple-peer "^9.11.0"
2127 simple-sha1 "^3.1.0"
2128 speedometer "^1.1.0"
2129 stream-to-blob "^2.0.1"
2130 stream-to-blob-url "^3.0.2"
2131 stream-with-known-length-to-buffer "^1.0.4"
2132 torrent-discovery "^9.4.0"
2133 torrent-piece "^2.0.1"
2134 unordered-array-remove "^1.0.2"
2135 ut_metadata "^3.5.2"
2136 ut_pex "^3.0.0"
2137 utp-native "^2.4.0"
2138
2139which@^1.2.9: 352which@^1.2.9:
2140 version "1.3.1" 353 version "1.3.1"
2141 resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 354 resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
@@ -2143,23 +356,6 @@ which@^1.2.9:
2143 dependencies: 356 dependencies:
2144 isexe "^2.0.0" 357 isexe "^2.0.0"
2145 358
2146wide-align@^1.1.0:
2147 version "1.1.3"
2148 resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
2149 integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
2150 dependencies:
2151 string-width "^1.0.2 || 2"
2152
2153winreg@^1.2.1, winreg@^1.2.4:
2154 version "1.2.4"
2155 resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b"
2156 integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs=
2157
2158wrappy@1:
2159 version "1.0.2"
2160 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2161 integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2162
2163write-file-atomic@^3.0.0: 359write-file-atomic@^3.0.0:
2164 version "3.0.3" 360 version "3.0.3"
2165 resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 361 resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
@@ -2181,45 +377,3 @@ write-json-file@^4.2.0:
2181 make-dir "^3.0.0" 377 make-dir "^3.0.0"
2182 sort-keys "^4.0.0" 378 sort-keys "^4.0.0"
2183 write-file-atomic "^3.0.0" 379 write-file-atomic "^3.0.0"
2184
2185wrtc@^0.4.6:
2186 version "0.4.7"
2187 resolved "https://registry.yarnpkg.com/wrtc/-/wrtc-0.4.7.tgz#c61530cd662713e50bffe64b7a78673ce070426c"
2188 integrity sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g==
2189 dependencies:
2190 node-pre-gyp "^0.13.0"
2191 optionalDependencies:
2192 domexception "^1.0.1"
2193
2194ws@^7.4.2, ws@^7.4.5:
2195 version "7.4.6"
2196 resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
2197 integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
2198
2199xml2js@^0.4.8:
2200 version "0.4.23"
2201 resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
2202 integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
2203 dependencies:
2204 sax ">=0.6.0"
2205 xmlbuilder "~11.0.0"
2206
2207xmlbuilder@0.4.x:
2208 version "0.4.3"
2209 resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-0.4.3.tgz#c4614ba74e0ad196e609c9272cd9e1ddb28a8a58"
2210 integrity sha1-xGFLp04K0ZbmCcknLNnh3bKKilg=
2211
2212xmlbuilder@~11.0.0:
2213 version "11.0.1"
2214 resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
2215 integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
2216
2217xmldom@0.1.x:
2218 version "0.1.31"
2219 resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff"
2220 integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==
2221
2222yallist@^3.0.0, yallist@^3.0.3:
2223 version "3.1.1"
2224 resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
2225 integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
diff --git a/support/doc/dependencies.md b/support/doc/dependencies.md
index 8fe190320..7c3fcd55b 100644
--- a/support/doc/dependencies.md
+++ b/support/doc/dependencies.md
@@ -1,5 +1,7 @@
1# Dependencies 1# Dependencies
2 2
3:warning: **Warning**: dependencies guide is maintained by the community. Some parts may be outdated! :warning:
4
3Follow the below guides, and check their versions match [required external dependencies versions](https://github.com/Chocobozzz/PeerTube/blob/master/engines.yaml). You can check them automatically via `sudo npx engineslist`. 5Follow the below guides, and check their versions match [required external dependencies versions](https://github.com/Chocobozzz/PeerTube/blob/master/engines.yaml). You can check them automatically via `sudo npx engineslist`.
4 6
5_note_: only **LTS** versions of external dependencies are supported. If no LTS version matching the version constraint is available, only **release** versions are supported. 7_note_: only **LTS** versions of external dependencies are supported. If no LTS version matching the version constraint is available, only **release** versions are supported.
@@ -554,6 +556,12 @@ rc-service redis start
554rc-service postgresql-11 start 556rc-service postgresql-11 start
555``` 557```
556 558
5596. Create Python version symlink for youtube-dl:
560
561```
562sudo ln -s /usr/bin/python3 /usr/bin/python
563```
564
557## OpenBSD 565## OpenBSD
558 566
5591. Install Packages: 5671. Install Packages:
diff --git a/support/doc/tools.md b/support/doc/tools.md
index 433aaeff7..78ace1344 100644
--- a/support/doc/tools.md
+++ b/support/doc/tools.md
@@ -10,7 +10,6 @@
10 - [CLI wrapper](#cli-wrapper) 10 - [CLI wrapper](#cli-wrapper)
11 - [peertube-import-videos.js](#peertube-import-videosjs) 11 - [peertube-import-videos.js](#peertube-import-videosjs)
12 - [peertube-upload.js](#peertube-uploadjs) 12 - [peertube-upload.js](#peertube-uploadjs)
13 - [peertube-watch.js](#peertube-watchjs)
14 - [peertube-plugins.js](#peertube-pluginsjs) 13 - [peertube-plugins.js](#peertube-pluginsjs)
15 - [peertube-redundancy.js](#peertube-redundancyjs) 14 - [peertube-redundancy.js](#peertube-redundancyjs)
16- [Server tools](#server-tools) 15- [Server tools](#server-tools)
@@ -22,11 +21,6 @@
22 - [update-host.js](#update-hostjs) 21 - [update-host.js](#update-hostjs)
23 - [reset-password.js](#reset-passwordjs) 22 - [reset-password.js](#reset-passwordjs)
24 - [plugin install/uninstall](#plugin-installuninstall) 23 - [plugin install/uninstall](#plugin-installuninstall)
25 - [REPL (Read Eval Print Loop)](#repl-read-eval-print-loop)
26 - [.help](#help)
27 - [Lodash example](#lodash-example)
28 - [YoutubeDL example](#youtubedl-example)
29 - [Models examples](#models-examples)
30 24
31<!-- END doctoc generated TOC please keep comment here to allow auto update --> 25<!-- END doctoc generated TOC please keep comment here to allow auto update -->
32 26
@@ -75,8 +69,6 @@ You can access it as `peertube` via an alias in your `.bashrc` like `alias peert
75 auth [action] register your accounts on remote instances to use them with other commands 69 auth [action] register your accounts on remote instances to use them with other commands
76 upload|up upload a video 70 upload|up upload a video
77 import-videos|import import a video from a streaming platform 71 import-videos|import import a video from a streaming platform
78 watch|w watch a video in the terminal ✩°。⋆
79 repl initiate a REPL to access internals
80 plugins|p [action] manage instance plugins 72 plugins|p [action] manage instance plugins
81 redundancy|r [action] manage video redundancies 73 redundancy|r [action] manage video redundancies
82 help [cmd] display help for [cmd] 74 help [cmd] display help for [cmd]
@@ -100,12 +92,6 @@ You can now use that account to upload videos without feeding the same parameter
100$ peertube up <videoFile> 92$ peertube up <videoFile>
101``` 93```
102 94
103And now that your video is online, you can watch it from the confort of your terminal (use `peertube watch --help` to see the supported players):
104
105```bash
106$ peertube watch https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10
107```
108
109To list, install, uninstall dynamically plugins/themes of an instance: 95To list, install, uninstall dynamically plugins/themes of an instance:
110 96
111```bash 97```bash
@@ -169,22 +155,6 @@ $ cd ${CLONE}
169$ node dist/server/tools/peertube-upload.js --help 155$ node dist/server/tools/peertube-upload.js --help
170``` 156```
171 157
172#### peertube-watch.js
173
174You can use this script to play videos directly from the CLI.
175
176It provides support for different players:
177
178- ascii (default ; plays in ascii art in your terminal!)
179- mpv
180- mplayer
181- vlc
182- stdout
183- xbmc
184- airplay
185- chromecast
186
187
188#### peertube-plugins.js 158#### peertube-plugins.js
189 159
190Install/update/uninstall or list local or NPM PeerTube plugins: 160Install/update/uninstall or list local or NPM PeerTube plugins:
@@ -413,134 +383,3 @@ $ # Docker installation
413$ cd /var/www/peertube-docker 383$ cd /var/www/peertube-docker
414$ docker-compose exec -u peertube peertube npm run plugin:uninstall -- --npm-name peertube-plugin-myplugin 384$ docker-compose exec -u peertube peertube npm run plugin:uninstall -- --npm-name peertube-plugin-myplugin
415``` 385```
416
417### REPL (Read Eval Print Loop)
418
419If you want to interact with the application libraries and objects even when PeerTube is not running, there is a REPL for that.
420
421usage: `node ./dist/server/tools/peertube-repl.js`
422
423"The default evaluator will, by default, assign the result of the most recently evaluated expression to the special variable `_` (underscore). Explicitly setting `_` to a value will disable this behavior."
424
425- type `.help` to list commands available in the repl, notice it starts with a dot
426- type `.exit` to exit, note that you still have to press CTRL-C to actually exit, or press CTRL-C (3 times) without typing `.exit` to exit
427- type `context` to list all available objects and libraries in the context, note: `Promise` is also available but it's not listed in the context, in case you need promises for something
428- type `env` to see the loaded environment variables
429- type `path` to access path library
430- type `lodash` to access lodash library
431- type `uuidv1` to access uuid/v1 library
432- type `uuidv3` to access uuid/v3 library
433- type `uuidv4` to access uuid/v4 library
434- type `uuidv5` to access uuid/v5 library
435- type `YoutubeDL` to access youtube-dl library
436- type `cli` to access the cli helpers object
437- type `logger` to access the logger; if you log to it, it will write to stdout and to the peertube.log file
438- type `constants` to access the constants loaded by the server
439- type `coreUtils` to access the core-utils helpers object
440- type `ffmpegUtils` to access the ffmpeg-utils helpers object
441- type `peertubeCryptoUtils` to access the peertube-crypto helpers object
442- type `signupUtils` to access the signup helpers object
443- type `utils` to access the utils helpers object
444- type `YoutubeDLUtils` to access the youtube-dl helpers object
445- type `sequelizeTypescript` to access sequelizeTypescript
446- type `modelsUtils` to access the models/utils
447- type `models` to access the shortcut to sequelizeTypescript.models
448- type `transaction` to access the shortcut to sequelizeTypescript.transaction
449- type `query` to access the shortcut to sequelizeTypescript.query
450- type `queryInterface` to access the shortcut to sequelizeTypescript.queryInterface
451
452#### .help
453
454```
455PeerTube [1.0.0] (b10eb595)> .help
456.break Sometimes you get stuck, this gets you out
457.clear Break, and also clear the local context
458.editor Enter editor mode
459.exit Exit the repl
460.help Print this help message
461.load Load JS from a file into the REPL session
462.r Reset REPL
463.reset Reset REPL
464.save Save all evaluated commands in this REPL session to a file
465PeerTube [1.0.0] (b10eb595)>
466```
467
468#### Lodash example
469
470```
471PeerTube [1.0.0] (b10eb595)> lodash.keys(context)
472[ 'global',
473 'console',
474 'DTRACE_NET_SERVER_CONNECTION',
475 'DTRACE_NET_STREAM_END',
476 'DTRACE_HTTP_SERVER_REQUEST',
477 'DTRACE_HTTP_SERVER_RESPONSE',
478 'DTRACE_HTTP_CLIENT_REQUEST',
479 'DTRACE_HTTP_CLIENT_RESPONSE',
480 'process',
481 'Buffer',
482 'clearImmediate',
483 'clearInterval',
484 'clearTimeout',
485 'setImmediate',
486 'setInterval',
487 'setTimeout',
488 'XMLHttpRequest',
489 'compact2string',
490 'module',
491 'require',
492 'path',
493 'repl',
494 'context',
495 'env',
496 'lodash',
497 'uuidv1',
498 'uuidv3',
499 'uuidv4',
500 'uuidv5',
501 'cli',
502 'logger',
503 'constants',
504 'Sequelize',
505 'sequelizeTypescript',
506 'modelsUtils',
507 'models',
508 'transaction',
509 'query',
510 'queryInterface',
511 'YoutubeDL',
512 'coreUtils',
513 'ffmpegUtils',
514 'peertubeCryptoUtils',
515 'signupUtils',
516 'utils',
517 'YoutubeDLUtils' ]
518PeerTube [1.0.0] (b10eb595)>
519```
520
521#### YoutubeDL example
522```
523YoutubeDL.getInfo('https://www.youtube.com/watch?v=I5ZN289jjDo', function(err, data) {console.log(err, data)})
524```
525
526#### Models examples
527```
528PeerTube [1.0.0] (b10eb595)> new models.ActorModel({id: 3}).getVideoChannel().then(function(data){console.log(data.dataValues.name)})
529Promise {
530 _bitField: 0,
531 _fulfillmentHandler0: undefined,
532 _rejectionHandler0: undefined,
533 _promise0: undefined,
534 _receiver0: undefined }
535PeerTube [1.0.0] (b10eb595)> Main root channel
536PeerTube [1.0.0] (b10eb595)> let out; new models.UserModel({id: 1}).getAccount().then(function (data) {out = data.dataValues.id})
537Promise {
538 _bitField: 0,
539 _fulfillmentHandler0: undefined,
540 _rejectionHandler0: undefined,
541 _promise0: undefined,
542 _receiver0: undefined }
543PeerTube [1.0.0] (b10eb595)> out
5442
545PeerTube [1.0.0] (b10eb595)>
546```
diff --git a/yarn.lock b/yarn.lock
index fc0654062..201b9fb9e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5967,16 +5967,6 @@ markdown-it@^12.0.4:
5967 mdurl "^1.0.1" 5967 mdurl "^1.0.1"
5968 uc.micro "^1.0.5" 5968 uc.micro "^1.0.5"
5969 5969
5970marked-man@^0.7.0:
5971 version "0.7.0"
5972 resolved "https://registry.yarnpkg.com/marked-man/-/marked-man-0.7.0.tgz#220ba01d275d16f1a98e4e7fc3c5eac0630c68e4"
5973 integrity sha512-zxK5E4jbuARALc+fIUAanM2njVGnrd9YvKrqoDHUg2XwNLJijo39EzMIg59LecHBHsIHNtPqepqnJp4SmL/EVg==
5974
5975marked@^3.0.2:
5976 version "3.0.2"
5977 resolved "https://registry.yarnpkg.com/marked/-/marked-3.0.2.tgz#60ce97d6aec34dd882ab4bb4df82494666854e17"
5978 integrity sha512-TMJQQ79Z0e3rJYazY0tIoMsFzteUGw9fB3FD+gzuIT3zLuG9L9ckIvUfF51apdJkcqc208jJN2KbtPbOvXtbjA==
5979
5980math-interval-parser@^2.0.1: 5970math-interval-parser@^2.0.1:
5981 version "2.0.1" 5971 version "2.0.1"
5982 resolved "https://registry.yarnpkg.com/math-interval-parser/-/math-interval-parser-2.0.1.tgz#e22cd6d15a0a7f4c03aec560db76513da615bed4" 5972 resolved "https://registry.yarnpkg.com/math-interval-parser/-/math-interval-parser-2.0.1.tgz#e22cd6d15a0a7f4c03aec560db76513da615bed4"