Skip to content

Commit b5f4943

Browse files
committed
fix: use Error's auto to string conversion
1 parent b371fb8 commit b5f4943

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

packages/playback-core/src/errors.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,20 @@ export const errorCategoryToTokenNameOrPrefix = (category: MuxErrorCategoryValue
4242
return category;
4343
};
4444

45+
// Typescript says it's strictly a string, but it can also be a number or an object with a toString method.
46+
// https://github.com/microsoft/TypeScript/issues/6032
47+
// https://262.ecma-international.org/6.0/#sec-error-message
48+
49+
type Stringable = string | { toString(): string };
50+
51+
declare global {
52+
interface ErrorConstructor {
53+
new (message?: Stringable): Error;
54+
(message?: Stringable): Error;
55+
readonly prototype: Error;
56+
}
57+
}
58+
4559
export class MediaError extends Error {
4660
static MEDIA_ERR_ABORTED = 1 as const;
4761
static MEDIA_ERR_NETWORK = 2 as const;
@@ -67,7 +81,7 @@ export class MediaError extends Error {
6781
fatal: boolean;
6882
data?: any;
6983

70-
constructor(message?: string, code: number = MediaError.MEDIA_ERR_CUSTOM, fatal?: boolean, context?: string) {
84+
constructor(message?: Stringable, code: number = MediaError.MEDIA_ERR_CUSTOM, fatal?: boolean, context?: string) {
7185
super(message);
7286
this.name = 'MediaError';
7387
this.code = code;

packages/playback-core/src/index.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,7 @@ export const setupNativeFairplayDRM = (
771771
'Cannot play DRM-protected content with current security configuration on this browser. Try playing in another browser.'
772772
);
773773
// Should we flag this as a business exception?
774-
const mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, true);
774+
const mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, true);
775775
mediaError.errorCategory = MuxErrorCategory.DRM;
776776
mediaError.muxCode = MuxErrorCode.ENCRYPTED_UNSUPPORTED_KEY_SYSTEM;
777777
saveAndDispatchError(mediaEl, mediaError);
@@ -798,7 +798,7 @@ export const setupNativeFairplayDRM = (
798798
const message = i18n(
799799
'Your server certificate failed when attempting to set it. This may be an issue with a no longer valid certificate.'
800800
);
801-
const mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, true);
801+
const mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, true);
802802
mediaError.errorCategory = MuxErrorCategory.DRM;
803803
mediaError.muxCode = MuxErrorCode.ENCRYPTED_UPDATE_SERVER_CERT_FAILED;
804804
return Promise.reject(mediaError);
@@ -828,15 +828,15 @@ export const setupNativeFairplayDRM = (
828828
const message = i18n(
829829
'The DRM Content Decryption Module system had an internal failure. Try reloading the page, upading your browser, or playing in another browser.'
830830
);
831-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, true);
831+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, true);
832832
mediaError.errorCategory = MuxErrorCategory.DRM;
833833
mediaError.muxCode = MuxErrorCode.ENCRYPTED_CDM_ERROR;
834834
} else if (mediaKeyStatus === 'output-restricted' || mediaKeyStatus === 'output-downscaled') {
835835
const message = i18n(
836836
'DRM playback is being attempted in an environment that is not sufficiently secure. User may see black screen.'
837837
);
838838
// NOTE: When encountered, this is a non-fatal error (though it's certainly interruptive of standard playback experience). (CJP)
839-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, false);
839+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, false);
840840
mediaError.errorCategory = MuxErrorCategory.DRM;
841841
mediaError.muxCode = MuxErrorCode.ENCRYPTED_OUTPUT_RESTRICTED;
842842
}
@@ -852,7 +852,7 @@ export const setupNativeFairplayDRM = (
852852
const message = i18n(
853853
'Failed to generate a DRM license request. This may be an issue with the player or your protected content.'
854854
);
855-
const mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, true);
855+
const mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, true);
856856
mediaError.errorCategory = MuxErrorCategory.DRM;
857857
mediaError.muxCode = MuxErrorCode.ENCRYPTED_GENERATE_REQUEST_FAILED;
858858
saveAndDispatchError(mediaEl, mediaError);
@@ -885,7 +885,7 @@ export const setupNativeFairplayDRM = (
885885
const message = i18n(
886886
'Failed to update DRM license. This may be an issue with the player or your protected content.'
887887
);
888-
const mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, true);
888+
const mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, true);
889889
mediaError.errorCategory = MuxErrorCategory.DRM;
890890
mediaError.muxCode = MuxErrorCode.ENCRYPTED_UPDATE_LICENSE_FAILED;
891891
return Promise.reject(mediaError);
@@ -1187,7 +1187,7 @@ export const loadMedia = (
11871187
'encrypted',
11881188
() => {
11891189
const message = i18n('Attempting to play DRM-protected content without providing a DRM token.');
1190-
const mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, true);
1190+
const mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, true);
11911191
mediaError.errorCategory = MuxErrorCategory.DRM;
11921192
mediaError.muxCode = MuxErrorCode.ENCRYPTED_MISSING_TOKEN;
11931193
saveAndDispatchError(mediaEl, mediaError);
@@ -1420,7 +1420,7 @@ const getErrorFromHlsErrorData = (
14201420
} else if (errorCode === MediaError.MEDIA_ERR_ENCRYPTED) {
14211421
if (data.details === Hls.ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE) {
14221422
const message = i18n('Attempting to play DRM-protected content without providing a DRM token.');
1423-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
1423+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
14241424
mediaError.errorCategory = MuxErrorCategory.DRM;
14251425
mediaError.muxCode = MuxErrorCode.ENCRYPTED_MISSING_TOKEN;
14261426
} else if (data.details === Hls.ErrorDetails.KEY_SYSTEM_NO_ACCESS) {
@@ -1429,7 +1429,7 @@ const getErrorFromHlsErrorData = (
14291429
'Cannot play DRM-protected content with current security configuration on this browser. Try playing in another browser.'
14301430
);
14311431
// Should we flag this as a business exception?
1432-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
1432+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
14331433
mediaError.errorCategory = MuxErrorCategory.DRM;
14341434
mediaError.muxCode = MuxErrorCode.ENCRYPTED_UNSUPPORTED_KEY_SYSTEM;
14351435
} else if (data.details === Hls.ErrorDetails.KEY_SYSTEM_NO_SESSION) {
@@ -1438,36 +1438,36 @@ const getErrorFromHlsErrorData = (
14381438
);
14391439
// NOTE: For some reason, perhaps due to issues with EXT-X-KEY parsing, hls.js defines this as a non-fatal error.
14401440
// For us, we should be able to assume it is instead fatal. (CJP)
1441-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, true);
1441+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, true);
14421442
mediaError.errorCategory = MuxErrorCategory.DRM;
14431443
mediaError.muxCode = MuxErrorCode.ENCRYPTED_GENERATE_REQUEST_FAILED;
14441444
} else if (data.details === Hls.ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED) {
14451445
const message = i18n(
14461446
'Failed to update DRM license. This may be an issue with the player or your protected content.'
14471447
);
1448-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
1448+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
14491449
mediaError.errorCategory = MuxErrorCategory.DRM;
14501450
mediaError.muxCode = MuxErrorCode.ENCRYPTED_UPDATE_LICENSE_FAILED;
14511451
} else if (data.details === Hls.ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED) {
14521452
const message = i18n(
14531453
'Your server certificate failed when attempting to set it. This may be an issue with a no longer valid certificate.'
14541454
);
1455-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
1455+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
14561456
mediaError.errorCategory = MuxErrorCategory.DRM;
14571457
mediaError.muxCode = MuxErrorCode.ENCRYPTED_UPDATE_SERVER_CERT_FAILED;
14581458
} else if (data.details === Hls.ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR) {
14591459
const message = i18n(
14601460
'The DRM Content Decryption Module system had an internal failure. Try reloading the page, upading your browser, or playing in another browser.'
14611461
);
1462-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
1462+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, data.fatal);
14631463
mediaError.errorCategory = MuxErrorCategory.DRM;
14641464
mediaError.muxCode = MuxErrorCode.ENCRYPTED_CDM_ERROR;
14651465
} else if (data.details === Hls.ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED) {
14661466
const message = i18n(
14671467
'DRM playback is being attempted in an environment that is not sufficiently secure. User may see black screen.'
14681468
);
14691469
// NOTE: When encountered, this is a non-fatal error (though it's certainly interruptive of standard playback experience). (CJP)
1470-
mediaError = new MediaError(`${message}`, MediaError.MEDIA_ERR_ENCRYPTED, false);
1470+
mediaError = new MediaError(message, MediaError.MEDIA_ERR_ENCRYPTED, false);
14711471
mediaError.errorCategory = MuxErrorCategory.DRM;
14721472
mediaError.muxCode = MuxErrorCode.ENCRYPTED_OUTPUT_RESTRICTED;
14731473
} else {

packages/playback-core/src/request-errors.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const getErrorFromResponse = (
4949
const context = undefined;
5050
const mediaErrorCode = MediaError.MEDIA_ERR_NETWORK;
5151
// Being offline is not immediately a fatal error for playback.
52-
const mediaError = new MediaError(`${message}`, mediaErrorCode, false, context);
52+
const mediaError = new MediaError(message, mediaErrorCode, false, context);
5353
mediaError.errorCategory = category;
5454
mediaError.muxCode = MuxErrorCode.NETWORK_OFFLINE;
5555
mediaError.data = resp;
@@ -202,7 +202,7 @@ export const getErrorFromResponse = (
202202
translate
203203
);
204204
const context = i18n(`Specified playback ID: {playbackId}`, translate).format({ playbackId });
205-
const mediaError = new MediaError(`${message}`, mediaErrorCode, fatal ?? true, context);
205+
const mediaError = new MediaError(message, mediaErrorCode, fatal ?? true, context);
206206
mediaError.errorCategory = category;
207207
mediaError.muxCode = MuxErrorCode.NETWORK_NOT_READY;
208208
mediaError.data = resp;
@@ -224,7 +224,7 @@ export const getErrorFromResponse = (
224224
translate
225225
);
226226
const context = i18n(`Specified playback ID: {playbackId}`, translate).format({ playbackId });
227-
const mediaError = new MediaError(`${message}`, mediaErrorCode, fatal ?? true, context);
227+
const mediaError = new MediaError(message, mediaErrorCode, fatal ?? true, context);
228228
mediaError.errorCategory = category;
229229
mediaError.muxCode = MuxErrorCode.NETWORK_NOT_FOUND;
230230
mediaError.data = resp;
@@ -242,7 +242,7 @@ export const getErrorFromResponse = (
242242
if (status === 400) {
243243
const message = i18n(`The URL or playback-id was invalid. You may have used an invalid value as a playback-id.`);
244244
const context = i18n(`Specified playback ID: {playbackId}`, translate).format({ playbackId });
245-
const mediaError = new MediaError(`${message}`, mediaErrorCode, fatal ?? true, context);
245+
const mediaError = new MediaError(message, mediaErrorCode, fatal ?? true, context);
246246
mediaError.errorCategory = category;
247247
mediaError.muxCode = MuxErrorCode.NETWORK_INVALID_URL;
248248
mediaError.data = resp;

0 commit comments

Comments
 (0)