+import { wait } from '@shared/core-utils'
import { HttpStatusCode } from '@shared/models'
-import { unwrapBody, unwrapTextOrDecode, unwrapBodyOrDecodeToJSON } from '../requests'
+import { unwrapBody, unwrapBodyOrDecodeToJSON, unwrapTextOrDecode } from '../requests'
import { AbstractCommand, OverrideCommandOptions } from '../shared'
export class StreamingPlaylistsCommand extends AbstractCommand {
- get (options: OverrideCommandOptions & {
+ async get (options: OverrideCommandOptions & {
url: string
+ withRetry?: boolean // default false
+ currentRetry?: number
}) {
- return unwrapTextOrDecode(this.getRawRequest({
- ...options,
+ const { withRetry, currentRetry = 1 } = options
- url: options.url,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- }))
+ try {
+ const result = await unwrapTextOrDecode(this.getRawRequest({
+ ...options,
+
+ url: options.url,
+ implicitToken: false,
+ defaultExpectedStatus: HttpStatusCode.OK_200
+ }))
+
+ return result
+ } catch (err) {
+ if (!withRetry || currentRetry > 5) throw err
+
+ await wait(100)
+
+ return this.get({
+ ...options,
+
+ withRetry,
+ currentRetry: currentRetry + 1
+ })
+ }
}
getFragmentedSegment (options: OverrideCommandOptions & {