wherdr 1.3.1 → 1.3.2
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{WLQjK8uJ.js → 8ksjcuDu.js} +51 -41
- package/.output/public/_nuxt/B7QP1TFs.js +23 -0
- package/.output/public/_nuxt/{CiYar6hg.js → BOpBIziZ.js} +2 -2
- package/.output/public/_nuxt/BWXdFfeg.js +17 -0
- package/.output/public/_nuxt/COFCNFpG.js +83 -0
- package/.output/public/_nuxt/{C2T9fQ4f.js → Cd8j9O5w.js} +1 -1
- package/.output/public/_nuxt/{C12eXl5z.js → CkZ8t6uB.js} +1 -1
- package/.output/public/_nuxt/{CctS2Xn6.js → D4Yz4rat.js} +4 -4
- package/.output/public/_nuxt/{B6qBWHWB.js → D7sxNXx1.js} +1 -1
- package/.output/public/_nuxt/DViwOclv.js +1 -0
- package/.output/public/_nuxt/DoD7Qb5P.js +30 -0
- package/.output/public/_nuxt/{BMIe8p_3.js → DyBZDSCV.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/7afbf062-5369-4002-b20d-7a582ff6e0f1.json +1 -0
- package/.output/public/_nuxt/{entry.cKR16VqG.css → entry.Crt1r4l3.css} +1 -1
- package/.output/public/_nuxt/hePW80VL.js +1 -0
- package/.output/public/sw.js +1 -1
- package/.output/server/chunks/_/branding.mjs +1 -1
- package/.output/server/chunks/_/package.mjs +96 -0
- package/.output/server/chunks/_/plugins.mjs +1 -1
- package/.output/server/chunks/_/projectBoard.mjs +1 -1
- package/.output/server/chunks/_/projectsPlugin.mjs +1 -1
- package/.output/server/chunks/_/selfupdate.mjs +82 -0
- package/.output/server/chunks/_/updates.mjs +50 -0
- package/.output/server/chunks/_/worktrees.mjs +1 -1
- package/.output/server/chunks/_/ws.mjs +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +1670 -899
- package/.output/server/chunks/raw/herdr-plugin.mjs +1 -1
- package/.output/server/chunks/routes/api/_..._.mjs +5 -1
- package/.output/server/chunks/routes/api/agents.post.mjs +5 -1
- package/.output/server/chunks/routes/api/ask-tab.post.mjs +5 -1
- package/.output/server/chunks/routes/api/attach.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/disable.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/lock-all.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/lock.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/login/options.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/login/verify.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/max-session.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/register/options.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/register/verify.post.mjs +5 -1
- package/.output/server/chunks/routes/api/auth/status.get.mjs +5 -1
- package/.output/server/chunks/routes/api/changes.get.mjs +5 -1
- package/.output/server/chunks/routes/api/chat/image.get.mjs +5 -1
- package/.output/server/chunks/routes/api/chat.get.mjs +5 -1
- package/.output/server/chunks/routes/api/choose.post.mjs +5 -1
- package/.output/server/chunks/routes/api/claude-statusline.post.mjs +5 -1
- package/.output/server/chunks/routes/api/close/status.get.mjs +5 -1
- package/.output/server/chunks/routes/api/close.post.mjs +5 -1
- package/.output/server/chunks/routes/api/codex-update.post.mjs +5 -1
- package/.output/server/chunks/routes/api/commands.get.mjs +5 -1
- package/.output/server/chunks/routes/api/config.get.mjs +5 -1
- package/.output/server/chunks/routes/api/dirs.get.mjs +5 -1
- package/.output/server/chunks/routes/api/dismiss.post.mjs +5 -1
- package/.output/server/chunks/routes/api/effort.post.mjs +5 -1
- package/.output/server/chunks/routes/api/efforts.get.mjs +5 -1
- package/.output/server/chunks/routes/api/file.post.mjs +5 -1
- package/.output/server/chunks/routes/api/gitroot.get.mjs +5 -1
- package/.output/server/chunks/routes/api/health.get.mjs +36 -0
- package/.output/server/chunks/routes/api/index.get.mjs +5 -1
- package/.output/server/chunks/routes/api/input.post.mjs +5 -1
- package/.output/server/chunks/routes/api/interrupt.post.mjs +5 -1
- package/.output/server/chunks/routes/api/isgit.get.mjs +5 -1
- package/.output/server/chunks/routes/api/machine/awake.get.mjs +5 -1
- package/.output/server/chunks/routes/api/machine/awake.post.mjs +5 -1
- package/.output/server/chunks/routes/api/machine/order.get.mjs +5 -1
- package/.output/server/chunks/routes/api/machine/order.post.mjs +5 -1
- package/.output/server/chunks/routes/api/machine/rename.post.mjs +5 -1
- package/.output/server/chunks/routes/api/menu.post.mjs +5 -1
- package/.output/server/chunks/routes/api/model.post.mjs +5 -1
- package/.output/server/chunks/routes/api/models.get.mjs +5 -1
- package/.output/server/chunks/routes/api/nav.post.mjs +5 -1
- package/.output/server/chunks/routes/api/onboarding.get.mjs +5 -1
- package/.output/server/chunks/routes/api/onboarding.post.mjs +5 -1
- package/.output/server/chunks/routes/api/phone.get.mjs +5 -6
- package/.output/server/chunks/routes/api/phone.post.mjs +5 -6
- package/.output/server/chunks/routes/api/plugins/actions.get.mjs +5 -1
- package/.output/server/chunks/routes/api/plugins/invoke.post.mjs +5 -1
- package/.output/server/chunks/routes/api/plugins/profiles.get.mjs +5 -1
- package/.output/server/chunks/routes/api/plugins/projects.get.mjs +5 -1
- package/.output/server/chunks/routes/api/plugins/projects.post.mjs +5 -1
- package/.output/server/chunks/routes/api/plugins/thread-limits.get.mjs +6 -2
- package/.output/server/chunks/routes/api/plugins/thread-limits.post.mjs +6 -2
- package/.output/server/chunks/routes/api/project/report.get.mjs +5 -1
- package/.output/server/chunks/routes/api/prompt.post.mjs +6 -2
- package/.output/server/chunks/routes/api/push/quiet.post.mjs +6 -2
- package/.output/server/chunks/routes/api/push/subscribe.post.mjs +6 -2
- package/.output/server/chunks/routes/api/push/test.post.mjs +6 -2
- package/.output/server/chunks/routes/api/push/unsubscribe.post.mjs +6 -2
- package/.output/server/chunks/routes/api/quotas.get.mjs +6 -2
- package/.output/server/chunks/routes/api/rename.post.mjs +5 -1
- package/.output/server/chunks/routes/api/requeue.post.mjs +6 -2
- package/.output/server/chunks/routes/api/restart.get.mjs +5 -1
- package/.output/server/chunks/routes/api/restart.post.mjs +5 -1
- package/.output/server/chunks/routes/api/reveal.post.mjs +5 -1
- package/.output/server/chunks/routes/api/screen-key.post.mjs +6 -2
- package/.output/server/chunks/routes/api/screen.get.mjs +6 -2
- package/.output/server/chunks/routes/api/search.get.mjs +6 -2
- package/.output/server/chunks/routes/api/seen.post.mjs +6 -2
- package/.output/server/chunks/routes/api/sessions.get.mjs +6 -2
- package/.output/server/chunks/routes/api/sessions.post.mjs +6 -2
- package/.output/server/chunks/routes/api/space.post.mjs +6 -2
- package/.output/server/chunks/routes/api/state.get.mjs +6 -2
- package/.output/server/chunks/routes/api/unqueue.post.mjs +6 -2
- package/.output/server/chunks/routes/api/update/status.get.mjs +38 -0
- package/.output/server/chunks/routes/api/update.get.mjs +11 -50
- package/.output/server/chunks/routes/api/update.post.mjs +41 -0
- package/.output/server/chunks/routes/api/upload.post.mjs +5 -1
- package/.output/server/chunks/routes/api/worktrees/remove.post.mjs +5 -1
- package/.output/server/chunks/routes/api/worktrees.get.mjs +5 -1
- package/.output/server/chunks/routes/favicon.ico.get.mjs +5 -1
- package/.output/server/chunks/routes/icons/_name_.get.mjs +6 -2
- package/.output/server/chunks/routes/renderer.mjs +7 -3
- package/.output/server/chunks/routes/uploads/_...name_.get.mjs +6 -2
- package/.output/server/chunks/routes/ws/_..._.mjs +6 -2
- package/.output/server/chunks/routes/ws/events.mjs +6 -2
- package/.output/server/chunks/routes/ws/mirror.mjs +6 -2
- package/.output/server/chunks/routes/ws/term.mjs +8 -4
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +6 -2
- package/.output/server/package.json +1 -1
- package/README.md +110 -23
- package/bin/lib/commands.mjs +42 -8
- package/bin/lib/core.mjs +17 -2
- package/bin/lib/tailnet.d.mts +12 -3
- package/bin/lib/tailnet.mjs +103 -25
- package/bin/lib/updater.mjs +267 -0
- package/package.json +2 -1
- package/.output/public/_nuxt/BpQH8Ho1.js +0 -1
- package/.output/public/_nuxt/BrAeJIZR.js +0 -30
- package/.output/public/_nuxt/CYxHnMNH.js +0 -83
- package/.output/public/_nuxt/DLLQgP0d.js +0 -1
- package/.output/public/_nuxt/Dwh-l2rQ.js +0 -17
- package/.output/public/_nuxt/builds/meta/6466b0ab-7935-460c-abdf-2ea632dae6d0.json +0 -1
- package/.output/public/_nuxt/whFLy_Ne.js +0 -23
- package/.output/server/chunks/_/phone.mjs +0 -343
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const rename_post = defineApi(async (event, b) => {
|
|
29
33
|
if (!PANE_RE.test(b.pane_id || "")) throw new HerdrError("bad_pane", "Invalid pane");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, P as PANE_RE, H as HerdrError,
|
|
1
|
+
import { a as defineApi, P as PANE_RE, H as HerdrError, b4 as retryQueued } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const requeue_post = defineApi(async (event, b) => {
|
|
29
33
|
if (!PANE_RE.test(b.pane_id || "")) throw new HerdrError("bad_pane", "Invalid pane");
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const restart_get = defineApi(async (event) => {
|
|
30
34
|
const pane = String(getQuery(event).pane || "");
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const restart_post = defineApi(async (event, b) => {
|
|
30
34
|
if (!PANE_RE.test(b.pane_id || "")) throw new HerdrError("bad_pane", "Invalid pane");
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const reveal_post = defineApi((event, b) => revealPath(b));
|
|
30
34
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, P as PANE_RE, H as HerdrError, h as herdr,
|
|
1
|
+
import { a as defineApi, P as PANE_RE, H as HerdrError, h as herdr, b5 as parseWaitScreen, C as parseChoices, g as choicesCache, p as poll } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const screenKey_post = defineApi(async (event, b) => {
|
|
29
33
|
if (!PANE_RE.test(b.pane_id || "")) throw new HerdrError("bad_pane", "Invalid pane");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, i as getQuery, P as PANE_RE, H as HerdrError, h as herdr,
|
|
1
|
+
import { a as defineApi, i as getQuery, P as PANE_RE, H as HerdrError, h as herdr, b6 as settingsTabs, b7 as tabsOfRow } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const SGR = /\x1b\[([\d;]*)m/g;
|
|
29
33
|
function highlight(params, state) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, i as getQuery,
|
|
1
|
+
import { a as defineApi, i as getQuery, aB as getState, b8 as hasTranscript, n as machineOfPane, b9 as SEARCH_DEADLINE_MS, ba as SEARCH_MAX_RESULTS, bb as spaceTitle } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const search_get = defineApi(async (event) => {
|
|
29
33
|
const query = String(getQuery(event).q || "").trim().slice(0, 100);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, P as PANE_RE, H as HerdrError,
|
|
1
|
+
import { a as defineApi, P as PANE_RE, H as HerdrError, bc as markSeen } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const seen_post = defineApi(async (event, b) => {
|
|
29
33
|
if (!PANE_RE.test(b.pane_id || "")) throw new HerdrError("bad_pane", "Invalid pane");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, i as getQuery,
|
|
1
|
+
import { a as defineApi, i as getQuery, bd as listSessions } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const sessions_get = defineApi(async (event) => {
|
|
29
33
|
const key = String(getQuery(event).machine || "");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, H as HerdrError,
|
|
1
|
+
import { a as defineApi, H as HerdrError, be as openSession } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const sessions_post = defineApi(async (_event, body) => {
|
|
29
33
|
if (typeof body.machine !== "string" || typeof body.name !== "string") throw new HerdrError("bad_session", "Invalid session");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bf as PANE_DIRECTIONS, a5 as splitId, a4 as PANE_RE, a as defineApi, H as HerdrError, Q as log, p as poll, aA as herdrOn } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
var __defProp = Object.defineProperty;
|
|
29
33
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi,
|
|
1
|
+
import { a as defineApi, aB as getState } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const state_get = defineApi(() => getState());
|
|
29
33
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as defineApi, P as PANE_RE, H as HerdrError,
|
|
1
|
+
import { a as defineApi, P as PANE_RE, H as HerdrError, bg as cancelQueued } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const unqueue_post = defineApi(async (event, b) => {
|
|
29
33
|
if (!PANE_RE.test(b.pane_id || "")) throw new HerdrError("bad_pane", "Invalid pane");
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { a as defineApi } from '../../../nitro/nitro.mjs';
|
|
2
|
+
import { p as pkg } from '../../../_/package.mjs';
|
|
3
|
+
import { r as readJob, w as wherdrDir } from '../../../_/selfupdate.mjs';
|
|
4
|
+
import 'node:http';
|
|
5
|
+
import 'node:https';
|
|
6
|
+
import 'node:crypto';
|
|
7
|
+
import 'stream';
|
|
8
|
+
import 'events';
|
|
9
|
+
import 'http';
|
|
10
|
+
import 'crypto';
|
|
11
|
+
import 'buffer';
|
|
12
|
+
import 'zlib';
|
|
13
|
+
import 'https';
|
|
14
|
+
import 'net';
|
|
15
|
+
import 'tls';
|
|
16
|
+
import 'url';
|
|
17
|
+
import 'node:events';
|
|
18
|
+
import 'node:buffer';
|
|
19
|
+
import 'node:fs';
|
|
20
|
+
import 'node:path';
|
|
21
|
+
import 'web-push';
|
|
22
|
+
import 'node:os';
|
|
23
|
+
import 'node:child_process';
|
|
24
|
+
import 'node:net';
|
|
25
|
+
import 'node:readline';
|
|
26
|
+
import 'node:fs/promises';
|
|
27
|
+
import 'node:dns';
|
|
28
|
+
import 'node:util';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
30
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
31
|
+
import '@simplewebauthn/server';
|
|
32
|
+
import 'node:url';
|
|
33
|
+
import '../../../_/updates.mjs';
|
|
34
|
+
|
|
35
|
+
const status_get = defineApi(() => ({ version: pkg.version, job: readJob(wherdrDir()) }));
|
|
36
|
+
|
|
37
|
+
export { status_get as default };
|
|
38
|
+
//# sourceMappingURL=status.get.mjs.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as defineApi, ax as phoneAccess } from '../../nitro/nitro.mjs';
|
|
2
|
+
import { c as checkUpdate } from '../../_/updates.mjs';
|
|
2
3
|
import 'node:http';
|
|
3
4
|
import 'node:https';
|
|
4
5
|
import 'node:crypto';
|
|
@@ -22,58 +23,18 @@ import 'node:child_process';
|
|
|
22
23
|
import 'node:net';
|
|
23
24
|
import 'node:readline';
|
|
24
25
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
32
|
+
import '../../_/package.mjs';
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const RELEASES_URL = "https://api.github.com/repos/afloury/wherdr/releases/latest";
|
|
33
|
-
const DAY_MS = 24 * 60 * 60 * 1e3;
|
|
34
|
-
const RETRY_MS = 60 * 60 * 1e3;
|
|
35
|
-
function createUpdateChecker(opts) {
|
|
36
|
-
var _a;
|
|
37
|
-
const now = (_a = opts.now) != null ? _a : Date.now;
|
|
38
|
-
let cached = null;
|
|
39
|
-
let nextAt = 0;
|
|
40
|
-
let pending = null;
|
|
41
|
-
async function refresh() {
|
|
42
|
-
try {
|
|
43
|
-
const res = await opts.fetch(RELEASES_URL);
|
|
44
|
-
if (!res.ok) throw new Error("http");
|
|
45
|
-
const body = await res.json();
|
|
46
|
-
if (typeof body.tag_name !== "string") throw new Error("tag");
|
|
47
|
-
cached = { version: body.tag_name.replace(/^v/, ""), url: typeof body.html_url === "string" ? body.html_url : "" };
|
|
48
|
-
nextAt = now() + DAY_MS;
|
|
49
|
-
} catch {
|
|
50
|
-
nextAt = now() + RETRY_MS;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return async function check() {
|
|
54
|
-
const mode = installMode(opts.env.WHERDR_INSTALL);
|
|
55
|
-
const base = { current: opts.current, mode, command: updateCommand(mode) };
|
|
56
|
-
if (String(opts.env.WHERDR_UPDATE_CHECK || "").toLowerCase() === "off") return { ...base, latest: null, url: null, checked: false };
|
|
57
|
-
if (now() >= nextAt) {
|
|
58
|
-
pending != null ? pending : pending = refresh().finally(() => {
|
|
59
|
-
pending = null;
|
|
60
|
-
});
|
|
61
|
-
await pending;
|
|
62
|
-
}
|
|
63
|
-
const newer = cached && compareVersions(cached.version, opts.current) > 0;
|
|
64
|
-
return { ...base, latest: newer ? cached.version : null, url: newer ? cached.url || null : null, checked: !!cached };
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
const checkUpdate = createUpdateChecker({
|
|
68
|
-
current: pkg.version,
|
|
69
|
-
env: process.env,
|
|
70
|
-
fetch: (url) => fetch(url, {
|
|
71
|
-
headers: { accept: "application/vnd.github+json", "user-agent": "wherdr" },
|
|
72
|
-
signal: AbortSignal.timeout(1e4)
|
|
73
|
-
})
|
|
34
|
+
const update_get = defineApi(async (event) => {
|
|
35
|
+
const info = await checkUpdate();
|
|
36
|
+
return { ...info, oneTap: info.oneTap && phoneAccess(event) };
|
|
74
37
|
});
|
|
75
38
|
|
|
76
|
-
const update_get = defineApi(() => checkUpdate());
|
|
77
|
-
|
|
78
39
|
export { update_get as default };
|
|
79
40
|
//# sourceMappingURL=update.get.mjs.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { a as defineApi, ax as phoneAccess, s as sendError } from '../../nitro/nitro.mjs';
|
|
2
|
+
import { s as startUpdate } from '../../_/selfupdate.mjs';
|
|
3
|
+
import 'node:http';
|
|
4
|
+
import 'node:https';
|
|
5
|
+
import 'node:crypto';
|
|
6
|
+
import 'stream';
|
|
7
|
+
import 'events';
|
|
8
|
+
import 'http';
|
|
9
|
+
import 'crypto';
|
|
10
|
+
import 'buffer';
|
|
11
|
+
import 'zlib';
|
|
12
|
+
import 'https';
|
|
13
|
+
import 'net';
|
|
14
|
+
import 'tls';
|
|
15
|
+
import 'url';
|
|
16
|
+
import 'node:events';
|
|
17
|
+
import 'node:buffer';
|
|
18
|
+
import 'node:fs';
|
|
19
|
+
import 'node:path';
|
|
20
|
+
import 'web-push';
|
|
21
|
+
import 'node:os';
|
|
22
|
+
import 'node:child_process';
|
|
23
|
+
import 'node:net';
|
|
24
|
+
import 'node:readline';
|
|
25
|
+
import 'node:fs/promises';
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
30
|
+
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
32
|
+
import '../../_/package.mjs';
|
|
33
|
+
import '../../_/updates.mjs';
|
|
34
|
+
|
|
35
|
+
const update_post = defineApi(async (event, body) => {
|
|
36
|
+
if (!phoneAccess(event)) return sendError(event, 403, { error: "Open wherdr on this computer (localhost) or unlock it", code: "update_local" });
|
|
37
|
+
return { job: await startUpdate(body.version) };
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
export { update_post as default };
|
|
41
|
+
//# sourceMappingURL=update.post.mjs.map
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const upload_post = defineApi((event, b) => {
|
|
29
33
|
const pane = String(getQuery(event).pane || "");
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const remove_post = defineApi(async (event, b) => {
|
|
30
34
|
if (typeof b.path !== "string" || !b.path.startsWith("/")) throw new HerdrError("bad_path", "Invalid path");
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const worktrees_get = defineApi(() => listWorktrees());
|
|
30
34
|
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const favicon_ico_get = defineEventHandler((event) => serveBranding(event, "favicon.ico"));
|
|
30
34
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as defineEventHandler,
|
|
1
|
+
import { d as defineEventHandler, br as getRouterParam } from '../../nitro/nitro.mjs';
|
|
2
2
|
import { s as serveBranding } from '../../_/branding.mjs';
|
|
3
3
|
import 'node:http';
|
|
4
4
|
import 'node:https';
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const _name__get = defineEventHandler((event) => serveBranding(event, `icons/${getRouterParam(event, "name") || ""}`));
|
|
30
34
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bA as useRuntimeConfig, bB as encodePath, bC as joinRelativeURL, bD as defineRenderHandler, i as getQuery, bE as createError, bF as destr, bG as getRouteRules, bH as relative, bI as joinURL, bJ as getResponseStatusText, bK as getResponseStatus, bL as useNitroApp } from '../nitro/nitro.mjs';
|
|
2
2
|
import { createHead as createHead$1, propsToString, renderSSRHead } from 'unhead/server';
|
|
3
3
|
import { isRef, toValue } from 'vue';
|
|
4
4
|
import { DeprecationsPlugin } from 'unhead/legacy';
|
|
@@ -28,8 +28,12 @@ import 'node:child_process';
|
|
|
28
28
|
import 'node:net';
|
|
29
29
|
import 'node:readline';
|
|
30
30
|
import 'node:fs/promises';
|
|
31
|
-
import 'node:
|
|
31
|
+
import 'node:dns';
|
|
32
|
+
import 'node:util';
|
|
33
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
34
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
32
35
|
import '@simplewebauthn/server';
|
|
36
|
+
import 'node:url';
|
|
33
37
|
|
|
34
38
|
const NUXT_RUNTIME_PAYLOAD_EXTRACTION = false;
|
|
35
39
|
const NUXT_SSR_STREAMING = false;
|
|
@@ -202,7 +206,7 @@ function encodeForwardSlashes(str) {
|
|
|
202
206
|
|
|
203
207
|
const renderSSRHeadOptions = {"omitLineBreaks":true};
|
|
204
208
|
|
|
205
|
-
const entryFileName = "
|
|
209
|
+
const entryFileName = "DoD7Qb5P.js";
|
|
206
210
|
|
|
207
211
|
//#region src/runtime/handlers/renderer.ts
|
|
208
212
|
globalThis.__buildAssetsURL = buildAssetsURL;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as defineEventHandler,
|
|
1
|
+
import { d as defineEventHandler, br as getRouterParam, bs as readUpload, s as sendError, z as sendImage } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const ____name__get = defineEventHandler(async (event) => {
|
|
29
33
|
try {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bt as defineWebSocketHandler } from '../../nitro/nitro.mjs';
|
|
2
2
|
import 'node:http';
|
|
3
3
|
import 'node:https';
|
|
4
4
|
import 'node:crypto';
|
|
@@ -22,8 +22,12 @@ import 'node:child_process';
|
|
|
22
22
|
import 'node:net';
|
|
23
23
|
import 'node:readline';
|
|
24
24
|
import 'node:fs/promises';
|
|
25
|
-
import 'node:
|
|
25
|
+
import 'node:dns';
|
|
26
|
+
import 'node:util';
|
|
27
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
26
29
|
import '@simplewebauthn/server';
|
|
30
|
+
import 'node:url';
|
|
27
31
|
|
|
28
32
|
const _____ = defineWebSocketHandler({
|
|
29
33
|
upgrade: () => new Response(null, { status: 403, statusText: "Forbidden" })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bt as defineWebSocketHandler, bu as eventClients, P as PANE_RE, bv as getStateJson } from '../../nitro/nitro.mjs';
|
|
2
2
|
import { u as unwatchPeer, m as messageText, w as watchPeer, i as isOpen, c as checkUpgrade } from '../../_/ws.mjs';
|
|
3
3
|
import 'node:http';
|
|
4
4
|
import 'node:https';
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const events = defineWebSocketHandler({
|
|
30
34
|
upgrade: (request) => checkUpgrade(request),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PANE_RE, n as machineOfPane, o as fmt, h as herdr,
|
|
1
|
+
import { P as PANE_RE, n as machineOfPane, o as fmt, h as herdr, aB as getState, by as mirrorSize, a5 as splitId, Q as log, bt as defineWebSocketHandler } from '../../nitro/nitro.mjs';
|
|
2
2
|
import { u as unwatchPeer, m as messageText, w as watchPeer, c as checkUpgrade, i as isOpen } from '../../_/ws.mjs';
|
|
3
3
|
import readline from 'node:readline';
|
|
4
4
|
import 'node:http';
|
|
@@ -23,8 +23,12 @@ import 'node:os';
|
|
|
23
23
|
import 'node:child_process';
|
|
24
24
|
import 'node:net';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const RECHECK_MS = 8e3;
|
|
30
34
|
const MAX_MIRRORS = 24;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bt as defineWebSocketHandler, bz as openTerm } from '../../nitro/nitro.mjs';
|
|
2
2
|
import { u as unwatchPeer, m as messageText, w as watchPeer, c as checkUpgrade, i as isOpen } from '../../_/ws.mjs';
|
|
3
3
|
import 'node:http';
|
|
4
4
|
import 'node:https';
|
|
@@ -23,8 +23,12 @@ import 'node:child_process';
|
|
|
23
23
|
import 'node:net';
|
|
24
24
|
import 'node:readline';
|
|
25
25
|
import 'node:fs/promises';
|
|
26
|
-
import 'node:
|
|
26
|
+
import 'node:dns';
|
|
27
|
+
import 'node:util';
|
|
28
|
+
import 'qrcode-terminal/vendor/QRCode/index.js';
|
|
29
|
+
import 'qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js';
|
|
27
30
|
import '@simplewebauthn/server';
|
|
31
|
+
import 'node:url';
|
|
28
32
|
|
|
29
33
|
const sessions = /* @__PURE__ */ new Map();
|
|
30
34
|
const term = defineWebSocketHandler({
|
|
@@ -45,11 +49,11 @@ const term = defineWebSocketHandler({
|
|
|
45
49
|
const raw = messageText(message);
|
|
46
50
|
if (raw) (_a = sessions.get(peer.id)) == null ? void 0 : _a.onMessage(raw);
|
|
47
51
|
},
|
|
48
|
-
close(peer) {
|
|
52
|
+
close(peer, details) {
|
|
49
53
|
unwatchPeer(peer);
|
|
50
54
|
const s = sessions.get(peer.id);
|
|
51
55
|
sessions.delete(peer.id);
|
|
52
|
-
s == null ? void 0 : s.onClose();
|
|
56
|
+
s == null ? void 0 : s.onClose((details == null ? void 0 : details.code) === 1e3);
|
|
53
57
|
}
|
|
54
58
|
});
|
|
55
59
|
|