@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.
package/dist/index.mjs CHANGED
@@ -23799,6 +23799,126 @@ var log = {
23799
23799
  error: (message, ...args) => logger.error(message, ...args)
23800
23800
  };
23801
23801
 
23802
+ // src/sesame-wire-protocol.ts
23803
+ var FrameType = sesame.v1.wire.FrameType;
23804
+ var DataType = sesame.v1.wire.DataType;
23805
+ var FrameHeader = sesame.v1.wire.FrameHeader;
23806
+ var MediaCodecData = sesame.v1.wire.MediaCodecData;
23807
+ var CodecType = sesame.v1.common.CodecType;
23808
+ function parseDataFrame(frame) {
23809
+ if (!frame.valid || !frame.header || !frame.payload) return null;
23810
+ if (frame.header.type !== sesame.v1.wire.FrameType.FRAME_TYPE_DATA) return null;
23811
+ const d = frame.header.data;
23812
+ if (!d) return null;
23813
+ const trackName = d.trackName ?? "";
23814
+ const payload = frame.payload;
23815
+ try {
23816
+ switch (d.dataType) {
23817
+ case sesame.v1.wire.DataType.DATA_TYPE_JSON: {
23818
+ const text = new TextDecoder().decode(payload);
23819
+ return { dataType: "json", trackName, json: JSON.parse(text) };
23820
+ }
23821
+ case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_STATUS:
23822
+ return {
23823
+ dataType: "transport-status",
23824
+ trackName,
23825
+ event: sesame.v1.status.TransportEvent.decode(payload)
23826
+ };
23827
+ case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_STATE:
23828
+ return {
23829
+ dataType: "audio-state",
23830
+ trackName,
23831
+ status: sesame.v1.audio.AudioMixerStatus.decode(payload)
23832
+ };
23833
+ case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL:
23834
+ return {
23835
+ dataType: "transport-control",
23836
+ trackName,
23837
+ request: sesame.v1.sources.TransportControlRequest.decode(payload)
23838
+ };
23839
+ case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL:
23840
+ return {
23841
+ dataType: "audio-control",
23842
+ trackName,
23843
+ request: sesame.v1.audio.AudioControlRequest.decode(payload)
23844
+ };
23845
+ case sesame.v1.wire.DataType.DATA_TYPE_BINARY:
23846
+ return { dataType: "binary", trackName, data: payload };
23847
+ default:
23848
+ return null;
23849
+ }
23850
+ } catch {
23851
+ return null;
23852
+ }
23853
+ }
23854
+ function buildAudioControlFrame(trackName, request) {
23855
+ const payload = sesame.v1.audio.AudioControlRequest.encode(request).finish();
23856
+ return WireProtocol.serialize(
23857
+ {
23858
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
23859
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL, trackName }
23860
+ },
23861
+ payload
23862
+ );
23863
+ }
23864
+ function buildTransportControlFrame(trackName, request) {
23865
+ const payload = sesame.v1.sources.TransportControlRequest.encode(request).finish();
23866
+ return WireProtocol.serialize(
23867
+ {
23868
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
23869
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL, trackName }
23870
+ },
23871
+ payload
23872
+ );
23873
+ }
23874
+ function buildBinaryDataFrame(trackName, payload) {
23875
+ return WireProtocol.serialize(
23876
+ {
23877
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
23878
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_BINARY, trackName }
23879
+ },
23880
+ payload
23881
+ );
23882
+ }
23883
+ var PREFIX_SIZE = 4;
23884
+ var WireProtocol = class {
23885
+ /**
23886
+ * Serialize a wire frame: 4-byte LE header_size + protobuf FrameHeader + payload.
23887
+ */
23888
+ static serialize(header, payload) {
23889
+ const headerBytes = sesame.v1.wire.FrameHeader.encode(header).finish();
23890
+ const headerSize = headerBytes.length;
23891
+ const payloadSize = payload ? payload.length : 0;
23892
+ const total = PREFIX_SIZE + headerSize + payloadSize;
23893
+ const buffer = new Uint8Array(total);
23894
+ const view = new DataView(buffer.buffer);
23895
+ view.setUint32(0, headerSize, true);
23896
+ buffer.set(headerBytes, PREFIX_SIZE);
23897
+ if (payload && payloadSize > 0) {
23898
+ buffer.set(payload, PREFIX_SIZE + headerSize);
23899
+ }
23900
+ return buffer;
23901
+ }
23902
+ /**
23903
+ * Parse an incoming wire frame.
23904
+ */
23905
+ static parse(data) {
23906
+ const result = { valid: false, header: null, payload: null };
23907
+ if (!data || data.length < PREFIX_SIZE) return result;
23908
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
23909
+ const headerSize = view.getUint32(0, true);
23910
+ if (data.length < PREFIX_SIZE + headerSize) return result;
23911
+ try {
23912
+ const headerBytes = data.subarray(PREFIX_SIZE, PREFIX_SIZE + headerSize);
23913
+ result.header = sesame.v1.wire.FrameHeader.decode(headerBytes);
23914
+ result.payload = data.subarray(PREFIX_SIZE + headerSize);
23915
+ result.valid = true;
23916
+ } catch {
23917
+ }
23918
+ return result;
23919
+ }
23920
+ };
23921
+
23802
23922
  // src/rpc-client.ts
