aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2020-09-17 09:20:52 +0200
committerChocobozzz <chocobozzz@cpy.re>2020-11-09 15:33:04 +0100
commitc6c0fa6cd8fe8f752463d8982c3dbcd448739c4e (patch)
tree79304b0152b0a38d33b26e65d4acdad0da4032a7
parent110d463fece85e87a26aca48a6048ae0017a27b3 (diff)
downloadPeerTube-c6c0fa6cd8fe8f752463d8982c3dbcd448739c4e.tar.gz
PeerTube-c6c0fa6cd8fe8f752463d8982c3dbcd448739c4e.tar.zst
PeerTube-c6c0fa6cd8fe8f752463d8982c3dbcd448739c4e.zip
Live streaming implementation first step
-rw-r--r--client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html83
-rw-r--r--client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts31
-rw-r--r--client/src/app/+videos/+video-edit/shared/video-edit-utils.ts35
-rw-r--r--client/src/app/+videos/+video-edit/shared/video-edit.component.html23
-rw-r--r--client/src/app/+videos/+video-edit/shared/video-edit.component.ts16
-rw-r--r--client/src/app/+videos/+video-edit/shared/video-edit.type.ts1
-rw-r--r--client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.html47
-rw-r--r--client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts129
-rw-r--r--client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts8
-rw-r--r--client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts29
-rw-r--r--client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts1
-rw-r--r--client/src/app/+videos/+video-edit/video-add.component.html12
-rw-r--r--client/src/app/+videos/+video-edit/video-add.component.ts13
-rw-r--r--client/src/app/+videos/+video-edit/video-add.module.ts4
-rw-r--r--client/src/app/+videos/+video-edit/video-update.component.html1
-rw-r--r--client/src/app/+videos/+video-edit/video-update.component.ts38
-rw-r--r--client/src/app/+videos/+video-edit/video-update.resolver.ts61
-rw-r--r--client/src/app/core/plugins/plugin.service.ts3
-rw-r--r--client/src/app/core/server/server.service.ts7
-rw-r--r--client/src/app/shared/shared-forms/input-readonly-copy.component.html2
-rw-r--r--client/src/app/shared/shared-forms/input-readonly-copy.component.ts2
-rw-r--r--client/src/app/shared/shared-instance/instance-features-table.component.html18
-rw-r--r--client/src/app/shared/shared-main/shared-main.module.ts3
-rw-r--r--client/src/app/shared/shared-main/video/index.ts1
-rw-r--r--client/src/app/shared/shared-main/video/video-details.model.ts7
-rw-r--r--client/src/app/shared/shared-main/video/video-live.service.ts28
-rw-r--r--client/src/app/shared/shared-main/video/video.model.ts12
-rw-r--r--client/src/app/shared/shared-main/video/video.service.ts3
-rw-r--r--client/src/assets/player/p2p-media-loader/segment-validator.ts37
-rw-r--r--client/src/assets/player/peertube-player-manager.ts4
-rw-r--r--client/src/standalone/videos/embed.ts4
-rw-r--r--config/default.yaml18
-rw-r--r--config/test.yaml54
-rw-r--r--package.json2
-rwxr-xr-xscripts/create-transcoding-job.ts2
-rwxr-xr-xscripts/update-host.ts2
-rw-r--r--server.ts15
-rw-r--r--server/assets/default-live-background.jpgbin0 -> 93634 bytes
-rw-r--r--server/controllers/api/config.ts39
-rw-r--r--server/controllers/api/videos/index.ts4
-rw-r--r--server/controllers/api/videos/live.ts116
-rw-r--r--server/controllers/index.ts1
-rw-r--r--server/controllers/live.ts29
-rw-r--r--server/controllers/static.ts9
-rw-r--r--server/helpers/core-utils.ts11
-rw-r--r--server/helpers/custom-validators/videos.ts5
-rw-r--r--server/helpers/ffmpeg-utils.ts138
-rw-r--r--server/initializers/config.ts21
-rw-r--r--server/initializers/constants.ts50
-rw-r--r--server/initializers/database.ts10
-rw-r--r--server/initializers/migrations/0535-video-live.ts39
-rw-r--r--server/initializers/migrations/0540-video-file-infohash.ts26
-rw-r--r--server/lib/hls.ts10
-rw-r--r--server/lib/job-queue/handlers/video-transcoding.ts2
-rw-r--r--server/lib/live-manager.ts310
-rw-r--r--server/lib/video-paths.ts3
-rw-r--r--server/lib/video-transcoding.ts7
-rw-r--r--server/lib/video.ts31
-rw-r--r--server/middlewares/validators/videos/video-live.ts66
-rw-r--r--server/models/video/video-file.ts4
-rw-r--r--server/models/video/video-format-utils.ts2
-rw-r--r--server/models/video/video-live.ts74
-rw-r--r--server/models/video/video-streaming-playlist.ts4
-rw-r--r--server/models/video/video.ts5
-rw-r--r--server/tests/api/check-params/config.ts16
-rw-r--r--server/tests/api/server/config.ts36
-rw-r--r--server/tests/api/videos/video-transcoder.ts2
-rw-r--r--server/types/models/video/index.ts1
-rw-r--r--server/types/models/video/video-live.ts15
-rw-r--r--server/typings/express/index.d.ts5
-rw-r--r--shared/extra-utils/server/config.ts15
-rw-r--r--shared/models/server/custom-config.model.ts29
-rw-r--r--shared/models/server/server-config.model.ts10
-rw-r--r--shared/models/videos/index.ts2
-rw-r--r--shared/models/videos/video-create.model.ts2
-rw-r--r--shared/models/videos/video-live.model.ts4
-rw-r--r--shared/models/videos/video-state.enum.ts4
-rw-r--r--shared/models/videos/video-update.model.ts1
-rw-r--r--shared/models/videos/video.model.ts2
-rw-r--r--yarn.lock2139
80 files changed, 2752 insertions, 1303 deletions
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html
index 227137f48..8000f471f 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html
+++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html
@@ -699,6 +699,87 @@
699 </ng-template> 699 </ng-template>
700 </ng-container> 700 </ng-container>
701 701
702 <ng-container ngbNavItem="live">
703 <a ngbNavLink i18n>Live streaming</a>
704
705 <ng-template ngbNavContent>
706
707 <div class="form-row mt-5">
708 <div class="form-group col-12 col-lg-4 col-xl-3">
709 <div i18n class="inner-form-title">LIVE</div>
710 <div i18n class="inner-form-description">
711 Add ability for your users to do live streaming on your instance.
712 </div>
713 </div>
714
715 <div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
716
717 <ng-container formGroupName="live">
718
719 <div class="form-group">
720 <my-peertube-checkbox inputName="liveEnabled" formControlName="enabled">
721 <ng-template ptTemplate="label">
722 <ng-container i18n>Allow live streaming</ng-container>
723 </ng-template>
724
725 <ng-template ptTemplate="help">
726 <ng-container i18n>Enabling live streaming requires trust in your users and extra moderation work</ng-container>
727 </ng-template>
728
729 <ng-container ngProjectAs="extra" formGroupName="transcoding">
730
731 <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }">
732 <my-peertube-checkbox
733 inputName="liveTranscodingEnabled" formControlName="enabled"
734 i18n-labelText labelText="Enable live transcoding"
735 >
736 <ng-container ngProjectAs="description">
737 Requires a lot of CPU!
738 </ng-container>
739 </my-peertube-checkbox>
740 </div>
741
742 <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }">
743 <label i18n for="liveTranscodingThreads">Live transcoding threads</label>
744 <div class="peertube-select-container">
745 <select id="liveTranscodingThreads" formControlName="threads" class="form-control">
746 <option *ngFor="let transcodingThreadOption of transcodingThreadOptions" [value]="transcodingThreadOption.value">
747 {{ transcodingThreadOption.label }}
748 </option>
749 </select>
750 </div>
751 <div *ngIf="formErrors.live.transcoding.threads" class="form-error">{{ formErrors.live.transcoding.threads }}</div>
752 </div>
753
754 <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() || !isLiveTranscodingEnabled() }">
755
756 <label i18n for="liveTranscodingThreads">Live resolutions to generate</label>
757
758 <div class="ml-2 mt-2 d-flex flex-column">
759 <ng-container formGroupName="resolutions">
760 <div class="form-group" *ngFor="let resolution of liveResolutions">
761 <my-peertube-checkbox
762 [inputName]="getResolutionKey(resolution.id)" [formControlName]="resolution.id"
763 labelText="{{resolution.label}}"
764 >
765 <ng-template *ngIf="resolution.description" ptTemplate="help">
766 <div [innerHTML]="resolution.description"></div>
767 </ng-template>
768 </my-peertube-checkbox>
769 </div>
770 </ng-container>
771 </div>
772 </div>
773 </ng-container>
774 </my-peertube-checkbox>
775 </div>
776 </ng-container>
777 </div>
778 </div>
779
780 </ng-template>
781 </ng-container>
782
702 <ng-container ngbNavItem="advanced-configuration"> 783 <ng-container ngbNavItem="advanced-configuration">
703 <a ngbNavLink i18n>Advanced configuration</a> 784 <a ngbNavLink i18n>Advanced configuration</a>
704 785
@@ -814,7 +895,7 @@
814 895
815 <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }"> 896 <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isTranscodingEnabled() }">
816 897
817 <label i18n for="transcodingThreads">Resolutions to generate</label> 898 <label i18n>Resolutions to generate</label>
818 899
819 <div class="ml-2 mt-2 d-flex flex-column"> 900 <div class="ml-2 mt-2 d-flex flex-column">
820 <ng-container formGroupName="resolutions"> 901 <ng-container formGroupName="resolutions">
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts
index 78e9dd5e5..de800c87e 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts
@@ -34,6 +34,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
34 customConfig: CustomConfig 34 customConfig: CustomConfig
35 35
36 resolutions: { id: string, label: string, description?: string }[] = [] 36 resolutions: { id: string, label: string, description?: string }[] = []
37 liveResolutions: { id: string, label: string, description?: string }[] = []
37 transcodingThreadOptions: { label: string, value: number }[] = [] 38 transcodingThreadOptions: { label: string, value: number }[] = []
38 39
39 languageItems: SelectOptionsItem[] = [] 40 languageItems: SelectOptionsItem[] = []
@@ -82,6 +83,8 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
82 } 83 }
83 ] 84 ]
84 85
86 this.liveResolutions = this.resolutions.filter(r => r.id !== '0p')
87
85 this.transcodingThreadOptions = [ 88 this.transcodingThreadOptions = [
86 { value: 0, label: $localize`Auto (via ffmpeg)` }, 89 { value: 0, label: $localize`Auto (via ffmpeg)` },
87 { value: 1, label: '1' }, 90 { value: 1, label: '1' },
@@ -198,6 +201,15 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
198 enabled: null 201 enabled: null
199 } 202 }
200 }, 203 },
204 live: {
205 enabled: null,
206
207 transcoding: {
208 enabled: null,
209 threads: TRANSCODING_THREADS_VALIDATOR,
210 resolutions: {}
211 }
212 },
201 autoBlacklist: { 213 autoBlacklist: {
202 videos: { 214 videos: {
203 ofUsers: { 215 ofUsers: {
@@ -245,13 +257,24 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
245 const defaultValues = { 257 const defaultValues = {
246 transcoding: { 258 transcoding: {
247 resolutions: {} 259 resolutions: {}
260 },
261 live: {
262 transcoding: {
263 resolutions: {}
264 }
248 } 265 }
249 } 266 }
267
250 for (const resolution of this.resolutions) { 268 for (const resolution of this.resolutions) {
251 defaultValues.transcoding.resolutions[resolution.id] = 'false' 269 defaultValues.transcoding.resolutions[resolution.id] = 'false'
252 formGroupData.transcoding.resolutions[resolution.id] = null 270 formGroupData.transcoding.resolutions[resolution.id] = null
253 } 271 }
254 272
273 for (const resolution of this.liveResolutions) {
274 defaultValues.live.transcoding.resolutions[resolution.id] = 'false'
275 formGroupData.live.transcoding.resolutions[resolution.id] = null
276 }
277
255 this.buildForm(formGroupData) 278 this.buildForm(formGroupData)
256 this.loadForm() 279 this.loadForm()
257 this.checkTranscodingFields() 280 this.checkTranscodingFields()
@@ -268,6 +291,14 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit, A
268 return this.form.value['transcoding']['enabled'] === true 291 return this.form.value['transcoding']['enabled'] === true
269 } 292 }
270 293
294 isLiveEnabled () {
295 return this.form.value['live']['enabled'] === true
296 }
297
298 isLiveTranscodingEnabled () {
299 return this.form.value['live']['transcoding']['enabled'] === true
300 }
301
271 isSignupEnabled () { 302 isSignupEnabled () {
272 return this.form.value['signup']['enabled'] === true 303 return this.form.value['signup']['enabled'] === true
273 } 304 }
diff --git a/client/src/app/+videos/+video-edit/shared/video-edit-utils.ts b/client/src/app/+videos/+video-edit/shared/video-edit-utils.ts
new file mode 100644
index 000000000..3a7dbed36
--- /dev/null
+++ b/client/src/app/+videos/+video-edit/shared/video-edit-utils.ts
@@ -0,0 +1,35 @@
1import { FormGroup } from '@angular/forms'
2import { VideoEdit } from '@app/shared/shared-main'
3
4function hydrateFormFromVideo (formGroup: FormGroup, video: VideoEdit, thumbnailFiles: boolean) {
5 formGroup.patchValue(video.toFormPatch())
6
7 if (thumbnailFiles === false) return
8
9 const objects = [
10 {
11 url: 'thumbnailUrl',
12 name: 'thumbnailfile'
13 },
14 {
15 url: 'previewUrl',
16 name: 'previewfile'
17 }
18 ]
19
20 for (const obj of objects) {
21 if (!video[obj.url]) continue
22
23 fetch(video[obj.url])
24 .then(response => response.blob())
25 .then(data => {
26 formGroup.patchValue({
27 [ obj.name ]: data
28 })
29 })
30 }
31}
32
33export {
34 hydrateFormFromVideo
35}
diff --git a/client/src/app/+videos/+video-edit/shared/video-edit.component.html b/client/src/app/+videos/+video-edit/shared/video-edit.component.html
index 842997b20..c444dd8d3 100644
--- a/client/src/app/+videos/+video-edit/shared/video-edit.component.html
+++ b/client/src/app/+videos/+video-edit/shared/video-edit.component.html
@@ -195,6 +195,29 @@
195 </ng-template> 195 </ng-template>
196 </ng-container> 196 </ng-container>
197 197
198 <ng-container ngbNavItem *ngIf="videoLive">
199 <a ngbNavLink i18n>Live settings</a>
200
201 <ng-template ngbNavContent>
202 <div class="row live-settings">
203 <div class="col-md-12">
204
205 <div class="form-group">
206 <label for="videoLiveRTMPUrl" i18n>Live RTMP Url</label>
207 <my-input-readonly-copy id="videoLiveRTMPUrl" [value]="videoLive.rtmpUrl"></my-input-readonly-copy>
208 </div>
209
210 <div class="form-group">
211 <label for="videoLiveStreamKey" i18n>Live stream key</label>
212 <my-input-readonly-copy id="videoLiveStreamKey" [value]="videoLive.streamKey"></my-input-readonly-copy>
213 </div>
214 </div>
215 </div>
216 </ng-template>
217
218 </ng-container>
219
220
198 <ng-container ngbNavItem> 221 <ng-container ngbNavItem>
199 <a ngbNavLink i18n>Advanced settings</a> 222 <a ngbNavLink i18n>Advanced settings</a>
200 223
diff --git a/client/src/app/+videos/+video-edit/shared/video-edit.component.ts b/client/src/app/+videos/+video-edit/shared/video-edit.component.ts
index f04111e69..bee65184b 100644
--- a/client/src/app/+videos/+video-edit/shared/video-edit.component.ts
+++ b/client/src/app/+videos/+video-edit/shared/video-edit.component.ts
@@ -20,10 +20,11 @@ import {
20import { FormReactiveValidationMessages, FormValidatorService, SelectChannelItem } from '@app/shared/shared-forms' 20import { FormReactiveValidationMessages, FormValidatorService, SelectChannelItem } from '@app/shared/shared-forms'
21import { InstanceService } from '@app/shared/shared-instance' 21import { InstanceService } from '@app/shared/shared-instance'
22import { VideoCaptionEdit, VideoEdit, VideoService } from '@app/shared/shared-main' 22import { VideoCaptionEdit, VideoEdit, VideoService } from '@app/shared/shared-main'
23import { ServerConfig, VideoConstant, VideoPrivacy } from '@shared/models' 23import { ServerConfig, VideoConstant, VideoLive, VideoPrivacy } from '@shared/models'
24import { RegisterClientFormFieldOptions, RegisterClientVideoFieldOptions } from '@shared/models/plugins/register-client-form-field.model' 24import { RegisterClientFormFieldOptions, RegisterClientVideoFieldOptions } from '@shared/models/plugins/register-client-form-field.model'
25import { I18nPrimengCalendarService } from './i18n-primeng-calendar.service' 25import { I18nPrimengCalendarService } from './i18n-primeng-calendar.service'
26import { VideoCaptionAddModalComponent } from './video-caption-add-modal.component' 26import { VideoCaptionAddModalComponent } from './video-caption-add-modal.component'
27import { VideoEditType } from './video-edit.type'
27 28
28type VideoLanguages = VideoConstant<string> & { group?: string } 29type VideoLanguages = VideoConstant<string> & { group?: string }
29 30
@@ -40,7 +41,8 @@ export class VideoEditComponent implements OnInit, OnDestroy {
40 @Input() schedulePublicationPossible = true 41 @Input() schedulePublicationPossible = true
41 @Input() videoCaptions: (VideoCaptionEdit & { captionPath?: string })[] = [] 42 @Input() videoCaptions: (VideoCaptionEdit & { captionPath?: string })[] = []
42 @Input() waitTranscodingEnabled = true 43 @Input() waitTranscodingEnabled = true
43 @Input() type: 'import-url' | 'import-torrent' | 'upload' | 'update' 44 @Input() type: VideoEditType
45 @Input() videoLive: VideoLive
44 46
45 @ViewChild('videoCaptionAddModal', { static: true }) videoCaptionAddModal: VideoCaptionAddModalComponent 47 @ViewChild('videoCaptionAddModal', { static: true }) videoCaptionAddModal: VideoCaptionAddModalComponent
46 48
@@ -124,7 +126,8 @@ export class VideoEditComponent implements OnInit, OnDestroy {
124 previewfile: null, 126 previewfile: null,
125 support: VIDEO_SUPPORT_VALIDATOR, 127 support: VIDEO_SUPPORT_VALIDATOR,
126 schedulePublicationAt: VIDEO_SCHEDULE_PUBLICATION_AT_VALIDATOR, 128 schedulePublicationAt: VIDEO_SCHEDULE_PUBLICATION_AT_VALIDATOR,
127 originallyPublishedAt: VIDEO_ORIGINALLY_PUBLISHED_AT_VALIDATOR 129 originallyPublishedAt: VIDEO_ORIGINALLY_PUBLISHED_AT_VALIDATOR,
130 liveStreamKey: null
128 } 131 }
129 132
130 this.formValidatorService.updateForm( 133 this.formValidatorService.updateForm(
@@ -320,7 +323,12 @@ export class VideoEditComponent implements OnInit, OnDestroy {
320 const currentSupport = this.form.value[ 'support' ] 323 const currentSupport = this.form.value[ 'support' ]
321 324
322 // First time we set the channel? 325 // First time we set the channel?
323 if (isNaN(oldChannelId) && !currentSupport) return this.updateSupportField(newChannel.support) 326 if (isNaN(oldChannelId)) {
327 // Fill support if it's empty
328 if (!currentSupport) this.updateSupportField(newChannel.support)
329
330 return
331 }
324 332
325 const oldChannel = this.userVideoChannels.find(c => c.id === oldChannelId) 333 const oldChannel = this.userVideoChannels.find(c => c.id === oldChannelId)
326 if (!newChannel || !oldChannel) { 334 if (!newChannel || !oldChannel) {
diff --git a/client/src/app/+videos/+video-edit/shared/video-edit.type.ts b/client/src/app/+videos/+video-edit/shared/video-edit.type.ts
new file mode 100644
index 000000000..fdbe9505c
--- /dev/null
+++ b/client/src/app/+videos/+video-edit/shared/video-edit.type.ts
@@ -0,0 +1 @@
export type VideoEditType = 'update' | 'upload' | 'import-url' | 'import-torrent' | 'go-live'
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.html b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.html
new file mode 100644
index 000000000..6997f5388
--- /dev/null
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.html
@@ -0,0 +1,47 @@
1<div *ngIf="!isInUpdateForm" class="upload-video-container">
2 <div class="first-step-block">
3 <my-global-icon class="upload-icon" iconName="upload" aria-hidden="true"></my-global-icon>
4
5 <div class="form-group">
6 <label i18n for="first-step-channel">Channel</label>
7 <my-select-channel
8 labelForId="first-step-channel" [items]="userVideoChannels" [(ngModel)]="firstStepChannelId"
9 ></my-select-channel>
10 </div>
11
12 <div class="form-group">
13 <label i18n for="first-step-privacy">Privacy</label>
14 <my-select-options
15 labelForId="first-step-privacy" [items]="videoPrivacies" [(ngModel)]="firstStepPrivacyId"
16 ></my-select-options>
17 </div>
18
19 <input
20 type="button" i18n-value value="Go Live" (click)="goLive()"
21 />
22 </div>
23</div>
24
25<div *ngIf="error" class="alert alert-danger">
26 <div i18n>Sorry, but something went wrong</div>
27 {{ error }}
28</div>
29
30<!-- Hidden because we want to load the component -->
31<form [hidden]="!isInUpdateForm" novalidate [formGroup]="form">
32 <my-video-edit
33 [form]="form" [formErrors]="formErrors" [videoCaptions]="videoCaptions" [schedulePublicationPossible]="false"
34 [validationMessages]="validationMessages" [userVideoChannels]="userVideoChannels" [videoLive]="videoLive"
35 type="go-live"
36 ></my-video-edit>
37
38 <div class="submit-container">
39 <div class="submit-button"
40 (click)="updateSecondStep()"
41 [ngClass]="{ disabled: !form.valid }"
42 >
43 <my-global-icon iconName="circle-tick" aria-hidden="true"></my-global-icon>
44 <input type="button" i18n-value value="Update" />
45 </div>
46 </div>
47</form>
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts
new file mode 100644
index 000000000..64fd4c4d4
--- /dev/null
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts
@@ -0,0 +1,129 @@
1
2import { Component, EventEmitter, OnInit, Output } from '@angular/core'
3import { Router } from '@angular/router'
4import { AuthService, CanComponentDeactivate, Notifier, ServerService } from '@app/core'
5import { scrollToTop } from '@app/helpers'
6import { FormValidatorService } from '@app/shared/shared-forms'
7import { VideoCaptionService, VideoEdit, VideoService, VideoLiveService } from '@app/shared/shared-main'
8import { LoadingBarService } from '@ngx-loading-bar/core'
9import { VideoCreate, VideoLive, VideoPrivacy } from '@shared/models'
10import { VideoSend } from './video-send'
11
12@Component({
13 selector: 'my-video-go-live',
14 templateUrl: './video-go-live.component.html',
15 styleUrls: [
16 '../shared/video-edit.component.scss',
17 './video-send.scss'
18 ]
19})
20export class VideoGoLiveComponent extends VideoSend implements OnInit, CanComponentDeactivate {
21 @Output() firstStepDone = new EventEmitter<string>()
22 @Output() firstStepError = new EventEmitter<void>()
23
24 isInUpdateForm = false
25
26 videoLive: VideoLive
27 videoId: number
28 videoUUID: string
29 error: string
30
31 protected readonly DEFAULT_VIDEO_PRIVACY = VideoPrivacy.PUBLIC
32
33 constructor (
34 protected formValidatorService: FormValidatorService,
35 protected loadingBar: LoadingBarService,
36 protected notifier: Notifier,
37 protected authService: AuthService,
38 protected serverService: ServerService,
39 protected videoService: VideoService,
40 protected videoCaptionService: VideoCaptionService,
41 private videoLiveService: VideoLiveService,
42 private router: Router
43 ) {
44 super()
45 }
46
47 ngOnInit () {
48 super.ngOnInit()
49 }
50
51 canDeactivate () {
52 return { canDeactivate: true }
53 }
54
55 goLive () {
56 const video: VideoCreate = {
57 name: 'Live',
58 privacy: VideoPrivacy.PRIVATE,
59 nsfw: this.serverConfig.instance.isNSFW,
60 waitTranscoding: true,
61 commentsEnabled: true,
62 downloadEnabled: true,
63 channelId: this.firstStepChannelId
64 }
65
66 this.firstStepDone.emit(name)
67
68 // Go live in private mode, but correctly fill the update form with the first user choice
69 const toPatch = Object.assign({}, video, { privacy: this.firstStepPrivacyId })
70 this.form.patchValue(toPatch)
71
72 this.videoLiveService.goLive(video).subscribe(
73 res => {
74 this.videoId = res.video.id
75 this.videoUUID = res.video.uuid
76 this.isInUpdateForm = true
77
78 this.fetchVideoLive()
79 },
80
81 err => {
82 this.firstStepError.emit()
83 this.notifier.error(err.message)
84 }
85 )
86 }
87
88 updateSecondStep () {
89 if (this.checkForm() === false) {
90 return
91 }
92
93 const video = new VideoEdit()
94 video.patch(this.form.value)
95 video.id = this.videoId
96 video.uuid = this.videoUUID
97
98 // Update the video
99 this.updateVideoAndCaptions(video)
100 .subscribe(
101 () => {
102 this.notifier.success($localize`Live published.`)
103
104 this.router.navigate([ '/videos/watch', video.uuid ])
105 },
106
107 err => {
108 this.error = err.message
109 scrollToTop()
110 console.error(err)
111 }
112 )
113
114 }
115
116 private fetchVideoLive () {
117 this.videoLiveService.getVideoLive(this.videoId)
118 .subscribe(
119 videoLive => {
120 this.videoLive = videoLive
121 },
122
123 err => {
124 this.firstStepError.emit()
125 this.notifier.error(err.message)
126 }
127 )
128 }
129}
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts
index e9ad8af7a..64e887987 100644
--- a/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts
@@ -6,6 +6,7 @@ import { FormValidatorService } from '@app/shared/shared-forms'
6import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main' 6import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main'
7import { LoadingBarService } from '@ngx-loading-bar/core' 7import { LoadingBarService } from '@ngx-loading-bar/core'
8import { VideoPrivacy, VideoUpdate } from '@shared/models' 8import { VideoPrivacy, VideoUpdate } from '@shared/models'
9import { hydrateFormFromVideo } from '../shared/video-edit-utils'
9import { VideoSend } from './video-send' 10import { VideoSend } from './video-send'
10 11
11@Component({ 12@Component({
@@ -99,7 +100,7 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Ca
99 previewUrl: null 100 previewUrl: null
100 })) 101 }))
101 102
102 this.hydrateFormFromVideo() 103 hydrateFormFromVideo(this.form, this.video, false)
103 }, 104 },
104 105
105 err => { 106 err => {
@@ -136,10 +137,5 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Ca
136 console.error(err) 137 console.error(err)
137 } 138 }
138 ) 139 )
139
140 }
141
142 private hydrateFormFromVideo () {
143 this.form.patchValue(this.video.toFormPatch())
144 } 140 }
145} 141}
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts
index 8bad81097..47f59a5d0 100644
--- a/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts
@@ -7,6 +7,7 @@ import { FormValidatorService } from '@app/shared/shared-forms'
7import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main' 7import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main'
8import { LoadingBarService } from '@ngx-loading-bar/core' 8import { LoadingBarService } from '@ngx-loading-bar/core'
9import { VideoPrivacy, VideoUpdate } from '@shared/models' 9import { VideoPrivacy, VideoUpdate } from '@shared/models'
10import { hydrateFormFromVideo } from '../shared/video-edit-utils'
10import { VideoSend } from './video-send' 11import { VideoSend } from './video-send'
11 12
12@Component({ 13@Component({
@@ -109,7 +110,7 @@ export class VideoImportUrlComponent extends VideoSend implements OnInit, CanCom
109 110
110 this.videoCaptions = videoCaptions 111 this.videoCaptions = videoCaptions
111 112
112 this.hydrateFormFromVideo() 113 hydrateFormFromVideo(this.form, this.video, true)
113 }, 114 },
114 115
115 err => { 116 err => {
@@ -146,31 +147,5 @@ export class VideoImportUrlComponent extends VideoSend implements OnInit, CanCom
146 console.error(err) 147 console.error(err)
147 } 148 }
148 ) 149 )
149
150 }
151
152 private hydrateFormFromVideo () {
153 this.form.patchValue(this.video.toFormPatch())
154
155 const objects = [
156 {
157 url: 'thumbnailUrl',
158 name: 'thumbnailfile'
159 },
160 {
161 url: 'previewUrl',
162 name: 'previewfile'
163 }
164 ]
165
166 for (const obj of objects) {
167 fetch(this.video[obj.url])
168 .then(response => response.blob())
169 .then(data => {
170 this.form.patchValue({
171 [ obj.name ]: data
172 })
173 })
174 }
175 } 150 }
176} 151}
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts
index 32a17052a..258f5c7a0 100644
--- a/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts
@@ -157,7 +157,6 @@ export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy
157 this.waitTranscodingEnabled = false 157 this.waitTranscodingEnabled = false
158 } 158 }
159 159
160 const privacy = this.firstStepPrivacyId.toString()
161 const nsfw = this.serverConfig.instance.isNSFW 160 const nsfw = this.serverConfig.instance.isNSFW
162 const waitTranscoding = true 161 const waitTranscoding = true
163 const commentsEnabled = true 162 const commentsEnabled = true
diff --git a/client/src/app/+videos/+video-edit/video-add.component.html b/client/src/app/+videos/+video-edit/video-add.component.html
index 14d41f95b..bf2cc9c83 100644
--- a/client/src/app/+videos/+video-edit/video-add.component.html
+++ b/client/src/app/+videos/+video-edit/video-add.component.html
@@ -50,7 +50,17 @@
50 <my-video-import-torrent #videoImportTorrent (firstStepDone)="onFirstStepDone('import-torrent', $event)" (firstStepError)="onError()"></my-video-import-torrent> 50 <my-video-import-torrent #videoImportTorrent (firstStepDone)="onFirstStepDone('import-torrent', $event)" (firstStepError)="onError()"></my-video-import-torrent>
51 </ng-template> 51 </ng-template>
52 </ng-container> 52 </ng-container>
53
54 <ng-container ngbNavItem *ngIf="isVideoLiveEnabled()">
55 <a ngbNavLink>
56 <span i18n>Go live</span>
57 </a>
58
59 <ng-template ngbNavContent>
60 <my-video-go-live #videoGoLive (firstStepDone)="onFirstStepDone('go-live', $event)" (firstStepError)="onError()"></my-video-go-live>
61 </ng-template>
62 </ng-container>
53 </div> 63 </div>
54 64
55 <div [ngbNavOutlet]="nav"></div> 65 <div [ngbNavOutlet]="nav"></div>
56</div> \ No newline at end of file 66</div>
diff --git a/client/src/app/+videos/+video-edit/video-add.component.ts b/client/src/app/+videos/+video-edit/video-add.component.ts
index 94e85efc1..441d5a3db 100644
--- a/client/src/app/+videos/+video-edit/video-add.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add.component.ts
@@ -1,6 +1,8 @@
1import { Component, HostListener, OnInit, ViewChild } from '@angular/core' 1import { Component, HostListener, OnInit, ViewChild } from '@angular/core'
2import { AuthService, AuthUser, CanComponentDeactivate, ServerService } from '@app/core' 2import { AuthService, AuthUser, CanComponentDeactivate, ServerService } from '@app/core'
3import { ServerConfig } from '@shared/models' 3import { ServerConfig } from '@shared/models'
4import { VideoEditType } from './shared/video-edit.type'
5import { VideoGoLiveComponent } from './video-add-components/video-go-live.component'
4import { VideoImportTorrentComponent } from './video-add-components/video-import-torrent.component' 6import { VideoImportTorrentComponent } from './video-add-components/video-import-torrent.component'
5import { VideoImportUrlComponent } from './video-add-components/video-import-url.component' 7import { VideoImportUrlComponent } from './video-add-components/video-import-url.component'
6import { VideoUploadComponent } from './video-add-components/video-upload.component' 8import { VideoUploadComponent } from './video-add-components/video-upload.component'
@@ -14,10 +16,11 @@ export class VideoAddComponent implements OnInit, CanComponentDeactivate {
14 @ViewChild('videoUpload') videoUpload: VideoUploadComponent 16 @ViewChild('videoUpload') videoUpload: VideoUploadComponent
15 @ViewChild('videoImportUrl') videoImportUrl: VideoImportUrlComponent 17 @ViewChild('videoImportUrl') videoImportUrl: VideoImportUrlComponent
16 @ViewChild('videoImportTorrent') videoImportTorrent: VideoImportTorrentComponent 18 @ViewChild('videoImportTorrent') videoImportTorrent: VideoImportTorrentComponent
19 @ViewChild('videoGoLive') videoGoLive: VideoGoLiveComponent
17 20
18 user: AuthUser = null 21 user: AuthUser = null
19 22
20 secondStepType: 'upload' | 'import-url' | 'import-torrent' 23 secondStepType: VideoEditType
21 videoName: string 24 videoName: string
22 serverConfig: ServerConfig 25 serverConfig: ServerConfig
23 26
@@ -41,7 +44,7 @@ export class VideoAddComponent implements OnInit, CanComponentDeactivate {
41 this.user = this.auth.getUser() 44 this.user = this.auth.getUser()
42 } 45 }
43 46
44 onFirstStepDone (type: 'upload' | 'import-url' | 'import-torrent', videoName: string) { 47 onFirstStepDone (type: VideoEditType, videoName: string) {
45 this.secondStepType = type 48 this.secondStepType = type
46 this.videoName = videoName 49 this.videoName = videoName
47 } 50 }
@@ -62,9 +65,9 @@ export class VideoAddComponent implements OnInit, CanComponentDeactivate {
62 } 65 }
63 66
64 canDeactivate (): { canDeactivate: boolean, text?: string} { 67 canDeactivate (): { canDeactivate: boolean, text?: string} {
65 if (this.secondStepType === 'upload') return this.videoUpload.canDeactivate()
66 if (this.secondStepType === 'import-url') return this.videoImportUrl.canDeactivate() 68 if (this.secondStepType === 'import-url') return this.videoImportUrl.canDeactivate()
67 if (this.secondStepType === 'import-torrent') return this.videoImportTorrent.canDeactivate() 69 if (this.secondStepType === 'import-torrent') return this.videoImportTorrent.canDeactivate()
70 if (this.secondStepType === 'go-live') return this.videoGoLive.canDeactivate()
68 71
69 return { canDeactivate: true } 72 return { canDeactivate: true }
70 } 73 }
@@ -77,6 +80,10 @@ export class VideoAddComponent implements OnInit, CanComponentDeactivate {
77 return this.serverConfig.import.videos.torrent.enabled 80 return this.serverConfig.import.videos.torrent.enabled
78 } 81 }
79 82
83 isVideoLiveEnabled () {
84 return this.serverConfig.live.enabled
85 }
86
80 isInSecondStep () { 87 isInSecondStep () {
81 return !!this.secondStepType 88 return !!this.secondStepType
82 } 89 }
diff --git a/client/src/app/+videos/+video-edit/video-add.module.ts b/client/src/app/+videos/+video-edit/video-add.module.ts
index 477c1cf5e..da651119b 100644
--- a/client/src/app/+videos/+video-edit/video-add.module.ts
+++ b/client/src/app/+videos/+video-edit/video-add.module.ts
@@ -4,6 +4,7 @@ import { VideoEditModule } from './shared/video-edit.module'
4import { DragDropDirective } from './video-add-components/drag-drop.directive' 4import { DragDropDirective } from './video-add-components/drag-drop.directive'
5import { VideoImportTorrentComponent } from './video-add-components/video-import-torrent.component' 5import { VideoImportTorrentComponent } from './video-add-components/video-import-torrent.component'
6import { VideoImportUrlComponent } from './video-add-components/video-import-url.component' 6import { VideoImportUrlComponent } from './video-add-components/video-import-url.component'
7import { VideoGoLiveComponent } from './video-add-components/video-go-live.component'
7import { VideoUploadComponent } from './video-add-components/video-upload.component' 8import { VideoUploadComponent } from './video-add-components/video-upload.component'
8import { VideoAddRoutingModule } from './video-add-routing.module' 9import { VideoAddRoutingModule } from './video-add-routing.module'
9import { VideoAddComponent } from './video-add.component' 10import { VideoAddComponent } from './video-add.component'
@@ -20,7 +21,8 @@ import { VideoAddComponent } from './video-add.component'
20 VideoUploadComponent, 21 VideoUploadComponent,
21 VideoImportUrlComponent, 22 VideoImportUrlComponent,
22 VideoImportTorrentComponent, 23 VideoImportTorrentComponent,
23 DragDropDirective 24 DragDropDirective,
25 VideoGoLiveComponent
24 ], 26 ],
25 27
26 exports: [ ], 28 exports: [ ],
diff --git a/client/src/app/+videos/+video-edit/video-update.component.html b/client/src/app/+videos/+video-edit/video-update.component.html
index b37596399..5f50ddc74 100644
--- a/client/src/app/+videos/+video-edit/video-update.component.html
+++ b/client/src/app/+videos/+video-edit/video-update.component.html
@@ -11,6 +11,7 @@
11 [validationMessages]="validationMessages" [userVideoChannels]="userVideoChannels" 11 [validationMessages]="validationMessages" [userVideoChannels]="userVideoChannels"
12 [videoCaptions]="videoCaptions" [waitTranscodingEnabled]="waitTranscodingEnabled" 12 [videoCaptions]="videoCaptions" [waitTranscodingEnabled]="waitTranscodingEnabled"
13 type="update" (pluginFieldsAdded)="hydratePluginFieldsFromVideo()" 13 type="update" (pluginFieldsAdded)="hydratePluginFieldsFromVideo()"
14 [videoLive]="videoLive"
14 ></my-video-edit> 15 ></my-video-edit>
15 16
16 <div class="submit-container"> 17 <div class="submit-container">
diff --git a/client/src/app/+videos/+video-edit/video-update.component.ts b/client/src/app/+videos/+video-edit/video-update.component.ts
index 20438a2d3..c0f46acd2 100644
--- a/client/src/app/+videos/+video-edit/video-update.component.ts
+++ b/client/src/app/+videos/+video-edit/video-update.component.ts
@@ -5,7 +5,8 @@ import { Notifier } from '@app/core'
5import { FormReactive, FormValidatorService, SelectChannelItem } from '@app/shared/shared-forms' 5import { FormReactive, FormValidatorService, SelectChannelItem } from '@app/shared/shared-forms'
6import { VideoCaptionEdit, VideoCaptionService, VideoDetails, VideoEdit, VideoService } from '@app/shared/shared-main' 6import { VideoCaptionEdit, VideoCaptionService, VideoDetails, VideoEdit, VideoService } from '@app/shared/shared-main'
7import { LoadingBarService } from '@ngx-loading-bar/core' 7import { LoadingBarService } from '@ngx-loading-bar/core'
8import { VideoPrivacy } from '@shared/models' 8import { VideoPrivacy, VideoLive } from '@shared/models'
9import { hydrateFormFromVideo } from './shared/video-edit-utils'
9 10
10@Component({ 11@Component({
11 selector: 'my-videos-update', 12 selector: 'my-videos-update',
@@ -14,11 +15,12 @@ import { VideoPrivacy } from '@shared/models'
14}) 15})
15export class VideoUpdateComponent extends FormReactive implements OnInit { 16export class VideoUpdateComponent extends FormReactive implements OnInit {
16 video: VideoEdit 17 video: VideoEdit
18 userVideoChannels: SelectChannelItem[] = []
19 videoCaptions: VideoCaptionEdit[] = []
20 videoLive: VideoLive
17 21
18 isUpdatingVideo = false 22 isUpdatingVideo = false
19 userVideoChannels: SelectChannelItem[] = []
20 schedulePublicationPossible = false 23 schedulePublicationPossible = false
21 videoCaptions: VideoCaptionEdit[] = []
22 waitTranscodingEnabled = true 24 waitTranscodingEnabled = true
23 25
24 private updateDone = false 26 private updateDone = false
@@ -40,10 +42,11 @@ export class VideoUpdateComponent extends FormReactive implements OnInit {
40 42
41 this.route.data 43 this.route.data
42 .pipe(map(data => data.videoData)) 44 .pipe(map(data => data.videoData))
43 .subscribe(({ video, videoChannels, videoCaptions }) => { 45 .subscribe(({ video, videoChannels, videoCaptions, videoLive }) => {
44 this.video = new VideoEdit(video) 46 this.video = new VideoEdit(video)
45 this.userVideoChannels = videoChannels 47 this.userVideoChannels = videoChannels
46 this.videoCaptions = videoCaptions 48 this.videoCaptions = videoCaptions
49 this.videoLive = videoLive
47 50
48 this.schedulePublicationPossible = this.video.privacy === VideoPrivacy.PRIVATE 51 this.schedulePublicationPossible = this.video.privacy === VideoPrivacy.PRIVATE
49 52
@@ -53,7 +56,7 @@ export class VideoUpdateComponent extends FormReactive implements OnInit {
53 } 56 }
54 57
55 // FIXME: Angular does not detect the change inside this subscription, so use the patched setTimeout 58 // FIXME: Angular does not detect the change inside this subscription, so use the patched setTimeout
56 setTimeout(() => this.hydrateFormFromVideo()) 59 setTimeout(() => hydrateFormFromVideo(this.form, this.video, true))
57 }, 60 },
58 61
59 err => { 62 err => {
@@ -133,29 +136,4 @@ export class VideoUpdateComponent extends FormReactive implements OnInit {
133 pluginData: this.video.pluginData 136 pluginData: this.video.pluginData
134 }) 137 })
135 } 138 }
136
137 private hydrateFormFromVideo () {
138 this.form.patchValue(this.video.toFormPatch())
139
140 const objects = [
141 {
142 url: 'thumbnailUrl',
143 name: 'thumbnailfile'
144 },
145 {
146 url: 'previewUrl',
147 name: 'previewfile'
148 }
149 ]
150
151 for (const obj of objects) {
152 fetch(this.video[obj.url])
153 .then(response => response.blob())
154 .then(data => {
155 this.form.patchValue({
156 [ obj.name ]: data
157 })
158 })
159 }
160 }
161} 139}
diff --git a/client/src/app/+videos/+video-edit/video-update.resolver.ts b/client/src/app/+videos/+video-edit/video-update.resolver.ts
index a391913d8..3a82324c3 100644
--- a/client/src/app/+videos/+video-edit/video-update.resolver.ts
+++ b/client/src/app/+videos/+video-edit/video-update.resolver.ts
@@ -1,13 +1,14 @@
1import { forkJoin } from 'rxjs' 1import { forkJoin, of } from 'rxjs'
2import { map, switchMap } from 'rxjs/operators' 2import { map, switchMap } from 'rxjs/operators'
3import { Injectable } from '@angular/core' 3import { Injectable } from '@angular/core'
4import { ActivatedRouteSnapshot, Resolve } from '@angular/router' 4import { ActivatedRouteSnapshot, Resolve } from '@angular/router'
5import { VideoCaptionService, VideoChannelService, VideoService } from '@app/shared/shared-main' 5import { VideoCaptionService, VideoChannelService, VideoDetails, VideoLiveService, VideoService } from '@app/shared/shared-main'
6 6
7@Injectable() 7@Injectable()
8export class VideoUpdateResolver implements Resolve<any> { 8export class VideoUpdateResolver implements Resolve<any> {
9 constructor ( 9 constructor (
10 private videoService: VideoService, 10 private videoService: VideoService,
11 private videoLiveService: VideoLiveService,
11 private videoChannelService: VideoChannelService, 12 private videoChannelService: VideoChannelService,
12 private videoCaptionService: VideoCaptionService 13 private videoCaptionService: VideoCaptionService
13 ) { 14 ) {
@@ -18,32 +19,38 @@ export class VideoUpdateResolver implements Resolve<any> {
18 19
19 return this.videoService.getVideo({ videoId: uuid }) 20 return this.videoService.getVideo({ videoId: uuid })
20 .pipe( 21 .pipe(
21 switchMap(video => { 22 switchMap(video => forkJoin(this.buildVideoObservables(video))),
22 return forkJoin([ 23 map(([ video, videoChannels, videoCaptions, videoLive ]) => ({ video, videoChannels, videoCaptions, videoLive }))
23 this.videoService 24 )
24 .loadCompleteDescription(video.descriptionPath) 25 }
25 .pipe(map(description => Object.assign(video, { description }))),
26 26
27 this.videoChannelService 27 private buildVideoObservables (video: VideoDetails) {
28 .listAccountVideoChannels(video.account) 28 return [
29 .pipe( 29 this.videoService
30 map(result => result.data), 30 .loadCompleteDescription(video.descriptionPath)
31 map(videoChannels => videoChannels.map(c => ({ 31 .pipe(map(description => Object.assign(video, { description }))),
32 id: c.id,
33 label: c.displayName,
34 support: c.support,
35 avatarPath: c.avatar?.path
36 })))
37 ),
38 32
39 this.videoCaptionService 33 this.videoChannelService
40 .listCaptions(video.id) 34 .listAccountVideoChannels(video.account)
41 .pipe( 35 .pipe(
42 map(result => result.data) 36 map(result => result.data),
43 ) 37 map(videoChannels => videoChannels.map(c => ({
44 ]) 38 id: c.id,
45 }), 39 label: c.displayName,
46 map(([ video, videoChannels, videoCaptions ]) => ({ video, videoChannels, videoCaptions })) 40 support: c.support,
47 ) 41 avatarPath: c.avatar?.path
42 })))
43 ),
44
45 this.videoCaptionService
46 .listCaptions(video.id)
47 .pipe(
48 map(result => result.data)
49 ),
50
51 video.isLive
52 ? this.videoLiveService.getVideoLive(video.id)
53 : of(undefined)
54 ]
48 } 55 }
49} 56}
diff --git a/client/src/app/core/plugins/plugin.service.ts b/client/src/app/core/plugins/plugin.service.ts
index 4e44a1865..b755fda2c 100644
--- a/client/src/app/core/plugins/plugin.service.ts
+++ b/client/src/app/core/plugins/plugin.service.ts
@@ -2,6 +2,7 @@ import { Observable, of, ReplaySubject } from 'rxjs'
2import { catchError, first, map, shareReplay } from 'rxjs/operators' 2import { catchError, first, map, shareReplay } from 'rxjs/operators'
3import { HttpClient } from '@angular/common/http' 3import { HttpClient } from '@angular/common/http'
4import { Inject, Injectable, LOCALE_ID, NgZone } from '@angular/core' 4import { Inject, Injectable, LOCALE_ID, NgZone } from '@angular/core'
5import { VideoEditType } from '@app/+videos/+video-edit/shared/video-edit.type'
5import { AuthService } from '@app/core/auth' 6import { AuthService } from '@app/core/auth'
6import { Notifier } from '@app/core/notification' 7import { Notifier } from '@app/core/notification'
7import { MarkdownService } from '@app/core/renderer' 8import { MarkdownService } from '@app/core/renderer'
@@ -192,7 +193,7 @@ export class PluginService implements ClientHook {
192 : PluginType.THEME 193 : PluginType.THEME
193 } 194 }
194 195
195 getRegisteredVideoFormFields (type: 'import-url' | 'import-torrent' | 'upload' | 'update') { 196 getRegisteredVideoFormFields (type: VideoEditType) {
196 return this.formFields.video.filter(f => f.videoFormOptions.type === type) 197 return this.formFields.video.filter(f => f.videoFormOptions.type === type)
197 } 198 }
198 199
diff --git a/client/src/app/core/server/server.service.ts b/client/src/app/core/server/server.service.ts
index 5bcf33c1b..bc76bacfc 100644
--- a/client/src/app/core/server/server.service.ts
+++ b/client/src/app/core/server/server.service.ts
@@ -74,6 +74,13 @@ export class ServerService {
74 enabled: true 74 enabled: true
75 } 75 }
76 }, 76 },
77 live: {
78 enabled: false,
79 transcoding: {
80 enabled: false,
81 enabledResolutions: []
82 }
83 },
77 avatar: { 84 avatar: {
78 file: { 85 file: {
79 size: { max: 0 }, 86 size: { max: 0 },
diff --git a/client/src/app/shared/shared-forms/input-readonly-copy.component.html b/client/src/app/shared/shared-forms/input-readonly-copy.component.html
index 9566e9741..7a75bd70b 100644
--- a/client/src/app/shared/shared-forms/input-readonly-copy.component.html
+++ b/client/src/app/shared/shared-forms/input-readonly-copy.component.html
@@ -1,5 +1,5 @@
1<div class="input-group input-group-sm"> 1<div class="input-group input-group-sm">
2 <input #urlInput (click)="urlInput.select()" type="text" class="form-control readonly" readonly [value]="value" /> 2 <input [id]="id" #urlInput (click)="urlInput.select()" type="text" class="form-control readonly" readonly [value]="value" />
3 3
4 <div class="input-group-append"> 4 <div class="input-group-append">
5 <button [cdkCopyToClipboard]="urlInput.value" (click)="activateCopiedMessage()" type="button" class="btn btn-outline-secondary"> 5 <button [cdkCopyToClipboard]="urlInput.value" (click)="activateCopiedMessage()" type="button" class="btn btn-outline-secondary">
diff --git a/client/src/app/shared/shared-forms/input-readonly-copy.component.ts b/client/src/app/shared/shared-forms/input-readonly-copy.component.ts
index a67b0c691..520827a53 100644
--- a/client/src/app/shared/shared-forms/input-readonly-copy.component.ts
+++ b/client/src/app/shared/shared-forms/input-readonly-copy.component.ts
@@ -1,5 +1,6 @@
1import { Component, Input } from '@angular/core' 1import { Component, Input } from '@angular/core'
2import { Notifier } from '@app/core' 2import { Notifier } from '@app/core'
3import { FormGroup } from '@angular/forms'
3 4
4@Component({ 5@Component({
5 selector: 'my-input-readonly-copy', 6 selector: 'my-input-readonly-copy',
@@ -7,6 +8,7 @@ import { Notifier } from '@app/core'
7 styleUrls: [ './input-readonly-copy.component.scss' ] 8 styleUrls: [ './input-readonly-copy.component.scss' ]
8}) 9})
9export class InputReadonlyCopyComponent { 10export class InputReadonlyCopyComponent {
11 @Input() id: string
10 @Input() value = '' 12 @Input() value = ''
11 13
12 constructor (private notifier: Notifier) { } 14 constructor (private notifier: Notifier) { }
diff --git a/client/src/app/shared/shared-instance/instance-features-table.component.html b/client/src/app/shared/shared-instance/instance-features-table.component.html
index f6a3b7f0b..002695238 100644
--- a/client/src/app/shared/shared-instance/instance-features-table.component.html
+++ b/client/src/app/shared/shared-instance/instance-features-table.component.html
@@ -64,6 +64,24 @@
64 </tr> 64 </tr>
65 65
66 <tr> 66 <tr>
67 <th i18n class="label" colspan="2">Live streaming</th>
68 </tr>
69
70 <tr>
71 <th i18n class="sub-label" scope="row">Live streaming enabled</th>
72 <td>
73 <my-feature-boolean [value]="serverConfig.live.enabled"></my-feature-boolean>
74 </td>
75 </tr>
76
77 <tr>
78 <th i18n class="sub-label" scope="row">Transcode live video in multiple resolutions</th>
79 <td>
80 <my-feature-boolean [value]="serverConfig.live.transcoding.enabled && serverConfig.live.transcoding.enabledResolutions.length > 1"></my-feature-boolean>
81 </td>
82 </tr>
83
84 <tr>
67 <th i18n class="label" colspan="2">Import</th> 85 <th i18n class="label" colspan="2">Import</th>
68 </tr> 86 </tr>
69 87
diff --git a/client/src/app/shared/shared-main/shared-main.module.ts b/client/src/app/shared/shared-main/shared-main.module.ts
index 7f4676dd1..bca67b193 100644
--- a/client/src/app/shared/shared-main/shared-main.module.ts
+++ b/client/src/app/shared/shared-main/shared-main.module.ts
@@ -23,7 +23,7 @@ import { FeedComponent } from './feeds'
23import { LoaderComponent, SmallLoaderComponent } from './loaders' 23import { LoaderComponent, SmallLoaderComponent } from './loaders'
24import { HelpComponent, ListOverflowComponent, TopMenuDropdownComponent } from './misc' 24import { HelpComponent, ListOverflowComponent, TopMenuDropdownComponent } from './misc'
25import { UserHistoryService, UserNotificationsComponent, UserNotificationService, UserQuotaComponent } from './users' 25import { UserHistoryService, UserNotificationsComponent, UserNotificationService, UserQuotaComponent } from './users'
26import { RedundancyService, VideoImportService, VideoOwnershipService, VideoService } from './video' 26import { RedundancyService, VideoImportService, VideoOwnershipService, VideoService, VideoLiveService } from './video'
27import { VideoCaptionService } from './video-caption' 27import { VideoCaptionService } from './video-caption'
28import { VideoChannelService } from './video-channel' 28import { VideoChannelService } from './video-channel'
29 29
@@ -142,6 +142,7 @@ import { VideoChannelService } from './video-channel'
142 RedundancyService, 142 RedundancyService,
143 VideoImportService, 143 VideoImportService,
144 VideoOwnershipService, 144 VideoOwnershipService,
145 VideoLiveService,
145 VideoService, 146 VideoService,
146 147
147 VideoCaptionService, 148 VideoCaptionService,
diff --git a/client/src/app/shared/shared-main/video/index.ts b/client/src/app/shared/shared-main/video/index.ts
index 3053df4ef..121635a30 100644
--- a/client/src/app/shared/shared-main/video/index.ts
+++ b/client/src/app/shared/shared-main/video/index.ts
@@ -2,6 +2,7 @@ export * from './redundancy.service'
2export * from './video-details.model' 2export * from './video-details.model'
3export * from './video-edit.model' 3export * from './video-edit.model'
4export * from './video-import.service' 4export * from './video-import.service'
5export * from './video-live.service'
5export * from './video-ownership.service' 6export * from './video-ownership.service'
6export * from './video.model' 7export * from './video.model'
7export * from './video.service' 8export * from './video.service'
diff --git a/client/src/app/shared/shared-main/video/video-details.model.ts b/client/src/app/shared/shared-main/video/video-details.model.ts
index a1cb051e9..f060d1dc9 100644
--- a/client/src/app/shared/shared-main/video/video-details.model.ts
+++ b/client/src/app/shared/shared-main/video/video-details.model.ts
@@ -62,8 +62,11 @@ export class VideoDetails extends Video implements VideoDetailsServerModel {
62 } 62 }
63 63
64 getFiles () { 64 getFiles () {
65 if (this.files.length === 0) return this.getHlsPlaylist().files 65 if (this.files.length !== 0) return this.files
66 66
67 return this.files 67 const hls = this.getHlsPlaylist()
68 if (hls) return hls.files
69
70 return []
68 } 71 }
69} 72}
diff --git a/client/src/app/shared/shared-main/video/video-live.service.ts b/client/src/app/shared/shared-main/video/video-live.service.ts
new file mode 100644
index 000000000..12daff756
--- /dev/null
+++ b/client/src/app/shared/shared-main/video/video-live.service.ts
@@ -0,0 +1,28 @@
1import { catchError } from 'rxjs/operators'
2import { HttpClient } from '@angular/common/http'
3import { Injectable } from '@angular/core'
4import { RestExtractor } from '@app/core'
5import { VideoCreate, VideoLive } from '@shared/models'
6import { environment } from '../../../../environments/environment'
7
8@Injectable()
9export class VideoLiveService {
10 static BASE_VIDEO_LIVE_URL = environment.apiUrl + '/api/v1/videos/live/'
11
12 constructor (
13 private authHttp: HttpClient,
14 private restExtractor: RestExtractor
15 ) {}
16
17 goLive (video: VideoCreate) {
18 return this.authHttp
19 .post<{ video: { id: number, uuid: string } }>(VideoLiveService.BASE_VIDEO_LIVE_URL, video)
20 .pipe(catchError(err => this.restExtractor.handleError(err)))
21 }
22
23 getVideoLive (videoId: number | string) {
24 return this.authHttp
25 .get<VideoLive>(VideoLiveService.BASE_VIDEO_LIVE_URL + videoId)
26 .pipe(catchError(err => this.restExtractor.handleError(err)))
27 }
28}
diff --git a/client/src/app/shared/shared-main/video/video.model.ts b/client/src/app/shared/shared-main/video/video.model.ts
index 0dca3da0d..e3a52af3d 100644
--- a/client/src/app/shared/shared-main/video/video.model.ts
+++ b/client/src/app/shared/shared-main/video/video.model.ts
@@ -40,6 +40,8 @@ export class Video implements VideoServerModel {
40 thumbnailPath: string 40 thumbnailPath: string
41 thumbnailUrl: string 41 thumbnailUrl: string
42 42
43 isLive: boolean
44
43 previewPath: string 45 previewPath: string
44 previewUrl: string 46 previewUrl: string
45 47
@@ -103,6 +105,8 @@ export class Video implements VideoServerModel {
103 this.state = hash.state 105 this.state = hash.state
104 this.description = hash.description 106 this.description = hash.description
105 107
108 this.isLive = hash.isLive
109
106 this.duration = hash.duration 110 this.duration = hash.duration
107 this.durationLabel = durationToString(hash.duration) 111 this.durationLabel = durationToString(hash.duration)
108 112
@@ -113,10 +117,14 @@ export class Video implements VideoServerModel {
113 this.name = hash.name 117 this.name = hash.name
114 118
115 this.thumbnailPath = hash.thumbnailPath 119 this.thumbnailPath = hash.thumbnailPath
116 this.thumbnailUrl = hash.thumbnailUrl || (absoluteAPIUrl + hash.thumbnailPath) 120 this.thumbnailUrl = this.thumbnailPath
121 ? hash.thumbnailUrl || (absoluteAPIUrl + hash.thumbnailPath)
122 : null
117 123
118 this.previewPath = hash.previewPath 124 this.previewPath = hash.previewPath
119 this.previewUrl = hash.previewUrl || (absoluteAPIUrl + hash.previewPath) 125 this.previewUrl = this.previewPath
126 ? hash.previewUrl || (absoluteAPIUrl + hash.previewPath)
127 : null
120 128
121 this.embedPath = hash.embedPath 129 this.embedPath = hash.embedPath
122 this.embedUrl = hash.embedUrl || (getAbsoluteEmbedUrl() + hash.embedPath) 130 this.embedUrl = hash.embedUrl || (getAbsoluteEmbedUrl() + hash.embedPath)
diff --git a/client/src/app/shared/shared-main/video/video.service.ts b/client/src/app/shared/shared-main/video/video.service.ts
index 8a688c8ed..0e2d36081 100644
--- a/client/src/app/shared/shared-main/video/video.service.ts
+++ b/client/src/app/shared/shared-main/video/video.service.ts
@@ -18,7 +18,8 @@ import {
18 VideoFilter, 18 VideoFilter,
19 VideoPrivacy, 19 VideoPrivacy,
20 VideoSortField, 20 VideoSortField,
21 VideoUpdate 21 VideoUpdate,
22 VideoCreate
22} from '@shared/models' 23} from '@shared/models'
23import { environment } from '../../../../environments/environment' 24import { environment } from '../../../../environments/environment'
24import { Account } from '../account/account.model' 25import { Account } from '../account/account.model'
diff --git a/client/src/assets/player/p2p-media-loader/segment-validator.ts b/client/src/assets/player/p2p-media-loader/segment-validator.ts
index 72c32f9e0..0614f73d2 100644
--- a/client/src/assets/player/p2p-media-loader/segment-validator.ts
+++ b/client/src/assets/player/p2p-media-loader/segment-validator.ts
@@ -1,17 +1,42 @@
1import { Segment } from 'p2p-media-loader-core' 1import { Segment } from 'p2p-media-loader-core'
2import { basename } from 'path' 2import { basename } from 'path'
3 3
4type SegmentsJSON = { [filename: string]: string | { [byterange: string]: string } }
5
4function segmentValidatorFactory (segmentsSha256Url: string) { 6function segmentValidatorFactory (segmentsSha256Url: string) {
5 const segmentsJSON = fetchSha256Segments(segmentsSha256Url) 7 let segmentsJSON = fetchSha256Segments(segmentsSha256Url)
6 const regex = /bytes=(\d+)-(\d+)/ 8 const regex = /bytes=(\d+)-(\d+)/
7 9
8 return async function segmentValidator (segment: Segment) { 10 return async function segmentValidator (segment: Segment, canRefetchSegmentHashes = true) {
9 const filename = basename(segment.url) 11 const filename = basename(segment.url)
10 const captured = regex.exec(segment.range)
11 12
12 const range = captured[1] + '-' + captured[2] 13 const segmentValue = (await segmentsJSON)[filename]
14
15 if (!segmentValue && !canRefetchSegmentHashes) {
16 throw new Error(`Unknown segment name ${filename} in segment validator`)
17 }
18
19 if (!segmentValue) {
20 console.log('Refetching sha segments.')
21
22 // Refetch
23 segmentsJSON = fetchSha256Segments(segmentsSha256Url)
24 segmentValidator(segment, false)
25 return
26 }
27
28 let hashShouldBe: string
29 let range = ''
30
31 if (typeof segmentValue === 'string') {
32 hashShouldBe = segmentValue
33 } else {
34 const captured = regex.exec(segment.range)
35 range = captured[1] + '-' + captured[2]
36
37 hashShouldBe = segmentValue[range]
38 }
13 39
14 const hashShouldBe = (await segmentsJSON)[filename][range]
15 if (hashShouldBe === undefined) { 40 if (hashShouldBe === undefined) {
16 throw new Error(`Unknown segment name ${filename}/${range} in segment validator`) 41 throw new Error(`Unknown segment name ${filename}/${range} in segment validator`)
17 } 42 }
@@ -36,7 +61,7 @@ export {
36 61
37function fetchSha256Segments (url: string) { 62function fetchSha256Segments (url: string) {
38 return fetch(url) 63 return fetch(url)
39 .then(res => res.json()) 64 .then(res => res.json() as Promise<SegmentsJSON>)
40 .catch(err => { 65 .catch(err => {
41 console.error('Cannot get sha256 segments', err) 66 console.error('Cannot get sha256 segments', err)
42 return {} 67 return {}
diff --git a/client/src/assets/player/peertube-player-manager.ts b/client/src/assets/player/peertube-player-manager.ts
index af044c864..3d72d4609 100644
--- a/client/src/assets/player/peertube-player-manager.ts
+++ b/client/src/assets/player/peertube-player-manager.ts
@@ -325,7 +325,7 @@ export class PeertubePlayerManager {
325 trackerAnnounce, 325 trackerAnnounce,
326 segmentValidator: segmentValidatorFactory(options.p2pMediaLoader.segmentsSha256Url), 326 segmentValidator: segmentValidatorFactory(options.p2pMediaLoader.segmentsSha256Url),
327 rtcConfig: getRtcConfig(), 327 rtcConfig: getRtcConfig(),
328 requiredSegmentsPriority: 5, 328 requiredSegmentsPriority: 1,
329 segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager), 329 segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager),
330 useP2P: getStoredP2PEnabled(), 330 useP2P: getStoredP2PEnabled(),
331 consumeOnly 331 consumeOnly
@@ -353,7 +353,7 @@ export class PeertubePlayerManager {
353 hlsjsConfig: { 353 hlsjsConfig: {
354 capLevelToPlayerSize: true, 354 capLevelToPlayerSize: true,
355 autoStartLoad: false, 355 autoStartLoad: false,
356 liveSyncDurationCount: 7, 356 liveSyncDurationCount: 5,
357 loader: new p2pMediaLoaderModule.Engine(p2pMediaLoaderConfig).createLoaderClass() 357 loader: new p2pMediaLoaderModule.Engine(p2pMediaLoaderConfig).createLoaderClass()
358 } 358 }
359 } 359 }
diff --git a/client/src/standalone/videos/embed.ts b/client/src/standalone/videos/embed.ts
index 995e8c277..9b07ef5e6 100644
--- a/client/src/standalone/videos/embed.ts
+++ b/client/src/standalone/videos/embed.ts
@@ -556,9 +556,9 @@ export class PeerTubeEmbed {
556 556
557 Object.assign(options, { 557 Object.assign(options, {
558 p2pMediaLoader: { 558 p2pMediaLoader: {
559 playlistUrl: hlsPlaylist.playlistUrl, 559 playlistUrl: 'http://localhost:9000/live/toto/master.m3u8',
560 segmentsSha256Url: hlsPlaylist.segmentsSha256Url, 560 segmentsSha256Url: hlsPlaylist.segmentsSha256Url,
561 redundancyBaseUrls: hlsPlaylist.redundancies.map(r => r.baseUrl), 561 redundancyBaseUrls: [],
562 trackerAnnounce: videoInfo.trackerUrls, 562 trackerAnnounce: videoInfo.trackerUrls,
563 videoFiles: hlsPlaylist.files 563 videoFiles: hlsPlaylist.files
564 } as P2PMediaLoaderOptions 564 } as P2PMediaLoaderOptions
diff --git a/config/default.yaml b/config/default.yaml
index 0c2d165be..7efaeb5a2 100644
--- a/config/default.yaml
+++ b/config/default.yaml
@@ -243,6 +243,24 @@ transcoding:
243 hls: 243 hls:
244 enabled: false 244 enabled: false
245 245
246live:
247 enabled: false
248
249 rtmp:
250 port: 1935
251
252 transcoding:
253 enabled: false
254 threads: 2
255
256 resolutions:
257 240p: false
258 360p: false
259 480p: false
260 720p: false
261 1080p: false
262 2160p: false
263
246import: 264import:
247 # Add ability for your users to import remote videos (from YouTube, torrent...) 265 # Add ability for your users to import remote videos (from YouTube, torrent...)
248 videos: 266 videos:
diff --git a/config/test.yaml b/config/test.yaml
index fb37ff8c7..b9279b5e6 100644
--- a/config/test.yaml
+++ b/config/test.yaml
@@ -37,24 +37,24 @@ log:
37 37
38contact_form: 38contact_form:
39 enabled: true 39 enabled: true
40 40#
41redundancy: 41#redundancy:
42 videos: 42# videos:
43 check_interval: '1 minute' 43# check_interval: '1 minute'
44 strategies: 44# strategies:
45 - 45# -
46 size: '1000MB' 46# size: '1000MB'
47 min_lifetime: '10 minutes' 47# min_lifetime: '10 minutes'
48 strategy: 'most-views' 48# strategy: 'most-views'
49 - 49# -
50 size: '1000MB' 50# size: '1000MB'
51 min_lifetime: '10 minutes' 51# min_lifetime: '10 minutes'
52 strategy: 'trending' 52# strategy: 'trending'
53 - 53# -
54 size: '1000MB' 54# size: '1000MB'
55 min_lifetime: '10 minutes' 55# min_lifetime: '10 minutes'
56 strategy: 'recently-added' 56# strategy: 'recently-added'
57 min_views: 1 57# min_views: 1
58 58
59cache: 59cache:
60 previews: 60 previews:
@@ -82,6 +82,24 @@ transcoding:
82 hls: 82 hls:
83 enabled: true 83 enabled: true
84 84
85live:
86 enabled: false
87
88 rtmp:
89 port: 1935
90
91 transcoding:
92 enabled: false
93 threads: 2
94
95 resolutions:
96 240p: false
97 360p: false
98 480p: false
99 720p: false
100 1080p: false
101 2160p: false
102
85import: 103import:
86 videos: 104 videos:
87 http: 105 http:
diff --git a/package.json b/package.json
index b08e5fe6c..15e55e978 100644
--- a/package.json
+++ b/package.json
@@ -92,6 +92,7 @@
92 "body-parser": "^1.12.4", 92 "body-parser": "^1.12.4",
93 "bull": "^3.4.2", 93 "bull": "^3.4.2",
94 "bytes": "^3.0.0", 94 "bytes": "^3.0.0",
95 "chokidar": "^3.4.2",
95 "commander": "^6.0.0", 96 "commander": "^6.0.0",
96 "config": "^3.0.0", 97 "config": "^3.0.0",
97 "cookie-parser": "^1.4.3", 98 "cookie-parser": "^1.4.3",
@@ -122,6 +123,7 @@
122 "memoizee": "^0.4.14", 123 "memoizee": "^0.4.14",
123 "morgan": "^1.5.3", 124 "morgan": "^1.5.3",
124 "multer": "^1.1.0", 125 "multer": "^1.1.0",
126 "node-media-server": "^2.1.4",
125 "nodemailer": "^6.0.0", 127 "nodemailer": "^6.0.0",
126 "oauth2-server": "3.1.0-beta.1", 128 "oauth2-server": "3.1.0-beta.1",
127 "parse-torrent": "^7.0.0", 129 "parse-torrent": "^7.0.0",
diff --git a/scripts/create-transcoding-job.ts b/scripts/create-transcoding-job.ts
index 7ee0050e3..78eb455aa 100755
--- a/scripts/create-transcoding-job.ts
+++ b/scripts/create-transcoding-job.ts
@@ -43,7 +43,7 @@ async function run () {
43 if (program.generateHls) { 43 if (program.generateHls) {
44 const resolutionsEnabled = program.resolution 44 const resolutionsEnabled = program.resolution
45 ? [ program.resolution ] 45 ? [ program.resolution ]
46 : computeResolutionsToTranscode(videoFileResolution).concat([ videoFileResolution ]) 46 : computeResolutionsToTranscode(videoFileResolution, 'vod').concat([ videoFileResolution ])
47 47
48 for (const resolution of resolutionsEnabled) { 48 for (const resolution of resolutionsEnabled) {
49 dataInput.push({ 49 dataInput.push({
diff --git a/scripts/update-host.ts b/scripts/update-host.ts
index 2efe326a2..d2fb19c76 100755
--- a/scripts/update-host.ts
+++ b/scripts/update-host.ts
@@ -130,7 +130,7 @@ async function run () {
130 130
131 for (const playlist of video.VideoStreamingPlaylists) { 131 for (const playlist of video.VideoStreamingPlaylists) {
132 playlist.playlistUrl = WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsMasterPlaylistStaticPath(video.uuid) 132 playlist.playlistUrl = WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsMasterPlaylistStaticPath(video.uuid)
133 playlist.segmentsSha256Url = WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsSha256SegmentsStaticPath(video.uuid) 133 playlist.segmentsSha256Url = WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsSha256SegmentsStaticPath(video.uuid, video.isLive)
134 134
135 await playlist.save() 135 await playlist.save()
136 } 136 }
diff --git a/server.ts b/server.ts
index e83fabb98..e2ff6327b 100644
--- a/server.ts
+++ b/server.ts
@@ -98,10 +98,12 @@ import {
98 staticRouter, 98 staticRouter,
99 lazyStaticRouter, 99 lazyStaticRouter,
100 servicesRouter, 100 servicesRouter,
101 liveRouter,
101 pluginsRouter, 102 pluginsRouter,
102 webfingerRouter, 103 webfingerRouter,
103 trackerRouter, 104 trackerRouter,
104 createWebsocketTrackerServer, botsRouter 105 createWebsocketTrackerServer,
106 botsRouter
105} from './server/controllers' 107} from './server/controllers'
106import { advertiseDoNotTrack } from './server/middlewares/dnt' 108import { advertiseDoNotTrack } from './server/middlewares/dnt'
107import { Redis } from './server/lib/redis' 109import { Redis } from './server/lib/redis'
@@ -119,6 +121,7 @@ import { updateStreamingPlaylistsInfohashesIfNeeded } from './server/lib/hls'
119import { PluginsCheckScheduler } from './server/lib/schedulers/plugins-check-scheduler' 121import { PluginsCheckScheduler } from './server/lib/schedulers/plugins-check-scheduler'
120import { Hooks } from './server/lib/plugins/hooks' 122import { Hooks } from './server/lib/plugins/hooks'
121import { PluginManager } from './server/lib/plugins/plugin-manager' 123import { PluginManager } from './server/lib/plugins/plugin-manager'
124import { LiveManager } from '@server/lib/live-manager'
122 125
123// ----------- Command line ----------- 126// ----------- Command line -----------
124 127
@@ -139,14 +142,14 @@ if (isTestInstance()) {
139} 142}
140 143
141// For the logger 144// For the logger
142morgan.token<express.Request>('remote-addr', req => { 145morgan.token('remote-addr', req => {
143 if (CONFIG.LOG.ANONYMIZE_IP === true || req.get('DNT') === '1') { 146 if (CONFIG.LOG.ANONYMIZE_IP === true || req.get('DNT') === '1') {
144 return anonymize(req.ip, 16, 16) 147 return anonymize(req.ip, 16, 16)
145 } 148 }
146 149
147 return req.ip 150 return req.ip
148}) 151})
149morgan.token<express.Request>('user-agent', req => { 152morgan.token('user-agent', req => {
150 if (req.get('DNT') === '1') { 153 if (req.get('DNT') === '1') {
151 return useragent.parse(req.get('user-agent')).family 154 return useragent.parse(req.get('user-agent')).family
152 } 155 }
@@ -183,6 +186,9 @@ app.use(apiRoute, apiRouter)
183// Services (oembed...) 186// Services (oembed...)
184app.use('/services', servicesRouter) 187app.use('/services', servicesRouter)
185 188
189// Live streaming
190app.use('/live', liveRouter)
191
186// Plugins & themes 192// Plugins & themes
187app.use('/', pluginsRouter) 193app.use('/', pluginsRouter)
188 194
@@ -271,6 +277,9 @@ async function startApplication () {
271 277
272 if (cli.plugins) await PluginManager.Instance.registerPluginsAndThemes() 278 if (cli.plugins) await PluginManager.Instance.registerPluginsAndThemes()
273 279
280 LiveManager.Instance.init()
281 if (CONFIG.LIVE.ENABLED) LiveManager.Instance.run()
282
274 // Make server listening 283 // Make server listening
275 server.listen(port, hostname, () => { 284 server.listen(port, hostname, () => {
276 logger.info('Server listening on %s:%d', hostname, port) 285 logger.info('Server listening on %s:%d', hostname, port)
diff --git a/server/assets/default-live-background.jpg b/server/assets/default-live-background.jpg
new file mode 100644
index 000000000..2743af7fc
--- /dev/null
+++ b/server/assets/default-live-background.jpg
Binary files differ
diff --git a/server/controllers/api/config.ts b/server/controllers/api/config.ts
index b80ea4902..bd100ef9c 100644
--- a/server/controllers/api/config.ts
+++ b/server/controllers/api/config.ts
@@ -113,7 +113,15 @@ async function getConfig (req: express.Request, res: express.Response) {
113 webtorrent: { 113 webtorrent: {
114 enabled: CONFIG.TRANSCODING.WEBTORRENT.ENABLED 114 enabled: CONFIG.TRANSCODING.WEBTORRENT.ENABLED
115 }, 115 },
116 enabledResolutions: getEnabledResolutions() 116 enabledResolutions: getEnabledResolutions('vod')
117 },
118 live: {
119 enabled: CONFIG.LIVE.ENABLED,
120
121 transcoding: {
122 enabled: CONFIG.LIVE.TRANSCODING.ENABLED,
123 enabledResolutions: getEnabledResolutions('live')
124 }
117 }, 125 },
118 import: { 126 import: {
119 videos: { 127 videos: {
@@ -232,7 +240,7 @@ async function deleteCustomConfig (req: express.Request, res: express.Response)
232 240
233 const data = customConfig() 241 const data = customConfig()
234 242
235 return res.json(data).end() 243 return res.json(data)
236} 244}
237 245
238async function updateCustomConfig (req: express.Request, res: express.Response) { 246async function updateCustomConfig (req: express.Request, res: express.Response) {
@@ -254,7 +262,7 @@ async function updateCustomConfig (req: express.Request, res: express.Response)
254 oldCustomConfigAuditKeys 262 oldCustomConfigAuditKeys
255 ) 263 )
256 264
257 return res.json(data).end() 265 return res.json(data)
258} 266}
259 267
260function getRegisteredThemes () { 268function getRegisteredThemes () {
@@ -268,9 +276,13 @@ function getRegisteredThemes () {
268 })) 276 }))
269} 277}
270 278
271function getEnabledResolutions () { 279function getEnabledResolutions (type: 'vod' | 'live') {
272 return Object.keys(CONFIG.TRANSCODING.RESOLUTIONS) 280 const transcoding = type === 'vod'
273 .filter(key => CONFIG.TRANSCODING.ENABLED && CONFIG.TRANSCODING.RESOLUTIONS[key] === true) 281 ? CONFIG.TRANSCODING
282 : CONFIG.LIVE.TRANSCODING
283
284 return Object.keys(transcoding.RESOLUTIONS)
285 .filter(key => transcoding.ENABLED && transcoding.RESOLUTIONS[key] === true)
274 .map(r => parseInt(r, 10)) 286 .map(r => parseInt(r, 10))
275} 287}
276 288
@@ -411,6 +423,21 @@ function customConfig (): CustomConfig {
411 enabled: CONFIG.TRANSCODING.HLS.ENABLED 423 enabled: CONFIG.TRANSCODING.HLS.ENABLED
412 } 424 }
413 }, 425 },
426 live: {
427 enabled: CONFIG.LIVE.ENABLED,
428 transcoding: {
429 enabled: CONFIG.LIVE.TRANSCODING.ENABLED,
430 threads: CONFIG.LIVE.TRANSCODING.THREADS,
431 resolutions: {
432 '240p': CONFIG.LIVE.TRANSCODING.RESOLUTIONS['240p'],
433 '360p': CONFIG.LIVE.TRANSCODING.RESOLUTIONS['360p'],
434 '480p': CONFIG.LIVE.TRANSCODING.RESOLUTIONS['480p'],
435 '720p': CONFIG.LIVE.TRANSCODING.RESOLUTIONS['720p'],
436 '1080p': CONFIG.LIVE.TRANSCODING.RESOLUTIONS['1080p'],
437 '2160p': CONFIG.LIVE.TRANSCODING.RESOLUTIONS['2160p']
438 }
439 }
440 },
414 import: { 441 import: {
415 videos: { 442 videos: {
416 http: { 443 http: {
diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts
index 15b6f214f..94f0361ee 100644
--- a/server/controllers/api/videos/index.ts
+++ b/server/controllers/api/videos/index.ts
@@ -63,6 +63,7 @@ import { blacklistRouter } from './blacklist'
63import { videoCaptionsRouter } from './captions' 63import { videoCaptionsRouter } from './captions'
64import { videoCommentRouter } from './comment' 64import { videoCommentRouter } from './comment'
65import { videoImportsRouter } from './import' 65import { videoImportsRouter } from './import'
66import { liveRouter } from './live'
66import { ownershipVideoRouter } from './ownership' 67import { ownershipVideoRouter } from './ownership'
67import { rateVideoRouter } from './rate' 68import { rateVideoRouter } from './rate'
68import { watchingRouter } from './watching' 69import { watchingRouter } from './watching'
@@ -96,6 +97,7 @@ videosRouter.use('/', videoCaptionsRouter)
96videosRouter.use('/', videoImportsRouter) 97videosRouter.use('/', videoImportsRouter)
97videosRouter.use('/', ownershipVideoRouter) 98videosRouter.use('/', ownershipVideoRouter)
98videosRouter.use('/', watchingRouter) 99videosRouter.use('/', watchingRouter)
100videosRouter.use('/', liveRouter)
99 101
100videosRouter.get('/categories', listVideoCategories) 102videosRouter.get('/categories', listVideoCategories)
101videosRouter.get('/licences', listVideoLicences) 103videosRouter.get('/licences', listVideoLicences)
@@ -304,7 +306,7 @@ async function addVideo (req: express.Request, res: express.Response) {
304 id: videoCreated.id, 306 id: videoCreated.id,
305 uuid: videoCreated.uuid 307 uuid: videoCreated.uuid
306 } 308 }
307 }).end() 309 })
308} 310}
309 311
310async function updateVideo (req: express.Request, res: express.Response) { 312async function updateVideo (req: express.Request, res: express.Response) {
diff --git a/server/controllers/api/videos/live.ts b/server/controllers/api/videos/live.ts
new file mode 100644
index 000000000..d08ef9869
--- /dev/null
+++ b/server/controllers/api/videos/live.ts
@@ -0,0 +1,116 @@
1import * as express from 'express'
2import { v4 as uuidv4 } from 'uuid'
3import { createReqFiles } from '@server/helpers/express-utils'
4import { CONFIG } from '@server/initializers/config'
5import { ASSETS_PATH, MIMETYPES } from '@server/initializers/constants'
6import { getVideoActivityPubUrl } from '@server/lib/activitypub/url'
7import { videoLiveAddValidator, videoLiveGetValidator } from '@server/middlewares/validators/videos/video-live'
8import { VideoLiveModel } from '@server/models/video/video-live'
9import { MVideoDetails, MVideoFullLight } from '@server/types/models'
10import { VideoCreate, VideoPrivacy, VideoState } from '../../../../shared'
11import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type'
12import { logger } from '../../../helpers/logger'
13import { sequelizeTypescript } from '../../../initializers/database'
14import { createVideoMiniatureFromExisting } from '../../../lib/thumbnail'
15import { asyncMiddleware, asyncRetryTransactionMiddleware, authenticate } from '../../../middlewares'
16import { TagModel } from '../../../models/video/tag'
17import { VideoModel } from '../../../models/video/video'
18import { buildLocalVideoFromCreate } from '@server/lib/video'
19
20const liveRouter = express.Router()
21
22const reqVideoFileLive = createReqFiles(
23 [ 'thumbnailfile', 'previewfile' ],
24 MIMETYPES.IMAGE.MIMETYPE_EXT,
25 {
26 thumbnailfile: CONFIG.STORAGE.TMP_DIR,
27 previewfile: CONFIG.STORAGE.TMP_DIR
28 }
29)
30
31liveRouter.post('/live',
32 authenticate,
33 reqVideoFileLive,
34 asyncMiddleware(videoLiveAddValidator),
35 asyncRetryTransactionMiddleware(addLiveVideo)
36)
37
38liveRouter.get('/live/:videoId',
39 authenticate,
40 asyncMiddleware(videoLiveGetValidator),
41 asyncRetryTransactionMiddleware(getVideoLive)
42)
43
44// ---------------------------------------------------------------------------
45
46export {
47 liveRouter
48}
49
50// ---------------------------------------------------------------------------
51
52async function getVideoLive (req: express.Request, res: express.Response) {
53 const videoLive = res.locals.videoLive
54
55 return res.json(videoLive.toFormattedJSON())
56}
57
58async function addLiveVideo (req: express.Request, res: express.Response) {
59 const videoInfo: VideoCreate = req.body
60
61 // Prepare data so we don't block the transaction
62 const videoData = buildLocalVideoFromCreate(videoInfo, res.locals.videoChannel.id)
63 videoData.isLive = true
64
65 const videoLive = new VideoLiveModel()
66 videoLive.streamKey = uuidv4()
67
68 const video = new VideoModel(videoData) as MVideoDetails
69 video.url = getVideoActivityPubUrl(video) // We use the UUID, so set the URL after building the object
70
71 // Process thumbnail or create it from the video
72 const thumbnailField = req.files ? req.files['thumbnailfile'] : null
73 const thumbnailModel = thumbnailField
74 ? await createVideoMiniatureFromExisting(thumbnailField[0].path, video, ThumbnailType.MINIATURE, false)
75 : await createVideoMiniatureFromExisting(ASSETS_PATH.DEFAULT_LIVE_BACKGROUND, video, ThumbnailType.MINIATURE, true)
76
77 // Process preview or create it from the video
78 const previewField = req.files ? req.files['previewfile'] : null
79 const previewModel = previewField
80 ? await createVideoMiniatureFromExisting(previewField[0].path, video, ThumbnailType.PREVIEW, false)
81 : await createVideoMiniatureFromExisting(ASSETS_PATH.DEFAULT_LIVE_BACKGROUND, video, ThumbnailType.PREVIEW, true)
82
83 const { videoCreated } = await sequelizeTypescript.transaction(async t => {
84 const sequelizeOptions = { transaction: t }
85
86 const videoCreated = await video.save(sequelizeOptions) as MVideoFullLight
87
88 if (thumbnailModel) await videoCreated.addAndSaveThumbnail(thumbnailModel, t)
89 if (previewModel) await videoCreated.addAndSaveThumbnail(previewModel, t)
90
91 // Do not forget to add video channel information to the created video
92 videoCreated.VideoChannel = res.locals.videoChannel
93
94 videoLive.videoId = videoCreated.id
95 await videoLive.save(sequelizeOptions)
96
97 // Create tags
98 if (videoInfo.tags !== undefined) {
99 const tagInstances = await TagModel.findOrCreateTags(videoInfo.tags, t)
100
101 await video.$set('Tags', tagInstances, sequelizeOptions)
102 video.Tags = tagInstances
103 }
104
105 logger.info('Video live %s with uuid %s created.', videoInfo.name, videoCreated.uuid)
106
107 return { videoCreated }
108 })
109
110 return res.json({
111 video: {
112 id: videoCreated.id,
113 uuid: videoCreated.uuid
114 }
115 })
116}
diff --git a/server/controllers/index.ts b/server/controllers/index.ts
index 0d64b33bb..5a199ae9c 100644
--- a/server/controllers/index.ts
+++ b/server/controllers/index.ts
@@ -5,6 +5,7 @@ export * from './feeds'
5export * from './services' 5export * from './services'
6export * from './static' 6export * from './static'
7export * from './lazy-static' 7export * from './lazy-static'
8export * from './live'
8export * from './webfinger' 9export * from './webfinger'
9export * from './tracker' 10export * from './tracker'
10export * from './bots' 11export * from './bots'
diff --git a/server/controllers/live.ts b/server/controllers/live.ts
new file mode 100644
index 000000000..fa4c2cc1a
--- /dev/null
+++ b/server/controllers/live.ts
@@ -0,0 +1,29 @@
1import * as express from 'express'
2import { mapToJSON } from '@server/helpers/core-utils'
3import { LiveManager } from '@server/lib/live-manager'
4
5const liveRouter = express.Router()
6
7liveRouter.use('/segments-sha256/:videoUUID',
8 getSegmentsSha256
9)
10
11// ---------------------------------------------------------------------------
12
13export {
14 liveRouter
15}
16
17// ---------------------------------------------------------------------------
18
19function getSegmentsSha256 (req: express.Request, res: express.Response) {
20 const videoUUID = req.params.videoUUID
21
22 const result = LiveManager.Instance.getSegmentsSha256(videoUUID)
23
24 if (!result) {
25 return res.sendStatus(404)
26 }
27
28 return res.json(mapToJSON(result))
29}
diff --git a/server/controllers/static.ts b/server/controllers/static.ts
index 3f7bbdbae..e04c27b11 100644
--- a/server/controllers/static.ts
+++ b/server/controllers/static.ts
@@ -260,7 +260,14 @@ async function generateNodeinfo (req: express.Request, res: express.Response) {
260 webtorrent: { 260 webtorrent: {
261 enabled: CONFIG.TRANSCODING.WEBTORRENT.ENABLED 261 enabled: CONFIG.TRANSCODING.WEBTORRENT.ENABLED
262 }, 262 },
263 enabledResolutions: getEnabledResolutions() 263 enabledResolutions: getEnabledResolutions('vod')
264 },
265 live: {
266 enabled: CONFIG.LIVE.ENABLED,
267 transcoding: {
268 enabled: CONFIG.LIVE.TRANSCODING.ENABLED,
269 enabledResolutions: getEnabledResolutions('live')
270 }
264 }, 271 },
265 import: { 272 import: {
266 videos: { 273 videos: {
diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts
index b1f5d9610..49eee7c59 100644
--- a/server/helpers/core-utils.ts
+++ b/server/helpers/core-utils.ts
@@ -175,6 +175,16 @@ function pageToStartAndCount (page: number, itemsPerPage: number) {
175 return { start, count: itemsPerPage } 175 return { start, count: itemsPerPage }
176} 176}
177 177
178function mapToJSON (map: Map<any, any>) {
179 const obj: any = {}
180
181 for (const [ k, v ] of map) {
182 obj[k] = v
183 }
184
185 return obj
186}
187
178function buildPath (path: string) { 188function buildPath (path: string) {
179 if (isAbsolute(path)) return path 189 if (isAbsolute(path)) return path
180 190
@@ -263,6 +273,7 @@ export {
263 273
264 sha256, 274 sha256,
265 sha1, 275 sha1,
276 mapToJSON,
266 277
267 promisify0, 278 promisify0,
268 promisify1, 279 promisify1,
diff --git a/server/helpers/custom-validators/videos.ts b/server/helpers/custom-validators/videos.ts
index 40fecc09b..e99992236 100644
--- a/server/helpers/custom-validators/videos.ts
+++ b/server/helpers/custom-validators/videos.ts
@@ -8,7 +8,8 @@ import {
8 VIDEO_LICENCES, 8 VIDEO_LICENCES,
9 VIDEO_PRIVACIES, 9 VIDEO_PRIVACIES,
10 VIDEO_RATE_TYPES, 10 VIDEO_RATE_TYPES,
11 VIDEO_STATES 11 VIDEO_STATES,
12 VIDEO_LIVE
12} from '../../initializers/constants' 13} from '../../initializers/constants'
13import { exists, isArray, isDateValid, isFileValid } from './misc' 14import { exists, isArray, isDateValid, isFileValid } from './misc'
14import * as magnetUtil from 'magnet-uri' 15import * as magnetUtil from 'magnet-uri'
@@ -77,7 +78,7 @@ function isVideoRatingTypeValid (value: string) {
77} 78}
78 79
79function isVideoFileExtnameValid (value: string) { 80function isVideoFileExtnameValid (value: string) {
80 return exists(value) && MIMETYPES.VIDEO.EXT_MIMETYPE[value] !== undefined 81 return exists(value) && (value === VIDEO_LIVE.EXTENSION || MIMETYPES.VIDEO.EXT_MIMETYPE[value] !== undefined)
81} 82}
82 83
83function isVideoFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) { 84function isVideoFile (files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[]) {
diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts
index 02c66cd01..fac2595f1 100644
--- a/server/helpers/ffmpeg-utils.ts
+++ b/server/helpers/ffmpeg-utils.ts
@@ -1,13 +1,13 @@
1import * as ffmpeg from 'fluent-ffmpeg' 1import * as ffmpeg from 'fluent-ffmpeg'
2import { readFile, remove, writeFile } from 'fs-extra'
2import { dirname, join } from 'path' 3import { dirname, join } from 'path'
4import { VideoFileMetadata } from '@shared/models/videos/video-file-metadata'
3import { getMaxBitrate, getTargetBitrate, VideoResolution } from '../../shared/models/videos' 5import { getMaxBitrate, getTargetBitrate, VideoResolution } from '../../shared/models/videos'
6import { checkFFmpegEncoders } from '../initializers/checker-before-init'
7import { CONFIG } from '../initializers/config'
4import { FFMPEG_NICE, VIDEO_TRANSCODING_FPS } from '../initializers/constants' 8import { FFMPEG_NICE, VIDEO_TRANSCODING_FPS } from '../initializers/constants'
5import { processImage } from './image-utils' 9import { processImage } from './image-utils'
6import { logger } from './logger' 10import { logger } from './logger'
7import { checkFFmpegEncoders } from '../initializers/checker-before-init'
8import { readFile, remove, writeFile } from 'fs-extra'
9import { CONFIG } from '../initializers/config'
10import { VideoFileMetadata } from '@shared/models/videos/video-file-metadata'
11 11
12/** 12/**
13 * A toolbox to play with audio 13 * A toolbox to play with audio
@@ -74,9 +74,12 @@ namespace audio {
74 } 74 }
75} 75}
76 76
77function computeResolutionsToTranscode (videoFileResolution: number) { 77function computeResolutionsToTranscode (videoFileResolution: number, type: 'vod' | 'live') {
78 const configResolutions = type === 'vod'
79 ? CONFIG.TRANSCODING.RESOLUTIONS
80 : CONFIG.LIVE.TRANSCODING.RESOLUTIONS
81
78 const resolutionsEnabled: number[] = [] 82 const resolutionsEnabled: number[] = []
79 const configResolutions = CONFIG.TRANSCODING.RESOLUTIONS
80 83
81 // Put in the order we want to proceed jobs 84 // Put in the order we want to proceed jobs
82 const resolutions = [ 85 const resolutions = [
@@ -270,14 +273,13 @@ type TranscodeOptions =
270function transcode (options: TranscodeOptions) { 273function transcode (options: TranscodeOptions) {
271 return new Promise<void>(async (res, rej) => { 274 return new Promise<void>(async (res, rej) => {
272 try { 275 try {
273 // we set cwd explicitly because ffmpeg appears to create temporary files when trancoding which fails in read-only file systems 276 let command = getFFmpeg(options.inputPath)
274 let command = ffmpeg(options.inputPath, { niceness: FFMPEG_NICE.TRANSCODING, cwd: CONFIG.STORAGE.TMP_DIR })
275 .output(options.outputPath) 277 .output(options.outputPath)
276 278
277 if (options.type === 'quick-transcode') { 279 if (options.type === 'quick-transcode') {
278 command = buildQuickTranscodeCommand(command) 280 command = buildQuickTranscodeCommand(command)
279 } else if (options.type === 'hls') { 281 } else if (options.type === 'hls') {
280 command = await buildHLSCommand(command, options) 282 command = await buildHLSVODCommand(command, options)
281 } else if (options.type === 'merge-audio') { 283 } else if (options.type === 'merge-audio') {
282 command = await buildAudioMergeCommand(command, options) 284 command = await buildAudioMergeCommand(command, options)
283 } else if (options.type === 'only-audio') { 285 } else if (options.type === 'only-audio') {
@@ -286,11 +288,6 @@ function transcode (options: TranscodeOptions) {
286 command = await buildx264Command(command, options) 288 command = await buildx264Command(command, options)
287 } 289 }
288 290
289 if (CONFIG.TRANSCODING.THREADS > 0) {
290 // if we don't set any threads ffmpeg will chose automatically
291 command = command.outputOption('-threads ' + CONFIG.TRANSCODING.THREADS)
292 }
293
294 command 291 command
295 .on('error', (err, stdout, stderr) => { 292 .on('error', (err, stdout, stderr) => {
296 logger.error('Error in transcoding job.', { stdout, stderr }) 293 logger.error('Error in transcoding job.', { stdout, stderr })
@@ -356,16 +353,89 @@ function convertWebPToJPG (path: string, destination: string): Promise<void> {
356 }) 353 })
357} 354}
358 355
356function runLiveTranscoding (rtmpUrl: string, outPath: string, resolutions: number[]) {
357 const command = getFFmpeg(rtmpUrl)
358 command.inputOption('-fflags nobuffer')
359
360 const varStreamMap: string[] = []
361
362 command.complexFilter([
363 {
364 inputs: '[v:0]',
365 filter: 'split',
366 options: resolutions.length,
367 outputs: resolutions.map(r => `vtemp${r}`)
368 },
369
370 ...resolutions.map(r => ({
371 inputs: `vtemp${r}`,
372 filter: 'scale',
373 options: `w=-2:h=${r}`,
374 outputs: `vout${r}`
375 }))
376 ])
377
378 const liveFPS = VIDEO_TRANSCODING_FPS.AVERAGE
379
380 command.withFps(liveFPS)
381
382 command.outputOption('-b_strategy 1')
383 command.outputOption('-bf 16')
384 command.outputOption('-preset superfast')
385 command.outputOption('-level 3.1')
386 command.outputOption('-map_metadata -1')
387 command.outputOption('-pix_fmt yuv420p')
388
389 for (let i = 0; i < resolutions.length; i++) {
390 const resolution = resolutions[i]
391
392 command.outputOption(`-map [vout${resolution}]`)
393 command.outputOption(`-c:v:${i} libx264`)
394 command.outputOption(`-b:v:${i} ${getTargetBitrate(resolution, liveFPS, VIDEO_TRANSCODING_FPS)}`)
395
396 command.outputOption(`-map a:0`)
397 command.outputOption(`-c:a:${i} aac`)
398
399 varStreamMap.push(`v:${i},a:${i}`)
400 }
401
402 addDefaultLiveHLSParams(command, outPath)
403
404 command.outputOption('-var_stream_map', varStreamMap.join(' '))
405
406 command.run()
407
408 return command
409}
410
411function runLiveMuxing (rtmpUrl: string, outPath: string) {
412 const command = getFFmpeg(rtmpUrl)
413 command.inputOption('-fflags nobuffer')
414
415 command.outputOption('-c:v copy')
416 command.outputOption('-c:a copy')
417 command.outputOption('-map 0:a?')
418 command.outputOption('-map 0:v?')
419
420 addDefaultLiveHLSParams(command, outPath)
421
422 command.run()
423
424 return command
425}
426
359// --------------------------------------------------------------------------- 427// ---------------------------------------------------------------------------
360 428
361export { 429export {
362 getVideoStreamCodec, 430 getVideoStreamCodec,
363 getAudioStreamCodec, 431 getAudioStreamCodec,
432 runLiveMuxing,
364 convertWebPToJPG, 433 convertWebPToJPG,
365 getVideoStreamSize, 434 getVideoStreamSize,
366 getVideoFileResolution, 435 getVideoFileResolution,
367 getMetadataFromFile, 436 getMetadataFromFile,
368 getDurationFromVideoFile, 437 getDurationFromVideoFile,
438 runLiveTranscoding,
369 generateImageFromVideoFile, 439 generateImageFromVideoFile,
370 TranscodeOptions, 440 TranscodeOptions,
371 TranscodeOptionsType, 441 TranscodeOptionsType,
@@ -379,6 +449,25 @@ export {
379 449
380// --------------------------------------------------------------------------- 450// ---------------------------------------------------------------------------
381 451
452function addDefaultX264Params (command: ffmpeg.FfmpegCommand) {
453 command.outputOption('-level 3.1') // 3.1 is the minimal resource allocation for our highest supported resolution
454 .outputOption('-b_strategy 1') // NOTE: b-strategy 1 - heuristic algorithm, 16 is optimal B-frames for it
455 .outputOption('-bf 16') // NOTE: Why 16: https://github.com/Chocobozzz/PeerTube/pull/774. b-strategy 2 -> B-frames<16
456 .outputOption('-pix_fmt yuv420p') // allows import of source material with incompatible pixel formats (e.g. MJPEG video)
457 .outputOption('-map_metadata -1') // strip all metadata
458}
459
460function addDefaultLiveHLSParams (command: ffmpeg.FfmpegCommand, outPath: string) {
461 command.outputOption('-hls_time 4')
462 command.outputOption('-hls_list_size 15')
463 command.outputOption('-hls_flags delete_segments')
464 command.outputOption(`-hls_segment_filename ${join(outPath, '%v-%d.ts')}`)
465 command.outputOption('-master_pl_name master.m3u8')
466 command.outputOption(`-f hls`)
467
468 command.output(join(outPath, '%v.m3u8'))
469}
470
382async function buildx264Command (command: ffmpeg.FfmpegCommand, options: TranscodeOptions) { 471async function buildx264Command (command: ffmpeg.FfmpegCommand, options: TranscodeOptions) {
383 let fps = await getVideoFileFPS(options.inputPath) 472 let fps = await getVideoFileFPS(options.inputPath)
384 if ( 473 if (
@@ -438,7 +527,7 @@ function buildQuickTranscodeCommand (command: ffmpeg.FfmpegCommand) {
438 return command 527 return command
439} 528}
440 529
441async function buildHLSCommand (command: ffmpeg.FfmpegCommand, options: HLSTranscodeOptions) { 530async function buildHLSVODCommand (command: ffmpeg.FfmpegCommand, options: HLSTranscodeOptions) {
442 const videoPath = getHLSVideoPath(options) 531 const videoPath = getHLSVideoPath(options)
443 532
444 if (options.copyCodecs) command = presetCopy(command) 533 if (options.copyCodecs) command = presetCopy(command)
@@ -508,13 +597,10 @@ async function presetH264 (command: ffmpeg.FfmpegCommand, input: string, resolut
508 let localCommand = command 597 let localCommand = command
509 .format('mp4') 598 .format('mp4')
510 .videoCodec('libx264') 599 .videoCodec('libx264')
511 .outputOption('-level 3.1') // 3.1 is the minimal resource allocation for our highest supported resolution
512 .outputOption('-b_strategy 1') // NOTE: b-strategy 1 - heuristic algorithm, 16 is optimal B-frames for it
513 .outputOption('-bf 16') // NOTE: Why 16: https://github.com/Chocobozzz/PeerTube/pull/774. b-strategy 2 -> B-frames<16
514 .outputOption('-pix_fmt yuv420p') // allows import of source material with incompatible pixel formats (e.g. MJPEG video)
515 .outputOption('-map_metadata -1') // strip all metadata
516 .outputOption('-movflags faststart') 600 .outputOption('-movflags faststart')
517 601
602 addDefaultX264Params(localCommand)
603
518 const parsedAudio = await audio.get(input) 604 const parsedAudio = await audio.get(input)
519 605
520 if (!parsedAudio.audioStream) { 606 if (!parsedAudio.audioStream) {
@@ -565,3 +651,15 @@ function presetOnlyAudio (command: ffmpeg.FfmpegCommand): ffmpeg.FfmpegCommand {
565 .audioCodec('copy') 651 .audioCodec('copy')
566 .noVideo() 652 .noVideo()
567} 653}
654
655function getFFmpeg (input: string) {
656 // We set cwd explicitly because ffmpeg appears to create temporary files when trancoding which fails in read-only file systems
657 const command = ffmpeg(input, { niceness: FFMPEG_NICE.TRANSCODING, cwd: CONFIG.STORAGE.TMP_DIR })
658
659 if (CONFIG.TRANSCODING.THREADS > 0) {
660 // If we don't set any threads ffmpeg will chose automatically
661 command.outputOption('-threads ' + CONFIG.TRANSCODING.THREADS)
662 }
663
664 return command
665}
diff --git a/server/initializers/config.ts b/server/initializers/config.ts
index b40e525a5..7a8200ed9 100644
--- a/server/initializers/config.ts
+++ b/server/initializers/config.ts
@@ -198,6 +198,27 @@ const CONFIG = {
198 get ENABLED () { return config.get<boolean>('transcoding.webtorrent.enabled') } 198 get ENABLED () { return config.get<boolean>('transcoding.webtorrent.enabled') }
199 } 199 }
200 }, 200 },
201 LIVE: {
202 get ENABLED () { return config.get<boolean>('live.enabled') },
203
204 RTMP: {
205 get PORT () { return config.get<number>('live.rtmp.port') }
206 },
207
208 TRANSCODING: {
209 get ENABLED () { return config.get<boolean>('live.transcoding.enabled') },
210 get THREADS () { return config.get<number>('live.transcoding.threads') },
211
212 RESOLUTIONS: {
213 get '240p' () { return config.get<boolean>('live.transcoding.resolutions.240p') },
214 get '360p' () { return config.get<boolean>('live.transcoding.resolutions.360p') },
215 get '480p' () { return config.get<boolean>('live.transcoding.resolutions.480p') },
216 get '720p' () { return config.get<boolean>('live.transcoding.resolutions.720p') },
217 get '1080p' () { return config.get<boolean>('live.transcoding.resolutions.1080p') },
218 get '2160p' () { return config.get<boolean>('live.transcoding.resolutions.2160p') }
219 }
220 }
221 },
201 IMPORT: { 222 IMPORT: {
202 VIDEOS: { 223 VIDEOS: {
203 HTTP: { 224 HTTP: {
diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts
index 171e9e9c2..606eeba2d 100644
--- a/server/initializers/constants.ts
+++ b/server/initializers/constants.ts
@@ -23,7 +23,7 @@ import { CONFIG, registerConfigChangedHandler } from './config'
23 23
24// --------------------------------------------------------------------------- 24// ---------------------------------------------------------------------------
25 25
26const LAST_MIGRATION_VERSION = 530 26const LAST_MIGRATION_VERSION = 540
27 27
28// --------------------------------------------------------------------------- 28// ---------------------------------------------------------------------------
29 29
@@ -50,7 +50,8 @@ const WEBSERVER = {
50 SCHEME: '', 50 SCHEME: '',
51 WS: '', 51 WS: '',
52 HOSTNAME: '', 52 HOSTNAME: '',
53 PORT: 0 53 PORT: 0,
54 RTMP_URL: ''
54} 55}
55 56
56// Sortable columns per schema 57// Sortable columns per schema
@@ -264,7 +265,7 @@ const CONSTRAINTS_FIELDS = {
264 VIEWS: { min: 0 }, 265 VIEWS: { min: 0 },
265 LIKES: { min: 0 }, 266 LIKES: { min: 0 },
266 DISLIKES: { min: 0 }, 267 DISLIKES: { min: 0 },
267 FILE_SIZE: { min: 10 }, 268 FILE_SIZE: { min: -1 },
268 URL: { min: 3, max: 2000 } // Length 269 URL: { min: 3, max: 2000 } // Length
269 }, 270 },
270 VIDEO_PLAYLISTS: { 271 VIDEO_PLAYLISTS: {
@@ -370,39 +371,41 @@ const VIDEO_LICENCES = {
370 371
371const VIDEO_LANGUAGES: { [id: string]: string } = {} 372const VIDEO_LANGUAGES: { [id: string]: string } = {}
372 373
373const VIDEO_PRIVACIES = { 374const VIDEO_PRIVACIES: { [ id in VideoPrivacy ]: string } = {
374 [VideoPrivacy.PUBLIC]: 'Public', 375 [VideoPrivacy.PUBLIC]: 'Public',
375 [VideoPrivacy.UNLISTED]: 'Unlisted', 376 [VideoPrivacy.UNLISTED]: 'Unlisted',
376 [VideoPrivacy.PRIVATE]: 'Private', 377 [VideoPrivacy.PRIVATE]: 'Private',
377 [VideoPrivacy.INTERNAL]: 'Internal' 378 [VideoPrivacy.INTERNAL]: 'Internal'
378} 379}
379 380
380const VIDEO_STATES = { 381const VIDEO_STATES: { [ id in VideoState ]: string } = {
381 [VideoState.PUBLISHED]: 'Published', 382 [VideoState.PUBLISHED]: 'Published',
382 [VideoState.TO_TRANSCODE]: 'To transcode', 383 [VideoState.TO_TRANSCODE]: 'To transcode',
383 [VideoState.TO_IMPORT]: 'To import' 384 [VideoState.TO_IMPORT]: 'To import',
385 [VideoState.WAITING_FOR_LIVE]: 'Waiting for livestream',
386 [VideoState.LIVE_ENDED]: 'Livestream ended'
384} 387}
385 388
386const VIDEO_IMPORT_STATES = { 389const VIDEO_IMPORT_STATES: { [ id in VideoImportState ]: string } = {
387 [VideoImportState.FAILED]: 'Failed', 390 [VideoImportState.FAILED]: 'Failed',
388 [VideoImportState.PENDING]: 'Pending', 391 [VideoImportState.PENDING]: 'Pending',
389 [VideoImportState.SUCCESS]: 'Success', 392 [VideoImportState.SUCCESS]: 'Success',
390 [VideoImportState.REJECTED]: 'Rejected' 393 [VideoImportState.REJECTED]: 'Rejected'
391} 394}
392 395
393const ABUSE_STATES = { 396const ABUSE_STATES: { [ id in AbuseState ]: string } = {
394 [AbuseState.PENDING]: 'Pending', 397 [AbuseState.PENDING]: 'Pending',
395 [AbuseState.REJECTED]: 'Rejected', 398 [AbuseState.REJECTED]: 'Rejected',
396 [AbuseState.ACCEPTED]: 'Accepted' 399 [AbuseState.ACCEPTED]: 'Accepted'
397} 400}
398 401
399const VIDEO_PLAYLIST_PRIVACIES = { 402const VIDEO_PLAYLIST_PRIVACIES: { [ id in VideoPlaylistPrivacy ]: string } = {
400 [VideoPlaylistPrivacy.PUBLIC]: 'Public', 403 [VideoPlaylistPrivacy.PUBLIC]: 'Public',
401 [VideoPlaylistPrivacy.UNLISTED]: 'Unlisted', 404 [VideoPlaylistPrivacy.UNLISTED]: 'Unlisted',
402 [VideoPlaylistPrivacy.PRIVATE]: 'Private' 405 [VideoPlaylistPrivacy.PRIVATE]: 'Private'
403} 406}
404 407
405const VIDEO_PLAYLIST_TYPES = { 408const VIDEO_PLAYLIST_TYPES: { [ id in VideoPlaylistType ]: string } = {
406 [VideoPlaylistType.REGULAR]: 'Regular', 409 [VideoPlaylistType.REGULAR]: 'Regular',
407 [VideoPlaylistType.WATCH_LATER]: 'Watch later' 410 [VideoPlaylistType.WATCH_LATER]: 'Watch later'
408} 411}
@@ -600,6 +603,17 @@ const LRU_CACHE = {
600const HLS_STREAMING_PLAYLIST_DIRECTORY = join(CONFIG.STORAGE.STREAMING_PLAYLISTS_DIR, 'hls') 603const HLS_STREAMING_PLAYLIST_DIRECTORY = join(CONFIG.STORAGE.STREAMING_PLAYLISTS_DIR, 'hls')
601const HLS_REDUNDANCY_DIRECTORY = join(CONFIG.STORAGE.REDUNDANCY_DIR, 'hls') 604const HLS_REDUNDANCY_DIRECTORY = join(CONFIG.STORAGE.REDUNDANCY_DIR, 'hls')
602 605
606const VIDEO_LIVE = {
607 EXTENSION: '.ts',
608 RTMP: {
609 CHUNK_SIZE: 60000,
610 GOP_CACHE: true,
611 PING: 60,
612 PING_TIMEOUT: 30,
613 BASE_PATH: 'live'
614 }
615}
616
603const MEMOIZE_TTL = { 617const MEMOIZE_TTL = {
604 OVERVIEWS_SAMPLE: 1000 * 3600 * 4, // 4 hours 618 OVERVIEWS_SAMPLE: 1000 * 3600 * 4, // 4 hours
605 INFO_HASH_EXISTS: 1000 * 3600 * 12 // 12 hours 619 INFO_HASH_EXISTS: 1000 * 3600 * 12 // 12 hours
@@ -622,7 +636,8 @@ const REDUNDANCY = {
622const ACCEPT_HEADERS = [ 'html', 'application/json' ].concat(ACTIVITY_PUB.POTENTIAL_ACCEPT_HEADERS) 636const ACCEPT_HEADERS = [ 'html', 'application/json' ].concat(ACTIVITY_PUB.POTENTIAL_ACCEPT_HEADERS)
623 637
624const ASSETS_PATH = { 638const ASSETS_PATH = {
625 DEFAULT_AUDIO_BACKGROUND: join(root(), 'dist', 'server', 'assets', 'default-audio-background.jpg') 639 DEFAULT_AUDIO_BACKGROUND: join(root(), 'dist', 'server', 'assets', 'default-audio-background.jpg'),
640 DEFAULT_LIVE_BACKGROUND: join(root(), 'dist', 'server', 'assets', 'default-live-background.jpg')
626} 641}
627 642
628// --------------------------------------------------------------------------- 643// ---------------------------------------------------------------------------
@@ -688,9 +703,9 @@ if (isTestInstance() === true) {
688 STATIC_MAX_AGE.SERVER = '0' 703 STATIC_MAX_AGE.SERVER = '0'
689 704
690 ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE = 2 705 ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE = 2
691 ACTIVITY_PUB.ACTOR_REFRESH_INTERVAL = 10 * 1000 // 10 seconds 706 ACTIVITY_PUB.ACTOR_REFRESH_INTERVAL = 100 * 10000 // 10 seconds
692 ACTIVITY_PUB.VIDEO_REFRESH_INTERVAL = 10 * 1000 // 10 seconds 707 ACTIVITY_PUB.VIDEO_REFRESH_INTERVAL = 100 * 10000 // 10 seconds
693 ACTIVITY_PUB.VIDEO_PLAYLIST_REFRESH_INTERVAL = 10 * 1000 // 10 seconds 708 ACTIVITY_PUB.VIDEO_PLAYLIST_REFRESH_INTERVAL = 100 * 10000 // 10 seconds
694 709
695 CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max = 100 * 1024 // 100KB 710 CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max = 100 * 1024 // 100KB
696 711
@@ -737,6 +752,7 @@ const FILES_CONTENT_HASH = {
737export { 752export {
738 WEBSERVER, 753 WEBSERVER,
739 API_VERSION, 754 API_VERSION,
755 VIDEO_LIVE,
740 PEERTUBE_VERSION, 756 PEERTUBE_VERSION,
741 LAZY_STATIC_PATHS, 757 LAZY_STATIC_PATHS,
742 SEARCH_INDEX, 758 SEARCH_INDEX,
@@ -892,10 +908,14 @@ function buildVideoMimetypeExt () {
892function updateWebserverUrls () { 908function updateWebserverUrls () {
893 WEBSERVER.URL = sanitizeUrl(CONFIG.WEBSERVER.SCHEME + '://' + CONFIG.WEBSERVER.HOSTNAME + ':' + CONFIG.WEBSERVER.PORT) 909 WEBSERVER.URL = sanitizeUrl(CONFIG.WEBSERVER.SCHEME + '://' + CONFIG.WEBSERVER.HOSTNAME + ':' + CONFIG.WEBSERVER.PORT)
894 WEBSERVER.HOST = sanitizeHost(CONFIG.WEBSERVER.HOSTNAME + ':' + CONFIG.WEBSERVER.PORT, REMOTE_SCHEME.HTTP) 910 WEBSERVER.HOST = sanitizeHost(CONFIG.WEBSERVER.HOSTNAME + ':' + CONFIG.WEBSERVER.PORT, REMOTE_SCHEME.HTTP)
895 WEBSERVER.SCHEME = CONFIG.WEBSERVER.SCHEME
896 WEBSERVER.WS = CONFIG.WEBSERVER.WS 911 WEBSERVER.WS = CONFIG.WEBSERVER.WS
912
913 WEBSERVER.SCHEME = CONFIG.WEBSERVER.SCHEME
897 WEBSERVER.HOSTNAME = CONFIG.WEBSERVER.HOSTNAME 914 WEBSERVER.HOSTNAME = CONFIG.WEBSERVER.HOSTNAME
898 WEBSERVER.PORT = CONFIG.WEBSERVER.PORT 915 WEBSERVER.PORT = CONFIG.WEBSERVER.PORT
916 WEBSERVER.PORT = CONFIG.WEBSERVER.PORT
917
918 WEBSERVER.RTMP_URL = 'rtmp://' + CONFIG.WEBSERVER.HOSTNAME + ':' + CONFIG.LIVE.RTMP.PORT + '/' + VIDEO_LIVE.RTMP.BASE_PATH
899} 919}
900 920
901function updateWebserverConfig () { 921function updateWebserverConfig () {
diff --git a/server/initializers/database.ts b/server/initializers/database.ts
index a20cdacc3..128ed5b75 100644
--- a/server/initializers/database.ts
+++ b/server/initializers/database.ts
@@ -1,11 +1,11 @@
1import { QueryTypes, Transaction } from 'sequelize' 1import { QueryTypes, Transaction } from 'sequelize'
2import { Sequelize as SequelizeTypescript } from 'sequelize-typescript' 2import { Sequelize as SequelizeTypescript } from 'sequelize-typescript'
3import { AbuseModel } from '@server/models/abuse/abuse'
4import { AbuseMessageModel } from '@server/models/abuse/abuse-message'
5import { VideoAbuseModel } from '@server/models/abuse/video-abuse'
6import { VideoCommentAbuseModel } from '@server/models/abuse/video-comment-abuse'
7import { isTestInstance } from '../helpers/core-utils' 3import { isTestInstance } from '../helpers/core-utils'
8import { logger } from '../helpers/logger' 4import { logger } from '../helpers/logger'
5import { AbuseModel } from '../models/abuse/abuse'
6import { AbuseMessageModel } from '../models/abuse/abuse-message'
7import { VideoAbuseModel } from '../models/abuse/video-abuse'
8import { VideoCommentAbuseModel } from '../models/abuse/video-comment-abuse'
9import { AccountModel } from '../models/account/account' 9import { AccountModel } from '../models/account/account'
10import { AccountBlocklistModel } from '../models/account/account-blocklist' 10import { AccountBlocklistModel } from '../models/account/account-blocklist'
11import { AccountVideoRateModel } from '../models/account/account-video-rate' 11import { AccountVideoRateModel } from '../models/account/account-video-rate'
@@ -34,6 +34,7 @@ import { VideoChannelModel } from '../models/video/video-channel'
34import { VideoCommentModel } from '../models/video/video-comment' 34import { VideoCommentModel } from '../models/video/video-comment'
35import { VideoFileModel } from '../models/video/video-file' 35import { VideoFileModel } from '../models/video/video-file'
36import { VideoImportModel } from '../models/video/video-import' 36import { VideoImportModel } from '../models/video/video-import'
37import { VideoLiveModel } from '../models/video/video-live'
37import { VideoPlaylistModel } from '../models/video/video-playlist' 38import { VideoPlaylistModel } from '../models/video/video-playlist'
38import { VideoPlaylistElementModel } from '../models/video/video-playlist-element' 39import { VideoPlaylistElementModel } from '../models/video/video-playlist-element'
39import { VideoShareModel } from '../models/video/video-share' 40import { VideoShareModel } from '../models/video/video-share'
@@ -118,6 +119,7 @@ async function initDatabaseModels (silent: boolean) {
118 VideoViewModel, 119 VideoViewModel,
119 VideoRedundancyModel, 120 VideoRedundancyModel,
120 UserVideoHistoryModel, 121 UserVideoHistoryModel,
122 VideoLiveModel,
121 AccountBlocklistModel, 123 AccountBlocklistModel,
122 ServerBlocklistModel, 124 ServerBlocklistModel,
123 UserNotificationModel, 125 UserNotificationModel,
diff --git a/server/initializers/migrations/0535-video-live.ts b/server/initializers/migrations/0535-video-live.ts
new file mode 100644
index 000000000..35523efc4
--- /dev/null
+++ b/server/initializers/migrations/0535-video-live.ts
@@ -0,0 +1,39 @@
1import * as Sequelize from 'sequelize'
2
3async function up (utils: {
4 transaction: Sequelize.Transaction
5 queryInterface: Sequelize.QueryInterface
6 sequelize: Sequelize.Sequelize
7}): Promise<void> {
8 {
9 const query = `
10 CREATE TABLE IF NOT EXISTS "videoLive" (
11 "id" SERIAL ,
12 "streamKey" VARCHAR(255) NOT NULL,
13 "videoId" INTEGER NOT NULL REFERENCES "video" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
14 "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL,
15 "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL,
16 PRIMARY KEY ("id")
17 );
18 `
19
20 await utils.sequelize.query(query)
21 }
22
23 {
24 await utils.queryInterface.addColumn('video', 'isLive', {
25 type: Sequelize.BOOLEAN,
26 defaultValue: false,
27 allowNull: false
28 })
29 }
30}
31
32function down (options) {
33 throw new Error('Not implemented.')
34}
35
36export {
37 up,
38 down
39}
diff --git a/server/initializers/migrations/0540-video-file-infohash.ts b/server/initializers/migrations/0540-video-file-infohash.ts
new file mode 100644
index 000000000..550178dab
--- /dev/null
+++ b/server/initializers/migrations/0540-video-file-infohash.ts
@@ -0,0 +1,26 @@
1import * as Sequelize from 'sequelize'
2
3async function up (utils: {
4 transaction: Sequelize.Transaction
5 queryInterface: Sequelize.QueryInterface
6 sequelize: Sequelize.Sequelize
7}): Promise<void> {
8 {
9 const data = {
10 type: Sequelize.STRING,
11 defaultValue: null,
12 allowNull: true
13 }
14
15 await utils.queryInterface.changeColumn('videoFile', 'infoHash', data)
16 }
17}
18
19function down (options) {
20 throw new Error('Not implemented.')
21}
22
23export {
24 up,
25 down
26}
diff --git a/server/lib/hls.ts b/server/lib/hls.ts
index 76380b1f2..e38a8788c 100644
--- a/server/lib/hls.ts
+++ b/server/lib/hls.ts
@@ -65,7 +65,7 @@ async function updateMasterHLSPlaylist (video: MVideoWithFile) {
65 await writeFile(masterPlaylistPath, masterPlaylists.join('\n') + '\n') 65 await writeFile(masterPlaylistPath, masterPlaylists.join('\n') + '\n')
66} 66}
67 67
68async function updateSha256Segments (video: MVideoWithFile) { 68async function updateSha256VODSegments (video: MVideoWithFile) {
69 const json: { [filename: string]: { [range: string]: string } } = {} 69 const json: { [filename: string]: { [range: string]: string } } = {}
70 70
71 const playlistDirectory = join(HLS_STREAMING_PLAYLIST_DIRECTORY, video.uuid) 71 const playlistDirectory = join(HLS_STREAMING_PLAYLIST_DIRECTORY, video.uuid)
@@ -101,6 +101,11 @@ async function updateSha256Segments (video: MVideoWithFile) {
101 await outputJSON(outputPath, json) 101 await outputJSON(outputPath, json)
102} 102}
103 103
104async function buildSha256Segment (segmentPath: string) {
105 const buf = await readFile(segmentPath)
106 return sha256(buf)
107}
108
104function getRangesFromPlaylist (playlistContent: string) { 109function getRangesFromPlaylist (playlistContent: string) {
105 const ranges: { offset: number, length: number }[] = [] 110 const ranges: { offset: number, length: number }[] = []
106 const lines = playlistContent.split('\n') 111 const lines = playlistContent.split('\n')
@@ -187,7 +192,8 @@ function downloadPlaylistSegments (playlistUrl: string, destinationDir: string,
187 192
188export { 193export {
189 updateMasterHLSPlaylist, 194 updateMasterHLSPlaylist,
190 updateSha256Segments, 195 updateSha256VODSegments,
196 buildSha256Segment,
191 downloadPlaylistSegments, 197 downloadPlaylistSegments,
192 updateStreamingPlaylistsInfohashesIfNeeded 198 updateStreamingPlaylistsInfohashesIfNeeded
193} 199}
diff --git a/server/lib/job-queue/handlers/video-transcoding.ts b/server/lib/job-queue/handlers/video-transcoding.ts
index 7ebef46b4..6659ab716 100644
--- a/server/lib/job-queue/handlers/video-transcoding.ts
+++ b/server/lib/job-queue/handlers/video-transcoding.ts
@@ -84,7 +84,7 @@ async function onVideoFileOptimizerSuccess (videoArg: MVideoWithFile, payload: O
84 if (!videoDatabase) return undefined 84 if (!videoDatabase) return undefined
85 85
86 // Create transcoding jobs if there are enabled resolutions 86 // Create transcoding jobs if there are enabled resolutions
87 const resolutionsEnabled = computeResolutionsToTranscode(videoFileResolution) 87 const resolutionsEnabled = computeResolutionsToTranscode(videoFileResolution, 'vod')
88 logger.info( 88 logger.info(
89 'Resolutions computed for video %s and origin file resolution of %d.', videoDatabase.uuid, videoFileResolution, 89 'Resolutions computed for video %s and origin file resolution of %d.', videoDatabase.uuid, videoFileResolution,
90 { resolutions: resolutionsEnabled } 90 { resolutions: resolutionsEnabled }
diff --git a/server/lib/live-manager.ts b/server/lib/live-manager.ts
new file mode 100644
index 000000000..f602bfb6d
--- /dev/null
+++ b/server/lib/live-manager.ts
@@ -0,0 +1,310 @@
1
2import { AsyncQueue, queue } from 'async'
3import * as chokidar from 'chokidar'
4import { FfmpegCommand } from 'fluent-ffmpeg'
5import { ensureDir, readdir, remove } from 'fs-extra'
6import { basename, join } from 'path'
7import { computeResolutionsToTranscode, runLiveMuxing, runLiveTranscoding } from '@server/helpers/ffmpeg-utils'
8import { logger } from '@server/helpers/logger'
9import { CONFIG, registerConfigChangedHandler } from '@server/initializers/config'
10import { P2P_MEDIA_LOADER_PEER_VERSION, VIDEO_LIVE, WEBSERVER } from '@server/initializers/constants'
11import { VideoFileModel } from '@server/models/video/video-file'
12import { VideoLiveModel } from '@server/models/video/video-live'
13import { VideoStreamingPlaylistModel } from '@server/models/video/video-streaming-playlist'
14import { MStreamingPlaylist, MVideo, MVideoLiveVideo } from '@server/types/models'
15import { VideoState, VideoStreamingPlaylistType } from '@shared/models'
16import { buildSha256Segment } from './hls'
17import { getHLSDirectory } from './video-paths'
18
19const NodeRtmpServer = require('node-media-server/node_rtmp_server')
20const context = require('node-media-server/node_core_ctx')
21const nodeMediaServerLogger = require('node-media-server/node_core_logger')
22
23// Disable node media server logs
24nodeMediaServerLogger.setLogType(0)
25
26const config = {
27 rtmp: {
28 port: CONFIG.LIVE.RTMP.PORT,
29 chunk_size: VIDEO_LIVE.RTMP.CHUNK_SIZE,
30 gop_cache: VIDEO_LIVE.RTMP.GOP_CACHE,
31 ping: VIDEO_LIVE.RTMP.PING,
32 ping_timeout: VIDEO_LIVE.RTMP.PING_TIMEOUT
33 },
34 transcoding: {
35 ffmpeg: 'ffmpeg'
36 }
37}
38
39type SegmentSha256QueueParam = {
40 operation: 'update' | 'delete'
41 videoUUID: string
42 segmentPath: string
43}
44
45class LiveManager {
46
47 private static instance: LiveManager
48
49 private readonly transSessions = new Map<string, FfmpegCommand>()
50 private readonly segmentsSha256 = new Map<string, Map<string, string>>()
51
52 private segmentsSha256Queue: AsyncQueue<SegmentSha256QueueParam>
53 private rtmpServer: any
54
55 private constructor () {
56 }
57
58 init () {
59 this.getContext().nodeEvent.on('postPublish', (sessionId: string, streamPath: string) => {
60 logger.debug('RTMP received stream', { id: sessionId, streamPath })
61
62 const splittedPath = streamPath.split('/')
63 if (splittedPath.length !== 3 || splittedPath[1] !== VIDEO_LIVE.RTMP.BASE_PATH) {
64 logger.warn('Live path is incorrect.', { streamPath })
65 return this.abortSession(sessionId)
66 }
67
68 this.handleSession(sessionId, streamPath, splittedPath[2])
69 .catch(err => logger.error('Cannot handle sessions.', { err }))
70 })
71
72 this.getContext().nodeEvent.on('donePublish', sessionId => {
73 this.abortSession(sessionId)
74 })
75
76 this.segmentsSha256Queue = queue<SegmentSha256QueueParam, Error>((options, cb) => {
77 const promise = options.operation === 'update'
78 ? this.addSegmentSha(options)
79 : Promise.resolve(this.removeSegmentSha(options))
80
81 promise.then(() => cb())
82 .catch(err => {
83 logger.error('Cannot update/remove sha segment %s.', options.segmentPath, { err })
84 cb()
85 })
86 })
87
88 registerConfigChangedHandler(() => {
89 if (!this.rtmpServer && CONFIG.LIVE.ENABLED === true) {
90 this.run()
91 return
92 }
93
94 if (this.rtmpServer && CONFIG.LIVE.ENABLED === false) {
95 this.stop()
96 }
97 })
98 }
99
100 run () {
101 logger.info('Running RTMP server.')
102
103 this.rtmpServer = new NodeRtmpServer(config)
104 this.rtmpServer.run()
105 }
106
107 stop () {
108 logger.info('Stopping RTMP server.')
109
110 this.rtmpServer.stop()
111 this.rtmpServer = undefined
112 }
113
114 getSegmentsSha256 (videoUUID: string) {
115 return this.segmentsSha256.get(videoUUID)
116 }
117
118 private getContext () {
119 return context
120 }
121
122 private abortSession (id: string) {
123 const session = this.getContext().sessions.get(id)
124 if (session) session.stop()
125
126 const transSession = this.transSessions.get(id)
127 if (transSession) transSession.kill('SIGKILL')
128 }
129
130 private async handleSession (sessionId: string, streamPath: string, streamKey: string) {
131 const videoLive = await VideoLiveModel.loadByStreamKey(streamKey)
132 if (!videoLive) {
133 logger.warn('Unknown live video with stream key %s.', streamKey)
134 return this.abortSession(sessionId)
135 }
136
137 const video = videoLive.Video
138 const playlistUrl = WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsMasterPlaylistStaticPath(video.uuid)
139
140 const session = this.getContext().sessions.get(sessionId)
141 const resolutionsEnabled = CONFIG.LIVE.TRANSCODING.ENABLED
142 ? computeResolutionsToTranscode(session.videoHeight, 'live')
143 : []
144
145 logger.info('Will mux/transcode live video of original resolution %d.', session.videoHeight, { resolutionsEnabled })
146
147 const [ videoStreamingPlaylist ] = await VideoStreamingPlaylistModel.upsert({
148 videoId: video.id,
149 playlistUrl,
150 segmentsSha256Url: WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsSha256SegmentsStaticPath(video.uuid, video.isLive),
151 p2pMediaLoaderInfohashes: VideoStreamingPlaylistModel.buildP2PMediaLoaderInfoHashes(playlistUrl, resolutionsEnabled),
152 p2pMediaLoaderPeerVersion: P2P_MEDIA_LOADER_PEER_VERSION,
153
154 type: VideoStreamingPlaylistType.HLS
155 }, { returning: true }) as [ MStreamingPlaylist, boolean ]
156
157 video.state = VideoState.PUBLISHED
158 await video.save()
159
160 // FIXME: federation?
161
162 return this.runMuxing({
163 sessionId,
164 videoLive,
165 playlist: videoStreamingPlaylist,
166 streamPath,
167 originalResolution: session.videoHeight,
168 resolutionsEnabled
169 })
170 }
171
172 private async runMuxing (options: {
173 sessionId: string
174 videoLive: MVideoLiveVideo
175 playlist: MStreamingPlaylist
176 streamPath: string
177 resolutionsEnabled: number[]
178 originalResolution: number
179 }) {
180 const { sessionId, videoLive, playlist, streamPath, resolutionsEnabled, originalResolution } = options
181 const allResolutions = resolutionsEnabled.concat([ originalResolution ])
182
183 for (let i = 0; i < allResolutions.length; i++) {
184 const resolution = allResolutions[i]
185
186 VideoFileModel.upsert({
187 resolution,
188 size: -1,
189 extname: '.ts',
190 infoHash: null,
191 fps: -1,
192 videoStreamingPlaylistId: playlist.id
193 }).catch(err => {
194 logger.error('Cannot create file for live streaming.', { err })
195 })
196 }
197
198 const outPath = getHLSDirectory(videoLive.Video)
199 await ensureDir(outPath)
200
201 const rtmpUrl = 'rtmp://127.0.0.1:' + config.rtmp.port + streamPath
202 const ffmpegExec = CONFIG.LIVE.TRANSCODING.ENABLED
203 ? runLiveTranscoding(rtmpUrl, outPath, allResolutions)
204 : runLiveMuxing(rtmpUrl, outPath)
205
206 logger.info('Running live muxing/transcoding.')
207
208 this.transSessions.set(sessionId, ffmpegExec)
209
210 const onFFmpegEnded = () => {
211 watcher.close()
212 .catch(err => logger.error('Cannot close watcher of %s.', outPath, { err }))
213
214 this.onEndTransmuxing(videoLive.Video, playlist, streamPath, outPath)
215 .catch(err => logger.error('Error in closed transmuxing.', { err }))
216 }
217
218 ffmpegExec.on('error', (err, stdout, stderr) => {
219 onFFmpegEnded()
220
221 // Don't care that we killed the ffmpeg process
222 if (err?.message?.includes('SIGKILL')) return
223
224 logger.error('Live transcoding error.', { err, stdout, stderr })
225 })
226
227 ffmpegExec.on('end', () => onFFmpegEnded())
228
229 const videoUUID = videoLive.Video.uuid
230 const watcher = chokidar.watch(outPath + '/*.ts')
231
232 const updateHandler = segmentPath => this.segmentsSha256Queue.push({ operation: 'update', segmentPath, videoUUID })
233 const deleteHandler = segmentPath => this.segmentsSha256Queue.push({ operation: 'delete', segmentPath, videoUUID })
234
235 watcher.on('add', p => updateHandler(p))
236 watcher.on('change', p => updateHandler(p))
237 watcher.on('unlink', p => deleteHandler(p))
238 }
239
240 private async onEndTransmuxing (video: MVideo, playlist: MStreamingPlaylist, streamPath: string, outPath: string) {
241 logger.info('RTMP transmuxing for %s ended.', streamPath)
242
243 const files = await readdir(outPath)
244
245 for (const filename of files) {
246 if (
247 filename.endsWith('.ts') ||
248 filename.endsWith('.m3u8') ||
249 filename.endsWith('.mpd') ||
250 filename.endsWith('.m4s') ||
251 filename.endsWith('.tmp')
252 ) {
253 const p = join(outPath, filename)
254
255 remove(p)
256 .catch(err => logger.error('Cannot remove %s.', p, { err }))
257 }
258 }
259
260 playlist.destroy()
261 .catch(err => logger.error('Cannot remove live streaming playlist.', { err }))
262
263 video.state = VideoState.LIVE_ENDED
264 video.save()
265 .catch(err => logger.error('Cannot save new video state of live streaming.', { err }))
266 }
267
268 private async addSegmentSha (options: SegmentSha256QueueParam) {
269 const segmentName = basename(options.segmentPath)
270 logger.debug('Updating live sha segment %s.', options.segmentPath)
271
272 const shaResult = await buildSha256Segment(options.segmentPath)
273
274 if (!this.segmentsSha256.has(options.videoUUID)) {
275 this.segmentsSha256.set(options.videoUUID, new Map())
276 }
277
278 const filesMap = this.segmentsSha256.get(options.videoUUID)
279 filesMap.set(segmentName, shaResult)
280 }
281
282 private removeSegmentSha (options: SegmentSha256QueueParam) {
283 const segmentName = basename(options.segmentPath)
284
285 logger.debug('Removing live sha segment %s.', options.segmentPath)
286
287 const filesMap = this.segmentsSha256.get(options.videoUUID)
288 if (!filesMap) {
289 logger.warn('Unknown files map to remove sha for %s.', options.videoUUID)
290 return
291 }
292
293 if (!filesMap.has(segmentName)) {
294 logger.warn('Unknown segment in files map for video %s and segment %s.', options.videoUUID, options.segmentPath)
295 return
296 }
297
298 filesMap.delete(segmentName)
299 }
300
301 static get Instance () {
302 return this.instance || (this.instance = new this())
303 }
304}
305
306// ---------------------------------------------------------------------------
307
308export {
309 LiveManager
310}
diff --git a/server/lib/video-paths.ts b/server/lib/video-paths.ts
index a35661f02..b6cb39d25 100644
--- a/server/lib/video-paths.ts
+++ b/server/lib/video-paths.ts
@@ -27,7 +27,8 @@ function generateWebTorrentVideoName (uuid: string, resolution: number, extname:
27function getVideoFilePath (videoOrPlaylist: MVideo | MStreamingPlaylistVideo, videoFile: MVideoFile, isRedundancy = false) { 27function getVideoFilePath (videoOrPlaylist: MVideo | MStreamingPlaylistVideo, videoFile: MVideoFile, isRedundancy = false) {
28 if (isStreamingPlaylist(videoOrPlaylist)) { 28 if (isStreamingPlaylist(videoOrPlaylist)) {
29 const video = extractVideo(videoOrPlaylist) 29 const video = extractVideo(videoOrPlaylist)
30 return join(HLS_STREAMING_PLAYLIST_DIRECTORY, video.uuid, getVideoFilename(videoOrPlaylist, videoFile)) 30
31 return join(getHLSDirectory(video), getVideoFilename(videoOrPlaylist, videoFile))
31 } 32 }
32 33
33 const baseDir = isRedundancy ? CONFIG.STORAGE.REDUNDANCY_DIR : CONFIG.STORAGE.VIDEOS_DIR 34 const baseDir = isRedundancy ? CONFIG.STORAGE.REDUNDANCY_DIR : CONFIG.STORAGE.VIDEOS_DIR
diff --git a/server/lib/video-transcoding.ts b/server/lib/video-transcoding.ts
index 5a2dbc9f7..a7b73a30d 100644
--- a/server/lib/video-transcoding.ts
+++ b/server/lib/video-transcoding.ts
@@ -13,13 +13,14 @@ import { copyFile, ensureDir, move, remove, stat } from 'fs-extra'
13import { logger } from '../helpers/logger' 13import { logger } from '../helpers/logger'
14import { VideoResolution } from '../../shared/models/videos' 14import { VideoResolution } from '../../shared/models/videos'
15import { VideoFileModel } from '../models/video/video-file' 15import { VideoFileModel } from '../models/video/video-file'
16import { updateMasterHLSPlaylist, updateSha256Segments } from './hls' 16import { updateMasterHLSPlaylist, updateSha256VODSegments } from './hls'
17import { VideoStreamingPlaylistModel } from '../models/video/video-streaming-playlist' 17import { VideoStreamingPlaylistModel } from '../models/video/video-streaming-playlist'
18import { VideoStreamingPlaylistType } from '../../shared/models/videos/video-streaming-playlist.type' 18import { VideoStreamingPlaylistType } from '../../shared/models/videos/video-streaming-playlist.type'
19import { CONFIG } from '../initializers/config' 19import { CONFIG } from '../initializers/config'
20import { MStreamingPlaylistFilesVideo, MVideoFile, MVideoWithAllFiles, MVideoWithFile } from '@server/types/models' 20import { MStreamingPlaylistFilesVideo, MVideoFile, MVideoWithAllFiles, MVideoWithFile } from '@server/types/models'
21import { createTorrentAndSetInfoHash } from '@server/helpers/webtorrent' 21import { createTorrentAndSetInfoHash } from '@server/helpers/webtorrent'
22import { generateVideoStreamingPlaylistName, getVideoFilename, getVideoFilePath } from './video-paths' 22import { generateVideoStreamingPlaylistName, getVideoFilename, getVideoFilePath } from './video-paths'
23import { spawn } from 'child_process'
23 24
24/** 25/**
25 * Optimize the original video file and replace it. The resolution is not changed. 26 * Optimize the original video file and replace it. The resolution is not changed.
@@ -182,7 +183,7 @@ async function generateHlsPlaylist (video: MVideoWithFile, resolution: VideoReso
182 const [ videoStreamingPlaylist ] = await VideoStreamingPlaylistModel.upsert({ 183 const [ videoStreamingPlaylist ] = await VideoStreamingPlaylistModel.upsert({
183 videoId: video.id, 184 videoId: video.id,
184 playlistUrl, 185 playlistUrl,
185 segmentsSha256Url: WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsSha256SegmentsStaticPath(video.uuid), 186 segmentsSha256Url: WEBSERVER.URL + VideoStreamingPlaylistModel.getHlsSha256SegmentsStaticPath(video.uuid, video.isLive),
186 p2pMediaLoaderInfohashes: VideoStreamingPlaylistModel.buildP2PMediaLoaderInfoHashes(playlistUrl, video.VideoFiles), 187 p2pMediaLoaderInfohashes: VideoStreamingPlaylistModel.buildP2PMediaLoaderInfoHashes(playlistUrl, video.VideoFiles),
187 p2pMediaLoaderPeerVersion: P2P_MEDIA_LOADER_PEER_VERSION, 188 p2pMediaLoaderPeerVersion: P2P_MEDIA_LOADER_PEER_VERSION,
188 189
@@ -213,7 +214,7 @@ async function generateHlsPlaylist (video: MVideoWithFile, resolution: VideoReso
213 video.setHLSPlaylist(videoStreamingPlaylist) 214 video.setHLSPlaylist(videoStreamingPlaylist)
214 215
215 await updateMasterHLSPlaylist(video) 216 await updateMasterHLSPlaylist(video)
216 await updateSha256Segments(video) 217 await updateSha256VODSegments(video)
217 218
218 return video 219 return video
219} 220}
diff --git a/server/lib/video.ts b/server/lib/video.ts
new file mode 100644
index 000000000..a28f31529
--- /dev/null
+++ b/server/lib/video.ts
@@ -0,0 +1,31 @@
1
2import { VideoModel } from '@server/models/video/video'
3import { FilteredModelAttributes } from '@server/types'
4import { VideoCreate, VideoPrivacy, VideoState } from '@shared/models'
5
6function buildLocalVideoFromCreate (videoInfo: VideoCreate, channelId: number): FilteredModelAttributes<VideoModel> {
7 return {
8 name: videoInfo.name,
9 remote: false,
10 category: videoInfo.category,
11 licence: videoInfo.licence,
12 language: videoInfo.language,
13 commentsEnabled: videoInfo.commentsEnabled !== false, // If the value is not "false", the default is "true"
14 downloadEnabled: videoInfo.downloadEnabled !== false,
15 waitTranscoding: videoInfo.waitTranscoding || false,
16 state: VideoState.WAITING_FOR_LIVE,
17 nsfw: videoInfo.nsfw || false,
18 description: videoInfo.description,
19 support: videoInfo.support,
20 privacy: videoInfo.privacy || VideoPrivacy.PRIVATE,
21 duration: 0,
22 channelId: channelId,
23 originallyPublishedAt: videoInfo.originallyPublishedAt
24 }
25}
26
27// ---------------------------------------------------------------------------
28
29export {
30 buildLocalVideoFromCreate
31}
diff --git a/server/middlewares/validators/videos/video-live.ts b/server/middlewares/validators/videos/video-live.ts
new file mode 100644
index 000000000..a4c364976
--- /dev/null
+++ b/server/middlewares/validators/videos/video-live.ts
@@ -0,0 +1,66 @@
1import * as express from 'express'
2import { body, param } from 'express-validator'
3import { checkUserCanManageVideo, doesVideoChannelOfAccountExist, doesVideoExist } from '@server/helpers/middlewares/videos'
4import { UserRight } from '@shared/models'
5import { isIdOrUUIDValid, isIdValid, toIntOrNull } from '../../../helpers/custom-validators/misc'
6import { isVideoNameValid } from '../../../helpers/custom-validators/videos'
7import { cleanUpReqFiles } from '../../../helpers/express-utils'
8import { logger } from '../../../helpers/logger'
9import { CONFIG } from '../../../initializers/config'
10import { areValidationErrors } from '../utils'
11import { getCommonVideoEditAttributes } from './videos'
12import { VideoLiveModel } from '@server/models/video/video-live'
13
14const videoLiveGetValidator = [
15 param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid videoId'),
16
17 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
18 logger.debug('Checking videoLiveGetValidator parameters', { parameters: req.body })
19
20 if (areValidationErrors(req, res)) return
21 if (!await doesVideoExist(req.params.videoId, res, 'all')) return
22
23 // Check if the user who did the request is able to update the video
24 const user = res.locals.oauth.token.User
25 if (!checkUserCanManageVideo(user, res.locals.videoAll, UserRight.UPDATE_ANY_VIDEO, res)) return
26
27 const videoLive = await VideoLiveModel.loadByVideoId(res.locals.videoAll.id)
28 if (!videoLive) return res.sendStatus(404)
29
30 res.locals.videoLive = videoLive
31
32 return next()
33 }
34]
35
36const videoLiveAddValidator = getCommonVideoEditAttributes().concat([
37 body('channelId')
38 .customSanitizer(toIntOrNull)
39 .custom(isIdValid).withMessage('Should have correct video channel id'),
40
41 body('name')
42 .custom(isVideoNameValid).withMessage('Should have a valid name'),
43
44 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
45 logger.debug('Checking videoLiveAddValidator parameters', { parameters: req.body })
46
47 if (CONFIG.LIVE.ENABLED !== true) {
48 return res.status(403)
49 .json({ error: 'Live is not enabled on this instance' })
50 }
51
52 if (areValidationErrors(req, res)) return cleanUpReqFiles(req)
53
54 const user = res.locals.oauth.token.User
55 if (!await doesVideoChannelOfAccountExist(req.body.channelId, user, res)) return cleanUpReqFiles(req)
56
57 return next()
58 }
59])
60
61// ---------------------------------------------------------------------------
62
63export {
64 videoLiveAddValidator,
65 videoLiveGetValidator
66}
diff --git a/server/models/video/video-file.ts b/server/models/video/video-file.ts
index f95022383..6a321917c 100644
--- a/server/models/video/video-file.ts
+++ b/server/models/video/video-file.ts
@@ -123,8 +123,8 @@ export class VideoFileModel extends Model<VideoFileModel> {
123 @Column 123 @Column
124 extname: string 124 extname: string
125 125
126 @AllowNull(false) 126 @AllowNull(true)
127 @Is('VideoFileInfohash', value => throwIfNotValid(value, isVideoFileInfoHashValid, 'info hash')) 127 @Is('VideoFileInfohash', value => throwIfNotValid(value, isVideoFileInfoHashValid, 'info hash', true))
128 @Column 128 @Column
129 infoHash: string 129 infoHash: string
130 130
diff --git a/server/models/video/video-format-utils.ts b/server/models/video/video-format-utils.ts
index ad512fc7f..0dbd92a43 100644
--- a/server/models/video/video-format-utils.ts
+++ b/server/models/video/video-format-utils.ts
@@ -77,6 +77,8 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options?: VideoFor
77 publishedAt: video.publishedAt, 77 publishedAt: video.publishedAt,
78 originallyPublishedAt: video.originallyPublishedAt, 78 originallyPublishedAt: video.originallyPublishedAt,
79 79
80 isLive: video.isLive,
81
80 account: video.VideoChannel.Account.toFormattedSummaryJSON(), 82 account: video.VideoChannel.Account.toFormattedSummaryJSON(),
81 channel: video.VideoChannel.toFormattedSummaryJSON(), 83 channel: video.VideoChannel.toFormattedSummaryJSON(),
82 84
diff --git a/server/models/video/video-live.ts b/server/models/video/video-live.ts
new file mode 100644
index 000000000..6929b9688
--- /dev/null
+++ b/server/models/video/video-live.ts
@@ -0,0 +1,74 @@
1import { AllowNull, BelongsTo, Column, CreatedAt, DataType, DefaultScope, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
2import { WEBSERVER } from '@server/initializers/constants'
3import { MVideoLive, MVideoLiveVideo } from '@server/types/models'
4import { VideoLive } from '@shared/models/videos/video-live.model'
5import { VideoModel } from './video'
6
7@DefaultScope(() => ({
8 include: [
9 {
10 model: VideoModel,
11 required: true
12 }
13 ]
14}))
15@Table({
16 tableName: 'videoLive',
17 indexes: [
18 {
19 fields: [ 'videoId' ],
20 unique: true
21 }
22 ]
23})
24export class VideoLiveModel extends Model<VideoLiveModel> {
25
26 @AllowNull(false)
27 @Column(DataType.STRING)
28 streamKey: string
29
30 @CreatedAt
31 createdAt: Date
32
33 @UpdatedAt
34 updatedAt: Date
35
36 @ForeignKey(() => VideoModel)
37 @Column
38 videoId: number
39
40 @BelongsTo(() => VideoModel, {
41 foreignKey: {
42 allowNull: false
43 },
44 onDelete: 'cascade'
45 })
46 Video: VideoModel
47
48 static loadByStreamKey (streamKey: string) {
49 const query = {
50 where: {
51 streamKey
52 }
53 }
54
55 return VideoLiveModel.findOne<MVideoLiveVideo>(query)
56 }
57
58 static loadByVideoId (videoId: number) {
59 const query = {
60 where: {
61 videoId
62 }
63 }
64
65 return VideoLiveModel.findOne<MVideoLive>(query)
66 }
67
68 toFormattedJSON (): VideoLive {
69 return {
70 rtmpUrl: WEBSERVER.RTMP_URL,
71 streamKey: this.streamKey
72 }
73 }
74}
diff --git a/server/models/video/video-streaming-playlist.ts b/server/models/video/video-streaming-playlist.ts
index 021b9b063..b8dc7c450 100644
--- a/server/models/video/video-streaming-playlist.ts
+++ b/server/models/video/video-streaming-playlist.ts
@@ -173,7 +173,9 @@ export class VideoStreamingPlaylistModel extends Model<VideoStreamingPlaylistMod
173 return join(STATIC_PATHS.STREAMING_PLAYLISTS.HLS, videoUUID, VideoStreamingPlaylistModel.getHlsPlaylistFilename(resolution)) 173 return join(STATIC_PATHS.STREAMING_PLAYLISTS.HLS, videoUUID, VideoStreamingPlaylistModel.getHlsPlaylistFilename(resolution))
174 } 174 }
175 175
176 static getHlsSha256SegmentsStaticPath (videoUUID: string) { 176 static getHlsSha256SegmentsStaticPath (videoUUID: string, isLive: boolean) {
177 if (isLive) return join('/live', 'segments-sha256', videoUUID)
178
177 return join(STATIC_PATHS.STREAMING_PLAYLISTS.HLS, videoUUID, VideoStreamingPlaylistModel.getHlsSha256SegmentsFilename()) 179 return join(STATIC_PATHS.STREAMING_PLAYLISTS.HLS, videoUUID, VideoStreamingPlaylistModel.getHlsSha256SegmentsFilename())
178 } 180 }
179 181
diff --git a/server/models/video/video.ts b/server/models/video/video.ts
index 410d71cb3..1037730e3 100644
--- a/server/models/video/video.ts
+++ b/server/models/video/video.ts
@@ -550,6 +550,11 @@ export class VideoModel extends Model<VideoModel> {
550 remote: boolean 550 remote: boolean
551 551
552 @AllowNull(false) 552 @AllowNull(false)
553 @Default(false)
554 @Column
555 isLive: boolean
556
557 @AllowNull(false)
553 @Is('VideoUrl', value => throwIfNotValid(value, isActivityPubUrlValid, 'url')) 558 @Is('VideoUrl', value => throwIfNotValid(value, isActivityPubUrlValid, 'url'))
554 @Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEOS.URL.max)) 559 @Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEOS.URL.max))
555 url: string 560 url: string
diff --git a/server/tests/api/check-params/config.ts b/server/tests/api/check-params/config.ts
index 3f2708f94..35cb333ef 100644
--- a/server/tests/api/check-params/config.ts
+++ b/server/tests/api/check-params/config.ts
@@ -100,6 +100,22 @@ describe('Test config API validators', function () {
100 enabled: false 100 enabled: false
101 } 101 }
102 }, 102 },
103 live: {
104 enabled: true,
105
106 transcoding: {
107 enabled: true,
108 threads: 4,
109 resolutions: {
110 '240p': true,
111 '360p': true,
112 '480p': true,
113 '720p': true,
114 '1080p': true,
115 '2160p': true
116 }
117 }
118 },
103 import: { 119 import: {
104 videos: { 120 videos: {
105 http: { 121 http: {
diff --git a/server/tests/api/server/config.ts b/server/tests/api/server/config.ts
index 60efd332c..a46e179c2 100644
--- a/server/tests/api/server/config.ts
+++ b/server/tests/api/server/config.ts
@@ -64,6 +64,7 @@ function checkInitialConfig (server: ServerInfo, data: CustomConfig) {
64 64
65 expect(data.user.videoQuota).to.equal(5242880) 65 expect(data.user.videoQuota).to.equal(5242880)
66 expect(data.user.videoQuotaDaily).to.equal(-1) 66 expect(data.user.videoQuotaDaily).to.equal(-1)
67
67 expect(data.transcoding.enabled).to.be.false 68 expect(data.transcoding.enabled).to.be.false
68 expect(data.transcoding.allowAdditionalExtensions).to.be.false 69 expect(data.transcoding.allowAdditionalExtensions).to.be.false
69 expect(data.transcoding.allowAudioFiles).to.be.false 70 expect(data.transcoding.allowAudioFiles).to.be.false
@@ -77,6 +78,16 @@ function checkInitialConfig (server: ServerInfo, data: CustomConfig) {
77 expect(data.transcoding.webtorrent.enabled).to.be.true 78 expect(data.transcoding.webtorrent.enabled).to.be.true
78 expect(data.transcoding.hls.enabled).to.be.true 79 expect(data.transcoding.hls.enabled).to.be.true
79 80
81 expect(data.live.enabled).to.be.false
82 expect(data.live.transcoding.enabled).to.be.false
83 expect(data.live.transcoding.threads).to.equal(2)
84 expect(data.live.transcoding.resolutions['240p']).to.be.false
85 expect(data.live.transcoding.resolutions['360p']).to.be.false
86 expect(data.live.transcoding.resolutions['480p']).to.be.false
87 expect(data.live.transcoding.resolutions['720p']).to.be.false
88 expect(data.live.transcoding.resolutions['1080p']).to.be.false
89 expect(data.live.transcoding.resolutions['2160p']).to.be.false
90
80 expect(data.import.videos.http.enabled).to.be.true 91 expect(data.import.videos.http.enabled).to.be.true
81 expect(data.import.videos.torrent.enabled).to.be.true 92 expect(data.import.videos.torrent.enabled).to.be.true
82 expect(data.autoBlacklist.videos.ofUsers.enabled).to.be.false 93 expect(data.autoBlacklist.videos.ofUsers.enabled).to.be.false
@@ -150,6 +161,16 @@ function checkUpdatedConfig (data: CustomConfig) {
150 expect(data.transcoding.hls.enabled).to.be.false 161 expect(data.transcoding.hls.enabled).to.be.false
151 expect(data.transcoding.webtorrent.enabled).to.be.true 162 expect(data.transcoding.webtorrent.enabled).to.be.true
152 163
164 expect(data.live.enabled).to.be.true
165 expect(data.live.transcoding.enabled).to.be.true
166 expect(data.live.transcoding.threads).to.equal(4)
167 expect(data.live.transcoding.resolutions['240p']).to.be.true
168 expect(data.live.transcoding.resolutions['360p']).to.be.true
169 expect(data.live.transcoding.resolutions['480p']).to.be.true
170 expect(data.live.transcoding.resolutions['720p']).to.be.true
171 expect(data.live.transcoding.resolutions['1080p']).to.be.true
172 expect(data.live.transcoding.resolutions['2160p']).to.be.true
173
153 expect(data.import.videos.http.enabled).to.be.false 174 expect(data.import.videos.http.enabled).to.be.false
154 expect(data.import.videos.torrent.enabled).to.be.false 175 expect(data.import.videos.torrent.enabled).to.be.false
155 expect(data.autoBlacklist.videos.ofUsers.enabled).to.be.true 176 expect(data.autoBlacklist.videos.ofUsers.enabled).to.be.true
@@ -301,6 +322,21 @@ describe('Test config', function () {
301 enabled: false 322 enabled: false
302 } 323 }
303 }, 324 },
325 live: {
326 enabled: true,
327 transcoding: {
328 enabled: true,
329 threads: 4,
330 resolutions: {
331 '240p': true,
332 '360p': true,
333 '480p': true,
334 '720p': true,
335 '1080p': true,
336 '2160p': true
337 }
338 }
339 },
304 import: { 340 import: {
305 videos: { 341 videos: {
306 http: { 342 http: {
diff --git a/server/tests/api/videos/video-transcoder.ts b/server/tests/api/videos/video-transcoder.ts
index e3fd0ec22..a1959e1a9 100644
--- a/server/tests/api/videos/video-transcoder.ts
+++ b/server/tests/api/videos/video-transcoder.ts
@@ -83,7 +83,7 @@ describe('Test video transcoding', function () {
83 }) 83 })
84 84
85 it('Should transcode video on server 2', async function () { 85 it('Should transcode video on server 2', async function () {
86 this.timeout(60000) 86 this.timeout(120000)
87 87
88 const videoAttributes = { 88 const videoAttributes = {
89 name: 'my super name for server 2', 89 name: 'my super name for server 2',
diff --git a/server/types/models/video/index.ts b/server/types/models/video/index.ts
index 25db23898..e586a4e42 100644
--- a/server/types/models/video/index.ts
+++ b/server/types/models/video/index.ts
@@ -9,6 +9,7 @@ export * from './video-channels'
9export * from './video-comment' 9export * from './video-comment'
10export * from './video-file' 10export * from './video-file'
11export * from './video-import' 11export * from './video-import'
12export * from './video-live'
12export * from './video-playlist' 13export * from './video-playlist'
13export * from './video-playlist-element' 14export * from './video-playlist-element'
14export * from './video-rate' 15export * from './video-rate'
diff --git a/server/types/models/video/video-live.ts b/server/types/models/video/video-live.ts
new file mode 100644
index 000000000..346052417
--- /dev/null
+++ b/server/types/models/video/video-live.ts
@@ -0,0 +1,15 @@
1import { VideoLiveModel } from '@server/models/video/video-live'
2import { PickWith } from '@shared/core-utils'
3import { MVideo } from './video'
4
5type Use<K extends keyof VideoLiveModel, M> = PickWith<VideoLiveModel, K, M>
6
7// ############################################################################
8
9export type MVideoLive = Omit<VideoLiveModel, 'Video'>
10
11// ############################################################################
12
13export type MVideoLiveVideo =
14 MVideoLive &
15 Use<'Video', MVideo>
diff --git a/server/typings/express/index.d.ts b/server/typings/express/index.d.ts
index cd8e544e0..a83619a0e 100644
--- a/server/typings/express/index.d.ts
+++ b/server/typings/express/index.d.ts
@@ -9,7 +9,8 @@ import {
9 MVideoFile, 9 MVideoFile,
10 MVideoImmutable, 10 MVideoImmutable,
11 MVideoPlaylistFull, 11 MVideoPlaylistFull,
12 MVideoPlaylistFullSummary 12 MVideoPlaylistFullSummary,
13 MVideoLive
13} from '@server/types/models' 14} from '@server/types/models'
14import { MOAuthTokenUser } from '@server/types/models/oauth/oauth-token' 15import { MOAuthTokenUser } from '@server/types/models/oauth/oauth-token'
15import { MPlugin, MServer, MServerBlocklist } from '@server/types/models/server' 16import { MPlugin, MServer, MServerBlocklist } from '@server/types/models/server'
@@ -68,6 +69,8 @@ declare module 'express' {
68 onlyVideoWithRights?: MVideoWithRights 69 onlyVideoWithRights?: MVideoWithRights
69 videoId?: MVideoIdThumbnail 70 videoId?: MVideoIdThumbnail
70 71
72 videoLive?: MVideoLive
73
71 videoShare?: MVideoShareActor 74 videoShare?: MVideoShareActor
72 75
73 videoFile?: MVideoFile 76 videoFile?: MVideoFile
diff --git a/shared/extra-utils/server/config.ts b/shared/extra-utils/server/config.ts
index 3ae1c6e67..3606976bd 100644
--- a/shared/extra-utils/server/config.ts
+++ b/shared/extra-utils/server/config.ts
@@ -126,6 +126,21 @@ function updateCustomSubConfig (url: string, token: string, newConfig: DeepParti
126 enabled: false 126 enabled: false
127 } 127 }
128 }, 128 },
129 live: {
130 enabled: true,
131 transcoding: {
132 enabled: true,
133 threads: 4,
134 resolutions: {
135 '240p': true,
136 '360p': true,
137 '480p': true,
138 '720p': true,
139 '1080p': true,
140 '2160p': true
141 }
142 }
143 },
129 import: { 144 import: {
130 videos: { 145 videos: {
131 http: { 146 http: {
diff --git a/shared/models/server/custom-config.model.ts b/shared/models/server/custom-config.model.ts
index 338a59341..e609d1a33 100644
--- a/shared/models/server/custom-config.model.ts
+++ b/shared/models/server/custom-config.model.ts
@@ -1,6 +1,15 @@
1import { NSFWPolicyType } from '../videos/nsfw-policy.type' 1import { NSFWPolicyType } from '../videos/nsfw-policy.type'
2import { BroadcastMessageLevel } from './broadcast-message-level.type' 2import { BroadcastMessageLevel } from './broadcast-message-level.type'
3 3
4export type ConfigResolutions = {
5 '240p': boolean
6 '360p': boolean
7 '480p': boolean
8 '720p': boolean
9 '1080p': boolean
10 '2160p': boolean
11}
12
4export interface CustomConfig { 13export interface CustomConfig {
5 instance: { 14 instance: {
6 name: string 15 name: string
@@ -75,15 +84,7 @@ export interface CustomConfig {
75 allowAudioFiles: boolean 84 allowAudioFiles: boolean
76 85
77 threads: number 86 threads: number
78 resolutions: { 87 resolutions: ConfigResolutions & { '0p': boolean }
79 '0p': boolean
80 '240p': boolean
81 '360p': boolean
82 '480p': boolean
83 '720p': boolean
84 '1080p': boolean
85 '2160p': boolean
86 }
87 88
88 webtorrent: { 89 webtorrent: {
89 enabled: boolean 90 enabled: boolean
@@ -94,6 +95,16 @@ export interface CustomConfig {
94 } 95 }
95 } 96 }
96 97
98 live: {
99 enabled: boolean
100
101 transcoding: {
102 enabled: boolean
103 threads: number
104 resolutions: ConfigResolutions
105 }
106 }
107
97 import: { 108 import: {
98 videos: { 109 videos: {
99 http: { 110 http: {
diff --git a/shared/models/server/server-config.model.ts b/shared/models/server/server-config.model.ts
index a8e5dfbff..77694a627 100644
--- a/shared/models/server/server-config.model.ts
+++ b/shared/models/server/server-config.model.ts
@@ -98,6 +98,16 @@ export interface ServerConfig {
98 enabledResolutions: number[] 98 enabledResolutions: number[]
99 } 99 }
100 100
101 live: {
102 enabled: boolean
103
104 transcoding: {
105 enabled: boolean
106
107 enabledResolutions: number[]
108 }
109 }
110
101 import: { 111 import: {
102 videos: { 112 videos: {
103 http: { 113 http: {
diff --git a/shared/models/videos/index.ts b/shared/models/videos/index.ts
index 20b9638ab..2a032a456 100644
--- a/shared/models/videos/index.ts
+++ b/shared/models/videos/index.ts
@@ -19,6 +19,8 @@ export * from './video-create.model'
19export * from './video-file-metadata' 19export * from './video-file-metadata'
20export * from './video-file.model' 20export * from './video-file.model'
21 21
22export * from './video-live.model'
23
22export * from './video-privacy.enum' 24export * from './video-privacy.enum'
23export * from './video-query.type' 25export * from './video-query.type'
24export * from './video-rate.type' 26export * from './video-rate.type'
diff --git a/shared/models/videos/video-create.model.ts b/shared/models/videos/video-create.model.ts
index 53631bf79..59b118567 100644
--- a/shared/models/videos/video-create.model.ts
+++ b/shared/models/videos/video-create.model.ts
@@ -16,5 +16,5 @@ export interface VideoCreate {
16 downloadEnabled?: boolean 16 downloadEnabled?: boolean
17 privacy: VideoPrivacy 17 privacy: VideoPrivacy
18 scheduleUpdate?: VideoScheduleUpdate 18 scheduleUpdate?: VideoScheduleUpdate
19 originallyPublishedAt: Date | string 19 originallyPublishedAt?: Date | string
20} 20}
diff --git a/shared/models/videos/video-live.model.ts b/shared/models/videos/video-live.model.ts
new file mode 100644
index 000000000..2a834dc91
--- /dev/null
+++ b/shared/models/videos/video-live.model.ts
@@ -0,0 +1,4 @@
1export interface VideoLive {
2 rtmpUrl: string
3 streamKey: string
4}
diff --git a/shared/models/videos/video-state.enum.ts b/shared/models/videos/video-state.enum.ts
index 31c501932..49d997f24 100644
--- a/shared/models/videos/video-state.enum.ts
+++ b/shared/models/videos/video-state.enum.ts
@@ -1,5 +1,7 @@
1export const enum VideoState { 1export const enum VideoState {
2 PUBLISHED = 1, 2 PUBLISHED = 1,
3 TO_TRANSCODE = 2, 3 TO_TRANSCODE = 2,
4 TO_IMPORT = 3 4 TO_IMPORT = 3,
5 WAITING_FOR_LIVE = 4,
6 LIVE_ENDED = 5
5} 7}
diff --git a/shared/models/videos/video-update.model.ts b/shared/models/videos/video-update.model.ts
index 86653b959..e21ccae04 100644
--- a/shared/models/videos/video-update.model.ts
+++ b/shared/models/videos/video-update.model.ts
@@ -1,6 +1,5 @@
1import { VideoPrivacy } from './video-privacy.enum' 1import { VideoPrivacy } from './video-privacy.enum'
2import { VideoScheduleUpdate } from './video-schedule-update.model' 2import { VideoScheduleUpdate } from './video-schedule-update.model'
3
4export interface VideoUpdate { 3export interface VideoUpdate {
5 name?: string 4 name?: string
6 category?: number 5 category?: number
diff --git a/shared/models/videos/video.model.ts b/shared/models/videos/video.model.ts
index 158ee8f05..caefeff82 100644
--- a/shared/models/videos/video.model.ts
+++ b/shared/models/videos/video.model.ts
@@ -23,6 +23,8 @@ export interface Video {
23 isLocal: boolean 23 isLocal: boolean
24 name: string 24 name: string
25 25
26 isLive: boolean
27
26 thumbnailPath: string 28 thumbnailPath: string
27 thumbnailUrl?: string 29 thumbnailUrl?: string
28 30
diff --git a/yarn.lock b/yarn.lock
index 67275bbf4..00ce9e1c3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,7 +2,7 @@
2# yarn lockfile v1 2# yarn lockfile v1
3 3
4 4
5"@apidevtools/json-schema-ref-parser@^9.0.5": 5"@apidevtools/json-schema-ref-parser@^9.0.6":
6 version "9.0.6" 6 version "9.0.6"
7 resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" 7 resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c"
8 integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== 8 integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==
@@ -32,16 +32,15 @@
32 integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== 32 integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==
33 33
34"@apidevtools/swagger-parser@^10.0.1": 34"@apidevtools/swagger-parser@^10.0.1":
35 version "10.0.1" 35 version "10.0.2"
36 resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.0.1.tgz#af3a02de99bcd4f76aa04d27721e56502d735c88" 36 resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.0.2.tgz#f4145afb7c3a3bafe0376f003b5c3bdeae17a952"
37 integrity sha512-P5nva6hpXCK5NByGXbIJnFxd5FhQI9LGs+If0SMgKV+/5qlZnHH/B/6GtfnSPwSViRPL+7ARSzMcYIfGwjkW5Q== 37 integrity sha512-JFxcEyp8RlNHgBCE98nwuTkZT6eNFPc1aosWV6wPcQph72TSEEu1k3baJD4/x1qznU+JiDdz8F5pTwabZh+Dhg==
38 dependencies: 38 dependencies:
39 "@apidevtools/json-schema-ref-parser" "^9.0.5" 39 "@apidevtools/json-schema-ref-parser" "^9.0.6"
40 "@apidevtools/openapi-schemas" "^2.0.4" 40 "@apidevtools/openapi-schemas" "^2.0.4"
41 "@apidevtools/swagger-methods" "^3.0.2" 41 "@apidevtools/swagger-methods" "^3.0.2"
42 "@jsdevtools/ono" "^7.1.3" 42 "@jsdevtools/ono" "^7.1.3"
43 call-me-maybe "^1.0.1" 43 call-me-maybe "^1.0.1"
44 openapi-types "^1.3.5"
45 z-schema "^4.2.3" 44 z-schema "^4.2.3"
46 45
47"@babel/code-frame@^7.0.0": 46"@babel/code-frame@^7.0.0":
@@ -66,21 +65,21 @@
66 js-tokens "^4.0.0" 65 js-tokens "^4.0.0"
67 66
68"@babel/parser@^7.6.0", "@babel/parser@^7.9.6": 67"@babel/parser@^7.6.0", "@babel/parser@^7.9.6":
69 version "7.11.4" 68 version "7.12.5"
70 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.4.tgz#6fa1a118b8b0d80d0267b719213dc947e88cc0ca" 69 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0"
71 integrity sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA== 70 integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==
72 71
73"@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2": 72"@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2":
74 version "7.11.2" 73 version "7.12.5"
75 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" 74 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
76 integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== 75 integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
77 dependencies: 76 dependencies:
78 regenerator-runtime "^0.13.4" 77 regenerator-runtime "^0.13.4"
79 78
80"@babel/types@^7.6.1", "@babel/types@^7.9.6": 79"@babel/types@^7.6.1", "@babel/types@^7.9.6":
81 version "7.11.0" 80 version "7.12.6"
82 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" 81 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96"
83 integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== 82 integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==
84 dependencies: 83 dependencies:
85 "@babel/helper-validator-identifier" "^7.10.4" 84 "@babel/helper-validator-identifier" "^7.10.4"
86 lodash "^4.17.19" 85 lodash "^4.17.19"
@@ -95,6 +94,22 @@
95 enabled "2.0.x" 94 enabled "2.0.x"
96 kuler "^2.0.0" 95 kuler "^2.0.0"
97 96
97"@eslint/eslintrc@^0.2.1":
98 version "0.2.1"
99 resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c"
100 integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==
101 dependencies:
102 ajv "^6.12.4"
103 debug "^4.1.1"
104 espree "^7.3.0"
105 globals "^12.1.0"
106 ignore "^4.0.6"
107 import-fresh "^3.2.1"
108 js-yaml "^3.13.1"
109 lodash "^4.17.19"
110 minimatch "^3.0.4"
111 strip-json-comments "^3.1.1"
112
98"@hapi/boom@^9.1.0": 113"@hapi/boom@^9.1.0":
99 version "9.1.0" 114 version "9.1.0"
100 resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.0.tgz#0d9517657a56ff1e0b42d0aca9da1b37706fec56" 115 resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.0.tgz#0d9517657a56ff1e0b42d0aca9da1b37706fec56"
@@ -103,26 +118,26 @@
103 "@hapi/hoek" "9.x.x" 118 "@hapi/hoek" "9.x.x"
104 119
105"@hapi/hoek@9.x.x": 120"@hapi/hoek@9.x.x":
106 version "9.0.4" 121 version "9.1.0"
107 resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.0.4.tgz#e80ad4e8e8d2adc6c77d985f698447e8628b6010" 122 resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6"
108 integrity sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw== 123 integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==
109 124
110"@jimp/bmp@^0.16.0": 125"@jimp/bmp@^0.16.1":
111 version "0.16.0" 126 version "0.16.1"
112 resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.0.tgz#8d96854b3f2dd64ffe11d46f73fd62b54e037d40" 127 resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.1.tgz#6e2da655b2ba22e721df0795423f34e92ef13768"
113 integrity sha512-lc4Ecyys6mRpKHLjFefkS1irCeIBTCpDBjKvNkU/6cIeIMXrFhv290MDT0WCL4UNFjJC/oU2PPraq+M+RkAcpA== 128 integrity sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==
114 dependencies: 129 dependencies:
115 "@babel/runtime" "^7.7.2" 130 "@babel/runtime" "^7.7.2"
116 "@jimp/utils" "^0.16.0" 131 "@jimp/utils" "^0.16.1"
117 bmp-js "^0.1.0" 132 bmp-js "^0.1.0"
118 133
119"@jimp/core@^0.16.0": 134"@jimp/core@^0.16.1":
120 version "0.16.0" 135 version "0.16.1"
121 resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.16.0.tgz#cad38113293bd711e00710c755c4d14aa977d6ff" 136 resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.16.1.tgz#68c4288f6ef7f31a0f6b859ba3fb28dae930d39d"
122 integrity sha512-7WBYr3BX84fc9tuA86EDhAKNyT9QLcbVYk4whwvshxKtODPxlF1hmZU6Xmx2shoJ62JJtiWLsPsXAHKfEuERtQ== 137 integrity sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==
123 dependencies: 138 dependencies:
124 "@babel/runtime" "^7.7.2" 139 "@babel/runtime" "^7.7.2"
125 "@jimp/utils" "^0.16.0" 140 "@jimp/utils" "^0.16.1"
126 any-base "^1.1.0" 141 any-base "^1.1.0"
127 buffer "^5.2.0" 142 buffer "^5.2.0"
128 exif-parser "^0.1.12" 143 exif-parser "^0.1.12"
@@ -133,266 +148,266 @@
133 pixelmatch "^4.0.2" 148 pixelmatch "^4.0.2"
134 tinycolor2 "^1.4.1" 149 tinycolor2 "^1.4.1"
135 150
136"@jimp/custom@^0.16.0": 151"@jimp/custom@^0.16.1":
137 version "0.16.0" 152 version "0.16.1"
138 resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.16.0.tgz#08489092e35425c8b3964efcf6172a08d5a93556" 153 resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.16.1.tgz#28b659c59e20a1d75a0c46067bd3f4bd302cf9c5"
139 integrity sha512-xN9WHeW2RP3gLdXdehCgnzKq8l9ezMsfWpkZP0HYtGqwGDSRXx+LNGR2Da1J/tV0pB+qbt67gAXtaxkJwdQ3cA== 154 integrity sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==
140 dependencies: 155 dependencies:
141 "@babel/runtime" "^7.7.2" 156 "@babel/runtime" "^7.7.2"
142 "@jimp/core" "^0.16.0" 157 "@jimp/core" "^0.16.1"
143 158
144"@jimp/gif@^0.16.0": 159"@jimp/gif@^0.16.1":
145 version "0.16.0" 160 version "0.16.1"
146 resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.16.0.tgz#241cb429cfaeec8843e63db0a1f3d4148c26950f" 161 resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.16.1.tgz#d1f7c3a58f4666482750933af8b8f4666414f3ca"
147 integrity sha512-thc3C6/dvGKEVTMxiX82ruRAitIx7EstThqzrd0qk7Yf2O3qbrRZuENl6KNn2PXpmkr6fjcfFLWVM39bP4MG1Q== 162 integrity sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==
148 dependencies: 163 dependencies:
149 "@babel/runtime" "^7.7.2" 164 "@babel/runtime" "^7.7.2"
150 "@jimp/utils" "^0.16.0" 165 "@jimp/utils" "^0.16.1"
151 gifwrap "^0.9.2" 166 gifwrap "^0.9.2"
152 omggif "^1.0.9" 167 omggif "^1.0.9"
153 168
154"@jimp/jpeg@^0.16.0": 169"@jimp/jpeg@^0.16.1":
155 version "0.16.0" 170 version "0.16.1"
156 resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.16.0.tgz#fc668d4a28a16abb57531783a4a9f6ab4408ad15" 171 resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.16.1.tgz#3b7bb08a4173f2f6d81f3049b251df3ee2ac8175"
157 integrity sha512-pzlv92YZi7ySvIICNkB0eMphLztBcTAMH2kl5lxFMzF1FDv2FR2d/FI1ph6DSzBV8VYFDu4AM1lJRq3hFJurgQ== 172 integrity sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==
158 dependencies: 173 dependencies:
159 "@babel/runtime" "^7.7.2" 174 "@babel/runtime" "^7.7.2"
160 "@jimp/utils" "^0.16.0" 175 "@jimp/utils" "^0.16.1"
161 jpeg-js "^0.4.0" 176 jpeg-js "0.4.2"
162 177
163"@jimp/plugin-blit@^0.16.0": 178"@jimp/plugin-blit@^0.16.1":
164 version "0.16.0" 179 version "0.16.1"
165 resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.16.0.tgz#215435d253710614c080082c209a030da939d140" 180 resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz#09ea919f9d326de3b9c2826fe4155da37dde8edb"
166 integrity sha512-CrakcEvr2ztOwECKpuwmwhXArbtDP2SB44WV0wrFXtuss2mkBbL/hIkUmTnLyJGpwIflj4Vww9m5yIreG5lgUQ== 181 integrity sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==
167 dependencies: 182 dependencies:
168 "@babel/runtime" "^7.7.2" 183 "@babel/runtime" "^7.7.2"
169 "@jimp/utils" "^0.16.0" 184 "@jimp/utils" "^0.16.1"
170 185
171"@jimp/plugin-blur@^0.16.0": 186"@jimp/plugin-blur@^0.16.1":
172 version "0.16.0" 187 version "0.16.1"
173 resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.16.0.tgz#d1630b95b247069e921bf80bd288d8acdf65eed9" 188 resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz#e614fa002797dcd662e705d4cea376e7db968bf5"
174 integrity sha512-CfTrQR4JY+DGtGbdAbdZgbUpjOqtcF+kmGOoa1uh3NF16tn1glbE8/0SA9YkgvHxNTmekwuT7Lu0nRq09MKVJw== 189 integrity sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==
175 dependencies: 190 dependencies:
176 "@babel/runtime" "^7.7.2" 191 "@babel/runtime" "^7.7.2"
177 "@jimp/utils" "^0.16.0" 192 "@jimp/utils" "^0.16.1"
178 193
179"@jimp/plugin-circle@^0.16.0": 194"@jimp/plugin-circle@^0.16.1":
180 version "0.16.0" 195 version "0.16.1"
181 resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.16.0.tgz#3b9bc2f3a93b7bec16f067e1ad03ee11c3ab43f0" 196 resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz#20e3194a67ca29740aba2630fd4d0a89afa27491"
182 integrity sha512-O79288GKwUIxpHR3qyYg0paH/Iegz+Bdo2ePIvD/M3MigEzVdj5dJ/CQXz2cUnJx87rc0k1N5cTI4floIgv0tg== 197 integrity sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==
183 dependencies: 198 dependencies:
184 "@babel/runtime" "^7.7.2" 199 "@babel/runtime" "^7.7.2"
185 "@jimp/utils" "^0.16.0" 200 "@jimp/utils" "^0.16.1"
186 201
187"@jimp/plugin-color@^0.16.0": 202"@jimp/plugin-color@^0.16.1":
188 version "0.16.0" 203 version "0.16.1"
189 resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.16.0.tgz#9fd6e5f60c2c8451486ce3b2b96f4eefd662397a" 204 resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.16.1.tgz#0f298ba74dee818b663834cd80d53e56f3755233"
190 integrity sha512-S4CbN1r5+VjUF9OBIyWxWBTXRNutLQqAAOkq7QX//lS4HY76eOAafgWWwZR7ci9WWZT8uyyw4tfd4ePoBvoYhw== 205 integrity sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==
191 dependencies: 206 dependencies:
192 "@babel/runtime" "^7.7.2" 207 "@babel/runtime" "^7.7.2"
193 "@jimp/utils" "^0.16.0" 208 "@jimp/utils" "^0.16.1"
194 tinycolor2 "^1.4.1" 209 tinycolor2 "^1.4.1"
195 210
196"@jimp/plugin-contain@^0.16.0": 211"@jimp/plugin-contain@^0.16.1":
197 version "0.16.0" 212 version "0.16.1"
198 resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.16.0.tgz#26116ec8c3520e0e659f460c2ab88c443445bff4" 213 resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz#3c5f5c495fd9bb08a970739d83694934f58123f2"
199 integrity sha512-ZAVe9ad0/TDLSPutIP/8Z+jXXOv638w/FZeA3avTAI5GfWV7ZBT6BB7kDI3iZTl+SHUjv/MlzHCS99WCnpc1hg== 214 integrity sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==
200 dependencies: 215 dependencies:
201 "@babel/runtime" "^7.7.2" 216 "@babel/runtime" "^7.7.2"
202 "@jimp/utils" "^0.16.0" 217 "@jimp/utils" "^0.16.1"
203 218
204"@jimp/plugin-cover@^0.16.0": 219"@jimp/plugin-cover@^0.16.1":
205 version "0.16.0" 220 version "0.16.1"
206 resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.16.0.tgz#1cfa9327ae81c1dfa57ca91120e653ea582cfb46" 221 resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz#0e8caec16a40abe15b1b32e5383a603a3306dc41"
207 integrity sha512-gJGorvc4HOeSR0dNR29mYLLXtrWvgj8da0B/lUJSb0R2AvUrb+VgLKSfFPyf+nL/jtcm9/CJzYhAPcz13zmRKA== 222 integrity sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==
208 dependencies: 223 dependencies:
209 "@babel/runtime" "^7.7.2" 224 "@babel/runtime" "^7.7.2"
210 "@jimp/utils" "^0.16.0" 225 "@jimp/utils" "^0.16.1"
211 226
212"@jimp/plugin-crop@^0.16.0": 227"@jimp/plugin-crop@^0.16.1":
213 version "0.16.0" 228 version "0.16.1"
214 resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.16.0.tgz#901052a0984f9259d082caab0560044fe43bcccd" 229 resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz#b362497c873043fe47ba881ab08604bf7226f50f"
215 integrity sha512-I5McmdrNodg0iU815qOsuI8CjkwiRsFRTY4/LBOsLGHZasvxhzFxGcwD3SgnohdIkhRc3tX8jfvKg2pdPbD2AA== 230 integrity sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==
216 dependencies: 231 dependencies:
217 "@babel/runtime" "^7.7.2" 232 "@babel/runtime" "^7.7.2"
218 "@jimp/utils" "^0.16.0" 233 "@jimp/utils" "^0.16.1"
219 234
220"@jimp/plugin-displace@^0.16.0": 235"@jimp/plugin-displace@^0.16.1":
221 version "0.16.0" 236 version "0.16.1"
222 resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.16.0.tgz#7dc9e57171b579d82945abc8a0259c2dbe38f601" 237 resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz#4dd9db518c3e78de9d723f86a234bf98922afe8d"
223 integrity sha512-+c5n5jDiN/neAuAxAAy55Gpycgmyay1PwUy8qKM1fgfBE874mrF5C4u1ThFz4OiDkRirKLpncRmrUMHa9boZtA== 238 integrity sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==
224 dependencies: 239 dependencies:
225 "@babel/runtime" "^7.7.2" 240 "@babel/runtime" "^7.7.2"
226 "@jimp/utils" "^0.16.0" 241 "@jimp/utils" "^0.16.1"
227 242
228"@jimp/plugin-dither@^0.16.0": 243"@jimp/plugin-dither@^0.16.1":
229 version "0.16.0" 244 version "0.16.1"
230 resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.16.0.tgz#753bfaf9f9d9da61954310e7e02da3cae0d929cd" 245 resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz#b47de2c0bb09608bed228b41c3cd01a85ec2d45b"
231 integrity sha512-rsLHSGnpWniQXoughYXRCbK/8KKXi+avV5z5mHIKzAKS4areXW03XlLqmy9o26q2h0g/YV5Hkxo9jwIw0v2Fpg== 246 integrity sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==
232 dependencies: 247 dependencies:
233 "@babel/runtime" "^7.7.2" 248 "@babel/runtime" "^7.7.2"
234 "@jimp/utils" "^0.16.0" 249 "@jimp/utils" "^0.16.1"
235 250
236"@jimp/plugin-fisheye@^0.16.0": 251"@jimp/plugin-fisheye@^0.16.1":
237 version "0.16.0" 252 version "0.16.1"
238 resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.0.tgz#cd7f148751834c61da8ec2015ac12eeb4ec4a008" 253 resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz#f625047b6cdbe1b83b89e9030fd025ab19cdb1a4"
239 integrity sha512-P6KsHQHUOWyDprxKl4chPTwKIJNbXB7LGDQH6Bq/q8zZ9XwYXGnTmkHA/BwGKI6HGCj/+R2WoP3Cnhwm6XaIpg== 254 integrity sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==
240 dependencies: 255 dependencies:
241 "@babel/runtime" "^7.7.2" 256 "@babel/runtime" "^7.7.2"
242 "@jimp/utils" "^0.16.0" 257 "@jimp/utils" "^0.16.1"
243 258
244"@jimp/plugin-flip@^0.16.0": 259"@jimp/plugin-flip@^0.16.1":
245 version "0.16.0" 260 version "0.16.1"
246 resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.16.0.tgz#43101e504082092042ea499686db2a86f168a2f7" 261 resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz#7a99ea22bde802641017ed0f2615870c144329bb"
247 integrity sha512-5MlqM1RJohk0NU0Z3ZtviI0DqHXDB0OuRk3dimUIquePz1OocFCt9Z4bBbDRIczGZFOrDrCrpHMfMxPjwm7eXw== 262 integrity sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==
248 dependencies: 263 dependencies:
249 "@babel/runtime" "^7.7.2" 264 "@babel/runtime" "^7.7.2"
250 "@jimp/utils" "^0.16.0" 265 "@jimp/utils" "^0.16.1"
251 266
252"@jimp/plugin-gaussian@^0.16.0": 267"@jimp/plugin-gaussian@^0.16.1":
253 version "0.16.0" 268 version "0.16.1"
254 resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.0.tgz#c0b5998dec529f55a8a16d1d53ca80f9c39302a4" 269 resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz#0845e314085ccd52e34fad9a83949bc0d81a68e8"
255 integrity sha512-oP2Hg4gR4uq9id1gF+SfTvPrzqZc3fVY+t6gwxPXPgpnb9S5UVuSQbwtixY1EEBC9XRdX2XFko9eUul8dTnUpQ== 270 integrity sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==
256 dependencies: 271 dependencies:
257 "@babel/runtime" "^7.7.2" 272 "@babel/runtime" "^7.7.2"
258 "@jimp/utils" "^0.16.0" 273 "@jimp/utils" "^0.16.1"
259 274
260"@jimp/plugin-invert@^0.16.0": 275"@jimp/plugin-invert@^0.16.1":
261 version "0.16.0" 276 version "0.16.1"
262 resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.16.0.tgz#a8a342e463b22ae44205550785e1c4e1a0acc246" 277 resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz#7e6f5a15707256f3778d06921675bbcf18545c97"
263 integrity sha512-RFsES55G7po6rv35A/3jz7IA1BOr8krX4H0zmtKUprcrhFl+El9iZojVCpJQRJ5QKQVS3iXi5H6EGN7AT1HykQ== 278 integrity sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==
264 dependencies: 279 dependencies:
265 "@babel/runtime" "^7.7.2" 280 "@babel/runtime" "^7.7.2"
266 "@jimp/utils" "^0.16.0" 281 "@jimp/utils" "^0.16.1"
267 282
268"@jimp/plugin-mask@^0.16.0": 283"@jimp/plugin-mask@^0.16.1":
269 version "0.16.0" 284 version "0.16.1"
270 resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.16.0.tgz#188566556ff0ddb85b9b0fc987f06bf7eee19ee8" 285 resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz#e7f2460e05c3cda7af5e76f33ccb0579f66f90df"
271 integrity sha512-inJweZgTNYZQdF0m5f/or5/LCLhpz4ccSDsK9HveuFQ82ITfJcvFaUlvlo11pHRl2r+Q92Er7B5g7icMIzXHZw== 286 integrity sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==
272 dependencies: 287 dependencies:
273 "@babel/runtime" "^7.7.2" 288 "@babel/runtime" "^7.7.2"
274 "@jimp/utils" "^0.16.0" 289 "@jimp/utils" "^0.16.1"
275 290
276"@jimp/plugin-normalize@^0.16.0": 291"@jimp/plugin-normalize@^0.16.1":
277 version "0.16.0" 292 version "0.16.1"
278 resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.16.0.tgz#668d3ac26fe77069cc1c4ed1089f271abe2784fc" 293 resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz#032dfd88eefbc4dedc8b1b2d243832e4f3af30c8"
279 integrity sha512-sfqhHDGks0ccqIaTCG/dFJ772eGi8bewxIvrQkeLw5TizzPZ3S+C4GXKwlkX2z5dyQr30cHM5Mv6+XhNNLEHWw== 294 integrity sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==
280 dependencies: 295 dependencies:
281 "@babel/runtime" "^7.7.2" 296 "@babel/runtime" "^7.7.2"
282 "@jimp/utils" "^0.16.0" 297 "@jimp/utils" "^0.16.1"
283 298
284"@jimp/plugin-print@^0.16.0": 299"@jimp/plugin-print@^0.16.1":
285 version "0.16.0" 300 version "0.16.1"
286 resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.16.0.tgz#537b9ade9b0b21b876013f17c908cb466afd8b03" 301 resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.16.1.tgz#66b803563f9d109825970714466e6ab9ae639ff6"
287 integrity sha512-tQJfSOTf+las/PJpdUK9Aw9EdComQ50zl29TgMrAULuae1lh+e/A188ZhNQzTCpAAc/PEku8xoke+rYUU1AVig== 302 integrity sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==
288 dependencies: 303 dependencies:
289 "@babel/runtime" "^7.7.2" 304 "@babel/runtime" "^7.7.2"
290 "@jimp/utils" "^0.16.0" 305 "@jimp/utils" "^0.16.1"
291 load-bmfont "^1.4.0" 306 load-bmfont "^1.4.0"
292 307
293"@jimp/plugin-resize@^0.16.0": 308"@jimp/plugin-resize@^0.16.1":
294 version "0.16.0" 309 version "0.16.1"
295 resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.16.0.tgz#91d16bf12e23f43a76e2698725921ba45529ac97" 310 resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz#65e39d848ed13ba2d6c6faf81d5d590396571d10"
296 integrity sha512-aI5H1Xe1fE1phBBI0EgQiVgMEXJ7cy2CXH+H7WSxnrdZJTnt9emzc4LnvKEOPBY6dCPw3P7k/BHp9SDTpUKSOQ== 311 integrity sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==
297 dependencies: 312 dependencies:
298 "@babel/runtime" "^7.7.2" 313 "@babel/runtime" "^7.7.2"
299 "@jimp/utils" "^0.16.0" 314 "@jimp/utils" "^0.16.1"
300 315
301"@jimp/plugin-rotate@^0.16.0": 316"@jimp/plugin-rotate@^0.16.1":
302 version "0.16.0" 317 version "0.16.1"
303 resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.16.0.tgz#1c6ef9d50f935a4ec4ce72b978333bbc91338a6e" 318 resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz#53fb5d51a4b3d05af9c91c2a8fffe5d7a1a47c8c"
304 integrity sha512-YTKo4LntC2h46H6+De+3ctt8MacC+fTbIdw527BBBIKF44aWYn0uAQlAO+R+Aemnq4YqNnCnrZzPtWYZXA6nNw== 319 integrity sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==
305 dependencies: 320 dependencies:
306 "@babel/runtime" "^7.7.2" 321 "@babel/runtime" "^7.7.2"
307 "@jimp/utils" "^0.16.0" 322 "@jimp/utils" "^0.16.1"
308 323
309"@jimp/plugin-scale@^0.16.0": 324"@jimp/plugin-scale@^0.16.1":
310 version "0.16.0" 325 version "0.16.1"
311 resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.16.0.tgz#4a4519058a390033ee5d274822e55c7565354498" 326 resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz#89f6ba59feed3429847ed226aebda33a240cc647"
312 integrity sha512-AfDnTIjBzGdvJ1K7MkUexgkGGAYDzpNzkYoCpfaRNKl/txoivaA6iKfvCiE7i1IDXq5mRCLkjQjMF43l8kwv5g== 327 integrity sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==
313 dependencies: 328 dependencies:
314 "@babel/runtime" "^7.7.2" 329 "@babel/runtime" "^7.7.2"
315 "@jimp/utils" "^0.16.0" 330 "@jimp/utils" "^0.16.1"
316 331
317"@jimp/plugin-shadow@^0.16.0": 332"@jimp/plugin-shadow@^0.16.1":
318 version "0.16.0" 333 version "0.16.1"
319 resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.16.0.tgz#3ca117ce1dd90756dfb8fcda57f7e56e45240188" 334 resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz#a7af892a740febf41211e10a5467c3c5c521a04c"
320 integrity sha512-8O1CKwvSnrrAIuAM3BEDTwt4U5oRVB5pXxnRegYXDuFFLDPIp2N4ILQqC2NaN+PBaVvj1JuLYuxmNzja0uRQKQ== 335 integrity sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==
321 dependencies: 336 dependencies:
322 "@babel/runtime" "^7.7.2" 337 "@babel/runtime" "^7.7.2"
323 "@jimp/utils" "^0.16.0" 338 "@jimp/utils" "^0.16.1"
324 339
325"@jimp/plugin-threshold@^0.16.0": 340"@jimp/plugin-threshold@^0.16.1":
326 version "0.16.0" 341 version "0.16.1"
327 resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.16.0.tgz#98bf41f89c0bd371cc950e222eab45035819d237" 342 resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz#34f3078f9965145b7ae26c53a32ad74b1195bbf5"
328 integrity sha512-PNrB6IIF7kDGu7A/cyNAy3pchWtXbJGdpowkW6hcEzXOR+FwBRMuo5LS+q/eedo86qQ2F1vw5dm/nWYJxNxvkg== 343 integrity sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==
329 dependencies: 344 dependencies:
330 "@babel/runtime" "^7.7.2" 345 "@babel/runtime" "^7.7.2"
331 "@jimp/utils" "^0.16.0" 346 "@jimp/utils" "^0.16.1"
332 347
333"@jimp/plugins@^0.16.0": 348"@jimp/plugins@^0.16.1":
334 version "0.16.0" 349 version "0.16.1"
335 resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.16.0.tgz#d0d140675978110ccc3c4d0b13bb129c93b23638" 350 resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.16.1.tgz#9f08544c97226d6460a16ced79f57e85bec3257b"
336 integrity sha512-aiyn/9MrSqVJwsnBmkbHD4DWTowULdP4NEes8Vt738KxZMw1UawKbEbj3/CzHIeEIQKjDECTi+jNd5HIbDq9LQ== 351 integrity sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==
337 dependencies: 352 dependencies:
338 "@babel/runtime" "^7.7.2" 353 "@babel/runtime" "^7.7.2"
339 "@jimp/plugin-blit" "^0.16.0" 354 "@jimp/plugin-blit" "^0.16.1"
340 "@jimp/plugin-blur" "^0.16.0" 355 "@jimp/plugin-blur" "^0.16.1"
341 "@jimp/plugin-circle" "^0.16.0" 356 "@jimp/plugin-circle" "^0.16.1"
342 "@jimp/plugin-color" "^0.16.0" 357 "@jimp/plugin-color" "^0.16.1"
343 "@jimp/plugin-contain" "^0.16.0" 358 "@jimp/plugin-contain" "^0.16.1"
344 "@jimp/plugin-cover" "^0.16.0" 359 "@jimp/plugin-cover" "^0.16.1"
345 "@jimp/plugin-crop" "^0.16.0" 360 "@jimp/plugin-crop" "^0.16.1"
346 "@jimp/plugin-displace" "^0.16.0" 361 "@jimp/plugin-displace" "^0.16.1"
347 "@jimp/plugin-dither" "^0.16.0" 362 "@jimp/plugin-dither" "^0.16.1"
348 "@jimp/plugin-fisheye" "^0.16.0" 363 "@jimp/plugin-fisheye" "^0.16.1"
349 "@jimp/plugin-flip" "^0.16.0" 364 "@jimp/plugin-flip" "^0.16.1"
350 "@jimp/plugin-gaussian" "^0.16.0" 365 "@jimp/plugin-gaussian" "^0.16.1"
351 "@jimp/plugin-invert" "^0.16.0" 366 "@jimp/plugin-invert" "^0.16.1"
352 "@jimp/plugin-mask" "^0.16.0" 367 "@jimp/plugin-mask" "^0.16.1"
353 "@jimp/plugin-normalize" "^0.16.0" 368 "@jimp/plugin-normalize" "^0.16.1"
354 "@jimp/plugin-print" "^0.16.0" 369 "@jimp/plugin-print" "^0.16.1"
355 "@jimp/plugin-resize" "^0.16.0" 370 "@jimp/plugin-resize" "^0.16.1"
356 "@jimp/plugin-rotate" "^0.16.0" 371 "@jimp/plugin-rotate" "^0.16.1"
357 "@jimp/plugin-scale" "^0.16.0" 372 "@jimp/plugin-scale" "^0.16.1"
358 "@jimp/plugin-shadow" "^0.16.0" 373 "@jimp/plugin-shadow" "^0.16.1"
359 "@jimp/plugin-threshold" "^0.16.0" 374 "@jimp/plugin-threshold" "^0.16.1"
360 timm "^1.6.1" 375 timm "^1.6.1"
361 376
362"@jimp/png@^0.16.0": 377"@jimp/png@^0.16.1":
363 version "0.16.0" 378 version "0.16.1"
364 resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.16.0.tgz#d18f16ca8037ebfabab6e1c62b516329fbd356d8" 379 resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.16.1.tgz#f24cfc31529900b13a2dd9d4fdb4460c1e4d814e"
365 integrity sha512-3uDwCeZRaHTq6Jqjav37n73IGL4vrDkoHLzkC+dAGcSdaKnUnRxD/sO4CBTK1cHttJhsf5Xk/+0dO+qaqIEvNA== 380 integrity sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==
366 dependencies: 381 dependencies:
367 "@babel/runtime" "^7.7.2" 382 "@babel/runtime" "^7.7.2"
368 "@jimp/utils" "^0.16.0" 383 "@jimp/utils" "^0.16.1"
369 pngjs "^3.3.3" 384 pngjs "^3.3.3"
370 385
371"@jimp/tiff@^0.16.0": 386"@jimp/tiff@^0.16.1":
372 version "0.16.0" 387 version "0.16.1"
373 resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.16.0.tgz#4c549b3bb0adebbddf0a0315b1893584b5520b70" 388 resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.16.1.tgz#0e8756695687d7574b6bc73efab0acd4260b7a12"
374 integrity sha512-wiGgIKGtUwR7vUi+PHv7qzEKhlnqT/k78qtOgsF6PiGhXGevJWBIniD4LksbQaW+Ph1Jwl3ovvYEdS89Db46Bw== 389 integrity sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==
375 dependencies: 390 dependencies:
376 "@babel/runtime" "^7.7.2" 391 "@babel/runtime" "^7.7.2"
377 utif "^2.0.1" 392 utif "^2.0.1"
378 393
379"@jimp/types@^0.16.0": 394"@jimp/types@^0.16.1":
380 version "0.16.0" 395 version "0.16.1"
381 resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.16.0.tgz#cc07b42ccc9e227a1adb6cb742befcf29d538e5e" 396 resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.16.1.tgz#0dbab37b3202315c91010f16c31766d35a2322cc"
382 integrity sha512-T0VBF1HFXZ+Ez48zQ0sxrOpcFbfSzCulaVONWeEi/CqcNv2B7UmiaA81bw9uLGZ40VIOrFYHB20ma0m1asYBvw== 397 integrity sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==
383 dependencies: 398 dependencies:
384 "@babel/runtime" "^7.7.2" 399 "@babel/runtime" "^7.7.2"
385 "@jimp/bmp" "^0.16.0" 400 "@jimp/bmp" "^0.16.1"
386 "@jimp/gif" "^0.16.0" 401 "@jimp/gif" "^0.16.1"
387 "@jimp/jpeg" "^0.16.0" 402 "@jimp/jpeg" "^0.16.1"
388 "@jimp/png" "^0.16.0" 403 "@jimp/png" "^0.16.1"
389 "@jimp/tiff" "^0.16.0" 404 "@jimp/tiff" "^0.16.1"
390 timm "^1.6.1" 405 timm "^1.6.1"
391 406
392"@jimp/utils@^0.16.0": 407"@jimp/utils@^0.16.1":
393 version "0.16.0" 408 version "0.16.1"
394 resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.16.0.tgz#5a5f2755b468fa2afe024a81455905a038b88391" 409 resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.16.1.tgz#2f51e6f14ff8307c4aa83d5e1a277da14a9fe3f7"
395 integrity sha512-dZJd5Rq4yOjPtqN/bArNy0v03nnaiHCf/Qct2wdiqK0k4wsfDL2Lle9XmswNcPPFuoL/LNnYY2E5ruAnatF/4A== 410 integrity sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==
396 dependencies: 411 dependencies:
397 "@babel/runtime" "^7.7.2" 412 "@babel/runtime" "^7.7.2"
398 regenerator-runtime "^0.13.3" 413 regenerator-runtime "^0.13.3"
@@ -402,37 +417,38 @@
402 resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" 417 resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796"
403 integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== 418 integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==
404 419
405"@ladjs/i18n@^3.0.10": 420"@ladjs/i18n@^6.0.5":
406 version "3.0.13" 421 version "6.0.5"
407 resolved "https://registry.yarnpkg.com/@ladjs/i18n/-/i18n-3.0.13.tgz#62ec19c94bccef91aaf3f064e0ed9913e35a4ac9" 422 resolved "https://registry.yarnpkg.com/@ladjs/i18n/-/i18n-6.0.5.tgz#a0598310c569cf26bdf8eb3a474cc1c3d7e49e0b"
408 integrity sha512-V4Y2xw/u7lQrOXqnmBUKTFRAuA6Hw6eJheddhbHvjGUav0XD57gUH6gNzuzqaHeZvyFll08YENVjcV7MuO4zOQ== 423 integrity sha512-l9Bkdo67dKcrWDyCkoEVpLEPMa8hdJbwe1gv0VWwD0fHIlvEAiNIAmka0ELF7H0ccNLqbKZx4vWKvkp0ufYFvw==
409 dependencies: 424 dependencies:
410 "@hapi/boom" "^9.1.0" 425 "@hapi/boom" "^9.1.0"
411 boolean "3.0.1" 426 boolean "3.0.1"
412 country-language "^0.1.7" 427 country-language "^0.1.7"
413 debug "^4.1.1" 428 debug "^4.2.0"
414 i18n "^0.9.1" 429 i18n "^0.13.2"
415 i18n-locales "^0.0.4" 430 i18n-locales "^0.0.4"
416 lodash "^4.17.15" 431 lodash "^4.17.20"
417 moment "^2.25.3" 432 multimatch "^5.0.0"
418 multimatch "^4.0.0" 433 punycode "^2.1.1"
419 qs "^6.9.4" 434 qs "^6.9.4"
420 titleize "^2.1.0" 435 titleize "^2.1.0"
436 tlds "^1.212.0"
421 437
422"@openapitools/openapi-generator-cli@^1.0.15-4.3.1": 438"@openapitools/openapi-generator-cli@^1.0.15-4.3.1":
423 version "1.0.15-4.3.1" 439 version "1.0.15-5.0.0-beta"
424 resolved "https://registry.yarnpkg.com/@openapitools/openapi-generator-cli/-/openapi-generator-cli-1.0.15-4.3.1.tgz#25ef943eba3c82e82379b30f858bb05ed97dae0b" 440 resolved "https://registry.yarnpkg.com/@openapitools/openapi-generator-cli/-/openapi-generator-cli-1.0.15-5.0.0-beta.tgz#01b4805308d10762655158f446ebc54032ca33cc"
425 integrity sha512-U+sanspDmeBElVNjYHQ4U7BbSEJUQzjNKmiTzXpcEw/r93sgxmzS2Sew5t+Zj6kyN1YTvjhRjJikNcW9/bmTKA== 441 integrity sha512-4Sbl/o2XbArryKnvsAtrK4UwXe0nTGnHErkYlMuIZYWBIZdEq8EeHHHHcVLlH1K3LZVP+uu18If51DcLtqVW4A==
426 442
427"@sindresorhus/is@^0.14.0": 443"@sindresorhus/is@^0.14.0":
428 version "0.14.0" 444 version "0.14.0"
429 resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 445 resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
430 integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 446 integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
431 447
432"@sindresorhus/is@^2.1.1": 448"@sindresorhus/is@^4.0.0":
433 version "2.1.1" 449 version "4.0.0"
434 resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" 450 resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4"
435 integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== 451 integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==
436 452
437"@szmarczak/http-timer@^1.1.2": 453"@szmarczak/http-timer@^1.1.2":
438 version "1.1.2" 454 version "1.1.2"
@@ -459,9 +475,9 @@
459 integrity sha512-deXFjLZc1h6SOh3hicVgD+S2EAkhSBGX/vdlD4nTzCjjOFQ+bfNiXocQ21xJjFAUwqaCeyvOQMgrnbg4QEV63A== 475 integrity sha512-deXFjLZc1h6SOh3hicVgD+S2EAkhSBGX/vdlD4nTzCjjOFQ+bfNiXocQ21xJjFAUwqaCeyvOQMgrnbg4QEV63A==
460 476
461"@types/babel-types@*", "@types/babel-types@^7.0.0": 477"@types/babel-types@*", "@types/babel-types@^7.0.0":
462 version "7.0.8" 478 version "7.0.9"
463 resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.8.tgz#267f405bda841ffae731e7714166b88254cc3e19" 479 resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.9.tgz#01d7b86949f455402a94c788883fe4ba574cad41"
464 integrity sha512-jvu8g4LR7+p6ao30RhTREnEhHxmP4/R9D9/rOR/Kq14FztORty9SKgtOZUNZNMB9CXLxZ54EWu4dArUE8WdTsw== 480 integrity sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==
465 481
466"@types/babylon@^6.16.2": 482"@types/babylon@^6.16.2":
467 version "6.16.5" 483 version "6.16.5"
@@ -527,14 +543,9 @@
527 "@types/chai" "*" 543 "@types/chai" "*"
528 544
529"@types/chai@*", "@types/chai@^4.0.4": 545"@types/chai@*", "@types/chai@^4.0.4":
530 version "4.2.12" 546 version "4.2.14"
531 resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.12.tgz#6160ae454cd89dae05adc3bb97997f488b608201" 547 resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.14.tgz#44d2dd0b5de6185089375d976b4ec5caf6861193"
532 integrity sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ== 548 integrity sha512-G+ITQPXkwTrslfG5L/BksmbLUA0M1iybEsmCWPqzSxsRRhJZimBKJkoMi8fr/CPygPTj4zO5pJH7I2/cm9M7SQ==
533
534"@types/color-name@^1.1.1":
535 version "1.1.1"
536 resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
537 integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
538 549
539"@types/config@^0.0.36": 550"@types/config@^0.0.36":
540 version "0.0.36" 551 version "0.0.36"
@@ -549,9 +560,9 @@
549 "@types/node" "*" 560 "@types/node" "*"
550 561
551"@types/cookiejar@*": 562"@types/cookiejar@*":
552 version "2.1.1" 563 version "2.1.2"
553 resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.1.tgz#90b68446364baf9efd8e8349bb36bd3852b75b80" 564 resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8"
554 integrity sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw== 565 integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==
555 566
556"@types/engine.io@*": 567"@types/engine.io@*":
557 version "3.1.4" 568 version "3.1.4"
@@ -573,18 +584,18 @@
573 "@types/express" "*" 584 "@types/express" "*"
574 585
575"@types/express-serve-static-core@*": 586"@types/express-serve-static-core@*":
576 version "4.17.9" 587 version "4.17.13"
577 resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.9.tgz#2d7b34dcfd25ec663c25c85d76608f8b249667f1" 588 resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz#d9af025e925fc8b089be37423b8d1eac781be084"
578 integrity sha512-DG0BYg6yO+ePW+XoDENYz8zhNGC3jDDEpComMYn7WJc4mY1Us8Rw9ax2YhJXxpyk2SF47PQAoQ0YyVT1a0bEkA== 589 integrity sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==
579 dependencies: 590 dependencies:
580 "@types/node" "*" 591 "@types/node" "*"
581 "@types/qs" "*" 592 "@types/qs" "*"
582 "@types/range-parser" "*" 593 "@types/range-parser" "*"
583 594
584"@types/express@*", "@types/express@^4.0.35": 595"@types/express@*", "@types/express@^4.0.35":
585 version "4.17.7" 596 version "4.17.8"
586 resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.7.tgz#42045be6475636d9801369cd4418ef65cdb0dd59" 597 resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.8.tgz#3df4293293317e61c60137d273a2e96cd8d5f27a"
587 integrity sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ== 598 integrity sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ==
588 dependencies: 599 dependencies:
589 "@types/body-parser" "*" 600 "@types/body-parser" "*"
590 "@types/express-serve-static-core" "*" 601 "@types/express-serve-static-core" "*"
@@ -599,23 +610,23 @@
599 "@types/node" "*" 610 "@types/node" "*"
600 611
601"@types/fs-extra@^9.0.1": 612"@types/fs-extra@^9.0.1":
602 version "9.0.1" 613 version "9.0.3"
603 resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.1.tgz#91c8fc4c51f6d5dbe44c2ca9ab09310bd00c7918" 614 resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.3.tgz#9996e5cce993508c32325380b429f04a1327523e"
604 integrity sha512-B42Sxuaz09MhC3DDeW5kubRcQ5by4iuVQ0cRRWM2lggLzAa/KVom0Aft/208NgMvNQQZ86s5rVcqDdn/SH0/mg== 615 integrity sha512-NKdGoXLTFTRED3ENcfCsH8+ekV4gbsysanx2OPbstXVV6fZMgUCqTxubs6I9r7pbOJbFgVq1rpFtLURjKCZWUw==
605 dependencies: 616 dependencies:
606 "@types/node" "*" 617 "@types/node" "*"
607 618
608"@types/ioredis@*": 619"@types/ioredis@*":
609 version "4.17.3" 620 version "4.17.7"
610 resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.17.3.tgz#65ba8b9344576ecb229c57ec1db92be3fe830ee9" 621 resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.17.7.tgz#5007a56380fd387315efabc6c777c050feabb121"
611 integrity sha512-G0pN/WZb7OBMFksZOBcqATBUeBII00IZ7C9OW0bm7VG3XMXBI75stTXWLBxm6iNLQxdjFZgzThRbc3gBXBhZGw== 622 integrity sha512-M8/KDSGmNYhPFMn+CxDDpIEHP27b2muEHgnK1UgIQIMEO2KXH9mznHx3epeRlD+AjF94HFh3dy2/9zqO+pPDqQ==
612 dependencies: 623 dependencies:
613 "@types/node" "*" 624 "@types/node" "*"
614 625
615"@types/json-schema@^7.0.3": 626"@types/json-schema@^7.0.3":
616 version "7.0.5" 627 version "7.0.6"
617 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" 628 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
618 integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== 629 integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
619 630
620"@types/json5@^0.0.29": 631"@types/json5@^0.0.29":
621 version "0.0.29" 632 version "0.0.29"
@@ -630,9 +641,9 @@
630 "@types/node" "*" 641 "@types/node" "*"
631 642
632"@types/lodash@^4.14.64": 643"@types/lodash@^4.14.64":
633 version "4.14.160" 644 version "4.14.165"
634 resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.160.tgz#2f1bba6500bc3cb9a732c6d66a083378fb0b0b29" 645 resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.165.tgz#74d55d947452e2de0742bad65270433b63a8c30f"
635 integrity sha512-aP03BShJoO+WVndoVj/WNcB/YBPt+CIU1mvaao2GRAHy2yg4pT/XS4XnVHEQBjPJGycWf/9seKEO9vopTJGkvA== 646 integrity sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==
636 647
637"@types/lru-cache@^5.1.0": 648"@types/lru-cache@^5.1.0":
638 version "5.1.0" 649 version "5.1.0"
@@ -654,9 +665,9 @@
654 "@types/node" "*" 665 "@types/node" "*"
655 666
656"@types/memoizee@^0.4.2": 667"@types/memoizee@^0.4.2":
657 version "0.4.4" 668 version "0.4.5"
658 resolved "https://registry.yarnpkg.com/@types/memoizee/-/memoizee-0.4.4.tgz#a8a5e917ef70c79523b8b8d57f529e49616a760c" 669 resolved "https://registry.yarnpkg.com/@types/memoizee/-/memoizee-0.4.5.tgz#cb4e7031decf698c52c4f57c348180b0385aa7da"
659 integrity sha512-c9+1g6+6vEqcw5UuM0RbfQV0mssmZcoG9+hNC5ptDCsv4G+XJW1Z4pE13wV5zbc9e0+YrDydALBTiD3nWG1a3g== 670 integrity sha512-+ZzZZ3+0a7/ajBPeAAD4+LxrBsCat0EFZQtO3o0rwpIeLmDmSaM8KF/oYPuFxeUFAMiHIHFcGucFnY/8S4Hszg==
660 671
661"@types/mime@*": 672"@types/mime@*":
662 version "2.0.3" 673 version "2.0.3"
@@ -681,9 +692,9 @@
681 integrity sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg== 692 integrity sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg==
682 693
683"@types/morgan@^1.7.32": 694"@types/morgan@^1.7.32":
684 version "1.9.1" 695 version "1.9.2"
685 resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.1.tgz#6457872df95647c1dbc6b3741e8146b71ece74bf" 696 resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.2.tgz#450f958a4d3fb0694a3ba012b09c8106f9a2885e"
686 integrity sha512-2j5IKrgJpEP6xw/uiVb2Xfga0W0sSVD9JP9t7EZLvpBENdB0OKgcnoKS8IsjNeNnZ/86robdZ61Orl0QCFGOXg== 697 integrity sha512-edtGMEdit146JwwIeyQeHHg9yID4WSolQPxpEorHmN3KuytuCHyn2ELNr5Uxy8SerniFbbkmgKMrGM933am5BQ==
687 dependencies: 698 dependencies:
688 "@types/node" "*" 699 "@types/node" "*"
689 700
@@ -694,10 +705,10 @@
694 dependencies: 705 dependencies:
695 "@types/express" "*" 706 "@types/express" "*"
696 707
697"@types/node@*", "@types/node@^14.0.13", "@types/node@^14.0.18": 708"@types/node@*", "@types/node@^14.0.13", "@types/node@^14.14.6":
698 version "14.6.0" 709 version "14.14.6"
699 resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" 710 resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f"
700 integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA== 711 integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==
701 712
702"@types/nodemailer@^6.2.0": 713"@types/nodemailer@^6.2.0":
703 version "6.4.0" 714 version "6.4.0"
@@ -737,9 +748,9 @@
737 "@types/node" "*" 748 "@types/node" "*"
738 749
739"@types/qs@*": 750"@types/qs@*":
740 version "6.9.4" 751 version "6.9.5"
741 resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a" 752 resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b"
742 integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ== 753 integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==
743 754
744"@types/range-parser@*": 755"@types/range-parser@*":
745 version "1.2.3" 756 version "1.2.3"
@@ -747,9 +758,9 @@
747 integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== 758 integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
748 759
749"@types/redis@*", "@types/redis@^2.8.5": 760"@types/redis@*", "@types/redis@^2.8.5":
750 version "2.8.26" 761 version "2.8.28"
751 resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.26.tgz#c7e773cc59b7b8b887fa3e1bc45b5abee2326480" 762 resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.28.tgz#5862b2b64aa7f7cbc76dafd7e6f06992b52c55e3"
752 integrity sha512-/Sot3oAGnrHQ9C3HRFXDApzBEugoYFyh4Pd8y1d9x4yCoOejFLbrD5gWQrsdANPpSj8VbucEJrNMJv1nzMptIA== 763 integrity sha512-8l2gr2OQ969ypa7hFOeKqtFoY70XkHxISV0pAwmQ2nm6CSPb1brmTmqJCGGrekCo+pAZyWlNXr+Kvo6L/1wijA==
753 dependencies: 764 dependencies:
754 "@types/node" "*" 765 "@types/node" "*"
755 766
@@ -771,17 +782,17 @@
771 "@types/node" "*" 782 "@types/node" "*"
772 783
773"@types/serve-static@*": 784"@types/serve-static@*":
774 version "1.13.5" 785 version "1.13.6"
775 resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.5.tgz#3d25d941a18415d3ab092def846e135a08bbcf53" 786 resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.6.tgz#866b1b8dec41c36e28c7be40ac725b88be43c5c1"
776 integrity sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ== 787 integrity sha512-nuRJmv7jW7VmCVTn+IgYDkkbbDGyIINOeu/G0d74X3lm6E5KfMeQPJhxIt1ayQeQB3cSxvYs1RA/wipYoFB4EA==
777 dependencies: 788 dependencies:
778 "@types/express-serve-static-core" "*"
779 "@types/mime" "*" 789 "@types/mime" "*"
790 "@types/node" "*"
780 791
781"@types/simple-peer@*": 792"@types/simple-peer@*":
782 version "9.6.0" 793 version "9.6.1"
783 resolved "https://registry.yarnpkg.com/@types/simple-peer/-/simple-peer-9.6.0.tgz#b5828d835b7f42dde27db584ba127e7a9f9072f4" 794 resolved "https://registry.yarnpkg.com/@types/simple-peer/-/simple-peer-9.6.1.tgz#461ff4159cfaca861cb2fe695de6e557881a98c8"
784 integrity sha512-X2y6s+vE/3j03hkI90oqld2JH2J/m1L7yFCYYPyFV/whrOK1h4neYvJL3GIE+UcACJacXZqzdmDKudwec18RbA== 795 integrity sha512-WdXxmHW+m0NaD5XPGlp5AB7raq+NUWX/+/aQvDcoOx0qiP78QmDdk015W29uoyvGhyiJCb9dZJuI2Oi39zGRfg==
785 dependencies: 796 dependencies:
786 "@types/node" "*" 797 "@types/node" "*"
787 798
@@ -794,9 +805,9 @@
794 "@types/node" "*" 805 "@types/node" "*"
795 806
796"@types/superagent@*": 807"@types/superagent@*":
797 version "4.1.9" 808 version "4.1.10"
798 resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.9.tgz#d899d3bc90b17eb298cac18b7aa22f7c3ec88c13" 809 resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.10.tgz#5e2cc721edf58f64fe9b819f326ee74803adee86"
799 integrity sha512-gpIC0p49YHT4VYDbdl0fKjOMWBurJFfYtKUIxOHzOwBtu5VT29FyldFI2vbmZ1K2iH2vS6MVcJZMjHM+652l4Q== 810 integrity sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==
800 dependencies: 811 dependencies:
801 "@types/cookiejar" "*" 812 "@types/cookiejar" "*"
802 "@types/node" "*" 813 "@types/node" "*"
@@ -834,58 +845,58 @@
834 "@types/simple-peer" "*" 845 "@types/simple-peer" "*"
835 846
836"@types/ws@^7.2.1": 847"@types/ws@^7.2.1":
837 version "7.2.6" 848 version "7.2.9"
838 resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.6.tgz#516cbfb818310f87b43940460e065eb912a4178d" 849 resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.9.tgz#cadfac473acfab192678a487c3ecbb13a503547f"
839 integrity sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ== 850 integrity sha512-gmXYAXr7G4BrRMnkGQGkGonc3ArVro9VZd//C1uns/qqsJyl2dxaJdlPMhZbcq5MTxFFC+ttFWtHSfVW5+hlRA==
840 dependencies: 851 dependencies:
841 "@types/node" "*" 852 "@types/node" "*"
842 853
843"@typescript-eslint/eslint-plugin@^3.3.0": 854"@typescript-eslint/eslint-plugin@^3.3.0":
844 version "3.10.0" 855 version "3.10.1"
845 resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.0.tgz#40fd53e81639c0d1a515b44e5fdf4c03dfd3cd39" 856 resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f"
846 integrity sha512-Bbeg9JAnSzZ85Y0gpInZscSpifA6SbEgRryaKdP5ZlUjhTKsvZS4GUIE6xAZCjhNTrf4zXXsySo83ZdHL7it0w== 857 integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==
847 dependencies: 858 dependencies:
848 "@typescript-eslint/experimental-utils" "3.10.0" 859 "@typescript-eslint/experimental-utils" "3.10.1"
849 debug "^4.1.1" 860 debug "^4.1.1"
850 functional-red-black-tree "^1.0.1" 861 functional-red-black-tree "^1.0.1"
851 regexpp "^3.0.0" 862 regexpp "^3.0.0"
852 semver "^7.3.2" 863 semver "^7.3.2"
853 tsutils "^3.17.1" 864 tsutils "^3.17.1"
854 865
855"@typescript-eslint/experimental-utils@3.10.0": 866"@typescript-eslint/experimental-utils@3.10.1":
856 version "3.10.0" 867 version "3.10.1"
857 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.0.tgz#f97a669a84a78319ab324cd51169d0c52853a360" 868 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686"
858 integrity sha512-e5ZLSTuXgqC/Gq3QzK2orjlhTZVXzwxDujQmTBOM1NIVBZgW3wiIZjaXuVutk9R4UltFlwC9UD2+bdxsA7yyNg== 869 integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==
859 dependencies: 870 dependencies:
860 "@types/json-schema" "^7.0.3" 871 "@types/json-schema" "^7.0.3"
861 "@typescript-eslint/types" "3.10.0" 872 "@typescript-eslint/types" "3.10.1"
862 "@typescript-eslint/typescript-estree" "3.10.0" 873 "@typescript-eslint/typescript-estree" "3.10.1"
863 eslint-scope "^5.0.0" 874 eslint-scope "^5.0.0"
864 eslint-utils "^2.0.0" 875 eslint-utils "^2.0.0"
865 876
866"@typescript-eslint/parser@^3.0.1": 877"@typescript-eslint/parser@^3.0.1":
867 version "3.10.0" 878 version "3.10.1"
868 resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.0.tgz#820322d990a82265a78f4c1fc9aae03ce95b76ac" 879 resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467"
869 integrity sha512-iJyf3f2HVwscvJR7ySGMXw2DJgIAPKEz8TeU17XVKzgJRV4/VgCeDFcqLzueRe7iFI2gv+Tln4AV88ZOnsCNXg== 880 integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==
870 dependencies: 881 dependencies:
871 "@types/eslint-visitor-keys" "^1.0.0" 882 "@types/eslint-visitor-keys" "^1.0.0"
872 "@typescript-eslint/experimental-utils" "3.10.0" 883 "@typescript-eslint/experimental-utils" "3.10.1"
873 "@typescript-eslint/types" "3.10.0" 884 "@typescript-eslint/types" "3.10.1"
874 "@typescript-eslint/typescript-estree" "3.10.0" 885 "@typescript-eslint/typescript-estree" "3.10.1"
875 eslint-visitor-keys "^1.1.0" 886 eslint-visitor-keys "^1.1.0"
876 887
877"@typescript-eslint/types@3.10.0": 888"@typescript-eslint/types@3.10.1":
878 version "3.10.0" 889 version "3.10.1"
879 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.0.tgz#b81906674eca94a884345ba0bc1aaf6cd4da912a" 890 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"
880 integrity sha512-ktUWSa75heQNwH85GRM7qP/UUrXqx9d6yIdw0iLO9/uE1LILW+i+3+B64dUodUS2WFWLzKTlwfi9giqrODibWg== 891 integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==
881 892
882"@typescript-eslint/typescript-estree@3.10.0": 893"@typescript-eslint/typescript-estree@3.10.1":
883 version "3.10.0" 894 version "3.10.1"
884 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.0.tgz#65df13579a5e53c12afb4f1c5309589e3855a5de" 895 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853"
885 integrity sha512-yjuY6rmVHRhcUKgXaSPNVloRueGWpFNhxR5EQLzxXfiFSl1U/+FBqHhbaGwtPPEgCSt61QNhZgiFjWT27bgAyw== 896 integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==
886 dependencies: 897 dependencies:
887 "@typescript-eslint/types" "3.10.0" 898 "@typescript-eslint/types" "3.10.1"
888 "@typescript-eslint/visitor-keys" "3.10.0" 899 "@typescript-eslint/visitor-keys" "3.10.1"
889 debug "^4.1.1" 900 debug "^4.1.1"
890 glob "^7.1.6" 901 glob "^7.1.6"
891 is-glob "^4.0.1" 902 is-glob "^4.0.1"
@@ -893,13 +904,18 @@
893 semver "^7.3.2" 904 semver "^7.3.2"
894 tsutils "^3.17.1" 905 tsutils "^3.17.1"
895 906
896"@typescript-eslint/visitor-keys@3.10.0": 907"@typescript-eslint/visitor-keys@3.10.1":
897 version "3.10.0" 908 version "3.10.1"
898 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.0.tgz#6c0cac867e705a42e2c71b359bf6a10a88a28985" 909 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
899 integrity sha512-g4qftk8lWb/rHZe9uEp8oZSvsJhUvR2cfp7F7qE6DyUD2SsovEs8JDQTRP1xHzsD+pERsEpYNqkDgQXW6+ob5A== 910 integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
900 dependencies: 911 dependencies:
901 eslint-visitor-keys "^1.1.0" 912 eslint-visitor-keys "^1.1.0"
902 913
914"@ungap/promise-all-settled@1.1.2":
915 version "1.1.2"
916 resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
917 integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
918
903abbrev@1: 919abbrev@1:
904 version "1.1.1" 920 version "1.1.1"
905 resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 921 resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -921,9 +937,9 @@ acorn-globals@^3.0.0:
921 acorn "^4.0.4" 937 acorn "^4.0.4"
922 938
923acorn-jsx@^5.2.0: 939acorn-jsx@^5.2.0:
924 version "5.2.0" 940 version "5.3.1"
925 resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" 941 resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
926 integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== 942 integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
927 943
928acorn@^3.1.0: 944acorn@^3.1.0:
929 version "3.3.0" 945 version "3.3.0"
@@ -936,9 +952,9 @@ acorn@^4.0.4, acorn@~4.0.2:
936 integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= 952 integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=
937 953
938acorn@^7.1.1, acorn@^7.4.0: 954acorn@^7.1.1, acorn@^7.4.0:
939 version "7.4.0" 955 version "7.4.1"
940 resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" 956 resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
941 integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== 957 integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
942 958
943addr-to-ip-port@^1.0.1, addr-to-ip-port@^1.5.1: 959addr-to-ip-port@^1.0.1, addr-to-ip-port@^1.5.1:
944 version "1.5.1" 960 version "1.5.1"
@@ -955,10 +971,10 @@ after@0.8.2:
955 resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" 971 resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
956 integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= 972 integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
957 973
958ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: 974ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
959 version "6.12.4" 975 version "6.12.6"
960 resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" 976 resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
961 integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== 977 integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
962 dependencies: 978 dependencies:
963 fast-deep-equal "^3.1.1" 979 fast-deep-equal "^3.1.1"
964 fast-json-stable-stringify "^2.0.0" 980 fast-json-stable-stringify "^2.0.0"
@@ -1014,11 +1030,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
1014 color-convert "^1.9.0" 1030 color-convert "^1.9.0"
1015 1031
1016ansi-styles@^4.0.0, ansi-styles@^4.1.0: 1032ansi-styles@^4.0.0, ansi-styles@^4.1.0:
1017 version "4.2.1" 1033 version "4.3.0"
1018 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 1034 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
1019 integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 1035 integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
1020 dependencies: 1036 dependencies:
1021 "@types/color-name" "^1.1.1"
1022 color-convert "^2.0.1" 1037 color-convert "^2.0.1"
1023 1038
1024any-base@^1.1.0: 1039any-base@^1.1.0:
@@ -1106,16 +1121,6 @@ array.prototype.flat@^1.2.3:
1106 define-properties "^1.1.3" 1121 define-properties "^1.1.3"
1107 es-abstract "^1.17.0-next.1" 1122 es-abstract "^1.17.0-next.1"
1108 1123
1109array.prototype.map@^1.0.1:
1110 version "1.0.2"
1111 resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec"
1112 integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==
1113 dependencies:
1114 define-properties "^1.1.3"
1115 es-abstract "^1.17.0-next.1"
1116 es-array-method-boxes-properly "^1.0.0"
1117 is-string "^1.0.4"
1118
1119arraybuffer.slice@~0.0.7: 1124arraybuffer.slice@~0.0.7:
1120 version "0.0.7" 1125 version "0.0.7"
1121 resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" 1126 resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
@@ -1213,9 +1218,9 @@ aws-sign2@~0.7.0:
1213 integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 1218 integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
1214 1219
1215aws4@^1.8.0: 1220aws4@^1.8.0:
1216 version "1.10.1" 1221 version "1.11.0"
1217 resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" 1222 resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
1218 integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== 1223 integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
1219 1224
1220babel-runtime@^6.26.0: 1225babel-runtime@^6.26.0:
1221 version "6.26.0" 1226 version "6.26.0"
@@ -1262,12 +1267,17 @@ base32.js@0.1.0:
1262 resolved "https://registry.yarnpkg.com/base32.js/-/base32.js-0.1.0.tgz#b582dec693c2f11e893cf064ee6ac5b6131a2202" 1267 resolved "https://registry.yarnpkg.com/base32.js/-/base32.js-0.1.0.tgz#b582dec693c2f11e893cf064ee6ac5b6131a2202"
1263 integrity sha1-tYLexpPC8R6JPPBk7mrFthMaIgI= 1268 integrity sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=
1264 1269
1270base64-arraybuffer@0.1.4:
1271 version "0.1.4"
1272 resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812"
1273 integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=
1274
1265base64-arraybuffer@0.1.5: 1275base64-arraybuffer@0.1.5:
1266 version "0.1.5" 1276 version "0.1.5"
1267 resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" 1277 resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
1268 integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= 1278 integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
1269 1279
1270base64-js@^1.0.2: 1280base64-js@^1.3.1:
1271 version "1.3.1" 1281 version "1.3.1"
1272 resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" 1282 resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
1273 integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== 1283 integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
@@ -1282,6 +1292,11 @@ base64id@2.0.0:
1282 resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" 1292 resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
1283 integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== 1293 integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
1284 1294
1295basic-auth-connect@^1.0.0:
1296 version "1.0.0"
1297 resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122"
1298 integrity sha1-/bC0OWLKe0BFanwrtI/hc9otISI=
1299
1285basic-auth@^2.0.0, basic-auth@~2.0.1: 1300basic-auth@^2.0.0, basic-auth@~2.0.1:
1286 version "2.0.1" 1301 version "2.0.1"
1287 resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" 1302 resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
@@ -1311,6 +1326,11 @@ bencode@^2.0.0, bencode@^2.0.1:
1311 dependencies: 1326 dependencies:
1312 safe-buffer "^5.1.1" 1327 safe-buffer "^5.1.1"
1313 1328
1329bep53-range@^1.0.0:
1330 version "1.0.0"
1331 resolved "https://registry.yarnpkg.com/bep53-range/-/bep53-range-1.0.0.tgz#c776736b4669d7762d096f2b9cab735b6f8c7dcd"
1332 integrity sha512-CNsnREjxe2/wD559wzFXMycUnbmUDA9C2Bs6Z2tm++amSma7JowAAxAnaZJMuDq3cWSx9HSIbV04H06QQ11zTA==
1333
1314better-assert@~1.0.0: 1334better-assert@~1.0.0:
1315 version "1.0.2" 1335 version "1.0.2"
1316 resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" 1336 resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
@@ -1338,6 +1358,11 @@ bitfield@^3.0.0:
1338 resolved "https://registry.yarnpkg.com/bitfield/-/bitfield-3.0.0.tgz#b2d32c707866d42f016ae9bd8469999a9f51b59c" 1358 resolved "https://registry.yarnpkg.com/bitfield/-/bitfield-3.0.0.tgz#b2d32c707866d42f016ae9bd8469999a9f51b59c"
1339 integrity sha512-hJmWKucJQfdSkQPDPBKmWogM9s8+NOSzDT9QVbJbjinXaQ0bJKPu/cn98qRWy3PDNWtKw4XaoUP3XruGRIKEgg== 1359 integrity sha512-hJmWKucJQfdSkQPDPBKmWogM9s8+NOSzDT9QVbJbjinXaQ0bJKPu/cn98qRWy3PDNWtKw4XaoUP3XruGRIKEgg==
1340 1360
1361bitfield@^4.0.0:
1362 version "4.0.0"
1363 resolved "https://registry.yarnpkg.com/bitfield/-/bitfield-4.0.0.tgz#3094123c870030dc6198a283d779639bd2a8e256"
1364 integrity sha512-jtuSG9CQr5yoHFuvhgf50+DH8Aezl3C/mMSfqdG4DqP7Kqe34uBUtCEHPN9oWaldTm96/i7y5e778SnM5ES4rw==
1365
1341bittorrent-dht@^10.0.0: 1366bittorrent-dht@^10.0.0:
1342 version "10.0.0" 1367 version "10.0.0"
1343 resolved "https://registry.yarnpkg.com/bittorrent-dht/-/bittorrent-dht-10.0.0.tgz#01de59bb03ed86a8847cb533134925d236d7f565" 1368 resolved "https://registry.yarnpkg.com/bittorrent-dht/-/bittorrent-dht-10.0.0.tgz#01de59bb03ed86a8847cb533134925d236d7f565"
@@ -1353,22 +1378,29 @@ bittorrent-dht@^10.0.0:
1353 record-cache "^1.0.2" 1378 record-cache "^1.0.2"
1354 simple-sha1 "^3.0.0" 1379 simple-sha1 "^3.0.0"
1355 1380
1381bittorrent-lsd@^1.0.0:
1382 version "1.0.0"
1383 resolved "https://registry.yarnpkg.com/bittorrent-lsd/-/bittorrent-lsd-1.0.0.tgz#4fe979a4d04a1536d819bf6c438640b9dde21602"
1384 integrity sha512-rM3ECQrtEiE1ef5TTdQbWJgbpd4NQur3bxrNs0r5VPcYfnFhXT85m75+whkyV5NIwNsndS7M/D+Uf/Mi/BUrWg==
1385 dependencies:
1386 debug "^4.2.0"
1387
1356bittorrent-peerid@^1.3.2: 1388bittorrent-peerid@^1.3.2:
1357 version "1.3.3" 1389 version "1.3.3"
1358 resolved "https://registry.yarnpkg.com/bittorrent-peerid/-/bittorrent-peerid-1.3.3.tgz#b8dc79e421f8136d2ffd0b163a18e9d70da09949" 1390 resolved "https://registry.yarnpkg.com/bittorrent-peerid/-/bittorrent-peerid-1.3.3.tgz#b8dc79e421f8136d2ffd0b163a18e9d70da09949"
1359 integrity sha512-tSh9HdQgwyEAfo1jzoGEis6o/zs4CcdRTchG93XVl5jct+DCAN90M5MVUV76k2vJ9Xg3GAzLB5NLsY/vnVTh6w== 1391 integrity sha512-tSh9HdQgwyEAfo1jzoGEis6o/zs4CcdRTchG93XVl5jct+DCAN90M5MVUV76k2vJ9Xg3GAzLB5NLsY/vnVTh6w==
1360 1392
1361bittorrent-protocol@^3.1.1: 1393bittorrent-protocol@^3.1.1:
1362 version "3.1.1" 1394 version "3.2.0"
1363 resolved "https://registry.yarnpkg.com/bittorrent-protocol/-/bittorrent-protocol-3.1.1.tgz#2d5a615a5de471bf22934a2bf3f423ad760b8932" 1395 resolved "https://registry.yarnpkg.com/bittorrent-protocol/-/bittorrent-protocol-3.2.0.tgz#fe423e31b4752def5da0ffaf321102a7b163268b"
1364 integrity sha512-kthSXghQ9DRQ4Lrjr1ceyIeEMeL5x9WiaSrQyR+5Nrr3g9QY6MvDeq+KLQz17R6094iDmT/LgFbQYAPj09/oUA== 1396 integrity sha512-8xgCgK8xUg7MXZBxhqJapZy9hexHwN2TCD+b8m4yWg56/ZFfdkULxhxQkzuhpXyUfvKIKxeRzGmLT43li7FDKg==
1365 dependencies: 1397 dependencies:
1366 bencode "^2.0.0" 1398 bencode "^2.0.1"
1367 bitfield "^3.0.0" 1399 bitfield "^4.0.0"
1368 debug "^4.1.1" 1400 debug "^4.2.0"
1369 randombytes "^2.0.5" 1401 randombytes "^2.1.0"
1370 readable-stream "^3.0.0" 1402 readable-stream "^3.6.0"
1371 speedometer "^1.0.0" 1403 speedometer "^1.1.0"
1372 unordered-array-remove "^1.0.2" 1404 unordered-array-remove "^1.0.2"
1373 1405
1374bittorrent-tracker@^9.0.0: 1406bittorrent-tracker@^9.0.0:
@@ -1401,9 +1433,9 @@ bittorrent-tracker@^9.0.0:
1401 utf-8-validate "^5.0.2" 1433 utf-8-validate "^5.0.2"
1402 1434
1403blob-to-buffer@^1.2.6: 1435blob-to-buffer@^1.2.6:
1404 version "1.2.8" 1436 version "1.2.9"
1405 resolved "https://registry.yarnpkg.com/blob-to-buffer/-/blob-to-buffer-1.2.8.tgz#78eeeb332f1280ed0ca6fb2b60693a8c6d36903a" 1437 resolved "https://registry.yarnpkg.com/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz#a17fd6c1c564011408f8971e451544245daaa84a"
1406 integrity sha512-re0AIxakF504MgeMtIyJkVcZ8T5aUxtp/QmTMlmjyb3P44E1BEv5x3LATBGApWAJATyXHtkXRD+gWTmeyYLiQA== 1438 integrity sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==
1407 1439
1408blob@0.0.5: 1440blob@0.0.5:
1409 version "0.0.5" 1441 version "0.0.5"
@@ -1422,7 +1454,7 @@ bluebird@^2.10.0:
1422 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" 1454 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
1423 integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= 1455 integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=
1424 1456
1425bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.1: 1457bluebird@^3.0.5, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.7.2:
1426 version "3.7.2" 1458 version "3.7.2"
1427 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 1459 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
1428 integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 1460 integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
@@ -1536,24 +1568,24 @@ buffer-writer@2.0.0:
1536 integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== 1568 integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
1537 1569
1538buffer@^5.2.0: 1570buffer@^5.2.0:
1539 version "5.6.0" 1571 version "5.7.1"
1540 resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" 1572 resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
1541 integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== 1573 integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
1542 dependencies: 1574 dependencies:
1543 base64-js "^1.0.2" 1575 base64-js "^1.3.1"
1544 ieee754 "^1.1.4" 1576 ieee754 "^1.1.13"
1545 1577
1546bufferutil@^4.0.1: 1578bufferutil@^4.0.1:
1547 version "4.0.1" 1579 version "4.0.2"
1548 resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7" 1580 resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.2.tgz#79f68631910f6b993d870fc77dc0a2894eb96cd5"
1549 integrity sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA== 1581 integrity sha512-AtnG3W6M8B2n4xDQ5R+70EXvOpnXsFYg/AK2yTZd+HQ/oxAdz+GI+DvjmhBw3L0ole+LJ0ngqY4JMbDzkfNzhA==
1550 dependencies: 1582 dependencies:
1551 node-gyp-build "~3.7.0" 1583 node-gyp-build "^4.2.0"
1552 1584
1553bull@^3.4.2: 1585bull@^3.4.2:
1554 version "3.18.0" 1586 version "3.18.1"
1555 resolved "https://registry.yarnpkg.com/bull/-/bull-3.18.0.tgz#7d7730c8ab0975ea9ee4e74f6f85bd731c3526cb" 1587 resolved "https://registry.yarnpkg.com/bull/-/bull-3.18.1.tgz#49eb8fd9844a3dc0a12a851b132e508890763a31"
1556 integrity sha512-nE/BKlg1dnJ/AcOy5D1nzthcmpAKqpUVXzQ43mJfnVC8ZM7mi4ZzP3spN7745UuikzmGGsbTe9px2TbEKhR+DQ== 1588 integrity sha512-g3gHFZ0qMo0wpecoNmd2W+F1Gj48l6phVCTdsQPKxDk1bB7kzD0nY5FAFnBFiaWxNmh5lb5X9TMB64uNXFKFDg==
1557 dependencies: 1589 dependencies:
1558 cron-parser "^2.13.0" 1590 cron-parser "^2.13.0"
1559 debuglog "^1.0.0" 1591 debuglog "^1.0.0"
@@ -1592,6 +1624,14 @@ cacheable-request@^6.0.0:
1592 normalize-url "^4.1.0" 1624 normalize-url "^4.1.0"
1593 responselike "^1.0.2" 1625 responselike "^1.0.2"
1594 1626
1627call-bind@^1.0.0:
1628 version "1.0.0"
1629 resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce"
1630 integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==
1631 dependencies:
1632 function-bind "^1.1.1"
1633 get-intrinsic "^1.0.0"
1634
1595call-me-maybe@^1.0.1: 1635call-me-maybe@^1.0.1:
1596 version "1.0.1" 1636 version "1.0.1"
1597 resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" 1637 resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
@@ -1617,6 +1657,11 @@ camelcase@^5.0.0, camelcase@^5.3.1:
1617 resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 1657 resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
1618 integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 1658 integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
1619 1659
1660camelcase@^6.0.0:
1661 version "6.2.0"
1662 resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
1663 integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
1664
1620canonicalize@^1.0.1: 1665canonicalize@^1.0.1:
1621 version "1.0.3" 1666 version "1.0.3"
1622 resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.3.tgz#7c65d89eaf4f8f78a589e3ae23eabb1ce941c563" 1667 resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.3.tgz#7c65d89eaf4f8f78a589e3ae23eabb1ce941c563"
@@ -1718,47 +1763,22 @@ check-error@^1.0.2:
1718 resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 1763 resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
1719 integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 1764 integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
1720 1765
1721cheerio@^0.22.0: 1766cheerio@^1.0.0-rc.3:
1722 version "0.22.0" 1767 version "1.0.0-rc.3"
1723 resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" 1768 resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
1724 integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= 1769 integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
1725 dependencies: 1770 dependencies:
1726 css-select "~1.2.0" 1771 css-select "~1.2.0"
1727 dom-serializer "~0.1.0" 1772 dom-serializer "~0.1.1"
1728 entities "~1.1.1" 1773 entities "~1.1.1"
1729 htmlparser2 "^3.9.1" 1774 htmlparser2 "^3.9.1"
1730 lodash.assignin "^4.0.9" 1775 lodash "^4.15.0"
1731 lodash.bind "^4.1.4" 1776 parse5 "^3.0.1"
1732 lodash.defaults "^4.0.1"
1733 lodash.filter "^4.4.0"
1734 lodash.flatten "^4.2.0"
1735 lodash.foreach "^4.3.0"
1736 lodash.map "^4.4.0"
1737 lodash.merge "^4.4.0"
1738 lodash.pick "^4.2.1"
1739 lodash.reduce "^4.4.0"
1740 lodash.reject "^4.4.0"
1741 lodash.some "^4.4.0"
1742
1743chokidar@3.3.1:
1744 version "3.3.1"
1745 resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
1746 integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==
1747 dependencies:
1748 anymatch "~3.1.1"
1749 braces "~3.0.2"
1750 glob-parent "~5.1.0"
1751 is-binary-path "~2.1.0"
1752 is-glob "~4.0.1"
1753 normalize-path "~3.0.0"
1754 readdirp "~3.3.0"
1755 optionalDependencies:
1756 fsevents "~2.1.2"
1757 1777
1758chokidar@^3.2.2: 1778chokidar@3.4.3, chokidar@^3.2.2, chokidar@^3.4.2:
1759 version "3.4.2" 1779 version "3.4.3"
1760 resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" 1780 resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
1761 integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== 1781 integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==
1762 dependencies: 1782 dependencies:
1763 anymatch "~3.1.1" 1783 anymatch "~3.1.1"
1764 braces "~3.0.2" 1784 braces "~3.0.2"
@@ -1766,7 +1786,7 @@ chokidar@^3.2.2:
1766 is-binary-path "~2.1.0" 1786 is-binary-path "~2.1.0"
1767 is-glob "~4.0.1" 1787 is-glob "~4.0.1"
1768 normalize-path "~3.0.0" 1788 normalize-path "~3.0.0"
1769 readdirp "~3.4.0" 1789 readdirp "~3.5.0"
1770 optionalDependencies: 1790 optionalDependencies:
1771 fsevents "~2.1.2" 1791 fsevents "~2.1.2"
1772 1792
@@ -1776,12 +1796,12 @@ chownr@^1.1.1:
1776 integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 1796 integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
1777 1797
1778chrome-dgram@^3.0.2, chrome-dgram@^3.0.4: 1798chrome-dgram@^3.0.2, chrome-dgram@^3.0.4:
1779 version "3.0.5" 1799 version "3.0.6"
1780 resolved "https://registry.yarnpkg.com/chrome-dgram/-/chrome-dgram-3.0.5.tgz#7cf0d2567706e413eb9133da584aa9cb9d10da6a" 1800 resolved "https://registry.yarnpkg.com/chrome-dgram/-/chrome-dgram-3.0.6.tgz#2288b5c7471f66f073691206d36319dda713cf55"
1781 integrity sha512-RcCR5Kpn+F7VGmtL3ex78ltB+cuuSTZdGBa4j3fQwUqz/90uOKd5t+WmnJp+QNv017oaHzn5GoMv1mCoRTmehQ== 1801 integrity sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==
1782 dependencies: 1802 dependencies:
1783 inherits "^2.0.1" 1803 inherits "^2.0.4"
1784 run-series "^1.1.2" 1804 run-series "^1.1.9"
1785 1805
1786chrome-dns@^1.0.0: 1806chrome-dns@^1.0.0:
1787 version "1.0.1" 1807 version "1.0.1"
@@ -1810,10 +1830,10 @@ ci-info@^2.0.0:
1810 resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 1830 resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
1811 integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 1831 integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
1812 1832
1813cidr-regex@^3.0.0: 1833cidr-regex@^3.1.1:
1814 version "3.0.0" 1834 version "3.1.1"
1815 resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.0.0.tgz#3e6771a98ec2535c4ccc6f1591808e5ee01bcbbf" 1835 resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d"
1816 integrity sha512-HjIwpv3Lc/bkn7jQfgDUfs8o3ksRx6uManpALGZ1zqHjxo3CjLrXvNZ7P2EmftJAp3es+mGI6tEaAWECngEwwA== 1836 integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw==
1817 dependencies: 1837 dependencies:
1818 ip-regex "^4.1.0" 1838 ip-regex "^4.1.0"
1819 1839
@@ -1825,9 +1845,9 @@ clean-css@^4.1.11:
1825 source-map "~0.6.0" 1845 source-map "~0.6.0"
1826 1846
1827cli-boxes@^2.2.0: 1847cli-boxes@^2.2.0:
1828 version "2.2.0" 1848 version "2.2.1"
1829 resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" 1849 resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
1830 integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== 1850 integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
1831 1851
1832cliui@^2.1.0: 1852cliui@^2.1.0:
1833 version "2.1.0" 1853 version "2.1.0"
@@ -1919,9 +1939,9 @@ color-name@^1.0.0, color-name@~1.1.4:
1919 integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1939 integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
1920 1940
1921color-string@^1.5.2: 1941color-string@^1.5.2:
1922 version "1.5.3" 1942 version "1.5.4"
1923 resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" 1943 resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6"
1924 integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== 1944 integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==
1925 dependencies: 1945 dependencies:
1926 color-name "^1.0.0" 1946 color-name "^1.0.0"
1927 simple-swizzle "^0.2.2" 1947 simple-swizzle "^0.2.2"
@@ -1964,15 +1984,20 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
1964 dependencies: 1984 dependencies:
1965 delayed-stream "~1.0.0" 1985 delayed-stream "~1.0.0"
1966 1986
1967commander@^2.15.1, commander@^2.20.0, commander@^2.7.1: 1987commander@^2.20.0, commander@^2.7.1:
1968 version "2.20.3" 1988 version "2.20.3"
1969 resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 1989 resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
1970 integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 1990 integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
1971 1991
1992commander@^5.1.0:
1993 version "5.1.0"
1994 resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
1995 integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
1996
1972commander@^6.0.0: 1997commander@^6.0.0:
1973 version "6.0.0" 1998 version "6.2.0"
1974 resolved "https://registry.yarnpkg.com/commander/-/commander-6.0.0.tgz#2b270da94f8fb9014455312f829a1129dbf8887e" 1999 resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75"
1975 integrity sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA== 2000 integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==
1976 2001
1977compact2string@^1.2.0, compact2string@^1.4.1: 2002compact2string@^1.2.0, compact2string@^1.4.1:
1978 version "1.4.1" 2003 version "1.4.1"
@@ -2032,9 +2057,9 @@ concurrently@^5.0.0:
2032 yargs "^13.3.0" 2057 yargs "^13.3.0"
2033 2058
2034config@^3.0.0: 2059config@^3.0.0:
2035 version "3.3.1" 2060 version "3.3.2"
2036 resolved "https://registry.yarnpkg.com/config/-/config-3.3.1.tgz#b6a70e2908a43b98ed20be7e367edf0cc8ed5a19" 2061 resolved "https://registry.yarnpkg.com/config/-/config-3.3.2.tgz#35be3846054340f0f79778b2445afffbc11867c7"
2037 integrity sha512-+2/KaaaAzdwUBE3jgZON11L1ggLLhpf2FsGrfqYFHZW22ySGv/HqYIXrBwKKvn+XZh1UBUjHwAcrfsSkSygT+Q== 2062 integrity sha512-NlGfBn2565YA44Irn7GV5KHlIGC3KJbf0062/zW5ddP9VXIuRj0m7HVyFAWvMZvaHPEglyGfwmevGz3KosIpCg==
2038 dependencies: 2063 dependencies:
2039 json5 "^2.1.1" 2064 json5 "^2.1.1"
2040 2065
@@ -2055,12 +2080,12 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
2055 resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 2080 resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
2056 integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 2081 integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
2057 2082
2058consolidate@^0.15.1: 2083consolidate@^0.16.0:
2059 version "0.15.1" 2084 version "0.16.0"
2060 resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" 2085 resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16"
2061 integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== 2086 integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==
2062 dependencies: 2087 dependencies:
2063 bluebird "^3.1.1" 2088 bluebird "^3.7.2"
2064 2089
2065constantinople@^3.0.1, constantinople@^3.1.2: 2090constantinople@^3.0.1, constantinople@^3.1.2:
2066 version "3.1.2" 2091 version "3.1.2"
@@ -2170,24 +2195,13 @@ create-torrent@^4.0.0, create-torrent@^4.4.2:
2170 simple-sha1 "^3.0.0" 2195 simple-sha1 "^3.0.0"
2171 2196
2172cron-parser@^2.13.0: 2197cron-parser@^2.13.0:
2173 version "2.16.3" 2198 version "2.17.0"
2174 resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.16.3.tgz#acb8e405eed1733aac542fdf604cb7c1daf0204a" 2199 resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.17.0.tgz#5707421a7e0a73ee74675d1c032a2f14123f2cf8"
2175 integrity sha512-XNJBD1QLFeAMUkZtZQuncAAOgJFWNhBdIbwgD22hZxrcWOImBFMKgPC66GzaXpyoJs7UvYLLgPH/8BRk/7gbZg== 2200 integrity sha512-oTmzVEwlurRe51HqTm4afshVr8Rkxy9kFiWxh5e6SmrY2o9NDYU4S6SduanBZYXLgkLy0skA98y7/tztW/DmjQ==
2176 dependencies: 2201 dependencies:
2177 is-nan "^1.3.0" 2202 is-nan "^1.3.0"
2178 moment-timezone "^0.5.31" 2203 moment-timezone "^0.5.31"
2179 2204
2180cross-spawn@^6.0.5:
2181 version "6.0.5"
2182 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
2183 integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
2184 dependencies:
2185 nice-try "^1.0.4"
2186 path-key "^2.0.1"
2187 semver "^5.5.0"
2188 shebang-command "^1.2.0"
2189 which "^1.2.9"
2190
2191cross-spawn@^7.0.0, cross-spawn@^7.0.2: 2205cross-spawn@^7.0.0, cross-spawn@^7.0.2:
2192 version "7.0.3" 2206 version "7.0.3"
2193 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 2207 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -2242,30 +2256,20 @@ dashdash@^1.12.0:
2242 dependencies: 2256 dependencies:
2243 assert-plus "^1.0.0" 2257 assert-plus "^1.0.0"
2244 2258
2245datauri@^2.0.0:
2246 version "2.0.0"
2247 resolved "https://registry.yarnpkg.com/datauri/-/datauri-2.0.0.tgz#ff0ee23729935a6bcc81f301621bed3e692bf3c7"
2248 integrity sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==
2249 dependencies:
2250 image-size "^0.7.3"
2251 mimer "^1.0.0"
2252
2253date-fns@^2.0.1: 2259date-fns@^2.0.1:
2254 version "2.15.0" 2260 version "2.16.1"
2255 resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.15.0.tgz#424de6b3778e4e69d3ff27046ec136af58ae5d5f" 2261 resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b"
2256 integrity sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ== 2262 integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==
2257 2263
2258dayjs@^1.8.16: 2264dateformat@^3.0.3:
2259 version "1.8.34" 2265 version "3.0.3"
2260 resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.34.tgz#d3ad33cc43d6b0f24cb8686b90aad2c653708069" 2266 resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
2261 integrity sha512-Olb+E6EoMvdPmAMq2QoucuyZycKHjTlBXmRx8Ada+wGtq4SIXuDCdtoaX4KkK0yjf1fJLnwXQURr8gQKWKaybw== 2267 integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
2262 2268
2263debug@*, debug@^4.0.0, debug@^4.0.1, debug@^4.1.1, debug@~4.1.0, debug@~4.1.1: 2269dayjs@^1.8.16:
2264 version "4.1.1" 2270 version "1.9.5"
2265 resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 2271 resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.9.5.tgz#fd49994ebe71639d2ce9575e97186642dfce9808"
2266 integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 2272 integrity sha512-WULIw7UpW/E0y6VywewpbXAMH3d5cZijEhoHLwM+OMVbk/NtchKS/W+57H/0P1rqU7gHrAArjiRLHCUhgMQl6w==
2267 dependencies:
2268 ms "^2.1.1"
2269 2273
2270debug@2.6.9, debug@^2.2.0, debug@^2.6.9: 2274debug@2.6.9, debug@^2.2.0, debug@^2.6.9:
2271 version "2.6.9" 2275 version "2.6.9"
@@ -2274,7 +2278,14 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.9:
2274 dependencies: 2278 dependencies:
2275 ms "2.0.0" 2279 ms "2.0.0"
2276 2280
2277debug@3.2.6, debug@^3.1.0, debug@^3.2.6: 2281debug@4.2.0, debug@^4.0.0, debug@^4.0.1, debug@^4.1.1, debug@^4.2.0:
2282 version "4.2.0"
2283 resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
2284 integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
2285 dependencies:
2286 ms "2.1.2"
2287
2288debug@^3.1.0, debug@^3.2.6:
2278 version "3.2.6" 2289 version "3.2.6"
2279 resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 2290 resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
2280 integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 2291 integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
@@ -2288,6 +2299,13 @@ debug@~3.1.0:
2288 dependencies: 2299 dependencies:
2289 ms "2.0.0" 2300 ms "2.0.0"
2290 2301
2302debug@~4.1.0, debug@~4.1.1:
2303 version "4.1.1"
2304 resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
2305 integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
2306 dependencies:
2307 ms "^2.1.1"
2308
2291debuglog@^1.0.0: 2309debuglog@^1.0.0:
2292 version "1.0.1" 2310 version "1.0.1"
2293 resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" 2311 resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
@@ -2298,6 +2316,11 @@ decamelize@^1.0.0, decamelize@^1.2.0:
2298 resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 2316 resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
2299 integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 2317 integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
2300 2318
2319decamelize@^4.0.0:
2320 version "4.0.0"
2321 resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
2322 integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
2323
2301decompress-response@^3.3.0: 2324decompress-response@^3.3.0:
2302 version "3.3.0" 2325 version "3.3.0"
2303 resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 2326 resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
@@ -2363,7 +2386,7 @@ defer-to-connect@^1.0.1:
2363 resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 2386 resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
2364 integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 2387 integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
2365 2388
2366define-properties@^1.1.2, define-properties@^1.1.3: 2389define-properties@^1.1.3:
2367 version "1.1.3" 2390 version "1.1.3"
2368 resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 2391 resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
2369 integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 2392 integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
@@ -2455,7 +2478,7 @@ dom-serializer@^1.0.1:
2455 domhandler "^3.0.0" 2478 domhandler "^3.0.0"
2456 entities "^2.0.0" 2479 entities "^2.0.0"
2457 2480
2458dom-serializer@~0.1.0: 2481dom-serializer@~0.1.1:
2459 version "0.1.1" 2482 version "0.1.1"
2460 resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" 2483 resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
2461 integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== 2484 integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
@@ -2518,9 +2541,9 @@ domutils@^2.0.0:
2518 domhandler "^3.3.0" 2541 domhandler "^3.3.0"
2519 2542
2520dot-prop@^5.2.0: 2543dot-prop@^5.2.0:
2521 version "5.2.0" 2544 version "5.3.0"
2522 resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" 2545 resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
2523 integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== 2546 integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
2524 dependencies: 2547 dependencies:
2525 is-obj "^2.0.0" 2548 is-obj "^2.0.0"
2526 2549
@@ -2558,21 +2581,21 @@ ee-first@1.1.1:
2558 integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 2581 integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
2559 2582
2560email-templates@^7.0.4: 2583email-templates@^7.0.4:
2561 version "7.1.0" 2584 version "7.1.2"
2562 resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-7.1.0.tgz#d10dad8ae673e06eaf1bdff2c179ae39dc31ae82" 2585 resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-7.1.2.tgz#c8b0435d182cea08c1d3c289c9a9574da7efe4a6"
2563 integrity sha512-cO+6RgrFk1CPqm1y8UbSRyjZ4mrtk3FleT7IR7l82EbXfwnP2qSo94KDIeacklR4+oFktep2Z6ulkUp5Cf+UNw== 2586 integrity sha512-+tp0oUj16WwkR+qo9dbrZN0H64g+ya6NrzqHi2PtJQNVrPQU1oSiERKfOQdmK52VBvpzpaawI2tHDuknvb7Czw==
2564 dependencies: 2587 dependencies:
2565 "@ladjs/i18n" "^3.0.10" 2588 "@ladjs/i18n" "^6.0.5"
2566 "@sindresorhus/is" "^2.1.1" 2589 "@sindresorhus/is" "^4.0.0"
2567 consolidate "^0.15.1" 2590 consolidate "^0.16.0"
2568 debug "^4.1.1" 2591 debug "^4.2.0"
2569 get-paths "^0.0.7" 2592 get-paths "^0.0.7"
2570 html-to-text "^5.1.1" 2593 html-to-text "^5.1.1"
2571 juice "^6.0.0" 2594 juice "^7.0.0"
2572 lodash "^4.17.15" 2595 lodash "^4.17.20"
2573 nodemailer "^6.4.6" 2596 nodemailer "^6.4.14"
2574 pify "^5.0.0" 2597 pify "^5.0.0"
2575 preview-email "^2.0.1" 2598 preview-email "^2.0.2"
2576 2599
2577emoji-regex@^7.0.1: 2600emoji-regex@^7.0.1:
2578 version "7.0.3" 2601 version "7.0.3"
@@ -2631,18 +2654,18 @@ engine.io-client@~3.3.1:
2631 yeast "0.1.2" 2654 yeast "0.1.2"
2632 2655
2633engine.io-client@~3.4.0: 2656engine.io-client@~3.4.0:
2634 version "3.4.3" 2657 version "3.4.4"
2635 resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c" 2658 resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.4.tgz#77d8003f502b0782dd792b073a4d2cf7ca5ab967"
2636 integrity sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw== 2659 integrity sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==
2637 dependencies: 2660 dependencies:
2638 component-emitter "~1.3.0" 2661 component-emitter "~1.3.0"
2639 component-inherit "0.0.3" 2662 component-inherit "0.0.3"
2640 debug "~4.1.0" 2663 debug "~3.1.0"
2641 engine.io-parser "~2.2.0" 2664 engine.io-parser "~2.2.0"
2642 has-cors "1.1.0" 2665 has-cors "1.1.0"
2643 indexof "0.0.1" 2666 indexof "0.0.1"
2644 parseqs "0.0.5" 2667 parseqs "0.0.6"
2645 parseuri "0.0.5" 2668 parseuri "0.0.6"
2646 ws "~6.1.0" 2669 ws "~6.1.0"
2647 xmlhttprequest-ssl "~1.5.4" 2670 xmlhttprequest-ssl "~1.5.4"
2648 yeast "0.1.2" 2671 yeast "0.1.2"
@@ -2659,13 +2682,13 @@ engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
2659 has-binary2 "~1.0.2" 2682 has-binary2 "~1.0.2"
2660 2683
2661engine.io-parser@~2.2.0: 2684engine.io-parser@~2.2.0:
2662 version "2.2.0" 2685 version "2.2.1"
2663 resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" 2686 resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7"
2664 integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w== 2687 integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==
2665 dependencies: 2688 dependencies:
2666 after "0.8.2" 2689 after "0.8.2"
2667 arraybuffer.slice "~0.0.7" 2690 arraybuffer.slice "~0.0.7"
2668 base64-arraybuffer "0.1.5" 2691 base64-arraybuffer "0.1.4"
2669 blob "0.0.5" 2692 blob "0.0.5"
2670 has-binary2 "~1.0.2" 2693 has-binary2 "~1.0.2"
2671 2694
@@ -2715,6 +2738,11 @@ entities@~2.0.0:
2715 resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" 2738 resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
2716 integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== 2739 integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
2717 2740
2741err-code@^2.0.3:
2742 version "2.0.3"
2743 resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
2744 integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
2745
2718error-ex@^1.2.0, error-ex@^1.3.1: 2746error-ex@^1.2.0, error-ex@^1.3.1:
2719 version "1.3.2" 2747 version "1.3.2"
2720 resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 2748 resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -2722,40 +2750,40 @@ error-ex@^1.2.0, error-ex@^1.3.1:
2722 dependencies: 2750 dependencies:
2723 is-arrayish "^0.2.1" 2751 is-arrayish "^0.2.1"
2724 2752
2725es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: 2753es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
2726 version "1.17.6" 2754 version "1.17.7"
2727 resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" 2755 resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c"
2728 integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== 2756 integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==
2729 dependencies: 2757 dependencies:
2730 es-to-primitive "^1.2.1" 2758 es-to-primitive "^1.2.1"
2731 function-bind "^1.1.1" 2759 function-bind "^1.1.1"
2732 has "^1.0.3" 2760 has "^1.0.3"
2733 has-symbols "^1.0.1" 2761 has-symbols "^1.0.1"
2734 is-callable "^1.2.0" 2762 is-callable "^1.2.2"
2735 is-regex "^1.1.0" 2763 is-regex "^1.1.1"
2736 object-inspect "^1.7.0" 2764 object-inspect "^1.8.0"
2737 object-keys "^1.1.1" 2765 object-keys "^1.1.1"
2738 object.assign "^4.1.0" 2766 object.assign "^4.1.1"
2739 string.prototype.trimend "^1.0.1" 2767 string.prototype.trimend "^1.0.1"
2740 string.prototype.trimstart "^1.0.1" 2768 string.prototype.trimstart "^1.0.1"
2741 2769
2742es-array-method-boxes-properly@^1.0.0: 2770es-abstract@^1.18.0-next.1:
2743 version "1.0.0" 2771 version "1.18.0-next.1"
2744 resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" 2772 resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68"
2745 integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== 2773 integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==
2746
2747es-get-iterator@^1.0.2:
2748 version "1.1.0"
2749 resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8"
2750 integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==
2751 dependencies: 2774 dependencies:
2752 es-abstract "^1.17.4" 2775 es-to-primitive "^1.2.1"
2776 function-bind "^1.1.1"
2777 has "^1.0.3"
2753 has-symbols "^1.0.1" 2778 has-symbols "^1.0.1"
2754 is-arguments "^1.0.4" 2779 is-callable "^1.2.2"
2755 is-map "^2.0.1" 2780 is-negative-zero "^2.0.0"
2756 is-set "^2.0.1" 2781 is-regex "^1.1.1"
2757 is-string "^1.0.5" 2782 object-inspect "^1.8.0"
2758 isarray "^2.0.5" 2783 object-keys "^1.1.1"
2784 object.assign "^4.1.1"
2785 string.prototype.trimend "^1.0.1"
2786 string.prototype.trimstart "^1.0.1"
2759 2787
2760es-to-primitive@^1.2.1: 2788es-to-primitive@^1.2.1:
2761 version "1.2.1" 2789 version "1.2.1"
@@ -2812,21 +2840,26 @@ escape-goat@^2.0.0:
2812 resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 2840 resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
2813 integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 2841 integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
2814 2842
2843escape-goat@^3.0.0:
2844 version "3.0.0"
2845 resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-3.0.0.tgz#e8b5fb658553fe8a3c4959c316c6ebb8c842b19c"
2846 integrity sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==
2847
2815escape-html@^1.0.3, escape-html@~1.0.3: 2848escape-html@^1.0.3, escape-html@~1.0.3:
2816 version "1.0.3" 2849 version "1.0.3"
2817 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 2850 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
2818 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 2851 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
2819 2852
2820escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: 2853escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
2821 version "1.0.5"
2822 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
2823 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
2824
2825escape-string-regexp@^4.0.0:
2826 version "4.0.0" 2854 version "4.0.0"
2827 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 2855 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
2828 integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 2856 integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
2829 2857
2858escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5:
2859 version "1.0.5"
2860 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
2861 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
2862
2830eslint-config-standard-with-typescript@^18.0.2: 2863eslint-config-standard-with-typescript@^18.0.2:
2831 version "18.0.2" 2864 version "18.0.2"
2832 resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-18.0.2.tgz#eb02d5358b17fe083c6f993ff829492c8f96b18f" 2865 resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-18.0.2.tgz#eb02d5358b17fe083c6f993ff829492c8f96b18f"
@@ -2840,7 +2873,7 @@ eslint-config-standard@^14.1.1:
2840 resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" 2873 resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea"
2841 integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== 2874 integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==
2842 2875
2843eslint-import-resolver-node@^0.3.3: 2876eslint-import-resolver-node@^0.3.4:
2844 version "0.3.4" 2877 version "0.3.4"
2845 resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" 2878 resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
2846 integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 2879 integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
@@ -2865,16 +2898,16 @@ eslint-plugin-es@^3.0.0:
2865 regexpp "^3.0.0" 2898 regexpp "^3.0.0"
2866 2899
2867eslint-plugin-import@^2.20.1: 2900eslint-plugin-import@^2.20.1:
2868 version "2.22.0" 2901 version "2.22.1"
2869 resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" 2902 resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
2870 integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== 2903 integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
2871 dependencies: 2904 dependencies:
2872 array-includes "^3.1.1" 2905 array-includes "^3.1.1"
2873 array.prototype.flat "^1.2.3" 2906 array.prototype.flat "^1.2.3"
2874 contains-path "^0.1.0" 2907 contains-path "^0.1.0"
2875 debug "^2.6.9" 2908 debug "^2.6.9"
2876 doctrine "1.5.0" 2909 doctrine "1.5.0"
2877 eslint-import-resolver-node "^0.3.3" 2910 eslint-import-resolver-node "^0.3.4"
2878 eslint-module-utils "^2.6.0" 2911 eslint-module-utils "^2.6.0"
2879 has "^1.0.3" 2912 has "^1.0.3"
2880 minimatch "^3.0.4" 2913 minimatch "^3.0.4"
@@ -2901,16 +2934,16 @@ eslint-plugin-promise@^4.2.1:
2901 integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== 2934 integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
2902 2935
2903eslint-plugin-standard@^4.0.1: 2936eslint-plugin-standard@^4.0.1:
2904 version "4.0.1" 2937 version "4.0.2"
2905 resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" 2938 resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.2.tgz#021211a9f077e63a6847e7bb9ab4247327ac8e0c"
2906 integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== 2939 integrity sha512-nKptN8l7jksXkwFk++PhJB3cCDTcXOEyhISIN86Ue2feJ1LFyY3PrY3/xT2keXlJSY5bpmbiTG0f885/YKAvTA==
2907 2940
2908eslint-scope@^5.0.0, eslint-scope@^5.1.0: 2941eslint-scope@^5.0.0, eslint-scope@^5.1.1:
2909 version "5.1.0" 2942 version "5.1.1"
2910 resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" 2943 resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
2911 integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== 2944 integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
2912 dependencies: 2945 dependencies:
2913 esrecurse "^4.1.0" 2946 esrecurse "^4.3.0"
2914 estraverse "^4.1.1" 2947 estraverse "^4.1.1"
2915 2948
2916eslint-utils@^2.0.0, eslint-utils@^2.1.0: 2949eslint-utils@^2.0.0, eslint-utils@^2.1.0:
@@ -2925,22 +2958,28 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
2925 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 2958 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
2926 integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 2959 integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
2927 2960
2961eslint-visitor-keys@^2.0.0:
2962 version "2.0.0"
2963 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
2964 integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
2965
2928eslint@^7.2.0: 2966eslint@^7.2.0:
2929 version "7.7.0" 2967 version "7.13.0"
2930 resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" 2968 resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da"
2931 integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== 2969 integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==
2932 dependencies: 2970 dependencies:
2933 "@babel/code-frame" "^7.0.0" 2971 "@babel/code-frame" "^7.0.0"
2972 "@eslint/eslintrc" "^0.2.1"
2934 ajv "^6.10.0" 2973 ajv "^6.10.0"
2935 chalk "^4.0.0" 2974 chalk "^4.0.0"
2936 cross-spawn "^7.0.2" 2975 cross-spawn "^7.0.2"
2937 debug "^4.0.1" 2976 debug "^4.0.1"
2938 doctrine "^3.0.0" 2977 doctrine "^3.0.0"
2939 enquirer "^2.3.5" 2978 enquirer "^2.3.5"
2940 eslint-scope "^5.1.0" 2979 eslint-scope "^5.1.1"
2941 eslint-utils "^2.1.0" 2980 eslint-utils "^2.1.0"
2942 eslint-visitor-keys "^1.3.0" 2981 eslint-visitor-keys "^2.0.0"
2943 espree "^7.2.0" 2982 espree "^7.3.0"
2944 esquery "^1.2.0" 2983 esquery "^1.2.0"
2945 esutils "^2.0.2" 2984 esutils "^2.0.2"
2946 file-entry-cache "^5.0.1" 2985 file-entry-cache "^5.0.1"
@@ -2967,7 +3006,7 @@ eslint@^7.2.0:
2967 text-table "^0.2.0" 3006 text-table "^0.2.0"
2968 v8-compile-cache "^2.0.3" 3007 v8-compile-cache "^2.0.3"
2969 3008
2970espree@^7.2.0: 3009espree@^7.3.0:
2971 version "7.3.0" 3010 version "7.3.0"
2972 resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" 3011 resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348"
2973 integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== 3012 integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==
@@ -2988,19 +3027,19 @@ esquery@^1.2.0:
2988 dependencies: 3027 dependencies:
2989 estraverse "^5.1.0" 3028 estraverse "^5.1.0"
2990 3029
2991esrecurse@^4.1.0: 3030esrecurse@^4.3.0:
2992 version "4.2.1" 3031 version "4.3.0"
2993 resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 3032 resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
2994 integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 3033 integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
2995 dependencies: 3034 dependencies:
2996 estraverse "^4.1.0" 3035 estraverse "^5.2.0"
2997 3036
2998estraverse@^4.1.0, estraverse@^4.1.1: 3037estraverse@^4.1.1:
2999 version "4.3.0" 3038 version "4.3.0"
3000 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 3039 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
3001 integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 3040 integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
3002 3041
3003estraverse@^5.1.0: 3042estraverse@^5.1.0, estraverse@^5.2.0:
3004 version "5.2.0" 3043 version "5.2.0"
3005 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 3044 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
3006 integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 3045 integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
@@ -3066,7 +3105,7 @@ express-validator@^6.4.0:
3066 lodash "^4.17.19" 3105 lodash "^4.17.19"
3067 validator "^13.1.1" 3106 validator "^13.1.1"
3068 3107
3069express@^4.12.4, express@^4.13.3, express@^4.17.1: 3108express@^4.12.4, express@^4.13.3, express@^4.16.4, express@^4.17.1:
3070 version "4.17.1" 3109 version "4.17.1"
3071 resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 3110 resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
3072 integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 3111 integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
@@ -3194,12 +3233,12 @@ finalhandler@~1.1.2:
3194 statuses "~1.5.0" 3233 statuses "~1.5.0"
3195 unpipe "~1.0.0" 3234 unpipe "~1.0.0"
3196 3235
3197find-up@4.1.0, find-up@^4.1.0: 3236find-up@5.0.0:
3198 version "4.1.0" 3237 version "5.0.0"
3199 resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 3238 resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
3200 integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 3239 integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
3201 dependencies: 3240 dependencies:
3202 locate-path "^5.0.0" 3241 locate-path "^6.0.0"
3203 path-exists "^4.0.0" 3242 path-exists "^4.0.0"
3204 3243
3205find-up@^2.0.0, find-up@^2.1.0: 3244find-up@^2.0.0, find-up@^2.1.0:
@@ -3216,6 +3255,14 @@ find-up@^3.0.0:
3216 dependencies: 3255 dependencies:
3217 locate-path "^3.0.0" 3256 locate-path "^3.0.0"
3218 3257
3258find-up@^4.1.0:
3259 version "4.1.0"
3260 resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
3261 integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
3262 dependencies:
3263 locate-path "^5.0.0"
3264 path-exists "^4.0.0"
3265
3219flat-cache@^2.0.1: 3266flat-cache@^2.0.1:
3220 version "2.0.1" 3267 version "2.0.1"
3221 resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 3268 resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
@@ -3225,14 +3272,7 @@ flat-cache@^2.0.1:
3225 rimraf "2.6.3" 3272 rimraf "2.6.3"
3226 write "1.0.3" 3273 write "1.0.3"
3227 3274
3228flat@^4.1.0: 3275flat@^5.0.0, flat@^5.0.2:
3229 version "4.1.0"
3230 resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
3231 integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
3232 dependencies:
3233 is-buffer "~2.0.3"
3234
3235flat@^5.0.0:
3236 version "5.0.2" 3276 version "5.0.2"
3237 resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 3277 resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
3238 integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 3278 integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
@@ -3360,7 +3400,7 @@ gauge@~2.7.3:
3360 strip-ansi "^3.0.1" 3400 strip-ansi "^3.0.1"
3361 wide-align "^1.1.0" 3401 wide-align "^1.1.0"
3362 3402
3363get-browser-rtc@^1.0.0: 3403get-browser-rtc@^1.0.2:
3364 version "1.0.2" 3404 version "1.0.2"
3365 resolved "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz#bbcd40c8451a7ed4ef5c373b8169a409dd1d11d9" 3405 resolved "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz#bbcd40c8451a7ed4ef5c373b8169a409dd1d11d9"
3366 integrity sha1-u81AyEUaftTvXDc7gWmkCd0dEdk= 3406 integrity sha1-u81AyEUaftTvXDc7gWmkCd0dEdk=
@@ -3375,6 +3415,15 @@ get-func-name@^2.0.0:
3375 resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 3415 resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
3376 integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 3416 integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
3377 3417
3418get-intrinsic@^1.0.0:
3419 version "1.0.1"
3420 resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be"
3421 integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==
3422 dependencies:
3423 function-bind "^1.1.1"
3424 has "^1.0.3"
3425 has-symbols "^1.0.1"
3426
3378get-paths@^0.0.7: 3427get-paths@^0.0.7:
3379 version "0.0.7" 3428 version "0.0.7"
3380 resolved "https://registry.yarnpkg.com/get-paths/-/get-paths-0.0.7.tgz#15331086752077cf130166ccd233a1cdbeefcf38" 3429 resolved "https://registry.yarnpkg.com/get-paths/-/get-paths-0.0.7.tgz#15331086752077cf130166ccd233a1cdbeefcf38"
@@ -3536,7 +3585,7 @@ has-flag@^4.0.0:
3536 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 3585 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
3537 integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 3586 integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
3538 3587
3539has-symbols@^1.0.0, has-symbols@^1.0.1: 3588has-symbols@^1.0.1:
3540 version "1.0.1" 3589 version "1.0.1"
3541 resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 3590 resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
3542 integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 3591 integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
@@ -3571,9 +3620,9 @@ he@1.2.0, he@^1.2.0:
3571 integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 3620 integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
3572 3621
3573helmet@^4.1.0: 3622helmet@^4.1.0:
3574 version "4.1.0" 3623 version "4.2.0"
3575 resolved "https://registry.yarnpkg.com/helmet/-/helmet-4.1.0.tgz#6f3a34e8f18502d6e52518428b23aa4ddaf84b38" 3624 resolved "https://registry.yarnpkg.com/helmet/-/helmet-4.2.0.tgz#e81f5613cc1c90402af581794dc9878ad078b237"
3576 integrity sha512-KWy75fYN8hOG2Rhl8e5B3WhOzb0by1boQum85TiddIE9iu6gV+TXbUjVC17wfej0o/ZUpqB9kxM0NFCZRMzf+Q== 3625 integrity sha512-aoiSxXMd0ks1ojYpSCFoCRzgv4rY/uB9jKStaw8PkXwsdLYa/Gq+Nc5l0soH0cwBIsLAlujPnx4HLQs+LaXCrQ==
3577 3626
3578hh-mm-ss@~1.2.0: 3627hh-mm-ss@~1.2.0:
3579 version "1.2.0" 3628 version "1.2.0"
@@ -3680,13 +3729,13 @@ i18n-locales@^0.0.4:
3680 dependencies: 3729 dependencies:
3681 country-language "^0.1.7" 3730 country-language "^0.1.7"
3682 3731
3683i18n@^0.9.1: 3732i18n@^0.13.2:
3684 version "0.9.1" 3733 version "0.13.2"
3685 resolved "https://registry.yarnpkg.com/i18n/-/i18n-0.9.1.tgz#a9dda09e582286c81a584374ac9f2aaef7ec37fb" 3734 resolved "https://registry.yarnpkg.com/i18n/-/i18n-0.13.2.tgz#3886678fe7cbbed45bac2ce53b8144c788a1c1b5"
3686 integrity sha512-ERo9WloOP2inRsJzAlzn4JDm3jvX7FW1+KB/JGXTzUVzi9Bsf4LNLXUQTMgM/aze4LNW/kvmxQX6bzg5UzqMJw== 3735 integrity sha512-PB65bHhQESMBIl/xVNChEAzoxZ5W6FrZ1H9Ma/YcPeSfE7VS9b0sqwBPusa0CfzSKUPSl+uMhRIgyv3jkE7XNw==
3687 dependencies: 3736 dependencies:
3688 debug "*" 3737 debug "^4.1.1"
3689 make-plural "^6.2.1" 3738 make-plural "^6.2.2"
3690 math-interval-parser "^2.0.1" 3739 math-interval-parser "^2.0.1"
3691 messageformat "^2.3.0" 3740 messageformat "^2.3.0"
3692 mustache "^4.0.1" 3741 mustache "^4.0.1"
@@ -3718,10 +3767,10 @@ iconv-lite@0.6.2:
3718 dependencies: 3767 dependencies:
3719 safer-buffer ">= 2.1.2 < 3.0.0" 3768 safer-buffer ">= 2.1.2 < 3.0.0"
3720 3769
3721ieee754@^1.1.4: 3770ieee754@^1.1.13:
3722 version "1.1.13" 3771 version "1.2.1"
3723 resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 3772 resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
3724 integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 3773 integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
3725 3774
3726ignore-by-default@^1.0.1: 3775ignore-by-default@^1.0.1:
3727 version "1.0.1" 3776 version "1.0.1"
@@ -3750,22 +3799,17 @@ image-q@^1.1.1:
3750 resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" 3799 resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056"
3751 integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY= 3800 integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=
3752 3801
3753image-size@^0.7.3:
3754 version "0.7.5"
3755 resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04"
3756 integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==
3757
3758immediate-chunk-store@^2.1.0: 3802immediate-chunk-store@^2.1.0:
3759 version "2.1.0" 3803 version "2.1.1"
3760 resolved "https://registry.yarnpkg.com/immediate-chunk-store/-/immediate-chunk-store-2.1.0.tgz#3dbd3b5cc77182526188a8da47e38488a6627336" 3804 resolved "https://registry.yarnpkg.com/immediate-chunk-store/-/immediate-chunk-store-2.1.1.tgz#4b9f001beaab38d62e4aae630ec7ffb98be805ce"
3761 integrity sha512-QshP0SFpsy/bHQBjYMgzCcnLoqTj6PHFg8ZkPi2WbTw1qddNy0puuPDaFlXyrsZAdWMT3QziPDMzfj+mzCVMYg== 3805 integrity sha512-y5AxkxqpPTj2dkaAEkDnrMuSX4JNicXHD6yTpLfFnflVejL6yJpzf27obrnlf2PSSQiWUf3735Y9tJEjxvqnoA==
3762 dependencies: 3806 dependencies:
3763 queue-microtask "^1.1.2" 3807 queue-microtask "^1.2.0"
3764 3808
3765import-fresh@^3.0.0: 3809import-fresh@^3.0.0, import-fresh@^3.2.1:
3766 version "3.2.1" 3810 version "3.2.2"
3767 resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" 3811 resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e"
3768 integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== 3812 integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==
3769 dependencies: 3813 dependencies:
3770 parent-module "^1.0.0" 3814 parent-module "^1.0.0"
3771 resolve-from "^4.0.0" 3815 resolve-from "^4.0.0"
@@ -3798,7 +3842,7 @@ inflight@^1.0.4:
3798 once "^1.3.0" 3842 once "^1.3.0"
3799 wrappy "1" 3843 wrappy "1"
3800 3844
3801inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 3845inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
3802 version "2.0.4" 3846 version "2.0.4"
3803 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 3847 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
3804 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 3848 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -3814,16 +3858,17 @@ ini@^1.3.5, ini@~1.3.0:
3814 integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== 3858 integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
3815 3859
3816ioredis@^4.14.1: 3860ioredis@^4.14.1:
3817 version "4.17.3" 3861 version "4.19.2"
3818 resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.17.3.tgz#9938c60e4ca685f75326337177bdc2e73ae9c9dc" 3862 resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.19.2.tgz#e3eab394c653cea5aea07c0c784d8c772dce8801"
3819 integrity sha512-iRvq4BOYzNFkDnSyhx7cmJNOi1x/HWYe+A4VXHBu4qpwJaGT1Mp+D2bVGJntH9K/Z/GeOM/Nprb8gB3bmitz1Q== 3863 integrity sha512-SZSIwMrbd96b7rJvJwyTWSP6XQ0m1kAIIqBnwglJKrIJ6na7TeY4F2EV2vDY0xm/fLrUY8cEg81dR7kVFt2sKA==
3820 dependencies: 3864 dependencies:
3821 cluster-key-slot "^1.1.0" 3865 cluster-key-slot "^1.1.0"
3822 debug "^4.1.1" 3866 debug "^4.1.1"
3823 denque "^1.1.0" 3867 denque "^1.1.0"
3824 lodash.defaults "^4.2.0" 3868 lodash.defaults "^4.2.0"
3825 lodash.flatten "^4.4.0" 3869 lodash.flatten "^4.4.0"
3826 redis-commands "1.5.0" 3870 p-map "^2.1.0"
3871 redis-commands "1.6.0"
3827 redis-errors "^1.2.0" 3872 redis-errors "^1.2.0"
3828 redis-parser "^3.0.0" 3873 redis-parser "^3.0.0"
3829 standard-as-callback "^2.0.1" 3874 standard-as-callback "^2.0.1"
@@ -3834,11 +3879,11 @@ ip-anonymize@^0.1.0:
3834 integrity sha512-cZJu+N5JKKFGMK0eEQWNaQMn2EhCysciVM6eotCJwfqotj16BTfVchKsJCH6mQAT9N0GC7oWRcsZ6Lb8dDiwTA== 3879 integrity sha512-cZJu+N5JKKFGMK0eEQWNaQMn2EhCysciVM6eotCJwfqotj16BTfVchKsJCH6mQAT9N0GC7oWRcsZ6Lb8dDiwTA==
3835 3880
3836ip-regex@^4.1.0: 3881ip-regex@^4.1.0:
3837 version "4.1.0" 3882 version "4.2.0"
3838 resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.1.0.tgz#5ad62f685a14edb421abebc2fff8db94df67b455" 3883 resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.2.0.tgz#a03f5eb661d9a154e3973a03de8b23dd0ad6892e"
3839 integrity sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA== 3884 integrity sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A==
3840 3885
3841ip-set@^1.0.0: 3886ip-set@^1.0.2:
3842 version "1.0.2" 3887 version "1.0.2"
3843 resolved "https://registry.yarnpkg.com/ip-set/-/ip-set-1.0.2.tgz#be4f119f82c124836455993dfcd554639c7007de" 3888 resolved "https://registry.yarnpkg.com/ip-set/-/ip-set-1.0.2.tgz#be4f119f82c124836455993dfcd554639c7007de"
3844 integrity sha512-Mb6kv78bTi4RNAIIWL8Bbre7hXOR2pNUi3j8FaQkLaitf/ZWxkq3/iIwXNYk2ACO3IMfdVdQrOkUtwZblO7uBA== 3889 integrity sha512-Mb6kv78bTi4RNAIIWL8Bbre7hXOR2pNUi3j8FaQkLaitf/ZWxkq3/iIwXNYk2ACO3IMfdVdQrOkUtwZblO7uBA==
@@ -3865,11 +3910,6 @@ ipv6-normalize@1.0.1:
3865 resolved "https://registry.yarnpkg.com/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz#1b3258290d365fa83239e89907dde4592e7620a8" 3910 resolved "https://registry.yarnpkg.com/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz#1b3258290d365fa83239e89907dde4592e7620a8"
3866 integrity sha1-GzJYKQ02X6gyOeiZB93kWS52IKg= 3911 integrity sha1-GzJYKQ02X6gyOeiZB93kWS52IKg=
3867 3912
3868is-arguments@^1.0.4:
3869 version "1.0.4"
3870 resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
3871 integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
3872
3873is-arrayish@^0.2.1: 3913is-arrayish@^0.2.1:
3874 version "0.2.1" 3914 version "0.2.1"
3875 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 3915 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -3902,15 +3942,10 @@ is-buffer@^1.1.5, is-buffer@~1.1.6:
3902 resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 3942 resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
3903 integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 3943 integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
3904 3944
3905is-buffer@~2.0.3: 3945is-callable@^1.1.4, is-callable@^1.2.2:
3906 version "2.0.4" 3946 version "1.2.2"
3907 resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 3947 resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
3908 integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 3948 integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
3909
3910is-callable@^1.1.4, is-callable@^1.2.0:
3911 version "1.2.0"
3912 resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
3913 integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
3914 3949
3915is-ci@^2.0.0: 3950is-ci@^2.0.0:
3916 version "2.0.0" 3951 version "2.0.0"
@@ -3920,11 +3955,18 @@ is-ci@^2.0.0:
3920 ci-info "^2.0.0" 3955 ci-info "^2.0.0"
3921 3956
3922is-cidr@^4.0.0: 3957is-cidr@^4.0.0:
3923 version "4.0.0" 3958 version "4.0.2"
3924 resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.0.tgz#9f293f96922675391054519a4f0de222e0c7fca0" 3959 resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814"
3925 integrity sha512-rVgPH0PryXL0qLSFIfR+Gg/QwsgtDN2/AYrFFUTb1n+Ijl8N/ouyihiHXFRoIkohI+FkHloeH7nMHXryKK81UQ== 3960 integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==
3961 dependencies:
3962 cidr-regex "^3.1.1"
3963
3964is-core-module@^2.0.0:
3965 version "2.1.0"
3966 resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946"
3967 integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==
3926 dependencies: 3968 dependencies:
3927 cidr-regex "^3.0.0" 3969 has "^1.0.3"
3928 3970
3929is-date-object@^1.0.1: 3971is-date-object@^1.0.1:
3930 version "1.0.2" 3972 version "1.0.2"
@@ -3999,11 +4041,6 @@ is-installed-globally@^0.3.1:
3999 global-dirs "^2.0.1" 4041 global-dirs "^2.0.1"
4000 is-path-inside "^3.0.1" 4042 is-path-inside "^3.0.1"
4001 4043
4002is-map@^2.0.1:
4003 version "2.0.1"
4004 resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1"
4005 integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==
4006
4007is-nan@^1.3.0: 4044is-nan@^1.3.0:
4008 version "1.3.0" 4045 version "1.3.0"
4009 resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.0.tgz#85d1f5482f7051c2019f5673ccebdb06f3b0db03" 4046 resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.0.tgz#85d1f5482f7051c2019f5673ccebdb06f3b0db03"
@@ -4011,6 +4048,11 @@ is-nan@^1.3.0:
4011 dependencies: 4048 dependencies:
4012 define-properties "^1.1.3" 4049 define-properties "^1.1.3"
4013 4050
4051is-negative-zero@^2.0.0:
4052 version "2.0.0"
4053 resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
4054 integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
4055
4014is-npm@^4.0.0: 4056is-npm@^4.0.0:
4015 version "4.0.0" 4057 version "4.0.0"
4016 resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" 4058 resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
@@ -4031,10 +4073,10 @@ is-path-inside@^3.0.1:
4031 resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" 4073 resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
4032 integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== 4074 integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
4033 4075
4034is-plain-obj@^1.1.0: 4076is-plain-obj@^2.1.0:
4035 version "1.1.0" 4077 version "2.1.0"
4036 resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 4078 resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
4037 integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= 4079 integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
4038 4080
4039is-plain-object@^5.0.0: 4081is-plain-object@^5.0.0:
4040 version "5.0.0" 4082 version "5.0.0"
@@ -4046,24 +4088,19 @@ is-promise@^2.0.0, is-promise@^2.1:
4046 resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" 4088 resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
4047 integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== 4089 integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
4048 4090
4049is-regex@^1.0.3, is-regex@^1.1.0: 4091is-regex@^1.0.3, is-regex@^1.1.1:
4050 version "1.1.1" 4092 version "1.1.1"
4051 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" 4093 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
4052 integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== 4094 integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
4053 dependencies: 4095 dependencies:
4054 has-symbols "^1.0.1" 4096 has-symbols "^1.0.1"
4055 4097
4056is-set@^2.0.1:
4057 version "2.0.1"
4058 resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43"
4059 integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==
4060
4061is-stream@^2.0.0: 4098is-stream@^2.0.0:
4062 version "2.0.0" 4099 version "2.0.0"
4063 resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 4100 resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
4064 integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 4101 integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
4065 4102
4066is-string@^1.0.4, is-string@^1.0.5: 4103is-string@^1.0.5:
4067 version "1.0.5" 4104 version "1.0.5"
4068 resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" 4105 resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
4069 integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== 4106 integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
@@ -4105,20 +4142,15 @@ isarray@2.0.1:
4105 resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" 4142 resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
4106 integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= 4143 integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
4107 4144
4108isarray@^2.0.5:
4109 version "2.0.5"
4110 resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
4111 integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
4112
4113isexe@^2.0.0: 4145isexe@^2.0.0:
4114 version "2.0.0" 4146 version "2.0.0"
4115 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 4147 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
4116 integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 4148 integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
4117 4149
4118iso-639-3@^2.0.0: 4150iso-639-3@^2.0.0:
4119 version "2.1.0" 4151 version "2.2.0"
4120 resolved "https://registry.yarnpkg.com/iso-639-3/-/iso-639-3-2.1.0.tgz#f3733c7f2754c1bde34a8960b2a17146a4b41053" 4152 resolved "https://registry.yarnpkg.com/iso-639-3/-/iso-639-3-2.2.0.tgz#eb01d7734d61396efec934979e8b0806550837f1"
4121 integrity sha512-NYcq+YfrCFVGw/xWhRB9mhCSWxlOxYv3eK3WzWzc86P8huEZ7UDQq8Bu0zKqpZFOdq221Gy8VWWLr1aaYc+FJA== 4153 integrity sha512-v9w/U4XDSfXCrXxf4E6ertGC/lTRX8MLLv7XC1j6N5oL3ympe38jp77zgeyMsn3MbufuAAoGeVzDJbOXnPTMhQ==
4122 4154
4123isobject@^2.0.0: 4155isobject@^2.0.0:
4124 version "2.1.0" 4156 version "2.1.0"
@@ -4132,31 +4164,18 @@ isstream@0.1.x, isstream@~0.1.2:
4132 resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 4164 resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
4133 integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 4165 integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
4134 4166
4135iterate-iterator@^1.0.1:
4136 version "1.0.1"
4137 resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6"
4138 integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==
4139
4140iterate-value@^1.0.0:
4141 version "1.0.2"
4142 resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57"
4143 integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==
4144 dependencies:
4145 es-get-iterator "^1.0.2"
4146 iterate-iterator "^1.0.1"
4147
4148jimp@^0.16.0: 4167jimp@^0.16.0:
4149 version "0.16.0" 4168 version "0.16.1"
4150 resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.16.0.tgz#d01a1709634c22aa113df02076dbe4db7ca55acc" 4169 resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.16.1.tgz#192f851a30e5ca11112a3d0aa53137659a78ca7a"
4151 integrity sha512-WRfGlXB6/0xY3mSoskfVhWVNSegVZCgmvunJDc41QthTWi5oRG2FeL7eOcX0zz/Z+dYRu6Q0ibO2yltC+EIptA== 4170 integrity sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==
4152 dependencies: 4171 dependencies:
4153 "@babel/runtime" "^7.7.2" 4172 "@babel/runtime" "^7.7.2"
4154 "@jimp/custom" "^0.16.0" 4173 "@jimp/custom" "^0.16.1"
4155 "@jimp/plugins" "^0.16.0" 4174 "@jimp/plugins" "^0.16.1"
4156 "@jimp/types" "^0.16.0" 4175 "@jimp/types" "^0.16.1"
4157 regenerator-runtime "^0.13.3" 4176 regenerator-runtime "^0.13.3"
4158 4177
4159jpeg-js@^0.4.0: 4178jpeg-js@0.4.2:
4160 version "0.4.2" 4179 version "0.4.2"
4161 resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d" 4180 resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d"
4162 integrity sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw== 4181 integrity sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==
@@ -4171,15 +4190,7 @@ js-tokens@^4.0.0:
4171 resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 4190 resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
4172 integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 4191 integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
4173 4192
4174js-yaml@3.13.1: 4193js-yaml@3.14.0, js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.5.4:
4175 version "3.13.1"
4176 resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
4177 integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
4178 dependencies:
4179 argparse "^1.0.7"
4180 esprima "^4.0.0"
4181
4182js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.5.4:
4183 version "3.14.0" 4194 version "3.14.0"
4184 resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 4195 resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
4185 integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 4196 integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
@@ -4237,11 +4248,11 @@ json5@^2.1.1:
4237 minimist "^1.2.5" 4248 minimist "^1.2.5"
4238 4249
4239jsonfile@^6.0.1: 4250jsonfile@^6.0.1:
4240 version "6.0.1" 4251 version "6.1.0"
4241 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" 4252 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
4242 integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== 4253 integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
4243 dependencies: 4254 dependencies:
4244 universalify "^1.0.0" 4255 universalify "^2.0.0"
4245 optionalDependencies: 4256 optionalDependencies:
4246 graceful-fs "^4.1.6" 4257 graceful-fs "^4.1.6"
4247 4258
@@ -4281,18 +4292,16 @@ jstransformer@1.0.0:
4281 is-promise "^2.0.0" 4292 is-promise "^2.0.0"
4282 promise "^7.0.1" 4293 promise "^7.0.1"
4283 4294
4284juice@^6.0.0: 4295juice@^7.0.0:
4285 version "6.0.0" 4296 version "7.0.0"
4286 resolved "https://registry.yarnpkg.com/juice/-/juice-6.0.0.tgz#cd8f8fe5210ef129d186fe2c41c0ec169f7b07b6" 4297 resolved "https://registry.yarnpkg.com/juice/-/juice-7.0.0.tgz#509bed6adbb6e4bbaa7fbfadac4e2e83e8c89ba3"
4287 integrity sha512-5T3JPgXYiw6A6axsb9E09Gzq46WbfJeDirY6nMrqY55iAdqEoPDxSr1GpXqYfoyndx4ujpBPXGLzBRzbiqOOaw== 4298 integrity sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==
4288 dependencies: 4299 dependencies:
4289 cheerio "^0.22.0" 4300 cheerio "^1.0.0-rc.3"
4290 commander "^2.15.1" 4301 commander "^5.1.0"
4291 cross-spawn "^6.0.5"
4292 deep-extend "^0.6.0"
4293 mensch "^0.3.4" 4302 mensch "^0.3.4"
4294 slick "^1.12.2" 4303 slick "^1.12.2"
4295 web-resource-inliner "^4.3.3" 4304 web-resource-inliner "^5.0.0"
4296 4305
4297junk@^3.1.0: 4306junk@^3.1.0:
4298 version "3.1.0" 4307 version "3.1.0"
@@ -4443,15 +4452,15 @@ load-bmfont@^1.3.1, load-bmfont@^1.4.0:
4443 xtend "^4.0.0" 4452 xtend "^4.0.0"
4444 4453
4445load-ip-set@^2.1.0: 4454load-ip-set@^2.1.0:
4446 version "2.1.0" 4455 version "2.1.1"
4447 resolved "https://registry.yarnpkg.com/load-ip-set/-/load-ip-set-2.1.0.tgz#2d50b737cae41de4e413d213991d4083a3e1784b" 4456 resolved "https://registry.yarnpkg.com/load-ip-set/-/load-ip-set-2.1.1.tgz#8c4f709cf41bd8d806432492b18ef3703a3a1ba8"
4448 integrity sha512-taz7U6B+F7Zq90dfIKwqsB1CrFKelSEmMGC68OUqem8Cgd1QZygQBYb2Fk9i6muBSfH4xwF/Pjt4KKlAdOyWZw== 4457 integrity sha512-LC7BWnATJOrKZa94qKNU8I/cWvVCgHPGSEMZ9hNCd3C5Th+XIUuU5lws6KhCK9QYeSD2xADnLUzkUbzYaRJ/lQ==
4449 dependencies: 4458 dependencies:
4450 ip-set "^1.0.0" 4459 ip-set "^1.0.2"
4451 netmask "^1.0.6" 4460 netmask "^1.0.6"
4452 once "^1.3.0" 4461 once "^1.4.0"
4453 simple-get "^3.0.0" 4462 simple-get "^4.0.0"
4454 split "^1.0.0" 4463 split "^1.0.1"
4455 4464
4456load-json-file@^2.0.0: 4465load-json-file@^2.0.0:
4457 version "2.0.0" 4466 version "2.0.0"
@@ -4486,36 +4495,23 @@ locate-path@^5.0.0:
4486 dependencies: 4495 dependencies:
4487 p-locate "^4.1.0" 4496 p-locate "^4.1.0"
4488 4497
4489lodash.assignin@^4.0.9: 4498locate-path@^6.0.0:
4490 version "4.2.0" 4499 version "6.0.0"
4491 resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" 4500 resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
4492 integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= 4501 integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
4493 4502 dependencies:
4494lodash.bind@^4.1.4: 4503 p-locate "^5.0.0"
4495 version "4.2.1"
4496 resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35"
4497 integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=
4498 4504
4499lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: 4505lodash.defaults@^4.2.0:
4500 version "4.2.0" 4506 version "4.2.0"
4501 resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" 4507 resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
4502 integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= 4508 integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
4503 4509
4504lodash.filter@^4.4.0: 4510lodash.flatten@^4.4.0:
4505 version "4.6.0"
4506 resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
4507 integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=
4508
4509lodash.flatten@^4.2.0, lodash.flatten@^4.4.0:
4510 version "4.4.0" 4511 version "4.4.0"
4511 resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" 4512 resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
4512 integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= 4513 integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
4513 4514
4514lodash.foreach@^4.3.0:
4515 version "4.5.0"
4516 resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
4517 integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=
4518
4519lodash.get@^4.4.2: 4515lodash.get@^4.4.2:
4520 version "4.4.2" 4516 version "4.4.2"
4521 resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 4517 resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
@@ -4526,52 +4522,17 @@ lodash.isequal@^4.5.0:
4526 resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" 4522 resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
4527 integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= 4523 integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
4528 4524
4529lodash.map@^4.4.0: 4525lodash@>=4.17.13, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4:
4530 version "4.6.0"
4531 resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
4532 integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
4533
4534lodash.merge@^4.4.0:
4535 version "4.6.2"
4536 resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
4537 integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
4538
4539lodash.pick@^4.2.1:
4540 version "4.4.0"
4541 resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
4542 integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
4543
4544lodash.reduce@^4.4.0:
4545 version "4.6.0"
4546 resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
4547 integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=
4548
4549lodash.reject@^4.4.0:
4550 version "4.6.0"
4551 resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415"
4552 integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=
4553
4554lodash.some@^4.4.0:
4555 version "4.6.0"
4556 resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
4557 integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=
4558
4559lodash.unescape@^4.0.1:
4560 version "4.0.1"
4561 resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
4562 integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
4563
4564lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4:
4565 version "4.17.20" 4526 version "4.17.20"
4566 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 4527 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
4567 integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 4528 integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
4568 4529
4569log-symbols@3.0.0: 4530log-symbols@4.0.0:
4570 version "3.0.0" 4531 version "4.0.0"
4571 resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" 4532 resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
4572 integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== 4533 integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
4573 dependencies: 4534 dependencies:
4574 chalk "^2.4.2" 4535 chalk "^4.0.0"
4575 4536
4576logform@^2.2.0: 4537logform@^2.2.0:
4577 version "2.2.0" 4538 version "2.2.0"
@@ -4636,10 +4597,11 @@ lru@^3.1.0:
4636 inherits "^2.0.1" 4597 inherits "^2.0.1"
4637 4598
4638magnet-uri@^5.1.3, magnet-uri@^5.1.4: 4599magnet-uri@^5.1.3, magnet-uri@^5.1.4:
4639 version "5.3.0" 4600 version "5.4.0"
4640 resolved "https://registry.yarnpkg.com/magnet-uri/-/magnet-uri-5.3.0.tgz#5dd2efbfcf44c41ce54fe309030bce4ee120b79b" 4601 resolved "https://registry.yarnpkg.com/magnet-uri/-/magnet-uri-5.4.0.tgz#5c64d3b8853eafb2f31840df09fbfc90c00f0e1d"
4641 integrity sha512-8GuTc9mXYfaKrXz687kzx2YTEhMR/X1Qgt6tkTNwPlb2fUy3QfU+O9zuoB5DKAa/IyVdLGxe9xSFUtaA+ZG5tQ== 4602 integrity sha512-ZpqciThlbvE6KkyT5oxAup/6CwjePw1hdtR8NU5+vq2hn9Sp5b7w3bRiJRvo9fMHUj2dWSuVCdkqt9p4ed1V9Q==
4642 dependencies: 4603 dependencies:
4604 bep53-range "^1.0.0"
4643 thirty-two "^1.0.2" 4605 thirty-two "^1.0.2"
4644 4606
4645maildev@^1.0.0-rc3: 4607maildev@^1.0.0-rc3:
@@ -4712,7 +4674,7 @@ make-plural@^4.3.0:
4712 optionalDependencies: 4674 optionalDependencies:
4713 minimist "^1.2.0" 4675 minimist "^1.2.0"
4714 4676
4715make-plural@^6.2.1: 4677make-plural@^6.2.2:
4716 version "6.2.2" 4678 version "6.2.2"
4717 resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-6.2.2.tgz#beb5fd751355e72660eeb2218bb98eec92853c6c" 4679 resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-6.2.2.tgz#beb5fd751355e72660eeb2218bb98eec92853c6c"
4718 integrity sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA== 4680 integrity sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA==
@@ -4739,9 +4701,9 @@ marked-man@^0.7.0:
4739 integrity sha512-zxK5E4jbuARALc+fIUAanM2njVGnrd9YvKrqoDHUg2XwNLJijo39EzMIg59LecHBHsIHNtPqepqnJp4SmL/EVg== 4701 integrity sha512-zxK5E4jbuARALc+fIUAanM2njVGnrd9YvKrqoDHUg2XwNLJijo39EzMIg59LecHBHsIHNtPqepqnJp4SmL/EVg==
4740 4702
4741marked@^1.1.0: 4703marked@^1.1.0:
4742 version "1.1.1" 4704 version "1.2.3"
4743 resolved "https://registry.yarnpkg.com/marked/-/marked-1.1.1.tgz#e5d61b69842210d5df57b05856e0c91572703e6a" 4705 resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.3.tgz#58817ba348a7c9398cb94d40d12e0d08df83af57"
4744 integrity sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw== 4706 integrity sha512-RQuL2i6I6Gn+9n81IDNGbL0VHnta4a+8ZhqvryXEniTb/hQNtf3i26hi1XWUhzb9BgVyWHKR3UO8MaHtKoYibw==
4745 4707
4746math-interval-parser@^2.0.1: 4708math-interval-parser@^2.0.1:
4747 version "2.0.1" 4709 version "2.0.1"
@@ -4768,12 +4730,12 @@ media-typer@0.3.0:
4768 integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 4730 integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
4769 4731
4770mediasource@^2.2.2, mediasource@^2.3.0: 4732mediasource@^2.2.2, mediasource@^2.3.0:
4771 version "2.3.0" 4733 version "2.4.0"
4772 resolved "https://registry.yarnpkg.com/mediasource/-/mediasource-2.3.0.tgz#4c7b49e7ea4fb88f1cc181d8fcf0d94649271dc6" 4734 resolved "https://registry.yarnpkg.com/mediasource/-/mediasource-2.4.0.tgz#7b03378054c41400374e9bade50aa0d7a758c39b"
4773 integrity sha512-fqm86UwHvAnneIv40Uy1sDQaFtAByq/k0SQ3uCtbnEeSQNT1s5TDHCZOD1VmYCHwfY1jL2NjoZVwzZKYqy3L7A== 4735 integrity sha512-SKUMrbFMHgiCUZFOWZcL0aiF/KgHx9SPIKzxrl6+7nMUMDK/ZnOmJdY/9wKzYeM0g3mybt3ueg+W+/mrYfmeFQ==
4774 dependencies: 4736 dependencies:
4775 inherits "^2.0.1" 4737 inherits "^2.0.4"
4776 readable-stream "^3.0.0" 4738 readable-stream "^3.6.0"
4777 to-arraybuffer "^1.0.1" 4739 to-arraybuffer "^1.0.1"
4778 4740
4779memoizee@^0.4.14: 4741memoizee@^0.4.14:
@@ -4856,11 +4818,6 @@ mime@^2.4.6:
4856 resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" 4818 resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1"
4857 integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== 4819 integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==
4858 4820
4859mimer@^1.0.0:
4860 version "1.1.0"
4861 resolved "https://registry.yarnpkg.com/mimer/-/mimer-1.1.0.tgz#2cb67f7093998e772a0e62c090f77daa1b8a2dbe"
4862 integrity sha512-y9dVfy2uiycQvDNiAYW6zp49ZhFlXDMr5wfdOiMbdzGM/0N5LNR6HTUn3un+WUQcM0koaw8FMTG1bt5EnHJdvQ==
4863
4864mimic-fn@^2.1.0: 4821mimic-fn@^2.1.0:
4865 version "2.1.0" 4822 version "2.1.0"
4866 resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 4823 resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -4927,36 +4884,41 @@ mkdirp@0.x.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
4927 dependencies: 4884 dependencies:
4928 minimist "^1.2.5" 4885 minimist "^1.2.5"
4929 4886
4887mkdirp@1.0.3:
4888 version "1.0.3"
4889 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea"
4890 integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==
4891
4930mocha@^8.0.1: 4892mocha@^8.0.1:
4931 version "8.1.1" 4893 version "8.2.1"
4932 resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.1.tgz#1de1ba4e9a2c955d96b84e469d7540848223592d" 4894 resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39"
4933 integrity sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ== 4895 integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==
4934 dependencies: 4896 dependencies:
4897 "@ungap/promise-all-settled" "1.1.2"
4935 ansi-colors "4.1.1" 4898 ansi-colors "4.1.1"
4936 browser-stdout "1.3.1" 4899 browser-stdout "1.3.1"
4937 chokidar "3.3.1" 4900 chokidar "3.4.3"
4938 debug "3.2.6" 4901 debug "4.2.0"
4939 diff "4.0.2" 4902 diff "4.0.2"
4940 escape-string-regexp "1.0.5" 4903 escape-string-regexp "4.0.0"
4941 find-up "4.1.0" 4904 find-up "5.0.0"
4942 glob "7.1.6" 4905 glob "7.1.6"
4943 growl "1.10.5" 4906 growl "1.10.5"
4944 he "1.2.0" 4907 he "1.2.0"
4945 js-yaml "3.13.1" 4908 js-yaml "3.14.0"
4946 log-symbols "3.0.0" 4909 log-symbols "4.0.0"
4947 minimatch "3.0.4" 4910 minimatch "3.0.4"
4948 ms "2.1.2" 4911 ms "2.1.2"
4949 object.assign "4.1.0" 4912 nanoid "3.1.12"
4950 promise.allsettled "1.0.2" 4913 serialize-javascript "5.0.1"
4951 serialize-javascript "4.0.0" 4914 strip-json-comments "3.1.1"
4952 strip-json-comments "3.0.1" 4915 supports-color "7.2.0"
4953 supports-color "7.1.0"
4954 which "2.0.2" 4916 which "2.0.2"
4955 wide-align "1.1.3" 4917 wide-align "1.1.3"
4956 workerpool "6.0.0" 4918 workerpool "6.0.2"
4957 yargs "13.3.2" 4919 yargs "13.3.2"
4958 yargs-parser "13.1.2" 4920 yargs-parser "13.1.2"
4959 yargs-unparser "1.6.1" 4921 yargs-unparser "2.0.0"
4960 4922
4961moment-timezone@^0.5.21, moment-timezone@^0.5.31: 4923moment-timezone@^0.5.21, moment-timezone@^0.5.31:
4962 version "0.5.31" 4924 version "0.5.31"
@@ -4965,10 +4927,10 @@ moment-timezone@^0.5.21, moment-timezone@^0.5.31:
4965 dependencies: 4927 dependencies:
4966 moment ">= 2.9.0" 4928 moment ">= 2.9.0"
4967 4929
4968"moment@>= 2.9.0", moment@^2.24.0, moment@^2.25.3: 4930"moment@>= 2.9.0", moment@^2.24.0:
4969 version "2.27.0" 4931 version "2.29.1"
4970 resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" 4932 resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
4971 integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== 4933 integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
4972 4934
4973morgan@^1.5.3: 4935morgan@^1.5.3:
4974 version "1.10.0" 4936 version "1.10.0"
@@ -5026,10 +4988,10 @@ multer@^1.1.0:
5026 type-is "^1.6.4" 4988 type-is "^1.6.4"
5027 xtend "^4.0.0" 4989 xtend "^4.0.0"
5028 4990
5029multimatch@^4.0.0: 4991multimatch@^5.0.0:
5030 version "4.0.0" 4992 version "5.0.0"
5031 resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" 4993 resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6"
5032 integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== 4994 integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==
5033 dependencies: 4995 dependencies:
5034 "@types/minimatch" "^3.0.3" 4996 "@types/minimatch" "^3.0.3"
5035 array-differ "^3.0.0" 4997 array-differ "^3.0.0"
@@ -5038,11 +5000,11 @@ multimatch@^4.0.0:
5038 minimatch "^3.0.4" 5000 minimatch "^3.0.4"
5039 5001
5040multistream@^4.0.0: 5002multistream@^4.0.0:
5041 version "4.0.0" 5003 version "4.0.1"
5042 resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.0.0.tgz#c771b6d17d169138b6abcb15f0061170e3c09cea" 5004 resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.0.1.tgz#6c188a40b66ab0205c9e9f560a5348f13fe1f82a"
5043 integrity sha512-t0C8MAtH/d3Y+5nooEtUMWli92lVw9Jhx4uOhRl5GAwS5vc+YTmp/VXNJNsCBAMeEyK/6zhbk6x9JE3AiCvo4g== 5005 integrity sha512-LNPIR/LD0JUw2beGlSv4sgTSnGbZp16d/PG2rnIrYjkeCaepNmBTobuiaNQATCPiYgn+BBuQTm70UlvwRfLZ3Q==
5044 dependencies: 5006 dependencies:
5045 readable-stream "^3.4.0" 5007 readable-stream "^3.6.0"
5046 5008
5047mustache@^4.0.1: 5009mustache@^4.0.1:
5048 version "4.0.1" 5010 version "4.0.1"
@@ -5055,9 +5017,14 @@ mute-stream@~0.0.4:
5055 integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 5017 integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
5056 5018
5057nan@~2.14.0: 5019nan@~2.14.0:
5058 version "2.14.1" 5020 version "2.14.2"
5059 resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" 5021 resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
5060 integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== 5022 integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
5023
5024nanoid@3.1.12:
5025 version "3.1.12"
5026 resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654"
5027 integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==
5061 5028
5062nanoid@^3.1.16: 5029nanoid@^3.1.16:
5063 version "3.1.16" 5030 version "3.1.16"
@@ -5075,9 +5042,9 @@ ncp@1.0.x:
5075 integrity sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY= 5042 integrity sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=
5076 5043
5077needle@^2.2.1, needle@^2.5.0: 5044needle@^2.2.1, needle@^2.5.0:
5078 version "2.5.0" 5045 version "2.5.2"
5079 resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.0.tgz#e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0" 5046 resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.2.tgz#cf1a8fce382b5a280108bba90a14993c00e4010a"
5080 integrity sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA== 5047 integrity sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==
5081 dependencies: 5048 dependencies:
5082 debug "^3.2.6" 5049 debug "^3.2.6"
5083 iconv-lite "^0.4.4" 5050 iconv-lite "^0.4.4"
@@ -5108,25 +5075,38 @@ next-tick@~1.0.0:
5108 resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 5075 resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
5109 integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= 5076 integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
5110 5077
5111nice-try@^1.0.4:
5112 version "1.0.5"
5113 resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
5114 integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
5115
5116node-addon-api@^3.0.0: 5078node-addon-api@^3.0.0:
5117 version "3.0.0" 5079 version "3.0.2"
5118 resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.0.tgz#812446a1001a54f71663bed188314bba07e09247" 5080 resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.2.tgz#04bc7b83fd845ba785bb6eae25bc857e1ef75681"
5119 integrity sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg== 5081 integrity sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==
5120 5082
5121node-forge@^0.9.1: 5083node-fetch@^2.6.0:
5122 version "0.9.1" 5084 version "2.6.1"
5123 resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.1.tgz#775368e6846558ab6676858a4d8c6e8d16c677b5" 5085 resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
5124 integrity sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ== 5086 integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
5125 5087
5126node-gyp-build@~3.7.0: 5088node-forge@^0.10.0:
5127 version "3.7.0" 5089 version "0.10.0"
5128 resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d" 5090 resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
5129 integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w== 5091 integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
5092
5093node-gyp-build@^4.2.0:
5094 version "4.2.3"
5095 resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
5096 integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==
5097
5098node-media-server@^2.1.4:
5099 version "2.2.4"
5100 resolved "https://registry.yarnpkg.com/node-media-server/-/node-media-server-2.2.4.tgz#1f751aee0121d32fc1eaecb03ad43f82b25a44d8"
5101 integrity sha512-2Y5hZ+BI2YxM5+PiEXM9isAZUPSJoENTb0xXVzg8MzP9nFtVVv+X7+iGnFeyXB0BWaCsdBFD5A/rTL4dfaCw+Q==
5102 dependencies:
5103 basic-auth-connect "^1.0.0"
5104 chalk "^2.4.2"
5105 dateformat "^3.0.3"
5106 express "^4.16.4"
5107 lodash ">=4.17.13"
5108 mkdirp "1.0.3"
5109 ws "^5.2.2"
5130 5110
5131node-pre-gyp@0.15.0: 5111node-pre-gyp@0.15.0:
5132 version "0.15.0" 5112 version "0.15.0"
@@ -5165,7 +5145,7 @@ nodemailer@5.0.0:
5165 resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-5.0.0.tgz#bcb409eca613114e85de42646d0ce7f1fa70b716" 5145 resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-5.0.0.tgz#bcb409eca613114e85de42646d0ce7f1fa70b716"
5166 integrity sha512-XI4PI5L7GYcJyHkPcHlvPyRrYohNYBNRNbt1tU8PXNU3E1ADJC84a13V0vbL9AM431OP+ETacaGXAF8fGn1JvA== 5146 integrity sha512-XI4PI5L7GYcJyHkPcHlvPyRrYohNYBNRNbt1tU8PXNU3E1ADJC84a13V0vbL9AM431OP+ETacaGXAF8fGn1JvA==
5167 5147
5168nodemailer@6.4.11, nodemailer@^6.0.0, nodemailer@^6.3.1, nodemailer@^6.4.6: 5148nodemailer@6.4.11:
5169 version "6.4.11" 5149 version "6.4.11"
5170 resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.4.11.tgz#1f00b4ffd106403f17c03f3d43d5945b2677046c" 5150 resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.4.11.tgz#1f00b4ffd106403f17c03f3d43d5945b2677046c"
5171 integrity sha512-BVZBDi+aJV4O38rxsUh164Dk1NCqgh6Cm0rQSb9SK/DHGll/DrCMnycVDD7msJgZCnmVa8ASo8EZzR7jsgTukQ== 5151 integrity sha512-BVZBDi+aJV4O38rxsUh164Dk1NCqgh6Cm0rQSb9SK/DHGll/DrCMnycVDD7msJgZCnmVa8ASo8EZzR7jsgTukQ==
@@ -5175,10 +5155,15 @@ nodemailer@^3.1.1:
5175 resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-3.1.8.tgz#febfaccb4bd273678473a309c6cb4b4a2f3c48e3" 5155 resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-3.1.8.tgz#febfaccb4bd273678473a309c6cb4b4a2f3c48e3"
5176 integrity sha1-/r+sy0vSc2eEc6MJxstLSi88SOM= 5156 integrity sha1-/r+sy0vSc2eEc6MJxstLSi88SOM=
5177 5157
5158nodemailer@^6.0.0, nodemailer@^6.3.1, nodemailer@^6.4.14:
5159 version "6.4.15"
5160 resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.4.15.tgz#da5dbb78b8376e34c232c6aa3d2d65cfe17440e9"
5161 integrity sha512-2/z13dBTWdgTRlxVMAK6C13dCI22GEShET4+jFLlQsxpblxYhojnucfcTZO1QBu5CsHvABsBj2JCGO3vl0HSQA==
5162
5178nodemon@^2.0.1: 5163nodemon@^2.0.1:
5179 version "2.0.4" 5164 version "2.0.6"
5180 resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.4.tgz#55b09319eb488d6394aa9818148c0c2d1c04c416" 5165 resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.6.tgz#1abe1937b463aaf62f0d52e2b7eaadf28cc2240d"
5181 integrity sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ== 5166 integrity sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==
5182 dependencies: 5167 dependencies:
5183 chokidar "^3.2.2" 5168 chokidar "^3.2.2"
5184 debug "^3.2.6" 5169 debug "^3.2.6"
@@ -5188,8 +5173,8 @@ nodemon@^2.0.1:
5188 semver "^5.7.1" 5173 semver "^5.7.1"
5189 supports-color "^5.5.0" 5174 supports-color "^5.5.0"
5190 touch "^3.1.0" 5175 touch "^3.1.0"
5191 undefsafe "^2.0.2" 5176 undefsafe "^2.0.3"
5192 update-notifier "^4.0.0" 5177 update-notifier "^4.1.0"
5193 5178
5194nopt@^4.0.1: 5179nopt@^4.0.1:
5195 version "4.0.3" 5180 version "4.0.3"
@@ -5303,25 +5288,25 @@ object-component@0.0.3:
5303 resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" 5288 resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
5304 integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= 5289 integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
5305 5290
5306object-inspect@^1.7.0: 5291object-inspect@^1.8.0:
5307 version "1.8.0" 5292 version "1.8.0"
5308 resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" 5293 resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
5309 integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== 5294 integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
5310 5295
5311object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 5296object-keys@^1.0.12, object-keys@^1.1.1:
5312 version "1.1.1" 5297 version "1.1.1"
5313 resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 5298 resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
5314 integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 5299 integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
5315 5300
5316object.assign@4.1.0, object.assign@^4.1.0: 5301object.assign@^4.1.1:
5317 version "4.1.0" 5302 version "4.1.2"
5318 resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 5303 resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
5319 integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 5304 integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
5320 dependencies: 5305 dependencies:
5321 define-properties "^1.1.2" 5306 call-bind "^1.0.0"
5322 function-bind "^1.1.1" 5307 define-properties "^1.1.3"
5323 has-symbols "^1.0.0" 5308 has-symbols "^1.0.1"
5324 object-keys "^1.0.11" 5309 object-keys "^1.1.1"
5325 5310
5326object.fromentries@^2.0.2: 5311object.fromentries@^2.0.2:
5327 version "2.0.2" 5312 version "2.0.2"
@@ -5396,11 +5381,6 @@ open@^6.4.0:
5396 dependencies: 5381 dependencies:
5397 is-wsl "^1.1.0" 5382 is-wsl "^1.1.0"
5398 5383
5399openapi-types@^1.3.5:
5400 version "1.3.5"
5401 resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-1.3.5.tgz#6718cfbc857fe6c6f1471f65b32bdebb9c10ce40"
5402 integrity sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==
5403
5404opn@^6.0.0: 5384opn@^6.0.0:
5405 version "6.0.0" 5385 version "6.0.0"
5406 resolved "https://registry.yarnpkg.com/opn/-/opn-6.0.0.tgz#3c5b0db676d5f97da1233d1ed42d182bc5a27d2d" 5386 resolved "https://registry.yarnpkg.com/opn/-/opn-6.0.0.tgz#3c5b0db676d5f97da1233d1ed42d182bc5a27d2d"
@@ -5467,6 +5447,13 @@ p-limit@^2.0.0, p-limit@^2.2.0:
5467 dependencies: 5447 dependencies:
5468 p-try "^2.0.0" 5448 p-try "^2.0.0"
5469 5449
5450p-limit@^3.0.2:
5451 version "3.0.2"
5452 resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe"
5453 integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==
5454 dependencies:
5455 p-try "^2.0.0"
5456
5470p-locate@^2.0.0: 5457p-locate@^2.0.0:
5471 version "2.0.0" 5458 version "2.0.0"
5472 resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 5459 resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
@@ -5488,6 +5475,18 @@ p-locate@^4.1.0:
5488 dependencies: 5475 dependencies:
5489 p-limit "^2.2.0" 5476 p-limit "^2.2.0"
5490 5477
5478p-locate@^5.0.0:
5479 version "5.0.0"
5480 resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
5481 integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
5482 dependencies:
5483 p-limit "^3.0.2"
5484
5485p-map@^2.1.0:
5486 version "2.1.0"
5487 resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
5488 integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
5489
5491p-timeout@^3.2.0: 5490p-timeout@^3.2.0:
5492 version "3.2.0" 5491 version "3.2.0"
5493 resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" 5492 resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
@@ -5599,6 +5598,13 @@ parse-torrent@^7.0.0, parse-torrent@^7.1.3:
5599 simple-get "^3.0.1" 5598 simple-get "^3.0.1"
5600 simple-sha1 "^3.0.0" 5599 simple-sha1 "^3.0.0"
5601 5600
5601parse5@^3.0.1:
5602 version "3.0.3"
5603 resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
5604 integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
5605 dependencies:
5606 "@types/node" "*"
5607
5602parseqs@0.0.5: 5608parseqs@0.0.5:
5603 version "0.0.5" 5609 version "0.0.5"
5604 resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" 5610 resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
@@ -5606,6 +5612,11 @@ parseqs@0.0.5:
5606 dependencies: 5612 dependencies:
5607 better-assert "~1.0.0" 5613 better-assert "~1.0.0"
5608 5614
5615parseqs@0.0.6:
5616 version "0.0.6"
5617 resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5"
5618 integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==
5619
5609parseuri@0.0.5: 5620parseuri@0.0.5:
5610 version "0.0.5" 5621 version "0.0.5"
5611 resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" 5622 resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
@@ -5613,6 +5624,11 @@ parseuri@0.0.5:
5613 dependencies: 5624 dependencies:
5614 better-assert "~1.0.0" 5625 better-assert "~1.0.0"
5615 5626
5627parseuri@0.0.6:
5628 version "0.0.6"
5629 resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a"
5630 integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==
5631
5616parseurl@~1.3.3: 5632parseurl@~1.3.3:
5617 version "1.3.3" 5633 version "1.3.3"
5618 resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 5634 resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -5638,11 +5654,6 @@ path-is-absolute@^1.0.0:
5638 resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 5654 resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
5639 integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 5655 integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
5640 5656
5641path-key@^2.0.1:
5642 version "2.0.1"
5643 resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
5644 integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
5645
5646path-key@^3.0.0, path-key@^3.1.0: 5657path-key@^3.0.0, path-key@^3.1.0:
5647 version "3.1.1" 5658 version "3.1.1"
5648 resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 5659 resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -5702,25 +5713,25 @@ pfeed@1.1.11:
5702 lodash "^4.17.15" 5713 lodash "^4.17.15"
5703 xml "^1.0.1" 5714 xml "^1.0.1"
5704 5715
5705pg-connection-string@^2.3.0: 5716pg-connection-string@^2.4.0:
5706 version "2.3.0" 5717 version "2.4.0"
5707 resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.3.0.tgz#c13fcb84c298d0bfa9ba12b40dd6c23d946f55d6" 5718 resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.4.0.tgz#c979922eb47832999a204da5dbe1ebf2341b6a10"
5708 integrity sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w== 5719 integrity sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==
5709 5720
5710pg-int8@1.0.1: 5721pg-int8@1.0.1:
5711 version "1.0.1" 5722 version "1.0.1"
5712 resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" 5723 resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
5713 integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== 5724 integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
5714 5725
5715pg-pool@^3.2.1: 5726pg-pool@^3.2.2:
5716 version "3.2.1" 5727 version "3.2.2"
5717 resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.2.1.tgz#5f4afc0f58063659aeefa952d36af49fa28b30e0" 5728 resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.2.2.tgz#a560e433443ed4ad946b84d774b3f22452694dff"
5718 integrity sha512-BQDPWUeKenVrMMDN9opfns/kZo4lxmSWhIqo+cSAF7+lfi9ZclQbr9vfnlNaPr8wYF3UYjm5X0yPAhbcgqNOdA== 5729 integrity sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA==
5719 5730
5720pg-protocol@^1.2.5: 5731pg-protocol@^1.3.0:
5721 version "1.2.5" 5732 version "1.3.0"
5722 resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.2.5.tgz#28a1492cde11646ff2d2d06bdee42a3ba05f126c" 5733 resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.3.0.tgz#3c8fb7ca34dbbfcc42776ce34ac5f537d6e34770"
5723 integrity sha512-1uYCckkuTfzz/FCefvavRywkowa6M5FohNMF5OjKrqo9PSR8gYc8poVmwwYQaBxhmQdBjhtP514eXy9/Us2xKg== 5734 integrity sha512-64/bYByMrhWULUaCd+6/72c9PMWhiVFs3EVxl9Ct6a3v/U8+rKgqP2w+kKg/BIGgMJyB+Bk/eNivT32Al+Jghw==
5724 5735
5725pg-types@^2.1.0: 5736pg-types@^2.1.0:
5726 version "2.2.0" 5737 version "2.2.0"
@@ -5734,32 +5745,31 @@ pg-types@^2.1.0:
5734 postgres-interval "^1.1.0" 5745 postgres-interval "^1.1.0"
5735 5746
5736pg@^8.2.1: 5747pg@^8.2.1:
5737 version "8.3.2" 5748 version "8.4.2"
5738 resolved "https://registry.yarnpkg.com/pg/-/pg-8.3.2.tgz#52766e41302f5b878fe1efa10d4cdd486f6dff50" 5749 resolved "https://registry.yarnpkg.com/pg/-/pg-8.4.2.tgz#2aa58166a23391e91d56a7ea57c6d99931c0642a"
5739 integrity sha512-hOoRCTriXS+VWwyXHchRjWb9yv3Koq8irlwwXniqhdgK0AbfWvEnybGS2HIUE+UdCSTuYAM4WGPujFpPg9Vcaw== 5750 integrity sha512-E9FlUrrc7w3+sbRmL1CSw99vifACzB2TjhMM9J5w9D1LIg+6un0jKkpHS1EQf2CWhKhec2bhrBLVMmUBDbjPRQ==
5740 dependencies: 5751 dependencies:
5741 buffer-writer "2.0.0" 5752 buffer-writer "2.0.0"
5742 packet-reader "1.0.0" 5753 packet-reader "1.0.0"
5743 pg-connection-string "^2.3.0" 5754 pg-connection-string "^2.4.0"
5744 pg-pool "^3.2.1" 5755 pg-pool "^3.2.2"
5745 pg-protocol "^1.2.5" 5756 pg-protocol "^1.3.0"
5746 pg-types "^2.1.0" 5757 pg-types "^2.1.0"
5747 pgpass "1.x" 5758 pgpass "1.x"
5748 semver "4.3.2"
5749 5759
5750pgpass@1.x: 5760pgpass@1.x:
5751 version "1.0.2" 5761 version "1.0.4"
5752 resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306" 5762 resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c"
5753 integrity sha1-Knu0G2BltnkH6R2hsHwYR8h3swY= 5763 integrity sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==
5754 dependencies: 5764 dependencies:
5755 split "^1.0.0" 5765 split2 "^3.1.1"
5756 5766
5757phin@^2.9.1: 5767phin@^2.9.1:
5758 version "2.9.3" 5768 version "2.9.3"
5759 resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" 5769 resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
5760 integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== 5770 integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
5761 5771
5762picomatch@^2.0.4, picomatch@^2.0.7, picomatch@^2.2.1: 5772picomatch@^2.0.4, picomatch@^2.2.1:
5763 version "2.2.2" 5773 version "2.2.2"
5764 resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 5774 resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
5765 integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 5775 integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
@@ -5839,9 +5849,9 @@ postgres-bytea@~1.0.0:
5839 integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= 5849 integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=
5840 5850
5841postgres-date@~1.0.4: 5851postgres-date@~1.0.4:
5842 version "1.0.6" 5852 version "1.0.7"
5843 resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.6.tgz#4925e8085b30c2ba1a06ac91b9a3473954a2ce2d" 5853 resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
5844 integrity sha512-o2a4gxeFcox+CgB3Ig/kNHBP23PiEXHCXx7pcIIsvzoNz4qv+lKTyiSkjOXIMNUl12MO/mOYl2K6wR9X5K6Plg== 5854 integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
5845 5855
5846postgres-interval@^1.1.0: 5856postgres-interval@^1.1.0:
5847 version "1.2.0" 5857 version "1.2.0"
@@ -5860,7 +5870,7 @@ prepend-http@^2.0.0:
5860 resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 5870 resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
5861 integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 5871 integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
5862 5872
5863preview-email@^2.0.1: 5873preview-email@^2.0.2:
5864 version "2.0.2" 5874 version "2.0.2"
5865 resolved "https://registry.yarnpkg.com/preview-email/-/preview-email-2.0.2.tgz#6cecec27ec91eb1ec1b0b67581d2f44f15c27b69" 5875 resolved "https://registry.yarnpkg.com/preview-email/-/preview-email-2.0.2.tgz#6cecec27ec91eb1ec1b0b67581d2f44f15c27b69"
5866 integrity sha512-FADpJ1p5VX0F/V57gcxc8IoxX63JuyDOOMN4Y7tJwil8K1/lvN0HtO7mZHIP2kgwhMMehjYTxqnjFtSGg1/LXw== 5876 integrity sha512-FADpJ1p5VX0F/V57gcxc8IoxX63JuyDOOMN4Y7tJwil8K1/lvN0HtO7mZHIP2kgwhMMehjYTxqnjFtSGg1/LXw==
@@ -5890,17 +5900,6 @@ progress@^2.0.0:
5890 resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 5900 resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
5891 integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 5901 integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
5892 5902
5893promise.allsettled@1.0.2:
5894 version "1.0.2"
5895 resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9"
5896 integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==
5897 dependencies:
5898 array.prototype.map "^1.0.1"
5899 define-properties "^1.1.3"
5900 es-abstract "^1.17.0-next.1"
5901 function-bind "^1.1.1"
5902 iterate-value "^1.0.0"
5903
5904promise.prototype.finally@^3.1.2: 5903promise.prototype.finally@^3.1.2:
5905 version "3.1.2" 5904 version "3.1.2"
5906 resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" 5905 resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067"
@@ -6200,9 +6199,9 @@ punycode@^2.1.0, punycode@^2.1.1:
6200 integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 6199 integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
6201 6200
6202pupa@^2.0.1: 6201pupa@^2.0.1:
6203 version "2.0.1" 6202 version "2.1.1"
6204 resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" 6203 resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
6205 integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== 6204 integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
6206 dependencies: 6205 dependencies:
6207 escape-goat "^2.0.0" 6206 escape-goat "^2.0.0"
6208 6207
@@ -6221,10 +6220,10 @@ qs@~6.5.2:
6221 resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 6220 resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
6222 integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 6221 integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
6223 6222
6224queue-microtask@^1.1.0, queue-microtask@^1.1.2: 6223queue-microtask@^1.1.0, queue-microtask@^1.1.2, queue-microtask@^1.2.0:
6225 version "1.1.4" 6224 version "1.2.0"
6226 resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.1.4.tgz#40841ace4356b48b35b5ea61a2e1fe0a23c59ce1" 6225 resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.0.tgz#f27d002cbfac741072afa0e9af3a119b0e8724a3"
6227 integrity sha512-eY/4Obve9cE5FK8YvC1cJsm5cr7XvAurul8UtBDJ2PR1p5NmAwHtvAt5ftcLtwYRCUKNhxCneZZlxmUDFoSeKA== 6226 integrity sha512-J95OVUiS4b8qqmpqhCodN8yPpHG2mpZUPQ8tDGyIY0VhM+kBHszOuvsMJVGNQ1OH2BnTFbqz45i+2jGpDw9H0w==
6228 6227
6229random-access-file@^2.0.1: 6228random-access-file@^2.0.1:
6230 version "2.1.4" 6229 version "2.1.4"
@@ -6286,11 +6285,11 @@ rc@^1.2.7, rc@^1.2.8:
6286 strip-json-comments "~2.0.1" 6285 strip-json-comments "~2.0.1"
6287 6286
6288rdf-canonize@^1.0.2: 6287rdf-canonize@^1.0.2:
6289 version "1.1.0" 6288 version "1.2.0"
6290 resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-1.1.0.tgz#61d1609bbdb3234b8f38c9c34ad889bf670e089d" 6289 resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-1.2.0.tgz#9872b2cc6ed92a9969e834f9f042addaf0d4f7f9"
6291 integrity sha512-DV06OnhVfl2zcZJQCt+YvU+hoZVgpyQpNFLeAmghq8RJybUxD3B4LRzlBquYS5k+LLd8/c3g5Gnhkqjw5qRMvg== 6290 integrity sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw==
6292 dependencies: 6291 dependencies:
6293 node-forge "^0.9.1" 6292 node-forge "^0.10.0"
6294 semver "^6.3.0" 6293 semver "^6.3.0"
6295 6294
6296read-pkg-up@^2.0.0: 6295read-pkg-up@^2.0.0:
@@ -6375,17 +6374,10 @@ readable-wrap@^1.0.0:
6375 dependencies: 6374 dependencies:
6376 readable-stream "^1.1.13-1" 6375 readable-stream "^1.1.13-1"
6377 6376
6378readdirp@~3.3.0: 6377readdirp@~3.5.0:
6379 version "3.3.0" 6378 version "3.5.0"
6380 resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" 6379 resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
6381 integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== 6380 integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
6382 dependencies:
6383 picomatch "^2.0.7"
6384
6385readdirp@~3.4.0:
6386 version "3.4.0"
6387 resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
6388 integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
6389 dependencies: 6381 dependencies:
6390 picomatch "^2.2.1" 6382 picomatch "^2.2.1"
6391 6383
@@ -6394,12 +6386,7 @@ record-cache@^1.0.2:
6394 resolved "https://registry.yarnpkg.com/record-cache/-/record-cache-1.1.0.tgz#f8a467a691a469584b26e88d36b18afdb3932037" 6386 resolved "https://registry.yarnpkg.com/record-cache/-/record-cache-1.1.0.tgz#f8a467a691a469584b26e88d36b18afdb3932037"
6395 integrity sha512-u8rbtLEJV7HRacl/ZYwSBFD8NFyB3PfTTfGLP37IW3hftQCwu6z4Q2RLyxo1YJUNRTEzJfpLpGwVuEYdaIkG9Q== 6387 integrity sha512-u8rbtLEJV7HRacl/ZYwSBFD8NFyB3PfTTfGLP37IW3hftQCwu6z4Q2RLyxo1YJUNRTEzJfpLpGwVuEYdaIkG9Q==
6396 6388
6397redis-commands@1.5.0: 6389redis-commands@1.6.0, redis-commands@^1.5.0:
6398 version "1.5.0"
6399 resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785"
6400 integrity sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==
6401
6402redis-commands@^1.5.0:
6403 version "1.6.0" 6390 version "1.6.0"
6404 resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.6.0.tgz#36d4ca42ae9ed29815cdb30ad9f97982eba1ce23" 6391 resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.6.0.tgz#36d4ca42ae9ed29815cdb30ad9f97982eba1ce23"
6405 integrity sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ== 6392 integrity sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ==
@@ -6530,10 +6517,11 @@ resolve-pkg@^1.0.0:
6530 resolve-from "^2.0.0" 6517 resolve-from "^2.0.0"
6531 6518
6532resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0: 6519resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0:
6533 version "1.17.0" 6520 version "1.18.1"
6534 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" 6521 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130"
6535 integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== 6522 integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==
6536 dependencies: 6523 dependencies:
6524 is-core-module "^2.0.0"
6537 path-parse "^1.0.6" 6525 path-parse "^1.0.6"
6538 6526
6539responselike@^1.0.2: 6527responselike@^1.0.2:
@@ -6584,19 +6572,19 @@ rimraf@^3.0.0:
6584 glob "^7.1.3" 6572 glob "^7.1.3"
6585 6573
6586run-parallel-limit@^1.0.5: 6574run-parallel-limit@^1.0.5:
6587 version "1.0.5" 6575 version "1.0.6"
6588 resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.0.5.tgz#c29a4fd17b4df358cb52a8a697811a63c984f1b7" 6576 resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.0.6.tgz#0982a893d825b050cbaff1a35414832b195541b6"
6589 integrity sha512-NsY+oDngvrvMxKB3G8ijBzIema6aYbQMD2bHOamvN52BysbIGTnEY2xsNyfrcr9GhY995/t/0nQN3R3oZvaDlg== 6577 integrity sha512-yFFs4Q2kECi5mWXyyZj3UlAZ5OFq5E07opABC+EmhZdjEkrxXaUwFqOaaNF4tbayMnBxrsbujpeCYTVjGufZGQ==
6590 6578
6591run-parallel@^1.0.0, run-parallel@^1.1.2, run-parallel@^1.1.9: 6579run-parallel@^1.0.0, run-parallel@^1.1.2, run-parallel@^1.1.9:
6592 version "1.1.9" 6580 version "1.1.10"
6593 resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" 6581 resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef"
6594 integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== 6582 integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==
6595 6583
6596run-series@^1.1.2, run-series@^1.1.8: 6584run-series@^1.1.8, run-series@^1.1.9:
6597 version "1.1.8" 6585 version "1.1.9"
6598 resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.8.tgz#2c4558f49221e01cd6371ff4e0a1e203e460fc36" 6586 resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.9.tgz#15ba9cb90e6a6c054e67c98e1dc063df0ecc113a"
6599 integrity sha512-+GztYEPRpIsQoCSraWHDBs9WVy4eVME16zhOtDB4H9J4xN0XRhknnmLOl+4gRgZtu8dpp9N/utSPjKH/xmDzXg== 6587 integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==
6600 6588
6601rusha@^0.8.1: 6589rusha@^0.8.1:
6602 version "0.8.13" 6590 version "0.8.13"
@@ -6604,9 +6592,9 @@ rusha@^0.8.1:
6604 integrity sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo= 6592 integrity sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo=
6605 6593
6606rxjs@^6.5.2: 6594rxjs@^6.5.2:
6607 version "6.6.2" 6595 version "6.6.3"
6608 resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" 6596 resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552"
6609 integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== 6597 integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
6610 dependencies: 6598 dependencies:
6611 tslib "^1.9.0" 6599 tslib "^1.9.0"
6612 6600
@@ -6620,7 +6608,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2,
6620 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 6608 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
6621 integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 6609 integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
6622 6610
6623"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: 6611"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
6624 version "2.1.2" 6612 version "2.1.2"
6625 resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 6613 resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
6626 integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 6614 integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -6660,16 +6648,11 @@ semver-diff@^3.1.1:
6660 dependencies: 6648 dependencies:
6661 semver "^6.3.0" 6649 semver "^6.3.0"
6662 6650
6663"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.7.1: 6651"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.7.1:
6664 version "5.7.1" 6652 version "5.7.1"
6665 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 6653 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
6666 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 6654 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
6667 6655
6668semver@4.3.2:
6669 version "4.3.2"
6670 resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7"
6671 integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=
6672
6673semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0: 6656semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0:
6674 version "6.3.0" 6657 version "6.3.0"
6675 resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 6658 resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -6732,10 +6715,10 @@ sequelize@5.21.13:
6732 validator "^10.11.0" 6715 validator "^10.11.0"
6733 wkx "^0.4.8" 6716 wkx "^0.4.8"
6734 6717
6735serialize-javascript@4.0.0: 6718serialize-javascript@5.0.1:
6736 version "4.0.0" 6719 version "5.0.1"
6737 resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" 6720 resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
6738 integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 6721 integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
6739 dependencies: 6722 dependencies:
6740 randombytes "^2.1.0" 6723 randombytes "^2.1.0"
6741 6724
@@ -6759,13 +6742,6 @@ setprototypeof@1.1.1:
6759 resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 6742 resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
6760 integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 6743 integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
6761 6744
6762shebang-command@^1.2.0:
6763 version "1.2.0"
6764 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
6765 integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
6766 dependencies:
6767 shebang-regex "^1.0.0"
6768
6769shebang-command@^2.0.0: 6745shebang-command@^2.0.0:
6770 version "2.0.0" 6746 version "2.0.0"
6771 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 6747 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -6773,11 +6749,6 @@ shebang-command@^2.0.0:
6773 dependencies: 6749 dependencies:
6774 shebang-regex "^3.0.0" 6750 shebang-regex "^3.0.0"
6775 6751
6776shebang-regex@^1.0.0:
6777 version "1.0.0"
6778 resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
6779 integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
6780
6781shebang-regex@^3.0.0: 6752shebang-regex@^3.0.0:
6782 version "3.0.0" 6753 version "3.0.0"
6783 resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 6754 resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
@@ -6798,7 +6769,7 @@ simple-concat@^1.0.0:
6798 resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" 6769 resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
6799 integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== 6770 integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
6800 6771
6801simple-get@^3.0.0, simple-get@^3.0.1: 6772simple-get@^3.0.1:
6802 version "3.1.0" 6773 version "3.1.0"
6803 resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" 6774 resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
6804 integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== 6775 integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
@@ -6817,15 +6788,16 @@ simple-get@^4.0.0:
6817 simple-concat "^1.0.0" 6788 simple-concat "^1.0.0"
6818 6789
6819simple-peer@^9.7.1, simple-peer@^9.7.2: 6790simple-peer@^9.7.1, simple-peer@^9.7.2:
6820 version "9.7.2" 6791 version "9.8.0"
6821 resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.7.2.tgz#8cd9cb156bf456ad9c3d379119f0c39dfb3b20f7" 6792 resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.8.0.tgz#e84a6af664b0eb42dd1cb2349a69c7ad20051d1d"
6822 integrity sha512-xeMyxa9B4V0eA6mf17fVr8nm2QhAYFu+ZZv8zkSFFTjJETGF227CshwobrIYZuspJglMD63egcevQXGOrTIsuA== 6793 integrity sha512-GK1KhJvEwtZILr6zWvQR3AnBNpLrxwr6b5wcduFxOrQNGLg9Hn92eFsHD7RYPnnWsapxGXFMJcBjNuicqBDRIQ==
6823 dependencies: 6794 dependencies:
6824 debug "^4.0.1" 6795 debug "^4.2.0"
6825 get-browser-rtc "^1.0.0" 6796 err-code "^2.0.3"
6826 queue-microtask "^1.1.0" 6797 get-browser-rtc "^1.0.2"
6827 randombytes "^2.0.3" 6798 queue-microtask "^1.2.0"
6828 readable-stream "^3.4.0" 6799 randombytes "^2.1.0"
6800 readable-stream "^3.6.0"
6829 6801
6830simple-sha1@^3.0.0, simple-sha1@^3.0.1: 6802simple-sha1@^3.0.0, simple-sha1@^3.0.1:
6831 version "3.0.1" 6803 version "3.0.1"
@@ -6854,11 +6826,11 @@ simple-websocket@^8.1.1:
6854 ws "^7.0.0" 6826 ws "^7.0.0"
6855 6827
6856sitemap@^6.1.0: 6828sitemap@^6.1.0:
6857 version "6.2.0" 6829 version "6.3.3"
6858 resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-6.2.0.tgz#06c8b4f39025389a167e0b6d04347919bf62197f" 6830 resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-6.3.3.tgz#4ab93745b98930771fa239ed717d15a778cf4485"
6859 integrity sha512-ta9BLo/ZLUNgfGVhknA2IHWuIXfcFPxMvMCY3Xhf141rEZoW8G5nIVCDR0/zeXJCAvWk+UzqxyLBtRBH1OOq6w== 6831 integrity sha512-hcdtDJG8wNoogsvwohd0/BbGXEH4E2Dj2E0RCcXUGhEojTiZrqib4w689/q+kwabzD8HcGgstBDSbtJThzLuJA==
6860 dependencies: 6832 dependencies:
6861 "@types/node" "^14.0.18" 6833 "@types/node" "^14.14.6"
6862 "@types/sax" "^1.2.1" 6834 "@types/sax" "^1.2.1"
6863 arg "^4.1.3" 6835 arg "^4.1.3"
6864 sax "^1.2.4" 6836 sax "^1.2.4"
@@ -6939,11 +6911,11 @@ socket.io-client@2.3.0:
6939 to-array "0.1.4" 6911 to-array "0.1.4"
6940 6912
6941socket.io-parser@~3.3.0: 6913socket.io-parser@~3.3.0:
6942 version "3.3.0" 6914 version "3.3.1"
6943 resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" 6915 resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.1.tgz#f07d9c8cb3fb92633aa93e76d98fd3a334623199"
6944 integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng== 6916 integrity sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==
6945 dependencies: 6917 dependencies:
6946 component-emitter "1.2.1" 6918 component-emitter "~1.3.0"
6947 debug "~3.1.0" 6919 debug "~3.1.0"
6948 isarray "2.0.1" 6920 isarray "2.0.1"
6949 6921
@@ -7025,11 +6997,11 @@ spdx-expression-parse@^3.0.0:
7025 spdx-license-ids "^3.0.0" 6997 spdx-license-ids "^3.0.0"
7026 6998
7027spdx-license-ids@^3.0.0: 6999spdx-license-ids@^3.0.0:
7028 version "3.0.5" 7000 version "3.0.6"
7029 resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" 7001 resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce"
7030 integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== 7002 integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==
7031 7003
7032speedometer@^1.0.0, speedometer@^1.1.0: 7004speedometer@^1.1.0:
7033 version "1.1.0" 7005 version "1.1.0"
7034 resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.1.0.tgz#a30b13abda45687a1a76977012c060f2ac8a7934" 7006 resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.1.0.tgz#a30b13abda45687a1a76977012c060f2ac8a7934"
7035 integrity sha512-z/wAiTESw2XVPssY2XRcme4niTc4S5FkkJ4gknudtVoc33Zil8TdTxHy5torRcgqMqksJV2Yz8HQcvtbsnw0mQ== 7007 integrity sha512-z/wAiTESw2XVPssY2XRcme4niTc4S5FkkJ4gknudtVoc33Zil8TdTxHy5torRcgqMqksJV2Yz8HQcvtbsnw0mQ==
@@ -7041,7 +7013,14 @@ split2@^0.2.1:
7041 dependencies: 7013 dependencies:
7042 through2 "~0.6.1" 7014 through2 "~0.6.1"
7043 7015
7044split@^1.0.0: 7016split2@^3.1.1:
7017 version "3.2.2"
7018 resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
7019 integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
7020 dependencies:
7021 readable-stream "^3.0.0"
7022
7023split@^1.0.1:
7045 version "1.0.1" 7024 version "1.0.1"
7046 resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" 7025 resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
7047 integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== 7026 integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
@@ -7184,20 +7163,20 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
7184 strip-ansi "^6.0.0" 7163 strip-ansi "^6.0.0"
7185 7164
7186string.prototype.trimend@^1.0.1: 7165string.prototype.trimend@^1.0.1:
7187 version "1.0.1" 7166 version "1.0.2"
7188 resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" 7167 resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46"
7189 integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== 7168 integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==
7190 dependencies: 7169 dependencies:
7191 define-properties "^1.1.3" 7170 define-properties "^1.1.3"
7192 es-abstract "^1.17.5" 7171 es-abstract "^1.18.0-next.1"
7193 7172
7194string.prototype.trimstart@^1.0.1: 7173string.prototype.trimstart@^1.0.1:
7195 version "1.0.1" 7174 version "1.0.2"
7196 resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" 7175 resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7"
7197 integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== 7176 integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==
7198 dependencies: 7177 dependencies:
7199 define-properties "^1.1.3" 7178 define-properties "^1.1.3"
7200 es-abstract "^1.17.5" 7179 es-abstract "^1.18.0-next.1"
7201 7180
7202string2compact@^1.2.5, string2compact@^1.3.0: 7181string2compact@^1.2.5, string2compact@^1.3.0:
7203 version "1.3.0" 7182 version "1.3.0"
@@ -7264,12 +7243,7 @@ strip-final-newline@^2.0.0:
7264 resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 7243 resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
7265 integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 7244 integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
7266 7245
7267strip-json-comments@3.0.1: 7246strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
7268 version "3.0.1"
7269 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
7270 integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
7271
7272strip-json-comments@^3.1.0:
7273 version "3.1.1" 7247 version "3.1.1"
7274 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 7248 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
7275 integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 7249 integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -7303,10 +7277,10 @@ supertest@^4.0.2:
7303 methods "^1.1.2" 7277 methods "^1.1.2"
7304 superagent "^3.8.3" 7278 superagent "^3.8.3"
7305 7279
7306supports-color@7.1.0, supports-color@^7.1.0: 7280supports-color@7.2.0, supports-color@^7.1.0:
7307 version "7.1.0" 7281 version "7.2.0"
7308 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" 7282 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
7309 integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== 7283 integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
7310 dependencies: 7284 dependencies:
7311 has-flag "^4.0.0" 7285 has-flag "^4.0.0"
7312 7286
@@ -7355,9 +7329,9 @@ tar@^4, tar@^4.4.2:
7355 yallist "^3.0.3" 7329 yallist "^3.0.3"
7356 7330
7357term-size@^2.1.0: 7331term-size@^2.1.0:
7358 version "2.2.0" 7332 version "2.2.1"
7359 resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" 7333 resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
7360 integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== 7334 integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
7361 7335
7362text-hex@1.0.x: 7336text-hex@1.0.x:
7363 version "1.0.0" 7337 version "1.0.0"
@@ -7417,14 +7391,14 @@ timers-ext@^0.1.5:
7417 next-tick "1" 7391 next-tick "1"
7418 7392
7419timm@^1.6.1: 7393timm@^1.6.1:
7420 version "1.6.2" 7394 version "1.7.1"
7421 resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd" 7395 resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f"
7422 integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw== 7396 integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==
7423 7397
7424tinycolor2@^1.4.1: 7398tinycolor2@^1.4.1:
7425 version "1.4.1" 7399 version "1.4.2"
7426 resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" 7400 resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
7427 integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= 7401 integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==
7428 7402
7429titleize@^2.1.0: 7403titleize@^2.1.0:
7430 version "2.1.0" 7404 version "2.1.0"
@@ -7436,6 +7410,11 @@ tlds@1.208.0:
7436 resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.208.0.tgz#f9a85c272aa500e56c92e7d342fbfdfbddaa9757" 7410 resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.208.0.tgz#f9a85c272aa500e56c92e7d342fbfdfbddaa9757"
7437 integrity sha512-6kbY7GJpRQXwBddSOAbVUZXjObbCGFXliWWN+kOSEoRWIOyRWLB6zdeKC/Tguwwenl/KsUx016XR50EdHYsxZw== 7411 integrity sha512-6kbY7GJpRQXwBddSOAbVUZXjObbCGFXliWWN+kOSEoRWIOyRWLB6zdeKC/Tguwwenl/KsUx016XR50EdHYsxZw==
7438 7412
7413tlds@^1.212.0:
7414 version "1.212.0"
7415 resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.212.0.tgz#f3f29bd5d10d0fd9a6f171a5f9d57d58b71eccf7"
7416 integrity sha512-03rYYO1rGhOYpdYB+wlLY2d0xza6hdN/S67ol2ZpaH+CtFedMVAVhj8ft0rwxEkr90zatou8opBv7Xp6X4cK6g==
7417
7439tmp@0.0.x: 7418tmp@0.0.x:
7440 version "0.0.33" 7419 version "0.0.33"
7441 resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 7420 resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -7507,11 +7486,12 @@ toposort-class@^1.0.1:
7507 integrity sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg= 7486 integrity sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=
7508 7487
7509torrent-discovery@^9.3.0: 7488torrent-discovery@^9.3.0:
7510 version "9.3.0" 7489 version "9.4.0"
7511 resolved "https://registry.yarnpkg.com/torrent-discovery/-/torrent-discovery-9.3.0.tgz#a3ed527c0b454d0d78db8692dad48c6ffb6e9695" 7490 resolved "https://registry.yarnpkg.com/torrent-discovery/-/torrent-discovery-9.4.0.tgz#e6b5f8244e6ea0c48efbcfc88792e033d15e6f56"
7512 integrity sha512-rdOfm+o6d+E+nRjeYiCzXGrM9ou7spkZpxu9xhnfKoTJgtWpSYEHXO4BT9hwVF1uoUpm+hOwNnwgkSfBZNMh7g== 7491 integrity sha512-+YW9JGbO5bCuDw9YYW//p4iVLV0aP4C+AYrNQjL/+dSNPUtD1ufK1V8UZERt6rIoeNGhutkSVyeO4Fid9Tjxjg==
7513 dependencies: 7492 dependencies:
7514 bittorrent-dht "^10.0.0" 7493 bittorrent-dht "^10.0.0"
7494 bittorrent-lsd "^1.0.0"
7515 bittorrent-tracker "^9.0.0" 7495 bittorrent-tracker "^9.0.0"
7516 debug "^4.0.0" 7496 debug "^4.0.0"
7517 run-parallel "^1.1.2" 7497 run-parallel "^1.1.2"
@@ -7573,14 +7553,14 @@ tsconfig-paths@^3.9.0:
7573 strip-bom "^3.0.0" 7553 strip-bom "^3.0.0"
7574 7554
7575tslib@^1.8.1, tslib@^1.9.0: 7555tslib@^1.8.1, tslib@^1.9.0:
7576 version "1.13.0" 7556 version "1.14.1"
7577 resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" 7557 resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
7578 integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== 7558 integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
7579 7559
7580tslib@^2.0.0: 7560tslib@^2.0.0:
7581 version "2.0.1" 7561 version "2.0.3"
7582 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" 7562 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c"
7583 integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== 7563 integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==
7584 7564
7585tsutils@^3.17.1: 7565tsutils@^3.17.1:
7586 version "3.17.1" 7566 version "3.17.1"
@@ -7690,7 +7670,7 @@ uint64be@^2.0.2:
7690 dependencies: 7670 dependencies:
7691 buffer-alloc "^1.1.0" 7671 buffer-alloc "^1.1.0"
7692 7672
7693undefsafe@^2.0.2: 7673undefsafe@^2.0.3:
7694 version "2.0.3" 7674 version "2.0.3"
7695 resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" 7675 resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae"
7696 integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== 7676 integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==
@@ -7719,6 +7699,11 @@ universalify@^1.0.0:
7719 resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" 7699 resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
7720 integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== 7700 integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
7721 7701
7702universalify@^2.0.0:
7703 version "2.0.0"
7704 resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
7705 integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
7706
7722universalify@~0.1.2: 7707universalify@~0.1.2:
7723 version "0.1.2" 7708 version "0.1.2"
7724 resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 7709 resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -7734,10 +7719,10 @@ unpipe@1.0.0, unpipe@~1.0.0:
7734 resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 7719 resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
7735 integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 7720 integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
7736 7721
7737update-notifier@^4.0.0: 7722update-notifier@^4.1.0:
7738 version "4.1.1" 7723 version "4.1.3"
7739 resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.1.tgz#895fc8562bbe666179500f9f2cebac4f26323746" 7724 resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3"
7740 integrity sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg== 7725 integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==
7741 dependencies: 7726 dependencies:
7742 boxen "^4.2.0" 7727 boxen "^4.2.0"
7743 chalk "^3.0.0" 7728 chalk "^3.0.0"
@@ -7754,9 +7739,9 @@ update-notifier@^4.0.0:
7754 xdg-basedir "^4.0.0" 7739 xdg-basedir "^4.0.0"
7755 7740
7756uri-js@^4.2.2: 7741uri-js@^4.2.2:
7757 version "4.2.2" 7742 version "4.4.0"
7758 resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 7743 resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602"
7759 integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 7744 integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==
7760 dependencies: 7745 dependencies:
7761 punycode "^2.1.0" 7746 punycode "^2.1.0"
7762 7747
@@ -7776,30 +7761,30 @@ useragent@^2.3.0:
7776 tmp "0.0.x" 7761 tmp "0.0.x"
7777 7762
7778ut_metadata@^3.5.0: 7763ut_metadata@^3.5.0:
7779 version "3.5.1" 7764 version "3.5.2"
7780 resolved "https://registry.yarnpkg.com/ut_metadata/-/ut_metadata-3.5.1.tgz#ed135f0d4e08dae582864fcaea288da10e0339a8" 7765 resolved "https://registry.yarnpkg.com/ut_metadata/-/ut_metadata-3.5.2.tgz#2351c9348759e929978fa6a08d56ef6f584749e7"
7781 integrity sha512-D98YM9dKGHzNFUuqLHLV1vXqbHNfyvTx/rADtvF9P6D1HYV/0JuArlpnQIHhOuWXQGUVyR5XJGRVLKbeNu0o5A== 7766 integrity sha512-3XZZuJSeoIUyMYSuDbTbVtP4KAVGHPfU8nmHFkr8LJc+THCaUXwnu/2AV+LCSLarET/hL9IlbNfYTGrt6fOVuQ==
7782 dependencies: 7767 dependencies:
7783 bencode "^2.0.1" 7768 bencode "^2.0.1"
7784 bitfield "^3.0.0" 7769 bitfield "^4.0.0"
7785 debug "^4.1.1" 7770 debug "^4.2.0"
7786 simple-sha1 "^3.0.1" 7771 simple-sha1 "^3.0.1"
7787 7772
7788ut_pex@^2.0.0: 7773ut_pex@^2.0.0:
7789 version "2.0.0" 7774 version "2.0.1"
7790 resolved "https://registry.yarnpkg.com/ut_pex/-/ut_pex-2.0.0.tgz#d0c6f2d3d5ee98f38ee004ee852b390d1e7c9ac8" 7775 resolved "https://registry.yarnpkg.com/ut_pex/-/ut_pex-2.0.1.tgz#30d3cc19ee32f9513b06ed2b03851ba508566da1"
7791 integrity sha512-Uc0IxXGlES1DfeG+ITUISAvCF4Uldj7tt/n7s3TBt0KyXqDViOO26X5WfwXtUpEwn8fyZyerzf/YOK4rIZ2S3Q== 7776 integrity sha512-kI1/y1IhbuTqjyVqekSZCd3afPQTpdIRCrON1WXc9jGdcIAaze3FAoZ1ssYJmGBuJbdg7LQO42daJGCaoRXl+A==
7792 dependencies: 7777 dependencies:
7793 bencode "^2.0.0" 7778 bencode "^2.0.0"
7794 compact2string "^1.2.0" 7779 compact2string "^1.2.0"
7795 string2compact "^1.2.5" 7780 string2compact "^1.2.5"
7796 7781
7797utf-8-validate@^5.0.2: 7782utf-8-validate@^5.0.2:
7798 version "5.0.2" 7783 version "5.0.3"
7799 resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3" 7784 resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.3.tgz#3b64e418ad2ff829809025fdfef595eab2f03a27"
7800 integrity sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw== 7785 integrity sha512-jtJM6fpGv8C1SoH4PtG22pGto6x+Y8uPprW0tw3//gGFhDDTiuksgradgFN6yRayDP4SyZZa6ZMGHLIa17+M8A==
7801 dependencies: 7786 dependencies:
7802 node-gyp-build "~3.7.0" 7787 node-gyp-build "^4.2.0"
7803 7788
7804utif@^2.0.1: 7789utif@^2.0.1:
7805 version "2.0.1" 7790 version "2.0.1"
@@ -7854,19 +7839,19 @@ uuid@^3.3.2, uuid@^3.3.3:
7854 integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 7839 integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
7855 7840
7856uuid@^8.1.0, uuid@^8.3.0: 7841uuid@^8.1.0, uuid@^8.3.0:
7857 version "8.3.0" 7842 version "8.3.1"
7858 resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" 7843 resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31"
7859 integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== 7844 integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==
7860 7845
7861v8-compile-cache@^2.0.3: 7846v8-compile-cache@^2.0.3:
7862 version "2.1.1" 7847 version "2.2.0"
7863 resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" 7848 resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
7864 integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== 7849 integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==
7865 7850
7866valid-data-url@^2.0.0: 7851valid-data-url@^3.0.0:
7867 version "2.0.0" 7852 version "3.0.1"
7868 resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-2.0.0.tgz#2220fa9f8d4e761ebd3f3bb02770f1212b810537" 7853 resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-3.0.1.tgz#826c1744e71b5632e847dd15dbd45b9fb38aa34f"
7869 integrity sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA== 7854 integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==
7870 7855
7871validate-npm-package-license@^3.0.1: 7856validate-npm-package-license@^3.0.1:
7872 version "3.0.4" 7857 version "3.0.4"
@@ -7887,9 +7872,9 @@ validator@^12.0.0:
7887 integrity sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ== 7872 integrity sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ==
7888 7873
7889validator@^13.0.0, validator@^13.1.1: 7874validator@^13.0.0, validator@^13.1.1:
7890 version "13.1.1" 7875 version "13.1.17"
7891 resolved "https://registry.yarnpkg.com/validator/-/validator-13.1.1.tgz#f8811368473d2173a9d8611572b58c5783f223bf" 7876 resolved "https://registry.yarnpkg.com/validator/-/validator-13.1.17.tgz#ad677736950adddd3c37209484a6b2e0966579ad"
7892 integrity sha512-8GfPiwzzRoWTg7OV1zva1KvrSemuMkv07MA9TTl91hfhe+wKrsrgVN4H2QSFd/U/FhiU3iWPYVgvbsOGwhyFWw== 7877 integrity sha512-zL5QBoemJ3jYFb2/j38y7ljhwYGXVLUp8H6W1nVxadnAOvUOytec+L7BHh1oBQ82/TzWXHd+GSaxUWp4lROkLg==
7893 7878
7894vary@^1, vary@~1.1.2: 7879vary@^1, vary@~1.1.2:
7895 version "1.1.2" 7880 version "1.1.2"
@@ -7927,20 +7912,17 @@ void-elements@^3.1.0:
7927 resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" 7912 resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
7928 integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= 7913 integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=
7929 7914
7930web-resource-inliner@^4.3.3: 7915web-resource-inliner@^5.0.0:
7931 version "4.3.4" 7916 version "5.0.0"
7932 resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz#07e1b4bcbcbee1021251b018e902bac5713f1be0" 7917 resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-5.0.0.tgz#ac30db8096931f20a7c1b3ade54ff444e2e20f7b"
7933 integrity sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA== 7918 integrity sha512-AIihwH+ZmdHfkJm7BjSXiEClVt4zUFqX4YlFAzjL13wLtDuUneSaFvDBTbdYRecs35SiU7iNKbMnN+++wVfb6A==
7934 dependencies: 7919 dependencies:
7935 async "^3.1.0" 7920 ansi-colors "^4.1.1"
7936 chalk "^2.4.2" 7921 escape-goat "^3.0.0"
7937 datauri "^2.0.0"
7938 htmlparser2 "^4.0.0" 7922 htmlparser2 "^4.0.0"
7939 lodash.unescape "^4.0.1" 7923 mime "^2.4.6"
7940 request "^2.88.0" 7924 node-fetch "^2.6.0"
7941 safer-buffer "^2.1.2" 7925 valid-data-url "^3.0.0"
7942 valid-data-url "^2.0.0"
7943 xtend "^4.0.2"
7944 7926
7945webfinger.js@^2.6.6: 7927webfinger.js@^2.6.6:
7946 version "2.7.0" 7928 version "2.7.0"
@@ -8008,7 +7990,7 @@ which@2.0.2, which@^2.0.1, which@^2.0.2:
8008 dependencies: 7990 dependencies:
8009 isexe "^2.0.0" 7991 isexe "^2.0.0"
8010 7992
8011which@^1.1.1, which@^1.2.9: 7993which@^1.1.1:
8012 version "1.3.1" 7994 version "1.3.1"
8013 resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 7995 resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
8014 integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 7996 integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -8110,10 +8092,10 @@ wordwrap@0.0.2:
8110 resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 8092 resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
8111 integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= 8093 integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
8112 8094
8113workerpool@6.0.0: 8095workerpool@6.0.2:
8114 version "6.0.0" 8096 version "6.0.2"
8115 resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58" 8097 resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438"
8116 integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA== 8098 integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==
8117 8099
8118wrap-ansi@^5.1.0: 8100wrap-ansi@^5.1.0:
8119 version "5.1.0" 8101 version "5.1.0"
@@ -8155,10 +8137,17 @@ write@1.0.3:
8155 dependencies: 8137 dependencies:
8156 mkdirp "^0.5.1" 8138 mkdirp "^0.5.1"
8157 8139
8140ws@^5.2.2:
8141 version "5.2.2"
8142 resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
8143 integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
8144 dependencies:
8145 async-limiter "~1.0.0"
8146
8158ws@^7.0.0, ws@^7.1.2, ws@^7.3.0: 8147ws@^7.0.0, ws@^7.1.2, ws@^7.3.0:
8159 version "7.3.1" 8148 version "7.4.0"
8160 resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" 8149 resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7"
8161 integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== 8150 integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==
8162 8151
8163ws@~6.1.0: 8152ws@~6.1.0:
8164 version "6.1.4" 8153 version "6.1.4"
@@ -8220,7 +8209,7 @@ xmlhttprequest-ssl@~1.5.4:
8220 resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" 8209 resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
8221 integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= 8210 integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
8222 8211
8223"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1: 8212"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
8224 version "4.0.2" 8213 version "4.0.2"
8225 resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 8214 resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
8226 integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 8215 integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -8253,14 +8242,6 @@ yargs-parser@13.1.2, yargs-parser@^13.1.2:
8253 camelcase "^5.0.0" 8242 camelcase "^5.0.0"
8254 decamelize "^1.2.0" 8243 decamelize "^1.2.0"
8255 8244
8256yargs-parser@^15.0.1:
8257 version "15.0.1"
8258 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
8259 integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
8260 dependencies:
8261 camelcase "^5.0.0"
8262 decamelize "^1.2.0"
8263
8264yargs-parser@^18.1.2: 8245yargs-parser@^18.1.2:
8265 version "18.1.3" 8246 version "18.1.3"
8266 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" 8247 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
@@ -8269,16 +8250,15 @@ yargs-parser@^18.1.2:
8269 camelcase "^5.0.0" 8250 camelcase "^5.0.0"
8270 decamelize "^1.2.0" 8251 decamelize "^1.2.0"
8271 8252
8272yargs-unparser@1.6.1: 8253yargs-unparser@2.0.0:
8273 version "1.6.1" 8254 version "2.0.0"
8274 resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.1.tgz#bd4b0ee05b4c94d058929c32cb09e3fce71d3c5f" 8255 resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
8275 integrity sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA== 8256 integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
8276 dependencies: 8257 dependencies:
8277 camelcase "^5.3.1" 8258 camelcase "^6.0.0"
8278 decamelize "^1.2.0" 8259 decamelize "^4.0.0"
8279 flat "^4.1.0" 8260 flat "^5.0.2"
8280 is-plain-obj "^1.1.0" 8261 is-plain-obj "^2.1.0"
8281 yargs "^14.2.3"
8282 8262
8283yargs@13.3.2, yargs@^13.3.0: 8263yargs@13.3.2, yargs@^13.3.0:
8284 version "13.3.2" 8264 version "13.3.2"
@@ -8296,23 +8276,6 @@ yargs@13.3.2, yargs@^13.3.0:
8296 y18n "^4.0.0" 8276 y18n "^4.0.0"
8297 yargs-parser "^13.1.2" 8277 yargs-parser "^13.1.2"
8298 8278
8299yargs@^14.2.3:
8300 version "14.2.3"
8301 resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
8302 integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
8303 dependencies:
8304 cliui "^5.0.0"
8305 decamelize "^1.2.0"
8306 find-up "^3.0.0"
8307 get-caller-file "^2.0.1"
8308 require-directory "^2.1.1"
8309 require-main-filename "^2.0.0"
8310 set-blocking "^2.0.0"
8311 string-width "^3.0.0"
8312 which-module "^2.0.0"
8313 y18n "^4.0.0"
8314 yargs-parser "^15.0.1"
8315
8316yargs@^15.4.1: 8279yargs@^15.4.1:
8317 version "15.4.1" 8280 version "15.4.1"
8318 resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" 8281 resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"