@dodi-smart/ttlock-graphql-api
Version:
TTLock GraphQL API
179 lines • 7.82 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const builder_1 = require("../builder");
const logger_1 = require("../logger");
const session_1 = require("../session");
const utils_1 = require("../utils");
const ttlock_api_1 = require("@dodi-smart/ttlock-api");
builder_1.builder.objectType('TTLockSmartlockDetails', {
fields: (t) => ({
lockId: t.exposeInt('lockId', {
description: 'Lock id',
nullable: true
}),
lockName: t.exposeString('lockName', {
description: 'Lock name',
nullable: true
}),
lockAlias: t.exposeString('lockAlias', {
description: 'Lock alias name',
nullable: true
}),
lockMac: t.exposeString('lockMac', {
description: 'Lock MAC address',
nullable: true
}),
electricQuantity: t.exposeInt('electricQuantity', {
description: 'Lock battery',
nullable: true
}),
featureValue: t.exposeString('featureValue', {
description: 'characteristic value. it is used to indicate what kinds of feature do a lock support.',
nullable: true
}),
timezoneRawOffset: t.exposeInt('timezoneRawOffset', {
description: 'The offset between your time zone and UTC, in millisecond',
nullable: true
}),
modelNum: t.exposeString('modelNum', {
description: 'Product model (for firmware update)',
nullable: true
}),
hardwareRevision: t.exposeString('hardwareRevision', {
description: 'Hardware version (for firmware update)',
nullable: true
}),
firmwareRevision: t.exposeString('firmwareRevision', {
description: 'Firmware version (for firmware update)',
nullable: true
}),
date: t.exposeInt('date', {
description: 'Lock init time (timestamp in millisecond)',
nullable: true
}),
state: t.field({
type: 'TTLockOpenState',
nullable: true,
description: 'Get the open state of a lock via gateway or WiFi lock',
resolve: (lock) => __awaiter(void 0, void 0, void 0, function* () {
const { clientId } = session_1.authHolder;
const { accessToken } = session_1.authHolder.auth;
if (!accessToken) {
logger_1.logger.error("Failed executing 'state': Missing accessToken");
return null;
}
// TODO: Check if the lock has a associated gateway
const gatewayClient = new ttlock_api_1.GatewayApi();
const lockState = yield gatewayClient.getLockState({
clientId,
accessToken,
lockId: lock.lockId,
date: new Date().getTime()
});
if (lockState.errcode) {
logger_1.logger.error(`Failed executing 'state': Err(${lockState.errcode}): ${lockState.errmsg}`);
return null;
}
return lockState;
})
}),
passcodes: t.field({
type: 'TTLockSmartlockPasscodes',
nullable: false,
args: {
limit: t.arg.int({
description: 'A limit on the number of objects to be returned. Limit can range between 20 and 10_000, and the default is 20.',
required: false,
defaultValue: 20
}),
offset: t.arg.int({
description: 'Page offset starting from 1',
required: false,
defaultValue: 1
})
},
resolve: (_parent, { limit, offset }) => __awaiter(void 0, void 0, void 0, function* () {
const { clientId } = session_1.authHolder;
const { accessToken } = session_1.authHolder.auth;
const emptyResponse = {
list: [],
pageNo: 0,
pageSize: 0,
total: 0
};
if (!accessToken) {
logger_1.logger.error("Failed executing 'passcodes': Missing accessToken");
return emptyResponse;
}
if (!_parent.lockId) {
logger_1.logger.error("Failed executing 'passcodes': Getting the lock failed");
return emptyResponse;
}
const passcodeClient = new ttlock_api_1.PasscodeApi();
const passcodes = yield passcodeClient.getPasscodes({
clientId,
accessToken,
lockId: _parent.lockId,
date: new Date().getTime(),
pageNo: (0, utils_1.fixNumberNullable)(offset),
pageSize: (0, utils_1.fixNumberNullable)(limit)
});
if (passcodes.errcode) {
logger_1.logger.error(`Failed executing 'passcodes': Err(${passcodes.errcode}): ${passcodes.errmsg}`);
return emptyResponse;
}
const { list, pageNo, pageSize, total } = passcodes;
return {
list,
pageNo,
pageSize,
total
};
})
}),
wirelessKeypads: t.field({
type: 'TTLockSmartlockWirelessKeypads',
nullable: false,
resolve: (_parent, {}) => __awaiter(void 0, void 0, void 0, function* () {
const { clientId } = session_1.authHolder;
const { accessToken } = session_1.authHolder.auth;
const emptyResponse = {
list: []
};
if (!accessToken) {
logger_1.logger.error("Failed executing 'wirelessKeypads': Missing accessToken");
return emptyResponse;
}
if (!_parent.lockId) {
logger_1.logger.error("Failed executing 'wirelessKeypads': Getting the lock failed");
return emptyResponse;
}
const client = new ttlock_api_1.WirelessKeypadApi();
const passcodes = yield client.getLockWirelessKeypads({
clientId,
accessToken,
lockId: _parent.lockId,
date: new Date().getTime()
});
if (passcodes.errcode) {
logger_1.logger.error(`Failed executing 'wirelessKeypads': Err(${passcodes.errcode}): ${passcodes.errmsg}`);
return emptyResponse;
}
const { list } = passcodes;
return {
list
};
})
})
})
});
//# sourceMappingURL=smartlock-details.js.map