shepherd-onboard 0.1.18 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/shepherd-onboard.js +28 -5
- package/package.json +1 -1
package/bin/shepherd-onboard.js
CHANGED
|
@@ -1259,12 +1259,20 @@ async function selectChatsInBrowser(chats, opts = {}) {
|
|
|
1259
1259
|
const token = Math.random().toString(36).slice(2) + Math.random().toString(36).slice(2);
|
|
1260
1260
|
let settled = false;
|
|
1261
1261
|
let server;
|
|
1262
|
+
const sockets = new Set();
|
|
1262
1263
|
|
|
1263
1264
|
return new Promise((resolve, reject) => {
|
|
1265
|
+
const closeSelectorServer = () => {
|
|
1266
|
+
server?.close();
|
|
1267
|
+
server?.closeIdleConnections?.();
|
|
1268
|
+
for (const socket of sockets) socket.destroy();
|
|
1269
|
+
sockets.clear();
|
|
1270
|
+
};
|
|
1271
|
+
|
|
1264
1272
|
const timeout = setTimeout(() => {
|
|
1265
1273
|
if (settled) return;
|
|
1266
1274
|
settled = true;
|
|
1267
|
-
|
|
1275
|
+
closeSelectorServer();
|
|
1268
1276
|
reject(new Error("Messages chat selection timed out."));
|
|
1269
1277
|
}, 20 * 60 * 1000);
|
|
1270
1278
|
|
|
@@ -1292,11 +1300,11 @@ async function selectChatsInBrowser(chats, opts = {}) {
|
|
|
1292
1300
|
return;
|
|
1293
1301
|
}
|
|
1294
1302
|
|
|
1303
|
+
if (!settled) res.once("finish", closeSelectorServer);
|
|
1295
1304
|
sendHtml(res, renderMessagesDonePage(`${selected.length} chat${selected.length === 1 ? "" : "s"} selected.`));
|
|
1296
1305
|
if (!settled) {
|
|
1297
1306
|
settled = true;
|
|
1298
1307
|
clearTimeout(timeout);
|
|
1299
|
-
setTimeout(() => server.close(), 100);
|
|
1300
1308
|
resolve(selected);
|
|
1301
1309
|
}
|
|
1302
1310
|
return;
|
|
@@ -1307,16 +1315,22 @@ async function selectChatsInBrowser(chats, opts = {}) {
|
|
|
1307
1315
|
if (!settled) {
|
|
1308
1316
|
settled = true;
|
|
1309
1317
|
clearTimeout(timeout);
|
|
1310
|
-
|
|
1318
|
+
closeSelectorServer();
|
|
1311
1319
|
reject(err);
|
|
1312
1320
|
}
|
|
1313
1321
|
}
|
|
1314
1322
|
});
|
|
1315
1323
|
|
|
1324
|
+
server.on("connection", (socket) => {
|
|
1325
|
+
sockets.add(socket);
|
|
1326
|
+
socket.once("close", () => sockets.delete(socket));
|
|
1327
|
+
});
|
|
1328
|
+
|
|
1316
1329
|
server.on("error", (err) => {
|
|
1317
1330
|
if (settled) return;
|
|
1318
1331
|
settled = true;
|
|
1319
1332
|
clearTimeout(timeout);
|
|
1333
|
+
closeSelectorServer();
|
|
1320
1334
|
reject(err);
|
|
1321
1335
|
});
|
|
1322
1336
|
|
|
@@ -1326,7 +1340,7 @@ async function selectChatsInBrowser(chats, opts = {}) {
|
|
|
1326
1340
|
if (!port) {
|
|
1327
1341
|
settled = true;
|
|
1328
1342
|
clearTimeout(timeout);
|
|
1329
|
-
|
|
1343
|
+
closeSelectorServer();
|
|
1330
1344
|
reject(new Error("Could not start local Messages selector."));
|
|
1331
1345
|
return;
|
|
1332
1346
|
}
|
|
@@ -1642,6 +1656,7 @@ function renderMessagesSelectorPage(chats, token, error = "") {
|
|
|
1642
1656
|
const search = document.getElementById("search");
|
|
1643
1657
|
const empty = document.getElementById("empty");
|
|
1644
1658
|
const selected = document.getElementById("selection-count");
|
|
1659
|
+
const form = document.querySelector("form");
|
|
1645
1660
|
const checks = Array.from(document.querySelectorAll('input[name="chatId"]'));
|
|
1646
1661
|
|
|
1647
1662
|
function updateRows() {
|
|
@@ -1663,6 +1678,11 @@ function renderMessagesSelectorPage(chats, token, error = "") {
|
|
|
1663
1678
|
}
|
|
1664
1679
|
|
|
1665
1680
|
search.addEventListener("input", updateRows);
|
|
1681
|
+
document.addEventListener("keydown", (event) => {
|
|
1682
|
+
if (event.key !== "Enter") return;
|
|
1683
|
+
event.preventDefault();
|
|
1684
|
+
form.requestSubmit();
|
|
1685
|
+
});
|
|
1666
1686
|
for (const check of checks) check.addEventListener("change", updateSelected);
|
|
1667
1687
|
updateRows();
|
|
1668
1688
|
updateSelected();
|
|
@@ -1672,6 +1692,7 @@ function renderMessagesSelectorPage(chats, token, error = "") {
|
|
|
1672
1692
|
}
|
|
1673
1693
|
|
|
1674
1694
|
function renderMessagesDonePage(message, isError = false) {
|
|
1695
|
+
const closeScript = isError ? "" : "<script>setTimeout(() => window.close(), 150);</script>";
|
|
1675
1696
|
return `<!doctype html>
|
|
1676
1697
|
<html lang="en">
|
|
1677
1698
|
<head>
|
|
@@ -1692,8 +1713,9 @@ function renderMessagesDonePage(message, isError = false) {
|
|
|
1692
1713
|
<main>
|
|
1693
1714
|
<div class="mark">${isError ? "!" : "OK"}</div>
|
|
1694
1715
|
<h1>${html(message)}</h1>
|
|
1695
|
-
<p>${isError ? "Return to the terminal and retry." : "
|
|
1716
|
+
<p>${isError ? "Return to the terminal and retry." : "Returning to the terminal."}</p>
|
|
1696
1717
|
</main>
|
|
1718
|
+
${closeScript}
|
|
1697
1719
|
</body>
|
|
1698
1720
|
</html>`;
|
|
1699
1721
|
}
|
|
@@ -1760,6 +1782,7 @@ function sendHtml(res, body, status = 200) {
|
|
|
1760
1782
|
res.writeHead(status, {
|
|
1761
1783
|
"Content-Type": "text/html; charset=utf-8",
|
|
1762
1784
|
"Cache-Control": "no-store",
|
|
1785
|
+
"Connection": "close",
|
|
1763
1786
|
});
|
|
1764
1787
|
res.end(body);
|
|
1765
1788
|
}
|