@stinkycomputing/sesame-api-client 1.5.0-alpha.4 → 1.5.0-alpha.6

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.
@@ -24194,6 +24194,126 @@ var log = {
24194
24194
  error: (message, ...args) => logger.error(message, ...args)
24195
24195
  };
24196
24196
 
24197
+ // src/sesame-wire-protocol.ts
24198
+ var FrameType = sesame.v1.wire.FrameType;
24199
+ var DataType = sesame.v1.wire.DataType;
24200
+ var FrameHeader = sesame.v1.wire.FrameHeader;
24201
+ var MediaCodecData = sesame.v1.wire.MediaCodecData;
24202
+ var CodecType = sesame.v1.common.CodecType;
24203
+ function parseDataFrame(frame) {
24204
+ if (!frame.valid || !frame.header || !frame.payload) return null;
24205
+ if (frame.header.type !== sesame.v1.wire.FrameType.FRAME_TYPE_DATA) return null;
24206
+ const d = frame.header.data;
24207
+ if (!d) return null;
24208
+ const trackName = d.trackName ?? "";
24209
+ const payload = frame.payload;
24210
+ try {
24211
+ switch (d.dataType) {
24212
+ case sesame.v1.wire.DataType.DATA_TYPE_JSON: {
24213
+ const text = new TextDecoder().decode(payload);
24214
+ return { dataType: "json", trackName, json: JSON.parse(text) };
24215
+ }
24216
+ case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_STATUS:
24217
+ return {
24218
+ dataType: "transport-status",
24219
+ trackName,
24220
+ event: sesame.v1.status.TransportEvent.decode(payload)
24221
+ };
24222
+ case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_STATE:
24223
+ return {
24224
+ dataType: "audio-state",
24225
+ trackName,
24226
+ status: sesame.v1.audio.AudioMixerStatus.decode(payload)
24227
+ };
24228
+ case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL:
24229
+ return {
24230
+ dataType: "transport-control",
24231
+ trackName,
24232
+ request: sesame.v1.sources.TransportControlRequest.decode(payload)
24233
+ };
24234
+ case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL:
24235
+ return {
24236
+ dataType: "audio-control",
24237
+ trackName,
24238
+ request: sesame.v1.audio.AudioControlRequest.decode(payload)
24239
+ };
24240
+ case sesame.v1.wire.DataType.DATA_TYPE_BINARY:
24241
+ return { dataType: "binary", trackName, data: payload };
24242
+ default:
24243
+ return null;
24244
+ }
24245
+ } catch {
24246
+ return null;
24247
+ }
24248
+ }
24249
+ function buildAudioControlFrame(trackName, request) {
24250
+ const payload = sesame.v1.audio.AudioControlRequest.encode(request).finish();
24251
+ return WireProtocol.serialize(
24252
+ {
24253
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24254
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL, trackName }
24255
+ },
24256
+ payload
24257
+ );
24258
+ }
24259
+ function buildTransportControlFrame(trackName, request) {
24260
+ const payload = sesame.v1.sources.TransportControlRequest.encode(request).finish();
24261
+ return WireProtocol.serialize(
24262
+ {
24263
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24264
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL, trackName }
24265
+ },
24266
+ payload
24267
+ );
24268
+ }
24269
+ function buildBinaryDataFrame(trackName, payload) {
24270
+ return WireProtocol.serialize(
24271
+ {
24272
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24273
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_BINARY, trackName }
24274
+ },
24275
+ payload
24276
+ );
24277
+ }
24278
+ var PREFIX_SIZE = 4;
24279
+ var WireProtocol = class {
24280
+ /**
24281
+ * Serialize a wire frame: 4-byte LE header_size + protobuf FrameHeader + payload.
24282
+ */
24283
+ static serialize(header, payload) {
24284
+ const headerBytes = sesame.v1.wire.FrameHeader.encode(header).finish();
24285
+ const headerSize = headerBytes.length;
24286
+ const payloadSize = payload ? payload.length : 0;
24287
+ const total = PREFIX_SIZE + headerSize + payloadSize;
24288
+ const buffer = new Uint8Array(total);
24289
+ const view = new DataView(buffer.buffer);
24290
+ view.setUint32(0, headerSize, true);
24291
+ buffer.set(headerBytes, PREFIX_SIZE);
24292
+ if (payload && payloadSize > 0) {
24293
+ buffer.set(payload, PREFIX_SIZE + headerSize);
24294
+ }
24295
+ return buffer;
24296
+ }
24297
+ /**
24298
+ * Parse an incoming wire frame.
24299
+ */
24300
+ static parse(data) {
24301
+ const result = { valid: false, header: null, payload: null };
24302
+ if (!data || data.length < PREFIX_SIZE) return result;
24303
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
24304
+ const headerSize = view.getUint32(0, true);
24305
+ if (data.length < PREFIX_SIZE + headerSize) return result;
24306
+ try {
24307
+ const headerBytes = data.subarray(PREFIX_SIZE, PREFIX_SIZE + headerSize);
24308
+ result.header = sesame.v1.wire.FrameHeader.decode(headerBytes);
24309
+ result.payload = data.subarray(PREFIX_SIZE + headerSize);
24310
+ result.valid = true;
24311
+ } catch {
24312
+ }
24313
+ return result;
24314
+ }
24315
+ };
24316
+
24197
24317
  // src/rpc-client.ts
