react-native-theoplayer 11.1.0 → 11.2.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.
Files changed (37) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +1 -1
  4. package/android/src/main/java/com/theoplayer/source/SourceAdapter.kt +35 -31
  5. package/ios/THEOplayerRCTPlayerAPI.swift +8 -2
  6. package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +12 -11
  7. package/ios/ads/THEOplayerRCTSourceDescriptionBuilder+Ads.swift +31 -4
  8. package/ios/theoAds/THEOplayerRCTSourceDescriptionBuilder+TheoAds.swift +7 -2
  9. package/lib/commonjs/api/source/ads/Ads.js +5 -0
  10. package/lib/commonjs/api/source/ads/Ads.js.map +1 -1
  11. package/lib/commonjs/api/source/ads/TheoAdDescription.js.map +1 -1
  12. package/lib/commonjs/internal/adapter/theolive/TheoLiveWebAdapter.js +2 -11
  13. package/lib/commonjs/internal/adapter/theolive/TheoLiveWebAdapter.js.map +1 -1
  14. package/lib/commonjs/manifest.json +1 -1
  15. package/lib/module/api/source/ads/Ads.js +6 -0
  16. package/lib/module/api/source/ads/Ads.js.map +1 -1
  17. package/lib/module/api/source/ads/TheoAdDescription.js.map +1 -1
  18. package/lib/module/internal/adapter/theolive/TheoLiveWebAdapter.js +2 -11
  19. package/lib/module/internal/adapter/theolive/TheoLiveWebAdapter.js.map +1 -1
  20. package/lib/module/manifest.json +1 -1
  21. package/lib/typescript/api/ads/Ad.d.ts +5 -7
  22. package/lib/typescript/api/ads/Ad.d.ts.map +1 -1
  23. package/lib/typescript/api/ads/AdBreak.d.ts +4 -6
  24. package/lib/typescript/api/ads/AdBreak.d.ts.map +1 -1
  25. package/lib/typescript/api/source/ads/Ads.d.ts +7 -3
  26. package/lib/typescript/api/source/ads/Ads.d.ts.map +1 -1
  27. package/lib/typescript/api/source/ads/TheoAdDescription.d.ts +7 -0
  28. package/lib/typescript/api/source/ads/TheoAdDescription.d.ts.map +1 -1
  29. package/lib/typescript/internal/adapter/theolive/TheoLiveWebAdapter.d.ts.map +1 -1
  30. package/package.json +3 -3
  31. package/react-native-theoplayer.podspec +7 -7
  32. package/src/api/ads/Ad.ts +5 -7
  33. package/src/api/ads/AdBreak.ts +4 -6
  34. package/src/api/source/ads/Ads.ts +8 -3
  35. package/src/api/source/ads/TheoAdDescription.ts +8 -0
  36. package/src/internal/adapter/theolive/TheoLiveWebAdapter.ts +2 -11
  37. package/src/manifest.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [11.2.0] - 26-06-04
9
+
10
+ ### Added
11
+
12
+ - Added support for `CustomAdIntegrationKind`, allowing custom ad integrations on top of the player API.
13
+ - Added support for `breakManifestUrl` for OptiView Ads streams.
14
+
8
15
  ## [11.1.0] - 26-05-27
9
16
 
10
17
  ### Added
@@ -126,8 +126,8 @@ repositories {
126
126
  mavenLocal()
127
127
  }
128
128
 
129
- // The minimum supported THEOplayer version is 11.0.0
130
- def theoVersion = safeExtGet('THEOplayer_sdk', '[11.0.0, 12.0.0)')
129
+ // The minimum supported THEOplayer version is 11.4.0
130
+ def theoVersion = safeExtGet('THEOplayer_sdk', '[11.4.0, 12.0.0)')
131
131
  def theoMediaSessionVersion = safeExtGet('THEOplayer_mediasession', '[11.0.0, 12.0.0)')
132
132
  def theoAdsWrapperVersion = "11.0.0"
133
133
  def coroutinesVersion = safeExtGet('coroutinesVersion', '1.10.2')
