@m1kad0/hannah-proto 3.4.0 → 3.5.0

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.
@@ -61,6 +61,7 @@ exports.REQUIRED_COMPAT_VERSIONS = {
61
61
  "ReleaseSatelliteCapture": 1,
62
62
  "StreamSatelliteAudio": 1,
63
63
  "TriggerPlink": 1,
64
+ "CollectorConnect": 1,
64
65
  "RegisterProxy": 1,
65
66
  "SubmitSatelliteAudio": 1,
66
67
  "NotifySatelliteRegistered": 1,
Binary file
package/dist/hannah.d.ts CHANGED
@@ -14,7 +14,7 @@ import { EnrollVoiceprintRequest } from "./speaker_enrollment";
14
14
  import { DeleteTimerRequest, GetTimersRequest, GetTimersResponse } from "./timer_admin";
15
15
  import { TimerCommand, TimerMessage } from "./timer_service";
16
16
  import { CreateUserRequest, CreateUserResponse, DeleteUserRequest, GetResidentsResponse, GetUserRequest, GetUsersRequest, GetUsersResponse, LinkAccountRequest, LoginRequest, SetAutomationRequest, SetSystemMessagesRequest, SetTrustLevelRequest, UnlinkAccountRequest, UpdateUserRequest, UserResponse } from "./user_registry";
17
- import { SatelliteAudioChunk, SatelliteCaptureRequest, SatelliteCaptureResponse, TriggerPlinkRequest } from "./wakeword_capture";
17
+ import { CaptureCommand, CollectorMessage, SatelliteAudioChunk, SatelliteCaptureRequest, SatelliteCaptureResponse, TriggerPlinkRequest } from "./wakeword_capture";
18
18
  export declare const protobufPackage = "hannah";
19
19
  export type HannahServiceService = typeof HannahServiceService;
20
20
  export declare const HannahServiceService: {
@@ -604,6 +604,20 @@ export declare const HannahServiceService: {
604
604
  readonly responseSerialize: (value: StatusResponse) => Buffer;
605
605
  readonly responseDeserialize: (value: Buffer) => StatusResponse;
606
606
  };
607
+ /**
608
+ * Bidirectional stream between the Collector and Hannah Core, analogous to TimerConnect.
609
+ * The Collector initiates and holds the connection open; Hannah pushes CaptureCommands
610
+ * down to start/stop satellite captures instead of the Collector polling for them.
611
+ */
612
+ readonly collectorConnect: {
613
+ readonly path: "/hannah.HannahService/CollectorConnect";
614
+ readonly requestStream: true;
615
+ readonly responseStream: true;
616
+ readonly requestSerialize: (value: CollectorMessage) => Buffer;
617
+ readonly requestDeserialize: (value: Buffer) => CollectorMessage;
618
+ readonly responseSerialize: (value: CaptureCommand) => Buffer;
619
+ readonly responseDeserialize: (value: Buffer) => CaptureCommand;
620
+ };
607
621
  /**
608
622
  * --- Satellite Proxy (Go gRPC proxy) ---
609
623
  * Bidirectional keepalive stream. Proxy sends heartbeats; Hannah sends TTS
@@ -908,6 +922,12 @@ export interface HannahServiceServer extends UntypedServiceImplementation {
908
922
  * Returns after PTT is released — Collector calls this in a loop for guided hey-hannah collection.
909
923
  */
910
924
  triggerPlink: handleUnaryCall<TriggerPlinkRequest, StatusResponse>;
925
+ /**
926
+ * Bidirectional stream between the Collector and Hannah Core, analogous to TimerConnect.
927
+ * The Collector initiates and holds the connection open; Hannah pushes CaptureCommands
928
+ * down to start/stop satellite captures instead of the Collector polling for them.
929
+ */
930
+ collectorConnect: handleBidiStreamingCall<CollectorMessage, CaptureCommand>;
911
931
  /**
912
932
  * --- Satellite Proxy (Go gRPC proxy) ---
913
933
  * Bidirectional keepalive stream. Proxy sends heartbeats; Hannah sends TTS
@@ -1220,6 +1240,14 @@ export interface HannahServiceClient extends Client {
1220
1240
  triggerPlink(request: TriggerPlinkRequest, callback: (error: ServiceError | null, response: StatusResponse) => void): ClientUnaryCall;
1221
1241
  triggerPlink(request: TriggerPlinkRequest, metadata: Metadata, callback: (error: ServiceError | null, response: StatusResponse) => void): ClientUnaryCall;
1222
1242
  triggerPlink(request: TriggerPlinkRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: StatusResponse) => void): ClientUnaryCall;
1243
+ /**
1244
+ * Bidirectional stream between the Collector and Hannah Core, analogous to TimerConnect.
1245
+ * The Collector initiates and holds the connection open; Hannah pushes CaptureCommands
1246
+ * down to start/stop satellite captures instead of the Collector polling for them.
1247
+ */
1248
+ collectorConnect(): ClientDuplexStream<CollectorMessage, CaptureCommand>;
1249
+ collectorConnect(options: Partial<CallOptions>): ClientDuplexStream<CollectorMessage, CaptureCommand>;
1250
+ collectorConnect(metadata: Metadata, options?: Partial<CallOptions>): ClientDuplexStream<CollectorMessage, CaptureCommand>;
1223
1251
  /**
1224
1252
  * --- Satellite Proxy (Go gRPC proxy) ---
1225
1253
  * Bidirectional keepalive stream. Proxy sends heartbeats; Hannah sends TTS
package/dist/hannah.js CHANGED
@@ -612,6 +612,20 @@ exports.HannahServiceService = {
612
612
  responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
613
613
  responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
614
614
  },
615
+ /**
616
+ * Bidirectional stream between the Collector and Hannah Core, analogous to TimerConnect.
617
+ * The Collector initiates and holds the connection open; Hannah pushes CaptureCommands
618
+ * down to start/stop satellite captures instead of the Collector polling for them.
619
+ */
620
+ collectorConnect: {
621
+ path: "/hannah.HannahService/CollectorConnect",
622
+ requestStream: true,
623
+ responseStream: true,
624
+ requestSerialize: (value) => Buffer.from(wakeword_capture_1.CollectorMessage.encode(value).finish()),
625
+ requestDeserialize: (value) => wakeword_capture_1.CollectorMessage.decode(value),
626
+ responseSerialize: (value) => Buffer.from(wakeword_capture_1.CaptureCommand.encode(value).finish()),
627
+ responseDeserialize: (value) => wakeword_capture_1.CaptureCommand.decode(value),
628
+ },
615
629
  /**
616
630
  * --- Satellite Proxy (Go gRPC proxy) ---
617
631
  * Bidirectional keepalive stream. Proxy sends heartbeats; Hannah sends TTS
@@ -1,5 +1,12 @@
1
1
  import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
2
  export declare const protobufPackage = "hannah";
3
+ export declare enum CaptureMode {
4
+ CAPTURE_MODE_UNSPECIFIED = 0,
5
+ CAPTURE_MODE_MANUAL = 1,
6
+ CAPTURE_MODE_PTT = 2,
7
+ CAPTURE_MODE_PLINK = 3,
8
+ UNRECOGNIZED = -1
9
+ }
3
10
  export interface SatelliteCaptureRequest {
4
11
  deviceId: string;
5
12
  /**
@@ -32,10 +39,50 @@ export interface SatelliteAudioChunk {
32
39
  /** true = PTT released, utterance boundary */
33
40
  endOfUtterance: boolean;
34
41
  }
42
+ /**
43
+ * Sent by Hannah Core over the CollectorConnect stream to start or stop a
44
+ * satellite capture — the Collector-side counterpart to RequestSatelliteCapture/
45
+ * ReleaseSatelliteCapture, pushed proactively instead of polled.
46
+ * capture_mode is only meaningful when sample_type is hey_hannah.
47
+ */
48
+ export interface CaptureCommand {
49
+ deviceId: string;
50
+ sampleType: SampleType | undefined;
51
+ captureMode: CaptureMode;
52
+ stop: boolean;
53
+ }
54
+ /**
55
+ * Deliberately a oneof of (currently empty) payload messages rather than a plain
56
+ * enum — leaves room to attach per-sample-type data later without a breaking change.
57
+ */
58
+ export interface SampleType {
59
+ noise?: NoiseSample | undefined;
60
+ heyHannah?: HeyHannahSample | undefined;
61
+ }
62
+ export interface NoiseSample {
63
+ }
64
+ export interface HeyHannahSample {
65
+ }
66
+ /** Sent by the Collector over the CollectorConnect stream. */
67
+ export interface CollectorMessage {
68
+ /** initial confirmation when stream is established */
69
+ ack?: CollectorAck | undefined;
70
+ }
71
+ /** Sent once by the Collector after the CollectorConnect stream is established. */
72
+ export interface CollectorAck {
73
+ /** human-readable status */
74
+ message: string;
75
+ }
35
76
  export declare const SatelliteCaptureRequest: MessageFns<SatelliteCaptureRequest>;
36
77
  export declare const TriggerPlinkRequest: MessageFns<TriggerPlinkRequest>;
37
78
  export declare const SatelliteCaptureResponse: MessageFns<SatelliteCaptureResponse>;
38
79
  export declare const SatelliteAudioChunk: MessageFns<SatelliteAudioChunk>;
80
+ export declare const CaptureCommand: MessageFns<CaptureCommand>;
81
+ export declare const SampleType: MessageFns<SampleType>;
82
+ export declare const NoiseSample: MessageFns<NoiseSample>;
83
+ export declare const HeyHannahSample: MessageFns<HeyHannahSample>;
84
+ export declare const CollectorMessage: MessageFns<CollectorMessage>;
85
+ export declare const CollectorAck: MessageFns<CollectorAck>;
39
86
  type Builtin = Date | Function | Uint8Array | string | number | boolean | bigint | undefined;
40
87
  export type DeepPartial<T> = T extends bigint ? string | number | bigint : T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
41
88
  [K in keyof T]?: DeepPartial<T[K]>;
@@ -5,10 +5,18 @@
5
5
  // protoc unknown
6
6
  // source: hannah/wakeword_capture.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.SatelliteAudioChunk = exports.SatelliteCaptureResponse = exports.TriggerPlinkRequest = exports.SatelliteCaptureRequest = exports.protobufPackage = void 0;
8
+ exports.CollectorAck = exports.CollectorMessage = exports.HeyHannahSample = exports.NoiseSample = exports.SampleType = exports.CaptureCommand = exports.SatelliteAudioChunk = exports.SatelliteCaptureResponse = exports.TriggerPlinkRequest = exports.SatelliteCaptureRequest = exports.CaptureMode = exports.protobufPackage = void 0;
9
9
  /* eslint-disable */
10
10
  const wire_1 = require("@bufbuild/protobuf/wire");
11
11
  exports.protobufPackage = "hannah";
12
+ var CaptureMode;
13
+ (function (CaptureMode) {
14
+ CaptureMode[CaptureMode["CAPTURE_MODE_UNSPECIFIED"] = 0] = "CAPTURE_MODE_UNSPECIFIED";
15
+ CaptureMode[CaptureMode["CAPTURE_MODE_MANUAL"] = 1] = "CAPTURE_MODE_MANUAL";
16
+ CaptureMode[CaptureMode["CAPTURE_MODE_PTT"] = 2] = "CAPTURE_MODE_PTT";
17
+ CaptureMode[CaptureMode["CAPTURE_MODE_PLINK"] = 3] = "CAPTURE_MODE_PLINK";
18
+ CaptureMode[CaptureMode["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
19
+ })(CaptureMode || (exports.CaptureMode = CaptureMode = {}));
12
20
  function createBaseSatelliteCaptureRequest() {
13
21
  return { deviceId: "", sampleType: "" };
14
22
  }
@@ -228,3 +236,277 @@ exports.SatelliteAudioChunk = {
228
236
  return message;
229
237
  },
230
238
  };
239
+ function createBaseCaptureCommand() {
240
+ return { deviceId: "", sampleType: undefined, captureMode: 0, stop: false };
241
+ }
242
+ exports.CaptureCommand = {
243
+ encode(message, writer = new wire_1.BinaryWriter()) {
244
+ if (message.deviceId !== "") {
245
+ writer.uint32(10).string(message.deviceId);
246
+ }
247
+ if (message.sampleType !== undefined) {
248
+ exports.SampleType.encode(message.sampleType, writer.uint32(18).fork()).join();
249
+ }
250
+ if (message.captureMode !== 0) {
251
+ writer.uint32(24).int32(message.captureMode);
252
+ }
253
+ if (message.stop !== false) {
254
+ writer.uint32(32).bool(message.stop);
255
+ }
256
+ return writer;
257
+ },
258
+ decode(input, length) {
259
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
260
+ const end = length === undefined ? reader.len : reader.pos + length;
261
+ const message = createBaseCaptureCommand();
262
+ while (reader.pos < end) {
263
+ const tag = reader.uint32();
264
+ switch (tag >>> 3) {
265
+ case 1: {
266
+ if (tag !== 10) {
267
+ break;
268
+ }
269
+ message.deviceId = reader.string();
270
+ continue;
271
+ }
272
+ case 2: {
273
+ if (tag !== 18) {
274
+ break;
275
+ }
276
+ message.sampleType = exports.SampleType.decode(reader, reader.uint32());
277
+ continue;
278
+ }
279
+ case 3: {
280
+ if (tag !== 24) {
281
+ break;
282
+ }
283
+ message.captureMode = reader.int32();
284
+ continue;
285
+ }
286
+ case 4: {
287
+ if (tag !== 32) {
288
+ break;
289
+ }
290
+ message.stop = reader.bool();
291
+ continue;
292
+ }
293
+ }
294
+ if ((tag & 7) === 4 || tag === 0) {
295
+ break;
296
+ }
297
+ reader.skip(tag & 7);
298
+ }
299
+ return message;
300
+ },
301
+ create(base) {
302
+ return exports.CaptureCommand.fromPartial(base ?? {});
303
+ },
304
+ fromPartial(object) {
305
+ const message = createBaseCaptureCommand();
306
+ message.deviceId = object.deviceId ?? "";
307
+ message.sampleType = (object.sampleType !== undefined && object.sampleType !== null)
308
+ ? exports.SampleType.fromPartial(object.sampleType)
309
+ : undefined;
310
+ message.captureMode = object.captureMode ?? 0;
311
+ message.stop = object.stop ?? false;
312
+ return message;
313
+ },
314
+ };
315
+ function createBaseSampleType() {
316
+ return { noise: undefined, heyHannah: undefined };
317
+ }
318
+ exports.SampleType = {
319
+ encode(message, writer = new wire_1.BinaryWriter()) {
320
+ if (message.noise !== undefined) {
321
+ exports.NoiseSample.encode(message.noise, writer.uint32(10).fork()).join();
322
+ }
323
+ if (message.heyHannah !== undefined) {
324
+ exports.HeyHannahSample.encode(message.heyHannah, writer.uint32(18).fork()).join();
325
+ }
326
+ return writer;
327
+ },
328
+ decode(input, length) {
329
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
330
+ const end = length === undefined ? reader.len : reader.pos + length;
331
+ const message = createBaseSampleType();
332
+ while (reader.pos < end) {
333
+ const tag = reader.uint32();
334
+ switch (tag >>> 3) {
335
+ case 1: {
336
+ if (tag !== 10) {
337
+ break;
338
+ }
339
+ message.noise = exports.NoiseSample.decode(reader, reader.uint32());
340
+ continue;
341
+ }
342
+ case 2: {
343
+ if (tag !== 18) {
344
+ break;
345
+ }
346
+ message.heyHannah = exports.HeyHannahSample.decode(reader, reader.uint32());
347
+ continue;
348
+ }
349
+ }
350
+ if ((tag & 7) === 4 || tag === 0) {
351
+ break;
352
+ }
353
+ reader.skip(tag & 7);
354
+ }
355
+ return message;
356
+ },
357
+ create(base) {
358
+ return exports.SampleType.fromPartial(base ?? {});
359
+ },
360
+ fromPartial(object) {
361
+ const message = createBaseSampleType();
362
+ message.noise = (object.noise !== undefined && object.noise !== null)
363
+ ? exports.NoiseSample.fromPartial(object.noise)
364
+ : undefined;
365
+ message.heyHannah = (object.heyHannah !== undefined && object.heyHannah !== null)
366
+ ? exports.HeyHannahSample.fromPartial(object.heyHannah)
367
+ : undefined;
368
+ return message;
369
+ },
370
+ };
371
+ function createBaseNoiseSample() {
372
+ return {};
373
+ }
374
+ exports.NoiseSample = {
375
+ encode(_, writer = new wire_1.BinaryWriter()) {
376
+ return writer;
377
+ },
378
+ decode(input, length) {
379
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
380
+ const end = length === undefined ? reader.len : reader.pos + length;
381
+ const message = createBaseNoiseSample();
382
+ while (reader.pos < end) {
383
+ const tag = reader.uint32();
384
+ switch (tag >>> 3) {
385
+ }
386
+ if ((tag & 7) === 4 || tag === 0) {
387
+ break;
388
+ }
389
+ reader.skip(tag & 7);
390
+ }
391
+ return message;
392
+ },
393
+ create(base) {
394
+ return exports.NoiseSample.fromPartial(base ?? {});
395
+ },
396
+ fromPartial(_) {
397
+ const message = createBaseNoiseSample();
398
+ return message;
399
+ },
400
+ };
401
+ function createBaseHeyHannahSample() {
402
+ return {};
403
+ }
404
+ exports.HeyHannahSample = {
405
+ encode(_, writer = new wire_1.BinaryWriter()) {
406
+ return writer;
407
+ },
408
+ decode(input, length) {
409
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
410
+ const end = length === undefined ? reader.len : reader.pos + length;
411
+ const message = createBaseHeyHannahSample();
412
+ while (reader.pos < end) {
413
+ const tag = reader.uint32();
414
+ switch (tag >>> 3) {
415
+ }
416
+ if ((tag & 7) === 4 || tag === 0) {
417
+ break;
418
+ }
419
+ reader.skip(tag & 7);
420
+ }
421
+ return message;
422
+ },
423
+ create(base) {
424
+ return exports.HeyHannahSample.fromPartial(base ?? {});
425
+ },
426
+ fromPartial(_) {
427
+ const message = createBaseHeyHannahSample();
428
+ return message;
429
+ },
430
+ };
431
+ function createBaseCollectorMessage() {
432
+ return { ack: undefined };
433
+ }
434
+ exports.CollectorMessage = {
435
+ encode(message, writer = new wire_1.BinaryWriter()) {
436
+ if (message.ack !== undefined) {
437
+ exports.CollectorAck.encode(message.ack, writer.uint32(10).fork()).join();
438
+ }
439
+ return writer;
440
+ },
441
+ decode(input, length) {
442
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
443
+ const end = length === undefined ? reader.len : reader.pos + length;
444
+ const message = createBaseCollectorMessage();
445
+ while (reader.pos < end) {
446
+ const tag = reader.uint32();
447
+ switch (tag >>> 3) {
448
+ case 1: {
449
+ if (tag !== 10) {
450
+ break;
451
+ }
452
+ message.ack = exports.CollectorAck.decode(reader, reader.uint32());
453
+ continue;
454
+ }
455
+ }
456
+ if ((tag & 7) === 4 || tag === 0) {
457
+ break;
458
+ }
459
+ reader.skip(tag & 7);
460
+ }
461
+ return message;
462
+ },
463
+ create(base) {
464
+ return exports.CollectorMessage.fromPartial(base ?? {});
465
+ },
466
+ fromPartial(object) {
467
+ const message = createBaseCollectorMessage();
468
+ message.ack = (object.ack !== undefined && object.ack !== null) ? exports.CollectorAck.fromPartial(object.ack) : undefined;
469
+ return message;
470
+ },
471
+ };
472
+ function createBaseCollectorAck() {
473
+ return { message: "" };
474
+ }
475
+ exports.CollectorAck = {
476
+ encode(message, writer = new wire_1.BinaryWriter()) {
477
+ if (message.message !== "") {
478
+ writer.uint32(10).string(message.message);
479
+ }
480
+ return writer;
481
+ },
482
+ decode(input, length) {
483
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
484
+ const end = length === undefined ? reader.len : reader.pos + length;
485
+ const message = createBaseCollectorAck();
486
+ while (reader.pos < end) {
487
+ const tag = reader.uint32();
488
+ switch (tag >>> 3) {
489
+ case 1: {
490
+ if (tag !== 10) {
491
+ break;
492
+ }
493
+ message.message = reader.string();
494
+ continue;
495
+ }
496
+ }
497
+ if ((tag & 7) === 4 || tag === 0) {
498
+ break;
499
+ }
500
+ reader.skip(tag & 7);
501
+ }
502
+ return message;
503
+ },
504
+ create(base) {
505
+ return exports.CollectorAck.fromPartial(base ?? {});
506
+ },
507
+ fromPartial(object) {
508
+ const message = createBaseCollectorAck();
509
+ message.message = object.message ?? "";
510
+ return message;
511
+ },
512
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m1kad0/hannah-proto",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "description": "Generated TypeScript gRPC-js client stubs for the Hannah voice assistant proto schema",
5
5
  "license": "UNLICENSED",
6
6
  "main": "dist/index.js",