@ghostlytools/cli 1.3.0 → 1.3.1
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/README.md +9 -3
- package/dist/assets/{api-CrxVxtY1.js → api-Dq2QXQDk.js} +141 -40
- package/dist/assets/api-Dq2QXQDk.js.map +1 -0
- package/dist/assets/{api-BiaX6l6f.js → api-TiB5QSG9.js} +2 -2
- package/dist/assets/{apiKit-CajiDxdK.js → apiKit-CA2x5GJF.js} +7 -3
- package/dist/assets/apiKit-CA2x5GJF.js.map +1 -0
- package/dist/assets/{apps-CbfiCSIw.js → apps-BxV9i_Y4.js} +3 -4
- package/dist/assets/{apps-CbfiCSIw.js.map → apps-BxV9i_Y4.js.map} +1 -1
- package/dist/assets/{apps-t23gkc28.js → apps-C-T8jeji.js} +1 -1
- package/dist/assets/{arkade-D4BVJFEQ.js → arkade-C_qDmHnm.js} +2 -2
- package/dist/assets/{arkade-D4BVJFEQ.js.map → arkade-C_qDmHnm.js.map} +1 -1
- package/dist/assets/{backup-Cg52WeQi.js → backup-Bugnn3Ue.js} +1 -1
- package/dist/assets/{backup-BAMi2lAq.js → backup-CnMN2oUK.js} +8 -8
- package/dist/assets/backup-CnMN2oUK.js.map +1 -0
- package/dist/assets/bark_ffi_wasm_bg-EY2uc0Bx.js.map +1 -1
- package/dist/assets/bitcoind-CZchoh43.js +349 -0
- package/dist/assets/bitcoind-CZchoh43.js.map +1 -0
- package/dist/assets/bitcoindProvider-DGw3xBSa.js +97 -0
- package/dist/assets/bitcoindProvider-DGw3xBSa.js.map +1 -0
- package/dist/assets/bitcoindevkit_bg-B-iLWrmX.js.map +1 -1
- package/dist/assets/buttons-Bj7Vf7Pn.js +2 -0
- package/dist/assets/{buttons-CX1pKB0j.js → buttons-CvNBzh2S.js} +4 -5
- package/dist/assets/{buttons-CX1pKB0j.js.map → buttons-CvNBzh2S.js.map} +1 -1
- package/dist/assets/{endpoint-Dn7H8qE1.js → endpoint-BOTFMpfS.js} +44 -12
- package/dist/assets/endpoint-BOTFMpfS.js.map +1 -0
- package/dist/assets/{envelope-BvU0fLEt.js → envelope-WjingYSc.js} +2 -2
- package/dist/assets/{envelope-BvU0fLEt.js.map → envelope-WjingYSc.js.map} +1 -1
- package/dist/assets/{errors-my6VJR_0.js → errors-DO5z6h_l.js} +29 -1
- package/dist/assets/errors-DO5z6h_l.js.map +1 -0
- package/dist/assets/groupFiles-IEUW3DQz.js +3202 -0
- package/dist/assets/groupFiles-IEUW3DQz.js.map +1 -0
- package/dist/assets/{host-Cmd205Dc.js → host-CWt-jtqz.js} +41 -16
- package/dist/assets/host-CWt-jtqz.js.map +1 -0
- package/dist/assets/{hyperdhtRelay-CEmBpT0Q.js → hyperdhtRelay-CPYwSLLS.js} +2 -3
- package/dist/assets/{hyperdhtRelay-CEmBpT0Q.js.map → hyperdhtRelay-CPYwSLLS.js.map} +1 -1
- package/dist/assets/{irohWeb--YyEA-hX.js → irohWeb-4oChIOIp.js} +2 -3
- package/dist/assets/{irohWeb--YyEA-hX.js.map → irohWeb-4oChIOIp.js.map} +1 -1
- package/dist/assets/{main-BzNN6bkx.js → main-DbqcdShN.js} +142 -35
- package/dist/assets/main-DbqcdShN.js.map +1 -0
- package/dist/assets/{mainline-D5D5C-jT.js → mainline-ZkiOnevs.js} +2 -2
- package/dist/assets/{mainline-D5D5C-jT.js.map → mainline-ZkiOnevs.js.map} +1 -1
- package/dist/assets/{networkReason-DxZWHw6v.js → networkReason-CetKkTPo.js} +2 -2
- package/dist/assets/{networkReason-DxZWHw6v.js.map → networkReason-CetKkTPo.js.map} +1 -1
- package/dist/assets/nwc-CgkqyvsE.js +612 -0
- package/dist/assets/nwc-CgkqyvsE.js.map +1 -0
- package/dist/assets/nwcProvider-4eVz_8HP.js +77 -0
- package/dist/assets/nwcProvider-4eVz_8HP.js.map +1 -0
- package/dist/assets/{profiles-B6F4oa9K.js → profiles-BHc9pEYg.js} +2 -2
- package/dist/assets/{profiles-B6F4oa9K.js.map → profiles-BHc9pEYg.js.map} +1 -1
- package/dist/assets/registry-DlAKO0Fy.js +3793 -0
- package/dist/assets/registry-DlAKO0Fy.js.map +1 -0
- package/dist/assets/registry-OBJBnHVQ.js +2 -0
- package/dist/assets/resolve-CouHhCpJ.js +591 -0
- package/dist/assets/resolve-CouHhCpJ.js.map +1 -0
- package/dist/assets/{server-CBCEYKMN.js → server-Ss0gJ-nw.js} +184 -1181
- package/dist/assets/server-Ss0gJ-nw.js.map +1 -0
- package/dist/assets/{src-DhfGgAUu.js → src-DDzSERyc.js} +2249 -72
- package/dist/assets/src-DDzSERyc.js.map +1 -0
- package/dist/assets/{turnRefs-ChEfgbSX.js → turnRefs-B87dtrHM.js} +2 -2
- package/dist/assets/{turnRefs-ChEfgbSX.js.map → turnRefs-B87dtrHM.js.map} +1 -1
- package/dist/assets/types-C4_KafL_.js +122 -0
- package/dist/assets/types-C4_KafL_.js.map +1 -0
- package/dist/assets/{usdt-C1Xao2xH.js → usdt-Fj8CQO2z.js} +3 -3
- package/dist/assets/{usdt-C1Xao2xH.js.map → usdt-Fj8CQO2z.js.map} +1 -1
- package/dist/ghostly.mjs +1 -1
- package/package.json +1 -1
- package/dist/assets/api-CrxVxtY1.js.map +0 -1
- package/dist/assets/apiKit-CajiDxdK.js.map +0 -1
- package/dist/assets/backup-BAMi2lAq.js.map +0 -1
- package/dist/assets/buttons-CWl2yNJu.js +0 -2
- package/dist/assets/endpoint-Dn7H8qE1.js.map +0 -1
- package/dist/assets/errors-my6VJR_0.js.map +0 -1
- package/dist/assets/groupFiles-BNTSDaoq.js +0 -7685
- package/dist/assets/groupFiles-BNTSDaoq.js.map +0 -1
- package/dist/assets/groupFiles-DBbjOLuD.js +0 -2088
- package/dist/assets/groupFiles-DBbjOLuD.js.map +0 -1
- package/dist/assets/host-Cmd205Dc.js.map +0 -1
- package/dist/assets/main-BzNN6bkx.js.map +0 -1
- package/dist/assets/server-CBCEYKMN.js.map +0 -1
- package/dist/assets/src-DhfGgAUu.js.map +0 -1
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { n as RESTORED_MARK, r as acquireLock } from "./profiles-B6F4oa9K.js";
|
|
1
|
+
import { Go as answersOffer, Jo as callSignalHeardAt, Ko as buildSdpFromSignal, Oi as isPublicAddress, Uo as CALL_SIGNAL_MAX_AGE_MS, Wo as RTC_CONFIG, Xo as parseCallSignal, Yo as extractParamsFromSdp, Zc as setLinkTraceSink, Zo as signalHasVideo, gl as fromBase64Url, ii as checkPushEndpoint, qo as callRtcConfig } from "./src-DDzSERyc.js";
|
|
2
|
+
import { a as fedimintSdkOn, r as irohRelayProblem } from "./irohWeb-4oChIOIp.js";
|
|
3
|
+
import { r as asCliError, t as CliError } from "./errors-DO5z6h_l.js";
|
|
4
|
+
import { a as findChat } from "./apiKit-CA2x5GJF.js";
|
|
5
|
+
import { _ as flushCardUpdates, c as paymentJson, d as nodeLocalFetch, f as chatJson, g as resumeHolds, h as groupMessageJson, l as reportAppFrames, m as groupJson, p as chatMessageJson, r as callApi, u as servedApps } from "./api-Dq2QXQDk.js";
|
|
6
|
+
import { n as RESTORED_MARK, r as acquireLock } from "./profiles-BHc9pEYg.js";
|
|
8
7
|
import { r as privateFolder, t as ownFolder } from "./privateFolder-Bk9C9oFv.js";
|
|
9
8
|
import { createRequire } from "node:module";
|
|
10
9
|
import { appendFileSync, chmodSync, closeSync, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync, writeSync } from "node:fs";
|
|
@@ -910,8 +909,12 @@ var CallManager = class {
|
|
|
910
909
|
calls = /* @__PURE__ */ new Map();
|
|
911
910
|
/** Per chat: the timestamp of the last signal handled. */
|
|
912
911
|
lastSignal = /* @__PURE__ */ new Map();
|
|
912
|
+
/** Per chat: the timestamp of the last signal sent (`stamp`). */
|
|
913
|
+
lastSent = /* @__PURE__ */ new Map();
|
|
913
914
|
/** Per chat: the timer that clears the hang-up signal. */
|
|
914
915
|
clearing = /* @__PURE__ */ new Map();
|
|
916
|
+
/** Per chat: when this side's last call there ended before it was answered (`CALL_PACE_MS`). */
|
|
917
|
+
unansweredAt = /* @__PURE__ */ new Map();
|
|
915
918
|
auto;
|
|
916
919
|
configPath;
|
|
917
920
|
stopping = false;
|
|
@@ -924,6 +927,15 @@ var CallManager = class {
|
|
|
924
927
|
get now() {
|
|
925
928
|
return (this.host.now ?? Date.now)();
|
|
926
929
|
}
|
|
930
|
+
/**
|
|
931
|
+
* A new signal's timestamp in a chat: now, or 1 ms after the last one sent there. The contact drops a signal no
|
|
932
|
+
* newer than the last it heard, so a redial or a hang-up in the same millisecond as the signal before it would be lost.
|
|
933
|
+
*/
|
|
934
|
+
stamp(chat) {
|
|
935
|
+
const ts = Math.max(this.now, (this.lastSent.get(chat) ?? 0) + 1);
|
|
936
|
+
this.lastSent.set(chat, ts);
|
|
937
|
+
return ts;
|
|
938
|
+
}
|
|
927
939
|
/** A signal the contact's app sent in a chat (the engine's `call-signal`). */
|
|
928
940
|
onSignal(chat, json) {
|
|
929
941
|
if (this.stopping) return;
|
|
@@ -1035,7 +1047,7 @@ var CallManager = class {
|
|
|
1035
1047
|
try {
|
|
1036
1048
|
const stack = await this.stack();
|
|
1037
1049
|
if (!await this.connect(call, (media) => CallMedia.offer(stack, media))) return;
|
|
1038
|
-
call.offerTs = this.
|
|
1050
|
+
call.offerTs = this.stamp(call.chat);
|
|
1039
1051
|
call.offering = true;
|
|
1040
1052
|
await this.send(call.chat, {
|
|
1041
1053
|
t: "o",
|
|
@@ -1059,7 +1071,7 @@ var CallManager = class {
|
|
|
1059
1071
|
if (!await this.connect(call, (media) => CallMedia.answer(stack, offer, media))) return;
|
|
1060
1072
|
await this.send(call.chat, {
|
|
1061
1073
|
t: "a",
|
|
1062
|
-
ts: this.
|
|
1074
|
+
ts: this.stamp(call.chat),
|
|
1063
1075
|
o: offer.ts,
|
|
1064
1076
|
...call.media.local,
|
|
1065
1077
|
v: 0
|
|
@@ -1122,6 +1134,7 @@ var CallManager = class {
|
|
|
1122
1134
|
async start(chat, options) {
|
|
1123
1135
|
const link = this.callable(chat);
|
|
1124
1136
|
if (this.byChat(link.id)) throw new CliError("busy", "A call is already on in this chat");
|
|
1137
|
+
this.paced(link.id);
|
|
1125
1138
|
const rate = rateOf(options.rate, this.auto.rate);
|
|
1126
1139
|
const stack = await this.stack();
|
|
1127
1140
|
if (this.byChat(link.id)) throw new CliError("busy", "A call is already on in this chat");
|
|
@@ -1130,7 +1143,7 @@ var CallManager = class {
|
|
|
1130
1143
|
await this.attach(call, (media) => CallMedia.offer(stack, media));
|
|
1131
1144
|
if (call.reason === "crossed") throw new CliError("busy", "The contact called at the same time: their call rings here");
|
|
1132
1145
|
if (call.ended) throw new CliError("unavailable", "The call ended before it was placed");
|
|
1133
|
-
call.offerTs = this.
|
|
1146
|
+
call.offerTs = this.stamp(link.id);
|
|
1134
1147
|
call.offering = true;
|
|
1135
1148
|
await this.send(link.id, {
|
|
1136
1149
|
t: "o",
|
|
@@ -1168,7 +1181,7 @@ var CallManager = class {
|
|
|
1168
1181
|
if (call.ended) throw new CliError("unavailable", "The call ended before it was answered");
|
|
1169
1182
|
await this.send(call.chat, {
|
|
1170
1183
|
t: "a",
|
|
1171
|
-
ts: this.
|
|
1184
|
+
ts: this.stamp(call.chat),
|
|
1172
1185
|
o: call.offer.ts,
|
|
1173
1186
|
...call.media.local,
|
|
1174
1187
|
v: 0
|
|
@@ -1388,6 +1401,7 @@ var CallManager = class {
|
|
|
1388
1401
|
this.disarm(call);
|
|
1389
1402
|
if (call.watcher) clearInterval(call.watcher);
|
|
1390
1403
|
this.calls.delete(call.id);
|
|
1404
|
+
if (call.direction === "out" && call.connectedAt === null && call.state === "ringing" && (reason === "hangup" || reason === "unanswered")) this.unansweredAt.set(call.chat, this.now);
|
|
1391
1405
|
if (report) process.stderr.write(`ghostly: call ${call.id}: ended (${reason})${call.media ? `, ice ${call.media.ice.state}` : ""}\n`);
|
|
1392
1406
|
call.media?.close();
|
|
1393
1407
|
this.stopEarly(call);
|
|
@@ -1397,7 +1411,7 @@ var CallManager = class {
|
|
|
1397
1411
|
if (tell) {
|
|
1398
1412
|
await this.send(call.chat, {
|
|
1399
1413
|
t: "h",
|
|
1400
|
-
ts: this.
|
|
1414
|
+
ts: this.stamp(call.chat)
|
|
1401
1415
|
}).catch(() => {});
|
|
1402
1416
|
if (!this.stopping) {
|
|
1403
1417
|
const timer = setTimeout(() => {
|
|
@@ -1416,6 +1430,17 @@ var CallManager = class {
|
|
|
1416
1430
|
...call.connectedAt !== null ? { duration: this.now - call.connectedAt } : {}
|
|
1417
1431
|
});
|
|
1418
1432
|
}
|
|
1433
|
+
/** Refuses a call placed too soon after this side's last unanswered one in the chat (`CALL_PACE_MS`). */
|
|
1434
|
+
paced(chat) {
|
|
1435
|
+
const pace = this.host.callPaceMs ?? 2e3, last = this.unansweredAt.get(chat);
|
|
1436
|
+
if (!pace || last === void 0) return;
|
|
1437
|
+
const left = last + pace - this.now;
|
|
1438
|
+
if (left <= 0) {
|
|
1439
|
+
this.unansweredAt.delete(chat);
|
|
1440
|
+
return;
|
|
1441
|
+
}
|
|
1442
|
+
throw new CliError("busy", `Your last call in this chat ended unanswered a moment ago: call again in ${Math.ceil(left / 100) / 10} s`, { retryAfterMs: left });
|
|
1443
|
+
}
|
|
1419
1444
|
arm(call, ms, reason, tell) {
|
|
1420
1445
|
this.disarm(call);
|
|
1421
1446
|
call.timer = setTimeout(() => void this.end(call, reason, tell), ms);
|
|
@@ -4358,14 +4383,14 @@ async function startRuntime(paths, options = {}) {
|
|
|
4358
4383
|
(await import("./ghostly_iroh_web-Dvzh3Y6E.js")).initSync({ module: irohWasmBytes() });
|
|
4359
4384
|
const [{ registerFileBytes }, { NodeFileBytes }] = await Promise.all([import("./fileBytes-CgbibpbV.js"), import("./fileBytes-CfSXjTFa.js")]);
|
|
4360
4385
|
registerFileBytes("native", async () => new NodeFileBytes(paths.files), true);
|
|
4361
|
-
const [{ EngineServer }, { createHyperEndpoint }] = await Promise.all([import("./server-
|
|
4386
|
+
const [{ EngineServer }, { createHyperEndpoint }] = await Promise.all([import("./server-Ss0gJ-nw.js"), import("./endpoint-BOTFMpfS.js")]);
|
|
4362
4387
|
const network = hyperdhtNetwork();
|
|
4363
4388
|
const dht = mainlineNetwork();
|
|
4364
|
-
const mainline = dht.off ? null : new (await (import("./mainline-
|
|
4389
|
+
const mainline = dht.off ? null : new (await (import("./mainline-ZkiOnevs.js"))).Mainline({
|
|
4365
4390
|
bootstrap: dht.bootstrap,
|
|
4366
4391
|
host: dht.host
|
|
4367
4392
|
});
|
|
4368
|
-
const transport = mainline || pinned ? new (await (import("./mainline-
|
|
4393
|
+
const transport = mainline || pinned ? new (await (import("./mainline-ZkiOnevs.js"))).RelaysAndDht(mainline, pinned ? { relays: pinned } : {}, !!pinned) : null;
|
|
4369
4394
|
const apps = servedApps(paths.dir).length > 0;
|
|
4370
4395
|
const server = new EngineServer({
|
|
4371
4396
|
...transport ? { transport } : {},
|
|
@@ -4645,4 +4670,4 @@ function connection(ctx, socket) {
|
|
|
4645
4670
|
//#endregion
|
|
4646
4671
|
export { BASELINE_NEWEST, MAX_LINE, keepServing, openHost, serve };
|
|
4647
4672
|
|
|
4648
|
-
//# sourceMappingURL=host-
|
|
4673
|
+
//# sourceMappingURL=host-CWt-jtqz.js.map
|