@stinkycomputing/sesame-api-client 1.5.0-alpha.5 → 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.cjs CHANGED
@@ -23861,6 +23861,126 @@ var log = {
23861
23861
  error: (message, ...args) => logger.error(message, ...args)
23862
23862
  };
23863
23863
 
23864
+ // src/sesame-wire-protocol.ts
23865
+ var FrameType = sesame.v1.wire.FrameType;
23866
+ var DataType = sesame.v1.wire.DataType;
23867
+ var FrameHeader = sesame.v1.wire.FrameHeader;
23868
+ var MediaCodecData = sesame.v1.wire.MediaCodecData;
23869
+ var CodecType = sesame.v1.common.CodecType;
23870
+ function parseDataFrame(frame) {
23871
+ if (!frame.valid || !frame.header || !frame.payload) return null;
23872
+ if (frame.header.type !== sesame.v1.wire.FrameType.FRAME_TYPE_DATA) return null;
23873
+ const d = frame.header.data;
23874
+ if (!d) return null;
23875
+ const trackName = d.trackName ?? "";
23876
+ const payload = frame.payload;
23877
+ try {
23878
+ switch (d.dataType) {
23879
+ case sesame.v1.wire.DataType.DATA_TYPE_JSON: {
23880
+ const text = new TextDecoder().decode(payload);
23881
+ return { dataType: "json", trackName, json: JSON.parse(text) };
23882
+ }
23883
+ case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_STATUS:
23884
+ return {
23885
+ dataType: "transport-status",
23886
+ trackName,
23887
+ event: sesame.v1.status.TransportEvent.decode(payload)
23888
+ };
23889
+ case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_STATE:
23890
+ return {
23891
+ dataType: "audio-state",
23892
+ trackName,
23893
+ status: sesame.v1.audio.AudioMixerStatus.decode(payload)
23894
+ };
23895
+ case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL:
23896
+ return {
23897
+ dataType: "transport-control",
23898
+ trackName,
23899
+ request: sesame.v1.sources.TransportControlRequest.decode(payload)
23900
+ };
23901
+ case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL:
23902
+ return {
23903
+ dataType: "audio-control",
23904
+ trackName,
23905
+ request: sesame.v1.audio.AudioControlRequest.decode(payload)
23906
+ };
23907
+ case sesame.v1.wire.DataType.DATA_TYPE_BINARY:
23908
+ return { dataType: "binary", trackName, data: payload };
23909
+ default:
23910
+ return null;
23911
+ }
23912
+ } catch {
23913
+ return null;
23914
+ }
23915
+ }
23916
+ function buildAudioControlFrame(trackName, request) {
23917
+ const payload = sesame.v1.audio.AudioControlRequest.encode(request).finish();
23918
+ return WireProtocol.serialize(
23919
+ {
23920
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
23921
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL, trackName }
23922
+ },
23923
+ payload
23924
+ );
23925
+ }
23926
+ function buildTransportControlFrame(trackName, request) {
23927
+ const payload = sesame.v1.sources.TransportControlRequest.encode(request).finish();
23928
+ return WireProtocol.serialize(
23929
+ {
23930
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
23931
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL, trackName }
23932
+ },
23933
+ payload
23934
+ );
23935
+ }
23936
+ function buildBinaryDataFrame(trackName, payload) {
23937
+ return WireProtocol.serialize(
23938
+ {
23939
+ type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
23940
+ data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_BINARY, trackName }
23941
+ },
23942
+ payload
23943
+ );
23944
+ }
23945
+ var PREFIX_SIZE = 4;
23946
+ var WireProtocol = class {
23947
+ /**
23948
+ * Serialize a wire frame: 4-byte LE header_size + protobuf FrameHeader + payload.
23949
+ */
23950
+ static serialize(header, payload) {
23951
+ const headerBytes = sesame.v1.wire.FrameHeader.encode(header).finish();
23952
+ const headerSize = headerBytes.length;
23953
+ const payloadSize = payload ? payload.length : 0;
23954
+ const total = PREFIX_SIZE + headerSize + payloadSize;
23955
+ const buffer = new Uint8Array(total);
23956
+ const view = new DataView(buffer.buffer);
23957
+ view.setUint32(0, headerSize, true);
23958
+ buffer.set(headerBytes, PREFIX_SIZE);
23959
+ if (payload && payloadSize > 0) {
23960
+ buffer.set(payload, PREFIX_SIZE + headerSize);
23961
+ }
23962
+ return buffer;
23963
+ }
23964
+ /**
23965
+ * Parse an incoming wire frame.
23966
+ */
23967
+ static parse(data) {
23968
+ const result = { valid: false, header: null, payload: null };
23969
+ if (!data || data.length < PREFIX_SIZE) return result;
23970
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
23971
+ const headerSize = view.getUint32(0, true);
23972
+ if (data.length < PREFIX_SIZE + headerSize) return result;
23973
+ try {
23974
+ const headerBytes = data.subarray(PREFIX_SIZE, PREFIX_SIZE + headerSize);
23975
+ result.header = sesame.v1.wire.FrameHeader.decode(headerBytes);
23976
+ result.payload = data.subarray(PREFIX_SIZE + headerSize);
23977
+ result.valid = true;
23978
+ } catch {
23979
+ }
23980
+ return result;
23981
+ }
23982
+ };
23983
+
23864
23984
  // src/rpc-client.ts
