@kraki/head 0.14.5 → 0.15.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/dist/auth-backend.d.ts +2 -3
- package/dist/local-auth-backend.d.ts +0 -1
- package/dist/local-auth-backend.js +0 -13
- package/dist/local-auth-backend.js.map +1 -1
- package/dist/pulse-hub.d.ts +92 -0
- package/dist/pulse-hub.js +194 -0
- package/dist/pulse-hub.js.map +1 -0
- package/dist/server.d.ts +43 -40
- package/dist/server.js +212 -407
- package/dist/server.js.map +1 -1
- package/dist/storage.d.ts +5 -10
- package/dist/storage.js +11 -45
- package/dist/storage.js.map +1 -1
- package/package.json +3 -2
package/dist/auth-backend.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* HeadServer uses this interface so it doesn't care whether auth happens
|
|
8
8
|
* locally or remotely — same code path for both standalone and connected mode.
|
|
9
9
|
*/
|
|
10
|
-
import type { AuthMethod, DeviceInfo, DeviceSummary
|
|
10
|
+
import type { AuthMethod, DeviceInfo, DeviceSummary } from '@kraki/protocol';
|
|
11
11
|
export interface AuthResult {
|
|
12
12
|
ok: true;
|
|
13
13
|
userId: string;
|
|
@@ -22,7 +22,6 @@ export interface AuthResult {
|
|
|
22
22
|
region?: string;
|
|
23
23
|
};
|
|
24
24
|
devices: DeviceSummary[];
|
|
25
|
-
pendingMessages: UnicastEnvelope[];
|
|
26
25
|
githubClientId?: string;
|
|
27
26
|
vapidPublicKey?: string;
|
|
28
27
|
}
|
|
@@ -49,7 +48,7 @@ export type ChallengeOutcome = AuthChallengeResult | AuthRegionMismatch | AuthEr
|
|
|
49
48
|
export interface AuthBackend {
|
|
50
49
|
/**
|
|
51
50
|
* Full auth flow (token-based methods: github_token, github_oauth, apikey, open, pairing).
|
|
52
|
-
* Returns the full auth result including device list
|
|
51
|
+
* Returns the full auth result including device list.
|
|
53
52
|
*/
|
|
54
53
|
authenticate(auth: AuthMethod, device: DeviceInfo, headRegion?: string): Promise<AuthOutcome>;
|
|
55
54
|
/**
|
|
@@ -98,7 +98,6 @@ export class LocalAuthBackend {
|
|
|
98
98
|
region: user.region,
|
|
99
99
|
},
|
|
100
100
|
devices: this.getDeviceSummaries(user.userId),
|
|
101
|
-
pendingMessages: this.flushPending(deviceId),
|
|
102
101
|
githubClientId: this.getGitHubClientId(),
|
|
103
102
|
vapidPublicKey: this.getVapidPublicKey(),
|
|
104
103
|
};
|
|
@@ -331,7 +330,6 @@ export class LocalAuthBackend {
|
|
|
331
330
|
region: fullUser?.region,
|
|
332
331
|
},
|
|
333
332
|
devices: this.getDeviceSummaries(authUser.id),
|
|
334
|
-
pendingMessages: this.flushPending(deviceId),
|
|
335
333
|
githubClientId: this.getGitHubClientId(),
|
|
336
334
|
vapidPublicKey: this.getVapidPublicKey(),
|
|
337
335
|
};
|
|
@@ -444,16 +442,5 @@ export class LocalAuthBackend {
|
|
|
444
442
|
createdAt: d.createdAt,
|
|
445
443
|
}));
|
|
446
444
|
}
|
|
447
|
-
flushPending(deviceId) {
|
|
448
|
-
const rows = this.storage.flushPending(deviceId);
|
|
449
|
-
const envelopes = [];
|
|
450
|
-
for (const raw of rows) {
|
|
451
|
-
try {
|
|
452
|
-
envelopes.push(JSON.parse(raw));
|
|
453
|
-
}
|
|
454
|
-
catch { /* skip malformed */ }
|
|
455
|
-
}
|
|
456
|
-
return envelopes;
|
|
457
|
-
}
|
|
458
445
|
}
|
|
459
446
|
//# sourceMappingURL=local-auth-backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-auth-backend.js","sourceRoot":"","sources":["../src/local-auth-backend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-auth-backend.js","sourceRoot":"","sources":["../src/local-auth-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PulseHub — head as a per-hop pulse endpoint hub.
|
|
3
|
+
*
|
|
4
|
+
* pulse is a reliable-WebSocket-replacement layer. Under the per-hop model the
|
|
5
|
+
* relay is a pulse endpoint on *each* connection: every connected device gets
|
|
6
|
+
* its own {@link Endpoint} here. When a device sends a pulse-framed envelope,
|
|
7
|
+
* the hub feeds the frame to that device's endpoint and carries out the effects:
|
|
8
|
+
*
|
|
9
|
+
* - `deliver` → the reliable app payload arrived from this device; forward it
|
|
10
|
+
* onto the DESTINATION device's endpoint (store-and-forward
|
|
11
|
+
* bridge). Routing (which device) is the hub's job, not pulse's.
|
|
12
|
+
* - `store` / `unstore` → persist / delete the outbox entry in SQLite, so a
|
|
13
|
+
* durable message survives the destination being offline AND a
|
|
14
|
+
* restart of head itself.
|
|
15
|
+
* - `transmit` → send control/resend bytes back to the SOURCE device.
|
|
16
|
+
*
|
|
17
|
+
* The hub reads only the pulse frame header (seq/ack/durable) — the frame's
|
|
18
|
+
* payload segment is the opaque E2E ciphertext, never decrypted here.
|
|
19
|
+
*
|
|
20
|
+
* Only envelopes carrying a `pulse` field reach the hub; plain broadcast/unicast
|
|
21
|
+
* envelopes keep the fire-and-forget path.
|
|
22
|
+
*/
|
|
23
|
+
import type Database from 'better-sqlite3';
|
|
24
|
+
import { decodeFrame, encodeFrame } from '@coinfra/pulse';
|
|
25
|
+
import { type PulseFrameField, type UnicastEnvelope } from '@kraki/protocol';
|
|
26
|
+
/** How the hub reaches out: send bytes to a device, and resolve where a
|
|
27
|
+
* delivered payload should be forwarded. Injected so the hub stays decoupled
|
|
28
|
+
* from the WebSocket layer and testable. */
|
|
29
|
+
export interface PulseHubHost {
|
|
30
|
+
/** Send a pulse-framed envelope's `pulse` string to `deviceId` if online.
|
|
31
|
+
* Returns true if the device is currently connected. */
|
|
32
|
+
sendPulseTo(deviceId: string, pulseB64: string): boolean;
|
|
33
|
+
/** Fan-out targets for a BROADCAST from `fromDevice`: the other devices of the
|
|
34
|
+
* same user that the delivered payload should be forwarded to. (A tentacle
|
|
35
|
+
* broadcasts to all the user's apps; an app that broadcasts, to the
|
|
36
|
+
* tentacles.) Empty for a pure unicast (routing comes from `to` instead). */
|
|
37
|
+
broadcastTargets(fromDevice: string): string[];
|
|
38
|
+
/** A delivered payload was addressed to the head itself (HEAD_PULSE_TARGET),
|
|
39
|
+
* not a forward destination. The payload is PLAINTEXT control JSON; hand it to
|
|
40
|
+
* head's own control dispatch, resolving `fromDevice` → its authenticated
|
|
41
|
+
* connection/state. */
|
|
42
|
+
onDeliverToSelf(fromDevice: string, payload: Uint8Array): void;
|
|
43
|
+
now(): number;
|
|
44
|
+
}
|
|
45
|
+
export declare class PulseHub {
|
|
46
|
+
private readonly db;
|
|
47
|
+
private readonly host;
|
|
48
|
+
private readonly devices;
|
|
49
|
+
constructor(db: Database.Database, host: PulseHubHost);
|
|
50
|
+
private initSchema;
|
|
51
|
+
/** Ensure an endpoint exists for a device (restoring from SQLite if present).
|
|
52
|
+
* head endpoints are durable-supported (head is always-on + has disk). */
|
|
53
|
+
private ep;
|
|
54
|
+
/** A device connected — bring up its endpoint (resume any persisted stream). */
|
|
55
|
+
onDeviceConnected(deviceId: string): void;
|
|
56
|
+
/** A device disconnected — its endpoint's outbox persists for resume. */
|
|
57
|
+
onDeviceDisconnected(deviceId: string): void;
|
|
58
|
+
/** Periodic tick for all endpoints (heartbeat, liveness, durable expiry). */
|
|
59
|
+
tick(): void;
|
|
60
|
+
/**
|
|
61
|
+
* A pulse-framed envelope arrived from `fromDevice`. `env.to` (for unicast) is
|
|
62
|
+
* the routing destination the delivered payload should be forwarded to. Feed
|
|
63
|
+
* the frame to the source endpoint and carry out the effects.
|
|
64
|
+
*/
|
|
65
|
+
onPulseEnvelope(fromDevice: string, env: PulseFrameField & {
|
|
66
|
+
to?: string;
|
|
67
|
+
}): void;
|
|
68
|
+
private run;
|
|
69
|
+
/** Forward a payload onto the destination device's outbound endpoint. If the
|
|
70
|
+
* destination is offline, the pulse endpoint keeps it in its outbox (durable
|
|
71
|
+
* → also persisted to SQLite via the store effect) and resends on reconnect. */
|
|
72
|
+
private forward;
|
|
73
|
+
/** Head-ORIGINATED reliable send to a device (presence / preferences / voice
|
|
74
|
+
* responses). Same mechanism as `forward`, but the payload originates at the
|
|
75
|
+
* head rather than being relayed from another device. Non-durable by default:
|
|
76
|
+
* head-originated control (e.g. "device X joined") is ephemeral and must not
|
|
77
|
+
* be redelivered stale after the target reconnects. */
|
|
78
|
+
sendToDevice(destDevice: string, payload: Uint8Array, opts?: {
|
|
79
|
+
durable?: boolean;
|
|
80
|
+
}): void;
|
|
81
|
+
private storeOutbox;
|
|
82
|
+
private unstoreOutbox;
|
|
83
|
+
private saveSnapshot;
|
|
84
|
+
private loadSnapshot;
|
|
85
|
+
/** On head boot, rebuild endpoints from persisted snapshots so durable
|
|
86
|
+
* outbox entries resume delivery once their destination reconnects. */
|
|
87
|
+
recoverOnBoot(): void;
|
|
88
|
+
/** Test/introspection: how many durable rows are held for a device. */
|
|
89
|
+
outboxCount(device: string): number;
|
|
90
|
+
}
|
|
91
|
+
export { decodeFrame, encodeFrame };
|
|
92
|
+
export type { UnicastEnvelope };
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PulseHub — head as a per-hop pulse endpoint hub.
|
|
3
|
+
*
|
|
4
|
+
* pulse is a reliable-WebSocket-replacement layer. Under the per-hop model the
|
|
5
|
+
* relay is a pulse endpoint on *each* connection: every connected device gets
|
|
6
|
+
* its own {@link Endpoint} here. When a device sends a pulse-framed envelope,
|
|
7
|
+
* the hub feeds the frame to that device's endpoint and carries out the effects:
|
|
8
|
+
*
|
|
9
|
+
* - `deliver` → the reliable app payload arrived from this device; forward it
|
|
10
|
+
* onto the DESTINATION device's endpoint (store-and-forward
|
|
11
|
+
* bridge). Routing (which device) is the hub's job, not pulse's.
|
|
12
|
+
* - `store` / `unstore` → persist / delete the outbox entry in SQLite, so a
|
|
13
|
+
* durable message survives the destination being offline AND a
|
|
14
|
+
* restart of head itself.
|
|
15
|
+
* - `transmit` → send control/resend bytes back to the SOURCE device.
|
|
16
|
+
*
|
|
17
|
+
* The hub reads only the pulse frame header (seq/ack/durable) — the frame's
|
|
18
|
+
* payload segment is the opaque E2E ciphertext, never decrypted here.
|
|
19
|
+
*
|
|
20
|
+
* Only envelopes carrying a `pulse` field reach the hub; plain broadcast/unicast
|
|
21
|
+
* envelopes keep the fire-and-forget path.
|
|
22
|
+
*/
|
|
23
|
+
import { decodeFrame, encodeFrame, Endpoint } from '@coinfra/pulse';
|
|
24
|
+
import { HEAD_PULSE_TARGET } from '@kraki/protocol';
|
|
25
|
+
const b64encode = (u) => Buffer.from(u).toString('base64');
|
|
26
|
+
const b64decode = (s) => new Uint8Array(Buffer.from(s, 'base64'));
|
|
27
|
+
export class PulseHub {
|
|
28
|
+
db;
|
|
29
|
+
host;
|
|
30
|
+
devices = new Map();
|
|
31
|
+
constructor(db, host) {
|
|
32
|
+
this.db = db;
|
|
33
|
+
this.host = host;
|
|
34
|
+
this.initSchema();
|
|
35
|
+
}
|
|
36
|
+
initSchema() {
|
|
37
|
+
this.db.exec(`CREATE TABLE IF NOT EXISTS pulse_outbox (
|
|
38
|
+
device TEXT NOT NULL, seq TEXT NOT NULL, payload BLOB NOT NULL,
|
|
39
|
+
dest TEXT NOT NULL, durable_dest INTEGER NOT NULL DEFAULT 0,
|
|
40
|
+
PRIMARY KEY (device, seq))`);
|
|
41
|
+
this.db.exec(`CREATE TABLE IF NOT EXISTS pulse_meta (
|
|
42
|
+
device TEXT PRIMARY KEY, snapshot TEXT NOT NULL)`);
|
|
43
|
+
}
|
|
44
|
+
/** Ensure an endpoint exists for a device (restoring from SQLite if present).
|
|
45
|
+
* head endpoints are durable-supported (head is always-on + has disk). */
|
|
46
|
+
ep(deviceId) {
|
|
47
|
+
let d = this.devices.get(deviceId);
|
|
48
|
+
if (!d) {
|
|
49
|
+
const restore = this.loadSnapshot(deviceId);
|
|
50
|
+
const endpoint = new Endpoint({
|
|
51
|
+
epoch: restore?.epoch ?? `head:${deviceId}:${this.host.now()}`,
|
|
52
|
+
durable: { supported: true },
|
|
53
|
+
restore,
|
|
54
|
+
});
|
|
55
|
+
d = { endpoint };
|
|
56
|
+
this.devices.set(deviceId, d);
|
|
57
|
+
}
|
|
58
|
+
return d;
|
|
59
|
+
}
|
|
60
|
+
/** A device connected — bring up its endpoint (resume any persisted stream). */
|
|
61
|
+
onDeviceConnected(deviceId) {
|
|
62
|
+
const d = this.ep(deviceId);
|
|
63
|
+
this.run(deviceId, d.endpoint.onConnected(this.host.now()));
|
|
64
|
+
this.saveSnapshot(deviceId);
|
|
65
|
+
}
|
|
66
|
+
/** A device disconnected — its endpoint's outbox persists for resume. */
|
|
67
|
+
onDeviceDisconnected(deviceId) {
|
|
68
|
+
const d = this.devices.get(deviceId);
|
|
69
|
+
if (!d)
|
|
70
|
+
return;
|
|
71
|
+
d.endpoint.onDisconnected(this.host.now());
|
|
72
|
+
}
|
|
73
|
+
/** Periodic tick for all endpoints (heartbeat, liveness, durable expiry). */
|
|
74
|
+
tick() {
|
|
75
|
+
const now = this.host.now();
|
|
76
|
+
for (const [deviceId, d] of this.devices) {
|
|
77
|
+
this.run(deviceId, d.endpoint.onTick(now));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A pulse-framed envelope arrived from `fromDevice`. `env.to` (for unicast) is
|
|
82
|
+
* the routing destination the delivered payload should be forwarded to. Feed
|
|
83
|
+
* the frame to the source endpoint and carry out the effects.
|
|
84
|
+
*/
|
|
85
|
+
onPulseEnvelope(fromDevice, env) {
|
|
86
|
+
if (!env.pulse)
|
|
87
|
+
return;
|
|
88
|
+
const d = this.ep(fromDevice);
|
|
89
|
+
// A frame addressed to HEAD_PULSE_TARGET is consumed by the head itself, not
|
|
90
|
+
// forwarded to a device. It still rides the source endpoint (same seq/ack/
|
|
91
|
+
// resume as everything else) — only the `deliver` handling differs.
|
|
92
|
+
const selfBound = env.to === HEAD_PULSE_TARGET;
|
|
93
|
+
// Destinations for anything this device delivers: an explicit unicast `to`,
|
|
94
|
+
// or (for a broadcast) the fan-out targets from the host. '@head' is a
|
|
95
|
+
// routing sentinel, never a forward destination.
|
|
96
|
+
const dests = selfBound
|
|
97
|
+
? []
|
|
98
|
+
: (env.to ? [env.to] : this.host.broadcastTargets(fromDevice));
|
|
99
|
+
this.run(fromDevice, d.endpoint.onBytes(b64decode(env.pulse), this.host.now()), dests, selfBound);
|
|
100
|
+
this.saveSnapshot(fromDevice);
|
|
101
|
+
}
|
|
102
|
+
// ── Effect execution ────────────────────────────────────────────────────────
|
|
103
|
+
run(deviceId, effects, dests, selfBound = false) {
|
|
104
|
+
for (const e of effects) {
|
|
105
|
+
switch (e.t) {
|
|
106
|
+
case 'transmit':
|
|
107
|
+
// Control/resend bytes go back to this device.
|
|
108
|
+
this.host.sendPulseTo(deviceId, b64encode(e.bytes));
|
|
109
|
+
break;
|
|
110
|
+
case 'deliver':
|
|
111
|
+
if (selfBound) {
|
|
112
|
+
// Terminus at head: consume the plaintext control payload with the
|
|
113
|
+
// source connection's auth context, instead of forwarding.
|
|
114
|
+
this.host.onDeliverToSelf(deviceId, e.payload);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Store-and-forward bridge: forward the reliable payload onto each
|
|
118
|
+
// destination device's endpoint, preserving the durable intent.
|
|
119
|
+
for (const dest of dests ?? [])
|
|
120
|
+
this.forward(dest, e.payload, e.durable);
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
case 'store':
|
|
124
|
+
this.storeOutbox(deviceId, e.seq, e.payload, (dests ?? []).join(','));
|
|
125
|
+
break;
|
|
126
|
+
case 'unstore':
|
|
127
|
+
this.unstoreOutbox(deviceId, e.seqUpTo);
|
|
128
|
+
break;
|
|
129
|
+
// reset-inbound / acked / open / close: nothing for the hub to do —
|
|
130
|
+
// acked pruning already emits unstore; open/close are driven by the WS.
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** Forward a payload onto the destination device's outbound endpoint. If the
|
|
135
|
+
* destination is offline, the pulse endpoint keeps it in its outbox (durable
|
|
136
|
+
* → also persisted to SQLite via the store effect) and resends on reconnect. */
|
|
137
|
+
forward(destDevice, payload, durable) {
|
|
138
|
+
const d = this.ep(destDevice);
|
|
139
|
+
const { effects } = d.endpoint.send(payload, { durable });
|
|
140
|
+
// The destination endpoint's transmits go to the destination device; its
|
|
141
|
+
// deliveries would bridge back (not used in one-way flows). No secondary
|
|
142
|
+
// dest — a forwarded message is terminal at the destination device.
|
|
143
|
+
this.run(destDevice, effects, undefined);
|
|
144
|
+
this.saveSnapshot(destDevice);
|
|
145
|
+
}
|
|
146
|
+
/** Head-ORIGINATED reliable send to a device (presence / preferences / voice
|
|
147
|
+
* responses). Same mechanism as `forward`, but the payload originates at the
|
|
148
|
+
* head rather than being relayed from another device. Non-durable by default:
|
|
149
|
+
* head-originated control (e.g. "device X joined") is ephemeral and must not
|
|
150
|
+
* be redelivered stale after the target reconnects. */
|
|
151
|
+
sendToDevice(destDevice, payload, opts) {
|
|
152
|
+
this.forward(destDevice, payload, opts?.durable ?? false);
|
|
153
|
+
}
|
|
154
|
+
// ── SQLite persistence ──────────────────────────────────────────────────────
|
|
155
|
+
storeOutbox(device, seq, payload, dest) {
|
|
156
|
+
this.db
|
|
157
|
+
.prepare('INSERT OR REPLACE INTO pulse_outbox (device, seq, payload, dest) VALUES (?, ?, ?, ?)')
|
|
158
|
+
.run(device, seq.toString(), Buffer.from(payload), dest ?? '');
|
|
159
|
+
}
|
|
160
|
+
unstoreOutbox(device, seqUpTo) {
|
|
161
|
+
this.db
|
|
162
|
+
.prepare('DELETE FROM pulse_outbox WHERE device = ? AND CAST(seq AS INTEGER) <= ?')
|
|
163
|
+
.run(device, Number(seqUpTo));
|
|
164
|
+
}
|
|
165
|
+
saveSnapshot(device) {
|
|
166
|
+
const d = this.devices.get(device);
|
|
167
|
+
if (!d)
|
|
168
|
+
return;
|
|
169
|
+
this.db
|
|
170
|
+
.prepare('INSERT OR REPLACE INTO pulse_meta (device, snapshot) VALUES (?, ?)')
|
|
171
|
+
.run(device, JSON.stringify(d.endpoint.snapshot()));
|
|
172
|
+
}
|
|
173
|
+
loadSnapshot(device) {
|
|
174
|
+
const row = this.db.prepare('SELECT snapshot FROM pulse_meta WHERE device = ?').get(device);
|
|
175
|
+
return row ? JSON.parse(row.snapshot) : undefined;
|
|
176
|
+
}
|
|
177
|
+
/** On head boot, rebuild endpoints from persisted snapshots so durable
|
|
178
|
+
* outbox entries resume delivery once their destination reconnects. */
|
|
179
|
+
recoverOnBoot() {
|
|
180
|
+
const rows = this.db.prepare('SELECT device FROM pulse_meta').all();
|
|
181
|
+
for (const { device } of rows)
|
|
182
|
+
this.ep(device); // constructs + restores
|
|
183
|
+
}
|
|
184
|
+
/** Test/introspection: how many durable rows are held for a device. */
|
|
185
|
+
outboxCount(device) {
|
|
186
|
+
const row = this.db
|
|
187
|
+
.prepare('SELECT COUNT(*) AS n FROM pulse_outbox WHERE device = ?')
|
|
188
|
+
.get(device);
|
|
189
|
+
return row.n;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Re-export the frame codec for the server to build/inspect pulse envelopes.
|
|
193
|
+
export { decodeFrame, encodeFrame };
|
|
194
|
+
//# sourceMappingURL=pulse-hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulse-hub.js","sourceRoot":"","sources":["../src/pulse-hub.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -50,32 +50,21 @@ export declare class HeadServer {
|
|
|
50
50
|
private userByDevice;
|
|
51
51
|
private clients;
|
|
52
52
|
private pingTimer;
|
|
53
|
-
private
|
|
53
|
+
private livenessTimer;
|
|
54
|
+
/** Per-hop pulse hub — the reliable-delivery layer for every connection. */
|
|
55
|
+
private pulseHub;
|
|
56
|
+
private pulseTickTimer;
|
|
54
57
|
constructor(storage: Storage, options: HeadServerOptions);
|
|
55
58
|
private startPingInterval;
|
|
56
|
-
/** Run the
|
|
57
|
-
* ping.
|
|
58
|
-
*
|
|
59
|
-
private
|
|
60
|
-
/**
|
|
61
|
-
*
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
* (e.g. a forwarded unicast/broadcast), they are stripped — these are
|
|
66
|
-
* per-hop and not end-to-end. */
|
|
67
|
-
private trackedSend;
|
|
68
|
-
/** Track an incoming relaySeq from peer. Returns true if message is a
|
|
69
|
-
* duplicate that should be dropped silently. */
|
|
70
|
-
private trackInboundRelaySeq;
|
|
71
|
-
/** Process an incoming ack field from any message type. Prunes the in-flight
|
|
72
|
-
* buffer and flips ackSupported on first sighting. */
|
|
73
|
-
private processAck;
|
|
74
|
-
/** Walk all connections; re-send unacked messages that have aged past
|
|
75
|
-
* RETRY_AFTER_MS. When MAX_RETRIES is exceeded, mark the entry giveUp
|
|
76
|
-
* but keep the connection alive — liveness is decided by the 30s
|
|
77
|
-
* protocol-level ping/pong, not by delivery-retry exhaustion. */
|
|
78
|
-
private runRetryPass;
|
|
59
|
+
/** Run the liveness sweep at a fixed cadence, independent of the slower
|
|
60
|
+
* 30s ping timer. Broadcasts device_pending when a peer's pong is overdue
|
|
61
|
+
* so other devices see the "maybe offline" state quickly. */
|
|
62
|
+
private startLivenessSweep;
|
|
63
|
+
/** Broadcast device_pending for any authenticated connection whose pong has
|
|
64
|
+
* gone overdue (and we haven't already broadcast for this ping cycle). */
|
|
65
|
+
private runLivenessSweep;
|
|
66
|
+
/** Test hook: force a liveness sweep without waiting for the timer. */
|
|
67
|
+
forceLivenessSweep(): void;
|
|
79
68
|
private getAuthProvider;
|
|
80
69
|
private getAuthProviderForMode;
|
|
81
70
|
private getGitHubClientId;
|
|
@@ -97,8 +86,35 @@ export declare class HeadServer {
|
|
|
97
86
|
private onConnection;
|
|
98
87
|
private onMessage;
|
|
99
88
|
private handleRequestVoiceLease;
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
/** Send a pulse frame (control or forwarded data) to a device's socket, as a
|
|
90
|
+
* minimal unicast envelope carrying only the `pulse` field. Returns true if
|
|
91
|
+
* the device is online. Used by the PulseHub to reach endpoints. */
|
|
92
|
+
private sendPulseFrameTo;
|
|
93
|
+
/** Send a head-ORIGINATED control message to a device reliably over pulse
|
|
94
|
+
* (presence, preferences confirmation, voice responses). These are plaintext
|
|
95
|
+
* head↔device control (the head has no E2E on them), so the payload is
|
|
96
|
+
* wrapped as `{from:'@head', msg}` — the receiver's pulse layer recognizes the
|
|
97
|
+
* `@head` marker and dispatches `msg` WITHOUT decrypting. Non-durable:
|
|
98
|
+
* presence/prefs are ephemeral. */
|
|
99
|
+
private sendControlToDevice;
|
|
100
|
+
/** A pulse frame addressed to HEAD_PULSE_TARGET was delivered in-order by the
|
|
101
|
+
* source device's endpoint. The payload is PLAINTEXT control JSON. Resolve the
|
|
102
|
+
* originating authenticated connection and route it through the SAME control
|
|
103
|
+
* handlers the raw-WS path uses, so auth context (state.userId/deviceId) and
|
|
104
|
+
* responses (over ws) are identical. */
|
|
105
|
+
private deliverPulseToSelf;
|
|
106
|
+
/** The relay-terminated control ops, callable from BOTH the raw-WS dispatch
|
|
107
|
+
* (onMessage) and the pulse deliver-to-self path. Returns true if handled. */
|
|
108
|
+
private handleControlMessage;
|
|
109
|
+
/** Persist a preferences update and echo the merged result to the sender + the
|
|
110
|
+
* user's other online devices. */
|
|
111
|
+
private handleUpdatePreferences;
|
|
112
|
+
/** Fan-out targets for a pulse broadcast from `fromDevice`: all OTHER devices
|
|
113
|
+
* of the same user (the online ones the hub can forward to). */
|
|
114
|
+
private pulseBroadcastTargets;
|
|
115
|
+
/** Notify offline devices from a pushPreview side-channel. The preview rides the
|
|
116
|
+
* same pulse broadcast envelope as the reliable message. */
|
|
117
|
+
private firePushPreview;
|
|
102
118
|
private removeConnection;
|
|
103
119
|
private sendAuthError;
|
|
104
120
|
private handleAuth;
|
|
@@ -144,8 +160,6 @@ export declare class HeadServer {
|
|
|
144
160
|
private onPongReceived;
|
|
145
161
|
private getDeviceSummaries;
|
|
146
162
|
private sendError;
|
|
147
|
-
/** Flush pending messages from SQLite, parse into envelope objects. */
|
|
148
|
-
private flushPendingEnvelopes;
|
|
149
163
|
getStats(): {
|
|
150
164
|
users: {
|
|
151
165
|
total: number;
|
|
@@ -181,17 +195,6 @@ export declare class HeadServer {
|
|
|
181
195
|
}>;
|
|
182
196
|
}>;
|
|
183
197
|
};
|
|
184
|
-
/** Test hook: inspect delivery state for an online device. Not used in prod. */
|
|
185
|
-
getDeliveryState(deviceId: string): {
|
|
186
|
-
inFlightCount: number;
|
|
187
|
-
givenUpCount: number;
|
|
188
|
-
relaySeqCounter: number;
|
|
189
|
-
lastAckedSeq: number;
|
|
190
|
-
ackSupported: boolean;
|
|
191
|
-
lastReceivedRelaySeq: number;
|
|
192
|
-
} | undefined;
|
|
193
|
-
/** Test hook: force a retry pass without waiting for the timer. */
|
|
194
|
-
forceRetryPass(): void;
|
|
195
198
|
/** Test hook: run the ping pass (set isAlive=false, send ping, start grace timer). */
|
|
196
199
|
forcePingPass(): void;
|
|
197
200
|
/** Test hook: simulate the effect of a ping pass on a single device without
|
|
@@ -200,7 +203,7 @@ export declare class HeadServer {
|
|
|
200
203
|
* Sets isAlive=false and starts the grace timer. */
|
|
201
204
|
simulatePingSent(deviceId: string): void;
|
|
202
205
|
/** Test hook: expire the pong grace timer for a specific device so the next
|
|
203
|
-
*
|
|
206
|
+
* liveness sweep will broadcast device_pending immediately. */
|
|
204
207
|
expirePongGrace(deviceId: string): void;
|
|
205
208
|
close(): void;
|
|
206
209
|
}
|