]>
Commit | Line | Data |
---|---|---|
3545e72c C |
1 | import { catchError, map, of, tap } from 'rxjs' |
2 | import { HttpClient } from '@angular/common/http' | |
3 | import { Injectable } from '@angular/core' | |
4 | import { RestExtractor } from '@app/core' | |
5 | import { VideoToken } from '@shared/models' | |
6 | import { VideoService } from './video.service' | |
7 | ||
8 | @Injectable() | |
9 | export class VideoFileTokenService { | |
10 | ||
11 | private readonly store = new Map<string, { token: string, expires: Date }>() | |
12 | ||
13 | constructor ( | |
14 | private authHttp: HttpClient, | |
15 | private restExtractor: RestExtractor | |
16 | ) {} | |
17 | ||
18 | getVideoFileToken (videoUUID: string) { | |
19 | const existing = this.store.get(videoUUID) | |
20 | if (existing) return of(existing) | |
21 | ||
22 | return this.createVideoFileToken(videoUUID) | |
23 | .pipe(tap(result => this.store.set(videoUUID, { token: result.token, expires: new Date(result.expires) }))) | |
24 | } | |
25 | ||
26 | private createVideoFileToken (videoUUID: string) { | |
27 | return this.authHttp.post<VideoToken>(`${VideoService.BASE_VIDEO_URL}/${videoUUID}/token`, {}) | |
28 | .pipe( | |
29 | map(({ files }) => files), | |
30 | catchError(err => this.restExtractor.handleError(err)) | |
31 | ) | |
32 | } | |
33 | } |