# All files / util errors.ts

100% Statements 6/6
100% Branches 2/2
100% Functions 1/1
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73

    13x
    13x

    13x

    13x

    13x
    5x

     /**
     * @license
     * Copyright 2019 Google LLC
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *   http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */

    import { ErrorFactory, FirebaseError } from '@firebase/util';
    import { SERVICE, SERVICE_NAME } from './constants';

    export const enum ErrorCode {
      MISSING_APP_CONFIG_VALUES = 'missing-app-config-values',
      NOT_REGISTERED = 'not-registered',
      INSTALLATION_NOT_FOUND = 'installation-not-found',
      REQUEST_FAILED = 'request-failed',
      APP_OFFLINE = 'app-offline',
      DELETE_PENDING_REGISTRATION = 'delete-pending-registration'
    }

    const ERROR_DESCRIPTION_MAP: { readonly [key in ErrorCode]: string } = {
      [ErrorCode.MISSING_APP_CONFIG_VALUES]:
        'Missing App configuration value: "{$valueName}"',
      [ErrorCode.NOT_REGISTERED]: 'Firebase Installation is not registered.',
      [ErrorCode.INSTALLATION_NOT_FOUND]: 'Firebase Installation not found.',
      [ErrorCode.REQUEST_FAILED]:
        '{$requestName} request failed with error "{$serverCode} {$serverStatus}: {$serverMessage}"',
      [ErrorCode.APP_OFFLINE]: 'Could not process request. Application offline.',
      [ErrorCode.DELETE_PENDING_REGISTRATION]:
        "Can't delete installation while there is a pending registration request."
    };

    interface ErrorParams {
      [ErrorCode.MISSING_APP_CONFIG_VALUES]: {
        valueName: string;
      };
      [ErrorCode.REQUEST_FAILED]: {
        requestName: string;
        [index: string]: string | number; // to make Typescript 3.8 happy
      } & ServerErrorData;
    }

    export const ERROR_FACTORY = new ErrorFactory<ErrorCode, ErrorParams>(
      SERVICE,
      SERVICE_NAME,
      ERROR_DESCRIPTION_MAP
    );

    export interface ServerErrorData {
      serverCode: number;
      serverMessage: string;
      serverStatus: string;
    }

    export type ServerError = FirebaseError & ServerErrorData;

    /** Returns true if error is a FirebaseError that is based on an error from the server. */
    export function isServerError(error: unknown): error is ServerError {
      return (
        error instanceof FirebaseError &&
        error.code.includes(ErrorCode.REQUEST_FAILED)
      );
    }