/// /// Copyright © 2016-2020 The Thingsboard Authors /// /// 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 { BaseData } from '@shared/models/base-data'; import { DeviceId } from './id/device-id'; import { TenantId } from '@shared/models/id/tenant-id'; import { CustomerId } from '@shared/models/id/customer-id'; import { DeviceCredentialsId } from '@shared/models/id/device-credentials-id'; import { EntitySearchQuery } from '@shared/models/relation.models'; import { DeviceProfileId } from '@shared/models/id/device-profile-id'; import { RuleChainId } from '@shared/models/id/rule-chain-id'; import { EntityInfoData } from '@shared/models/entity.models'; export enum DeviceProfileType { DEFAULT = 'DEFAULT' } export const deviceProfileTypeTranslationMap = new Map( [ [DeviceProfileType.DEFAULT, 'device-profile.type-default'] ] ); export interface DefaultDeviceProfileConfiguration { [key: string]: any; } export type DeviceProfileConfigurations = DefaultDeviceProfileConfiguration; export interface DeviceProfileConfiguration extends DeviceProfileConfigurations { type: DeviceProfileType; } export function createDeviceProfileConfiguration(type: DeviceProfileType): DeviceProfileConfiguration { let configuration: DeviceProfileConfiguration = null; if (type) { switch (type) { case DeviceProfileType.DEFAULT: const defaultConfiguration: DefaultDeviceProfileConfiguration = {}; configuration = {...defaultConfiguration, type: DeviceProfileType.DEFAULT}; break; } } return configuration; } export interface DeviceProfileData { configuration: DeviceProfileConfiguration; } export interface DeviceProfile extends BaseData { tenantId?: TenantId; name: string; description?: string; default: boolean; type: DeviceProfileType; defaultRuleChainId?: RuleChainId; profileData: DeviceProfileData; } export interface DeviceProfileInfo extends EntityInfoData { type: DeviceProfileType; } export interface DefaultDeviceConfiguration { [key: string]: any; } export interface Lwm2mDeviceConfiguration { [key: string]: any; } export type DeviceConfigurations = DefaultDeviceConfiguration & Lwm2mDeviceConfiguration; export interface DeviceConfiguration extends DeviceConfigurations { type: DeviceProfileType; } export interface DeviceData { configuration: DeviceConfiguration; } export interface Device extends BaseData { tenantId?: TenantId; customerId?: CustomerId; name: string; type: string; label: string; deviceProfileId?: DeviceProfileId; deviceData?: DeviceData; additionalInfo?: any; } export interface DeviceInfo extends Device { customerTitle: string; customerIsPublic: boolean; deviceProfileName: string; } export enum DeviceCredentialsType { ACCESS_TOKEN = 'ACCESS_TOKEN', X509_CERTIFICATE = 'X509_CERTIFICATE' } export const credentialTypeNames = new Map( [ [DeviceCredentialsType.ACCESS_TOKEN, 'Access token'], [DeviceCredentialsType.X509_CERTIFICATE, 'X.509 Certificate'], ] ); export interface DeviceCredentials extends BaseData { deviceId: DeviceId; credentialsType: DeviceCredentialsType; credentialsId: string; credentialsValue: string; } export interface DeviceSearchQuery extends EntitySearchQuery { deviceTypes: Array; } export interface ClaimRequest { secretKey: string; } export enum ClaimResponse { SUCCESS = 'SUCCESS', FAILURE = 'FAILURE', CLAIMED = 'CLAIMED' } export interface ClaimResult { device: Device; response: ClaimResponse; }