UNPKG

ts-onvif

Version:

Client to ONVIF devices

248 lines 8.78 kB
"use strict"; /** * DoorControl ver10 module * @author Andrew D.Laptev <a.d.laptev@gmail.com> * @see https://www.onvif.org/ver10/pacs/doorcontrol.wsdl */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const service_1 = __importDefault(require("./service")); /** * DoorControl service * @example * ```ts * const doorsList = await cam.doorControl.getDoorList(); * const token = doorsList.door![0].token; * console.log((await cam.doorControl.getDoorState({ token })).doorMode); * await cam.doorControl.unlockDoor({ token }); * console.log((await cam.doorControl.getDoorState({ token })).doorMode); * ``` */ class DoorControl extends service_1.default { constructor(onvif) { super(onvif, 'doorcontrol'); } static tokensToBuild(tokens) { if (!tokens?.length) { return undefined; } return tokens.length === 1 ? tokens[0] : tokens; } static doorCapabilitiesToBuild(capabilities) { return { $: { ...(capabilities.access && { Access: capabilities.access }), ...(capabilities.accessTimingOverride && { AccessTimingOverride: capabilities.accessTimingOverride, }), ...(capabilities.lock && { Lock: capabilities.lock }), ...(capabilities.unlock && { Unlock: capabilities.unlock }), ...(capabilities.block && { Block: capabilities.block }), ...(capabilities.doubleLock && { DoubleLock: capabilities.doubleLock }), ...(capabilities.lockDown && { LockDown: capabilities.lockDown }), ...(capabilities.lockOpen && { LockOpen: capabilities.lockOpen }), ...(capabilities.doorMonitor && { DoorMonitor: capabilities.doorMonitor }), ...(capabilities.lockMonitor && { LockMonitor: capabilities.lockMonitor }), ...(capabilities.doubleLockMonitor && { DoubleLockMonitor: capabilities.doubleLockMonitor, }), ...(capabilities.alarm && { Alarm: capabilities.alarm }), ...(capabilities.tamper && { Tamper: capabilities.tamper }), ...(capabilities.fault && { Fault: capabilities.fault }), }, }; } static timingsToBuild(timings) { return { ReleaseTime: timings.releaseTime, OpenTime: timings.openTime, ...(timings.extendedReleaseTime && { ExtendedReleaseTime: timings.extendedReleaseTime, }), ...(timings.delayTimeBeforeRelock && { DelayTimeBeforeRelock: timings.delayTimeBeforeRelock, }), ...(timings.extendedOpenTime && { ExtendedOpenTime: timings.extendedOpenTime }), ...(timings.preAlarmTime && { PreAlarmTime: timings.preAlarmTime }), ...(timings.extension && { Extension: timings.extension }), }; } static doorInfoToBuild(door) { return { $: { token: door.token }, Name: door.name, ...(door.description && { Description: door.description }), Capabilities: DoorControl.doorCapabilitiesToBuild(door.capabilities), }; } static doorToBuild(door) { return { ...DoorControl.doorInfoToBuild(door), DoorType: door.doorType, Timings: DoorControl.timingsToBuild(door.timings), ...(door.extension && { Extension: door.extension }), }; } /** * Returns the capabilities of the door control service. */ async getServiceCapabilities() { const response = await this.request({ GetServiceCapabilities: {} }); return response.getServiceCapabilitiesResponse?.capabilities ?? {}; } /** * Returns a list of door info items. * @param options */ async getDoorInfoList(options = {}) { const response = await this.request({ GetDoorInfoList: { ...(options.limit !== undefined && { Limit: options.limit }), ...(options.startReference && { StartReference: options.startReference }), }, }, { array: ['doorInfo'] }); return response.getDoorInfoListResponse ?? {}; } /** * Returns door info items for the requested tokens. * @param options */ async getDoorInfo({ token }) { const response = await this.request({ GetDoorInfo: { Token: DoorControl.tokensToBuild(token) } }, { array: ['doorInfo'] }); return response.getDoorInfoResponse ?? {}; } /** * Returns a list of door items. * @param options */ async getDoorList(options = {}) { const response = await this.request({ GetDoorList: { ...(options.limit && { Limit: options.limit }), ...(options.startReference && { StartReference: options.startReference }), }, }, { array: ['door'] }); return response.getDoorListResponse ?? {}; } /** * Returns door items for the requested tokens. * @param options */ async getDoors({ token }) { const response = await this.request({ GetDoors: { Token: DoorControl.tokensToBuild(token) } }, { array: ['door'] }); return response.getDoorsResponse ?? {}; } /** * Creates a new door. * @param options */ async createDoor({ door }) { const response = await this.request({ CreateDoor: { Door: DoorControl.doorToBuild(door) } }); return response.createDoorResponse.token; } /** * Creates or replaces a door (requires ClientSuppliedTokenSupported). * @param options */ async setDoor({ door }) { await this.request({ SetDoor: { Door: DoorControl.doorToBuild(door) } }); } /** * Modifies an existing door. * @param options */ async modifyDoor({ door }) { await this.request({ ModifyDoor: { Door: DoorControl.doorToBuild(door) } }); } /** * Deletes a door. * @param options */ async deleteDoor({ token }) { await this.request({ DeleteDoor: { Token: token } }); } /** * Returns the current state of a door. * @param options */ async getDoorState({ token }) { const response = await this.request({ GetDoorState: { Token: token } }); return response.getDoorStateResponse.doorState; } /** * Grants momentary access to a door. * @param options */ async accessDoor(options) { await this.request({ AccessDoor: { Token: options.token, ...(options.useExtendedTime && { UseExtendedTime: options.useExtendedTime }), ...(options.accessTime && { AccessTime: options.accessTime }), ...(options.openTooLongTime && { OpenTooLongTime: options.openTooLongTime }), ...(options.preAlarmTime && { PreAlarmTime: options.preAlarmTime }), ...(options.extension && { Extension: options.extension }), }, }); } /** * Locks a door. * @param options */ async lockDoor({ token }) { await this.request({ LockDoor: { Token: token } }); } /** * Unlocks a door. * @param options */ async unlockDoor({ token }) { await this.request({ UnlockDoor: { Token: token } }); } /** * Blocks a door. * @param options */ async blockDoor({ token }) { await this.request({ BlockDoor: { Token: token } }); } /** * Puts a door in lock-down mode. * @param options */ async lockDownDoor({ token }) { await this.request({ LockDownDoor: { Token: token } }); } /** * Releases lock-down mode on a door. * @param options */ async lockDownReleaseDoor({ token }) { await this.request({ LockDownReleaseDoor: { Token: token } }); } /** * Puts a door in lock-open mode. * @param options */ async lockOpenDoor({ token }) { await this.request({ LockOpenDoor: { Token: token } }); } /** * Releases lock-open mode on a door. * @param options */ async lockOpenReleaseDoor({ token }) { await this.request({ LockOpenReleaseDoor: { Token: token } }); } /** * Activates double-lock on a door. * @param options */ async doubleLockDoor({ token }) { await this.request({ DoubleLockDoor: { Token: token } }); } } exports.default = DoorControl; //# sourceMappingURL=doorcontrol.js.map