23803
23923
  var RPCClient = class extends EventEmitter {
23804
23924
  /**
@@ -23862,7 +23982,9 @@ var RPCClient = class extends EventEmitter {
23862
23982
  throw new Error("No socket");
23863
23983
  }
23864
23984
  const data = sesame.v1.rpc.Message.encode(message).finish();
23865
- await this.connection.send(data);
23985
+ const header = { type: sesame.v1.wire.FrameType.FRAME_TYPE_RPC };
23986
+ const frame = WireProtocol.serialize(header, data);
23987
+ await this.connection.send(frame);
23866
23988
  };
23867
23989
  this.errorHandler = (error) => {
23868
23990
  if (this.listenerCount("error") > 0) {
@@ -23971,128 +24093,6 @@ var RPCClient = class extends EventEmitter {
23971
24093
 
23972
24094
  // src/sesame-connection.ts
23973
24095
  import { EventEmitter as EventEmitter2 } from "events";
23974
-
23975
- // src/sesame-wire-protocol.ts
23976
- var FrameType = sesame.v1.wire.FrameType;
23977
- var DataType = sesame.v1.wire.DataType;
23978
- var FrameHeader = sesame.v1.wire.FrameHeader;
23979
- var MediaCodecData = sesame.v1.wire.MediaCodecData;
23980
- var CodecType = sesame.v1.common.CodecType;
23981
- function parseDataFrame(frame) {
23982
- if (!frame.valid || !frame.header || !frame.payload) return null;
23983
- if (frame.header.type !== sesame.v1.wire.FrameType.FRAME_TYPE_DATA) return null;
23984
- const d = frame.header.data;
23985
- if (!d) return null;
23986
- const trackName = d.trackName ?? "";
23987
- const payload = frame.payload;
23988
- try {
23989
- switch (d.dataType) {
23990
- case sesame.v1.wire.DataType.DATA_TYPE_JSON: {
23991
- const text = new TextDecoder().decode(payload);
23992
- return { dataType: "json", trackName, json: JSON.parse(text) };
23993
- }
23994
- case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_STATUS:
23995
- return {
23996
- dataType: "transport-status",
23997
- trackName,
23998
- event: sesame.v1.status.TransportEvent.decode(payload)
23999
- };
24000
- case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_STATE:
24001
- return {
24002
- dataType: "audio-state",
24003
- trackName,
24004
- status: sesame.v1.audio.AudioMixerStatus.decode(payload)
24005
- };
24006
- case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL:
24007
- return {
24008
- dataType: "transport-control",
24009
- trackName,
24010
- request: sesame.v1.sources.TransportControlRequest.decode(payload)
24011
- };
24012
- case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL:
24013
- return {
24014
- dataType: "audio-control",
24015
- trackName,
24016
- request: sesame.v1.audio.AudioControlRequest.decode(payload)
24017
- };
24018
- case sesame.v1.wire.DataType.DATA_TYPE_BINARY:
24019
- return { dataType: "binary", trackName, data: payload };
24020
- default:
24021
- return null;
24022
- }
24023
- } catch {
24024
- return null;
24025
- }
24026
- }
24027
- function buildAudioControlFrame(trackName, request) {
24028
- const payload = sesame.v1.audio.AudioControlRequest.encode(request).finish();
24029
- return WireProtocol.serialize(
24030
- {
24031
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24032
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL, trackName }
24033
- },
24034
- payload
24035
- );
24036
- }
24037
- function buildTransportControlFrame(trackName, request) {
24038
- const payload = sesame.v1.sources.TransportControlRequest.encode(request).finish();
24039
- return WireProtocol.serialize(
24040
- {
24041
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24042
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL, trackName }
24043
- },
24044
- payload
24045
- );
24046
- }
24047
- function buildBinaryDataFrame(trackName, payload) {
24048
- return WireProtocol.serialize(
24049
- {
24050
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24051
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_BINARY, trackName }
24052
- },
24053
- payload
24054
- );
24055
- }
24056
- var PREFIX_SIZE = 4;
24057
- var WireProtocol = class {
24058
- /**
24059
- * Serialize a wire frame: 4-byte LE header_size + protobuf FrameHeader + payload.
24060
- */
24061
- static serialize(header, payload) {
24062
- const headerBytes = sesame.v1.wire.FrameHeader.encode(header).finish();
24063
- const headerSize = headerBytes.length;
24064
- const payloadSize = payload ? payload.length : 0;
24065
- const total = PREFIX_SIZE + headerSize + payloadSize;
24066
- const buffer = new Uint8Array(total);
24067
- const view = new DataView(buffer.buffer);
24068
- view.setUint32(0, headerSize, true);
24069
- buffer.set(headerBytes, PREFIX_SIZE);
24070
- if (payload && payloadSize > 0) {
24071
- buffer.set(payload, PREFIX_SIZE + headerSize);
24072
- }
24073
- return buffer;
24074
- }
24075
- /**
24076
- * Parse an incoming wire frame.
24077
- */
24078
- static parse(data) {
24079
- const result = { valid: false, header: null, payload: null };
24080
- if (!data || data.length < PREFIX_SIZE) return result;
24081
- const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
24082
- const headerSize = view.getUint32(0, true);
24083
- if (data.length < PREFIX_SIZE + headerSize) return result;
24084
- try {
24085
- const headerBytes = data.subarray(PREFIX_SIZE, PREFIX_SIZE + headerSize);
24086
- result.header = sesame.v1.wire.FrameHeader.decode(headerBytes);
24087
- result.payload = data.subarray(PREFIX_SIZE + headerSize);
24088
- result.valid = true;
24089
- } catch {
24090
- }
24091
- return result;
24092
- }
24093
- };
24094
-
24095
- // src/sesame-connection.ts
24096
24096
  var ConnectionState = /* @__PURE__ */ ((ConnectionState2) => {
24097
24097
  ConnectionState2["Disconnected"] = "disconnected";
24098
24098
  ConnectionState2["Connecting"] = "connecting";
@@ -24172,9 +24172,7 @@ var SesameConnection = class extends EventEmitter2 {
24172
24172
  }
24173
24173
  async send(data) {
24174
24174
  if (!this.isConnected()) throw new Error("Not connected");
24175
- const header = { type: sesame.v1.wire.FrameType.FRAME_TYPE_RPC };
24176
- const frame = WireProtocol.serialize(header, data);
24177
- this.socket.send(frame);
24175
+ this.socket.send(data);
24178
24176
  return Promise.resolve();
24179
24177
  }
24180
24178
  async connect() {
@@ -24519,6 +24517,9 @@ var SesameClient = class extends EventEmitter3 {
24519
24517
  await this.rpc.service.executeCommandList(cl.getCommandListMsg());
24520
24518
  }
24521
24519
  }
24520
+ async publishMetadata(nodeId, metadataId, payload, dataType = DataType.DATA_TYPE_JSON) {
24521
+ await this.rpc.service.publishMetadata({ nodeId, metadataId, payload, dataType });
24522
+ }
24522
24523
  disconnect() {
24523
24524
  this.conn.disconnect();
24524
24525
  }