24198
24318
  var RPCClient = class extends import_events.EventEmitter {
24199
24319
  /**
@@ -24257,7 +24377,9 @@ var RPCClient = class extends import_events.EventEmitter {
24257
24377
  throw new Error("No socket");
24258
24378
  }
24259
24379
  const data = sesame.v1.rpc.Message.encode(message).finish();
24260
- await this.connection.send(data);
24380
+ const header = { type: sesame.v1.wire.FrameType.FRAME_TYPE_RPC };
24381
+ const frame = WireProtocol.serialize(header, data);
24382
+ await this.connection.send(frame);
24261
24383
  };
24262
24384
  this.errorHandler = (error) => {
24263
24385
  if (this.listenerCount("error") > 0) {
@@ -24366,128 +24488,6 @@ var RPCClient = class extends import_events.EventEmitter {
24366
24488
 
24367
24489
  // src/sesame-connection.ts
24368
24490
  var import_events2 = __toESM(require_events());
24369
-
24370
- // src/sesame-wire-protocol.ts
24371
- var FrameType = sesame.v1.wire.FrameType;
24372
- var DataType = sesame.v1.wire.DataType;
24373
- var FrameHeader = sesame.v1.wire.FrameHeader;
24374
- var MediaCodecData = sesame.v1.wire.MediaCodecData;
24375
- var CodecType = sesame.v1.common.CodecType;
24376
- function parseDataFrame(frame) {
24377
- if (!frame.valid || !frame.header || !frame.payload) return null;
24378
- if (frame.header.type !== sesame.v1.wire.FrameType.FRAME_TYPE_DATA) return null;
24379
- const d = frame.header.data;
24380
- if (!d) return null;
24381
- const trackName = d.trackName ?? "";
24382
- const payload = frame.payload;
24383
- try {
24384
- switch (d.dataType) {
24385
- case sesame.v1.wire.DataType.DATA_TYPE_JSON: {
24386
- const text = new TextDecoder().decode(payload);
24387
- return { dataType: "json", trackName, json: JSON.parse(text) };
24388
- }
24389
- case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_STATUS:
24390
- return {
24391
- dataType: "transport-status",
24392
- trackName,
24393
- event: sesame.v1.status.TransportEvent.decode(payload)
24394
- };
24395
- case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_STATE:
24396
- return {
24397
- dataType: "audio-state",
24398
- trackName,
24399
- status: sesame.v1.audio.AudioMixerStatus.decode(payload)
24400
- };
24401
- case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL:
24402
- return {
24403
- dataType: "transport-control",
24404
- trackName,
24405
- request: sesame.v1.sources.TransportControlRequest.decode(payload)
24406
- };
24407
- case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL:
24408
- return {
24409
- dataType: "audio-control",
24410
- trackName,
24411
- request: sesame.v1.audio.AudioControlRequest.decode(payload)
24412
- };
24413
- case sesame.v1.wire.DataType.DATA_TYPE_BINARY:
24414
- return { dataType: "binary", trackName, data: payload };
24415
- default:
24416
- return null;
24417
- }
24418
- } catch {
24419
- return null;
24420
- }
24421
- }
24422
- function buildAudioControlFrame(trackName, request) {
24423
- const payload = sesame.v1.audio.AudioControlRequest.encode(request).finish();
24424
- return WireProtocol.serialize(
24425
- {
24426
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24427
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL, trackName }
24428
- },
24429
- payload
24430
- );
24431
- }
24432
- function buildTransportControlFrame(trackName, request) {
24433
- const payload = sesame.v1.sources.TransportControlRequest.encode(request).finish();
24434
- return WireProtocol.serialize(
24435
- {
24436
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24437
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL, trackName }
24438
- },
24439
- payload
24440
- );
24441
- }
24442
- function buildBinaryDataFrame(trackName, payload) {
24443
- return WireProtocol.serialize(
24444
- {
24445
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24446
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_BINARY, trackName }
24447
- },
24448
- payload
24449
- );
24450
- }
24451
- var PREFIX_SIZE = 4;
24452
- var WireProtocol = class {
24453
- /**
24454
- * Serialize a wire frame: 4-byte LE header_size + protobuf FrameHeader + payload.
24455
- */
24456
- static serialize(header, payload) {
24457
- const headerBytes = sesame.v1.wire.FrameHeader.encode(header).finish();
24458
- const headerSize = headerBytes.length;
24459
- const payloadSize = payload ? payload.length : 0;
24460
- const total = PREFIX_SIZE + headerSize + payloadSize;
24461
- const buffer = new Uint8Array(total);
24462
- const view = new DataView(buffer.buffer);
24463
- view.setUint32(0, headerSize, true);
24464
- buffer.set(headerBytes, PREFIX_SIZE);
24465
- if (payload && payloadSize > 0) {
24466
- buffer.set(payload, PREFIX_SIZE + headerSize);
24467
- }
24468
- return buffer;
24469
- }
24470
- /**
24471
- * Parse an incoming wire frame.
24472
- */
24473
- static parse(data) {
24474
- const result = { valid: false, header: null, payload: null };
24475
- if (!data || data.length < PREFIX_SIZE) return result;
24476
- const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
24477
- const headerSize = view.getUint32(0, true);
24478
- if (data.length < PREFIX_SIZE + headerSize) return result;
24479
- try {
24480
- const headerBytes = data.subarray(PREFIX_SIZE, PREFIX_SIZE + headerSize);
24481
- result.header = sesame.v1.wire.FrameHeader.decode(headerBytes);
24482
- result.payload = data.subarray(PREFIX_SIZE + headerSize);
24483
- result.valid = true;
24484
- } catch {
24485
- }
24486
- return result;
24487
- }
24488
- };
24489
-
24490
- // src/sesame-connection.ts
24491
24491
  var ConnectionState = /* @__PURE__ */ ((ConnectionState2) => {
24492
24492
  ConnectionState2["Disconnected"] = "disconnected";
24493
24493
  ConnectionState2["Connecting"] = "connecting";
@@ -24567,9 +24567,7 @@ var SesameConnection = class extends import_events2.EventEmitter {
24567
24567
  }
24568
24568
  async send(data) {
24569
24569
  if (!this.isConnected()) throw new Error("Not connected");
24570
- const header = { type: sesame.v1.wire.FrameType.FRAME_TYPE_RPC };
24571
- const frame = WireProtocol.serialize(header, data);
24572
- this.socket.send(frame);
24570
+ this.socket.send(data);
24573
24571
  return Promise.resolve();
24574
24572
  }
24575
24573
  async connect() {
@@ -24914,6 +24912,9 @@ var SesameClient = class extends import_events3.EventEmitter {
24914
24912
  await this.rpc.service.executeCommandList(cl.getCommandListMsg());
24915
24913
  }
24916
24914
  }
24915
+ async publishMetadata(nodeId, metadataId, payload, dataType = DataType.DATA_TYPE_JSON) {
24916
+ await this.rpc.service.publishMetadata({ nodeId, metadataId, payload, dataType });
24917
+ }
24917
24918
  disconnect() {
24918
24919
  this.conn.disconnect();
24919
24920
  }