opentok-network-test-js
Version:
Precall network test for applications using the OpenTok platform.
61 lines (53 loc) • 1.89 kB
text/typescript
/**
* @module Errors/Connectivity/Mapping
*/
/**
* Map Connectivity Errors to Failure Types
*/
import { ConnectivityError } from './index';
import { ErrorNames } from '../../errors/types';
export enum FailureType {
Api = 'api',
Messaging = 'messaging',
OpentokJs = 'OpenTok.js',
Media = 'media',
Logging = 'logging',
// eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
ConnectivityError = 'OpenTok.js',
}
export type FailureCase = {
type: FailureType;
error: ConnectivityError;
};
const mapErrorToCase = (error: ConnectivityError): FailureCase => {
const getType = (): FailureType => {
switch (error.name) {
case ErrorNames.API_CONNECTIVITY_ERROR:
case ErrorNames.CONNECT_TO_SESSION_NETWORK_ERROR:
return FailureType.Api;
case ErrorNames.CONNECT_TO_SESSION_ERROR:
case ErrorNames.CONNECT_TO_SESSION_TOKEN_ERROR:
case ErrorNames.CONNECT_TO_SESSION_ID_ERROR:
return FailureType.Messaging;
case ErrorNames.MEDIA_DEVICE_ERROR:
case ErrorNames.FAILED_TO_OBTAIN_MEDIA_DEVICES:
case ErrorNames.NO_VIDEO_CAPTURE_DEVICES:
case ErrorNames.NO_AUDIO_CAPTURE_DEVICES:
case ErrorNames.FAILED_TO_CREATE_LOCAL_PUBLISHER:
case ErrorNames.PUBLISH_TO_SESSION_NOT_CONNECTED:
case ErrorNames.PUBLISH_TO_SESSION_PERMISSION_OR_TIMEOUT_ERROR:
case ErrorNames.PUBLISH_TO_SESSION_NETWORK_ERROR:
return FailureType.OpentokJs;
case ErrorNames.PUBLISH_TO_SESSION_ERROR:
case ErrorNames.SUBSCRIBE_TO_SESSION_ERROR:
case ErrorNames.FAILED_MESSAGING_SERVER_TEST:
return FailureType.Media;
case ErrorNames.LOGGING_SERVER_CONNECTION_ERROR:
return FailureType.Logging;
default:
return FailureType.OpentokJs;
}
};
return { error, type: getType() };
};
export const mapErrors = (...errors: ConnectivityError[]): FailureCase[] => errors.map(mapErrorToCase);