UNPKG

@neurosity/sdk

Version:
147 lines (146 loc) 5.36 kB
"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()); }); }; 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";