@stinkycomputing/sesame-api-client 1.5.0 → 1.5.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.
@@ -3299,7 +3299,8 @@ export namespace sesame {
3299
3299
  SOURCE_TRANSPORT_CMD_NEXT = 12,
3300
3300
  SOURCE_TRANSPORT_CMD_SKIP_NEXT = 13,
3301
3301
  SOURCE_TRANSPORT_CMD_TRANSITIONS_DISABLED = 14,
3302
- SOURCE_TRANSPORT_CMD_SET_SCRUBBING = 15
3302
+ SOURCE_TRANSPORT_CMD_SET_SCRUBBING = 15,
3303
+ SOURCE_TRANSPORT_CMD_SET_END_NOTIFICATION = 16
3303
3304
  }
3304
3305
 
3305
3306
  /** SourceTextureSize enum. */
@@ -9442,6 +9443,9 @@ export namespace sesame {
9442
9443
 
9443
9444
  /** TransportEvent metadata */
9444
9445
  metadata?: (sesame.v1.common.ITransportMetadata|null);
9446
+
9447
+ /** TransportEvent nearEnd */
9448
+ nearEnd?: (boolean|null);
9445
9449
  }
9446
9450
 
9447
9451
  /** Represents a TransportEvent. */
@@ -9507,6 +9511,9 @@ export namespace sesame {
9507
9511
  /** TransportEvent metadata. */
9508
9512
  public metadata?: (sesame.v1.common.ITransportMetadata|null);
9509
9513
 
9514
+ /** TransportEvent nearEnd. */
9515
+ public nearEnd: boolean;
9516
+
9510
9517
  /**
9511
9518
  * Creates a new TransportEvent instance using the specified properties.
9512
9519
  * @param [properties] Properties to set
package/dist/proto/api.js CHANGED
@@ -8685,6 +8685,7 @@ export const sesame = $root.sesame = (() => {
8685
8685
  * @property {number} SOURCE_TRANSPORT_CMD_SKIP_NEXT=13 SOURCE_TRANSPORT_CMD_SKIP_NEXT value
8686
8686
  * @property {number} SOURCE_TRANSPORT_CMD_TRANSITIONS_DISABLED=14 SOURCE_TRANSPORT_CMD_TRANSITIONS_DISABLED value
8687
8687
  * @property {number} SOURCE_TRANSPORT_CMD_SET_SCRUBBING=15 SOURCE_TRANSPORT_CMD_SET_SCRUBBING value
8688
+ * @property {number} SOURCE_TRANSPORT_CMD_SET_END_NOTIFICATION=16 SOURCE_TRANSPORT_CMD_SET_END_NOTIFICATION value
8688
8689
  */
8689
8690
  sources.SourceTransportCommandType = (function() {
8690
8691
  const valuesById = {}, values = Object.create(valuesById);
@@ -8704,6 +8705,7 @@ export const sesame = $root.sesame = (() => {
8704
8705
  values[valuesById[13] = "SOURCE_TRANSPORT_CMD_SKIP_NEXT"] = 13;
8705
8706
  values[valuesById[14] = "SOURCE_TRANSPORT_CMD_TRANSITIONS_DISABLED"] = 14;
8706
8707
  values[valuesById[15] = "SOURCE_TRANSPORT_CMD_SET_SCRUBBING"] = 15;
8708
+ values[valuesById[16] = "SOURCE_TRANSPORT_CMD_SET_END_NOTIFICATION"] = 16;
8707
8709
  return values;
8708
8710
  })();
8709
8711
 
@@ -15099,6 +15101,7 @@ export const sesame = $root.sesame = (() => {
15099
15101
  case 13:
15100
15102
  case 14:
15101
15103
  case 15:
15104
+ case 16:
15102
15105
  break;
15103
15106
  }
15104
15107
  if (message.value != null && message.hasOwnProperty("value")) {
@@ -15194,6 +15197,10 @@ export const sesame = $root.sesame = (() => {
15194
15197
  case 15:
15195
15198
  message.cmdType = 15;
15196
15199
  break;
15200
+ case "SOURCE_TRANSPORT_CMD_SET_END_NOTIFICATION":
15201
+ case 16:
15202
+ message.cmdType = 16;
15203
+ break;
15197
15204
  }
15198
15205
  if (object.value != null) {
15199
15206
  if (typeof object.value !== "object")
@@ -16039,6 +16046,7 @@ export const sesame = $root.sesame = (() => {
16039
16046
  case 13:
16040
16047
  case 14:
16041
16048
  case 15:
16049
+ case 16:
16042
16050
  break;
16043
16051
  }
16044
16052
  if (message.value != null && message.hasOwnProperty("value")) {
@@ -16132,6 +16140,10 @@ export const sesame = $root.sesame = (() => {
16132
16140
  case 15:
16133
16141
  message.cmdType = 15;
16134
16142
  break;
16143
+ case "SOURCE_TRANSPORT_CMD_SET_END_NOTIFICATION":
16144
+ case 16:
16145
+ message.cmdType = 16;
16146
+ break;
16135
16147
  }
16136
16148
  if (object.value != null) {
16137
16149
  if (typeof object.value !== "object")
@@ -25149,6 +25161,7 @@ export const sesame = $root.sesame = (() => {
25149
25161
  * @property {number|null} [preroll] TransportEvent preroll
25150
25162
  * @property {number|null} [postroll] TransportEvent postroll
25151
25163
  * @property {sesame.v1.common.ITransportMetadata|null} [metadata] TransportEvent metadata
25164
+ * @property {boolean|null} [nearEnd] TransportEvent nearEnd
25152
25165
  */
25153
25166
 
25154
25167
  /**
@@ -25310,6 +25323,14 @@ export const sesame = $root.sesame = (() => {
25310
25323
  */
25311
25324
  TransportEvent.prototype.metadata = null;
25312
25325
 
25326
+ /**
25327
+ * TransportEvent nearEnd.
25328
+ * @member {boolean} nearEnd
25329
+ * @memberof sesame.v1.status.TransportEvent
25330
+ * @instance
25331
+ */
25332
+ TransportEvent.prototype.nearEnd = false;
25333
+
25313
25334
  /**
25314
25335
  * Creates a new TransportEvent instance using the specified properties.
25315
25336
  * @function create
@@ -25370,6 +25391,8 @@ export const sesame = $root.sesame = (() => {
25370
25391
  writer.uint32(/* id 17, wireType 0 =*/136).uint32(message.postroll);
25371
25392
  if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata"))
25372
25393
  $root.sesame.v1.common.TransportMetadata.encode(message.metadata, writer.uint32(/* id 18, wireType 2 =*/146).fork()).ldelim();
25394
+ if (message.nearEnd != null && Object.hasOwnProperty.call(message, "nearEnd"))
25395
+ writer.uint32(/* id 19, wireType 0 =*/152).bool(message.nearEnd);
25373
25396
  return writer;
25374
25397
  };
25375
25398
 
@@ -25478,6 +25501,10 @@ export const sesame = $root.sesame = (() => {
25478
25501
  message.metadata = $root.sesame.v1.common.TransportMetadata.decode(reader, reader.uint32());
25479
25502
  break;
25480
25503
  }
25504
+ case 19: {
25505
+ message.nearEnd = reader.bool();
25506
+ break;
25507
+ }
25481
25508
  default:
25482
25509
  reader.skipType(tag & 7);
25483
25510
  break;
@@ -25577,6 +25604,9 @@ export const sesame = $root.sesame = (() => {
25577
25604
  if (error)
25578
25605
  return "metadata." + error;
25579
25606
  }
25607
+ if (message.nearEnd != null && message.hasOwnProperty("nearEnd"))
25608
+ if (typeof message.nearEnd !== "boolean")
25609
+ return "nearEnd: boolean expected";
25580
25610
  return null;
25581
25611
  };
25582
25612
 
@@ -25706,6 +25736,8 @@ export const sesame = $root.sesame = (() => {
25706
25736
  throw TypeError(".sesame.v1.status.TransportEvent.metadata: object expected");
25707
25737
  message.metadata = $root.sesame.v1.common.TransportMetadata.fromObject(object.metadata);
25708
25738
  }
25739
+ if (object.nearEnd != null)
25740
+ message.nearEnd = Boolean(object.nearEnd);
25709
25741
  return message;
25710
25742
  };
25711
25743
 
@@ -25769,6 +25801,7 @@ export const sesame = $root.sesame = (() => {
25769
25801
  object.preroll = 0;
25770
25802
  object.postroll = 0;
25771
25803
  object.metadata = null;
25804
+ object.nearEnd = false;
25772
25805
  }
25773
25806
  if (message.sourceId != null && message.hasOwnProperty("sourceId"))
25774
25807
  object.sourceId = message.sourceId;
@@ -25827,6 +25860,8 @@ export const sesame = $root.sesame = (() => {
25827
25860
  object.postroll = message.postroll;
25828
25861
  if (message.metadata != null && message.hasOwnProperty("metadata"))
25829
25862
  object.metadata = $root.sesame.v1.common.TransportMetadata.toObject(message.metadata, options);
25863
+ if (message.nearEnd != null && message.hasOwnProperty("nearEnd"))
25864
+ object.nearEnd = message.nearEnd;
25830
25865
  return object;
25831
25866
  };
25832
25867
 
@@ -62,6 +62,19 @@ Request to add a channel to an audio mixer.
62
62
  | `channel_config` | AudioMixerChannel | |
63
63
 
64
64
 
65
+ ### AudioChannelControlRequest
66
+
67
+ Per-channel property updates. Absent optional fields are left unchanged.
68
+
69
+
70
+ | Field | Type | Description |
71
+ |-------|------|-------------|
72
+ | `channel_id` | string | |
73
+ | `level` | optional float | |
74
+ | `pan` | optional float | |
75
+ | `plugins` | repeated AudioPluginControlRequest | |
76
+
77
+
65
78
  ### AudioChannelPluginStatus
66
79
 
67
80
  Audio channel plugin status.
@@ -102,6 +115,23 @@ Audio channel status.
102
115
  | `plugins` | repeated AudioChannelPluginStatus | |
103
116
 
104
117
 
118
+ ### AudioControlRequest
119
+
120
+ Payload for DATA_TYPE_AUDIO_CONTROL frames (transport → server).
121
+
122
+ The target mixer ID is NOT included here — it is resolved server-side from
123
+ the MetadataRouter binding configured for this source track. This mirrors
124
+ AudioMixerStatus: to build a control message, take an AudioMixerStatus,
125
+ pick the channels you want to change, copy their `id` into `channel_id`,
126
+ and set the desired `level`/`pan`/plugin params. Omit fields you don't
127
+ want to change (optional fields that are absent are left unchanged).
128
+
129
+
130
+ | Field | Type | Description |
131
+ |-------|------|-------------|
132
+ | `channels` | repeated AudioChannelControlRequest | |
133
+
134
+
105
135
  ### AudioMixerAddRequest
106
136
 
107
137
  Request to add a new audio mixer.
@@ -188,6 +218,17 @@ Audio plugin instance.
188
218
  | `aux_input_mix_ids` | repeated string | |
189
219
 
190
220
 
221
+ ### AudioPluginControlRequest
222
+
223
+ Plugin parameter update within an AudioChannelControlRequest.
224
+
225
+
226
+ | Field | Type | Description |
227
+ |-------|------|-------------|
228
+ | `plugin_id` | string | |
229
+ | `params` | repeated AudioPluginParam | |
230
+
231
+
191
232
  ### AudioPluginParam
192
233
 
193
234
  Audio plugin parameter.
@@ -272,10 +313,46 @@ Each item represents a single command to execute at a specific time offset.
272
313
  | `eject_playlist` | sesame.v1.sources.EjectPlaylistRequest | |
273
314
  | `callback` | sesame.v1.common.Callback | |
274
315
  | `set_source_metadata` | sesame.v1.sources.SourceMetadataSetRequest | |
316
+ | `set_metadata_bindings` | SetMetadataBindingsRequest | |
275
317
  | `transaction_id` | optional uint32 | |
276
318
  | `transaction_deps` | repeated uint32 | |
277
319
 
278
320
 
321
+ ### MetadataBinding
322
+
323
+ Routes metadata between producers and consumers across transport boundaries.
324
+
325
+ Outbound route:
326
+ source_id + metadata_id -> output_id + track_name
327
+
328
+ Inbound route:
329
+ source_id + track_name -> target_id + metadata_id
330
+
331
+ Exactly one route direction should be specified per binding:
332
+ - outbound: output_id is set, target_id is empty
333
+ - inbound: target_id is set, output_id is empty
334
+
335
+
336
+ | Field | Type | Description |
337
+ |-------|------|-------------|
338
+ | `source_id` | string | |
339
+ | `metadata_id` | string | |
340
+ | `output_id` | string | |
341
+ | `track_name` | string | |
342
+ | `target_id` | string | |
343
+
344
+
345
+ ### SetMetadataBindingsRequest
346
+
347
+ Replaces the full metadata routing table.
348
+ Send once after all sources/outputs are configured.
349
+
350
+
351
+ | Field | Type | Description |
352
+ |-------|------|-------------|
353
+ | `bindings` | repeated MetadataBinding | |
354
+
355
+
279
356
  ---
280
357
 
281
358
 
@@ -335,6 +412,7 @@ Replaces stringly-typed topic names with compile-time checked values.
335
412
  | 2 | `EVENT_TOPIC_TRANSPORT` | Source transport/playback state changes |
336
413
  | 3 | `EVENT_TOPIC_CALLBACK` | Client callback events |
337
414
  | 4 | `EVENT_TOPIC_JOB` | Job events (export, import, etc.) |
415
+ | 5 | `EVENT_TOPIC_METADATA` | JSON metadata track events (inbound data frames routed to apps) |
338
416
  | 6 | `EVENT_TOPIC_RECORDER` | Recorder events |
339
417
 
340
418
 
@@ -394,7 +472,7 @@ Only one field should be set at a time.
394
472
  | `vec4_value` | Vec4 | |
395
473
  | `string_value` | string | |
396
474
  | `bool_value` | bool | |
397
- | `int_value` | int32 | |
475
+ | `int_value` | int64 | |
398
476
 
399
477
 
400
478
  ### PropertyDomain
@@ -849,6 +927,7 @@ Decklink output configuration.
849
927
  | `url` | string | |
850
928
  | `broadcast` | string | |
851
929
  | `key` | string | |
930
+ | `metadata_tracks` | repeated string | |
852
931
 
853
932
 
854
933
  ### EncodedRecorderOutputConfig
@@ -903,6 +982,7 @@ Type-specific output payloads
903
982
  |-------|------|-------------|
904
983
  | `channel` | string | |
905
984
  | `encoder` | EncoderConfig | |
985
+ | `metadata_tracks` | repeated string | |
906
986
 
907
987
 
908
988
  ### EncoderConfig
@@ -1324,6 +1404,20 @@ Error handling:
1324
1404
 
1325
1405
 
1326
1406
 
1407
+ ### PublishMetadataRequest
1408
+
1409
+ Request to publish a metadata payload from an app to all output transports
1410
+ that have a binding from this node+metadataId.
1411
+
1412
+
1413
+ | Field | Type | Description |
1414
+ |-------|------|-------------|
1415
+ | `node_id` | string | |
1416
+ | `metadata_id` | string | |
1417
+ | `payload` | bytes | |
1418
+ | `data_type` | sesame.v1.wire.DataType | |
1419
+
1420
+
1327
1421
  ### SesameAPIService
1328
1422
 
1329
1423
  Main Sesame API service.
@@ -1342,6 +1436,7 @@ Main Sesame API service.
1342
1436
  | `ListJobs` | .sesame.v1.jobs.JobListRequest | .sesame.v1.jobs.JobList | List jobs. |
1343
1437
  | `RequestKeyframe` | .sesame.v1.outputs.KeyframeRequest | .sesame.v1.common.Empty | Request keyframe from encoder. |
1344
1438
  | `RequestIODeviceList` | .sesame.v1.common.Empty | .sesame.v1.status.IODeviceListResponse | Get list of I/O devices. |
1439
+ | `PublishMetadata` | PublishMetadataRequest | .sesame.v1.common.Empty | Publish a JSON metadata payload to all output transports bound to this node+metadataId. Used by apps (e.g. Snigel) to emit state that should be forwarded on MoQ/WebSocket outputs. |
1345
1440
 
1346
1441
 
1347
1442
  ---
@@ -1411,6 +1506,7 @@ Source transport command type.
1411
1506
  | 13 | `SOURCE_TRANSPORT_CMD_SKIP_NEXT` | Skip to next |
1412
1507
  | 14 | `SOURCE_TRANSPORT_CMD_TRANSITIONS_DISABLED` | Disable transitions |
1413
1508
  | 15 | `SOURCE_TRANSPORT_CMD_SET_SCRUBBING` | Set scrubbing mode |
1509
+ | 16 | `SOURCE_TRANSPORT_CMD_SET_END_NOTIFICATION` | Set near-end callback threshold (int64 µs before end; 0 = disabled) |
1414
1510
 
1415
1511
 
1416
1512
  ### SourceTransportState
@@ -1515,6 +1611,7 @@ Request to load a playlist into a recorder source.
1515
1611
  | `broadcast` | string | |
1516
1612
  | `key` | string | |
1517
1613
  | `decode_buffer_frames` | uint32 | |
1614
+ | `incoming_metadata_tracks` | repeated string | |
1518
1615
 
1519
1616
 
1520
1617
  ### RTTSourceConfig
@@ -1702,6 +1799,23 @@ Request to update an existing source.
1702
1799
  | `device_name` | string | |
1703
1800
 
1704
1801
 
1802
+ ### TransportControlRequest
1803
+
1804
+ Payload for DATA_TYPE_TRANSPORT_CONTROL frames (transport → server).
1805
+
1806
+ The target source ID is NOT included here — it is resolved server-side from
1807
+ the MetadataRouter binding configured for this source track. This mirrors
1808
+ TransportEvent: to build a control message, copy cmd_type and value from
1809
+ the desired SourceTransportCommandType. The server will only apply commands
1810
+ to the source the track is bound to; it cannot control arbitrary sources.
1811
+
1812
+
1813
+ | Field | Type | Description |
1814
+ |-------|------|-------------|
1815
+ | `cmd_type` | SourceTransportCommandType | |
1816
+ | `value` | sesame.v1.common.PropValue | |
1817
+
1818
+
1705
1819
  ### VideoProcessor
1706
1820
 
1707
1821
  Video processor instance configuration.
@@ -1734,6 +1848,7 @@ Video processor parameter (mirrors AudioPluginParam).
1734
1848
  |-------|------|-------------|
1735
1849
  | `channel` | string | |
1736
1850
  | `decode_buffer_frames` | uint32 | |
1851
+ | `incoming_metadata_tracks` | repeated string | |
1737
1852
 
1738
1853
 
1739
1854
  ---
@@ -1897,6 +2012,7 @@ Event message wrapper.
1897
2012
  | `transport_event` | TransportEvent | |
1898
2013
  | `callback_event` | sesame.v1.common.Callback | |
1899
2014
  | `job_event` | sesame.v1.jobs.Job | |
2015
+ | `metadata_event` | MetadataEvent | |
1900
2016
  | `recorder_event` | sesame.v1.recorder.RecorderEvent | |
1901
2017
 
1902
2018
 
@@ -1922,6 +2038,21 @@ I/O device list response.
1922
2038
  | `devices` | repeated IODeviceItem | |
1923
2039
 
1924
2040
 
2041
+ ### MetadataEvent
2042
+
2043
+ Fired when a metadata DATA frame arrives on a streaming source and is
2044
+ routed to an app consumer via the metadata binding table.
2045
+
2046
+
2047
+ | Field | Type | Description |
2048
+ |-------|------|-------------|
2049
+ | `source_node_id` | string | |
2050
+ | `track_name` | string | |
2051
+ | `target_node_id` | string | |
2052
+ | `metadata_id` | string | |
2053
+ | `payload` | bytes | |
2054
+
2055
+
1925
2056
  ### Status
1926
2057
 
1927
2058
  Overall system status.
@@ -1975,6 +2106,7 @@ Transport event (source playback state change).
1975
2106
  | `preroll` | uint32 | |
1976
2107
  | `postroll` | uint32 | |
1977
2108
  | `metadata` | sesame.v1.common.TransportMetadata | |
2109
+ | `near_end` | bool | True in the single event fired when the end-notification threshold is crossed |
1978
2110
 
1979
2111
 
1980
2112
  ---
@@ -1987,6 +2119,23 @@ Transport event (source playback state change).
1987
2119
 
1988
2120
 
1989
2121
 
2122
+ ### DataType
2123
+
2124
+ Payload type carried in a FRAME_TYPE_DATA frame.
2125
+ The frame payload bytes are a serialized protobuf message of the indicated
2126
+ type, or raw UTF-8 JSON for DATA_TYPE_JSON.
2127
+
2128
+ | Value | Name | Description |
2129
+ |-------|------|-------------|
2130
+ | 0 | `DATA_TYPE_UNSPECIFIED` | |
2131
+ | 1 | `DATA_TYPE_JSON` | |
2132
+ | 2 | `DATA_TYPE_TRANSPORT_STATUS` | payload: sesame.v1.status.TransportEvent (source → transport) |
2133
+ | 3 | `DATA_TYPE_AUDIO_STATE` | payload: sesame.v1.audio.AudioMixerStatus (mixer → transport) |
2134
+ | 4 | `DATA_TYPE_TRANSPORT_CONTROL` | payload: sesame.v1.sources.TransportControlRequest (transport → source) |
2135
+ | 5 | `DATA_TYPE_AUDIO_CONTROL` | payload: sesame.v1.audio.AudioControlRequest (transport → mixer) |
2136
+ | 6 | `DATA_TYPE_BINARY` | payload: raw binary bytes (opaque to the wire layer) |
2137
+
2138
+
1990
2139
  ### FrameType
1991
2140
 
1992
2141
  Type of frame carried on the wire.
@@ -2002,6 +2151,17 @@ Type of frame carried on the wire.
2002
2151
  | 6 | `FRAME_TYPE_DATA` | |
2003
2152
 
2004
2153
 
2154
+ ### DataFrameData
2155
+
2156
+ Header data for FRAME_TYPE_DATA frames.
2157
+
2158
+
2159
+ | Field | Type | Description |
2160
+ |-------|------|-------------|
2161
+ | `data_type` | DataType | |
2162
+ | `track_name` | string | |
2163
+
2164
+
2005
2165
  ### FrameHeader
2006
2166
 
2007
2167
  Header for every websocket / MoQ frame.
@@ -2013,6 +2173,7 @@ Serialized with a 4-byte little-endian size prefix on the wire.
2013
2173
  | `type` | FrameType | |
2014
2174
  | `routing_metadata` | string | |
2015
2175
  | `media` | MediaFrameData | |
2176
+ | `data` | DataFrameData | |
2016
2177
 
2017
2178
 
2018
2179
  ### MediaCodecData
@@ -2156,7 +2317,12 @@ Properties are set via `PropertySetRequest` or animated via `PropertyAnimateRequ
2156
2317
 
2157
2318
  ### Audio Mixer Domain (`domain.audio_mixer_id`)
2158
2319
 
2159
- Address format: `channel_id` for channel properties, `channel_id/plugin_id` for plugin parameters.
2320
+ **Address field** identifies the target within the mixer:
2321
+
2322
+ - Channel property — set `address` to the channel ID (e.g. `"video-1"` or `"snigel1-pgm1/audio_mixer_0"`).
2323
+ - Plugin parameter — set `address` to `"<channel_id>::<plugin_id>"` and `property` to the numeric param ID as a string (e.g. `"0"`, `"3"`).
2324
+
2325
+ The server disambiguates these two cases by whether `address` contains the `::` delimiter: if it does, the address is split into channel ID and plugin ID, and `property` is parsed as a numeric param ID; otherwise the full `address` string is used as the channel ID for a named channel property.
2160
2326
 
2161
2327
  | Property | Type | Description |
2162
2328
  |----------|------|-------------|
@@ -2165,7 +2331,9 @@ Address format: `channel_id` for channel properties, `channel_id/plugin_id` for
2165
2331
  | `mute` | bool | Mute channel |
2166
2332
  | `source_channels` | vec4 | Source channel routing |
2167
2333
  | `source_id` | string | Source ID |
2168
- | `<param_id>` | float | Plugin parameter (numeric ID as string) |
2334
+ | `<param_id>` | float | Plugin parameter — `address` must be `channel_id::plugin_id`, `property` is the numeric param ID |
2335
+
2336
+ **Level animation:** use `propertyAnimate` with `ANIM_MODE_STATE_FROM` to fade from the current level. For an instant cut (no transition), `propertySet` is preferred — a zero-duration `propertyAnimate` is clamped to 1 ms by the server rather than producing an instant cut.
2169
2337
 
2170
2338
  ### Source Domain (`domain.source_id`)
2171
2339
 
@@ -2192,7 +2360,7 @@ client.addSubscription(sesame.v1.common.EventTopic.EVENT_TOPIC_JOB, callback);
2192
2360
  | Topic | Event type | When fired |
2193
2361
  |-------|-----------|------------|
2194
2362
  | `EVENT_TOPIC_ERROR` | ErrorEvent | Engine error |
2195
- | `EVENT_TOPIC_TRANSPORT` | TransportEvent | Source playback state change |
2363
+ | `EVENT_TOPIC_TRANSPORT` | TransportEvent | Source playback state change; also fired once per playback run with `near_end=true` when the end-notification threshold is crossed |
2196
2364
  | `EVENT_TOPIC_CALLBACK` | Callback | Client callback command echoed |
2197
2365
  | `EVENT_TOPIC_JOB` | Job | Job lifecycle change + progress (~2 Hz) |
2198
2366
  | `EVENT_TOPIC_RECORDER` | RecorderEvent | Recorder online/offline |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stinkycomputing/sesame-api-client",
3
- "version": "1.5.0",
3
+ "version": "1.5.2",
4
4
  "description": "Sesame API client library with protobuf definitions and command list helpers",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",