UNPKG

@iotize/device-client.js

Version:

IoTize Device client for Javascript

254 lines (253 loc) 9.21 kB
import '../client/impl/frame/stream-generated'; import '../core/extensions'; import { BehaviorSubject, Observable } from 'rxjs'; import { IoTizeClient, ResponseInterface } from '../client/api'; import { Response } from '../client/api/response'; import { TapConfigurator } from '../client/api/tap-configurator'; import { TapInterface } from '../client/api/tap-device'; import { ComProtocol } from '../protocol/api'; import { SinglePacket as SinglePacketModel } from './all-models'; import { ApiConfig, Routes } from './config/api-config'; import { EncryptionKeys, ScramInterceptor, ScramInterceptorOptions } from './interceptors/scram-interceptor'; import { IoTizeDeviceService } from './iotize-device-services'; import { InterfaceLock, MultiRequest, SinglePacketPart } from './model'; import { ScramAuth } from './scram'; import { ServiceCallType } from './service'; import { VariableManager } from './target-variable'; import { BundleManager } from './target-variable/bundle-manager'; import { SinglePacketProgress } from './types'; import { ConverterProvider } from './util/converter-provider'; export { EncryptionKeys }; export declare type ServiceClass = { new (client: IoTizeClient, converterProvider: ConverterProvider): any; }; export interface Lwm2mCall { commandType: 'GET' | 'PUT' | 'POST'; path: string; responseType?: string; params?: { [key: string]: string; }; } export interface SessionState { groupId: number; startTime?: Date; lifeTime: number; name: string; } export interface EncryptionSessionState { enabled?: boolean; keys?: EncryptionKeys; frameCounter?: number; } export interface SecurityOptions { disableFactoryResetByResource: boolean; disableLoginWithUID: boolean; disableFactoryResetByHardware: boolean; scramActivated: boolean; hashPassword: boolean; } export interface DisconnectOptions { clearSession?: boolean; clearCache?: boolean; } export declare const NFC_PAIRING_COMMAND: Uint8Array; export declare type Tap = IoTizeDevice; export declare namespace Tap { function create(): Tap; function fromProtocol(protocol: ComProtocol): Tap; } /** * * @deprecated Use Tap instead */ export declare class IoTizeDevice implements TapInterface { static TAG: string; static INITIAL_SESSION_STATE: SessionState; /** * Cache log info */ protected _interfaceLockOptions?: InterfaceLock; protected _variableManager?: VariableManager; protected _bundleManager?: BundleManager; protected _services: IoTizeDeviceService; protected _client: IoTizeClient; protected _sessionState$: BehaviorSubject<SessionState>; protected _apiConfig: ApiConfig; protected _lwm2m: Lwm2mInterface; protected _scramAuth?: ScramAuth; protected _scramInterceptor: ScramInterceptor; /** * Get cached lock options * May no be synchronized with real device state */ lockOptions: InterfaceLock; readonly currentSessionState: SessionState; /** * Setter for the session key * @param key if null, it will stop encryption and remove session key. If true it will update session key used for encryption */ /** * Get current session key for encrypted communicatioin */ sessionKey: Uint8Array | undefined; client: IoTizeClient; /** * Listen to session state changed */ readonly sessionState: Observable<SessionState>; constructor(client: IoTizeClient); /** * @deprecated use {@link Tap.create()} instead * */ static create(): IoTizeDevice; /** * @deprecated * @param protocol */ static fromProtocol(protocol: ComProtocol): IoTizeDevice; /** * Enable/Disable encrytion when communicating with a device * @param enable true if requests must be encrypted * @param resetSessionKey true if you want to reset the the session key. * @param refreshInitializationVector true if you want to change initialization vectors * */ encryption(enable: boolean, resetSessionKey?: boolean, refreshInitializationVector?: boolean): Promise<void>; setEncryptionKeys(keys: EncryptionKeys): void; setEncryptedFrameCounter(frameCounter: number): void; getEncryptionOptions(): ScramInterceptorOptions; refreshEncryptionInitializationVector(): Promise<void>; setInitializationVectorRefreshPeriod(period: number): void; /** * Enable/Disable encrytion when communicating with a device * @param enable true if requests must be encrypted * @param resetSessionKey true if you want to reset the the session key. * @param refreshInitializationVector true if you want to change initialization vectors * * @deprecated use {@link encryption()} instead */ enableEncryption(enable: boolean, resetSessionKey?: boolean, refreshInitializationVector?: boolean): Promise<void>; readonly protocol: ComProtocol; /** * Connect with the given communication protocol * TODO what if there is already a connected communication protocol * @param protocol */ connect(protocol?: ComProtocol): Promise<void>; /** * Disconnect device */ disconnect(options?: DisconnectOptions): Promise<void>; isConnected(): boolean; readonly variables: VariableManager; readonly bundles: BundleManager; /** * Setter for hashPassword option * @deprecated this should not be used anymore as this configuration must be read from the tap */ /** * Return true if password will be hashed * @deprecated */ /** * Tap logout * Reject if logout failed */ logout(): Promise<void>; /** * Change password for the groupId (If groupId is not specified, it will be changed for the current group id) * @param newPassword the new password * @param userIdOrName default to the current group id * @param userPassword the current user password. if provided it will perform a login before changing password */ changePassword(newPassword: string, userId?: number, userPassword?: string): Promise<void>; /** * Upload single packets to single packet store (one by one) * Unsubsribe from observable to cancel this operation * * @warning this is an experimental function. It may be modified in future releases * @experimental * * TODO use dependency injection instead */ loadSinglePacketInStore(packets: SinglePacketPart[]): Observable<SinglePacketProgress>; /** * Send a single packet to the tap and execute * * @warning this is an experimental function. It may be modified in future releases * @experimental * * TODO maybe move to extension ? */ sendSinglePacket(packetOrModel: SinglePacketModel | Uint8Array): Observable<SinglePacketProgress>; /** * Configure current tap instance thanks to a TapConfigurator * @param configurator */ configure<DataType>(configurator: TapConfigurator<DataType>): Promise<DataType>; /** * * @param protocol */ useComProtocol(protocol: ComProtocol | string): this; /** * Tap login * */ login(username: string, password: string, refreshSessionState?: boolean): Promise<boolean>; private _isLoggedIn; /** * * @param commands run mutiple requests in one * @param expectedCodeRet */ multiRequests(commands: ServiceCallType[], expectedCodeRet?: MultiRequest.ExpectedResultCode | number): Promise<ResponseInterface<any>[]>; /** * Send an NFC pairing request */ nfcPairing(): Promise<Response<Uint8Array>>; readonly scramAuth: ScramAuth; readonly rooter: Routes; readonly apiConfig: ApiConfig; readonly service: IoTizeDeviceService; /** * @experimental */ readonly lwm2m: Lwm2mInterface; /** * Initialize device cache */ protected _initCache(): void; /** * Clear cache */ clearCache(): void; /** * Clear session encryption keys */ clearSession(): void; /** * Read session state from the device * This will perform a few tap requests * * TODO we should invalidate encryption key if session state changed * TODO we should use multi commands to improve performance */ refreshSessionState(): Promise<SessionState>; /** * Get lock info */ protected getLockInfo(): Promise<InterfaceLock>; getSecurityOptions(): Promise<SecurityOptions>; } export declare class Lwm2mInterface { client: IoTizeClient; apiConfig: ApiConfig; constructor(client: IoTizeClient, apiConfig: ApiConfig); get(path: string, body?: any): Promise<ResponseInterface<any>>; put(path: string, body: any): Promise<ResponseInterface<any>>; post(path: string, body?: any): Promise<ResponseInterface<any>>; call(call: ServiceCallType): Promise<Response<any>>; }