23865
23985
  var RPCClient = class extends import_events.EventEmitter {
23866
23986
  /**
@@ -23924,7 +24044,9 @@ var RPCClient = class extends import_events.EventEmitter {
23924
24044
  throw new Error("No socket");
23925
24045
  }
23926
24046
  const data = sesame.v1.rpc.Message.encode(message).finish();
23927
- await this.connection.send(data);
24047
+ const header = { type: sesame.v1.wire.FrameType.FRAME_TYPE_RPC };
24048
+ const frame = WireProtocol.serialize(header, data);
24049
+ await this.connection.send(frame);
23928
24050
  };
23929
24051
  this.errorHandler = (error) => {
23930
24052
  if (this.listenerCount("error") > 0) {
@@ -24033,128 +24155,6 @@ var RPCClient = class extends import_events.EventEmitter {
24033
24155
 
24034
24156
  // src/sesame-connection.ts
24035
24157
  var import_events2 = require("events");
24036
-
24037
- // src/sesame-wire-protocol.ts
24038
- var FrameType = sesame.v1.wire.FrameType;
24039
- var DataType = sesame.v1.wire.DataType;
24040
- var FrameHeader = sesame.v1.wire.FrameHeader;
24041
- var MediaCodecData = sesame.v1.wire.MediaCodecData;
24042
- var CodecType = sesame.v1.common.CodecType;
24043
- function parseDataFrame(frame) {
24044
- if (!frame.valid || !frame.header || !frame.payload) return null;
24045
- if (frame.header.type !== sesame.v1.wire.FrameType.FRAME_TYPE_DATA) return null;
24046
- const d = frame.header.data;
24047
- if (!d) return null;
24048
- const trackName = d.trackName ?? "";
24049
- const payload = frame.payload;
24050
- try {
24051
- switch (d.dataType) {
24052
- case sesame.v1.wire.DataType.DATA_TYPE_JSON: {
24053
- const text = new TextDecoder().decode(payload);
24054
- return { dataType: "json", trackName, json: JSON.parse(text) };
24055
- }
24056
- case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_STATUS:
24057
- return {
24058
- dataType: "transport-status",
24059
- trackName,
24060
- event: sesame.v1.status.TransportEvent.decode(payload)
24061
- };
24062
- case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_STATE:
24063
- return {
24064
- dataType: "audio-state",
24065
- trackName,
24066
- status: sesame.v1.audio.AudioMixerStatus.decode(payload)
24067
- };
24068
- case sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL:
24069
- return {
24070
- dataType: "transport-control",
24071
- trackName,
24072
- request: sesame.v1.sources.TransportControlRequest.decode(payload)
24073
- };
24074
- case sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL:
24075
- return {
24076
- dataType: "audio-control",
24077
- trackName,
24078
- request: sesame.v1.audio.AudioControlRequest.decode(payload)
24079
- };
24080
- case sesame.v1.wire.DataType.DATA_TYPE_BINARY:
24081
- return { dataType: "binary", trackName, data: payload };
24082
- default:
24083
- return null;
24084
- }
24085
- } catch {
24086
- return null;
24087
- }
24088
- }
24089
- function buildAudioControlFrame(trackName, request) {
24090
- const payload = sesame.v1.audio.AudioControlRequest.encode(request).finish();
24091
- return WireProtocol.serialize(
24092
- {
24093
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24094
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_AUDIO_CONTROL, trackName }
24095
- },
24096
- payload
24097
- );
24098
- }
24099
- function buildTransportControlFrame(trackName, request) {
24100
- const payload = sesame.v1.sources.TransportControlRequest.encode(request).finish();
24101
- return WireProtocol.serialize(
24102
- {
24103
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24104
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_TRANSPORT_CONTROL, trackName }
24105
- },
24106
- payload
24107
- );
24108
- }
24109
- function buildBinaryDataFrame(trackName, payload) {
24110
- return WireProtocol.serialize(
24111
- {
24112
- type: sesame.v1.wire.FrameType.FRAME_TYPE_DATA,
24113
- data: { dataType: sesame.v1.wire.DataType.DATA_TYPE_BINARY, trackName }
24114
- },
24115
- payload
24116
- );
24117
- }
24118
- var PREFIX_SIZE = 4;
24119
- var WireProtocol = class {
24120
- /**
24121
- * Serialize a wire frame: 4-byte LE header_size + protobuf FrameHeader + payload.
24122
- */
24123
- static serialize(header, payload) {
24124
- const headerBytes = sesame.v1.wire.FrameHeader.encode(header).finish();
24125
- const headerSize = headerBytes.length;
24126
- const payloadSize = payload ? payload.length : 0;
24127
- const total = PREFIX_SIZE + headerSize + payloadSize;
24128
- const buffer = new Uint8Array(total);
24129
- const view = new DataView(buffer.buffer);
24130
- view.setUint32(0, headerSize, true);
24131
- buffer.set(headerBytes, PREFIX_SIZE);
24132
- if (payload && payloadSize > 0) {
24133
- buffer.set(payload, PREFIX_SIZE + headerSize);
24134
- }
24135
- return buffer;
24136
- }
24137
- /**
24138
- * Parse an incoming wire frame.
24139
- */
24140
- static parse(data) {
24141
- const result = { valid: false, header: null, payload: null };
24142
- if (!data || data.length < PREFIX_SIZE) return result;
24143
- const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
24144
- const headerSize = view.getUint32(0, true);
24145
- if (data.length < PREFIX_SIZE + headerSize) return result;
24146
- try {
24147
- const headerBytes = data.subarray(PREFIX_SIZE, PREFIX_SIZE + headerSize);
24148
- result.header = sesame.v1.wire.FrameHeader.decode(headerBytes);
24149
- result.payload = data.subarray(PREFIX_SIZE + headerSize);
24150
- result.valid = true;
24151
- } catch {
24152
- }
24153
- return result;
24154
- }
24155
- };
24156
-
24157
- // src/sesame-connection.ts
24158
24158
  var ConnectionState = /* @__PURE__ */ ((ConnectionState2) => {
24159
24159
  ConnectionState2["Disconnected"] = "disconnected";
24160
24160
  ConnectionState2["Connecting"] = "connecting";
@@ -24234,9 +24234,7 @@ var SesameConnection = class extends import_events2.EventEmitter {
24234
24234
  }
24235
24235
  async send(data) {
24236
24236
  if (!this.isConnected()) throw new Error("Not connected");
24237
- const header = { type: sesame.v1.wire.FrameType.FRAME_TYPE_RPC };
24238
- const frame = WireProtocol.serialize(header, data);
24239
- this.socket.send(frame);
24237
+ this.socket.send(data);
24240
24238
  return Promise.resolve();
24241
24239
  }
24242
24240
  async connect() {