UNPKG

fitbit-asap

Version:

Send peer messages reliably on Fitbit OS.

100 lines 2.84 kB
import { __read, __spread } from "tslib"; import { decode, encode } from "cbor"; import { localStorage } from "local-storage"; import { peerSocket } from "messaging"; var debug = false; var queue = []; try { queue = JSON.parse(localStorage.getItem("_asap_queue")); if (!Array.isArray(queue)) { queue = []; } } catch (error) { queue = []; } function enqueue(message, options) { var id = queue.length > 0 ? Math.max.apply(Math, __spread(queue)) + 1 : 1; var timeout = Date.now() + (options && options.timeout ? options.timeout : 86400000); var data = ["asap_message", id, timeout, message]; localStorage.setItem("_asap_" + id, JSON.stringify(Array.from(new Uint8Array(encode(data))))); queue.push(id); localStorage.setItem("_asap_queue", JSON.stringify(queue)); if (queue.length === 1) { process(); } debug && console.log("Enqueued message #" + id); } function dequeue(id) { if (id) { for (var i in queue) { if (queue[i] === id) { localStorage.removeItem("_asap_" + id); queue.splice(i, 1); break; } } debug && console.log("Dequeued message #" + id); } else { for (var i in queue) { localStorage.removeItem("_asap_" + queue[i]); } queue = []; debug && console.log("Dequeued all messages"); } localStorage.setItem("_asap_queue", JSON.stringify(queue)); process(); } function process() { if (queue.length > 0) { var id = queue[0]; try { var message = decode((new Uint8Array(JSON.parse(localStorage.getItem("_asap_" + id)))).buffer); var timeout = message[2]; if (timeout < Date.now()) { dequeue(id); } else { try { peerSocket.send(message); } catch (error) { debug && console.log(error); } } } catch (_a) { dequeue(id); } } } peerSocket.addEventListener("open", function () { debug && console.log("Peer socket opened"); process(); }); peerSocket.addEventListener("message", function (event) { var type = event.data[0]; var id = event.data[1]; var timeout = event.data[2]; var message = event.data[3]; if (type == "asap_message") { asap.onmessage(message); try { peerSocket.send(["asap_receipt", id]); } catch (error) { debug && console.log(error); } } else if (type == "asap_receipt") { dequeue(id); } }); var asap = { send: enqueue, cancel: dequeue, onmessage: function () { } }; export default asap; //# sourceMappingURL=companion.js.map