@@ -45,7 +45,7 @@ class AdsModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(c
45
45
  fun schedule(tag: Int, ad: ReadableMap) {
46
46
  viewResolver.resolveViewByTag(tag) { view: ReactTHEOplayerView? ->
47
47
  try {
48
- view?.adsApi?.schedule(sourceHelper.parseAdFromJS(ad))
48
+ view?.adsApi?.schedule(sourceHelper.parseAdDescriptionFromJS(ad))
49
49
  } catch (exception: THEOplayerException) {
50
50
  Log.e(NAME, exception.message ?: ERR_SCHEDULE_AD)
51
51
  }
@@ -23,6 +23,7 @@ import com.theoplayer.android.api.ads.theoads.TheoAdsLayoutOverride
23
23
  import com.theoplayer.android.api.cmcd.CMCDTransmissionMode
24
24
  import com.theoplayer.android.api.error.ErrorCode
25
25
  import com.theoplayer.android.api.source.AdIntegration
26
+ import com.theoplayer.android.api.source.addescription.CustomAdDescriptionRegistry
26
27
  import com.theoplayer.android.api.source.dash.DashPlaybackConfiguration
27
28
  import com.theoplayer.android.api.theolive.PlayoutDelay
28
29
  import com.theoplayer.android.api.theolive.TheoLiveSource
@@ -73,6 +74,7 @@ private const val PROP_RETRIEVE_POD_ID_URI = "retrievePodIdURI"
73
74
  private const val PROP_INITIALIZATION_DELAY = "initializationDelay"
74
75
  private const val PROP_SSE_ENDPOINT = "sseEndpoint"
75
76
  private const val PROP_STREAM_ACTIVITY_MONITOR_ID = "streamActivityMonitorId"
77
+ private const val PROP_BREAK_MANIFEST_URL = "breakManifestUrl"
76
78
  private const val PROP_LATENCY_CONFIGURATION = "latencyConfiguration"
77
79
  private const val PROP_PROFILE = "profile"
78
80
  private const val PROP_WEBRTC: String = "webrtc"
@@ -82,8 +84,8 @@ private const val PROP_PLAYOUT_DELAY_MAX: String = "maximum"
82
84
 
83
85
  private const val ERROR_IMA_NOT_ENABLED = "Google IMA support not enabled."
84
86
  private const val ERROR_THEOADS_NOT_ENABLED = "THEOads support not enabled."
85
- private const val ERROR_UNSUPPORTED_CSAI_INTEGRATION = "Unsupported CSAI integration"
86
- private const val ERROR_MISSING_CSAI_INTEGRATION = "Missing CSAI integration"
87
+ private const val ERROR_UNSUPPORTED_AD_INTEGRATION = "Unsupported Ad integration"
88
+ private const val ERROR_MISSING_AD_INTEGRATION = "Missing Ad integration"
87
89
 
88
90
  private const val PROP_SSAI_INTEGRATION_GOOGLE_DAI = "google-dai"
89
91
 
@@ -151,7 +153,9 @@ class SourceAdapter {
151
153
  val jsonAdDescription = jsonAds[i] as JSONObject
152
154
 
153
155
  // Currently only ima-ads are supported.
154
- ads.add(parseAdFromJS(jsonAdDescription))
156
+ parseAdDescriptionFromJS(jsonAdDescription)?.let {
157
+ ads.add(it)
158
+ }
155
159
  }
156
160
  }
157
161
 
@@ -278,16 +282,6 @@ class SourceAdapter {
278
282
  }
279
283
  }
280
284
 
281
- @Throws(THEOplayerException::class)
282
- fun parseAdFromJS(map: ReadableMap): AdDescription? {
283
- return try {
284
- parseAdFromJS(JSONObject(gson.toJson(map.toHashMap())))
285
- } catch (e: JSONException) {
286
- e.printStackTrace()
287
- null
288
- }
289
- }
290
-
291
285
  private fun parseSourceType(jsonTypedSource: JSONObject): SourceType? {
292
286
  val type = jsonTypedSource.optString(PROP_TYPE)
293
287
  if (type.isNotEmpty()) {
@@ -308,30 +302,39 @@ class SourceAdapter {
308
302
  return null
309
303
  }
310
304
 
305
+ @Throws(THEOplayerException::class)
306
+ fun parseAdDescriptionFromJS(map: ReadableMap): AdDescription? {
307
+ return try {
308
+ parseAdDescriptionFromJS(JSONObject(gson.toJson(map.toHashMap())))
309
+ } catch (e: JSONException) {
310
+ e.printStackTrace()
311
+ null
312
+ }
313
+ }
314
+
311
315
  @Throws(JSONException::class, THEOplayerException::class)
312
- fun parseAdFromJS(jsonAdDescription: JSONObject): AdDescription {
316
+ fun parseAdDescriptionFromJS(jsonAdDescription: JSONObject): AdDescription? {
313
317
  val integrationStr = jsonAdDescription.optString(PROP_INTEGRATION)
314
318
  return if (!TextUtils.isEmpty(integrationStr)) {
315
319
  when (integrationStr) {
316
- AdIntegration.GOOGLE_IMA.adIntegration -> parseImaAdFromJS(jsonAdDescription)
317
- AdIntegration.THEO_ADS.adIntegration -> parseTheoAdFromJS(jsonAdDescription)
318
- else -> {
319
- throw THEOplayerException(
320
+ AdIntegration.GOOGLE_IMA.adIntegration -> parseImaAdDescriptionFromJS(jsonAdDescription)
321
+ AdIntegration.THEO_ADS.adIntegration -> parseTheoAdDescriptionFromJS(jsonAdDescription)
322
+ else ->
323
+ CustomAdDescriptionRegistry.deserialize(integrationStr, jsonAdDescription.toString()) ?: throw THEOplayerException(
320
324
  ErrorCode.AD_ERROR,
321
- "$ERROR_UNSUPPORTED_CSAI_INTEGRATION: $integrationStr"
325
+ "$ERROR_UNSUPPORTED_AD_INTEGRATION: $integrationStr"
322
326
  )
323
- }
324
327
  }
325
328
  } else {
326
329
  throw THEOplayerException(
327
330
  ErrorCode.AD_ERROR,
328
- "$ERROR_MISSING_CSAI_INTEGRATION: $integrationStr"
331
+ "$ERROR_MISSING_AD_INTEGRATION: $integrationStr"
329
332
  )
330
333
  }
331
334
  }
332
335
 
333
336
  @Throws(THEOplayerException::class)
334
- private fun parseImaAdFromJS(jsonAdDescription: JSONObject): GoogleImaAdDescription {
337
+ private fun parseImaAdDescriptionFromJS(jsonAdDescription: JSONObject): GoogleImaAdDescription {
335
338
  if (!BuildConfig.EXTENSION_GOOGLE_IMA) {
336
339
  throw THEOplayerException(ErrorCode.AD_ERROR, ERROR_IMA_NOT_ENABLED)
337
340
  }
@@ -349,7 +352,7 @@ class SourceAdapter {
349
352
  }
350
353
 
351
354
  @Throws(JSONException::class)
352
- private fun parseTheoAdFromJS(jsonAdDescription: JSONObject): TheoAdDescription {
355
+ private fun parseTheoAdDescriptionFromJS(jsonAdDescription: JSONObject): TheoAdDescription {
353
356
  if (!BuildConfig.EXTENSION_THEOADS) {
354
357
  throw THEOplayerException(ErrorCode.AD_ERROR, ERROR_THEOADS_NOT_ENABLED)
355
358
  }
@@ -366,6 +369,7 @@ class SourceAdapter {
366
369
  initializationDelay = jsonAdDescription.optDouble(PROP_INITIALIZATION_DELAY).takeIf { it.isFinite() },
367
370
  sseEndpoint = jsonAdDescription.optString(PROP_SSE_ENDPOINT).takeIf { it.isNotEmpty() },
368
371
  streamActivityMonitorId = jsonAdDescription.optString(PROP_STREAM_ACTIVITY_MONITOR_ID).takeIf { it.isNotEmpty() },
372
+ breakManifestUrl = jsonAdDescription.optString(PROP_BREAK_MANIFEST_URL).takeIf { it.isNotEmpty() },
369
373
  )
370
374
  }
371
375
 
@@ -376,9 +380,9 @@ class SourceAdapter {
376
380
 
377
381
  private fun parseOverrideLayout(override: String?): TheoAdsLayoutOverride? {
378
382
  return when (override) {
379
- "single", "single-if-mobile" -> return TheoAdsLayoutOverride.SINGLE
380
- "l-shape" -> return TheoAdsLayoutOverride.LSHAPE
381
- "double" -> return TheoAdsLayoutOverride.DOUBLE
383
+ "single", "single-if-mobile" -> TheoAdsLayoutOverride.SINGLE
384
+ "l-shape" -> TheoAdsLayoutOverride.LSHAPE
385
+ "double" -> TheoAdsLayoutOverride.DOUBLE
382
386
  else -> null
383
387
  }
384
388
  }
@@ -395,11 +399,11 @@ class SourceAdapter {
395
399
 
396
400
  private fun parseTextTrackKind(kind: String?): TextTrackKind? {
397
401
  return when (kind) {
398
- "subtitles" -> return TextTrackKind.SUBTITLES
399
- "metadata" -> return TextTrackKind.METADATA
400
- "captions" -> return TextTrackKind.CAPTIONS
401
- "chapters" -> return TextTrackKind.CHAPTERS
402
- "descriptions" -> return TextTrackKind.DESCRIPTIONS
402
+ "subtitles" -> TextTrackKind.SUBTITLES
403
+ "metadata" -> TextTrackKind.METADATA
404
+ "captions" -> TextTrackKind.CAPTIONS
405
+ "chapters" -> TextTrackKind.CHAPTERS
406
+ "descriptions" -> TextTrackKind.DESCRIPTIONS
403
407
  else -> null
404
408
  }
405
409
  }
@@ -356,8 +356,14 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
356
356
  let quality = foundTrack.qualities.get(index)
357
357
  return uids.contains { $0.intValue == quality.bandwidth } ? quality : nil
358
358
  }
359
- foundTrack.targetQualities = matchingQualities
360
- if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] targetQualities: \(uids) set on active videotrack.") }
359
+ foundTrack.targetQualities = matchingQualities.count > 0 ? matchingQualities : nil
360
+ if DEBUG_PLAYER_API {
361
+ if matchingQualities.count > 0 {
362
+ if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] targetQualities: \(uids) set on active videotrack. (matching: \(matchingQualities.map(\.bandwidth)))") }
363
+ } else {
364
+ if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] targetQualities: \(uids) set on active videotrack. (no match or empty) => no quality restriction.") }
365
+ }
366
+ }
361
367
  }
362
368
  }
363
369
  }
@@ -62,6 +62,7 @@ let SD_PROP_USE_ID3: String = "useId3"
62
62
  let SD_PROP_RETRIEVE_POD_ID_URI: String = "retrievePodIdURI"
63
63
  let SD_PROP_INITIALIZATION_DELAY: String = "initializationDelay"
64
64
  let SD_PROP_HLS_DATE_RANGE: String = "hlsDateRange"
65
+ let SD_PROP_BREAK_MANIFEST_URL: String = "breakManifestUrl"
65
66
  let SD_PROP_CMCD: String = "cmcd"
66
67
  let SD_PROP_QUERY_PARAMETERS: String = "queryParameters"
67
68
 
@@ -90,7 +91,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
90
91
  guard let sourcesData = sourceData[SD_PROP_SOURCES] else {
91
92
  return (nil, nil)
92
93
  }
93
-
94
+
94
95
  #if os(iOS)
95
96
  if let metadataData = sourceData[SD_PROP_METADATA] as? [String:Any],
96
97
  let cachingTaskId = metadataData[SD_PROP_METADATA_CACHINGTASK_ID] as? String {
@@ -164,7 +165,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
164
165
  if let metadataData = sourceData[SD_PROP_METADATA] as? [String:Any] {
165
166
  metadataDescription = THEOplayerRCTSourceDescriptionBuilder.buildMetaDataDescription(metadataData)
166
167
  }
167
-
168
+
168
169
  // 6. configure CMCD
169
170
  let cmcd = sourceData[SD_PROP_CMCD] as? [String:Any]
170
171
  if cmcd != nil {
@@ -179,7 +180,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
179
180
  ads: adsDescriptions,
180
181
  poster: poster,
181
182
  metadata: metadataDescription)
182
-
183
+
183
184
  return (sourceDescription, metadataAndChapterTrackDescriptions)
184
185
  }
185
186
 
@@ -193,7 +194,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
193
194
  let contentProtection = extractDrmConfiguration(from: typedSourceData)
194
195
  let integration = typedSourceData[SD_PROP_INTEGRATION] as? String
195
196
  let type = typedSourceData[SD_PROP_TYPE] as? String
196
-
197
+
197
198
  if integration == "theolive" || type == "theolive" {
198
199
  return THEOplayerRCTSourceDescriptionBuilder.buildTHEOliveDescription(typedSourceData, contentProtection: contentProtection)
199
200
  }
@@ -247,7 +248,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
247
248
  let textTrackFormat = THEOplayerRCTSourceDescriptionBuilder.extractTextTrackFormat(textTracksData[SD_PROP_FORMAT] as? String)
248
249
  let textTrackPTS = textTracksData[SD_PROP_PTS] as? String
249
250
  let textTrackLocalTime = textTracksData[SD_PROP_LOCALTIME] as? String ?? "00:00:00.000"
250
-
251
+
251
252
  #if canImport(THEOplayerConnectorSideloadedSubtitle)
252
253
  let ttDescription = SSTextTrackDescription(src: textTrackSrc,
253
254
  srclang: textTrackSrcLang,
@@ -345,7 +346,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
345
346
  */
346
347
  static func buildContentProtection(_ contentProtectionData: [String:Any]) -> MultiplatformDRMConfiguration? {
347
348
  let customIntegrationId = contentProtectionData[SD_PROP_INTEGRATION] as? String ?? "internal"
348
-
349
+
349
350
  // fairplay
350
351
  var fairplayKeySystem: THEOplayerSDK.KeySystemConfiguration? = nil
351
352
  if let fairplayData = contentProtectionData[SD_PROP_FAIRPLAY] as? [String:Any] {
@@ -363,7 +364,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
363
364
  queryParameters[key] = "\(value)"
364
365
  }
365
366
  }
366
-
367
+
367
368
  fairplayKeySystem = KeySystemConfiguration(
368
369
  licenseAcquisitionURL: licenseAcquisitionURL,
369
370
  certificateURL: certificateUrl,
@@ -372,7 +373,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
372
373
  queryParameters: queryParameters
373
374
  )
374
375
  }
375
-
376
+
376
377
  // widevine
377
378
  var widevineKeySystem: THEOplayerSDK.KeySystemConfiguration? = nil
378
379
  if let widevineData = contentProtectionData[SD_PROP_WIDEVINE] as? [String:Any] {
@@ -390,7 +391,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
390
391
  queryParameters[key] = "\(value)"
391
392
  }
392
393
  }
393
-
394
+
394
395
  widevineKeySystem = KeySystemConfiguration(
395
396
  licenseAcquisitionURL: licenseAcquisitionURL,
396
397
  certificateURL: certificateUrl,
@@ -399,7 +400,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
399
400
  queryParameters: queryParameters
400
401
  )
401
402
  }
402
-
403
+
403
404
  // global query parameters
404
405
  var queryParameters: [String: String] = [:]
405
406
  if let allQueryParams = contentProtectionData[SD_PROP_QUERY_PARAMETERS] as? [String:Any] {
@@ -408,7 +409,7 @@ class THEOplayerRCTSourceDescriptionBuilder {
408
409
  }
409
410
  }
410
411
  let integrationParameters = contentProtectionData[SD_PROP_INTEGRATION_PARAMETERS] as? [String:Any] ?? [:]
411
-
412
+
412
413
  return MultiplatformDRMConfiguration(
413
414
  customIntegrationId: customIntegrationId,
414
415
  integrationParameters: integrationParameters,
@@ -6,6 +6,17 @@ import UIKit
6
6
 
7
7
  let SD_PROP_ADS: String = "ads"
8
8
 
9
+ public class CustomAdDescription: AdDescription {
10
+ public let integration: THEOplayerSDK.AdIntegration? = AdIntegration.none
11
+ public let customIntegrationId: String
12
+ public let integrationData: [String: Any]
13
+
14
+ public init(customIntegrationId: String, integrationData: [String: Any] = [:]) {
15
+ self.customIntegrationId = customIntegrationId
16
+ self.integrationData = integrationData
17
+ }
18
+ }
19
+
9
20
  extension THEOplayerRCTSourceDescriptionBuilder {
10
21
 
11
22
  /**
@@ -24,11 +35,16 @@ extension THEOplayerRCTSourceDescriptionBuilder {
24
35
  adsDescriptions?.append(adDescription)
25
36
  } else {
26
37
  if DEBUG_SOURCE_DESCRIPTION_BUILDER {
27
- PrintUtils.printLog(logText: "[NATIVE] Could not create THEOplayer GoogleImaAdDescription from adsData array")
38
+ PrintUtils.printLog(logText: "[NATIVE] Could not create AdDescription from adsData")
28
39
  }
29
- return nil
30
40
  }
31
41
  }
42
+ if adsDescriptions?.isEmpty == true {
43
+ if DEBUG_SOURCE_DESCRIPTION_BUILDER {
44
+ PrintUtils.printLog(logText: "[NATIVE] Could not create any AdDescription from adsData array")
45
+ }
46
+ return nil
47
+ }
32
48
  }
33
49
  // case: single ads object
34
50
  else if let adsData = ads as? [String:Any] {
@@ -36,7 +52,7 @@ extension THEOplayerRCTSourceDescriptionBuilder {
36
52
  adsDescriptions?.append(adDescription)
37
53
  } else {
38
54
  if DEBUG_SOURCE_DESCRIPTION_BUILDER {
39
- PrintUtils.printLog(logText: "[NATIVE] Could not create THEOplayer GoogleImaAdDescription from adsData")
55
+ PrintUtils.printLog(logText: "[NATIVE] Could not create AdDescription from adsData")
40
56
  }
41
57
  return nil
42
58
  }
@@ -58,11 +74,22 @@ extension THEOplayerRCTSourceDescriptionBuilder {
58
74
  case "theoads":
59
75
  return THEOplayerRCTSourceDescriptionBuilder.buildSingleTHEOadsDescription(adsData)
60
76
  default:
61
- if DEBUG_SOURCE_DESCRIPTION_BUILDER { PrintUtils.printLog(logText: "[NATIVE] We currently require and only support the 'google-ima' or 'sgai' integration in the 'ads' description.") }
77
+ return THEOplayerRCTSourceDescriptionBuilder.buildSingleCustomAdsDescription(adsData)
62
78
  }
63
79
  }
64
80
  return nil
65
81
  }
82
+
83
+ /**
84
+ Creates a THEOplayer AdDescription, containing all passed properties.
85
+ - returns: a THEOplayer AdDescription
86
+ */
87
+ static func buildSingleCustomAdsDescription(_ adsData: [String:Any]) -> AdDescription? {
88
+ if let integration = adsData[SD_PROP_INTEGRATION] as? String {
89
+ return CustomAdDescription(customIntegrationId: integration, integrationData: adsData)
90
+ }
91
+ return nil
92
+ }
66
93
 
67
94
  /**
68
95
  Creates a THEOplayer GoogleImaAdDescription. This requires an ads property in the RN source description.
@@ -50,7 +50,11 @@ extension THEOplayerRCTSourceDescriptionBuilder {
50
50
  let streamActivityMonitorId = adsData[SD_PROP_STREAM_ACTIVITY_MONITOR_ID_THEOADS] as? String
51
51
  let retrievePodIdURI = adsData[SD_PROP_RETRIEVE_POD_ID_URI] as? String
52
52
  let initializationDelay = adsData[SD_PROP_INITIALIZATION_DELAY] as? Double
53
-
53
+ var breakManifestUrl: URL?
54
+ if let breakManifestUrlString = adsData[SD_PROP_BREAK_MANIFEST_URL] as? String {
55
+ breakManifestUrl = URL(string: breakManifestUrlString)
56
+ }
57
+
54
58
  return THEOAdDescription(networkCode: networkCode,
55
59
  customAssetKey: customAssetKey,
56
60
  backdropDoubleBox: backdropDoubleBox,
@@ -62,7 +66,8 @@ extension THEOplayerRCTSourceDescriptionBuilder {
62
66
  streamActivityMonitorId: streamActivityMonitorId,
63
67
  sseEndpoint: sseEndpoint,
64
68
  retrievePodIdURI: retrievePodIdURI,
65
- initializationDelay: initializationDelay)
69
+ initializationDelay: initializationDelay,
70
+ breakManifestUrl: breakManifestUrl)
66
71
  #else
67
72
  return nil
68
73
  #endif
@@ -56,4 +56,9 @@ let AdIntegrationKind = exports.AdIntegrationKind = /*#__PURE__*/function (AdInt
56
56
  AdIntegrationKind["theoads"] = "theoads";
57
57
  return AdIntegrationKind;
58
58
  }({});
59
+ /**
60
+ * The identifier of a custom ad integration.
61
+ *
62
+ * @category Ads
63
+ */
59
64
  //# sourceMappingURL=Ads.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AdIntegrationKind","exports"],"sourceRoot":"../../../../../src","sources":["api/source/ads/Ads.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AAoDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA,IAgBYA,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["AdIntegrationKind","exports"],"sourceRoot":"../../../../../src","sources":["api/source/ads/Ads.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AAkDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA,IAgBYA,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAS7B;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TheoAdsLayoutOverride","exports"],"sourceRoot":"../../../../../src","sources":["api/source/ads/TheoAdDescription.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAqGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA,IAUYA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["TheoAdsLayoutOverride","exports"],"sourceRoot":"../../../../../src","sources":["api/source/ads/TheoAdDescription.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA6GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA,IAUYA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA","ignoreList":[]}
@@ -13,17 +13,8 @@ class TheoLiveWebAdapter {
13
13
  return currentLatency ? Promise.resolve(currentLatency) : Promise.reject('latency not available');
14
14
  }
15
15
  get latencies() {
16
- const webLatencies = this._player.hesp?.latencies;
17
- if (webLatencies) {
18
- return Promise.resolve({
19
- engineLatency: webLatencies?.engine,
20
- distributionLatency: webLatencies?.distribution,
21
- playerLatency: webLatencies?.player,
22
- theoliveLatency: webLatencies?.theolive
23
- });
24
- } else {
25
- return Promise.reject('latencies not available');
26
- }
16
+ console.warn('The THEOlive latencies metrics are not available');
17
+ return Promise.resolve({});
27
18
  }
28
19
  set authToken(token) {
29
20
  if (this._player.theoLive) {
@@ -1 +1 @@
1
- {"version":3,"names":["TheoLiveWebAdapter","constructor","_player","currentLatency","latency","Promise","resolve","reject","latencies","webLatencies","hesp","engineLatency","engine","distributionLatency","distribution","playerLatency","player","theoliveLatency","theolive","authToken","token","theoLive","exports"],"sourceRoot":"../../../../../src","sources":["internal/adapter/theolive/TheoLiveWebAdapter.ts"],"mappings":";;;;;;AAGO,MAAMA,kBAAkB,CAAwB;EACrDC,WAAWA,CAASC,OAAyB,EAAE;IAAA,KAA3BA,OAAyB,GAAzBA,OAAyB;EAAG;EAEhD,IAAIC,cAAcA,CAAA,EAAoB;IACpC,MAAMA,cAAc,GAAG,IAAI,CAACD,OAAO,CAACE,OAAO,CAACD,cAAc;IAC1D,OAAOA,cAAc,GAAGE,OAAO,CAACC,OAAO,CAACH,cAAc,CAAC,GAAGE,OAAO,CAACE,MAAM,CAAS,uBAAuB,CAAC;EAC3G;EAEA,IAAIC,SAASA,CAAA,EAA2B;IACtC,MAAMC,YAAY,GAAG,IAAI,CAACP,OAAO,CAACQ,IAAI,EAAEF,SAAS;IACjD,IAAIC,YAAY,EAAE;MAChB,OAAOJ,OAAO,CAACC,OAAO,CAAC;QACrBK,aAAa,EAAEF,YAAY,EAAEG,MAAM;QACnCC,mBAAmB,EAAEJ,YAAY,EAAEK,YAAY;QAC/CC,aAAa,EAAEN,YAAY,EAAEO,MAAM;QACnCC,eAAe,EAAER,YAAY,EAAES;MACjC,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,OAAOb,OAAO,CAACE,MAAM,CAAgB,yBAAyB,CAAC;IACjE;EACF;EAEA,IAAIY,SAASA,CAACC,KAAa,EAAE;IAC3B,IAAI,IAAI,CAAClB,OAAO,CAACmB,QAAQ,EAAE;MACzB,IAAI,CAACnB,OAAO,CAACmB,QAAQ,CAACF,SAAS,GAAGC,KAAK;IACzC;EACF;EAEA,IAAID,SAASA,CAAA,EAAuB;IAClC,OAAO,IAAI,CAACjB,OAAO,CAACmB,QAAQ,EAAEF,SAAS;EACzC;AACF;AAACG,OAAA,CAAAtB,kBAAA,GAAAA,kBAAA","ignoreList":[]}
1
+ {"version":3,"names":["TheoLiveWebAdapter","constructor","_player","currentLatency","latency","Promise","resolve","reject","latencies","console","warn","authToken","token","theoLive","exports"],"sourceRoot":"../../../../../src","sources":["internal/adapter/theolive/TheoLiveWebAdapter.ts"],"mappings":";;;;;;AAGO,MAAMA,kBAAkB,CAAwB;EACrDC,WAAWA,CAASC,OAAyB,EAAE;IAAA,KAA3BA,OAAyB,GAAzBA,OAAyB;EAAG;EAEhD,IAAIC,cAAcA,CAAA,EAAoB;IACpC,MAAMA,cAAc,GAAG,IAAI,CAACD,OAAO,CAACE,OAAO,CAACD,cAAc;IAC1D,OAAOA,cAAc,GAAGE,OAAO,CAACC,OAAO,CAACH,cAAc,CAAC,GAAGE,OAAO,CAACE,MAAM,CAAS,uBAAuB,CAAC;EAC3G;EAEA,IAAIC,SAASA,CAAA,EAA2B;IACtCC,OAAO,CAACC,IAAI,CAAC,kDAAkD,CAAC;IAChE,OAAOL,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;EAC5B;EAEA,IAAIK,SAASA,CAACC,KAAa,EAAE;IAC3B,IAAI,IAAI,CAACV,OAAO,CAACW,QAAQ,EAAE;MACzB,IAAI,CAACX,OAAO,CAACW,QAAQ,CAACF,SAAS,GAAGC,KAAK;IACzC;EACF;EAEA,IAAID,SAASA,CAAA,EAAuB;IAClC,OAAO,IAAI,CAACT,OAAO,CAACW,QAAQ,EAAEF,SAAS;EACzC;AACF;AAACG,OAAA,CAAAd,kBAAA,GAAAA,kBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":"11.1.0","buildDate":"2026-05-27T17:00:02.965Z"}
1
+ {"version":"11.2.0","buildDate":"2026-06-04T15:04:43.174Z"}
@@ -55,4 +55,10 @@ export let AdIntegrationKind = /*#__PURE__*/function (AdIntegrationKind) {
55
55
  AdIntegrationKind["theoads"] = "theoads";
56
56
  return AdIntegrationKind;
57
57
  }({});
58
+
59
+ /**
60
+ * The identifier of a custom ad integration.
61
+ *
62
+ * @category Ads
63
+ */
58
64
  //# sourceMappingURL=Ads.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AdIntegrationKind"],"sourceRoot":"../../../../../src","sources":["api/source/ads/Ads.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["AdIntegrationKind"],"sourceRoot":"../../../../../src","sources":["api/source/ads/Ads.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;;AAS7B;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TheoAdsLayoutOverride"],"sourceRoot":"../../../../../src","sources":["api/source/ads/TheoAdDescription.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["TheoAdsLayoutOverride"],"sourceRoot":"../../../../../src","sources":["api/source/ads/TheoAdDescription.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA6GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA","ignoreList":[]}
@@ -9,17 +9,8 @@ export class TheoLiveWebAdapter {
9
9
  return currentLatency ? Promise.resolve(currentLatency) : Promise.reject('latency not available');
10
10
  }
11
11
  get latencies() {
12
- const webLatencies = this._player.hesp?.latencies;
13
- if (webLatencies) {
14
- return Promise.resolve({
15
- engineLatency: webLatencies?.engine,
16
- distributionLatency: webLatencies?.distribution,
17
- playerLatency: webLatencies?.player,
18
- theoliveLatency: webLatencies?.theolive
19
- });
20
- } else {
21
- return Promise.reject('latencies not available');
22
- }
12
+ console.warn('The THEOlive latencies metrics are not available');
13
+ return Promise.resolve({});
23
14
  }
24
15
  set authToken(token) {
25
16
  if (this._player.theoLive) {
@@ -1 +1 @@
1
- {"version":3,"names":["TheoLiveWebAdapter","constructor","_player","currentLatency","latency","Promise","resolve","reject","latencies","webLatencies","hesp","engineLatency","engine","distributionLatency","distribution","playerLatency","player","theoliveLatency","theolive","authToken","token","theoLive"],"sourceRoot":"../../../../../src","sources":["internal/adapter/theolive/TheoLiveWebAdapter.ts"],"mappings":";;AAGA,OAAO,MAAMA,kBAAkB,CAAwB;EACrDC,WAAWA,CAASC,OAAyB,EAAE;IAAA,KAA3BA,OAAyB,GAAzBA,OAAyB;EAAG;EAEhD,IAAIC,cAAcA,CAAA,EAAoB;IACpC,MAAMA,cAAc,GAAG,IAAI,CAACD,OAAO,CAACE,OAAO,CAACD,cAAc;IAC1D,OAAOA,cAAc,GAAGE,OAAO,CAACC,OAAO,CAACH,cAAc,CAAC,GAAGE,OAAO,CAACE,MAAM,CAAS,uBAAuB,CAAC;EAC3G;EAEA,IAAIC,SAASA,CAAA,EAA2B;IACtC,MAAMC,YAAY,GAAG,IAAI,CAACP,OAAO,CAACQ,IAAI,EAAEF,SAAS;IACjD,IAAIC,YAAY,EAAE;MAChB,OAAOJ,OAAO,CAACC,OAAO,CAAC;QACrBK,aAAa,EAAEF,YAAY,EAAEG,MAAM;QACnCC,mBAAmB,EAAEJ,YAAY,EAAEK,YAAY;QAC/CC,aAAa,EAAEN,YAAY,EAAEO,MAAM;QACnCC,eAAe,EAAER,YAAY,EAAES;MACjC,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,OAAOb,OAAO,CAACE,MAAM,CAAgB,yBAAyB,CAAC;IACjE;EACF;EAEA,IAAIY,SAASA,CAACC,KAAa,EAAE;IAC3B,IAAI,IAAI,CAAClB,OAAO,CAACmB,QAAQ,EAAE;MACzB,IAAI,CAACnB,OAAO,CAACmB,QAAQ,CAACF,SAAS,GAAGC,KAAK;IACzC;EACF;EAEA,IAAID,SAASA,CAAA,EAAuB;IAClC,OAAO,IAAI,CAACjB,OAAO,CAACmB,QAAQ,EAAEF,SAAS;EACzC;AACF","ignoreList":[]}
1
+ {"version":3,"names":["TheoLiveWebAdapter","constructor","_player","currentLatency","latency","Promise","resolve","reject","latencies","console","warn","authToken","token","theoLive"],"sourceRoot":"../../../../../src","sources":["internal/adapter/theolive/TheoLiveWebAdapter.ts"],"mappings":";;AAGA,OAAO,MAAMA,kBAAkB,CAAwB;EACrDC,WAAWA,CAASC,OAAyB,EAAE;IAAA,KAA3BA,OAAyB,GAAzBA,OAAyB;EAAG;EAEhD,IAAIC,cAAcA,CAAA,EAAoB;IACpC,MAAMA,cAAc,GAAG,IAAI,CAACD,OAAO,CAACE,OAAO,CAACD,cAAc;IAC1D,OAAOA,cAAc,GAAGE,OAAO,CAACC,OAAO,CAACH,cAAc,CAAC,GAAGE,OAAO,CAACE,MAAM,CAAS,uBAAuB,CAAC;EAC3G;EAEA,IAAIC,SAASA,CAAA,EAA2B;IACtCC,OAAO,CAACC,IAAI,CAAC,kDAAkD,CAAC;IAChE,OAAOL,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;EAC5B;EAEA,IAAIK,SAASA,CAACC,KAAa,EAAE;IAC3B,IAAI,IAAI,CAACV,OAAO,CAACW,QAAQ,EAAE;MACzB,IAAI,CAACX,OAAO,CAACW,QAAQ,CAACF,SAAS,GAAGC,KAAK;IACzC;EACF;EAEA,IAAID,SAASA,CAAA,EAAuB;IAClC,OAAO,IAAI,CAACT,OAAO,CAACW,QAAQ,EAAEF,SAAS;EACzC;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":"11.1.0","buildDate":"2026-05-27T17:00:02.965Z"}
1
+ {"version":"11.2.0","buildDate":"2026-06-04T15:04:43.174Z"}
@@ -1,5 +1,6 @@
1
1
  import type { AdBreak } from './AdBreak';
2
2
  import type { CompanionAd } from 'theoplayer';
3
+ import { AdIntegrationKind, CustomAdIntegrationKind } from '../source/ads/Ads';
3
4
  /**
4
5
  * Represents a VAST creative. It is either a linear or non-linear ad.
5
6
  *
@@ -15,15 +16,12 @@ export interface Ad {
15
16
  */
16
17
  adSystem: string | undefined;
17
18
  /**
18
- * The integration of the ad, represented by a value from the following list:
19
- * <br/> - `'theo'`
20
- * <br/> - `'google-ima'`
21
- * <br/> - `'google-dai'`
22
- * <br/> - `'freewheel'`
19
+ * The integration of the ad, represented by a value from {@link AdIntegrationKind}
20
+ * or {@link CustomAdIntegrationKind | the identifier of a custom integration}.
23
21
  *
24
- * @defaultValue `'theo'`
22
+ * @defaultValue `'csai'`
25
23
  */
26
- integration?: string;
24
+ integration?: AdIntegrationKind | CustomAdIntegrationKind;
27
25
  /**
28
26
  * The type of the ad, represented by a value from the following list:
29
27
  * <br/> - `'linear'`
@@ -1 +1 @@
1
- {"version":3,"file":"Ad.d.ts","sourceRoot":"","sources":["../../../../src/api/ads/Ad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,WAAW,EAAE;IACjB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,YAAY,CAAC;IAE1B;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC;;;;;;OAMG;IACH,UAAU,EAAE,WAAW,EAAE,CAAC;IAE1B;;;;;;;;OAQG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;;;;OAKG;IACH,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,EAAE;IACrC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,WAAW,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAS,SAAQ,EAAE;IAClC;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"Ad.d.ts","sourceRoot":"","sources":["../../../../src/api/ads/Ad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,EAAE;IACjB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,iBAAiB,GAAG,uBAAuB,CAAC;IAE1D;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,YAAY,CAAC;IAE1B;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC;;;;;;OAMG;IACH,UAAU,EAAE,WAAW,EAAE,CAAC;IAE1B;;;;;;;;OAQG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;;;;OAKG;IACH,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,EAAE;IACrC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,WAAW,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAS,SAAQ,EAAE;IAClC;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB"}
@@ -5,6 +5,7 @@
5
5
  * @public
6
6
  */
7
7
  import type { Ad } from './Ad';
8
+ import { AdIntegrationKind, CustomAdIntegrationKind } from '../source/ads/Ads';
8
9
  /**
9
10
  * Represents an ad break in the VMAP specification or an ad pod in the VAST specification.
10
11
  *
@@ -13,13 +14,10 @@ import type { Ad } from './Ad';
13
14
  */
14
15
  export interface AdBreak {
15
16
  /**
16
- * The integration of the ad break, represented by a value from the following list:
17
- * <br/> - `'theo'`
18
- * <br/> - `'google-ima'`
19
- * <br/> - `'google-dai'`
20
- * <br/> - `'freewheel'`
17
+ * The integration of the ad break, represented by a value from {@link AdIntegrationKind}
18
+ * or {@link CustomAdIntegrationKind | the identifier of a custom integration}.
21
19
  */
22
- integration: string | undefined;
20
+ integration: AdIntegrationKind | CustomAdIntegrationKind | undefined;
23
21
  /**
24
22
  * List of ads which will be played sequentially at the ad break's time offset.
25
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AdBreak.d.ts","sourceRoot":"","sources":["../../../../src/api/ads/AdBreak.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC;;OAEG;IACH,GAAG,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;IAEtB;;;;;;;OAOG;IACH,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC;;;;;;OAMG;IACH,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C"}
1
+ {"version":3,"file":"AdBreak.d.ts","sourceRoot":"","sources":["../../../../src/api/ads/AdBreak.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,WAAW,EAAE,iBAAiB,GAAG,uBAAuB,GAAG,SAAS,CAAC;IAErE;;OAEG;IACH,GAAG,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;IAEtB;;;;;;;OAOG;IACH,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC;;;;;;OAMG;IACH,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C"}
@@ -41,10 +41,8 @@ export interface AdSource {
41
41
  export interface AdDescription {
42
42
  /**
43
43
  * The integration of the ad break.
44
- *
45
- * @defaultValue `'csai'`
46
44
  */
47
- integration?: AdIntegrationKind;
45
+ integration?: AdIntegrationKind | CustomAdIntegrationKind;
48
46
  /**
49
47
  * Whether the ad replaces playback of the content.
50
48
  *
@@ -109,4 +107,10 @@ export declare enum AdIntegrationKind {
109
107
  csai = "csai",
110
108
  theoads = "theoads"
111
109
  }
110
+ /**
111
+ * The identifier of a custom ad integration.
112
+ *
113
+ * @category Ads
114
+ */
115
+ export type CustomAdIntegrationKind = string & {};
112
116
  //# sourceMappingURL=Ads.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Ads.d.ts","sourceRoot":"","sources":["../../../../../src/api/source/ads/Ads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE5B;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,oBAAY,iBAAiB;IAC3B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;CACpB"}
1
+ {"version":3,"file":"Ads.d.ts","sourceRoot":"","sources":["../../../../../src/api/source/ads/Ads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,iBAAiB,GAAG,uBAAuB,CAAC;IAE1D;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE5B;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,oBAAY,iBAAiB;IAC3B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,EAAE,CAAC"}
@@ -94,6 +94,13 @@ export interface TheoAdDescription extends AdDescription {
94
94
  * The amount of seconds we wait to initialize THEOads.
95
95
  */
96
96
  initializationDelay?: number;
97
+ /**
98
+ * The URL of the break manifest.
99
+ *
100
+ * @remarks
101
+ * <br/> - The break manifest describes the upcoming ad breaks in the stream.
102
+ */
103
+ breakManifestUrl?: string;
97
104
  }
98
105
  /**
99
106
  * Describes how and when the layout of a THEOads ad break should be overridden:
@@ -1 +1 @@
1
- {"version":3,"file":"TheoAdDescription.d.ts","sourceRoot":"","sources":["../../../../../src/api/source/ads/TheoAdDescription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;OAEG;IACH,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC;IAEvC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAEvC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,MAAM,YAAY;IAClB,MAAM,WAAW;IACjB,gBAAgB,qBAAqB;CACtC"}
1
+ {"version":3,"file":"TheoAdDescription.d.ts","sourceRoot":"","sources":["../../../../../src/api/source/ads/TheoAdDescription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;OAEG;IACH,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC;IAEvC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAEvC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,MAAM,YAAY;IAClB,MAAM,WAAW;IACjB,gBAAgB,qBAAqB;CACtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TheoLiveWebAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/internal/adapter/theolive/TheoLiveWebAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,kBAAmB,YAAW,WAAW;IACxC,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;IAE7C,IAAI,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAGpC;IAED,IAAI,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAYtC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAI1B;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;CACF"}
1
+ {"version":3,"file":"TheoLiveWebAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/internal/adapter/theolive/TheoLiveWebAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,kBAAmB,YAAW,WAAW;IACxC,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;IAE7C,IAAI,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAGpC;IAED,IAAI,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAGtC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAI1B;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-theoplayer",
3
- "version": "11.1.0",
3
+ "version": "11.2.0",
4
4
  "description": "A THEOplayer video component for react-native.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -70,7 +70,7 @@
70
70
  "react": "^19.2.3",
71
71
  "react-native": "^0.84.1",
72
72
  "react-native-builder-bob": "^0.39.1",
73
- "theoplayer": "^11.0.0",
73
+ "theoplayer": "^11.4.0",
74
74
  "typedoc": "^0.25.13",
75
75
  "typedoc-plugin-external-resolver": "^1.0.3",
76
76
  "typedoc-plugin-mdn-links": "^3.3.4",
@@ -80,7 +80,7 @@
80
80
  "peerDependencies": {
81
81
  "react": "*",
82
82
  "react-native": "*",
83
- "theoplayer": "^11"
83
+ "theoplayer": "^11.4.0"
84
84
  },
85
85
  "peerDependenciesMeta": {
86
86
  "theoplayer": {
@@ -43,37 +43,37 @@ Pod::Spec.new do |s|
43
43
 
44
44
  # THEOplayer Dependency
45
45
  puts "Adding THEOplayerSDK-core"
46
- s.dependency "THEOplayerSDK-core", "~> 11.0"
46
+ s.dependency "THEOplayerSDK-core", "~> 11.4"
47
47
 
48
48
  # THEOlive Dependency
49
49
  puts "Adding THEOplayer-Integration-THEOlive"
50
- s.dependency "THEOplayer-Integration-THEOlive", "~> 11.0"
50
+ s.dependency "THEOplayer-Integration-THEOlive", "~> 11.4"
51
51
 
52
52
  # Feature based integration dependencies
53
53
  if theofeatures.include?("GOOGLE_IMA")
54
54
  puts "Adding THEOplayer-Integration-GoogleIMA"
55
- s.dependency "THEOplayer-Integration-GoogleIMA", "~> 11.0"
55
+ s.dependency "THEOplayer-Integration-GoogleIMA", "~> 11.4"
56
56
  end
57
57
 
58
58
  if theofeatures.include?("CHROMECAST")
59
59
  puts "Adding THEOplayer-Integration-GoogleCast"
60
- s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 11.0"
60
+ s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 11.4"
61
61
  end
62
62
 
63
63
  if theofeatures.include?("THEO_ADS")
64
64
  puts "Adding THEOplayer-Integration-THEOads"
65
- s.dependency "THEOplayer-Integration-THEOads", "~> 11.0"
65
+ s.dependency "THEOplayer-Integration-THEOads", "~> 11.4"
66
66
  end
67
67
 
68
68
  if theofeatures.include?("MILLICAST")
69
69
  puts "Adding THEOplayer-Integration-Millicast"
70
- s.dependency "THEOplayer-Integration-Millicast", "~> 11.0"
70
+ s.dependency "THEOplayer-Integration-Millicast", "~> 11.4"
71
71
  end
72
72
 
73
73
  # Feature based connector dependencies
74
74
  if theofeatures.include?("SIDELOADED_TEXTTRACKS")
75
75
  puts "Adding THEOplayer-Connector-SideloadedSubtitle"
76
- s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 11.0"
76
+ s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 11.0", "> 11.0.1"
77
77
  end
78
78
 
79
79
  end
package/src/api/ads/Ad.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { AdBreak } from './AdBreak';
2
2
  import type { CompanionAd } from 'theoplayer';
3
+ import { AdIntegrationKind, CustomAdIntegrationKind } from '../source/ads/Ads';
3
4
 
4
5
  /**
5
6
  * Represents a VAST creative. It is either a linear or non-linear ad.
@@ -17,15 +18,12 @@ export interface Ad {
17
18
  adSystem: string | undefined;
18
19
 
19
20
  /**
20
- * The integration of the ad, represented by a value from the following list:
21
- * <br/> - `'theo'`
22
- * <br/> - `'google-ima'`
23
- * <br/> - `'google-dai'`
24
- * <br/> - `'freewheel'`
21
+ * The integration of the ad, represented by a value from {@link AdIntegrationKind}
22
+ * or {@link CustomAdIntegrationKind | the identifier of a custom integration}.
25
23
  *
26
- * @defaultValue `'theo'`
24
+ * @defaultValue `'csai'`
27
25
  */
28
- integration?: string;
26
+ integration?: AdIntegrationKind | CustomAdIntegrationKind;
29
27
 
30
28
  /**
31
29
  * The type of the ad, represented by a value from the following list:
@@ -5,6 +5,7 @@
5
5
  * @public
6
6
  */
7
7
  import type { Ad } from './Ad';
8
+ import { AdIntegrationKind, CustomAdIntegrationKind } from '../source/ads/Ads';
8
9
 
9
10
  /**
10
11
  * Represents an ad break in the VMAP specification or an ad pod in the VAST specification.
@@ -14,13 +15,10 @@ import type { Ad } from './Ad';
14
15
  */
15
16
  export interface AdBreak {
16
17
  /**
17
- * The integration of the ad break, represented by a value from the following list:
18
- * <br/> - `'theo'`
19
- * <br/> - `'google-ima'`
20
- * <br/> - `'google-dai'`
21
- * <br/> - `'freewheel'`
18
+ * The integration of the ad break, represented by a value from {@link AdIntegrationKind}
19
+ * or {@link CustomAdIntegrationKind | the identifier of a custom integration}.
22
20
  */
23
- integration: string | undefined;
21
+ integration: AdIntegrationKind | CustomAdIntegrationKind | undefined;
24
22
 
25
23
  /**
26
24
  * List of ads which will be played sequentially at the ad break's time offset.
@@ -44,10 +44,8 @@ export interface AdSource {
44
44
  export interface AdDescription {
45
45
  /**
46
46
  * The integration of the ad break.
47
- *
48
- * @defaultValue `'csai'`
49
47
  */
50
- integration?: AdIntegrationKind;
48
+ integration?: AdIntegrationKind | CustomAdIntegrationKind;
51
49
 
52
50
  /**
53
51
  * Whether the ad replaces playback of the content.
@@ -116,3 +114,10 @@ export enum AdIntegrationKind {
116
114
  csai = 'csai',
117
115
  theoads = 'theoads',
118
116
  }
117
+
118
+ /**
119
+ * The identifier of a custom ad integration.
120
+ *
121
+ * @category Ads
122
+ */
123
+ export type CustomAdIntegrationKind = string & {};
@@ -107,6 +107,14 @@ export interface TheoAdDescription extends AdDescription {
107
107
  * The amount of seconds we wait to initialize THEOads.
108
108
  */
109
109
  initializationDelay?: number;
110
+
111
+ /**
112
+ * The URL of the break manifest.
113
+ *
114
+ * @remarks
115
+ * <br/> - The break manifest describes the upcoming ad breaks in the stream.
116
+ */
117
+ breakManifestUrl?: string;
110
118
  }
111
119
 
112
120
  /**
@@ -10,17 +10,8 @@ export class TheoLiveWebAdapter implements TheoLiveAPI {
10
10
  }
11
11
 
12
12
  get latencies(): Promise<HespLatencies> {
13
- const webLatencies = this._player.hesp?.latencies;
14
- if (webLatencies) {
15
- return Promise.resolve({
16
- engineLatency: webLatencies?.engine,
17
- distributionLatency: webLatencies?.distribution,
18
- playerLatency: webLatencies?.player,
19
- theoliveLatency: webLatencies?.theolive,
20
- });
21
- } else {
22
- return Promise.reject<HespLatencies>('latencies not available');
23
- }
13
+ console.warn('The THEOlive latencies metrics are not available');
14
+ return Promise.resolve({});
24
15
  }
25
16
 
26
17
  set authToken(token: string) {
package/src/manifest.json CHANGED
@@ -1 +1 @@
1
- {"version":"11.1.0","buildDate":"2026-05-27T17:00:02.965Z"}
1
+ {"version":"11.2.0","buildDate":"2026-06-04T15:04:43.174Z"}