@neurosity/sdk
Version:
Neurosity SDK
147 lines (146 loc) • 5.36 kB
JavaScript
;
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FirebaseDevice = void 0;
const app_1 = __importDefault(require("firebase/app"));
const deviceStore_1 = require("./deviceStore");
const SERVER_TIMESTAMP = app_1.default.database.ServerValue.TIMESTAMP;
/**
* @hidden
*/
class FirebaseDevice {
constructor({ deviceId, firebaseApp, dependencies }) {
if (!deviceId) {
throw new Error(`No Device ID provided.`);
}
this.deviceId = deviceId;
this.app = firebaseApp.app;
this.deviceStore = (0, deviceStore_1.createDeviceStore)(this.app, deviceId, dependencies.subscriptionManager);
}
get timestamp() {
return SERVER_TIMESTAMP;
}
dispatchAction(action) {
return this.deviceStore.dispatchAction(action);
}
getInfo() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.deviceStore.once("info");
});
}
onNamespace(namespace, callback) {
return this.deviceStore.onNamespace(namespace, callback);
}
onceNamespace(namespace) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.deviceStore.once(namespace);
});
}
offNamespace(namespace, listener) {
this.deviceStore.offNamespace(namespace, listener);
}
getTimesync() {
return __awaiter(this, void 0, void 0, function* () {
const response = yield this.dispatchAction({
command: "timesync",
action: "get",
responseRequired: true,
responseTimeout: 250
});
return response.timestamp;
});
}
/**
* Pushes metric for each subscriptions in path:
* /devices/:deviceId/metrics/:metricName
*/
nextMetric(metricName, metricValue) {
this.deviceStore.nextMetric(metricName, metricValue);
}
/**
* Listens for metrics in path:
* /devices/:deviceId/metrics/:metricName
*/
onMetric(subscription, callback) {
return this.deviceStore.onMetric(subscription, callback);
}
/**
* Creates a new and unique subscription in path:
* /devices/:deviceId/subscriptions/:subscriptionId
* E.g. /devices/device1/subscriptions/subscription3
*
* @param subscription
* @returns subscriptionId
*/
subscribeToMetric(subscription) {
const subscriptionId = this.deviceStore.subscribeToMetric(Object.assign(Object.assign({}, subscription), { serverType: FirebaseDevice.serverType // @deprecated
}));
return subscriptionId;
}
/**
* Removes subscription in path:
* /devices/:deviceId/subscriptions/:subscriptionId
*
* @param subscription
*/
unsubscribeFromMetric(subscription) {
this.deviceStore.unsubscribeFromMetric(subscription);
}
/**
* Removes metric listener
* /devices/:deviceId/metric
* or
* /devices/:deviceId/metric/label
*
* @param subscription
* @param listener
*/
removeMetricListener(subscription, listener) {
this.deviceStore.removeMetricListener(subscription, listener);
}
changeSettings(settings) {
return __awaiter(this, void 0, void 0, function* () {
return this.deviceStore.update("settings", settings);
});
}
getSkill(bundleId) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.deviceStore.lastOfChildValue("skills", "bundleId", bundleId);
});
}
createBluetoothToken() {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const [error, token] = yield this.app
.functions()
.httpsCallable("createBluetoothToken")({
deviceId: this.deviceId
})
.then(({ data }) => [null, data === null || data === void 0 ? void 0 : data.token])
.catch((error) => [error, null]);
if (error) {
return Promise.reject((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error);
}
if (!token) {
return Promise.reject(`Failed to create Bluetooth token.`);
}
return token;
});
}
disconnect() {
this.deviceStore.disconnect();
}
}
exports.FirebaseDevice = FirebaseDevice;
FirebaseDevice.serverType = "firebase";