ts-onvif
Version:
Client to ONVIF devices
248 lines • 8.78 kB
JavaScript
;
/**
* 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