@realnation/builder-shared-sdk 1.1.0 → 1.1.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/README.md +0 -6
- package/dist/runtime/connection.d.ts +3 -0
- package/dist/runtime/connection.d.ts.map +1 -1
- package/dist/runtime/connection.js +19 -2
- package/dist/runtime/facade.d.ts +28 -1
- package/dist/runtime/facade.d.ts.map +1 -1
- package/dist/runtime/facade.js +87 -9
- package/dist/runtime/index.d.ts +2 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/mock.d.ts +1 -0
- package/dist/runtime/mock.d.ts.map +1 -1
- package/dist/runtime/mock.js +21 -2
- package/dist/runtime/protocol.d.ts +88 -5
- package/dist/runtime/protocol.d.ts.map +1 -1
- package/dist/runtime/protocol.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,6 +26,8 @@ export interface ConnectionOptions {
|
|
|
26
26
|
require?: HelloMessage['require'];
|
|
27
27
|
/** Heartbeat period. The client pings; the runtime only ever answers. */
|
|
28
28
|
heartbeatMs?: number;
|
|
29
|
+
/** Maximum time without a pong before a half-open socket is dropped. */
|
|
30
|
+
heartbeatTimeoutMs?: number;
|
|
29
31
|
/** Reconnect backoff. Capped so a long outage still retries about twice a minute. */
|
|
30
32
|
backoffStartMs?: number;
|
|
31
33
|
backoffMaxMs?: number;
|
|
@@ -62,6 +64,7 @@ export declare class WsConnection implements Transport {
|
|
|
62
64
|
private binaryHandlers;
|
|
63
65
|
private stateHandlers;
|
|
64
66
|
private heartbeatHandle;
|
|
67
|
+
private lastPongAt;
|
|
65
68
|
private reconnectHandle;
|
|
66
69
|
private handshakeHandle;
|
|
67
70
|
private backoffMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/runtime/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9F,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACxB,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxD,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACtD,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,GAAG,QAAQ,CAAC;AAE1F,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kEAAkE;IAClE,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC;IAC/C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CACrD;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/runtime/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RUNTIME_URL } from './protocol.js';
|
|
2
2
|
const DEFAULTS = {
|
|
3
3
|
heartbeatMs: 5000,
|
|
4
|
+
heartbeatTimeoutMs: 12000,
|
|
4
5
|
backoffStartMs: 500,
|
|
5
6
|
backoffMaxMs: 30000,
|
|
6
7
|
handshakeTimeoutMs: 8000,
|
|
@@ -23,6 +24,7 @@ export class WsConnection {
|
|
|
23
24
|
binaryHandlers = new Set();
|
|
24
25
|
stateHandlers = new Set();
|
|
25
26
|
heartbeatHandle = null;
|
|
27
|
+
lastPongAt = 0;
|
|
26
28
|
reconnectHandle = null;
|
|
27
29
|
handshakeHandle = null;
|
|
28
30
|
backoffMs;
|
|
@@ -35,6 +37,7 @@ export class WsConnection {
|
|
|
35
37
|
url: options.url ?? defaultUrl(),
|
|
36
38
|
client: options.client ?? 'qiksense-web',
|
|
37
39
|
heartbeatMs: options.heartbeatMs ?? DEFAULTS.heartbeatMs,
|
|
40
|
+
heartbeatTimeoutMs: options.heartbeatTimeoutMs ?? DEFAULTS.heartbeatTimeoutMs,
|
|
38
41
|
backoffStartMs: options.backoffStartMs ?? DEFAULTS.backoffStartMs,
|
|
39
42
|
backoffMaxMs: options.backoffMaxMs ?? DEFAULTS.backoffMaxMs,
|
|
40
43
|
handshakeTimeoutMs: options.handshakeTimeoutMs ?? DEFAULTS.handshakeTimeoutMs,
|
|
@@ -109,6 +112,11 @@ export class WsConnection {
|
|
|
109
112
|
this.setState('closed');
|
|
110
113
|
return;
|
|
111
114
|
}
|
|
115
|
+
// A refused connection may close before onopen, so no handshake timer
|
|
116
|
+
// exists to reject the first connect(). Do not leave a Runner gate or
|
|
117
|
+
// any other caller waiting forever; reconnect remains available for
|
|
118
|
+
// callers that keep this transport alive after observing the failure.
|
|
119
|
+
this.failHandshake(new Error('runtime connection closed before ready'));
|
|
112
120
|
this.scheduleReconnect();
|
|
113
121
|
};
|
|
114
122
|
}
|
|
@@ -136,14 +144,23 @@ export class WsConnection {
|
|
|
136
144
|
this.pendingHandshake = null;
|
|
137
145
|
pending?.resolve(msg);
|
|
138
146
|
}
|
|
147
|
+
if (msg.type === 'pong')
|
|
148
|
+
this.lastPongAt = this.opts.now();
|
|
139
149
|
for (const fn of this.messageHandlers)
|
|
140
150
|
fn(msg);
|
|
141
151
|
}
|
|
142
152
|
startHeartbeat() {
|
|
143
153
|
this.stopHeartbeat();
|
|
154
|
+
this.lastPongAt = this.opts.now();
|
|
144
155
|
const tick = () => {
|
|
145
|
-
// Client-initiated only.
|
|
146
|
-
//
|
|
156
|
+
// Client-initiated only. A ping that merely leaves the browser proves
|
|
157
|
+
// nothing about Runtime or the return path; pong is the liveness proof.
|
|
158
|
+
if (this.opts.now() - this.lastPongAt > this.opts.heartbeatTimeoutMs) {
|
|
159
|
+
this.stopHeartbeat();
|
|
160
|
+
this.dropSocket();
|
|
161
|
+
this.scheduleReconnect();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
147
164
|
this.send({ type: 'ping', ts: this.opts.now() });
|
|
148
165
|
this.heartbeatHandle = this.opts.setTimer(tick, this.opts.heartbeatMs);
|
|
149
166
|
};
|
package/dist/runtime/facade.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Transport, ConnectionState } from './connection.js';
|
|
11
11
|
import type { SilhouetteFrame } from './decode.js';
|
|
12
|
-
import type { BodyUpdate, DeviceConnected, DeviceError, GestureUpdate, PointerUpdate, RequestError, RuntimeConfig } from './protocol.js';
|
|
12
|
+
import type { BodyUpdate, DeviceConnected, DeviceError, GestureUpdate, HandGestureUpdate, HandGestureDiagnostic, PointerUpdate, PlayerSilhouetteLost as PlayerSilhouetteLostEvent, RequestError, RuntimeConfig } from './protocol.js';
|
|
13
13
|
export type Unsubscribe = () => void;
|
|
14
14
|
export type GestureName = GestureUpdate['gesture'];
|
|
15
15
|
/** Motion (IMU). Carried as a generic event until the schema grows a definition. */
|
|
@@ -64,6 +64,18 @@ export interface CapabilityChange {
|
|
|
64
64
|
capabilities: unknown[];
|
|
65
65
|
lost: unknown[];
|
|
66
66
|
}
|
|
67
|
+
/** A selected foreground player, not generic depth occupancy. */
|
|
68
|
+
export interface PlayerSilhouetteFrame extends SilhouetteFrame {
|
|
69
|
+
player: {
|
|
70
|
+
id: number;
|
|
71
|
+
distance: number;
|
|
72
|
+
confidence: number;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface PlayerSilhouetteLost {
|
|
76
|
+
reason: PlayerSilhouetteLostEvent['reason'];
|
|
77
|
+
ts: number;
|
|
78
|
+
}
|
|
67
79
|
/** Aligns skeleton data to the video's playback clock (design/03 §4.5). */
|
|
68
80
|
export interface VideoAligner {
|
|
69
81
|
current(): BodyUpdate | null;
|
|
@@ -84,9 +96,13 @@ export declare class RuntimeFacade {
|
|
|
84
96
|
private disposers;
|
|
85
97
|
private readonly bodyCh;
|
|
86
98
|
private readonly gestureCh;
|
|
99
|
+
private readonly handGestureCh;
|
|
100
|
+
private readonly handGestureDiagnosticCh;
|
|
87
101
|
private readonly gestureByName;
|
|
88
102
|
private readonly pointerCh;
|
|
89
103
|
private readonly silhouetteCh;
|
|
104
|
+
private readonly playerSilhouetteCh;
|
|
105
|
+
private readonly playerSilhouetteLostCh;
|
|
90
106
|
private readonly motionCh;
|
|
91
107
|
private readonly deviceErrCh;
|
|
92
108
|
private readonly deviceConnCh;
|
|
@@ -95,6 +111,7 @@ export declare class RuntimeFacade {
|
|
|
95
111
|
private readonly stateCh;
|
|
96
112
|
/** Last `device:connected.config` seen. Read-through only — see effectiveConfig. */
|
|
97
113
|
private lastConfig;
|
|
114
|
+
private lastPlayerSilhouette;
|
|
98
115
|
private trackedPlayers;
|
|
99
116
|
private readonly setTimer;
|
|
100
117
|
private readonly clearTimer;
|
|
@@ -134,12 +151,22 @@ export declare class RuntimeFacade {
|
|
|
134
151
|
onUpdate: (fn: (g: GestureUpdate) => void) => Unsubscribe;
|
|
135
152
|
on: (name: GestureName, fn: (g: GestureUpdate) => void) => Unsubscribe;
|
|
136
153
|
};
|
|
154
|
+
/** Fine-grained fingers/hand-shape events from the optional Hand5 pipeline. */
|
|
155
|
+
readonly handGesture: {
|
|
156
|
+
onUpdate: (fn: (g: HandGestureUpdate) => void) => Unsubscribe;
|
|
157
|
+
onDiagnostic: (fn: (d: HandGestureDiagnostic) => void) => Unsubscribe;
|
|
158
|
+
};
|
|
137
159
|
readonly pointer: {
|
|
138
160
|
onUpdate: (fn: (p: PointerUpdate) => void) => Unsubscribe;
|
|
139
161
|
};
|
|
140
162
|
readonly silhouette: {
|
|
141
163
|
onUpdate: (fn: (f: SilhouetteFrame) => void) => Unsubscribe;
|
|
142
164
|
};
|
|
165
|
+
readonly playerSilhouette: {
|
|
166
|
+
onUpdate: (fn: (f: PlayerSilhouetteFrame) => void) => Unsubscribe;
|
|
167
|
+
onLost: (fn: (lost: PlayerSilhouetteLost) => void) => Unsubscribe;
|
|
168
|
+
current: () => PlayerSilhouetteFrame | null;
|
|
169
|
+
};
|
|
143
170
|
readonly motion: {
|
|
144
171
|
onUpdate: (fn: (m: MotionUpdate) => void) => Unsubscribe;
|
|
145
172
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../src/runtime/facade.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../src/runtime/facade.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/facade.js
CHANGED
|
@@ -38,9 +38,13 @@ export class RuntimeFacade {
|
|
|
38
38
|
disposers = [];
|
|
39
39
|
bodyCh = new Channel();
|
|
40
40
|
gestureCh = new Channel();
|
|
41
|
+
handGestureCh = new Channel();
|
|
42
|
+
handGestureDiagnosticCh = new Channel();
|
|
41
43
|
gestureByName = new Map();
|
|
42
44
|
pointerCh = new Channel();
|
|
43
45
|
silhouetteCh = new Channel();
|
|
46
|
+
playerSilhouetteCh = new Channel();
|
|
47
|
+
playerSilhouetteLostCh = new Channel();
|
|
44
48
|
motionCh = new Channel();
|
|
45
49
|
deviceErrCh = new Channel();
|
|
46
50
|
deviceConnCh = new Channel();
|
|
@@ -49,6 +53,7 @@ export class RuntimeFacade {
|
|
|
49
53
|
stateCh = new Channel();
|
|
50
54
|
/** Last `device:connected.config` seen. Read-through only — see effectiveConfig. */
|
|
51
55
|
lastConfig = {};
|
|
56
|
+
lastPlayerSilhouette = null;
|
|
52
57
|
trackedPlayers = new Set();
|
|
53
58
|
setTimer;
|
|
54
59
|
clearTimer;
|
|
@@ -75,12 +80,32 @@ export class RuntimeFacade {
|
|
|
75
80
|
this.gestureByName.get(g.gesture)?.emit(g);
|
|
76
81
|
break;
|
|
77
82
|
}
|
|
83
|
+
case 'hand-gesture:update':
|
|
84
|
+
this.handGestureCh.emit(msg);
|
|
85
|
+
break;
|
|
86
|
+
case 'hand-gesture:diagnostic':
|
|
87
|
+
this.handGestureDiagnosticCh.emit(msg);
|
|
88
|
+
break;
|
|
78
89
|
case 'pointer:update':
|
|
79
90
|
this.pointerCh.emit(msg);
|
|
80
91
|
break;
|
|
81
92
|
case 'depth:silhouette':
|
|
82
93
|
this.silhouetteCh.emit(decodeSilhouette(msg));
|
|
83
94
|
break;
|
|
95
|
+
case 'depth:player-silhouette': {
|
|
96
|
+
const raw = msg;
|
|
97
|
+
const frame = decodeSilhouette(raw);
|
|
98
|
+
frame.player = raw.player;
|
|
99
|
+
this.lastPlayerSilhouette = frame;
|
|
100
|
+
this.playerSilhouetteCh.emit(frame);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case 'player-silhouette:lost': {
|
|
104
|
+
const raw = msg;
|
|
105
|
+
this.lastPlayerSilhouette = null;
|
|
106
|
+
this.playerSilhouetteLostCh.emit({ reason: raw.reason, ts: raw.ts });
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
84
109
|
case 'motion:update':
|
|
85
110
|
this.motionCh.emit(msg);
|
|
86
111
|
break;
|
|
@@ -234,12 +259,22 @@ export class RuntimeFacade {
|
|
|
234
259
|
return ch.add(fn);
|
|
235
260
|
},
|
|
236
261
|
};
|
|
262
|
+
/** Fine-grained fingers/hand-shape events from the optional Hand5 pipeline. */
|
|
263
|
+
handGesture = {
|
|
264
|
+
onUpdate: (fn) => this.handGestureCh.add(fn),
|
|
265
|
+
onDiagnostic: (fn) => this.handGestureDiagnosticCh.add(fn),
|
|
266
|
+
};
|
|
237
267
|
pointer = {
|
|
238
268
|
onUpdate: (fn) => this.pointerCh.add(fn),
|
|
239
269
|
};
|
|
240
270
|
silhouette = {
|
|
241
271
|
onUpdate: (fn) => this.silhouetteCh.add(fn),
|
|
242
272
|
};
|
|
273
|
+
playerSilhouette = {
|
|
274
|
+
onUpdate: (fn) => this.playerSilhouetteCh.add(fn),
|
|
275
|
+
onLost: (fn) => this.playerSilhouetteLostCh.add(fn),
|
|
276
|
+
current: () => this.lastPlayerSilhouette,
|
|
277
|
+
};
|
|
243
278
|
motion = {
|
|
244
279
|
onUpdate: (fn) => this.motionCh.add(fn),
|
|
245
280
|
};
|
|
@@ -256,6 +291,12 @@ export class RuntimeFacade {
|
|
|
256
291
|
* callers get a MediaStream.
|
|
257
292
|
*/
|
|
258
293
|
async openStream() {
|
|
294
|
+
// A Runtime session has one colour-stream receiver. Replacing an active
|
|
295
|
+
// receiver would silently freeze the first consumer, so callers must
|
|
296
|
+
// explicitly release it with camera.stopStream() before another component
|
|
297
|
+
// can acquire the stream.
|
|
298
|
+
if (this.pc)
|
|
299
|
+
throw new Error('camera stream is already in use');
|
|
259
300
|
const RTC = globalThis.RTCPeerConnection;
|
|
260
301
|
if (!RTC)
|
|
261
302
|
throw new Error('WebRTC is not available in this environment');
|
|
@@ -263,6 +304,24 @@ export class RuntimeFacade {
|
|
|
263
304
|
this.pc = pc;
|
|
264
305
|
pc.addTransceiver('video', { direction: 'recvonly' });
|
|
265
306
|
const stream = new MediaStream();
|
|
307
|
+
let remoteDescriptionApplied = false;
|
|
308
|
+
const pendingRemoteIce = [];
|
|
309
|
+
const addRemoteIce = async (candidate) => {
|
|
310
|
+
if (!candidate)
|
|
311
|
+
return;
|
|
312
|
+
await pc.addIceCandidate({ candidate, sdpMid: '0' });
|
|
313
|
+
};
|
|
314
|
+
// camera:ice is intentionally an event rather than a response: host ICE
|
|
315
|
+
// gathering can happen while camera.offer is still awaiting its answer.
|
|
316
|
+
const offRemoteIce = this.transport.onMessage((raw) => {
|
|
317
|
+
const msg = raw;
|
|
318
|
+
if (msg.type !== 'camera:ice' || typeof msg.candidate !== 'string' || !msg.candidate)
|
|
319
|
+
return;
|
|
320
|
+
if (!remoteDescriptionApplied)
|
|
321
|
+
pendingRemoteIce.push(msg.candidate);
|
|
322
|
+
else
|
|
323
|
+
void addRemoteIce(msg.candidate).catch(() => { });
|
|
324
|
+
});
|
|
266
325
|
const track = new Promise((resolve) => {
|
|
267
326
|
pc.ontrack = (ev) => {
|
|
268
327
|
stream.addTrack(ev.track);
|
|
@@ -271,19 +330,38 @@ export class RuntimeFacade {
|
|
|
271
330
|
});
|
|
272
331
|
pc.onicecandidate = (ev) => {
|
|
273
332
|
if (ev.candidate) {
|
|
274
|
-
void this.#request('camera.ice', { candidate: ev.candidate.
|
|
333
|
+
void this.#request('camera.ice', { candidate: ev.candidate.candidate }).catch(() => {
|
|
275
334
|
/* trickle ICE is best-effort; the offer/answer already carries host candidates */
|
|
276
335
|
});
|
|
277
336
|
}
|
|
337
|
+
else {
|
|
338
|
+
void this.#request('camera.ice', { done: true }).catch(() => { });
|
|
339
|
+
}
|
|
278
340
|
};
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
341
|
+
try {
|
|
342
|
+
const offer = await pc.createOffer();
|
|
343
|
+
await pc.setLocalDescription(offer);
|
|
344
|
+
const res = await this.#request('camera.offer', {
|
|
345
|
+
sdp: offer.sdp, type: offer.type, stream: 'color', transport: 'webrtc-h264',
|
|
346
|
+
});
|
|
347
|
+
if (typeof res.sdp !== 'string' || !res.sdp)
|
|
348
|
+
throw new Error('camera.offer returned no SDP answer');
|
|
349
|
+
await pc.setRemoteDescription({ type: 'answer', sdp: res.sdp });
|
|
350
|
+
remoteDescriptionApplied = true;
|
|
351
|
+
while (pendingRemoteIce.length)
|
|
352
|
+
await addRemoteIce(pendingRemoteIce.shift());
|
|
353
|
+
return await track;
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
if (this.pc === pc)
|
|
357
|
+
this.closeStream();
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
360
|
+
finally {
|
|
361
|
+
// The connection-level dispatcher remains installed; this one exists
|
|
362
|
+
// only to bridge this particular PeerConnection's ICE lifecycle.
|
|
363
|
+
offRemoteIce();
|
|
364
|
+
}
|
|
287
365
|
}
|
|
288
366
|
closeStream() {
|
|
289
367
|
this.pc?.close();
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -35,8 +35,8 @@ export type { ConnectStatus } from './capability.js';
|
|
|
35
35
|
export { decodeSilhouette, parseBinaryFrame, fnv1a64, binaryCorrelationId, QSBN_HEADER_BYTES } from './decode.js';
|
|
36
36
|
export type { SilhouetteFrame, BinaryFrame } from './decode.js';
|
|
37
37
|
export { RuntimeCommandError } from './facade.js';
|
|
38
|
-
export type { Unsubscribe, GestureName, MotionUpdate, SnapshotResult, DeviceInfo, RuntimeStatus, CameraConfig, CapabilityChange, VideoAligner, } from './facade.js';
|
|
38
|
+
export type { Unsubscribe, GestureName, MotionUpdate, SnapshotResult, DeviceInfo, RuntimeStatus, CameraConfig, CapabilityChange, VideoAligner, PlayerSilhouetteFrame, PlayerSilhouetteLost, } from './facade.js';
|
|
39
39
|
export type { ConnectionState, ConnectionOptions, Transport } from './connection.js';
|
|
40
|
-
export type { BodyUpdate, Capability, CapabilityMiss, CalibBox, DepthSilhouette, DeviceConnected, DeviceError, GestureUpdate, HelloMessage, Joint, PointerUpdate, ReadyMessage, RequestError, RequestName, RuntimeConfig, RuntimeNamespace, ServerMessage, Timestamp, } from './protocol.js';
|
|
40
|
+
export type { BodyUpdate, Capability, CapabilityMiss, CalibBox, DepthSilhouette, DeviceConnected, DeviceError, GestureUpdate, HandGestureUpdate, HandGestureDiagnostic, HelloMessage, Joint, PointerUpdate, PlayerSilhouette, PlayerSilhouetteLost as PlayerSilhouetteLostEvent, ReadyMessage, RequestError, RequestName, RuntimeConfig, RuntimeNamespace, ServerMessage, Timestamp, } from './protocol.js';
|
|
41
41
|
export { SCHEMA_HASH, RUNTIME_URL, GRID_W, GRID_H } from './protocol.js';
|
|
42
42
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAErF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC;IAC9E,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,OAAQ,SAAQ,aAAa;IACxC,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB,CAA8B;gBAE3C,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,iBAAiB;IAO5D;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAMvC,iEAAiE;IACjE,IAAI,aAAa,IAAI,aAAa,GAAG,IAAI,CAExC;IAED,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED,KAAK,IAAI,IAAI;CAId;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAazE;AAMD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClH,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAErF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC;IAC9E,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,OAAQ,SAAQ,aAAa;IACxC,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB,CAA8B;gBAE3C,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,iBAAiB;IAO5D;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAMvC,iEAAiE;IACjE,IAAI,aAAa,IAAI,aAAa,GAAG,IAAI,CAExC;IAED,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED,KAAK,IAAI,IAAI;CAId;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAazE;AAMD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClH,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACrF,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,QAAQ,EACR,eAAe,EACf,eAAe,EACf,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,IAAI,yBAAyB,EACjD,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/runtime/mock.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/runtime/mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAEV,UAAU,EACV,aAAa,
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/runtime/mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAEV,UAAU,EACV,aAAa,EAIb,YAAY,EAIZ,YAAY,EAGZ,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,QAAQ,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAQD,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,aAAa,CAA2C;IAChE,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CACuB;IAC5C,sEAAsE;IACtE,aAAa,SAAK;gBAEN,OAAO,GAAE,WAAgB;IAYrC,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED,OAAO,CAAC,QAAQ;IAMhB,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IA4ChC,OAAO,CAAC,QAAQ;IAShB,kFAAkF;IAClF,IAAI,IAAI,IAAI;IAmCZ,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,oBAAoB;IAQ5B,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAsB9B,OAAO,CAAC,MAAM;IA4Bd;;;OAGG;IACH,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAI9B,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAKrD,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAKlD,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI;IAK3D,KAAK,IAAI,IAAI;CAOd"}
|
package/dist/runtime/mock.js
CHANGED
|
@@ -92,7 +92,10 @@ export class MockTransport {
|
|
|
92
92
|
this.emit(this.makePointer(t, ts));
|
|
93
93
|
// A gesture every two seconds, alternating, so handlers get exercised.
|
|
94
94
|
if (this.frame % (this.opts.fps * 2) === 0) {
|
|
95
|
-
const gestures = [
|
|
95
|
+
const gestures = [
|
|
96
|
+
'raise_left', 'raise_right', 'jump', 'squat', 'wave',
|
|
97
|
+
'swipe_left', 'swipe_right', 'push_left', 'push_right',
|
|
98
|
+
];
|
|
96
99
|
this.emit({
|
|
97
100
|
type: 'gesture:update',
|
|
98
101
|
player: 0,
|
|
@@ -100,8 +103,17 @@ export class MockTransport {
|
|
|
100
103
|
ts,
|
|
101
104
|
});
|
|
102
105
|
}
|
|
103
|
-
if (this.frame %
|
|
106
|
+
if (this.frame % this.opts.fps === 0 && this.opts.require?.capabilities?.some((c) => c.name === 'hand-gesture')) {
|
|
107
|
+
const shapes = ['fist', 'one', 'two', 'three', 'four', 'five', 'six', 'eight', 'victory', 'ok', 'thumb_up', 'thumb_down', 'i_love_you'];
|
|
108
|
+
this.emit({ type: 'hand-gesture:update', player: 0, side: 'right',
|
|
109
|
+
gesture: shapes[(this.frame / this.opts.fps) % shapes.length | 0], confidence: .9, ts });
|
|
110
|
+
}
|
|
111
|
+
if (this.frame % 3 === 0) {
|
|
104
112
|
this.emit(this.makeSilhouette(t, ts));
|
|
113
|
+
if (this.opts.require?.capabilities?.some((c) => c.name === 'player-silhouette')) {
|
|
114
|
+
this.emit(this.makePlayerSilhouette(t, ts));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
105
117
|
}
|
|
106
118
|
makeBody(t, ts) {
|
|
107
119
|
const sway = Math.sin(t * 0.7) * 0.08;
|
|
@@ -157,6 +169,13 @@ export class MockTransport {
|
|
|
157
169
|
ts,
|
|
158
170
|
};
|
|
159
171
|
}
|
|
172
|
+
makePlayerSilhouette(t, ts) {
|
|
173
|
+
const legacy = this.makeSilhouette(t, ts);
|
|
174
|
+
return {
|
|
175
|
+
type: 'depth:player-silhouette', w: legacy.w, h: legacy.h, mask: legacy.mask,
|
|
176
|
+
coverage: legacy.coverage ?? 0, player: { id: 1, distance: 2.0, confidence: 0.9 }, ts,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
160
179
|
send(msg) {
|
|
161
180
|
if (msg.type === 'ping') {
|
|
162
181
|
this.pingsReceived++;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* QikSense Runtime protocol types.
|
|
3
3
|
*
|
|
4
4
|
* @generated from protocol/*.schema.json — DO NOT EDIT BY HAND.
|
|
5
|
-
* schema-hash:
|
|
5
|
+
* schema-hash: aa98328f
|
|
6
6
|
*
|
|
7
7
|
* Regenerate with: node protocol/generate.mjs
|
|
8
8
|
*
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* copy has fallen behind the schemas.
|
|
12
12
|
*/
|
|
13
13
|
/** Hash of the schema inputs this file was generated from. */
|
|
14
|
-
export declare const SCHEMA_HASH = "
|
|
14
|
+
export declare const SCHEMA_HASH = "aa98328f";
|
|
15
15
|
/** Default local endpoint. https pages must use wss to avoid mixed-content blocking. */
|
|
16
16
|
export declare const RUNTIME_URL = "ws://127.0.0.1:17872";
|
|
17
17
|
/** Silhouette grid geometry. Must match qs_silhouette_v1 in qs_data_abi.h. */
|
|
@@ -73,8 +73,35 @@ export interface RuntimeNamespace {
|
|
|
73
73
|
maxDistanceM?: number;
|
|
74
74
|
calibBox?: CalibBox;
|
|
75
75
|
gain?: number;
|
|
76
|
+
/** Ignore tiny normalized pointer movements to suppress stationary jitter. */
|
|
77
|
+
deadZone?: number;
|
|
78
|
+
/** Predict pointer position forward by this duration to compensate latency. */
|
|
79
|
+
predictMs?: number;
|
|
80
|
+
/** Hands eligible to produce Pointer updates. */
|
|
81
|
+
pointerHands?: "left" | "right" | "both";
|
|
82
|
+
/** Normalized-coordinate speed that enters the Pointer stroke state. */
|
|
83
|
+
pointerOnSpeed?: number;
|
|
84
|
+
/** Normalized-coordinate speed that releases the Pointer stroke state. */
|
|
85
|
+
pointerOffSpeed?: number;
|
|
76
86
|
smoothing?: "none" | "ema" | "oneEuro";
|
|
77
87
|
lockPolicy?: "nearest" | "largest" | "first";
|
|
88
|
+
/** RTMDet-gated single-player depth foreground. Other detected people are candidates, not automatic interruptions. */
|
|
89
|
+
playerSilhouette?: {
|
|
90
|
+
roi?: {
|
|
91
|
+
x?: number;
|
|
92
|
+
y?: number;
|
|
93
|
+
width?: number;
|
|
94
|
+
height?: number;
|
|
95
|
+
};
|
|
96
|
+
minDistance?: number;
|
|
97
|
+
maxDistance?: number;
|
|
98
|
+
bandWidth?: number;
|
|
99
|
+
minAreaRatio?: number;
|
|
100
|
+
lostFrames?: number;
|
|
101
|
+
maxCandidates?: number;
|
|
102
|
+
lockGraceFrames?: number;
|
|
103
|
+
selection?: "lock-nearest-center" | "nearest" | "largest" | "first";
|
|
104
|
+
};
|
|
78
105
|
}
|
|
79
106
|
/**
|
|
80
107
|
* Physical region mapped onto the 0..1 game plane. Owned by the runtime namespace because the runtime is what computes Pointer.
|
|
@@ -115,7 +142,28 @@ export interface BodyUpdate {
|
|
|
115
142
|
export interface GestureUpdate {
|
|
116
143
|
type: "gesture:update";
|
|
117
144
|
player: number;
|
|
118
|
-
gesture: "raise_left" | "raise_right" | "jump" | "squat" | "wave" | "
|
|
145
|
+
gesture: "raise_left" | "raise_right" | "jump" | "squat" | "wave" | "swipe_left" | "swipe_right" | "push_left" | "push_right";
|
|
146
|
+
ts: Timestamp;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Fine-grained static hand gesture from Hand5 landmarks. Side is the subject's unmirrored view.
|
|
150
|
+
*/
|
|
151
|
+
export interface HandGestureUpdate {
|
|
152
|
+
type: "hand-gesture:update";
|
|
153
|
+
player: number;
|
|
154
|
+
side: "left" | "right";
|
|
155
|
+
gesture: "fist" | "one" | "two" | "three" | "four" | "five" | "six" | "eight" | "victory" | "ok" | "thumb_up" | "thumb_down" | "i_love_you";
|
|
156
|
+
confidence: number;
|
|
157
|
+
ts: Timestamp;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* One-Hz health counter for the optional Hand5 pipeline; intended for the SDK lab, not gameplay.
|
|
161
|
+
*/
|
|
162
|
+
export interface HandGestureDiagnostic {
|
|
163
|
+
type: "hand-gesture:diagnostic";
|
|
164
|
+
inferences: number;
|
|
165
|
+
classified: number;
|
|
166
|
+
stable: number;
|
|
119
167
|
ts: Timestamp;
|
|
120
168
|
}
|
|
121
169
|
/**
|
|
@@ -148,6 +196,27 @@ export interface DepthSilhouette {
|
|
|
148
196
|
farthest?: number;
|
|
149
197
|
ts: Timestamp;
|
|
150
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* A single selected foreground player, not generic depth occupancy.
|
|
201
|
+
*/
|
|
202
|
+
export interface PlayerSilhouette {
|
|
203
|
+
type: "depth:player-silhouette";
|
|
204
|
+
w: number;
|
|
205
|
+
h: number;
|
|
206
|
+
mask: string;
|
|
207
|
+
coverage: number;
|
|
208
|
+
player: {
|
|
209
|
+
id: number;
|
|
210
|
+
distance: number;
|
|
211
|
+
confidence: number;
|
|
212
|
+
};
|
|
213
|
+
ts: Timestamp;
|
|
214
|
+
}
|
|
215
|
+
export interface PlayerSilhouetteLost {
|
|
216
|
+
type: "player-silhouette:lost";
|
|
217
|
+
reason: "NO_FOREGROUND" | "TOO_SMALL" | "AMBIGUOUS" | "OUT_OF_ROI";
|
|
218
|
+
ts: Timestamp;
|
|
219
|
+
}
|
|
151
220
|
export interface DeviceConnected {
|
|
152
221
|
type: "device:connected";
|
|
153
222
|
device: string;
|
|
@@ -162,6 +231,18 @@ export interface DeviceError {
|
|
|
162
231
|
code: "NO_DEVICE" | "NO_TRACKER" | "START_FAILED" | "CAPABILITY_CONFLICT";
|
|
163
232
|
message?: string;
|
|
164
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Runtime-only capability change: a device was unplugged, or another client took an exclusive one. Never sent during the handshake — that is what `ready` is for. Two phases, two paths, no overlap (design/02 §3.1).
|
|
236
|
+
*/
|
|
237
|
+
export interface CapabilityChanged {
|
|
238
|
+
type: "capability:changed";
|
|
239
|
+
/** The COMPLETE capability set after the change, not a delta. A client can replace its state wholesale instead of reconciling, which is what keeps it correct after a missed message. */
|
|
240
|
+
capabilities: Capability[];
|
|
241
|
+
/** What went away and why. Same reason vocabulary as the handshake, so a client has one mapping from reason to on-screen message rather than two. */
|
|
242
|
+
lost?: CapabilityMiss[];
|
|
243
|
+
/** Capabilities that became available — a device plugged back in. Present so recovery is an event too, not something a client discovers by reconnecting. */
|
|
244
|
+
gained?: Capability[];
|
|
245
|
+
}
|
|
165
246
|
/**
|
|
166
247
|
* Client-initiated only. The runtime answers pong and never sends ping; a client waiting for a server ping would decide the link is dead.
|
|
167
248
|
*/
|
|
@@ -181,7 +262,7 @@ export type Timestamp = number;
|
|
|
181
262
|
* A named capability with a version and capability-specific params. Params matter: an experience needing leftHand cannot tell from the name alone whether a body-tracking plugin supplies it.
|
|
182
263
|
*/
|
|
183
264
|
export interface Capability {
|
|
184
|
-
name: "body-tracking" | "hand-tracking" | "face-tracking" | "pointer" | "gesture" | "imu" | "depth" | "depth-silhouette" | "camera-stream";
|
|
265
|
+
name: "body-tracking" | "hand-tracking" | "hand-gesture" | "face-tracking" | "pointer" | "gesture" | "imu" | "depth" | "depth-silhouette" | "player-silhouette" | "camera-stream";
|
|
185
266
|
version?: number;
|
|
186
267
|
params?: Record<string, unknown>;
|
|
187
268
|
/** When absent this capability does not block startup; it is reported in ready.unsatisfied instead. */
|
|
@@ -203,6 +284,8 @@ export interface HelloMessage {
|
|
|
203
284
|
/** Clients declare capabilities, never plugin names — that is what keeps Builder and Runner independent of any vendor. */
|
|
204
285
|
require?: {
|
|
205
286
|
capabilities?: Capability[];
|
|
287
|
+
/** Optional provider ordering hint. A provider that cannot satisfy the request must fall back to another real provider. */
|
|
288
|
+
preferPlugin?: string;
|
|
206
289
|
config?: Record<string, unknown>;
|
|
207
290
|
};
|
|
208
291
|
}
|
|
@@ -222,7 +305,7 @@ export interface ReadyMessage {
|
|
|
222
305
|
}
|
|
223
306
|
/** Anything the runtime sends. The trailing member keeps forward-compatibility:
|
|
224
307
|
* an older client must ignore unknown types rather than fail. */
|
|
225
|
-
export type ServerMessage = ReadyMessage | BodyUpdate | GestureUpdate | PointerUpdate | DepthSilhouette | DeviceConnected | DeviceError | Pong | ResponseMessage | {
|
|
308
|
+
export type ServerMessage = ReadyMessage | BodyUpdate | GestureUpdate | PointerUpdate | HandGestureUpdate | HandGestureDiagnostic | DepthSilhouette | PlayerSilhouette | PlayerSilhouetteLost | DeviceConnected | DeviceError | Pong | ResponseMessage | CapabilityChanged | {
|
|
226
309
|
type: string;
|
|
227
310
|
[k: string]: unknown;
|
|
228
311
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/runtime/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8DAA8D;AAC9D,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,wFAAwF;AACxF,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAElD,8EAA8E;AAC9E,eAAO,MAAM,MAAM,KAAK,CAAC;AACzB,eAAO,MAAM,MAAM,KAAK,CAAC;AAGzB;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,gBAAgB,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,iBAAiB,GAAG,cAAc,GAAG,YAAY,CAAC;AAElK;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAA;IACvE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,OAAO,CAAA;IACX,8NAA8N;IAC9N,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,+GAA+G;IAC/G,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,KAAK,CAAA;IACrC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IACtC,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/runtime/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/protocol.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* QikSense Runtime protocol types.
|
|
3
3
|
*
|
|
4
4
|
* @generated from protocol/*.schema.json — DO NOT EDIT BY HAND.
|
|
5
|
-
* schema-hash:
|
|
5
|
+
* schema-hash: aa98328f
|
|
6
6
|
*
|
|
7
7
|
* Regenerate with: node protocol/generate.mjs
|
|
8
8
|
*
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* copy has fallen behind the schemas.
|
|
12
12
|
*/
|
|
13
13
|
/** Hash of the schema inputs this file was generated from. */
|
|
14
|
-
export const SCHEMA_HASH = '
|
|
14
|
+
export const SCHEMA_HASH = 'aa98328f';
|
|
15
15
|
/** Default local endpoint. https pages must use wss to avoid mixed-content blocking. */
|
|
16
16
|
export const RUNTIME_URL = 'ws://127.0.0.1:17872';
|
|
17
17
|
/** Silhouette grid geometry. Must match qs_silhouette_v1 in qs_data_abi.h. */
|