/**
 * Copyright © 2023 Nevis Security AG. All rights reserved.
 */
import { IdUserNamePair } from './IdUserNamePair';
/**
 * The object containing information of the device where the SDK is running.
 *
 * For nevisFIDO to be able to generate encrypted out-of-band payloads that can only be decrypted by
 * your application, a `DeviceInformation` must be provided during registration. During registration,
 * you must provide the {@link name} and optionally the {@link fcmRegistrationToken}. The other
 * information exposed by the `DeviceInformation` ({@link deviceId} and {@link idUsernamePairs}) are
 * generated by the SDK and are not required during registration.
 *
 * For nevisFIDO to be able to dispatch tokens using the Firebase Cloud Messaging infrastructure, the
 * device information {@link fcmRegistrationToken} must be filled with the token (as defined by
 * {@link https://firebase.google.com/docs/cloud-messaging/js/client | Firebase}). This registration
 * token is associated with the mobile device receiving the push notifications.
 *
 * There is a single `DeviceInformation` for all accounts. It is created when the first successful
 * registration is completed, and it is deleted when the last authenticator (and thus the last account)
 * is removed (using the {@link Deregistration} or {@link LocalData.deleteAuthenticator | LocalData.deleteAuthenticator}).
 * When a `DeviceInformation` is provided in a registration operation, and a `DeviceInformation` is
 * already defined (that is, there is already a registered authenticator), the provided `DeviceInformation`
 * will be ignored. The device information contents (name and FCM registration token) can be changed
 * using a {@link DeviceInformationChange}.
 *
 * The `DeviceInformation` data is stored in nevisIDM as generic credentials. For each account registered,
 * a generic credential will be created in nevisIDM containing the device information. These generic
 * credentials are named dispatch targets in the nevisFIDO terminology.
 *
 * The following example creates a `DeviceInformation` using a phone description (that can be provided
 * by the end user, since this is used for the end user to identify the mobile device) and a Firebase
 * registration token:
 *
 * @example
 * ```ts
 *  createDeviceInformation(
 *      phoneDescription: string,
 *      firebaseRegistrationToken: string
 *  ): DeviceInformation {
 *      return DeviceInformation.create(
 *          phoneDescription,
 *          firebaseRegistrationToken
 *      );
 *  }
 * ```
 *
 * See:
 * - {@link Registration.deviceInformation}
 * - {@link OutOfBandRegistration.deviceInformation}
 * - {@link AuthCloudApiRegistration.deviceInformation}
 * - {@link DeviceInformationChange}
 * - {@link LocalData.deviceInformation}
 */
export declare abstract class DeviceInformation {
    /**
     * A user-friendly name to identify this device.
     * The name can be modified using {@link DeviceInformationChange}.
     *
     * Note that the name of the {@link DeviceInformation} must be unique for a given user (i.e.
     * a user cannot have two {@link DeviceInformation}s with the same name in the server). Trying
     * to use an existing name for a {@link DeviceInformation} during registration results in an
     * {@link OperationError} error. If an existing name is provided when invoking {@link DeviceInformationChange.execute},
     * then a {@link DeviceInformationChangeError} with a {@link DeviceInformationChangeNameAlreadyExists}
     * is returned.
     *
     * The name is stored in nevisIDM in the `fidouaf_name` attribute of the
     * generic credentials containing the dispatch target information.
     */
    abstract name: string;
    /**
     * The identifier that is generated for the device during registration.
     *
     * It is a `string` that is used in the backend to associate FIDO UAF credentials with a device.
     *
     * This property gives back an empty `string` by default, because its value is not required when
     * {@link DeviceInformation} is provided during registration. The {@link DeviceInformation} returned
     * {@link LocalData.deviceInformation} contains a valid device identifier.
     *
     * The device ID is stored in nevisIDM in the `fidouaf_device_id` attribute of the generic
     * credentials containing the dispatch target information.
     */
    abstract deviceId: string;
    /**
     * The {@link https://firebase.google.com/docs/cloud-messaging/js/client | Firebase Cloud Messaging}
     * registration token.
     * Since the Firebase registration token can change, this can be modified using {@link DeviceInformationChange}.
     *
     * If push notification is disabled, (for instance when all the out-of-band is done using QR codes
     * or deep links) no Firebase Cloud Messaging registration token value is required.
     *
     * The Firebase Cloud Messaging registration token is stored in nevisIDM in the `fidouaf_target`
     * attribute of the generic credentials containing the dispatch target information.
     */
    abstract fcmRegistrationToken?: string;
    /**
     * The identifiers of the generic credentials containing the dispatch target information in nevisIDM
     * and the associated username.
     */
    abstract idUsernamePairs: Array<IdUserNamePair>;
    /**
     * Default constructor for {@link DeviceInformation}.
     *
     * @param name the user-friendly name describing the device.
     * @param fcmRegistrationToken the Firebase Cloud Messaging registration token.
     * @returns an {@link Account} instance.
     */
    static create(name: string, fcmRegistrationToken?: string): DeviceInformation;
    /**
     * Alternate constructor that creates a {@link DeviceInformation} from a json.
     *
     * @param json contains the source for instance creation.
     * @returns a {@link DeviceInformation} instance.
     */
    static fromJson(json: any): DeviceInformation;
}
export declare class DeviceInformationImpl extends DeviceInformation {
    name: string;
    deviceId: string;
    fcmRegistrationToken?: string;
    idUsernamePairs: Array<IdUserNamePair>;
    constructor(name: string, idUsernamePairs: Array<IdUserNamePair>, deviceId?: string, fcmRegistrationToken?: string);
    static fromJson(json: any): DeviceInformationImpl;
}
//# sourceMappingURL=DeviceInformation.d.ts.map