@dolby-optiview/ads-sdk-core 1.2.0 → 1.3.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 (122) hide show
  1. package/dist/OptiViewAds.d.ts +5 -4
  2. package/dist/OptiViewAds.js +1 -1
  3. package/dist/external-playback/index.d.ts +4 -0
  4. package/dist/external-playback/index.js +1 -0
  5. package/dist/external-playback/observeExternalPlayback.d.ts +19 -0
  6. package/dist/external-playback/observeExternalPlayback.js +1 -0
  7. package/dist/external-playback/reconnectHold.d.ts +19 -0
  8. package/dist/external-playback/reconnectHold.js +1 -0
  9. package/dist/generated/diagnosticCodes.d.ts +45 -5
  10. package/dist/generated/diagnosticCodes.js +1 -1
  11. package/dist/generated/version.d.ts +1 -1
  12. package/dist/generated/version.js +1 -1
  13. package/dist/index.d.ts +6 -4
  14. package/dist/index.js +1 -1
  15. package/dist/interfaces/AdSourceQueue.d.ts +19 -0
  16. package/dist/interfaces/AdSourceQueue.js +1 -0
  17. package/dist/interfaces/PlayerAdapter.d.ts +31 -1
  18. package/dist/internal/index.d.ts +2 -0
  19. package/dist/internal/index.js +1 -1
  20. package/dist/services/AdBreakSequencer.d.ts +33 -4
  21. package/dist/services/AdBreakSequencer.js +1 -1
  22. package/dist/services/AdPlayerController.d.ts +8 -61
  23. package/dist/services/AdPlayerController.js +1 -1
  24. package/dist/services/BreakChain.d.ts +43 -0
  25. package/dist/services/BreakChain.js +1 -0
  26. package/dist/services/BreakChainRecorder.d.ts +63 -0
  27. package/dist/services/BreakChainRecorder.js +1 -0
  28. package/dist/services/BreakPreloadLedger.d.ts +13 -0
  29. package/dist/services/BreakPreloadLedger.js +1 -0
  30. package/dist/services/BreakScheduler.d.ts +20 -6
  31. package/dist/services/BreakScheduler.js +1 -1
  32. package/dist/services/BreakTransitionTimer.d.ts +27 -2
  33. package/dist/services/BreakTransitionTimer.js +1 -1
  34. package/dist/services/CmcdAdReporter.d.ts +1 -0
  35. package/dist/services/CmcdAdReporter.js +1 -1
  36. package/dist/services/ExternalPlaybackGate.d.ts +40 -0
  37. package/dist/services/ExternalPlaybackGate.js +1 -0
  38. package/dist/services/LiveStartPushbackController.d.ts +5 -10
  39. package/dist/services/LiveStartPushbackController.js +1 -1
  40. package/dist/services/ManifestService.d.ts +2 -1
  41. package/dist/services/ManifestService.js +1 -1
  42. package/dist/services/ReloadGuard.d.ts +11 -0
  43. package/dist/services/ReloadGuard.js +1 -0
  44. package/dist/services/RewindRearm.d.ts +3 -1
  45. package/dist/services/RewindRearm.js +1 -1
  46. package/dist/services/SsaiController.js +1 -1
  47. package/dist/services/adPlayer/AdPlayerCallbacks.d.ts +63 -0
  48. package/dist/services/adPlayer/AdPlayerCallbacks.js +1 -0
  49. package/dist/services/adPlayer/AdPlayerEvents.d.ts +2 -0
  50. package/dist/services/adPlayer/AdPlayerEvents.js +1 -1
  51. package/dist/services/adPlayer/AdPreloader.d.ts +2 -2
  52. package/dist/services/adPlayer/AdPreloader.js +1 -1
  53. package/dist/services/adPlayer/AdStage.d.ts +7 -4
  54. package/dist/services/adPlayer/AdStage.js +1 -1
  55. package/dist/services/adPlayer/AssetParameterResolver.d.ts +10 -2
  56. package/dist/services/adPlayer/AssetParameterResolver.js +1 -1
  57. package/dist/services/adPlayer/AssetPlayback.d.ts +6 -2
  58. package/dist/services/adPlayer/AssetPlayback.js +1 -1
  59. package/dist/services/adPlayer/BreakSequenceDriver.d.ts +9 -3
  60. package/dist/services/adPlayer/BreakSequenceDriver.js +1 -1
  61. package/dist/services/adPlayer/GamPodBridge.d.ts +11 -1
  62. package/dist/services/adPlayer/GamPodBridge.js +1 -1
  63. package/dist/services/adPlayer/PauseAdPresenter.d.ts +3 -1
  64. package/dist/services/adPlayer/PauseAdPresenter.js +1 -1
  65. package/dist/services/adPlayer/PreparedPresentation.js +1 -1
  66. package/dist/services/adPlayer/PresentationModeTracker.d.ts +1 -1
  67. package/dist/services/adPlayer/PresentationModeTracker.js +1 -1
  68. package/dist/services/adPlayer/SuccessorQueue.d.ts +36 -0
  69. package/dist/services/adPlayer/SuccessorQueue.js +1 -0
  70. package/dist/services/adPlayer/presentation/DomPresentationHost.d.ts +22 -0
  71. package/dist/services/adPlayer/presentation/DomPresentationHost.js +1 -0
  72. package/dist/services/adPlayer/presentation/LayoutTransform.d.ts +28 -0
  73. package/dist/services/adPlayer/presentation/LayoutTransform.js +1 -0
  74. package/dist/services/adPlayer/presentation/PresentationLayout.d.ts +19 -0
  75. package/dist/services/adPlayer/presentation/PresentationLayout.js +1 -0
  76. package/dist/services/assetParameterMacroTable.js +1 -1
  77. package/dist/services/assetParameterMacros.d.ts +9 -9
  78. package/dist/services/assetParameterMacros.js +1 -1
  79. package/dist/services/channelSwitch.d.ts +2 -2
  80. package/dist/services/externalPlaybackDiagnostic.d.ts +3 -0
  81. package/dist/services/externalPlaybackDiagnostic.js +1 -0
  82. package/dist/services/externalPlaybackGuard.d.ts +24 -0
  83. package/dist/services/externalPlaybackGuard.js +1 -0
  84. package/dist/services/parseBreakManifest.d.ts +2 -1
  85. package/dist/services/parseBreakManifest.js +1 -1
  86. package/dist/services/resolveChannelEvents.d.ts +17 -0
  87. package/dist/services/resolveChannelEvents.js +1 -0
  88. package/dist/services/resolveExternalVendorConfigurations.js +1 -1
  89. package/dist/services/resolveGamVendorConfiguration.d.ts +6 -1
  90. package/dist/services/resolveGamVendorConfiguration.js +1 -1
  91. package/dist/services/ssbStream.d.ts +39 -0
  92. package/dist/services/ssbStream.js +1 -0
  93. package/dist/services/ssbSwitchSignals.d.ts +15 -0
  94. package/dist/services/ssbSwitchSignals.js +1 -0
  95. package/dist/services/staticAssetUrl.d.ts +28 -0
  96. package/dist/services/staticAssetUrl.js +1 -0
  97. package/dist/session/AdBreakStatusTracker.d.ts +18 -0
  98. package/dist/session/AdBreakStatusTracker.js +1 -1
  99. package/dist/session/BreakLifecycle.d.ts +6 -0
  100. package/dist/session/BreakLifecycle.js +1 -1
  101. package/dist/session/SessionStarter.d.ts +6 -43
  102. package/dist/session/SessionStarter.js +1 -1
  103. package/dist/session/SessionStarterDeps.d.ts +39 -0
  104. package/dist/session/SessionStarterDeps.js +1 -0
  105. package/dist/session/SessionStarterHelpers.d.ts +36 -0
  106. package/dist/session/SessionStarterHelpers.js +1 -0
  107. package/dist/session/SessionState.d.ts +22 -2
  108. package/dist/session/SessionState.js +1 -1
  109. package/dist/session/SsbSwitch.d.ts +55 -0
  110. package/dist/session/SsbSwitch.js +1 -0
  111. package/dist/session/breakMeasurement.d.ts +16 -0
  112. package/dist/session/breakMeasurement.js +1 -0
  113. package/dist/session/contentSnapback.d.ts +13 -0
  114. package/dist/session/contentSnapback.js +1 -0
  115. package/dist/session/createExternalPlaybackGate.d.ts +19 -0
  116. package/dist/session/createExternalPlaybackGate.js +1 -0
  117. package/dist/session/sessionTick.d.ts +7 -0
  118. package/dist/session/sessionTick.js +1 -0
  119. package/dist/types/BreakManifest.d.ts +34 -2
  120. package/dist/types/Events.d.ts +20 -10
  121. package/dist/types/OptiViewAdsConfig.d.ts +24 -8
  122. package/package.json +5 -1
@@ -1,4 +1,4 @@
1
- /** Break Manifest types, per https://github.com/Dolby-OptiView/optiview-ads-manifest-spec/blob/v1.4.0/spec.md. */
1
+ /** Break Manifest types, per https://github.com/Dolby-OptiView/optiview-ads-manifest-spec/blob/v1.9.0/spec.md. */
2
2
  /** Which 'time' reference break start times use. @category Break Manifests & Ad Formats */
3
3
  export declare enum Timebase {
4
4
  /** An absolute ISO-8601 timestamp */
@@ -28,10 +28,26 @@ export interface GamSgaiConfiguration {
28
28
  customAssetKey: string;
29
29
  assetParameters?: Record<string, string>;
30
30
  }
31
+ /**
32
+ * Server-side beaconing (SSB) stream the channel offers next to the DAI livestream (manifest spec
33
+ * 1.9.0 draft). While present, the SDK keeps the content player off AirPlay around ad breaks.
34
+ * @category Break Manifests & Ad Formats */
35
+ export interface GamSsbConfiguration {
36
+ /** The SSB stream URL. */
37
+ uri: string;
38
+ /** The stream format, e.g. `hls`. */
39
+ format?: string;
40
+ /** Stream request parameters. */
41
+ assetParameters?: Record<string, string>;
42
+ /** DRM configuration, passed through untouched. */
43
+ drm?: Record<string, unknown>;
44
+ }
31
45
  /** Session-level GAM configuration for full-service DAI SSAI. @category Break Manifests & Ad Formats */
32
46
  export interface GamSsaiConfiguration {
33
47
  assetKey: string;
34
48
  assetParameters?: Record<string, string>;
49
+ /** The channel's server-side beaconing stream, when it has one. */
50
+ ssb?: GamSsbConfiguration;
35
51
  }
36
52
  /**
37
53
  * The GAM identity needed to create the IMA/DAI stream session. Must agree with the per-asset
@@ -74,7 +90,7 @@ export interface BreakManifest {
74
90
  /** Identifier of the channel the stream belongs to. */
75
91
  channelId?: string;
76
92
  /** Identifier of the event being streamed. */
77
- eventId?: string;
93
+ eventId?: string | null;
78
94
  /** Determines how often the manifest should be refreshed */
79
95
  polling?: Polling;
80
96
  /** Ordered delivery-steering rules (first match wins), evaluated once on the first fetch; absent means sgai. */
@@ -83,9 +99,20 @@ export interface BreakManifest {
83
99
  adStartDelay?: number;
84
100
  /** Session-level configuration per vendor integration (spec 1.1.0). */
85
101
  vendorConfiguration?: VendorConfiguration[];
102
+ /** Event-specific configuration windows on a wallclock live stream. */
103
+ events?: ChannelEvent[];
86
104
  /** The available breaks */
87
105
  breaks: Break[];
88
106
  }
107
+ /** An event window and the session configuration in effect while it runs. */
108
+ export interface ChannelEvent {
109
+ id: string;
110
+ start: string;
111
+ end: string;
112
+ adStartDelay?: number;
113
+ delivery?: DeliveryRule[];
114
+ vendorConfiguration?: VendorConfiguration[];
115
+ }
89
116
  /** Delivery architecture selected by a {@link DeliveryRule}. @category Break Manifests & Ad Formats */
90
117
  export declare enum DeliveryMode {
91
118
  /** Server-Guided Ad Insertion — the SDK schedules and renders breaks client-side. */
@@ -324,6 +351,11 @@ export interface StaticAsset extends BaseAsset {
324
351
  type: AssetType.STATIC;
325
352
  /** The resource URL or array of URLs with targeting */
326
353
  uri: string | AssetUri[];
354
+ /**
355
+ * Query parameters the player appends to the resource URL (for HLS or DASH, only the
356
+ * master playlist or MPD request). Values may be `$NAME$` macros.
357
+ */
358
+ assetParameters?: Record<string, string>;
327
359
  }
328
360
  /** VAST asset, played by Google IMA as CSAI. SGAI only, linear formats only (single, double, lshape_ad). @category Break Manifests & Ad Formats */
329
361
  export interface VastAsset extends BaseAsset {
@@ -1,5 +1,5 @@
1
1
  import { Break, Asset, BreakFormat } from './BreakManifest';
2
- import type { OptiViewAdsMode } from './OptiViewAdsConfig';
2
+ import type { SessionDeliveryMode } from './OptiViewAdsConfig';
3
3
  /**
4
4
  * Lifecycle phase reported by {@link AdBreakStatus}.
5
5
  * - `idle`: no break is upcoming or active.
@@ -8,7 +8,7 @@ import type { OptiViewAdsMode } from './OptiViewAdsConfig';
8
8
  * @category Events */
9
9
  export type AdBreakPhase = 'idle' | 'upcoming' | 'active' | 'complete';
10
10
  /** Why a scheduled ad break was refused before it began (`adbreakskipped` event). @category Events */
11
- export type AdBreakSkipReason = 'late' | 'not-ready' | 'preparation-failed' | 'unsupported' | 'overlap' | 'start-delay' | 'removed' | 'insufficient-remaining' | 'resource-limit';
11
+ export type AdBreakSkipReason = 'late' | 'not-ready' | 'preparation-failed' | 'unsupported' | 'overlap' | 'start-delay' | 'removed' | 'insufficient-remaining' | 'resource-limit' | 'played-by-ssb';
12
12
  export interface AdBreakSkippedEvent extends OptiViewAdsEvent {
13
13
  type: 'adbreakskipped';
14
14
  break: Break;
@@ -37,6 +37,14 @@ export interface AdBreakStatus {
37
37
  ticking: boolean;
38
38
  /** The configured warning second that was crossed, when a pre-break warning triggered this status. */
39
39
  warningSec?: number | undefined;
40
+ /**
41
+ * Whether the content player may start AirPlay right now: `false` during a break and in the
42
+ * seconds before one. Present only when the SDK manages the AirPlay gate (the manifest carries a
43
+ * server-side beaconing stream and the adapter can gate external playback).
44
+ */
45
+ externalPlaybackAllowed?: boolean | undefined;
46
+ /** Delivery mode of the active session; `ssb` while AirPlay plays the server-side beaconing stream. Absent between sessions. */
47
+ deliveryMode?: SessionDeliveryMode | undefined;
40
48
  }
41
49
  /** Event types emitted by the OptiViewAds SDK. @category Events */
42
50
  export type OptiViewAdsEventType = 'adbreakbegin' | 'adbreakend' | 'adbreakskipped' | 'adbegin' | 'adend' | 'aderror' | 'adfirstquartile' | 'admidpoint' | 'adthirdquartile' | 'adtimeupdate' | 'adbreakstatus' | 'adclick' | 'waiting' | 'playing' | 'volumechange' | 'adchannelchange' | 'externalvendorconfigurationchange';
@@ -209,13 +217,13 @@ export interface AdClickEvent extends OptiViewAdsEvent {
209
217
  asset: Asset;
210
218
  clickThrough?: string | undefined;
211
219
  }
212
- /** Why the SDK rebuilt its ad setup from a polled manifest; see {@link AdChannelChangeEvent}. @category Events */
213
- export type AdChannelChangeReason = 'channel-id-changed' | 'channel-id-added' | 'channel-id-removed' | 'vendor-configuration-changed' | 'timebase-changed';
220
+ /** Why the SDK re-aligned ad configuration after a polled channel or event change; see {@link AdChannelChangeEvent}. @category Events */
221
+ export type AdChannelChangeReason = 'channel-id-changed' | 'channel-id-added' | 'channel-id-removed' | 'vendor-configuration-changed' | 'timebase-changed' | 'event-boundary' | 'external-playback';
214
222
  /**
215
- * Emitted when a polled manifest describes a different ads channel than the one the session
216
- * was started on. During an active break, the event is emitted after that break finishes and
217
- * the latest polled manifest is applied. Before playback starts, the new manifest's
218
- * `adStartDelay` applies; after playback starts, the delay in effect is unchanged.
223
+ * Emitted when a polled manifest changes the ads channel or playback crosses a channel-event
224
+ * boundary. Event-boundary changes use reason `event-boundary` and identify the active event
225
+ * with `eventId` (or `null` when no event is active). During an active break, the event is
226
+ * emitted after that break finishes and the latest manifest is applied.
219
227
  * @category Events */
220
228
  export interface AdChannelChangeEvent extends OptiViewAdsEvent {
221
229
  type: 'adchannelchange';
@@ -223,13 +231,15 @@ export interface AdChannelChangeEvent extends OptiViewAdsEvent {
223
231
  previousChannelId: string | null;
224
232
  /** `channelId` of the manifest the session is aligned to now; `null` when it has none. */
225
233
  channelId: string | null;
234
+ /** Event id in effect after the boundary, or null when no event is active. */
235
+ eventId: string | null;
226
236
  reason: AdChannelChangeReason;
227
237
  /** The polled manifest URL (unchanged by the switch). */
228
238
  manifestUrl: string;
229
239
  /** Delivery mode in effect before the switch. */
230
- previousDeliveryMode: OptiViewAdsMode;
240
+ previousDeliveryMode: SessionDeliveryMode;
231
241
  /** Delivery mode in effect after the switch. */
232
- deliveryMode: OptiViewAdsMode;
242
+ deliveryMode: SessionDeliveryMode;
233
243
  }
234
244
  /** An external provider's manifest parameter template was added, changed, or removed. @category Events */
235
245
  export interface ExternalVendorConfigurationChangeEvent extends OptiViewAdsEvent {
@@ -112,8 +112,8 @@ export type AdInsertionType = 'replacement' | 'insertion';
112
112
  /** Initial live-playback distance from the reported edge. @category Configuration */
113
113
  export interface LiveStartPushbackConfig {
114
114
  /**
115
- * Apply once per session/channel. When omitted, it follows `ptsSource`: on for `'anvatoCue'`,
116
- * off for `'mediaTime'`. An explicit value always wins.
115
+ * Apply once per session/channel. Off unless set to `true`, for every `ptsSource`.
116
+ * @default false
117
117
  */
118
118
  enabled?: boolean;
119
119
  /** Minimum total distance in target durations, not an additional rewind. @default 5 */
@@ -127,6 +127,8 @@ export interface LiveStartPushbackConfig {
127
127
  * stream, loads the stitched master, forwards timed metadata to IMA and re-emits ad events.
128
128
  * @category Configuration */
129
129
  export type OptiViewAdsMode = 'sgai' | 'ssai';
130
+ /** The delivery mode a session runs in: `ssb` while AirPlay plays the channel's server-side beaconing stream. @category SDK & Sessions */
131
+ export type SessionDeliveryMode = OptiViewAdsMode | 'ssb';
130
132
  /** How a PTS-timebase break's `start` value is resolved. @category Configuration */
131
133
  export type PtsSource = 'mediaTime' | 'anvatoCue';
132
134
  /** Default ad insertion architecture. */
@@ -245,6 +247,14 @@ export interface DiagnosticsConfig {
245
247
  */
246
248
  bufferSize?: number;
247
249
  }
250
+ /** AirPlay guard settings. @category Configuration */
251
+ export interface ExternalPlaybackConfig {
252
+ /**
253
+ * Seconds before a scheduled break during which AirPlay may not start; `0` blocks only during a break.
254
+ * @default 5
255
+ */
256
+ blockBeforeBreakSec?: number;
257
+ }
248
258
  /** SDK instance configuration, fixed for its lifetime (org-level). @category Configuration */
249
259
  export interface OptiViewAdsConfig {
250
260
  /**
@@ -348,7 +358,12 @@ export interface OptiViewAdsConfig {
348
358
  */
349
359
  continueContentDuringBreak?: boolean;
350
360
  /**
351
- * Live startup adjustment, on by default with `ptsSource: 'anvatoCue'`; does not change later
361
+ * AirPlay (external playback) guard, active only when the manifest carries a server-side
362
+ * beaconing (`ssb`) stream and the content adapter can gate external playback.
363
+ */
364
+ externalPlayback?: ExternalPlaybackConfig;
365
+ /**
366
+ * Live startup adjustment, off unless `liveStartPushback.enabled` is `true`; does not change later
352
367
  * break-resume policy.
353
368
  */
354
369
  liveStartPushback?: LiveStartPushbackConfig;
@@ -418,11 +433,12 @@ export interface SessionConfig {
418
433
  * manifest / session / update value is replaced when the ad request is built,
419
434
  * so `"$OPTIVIEW_PLAYER_WIDTH$x$OPTIVIEW_PLAYER_HEIGHT$"` becomes `"1920x1080"`.
420
435
  * Customer macros are consulted before the built-in `$OPTIVIEW_*` set, so a built-in can be
421
- * overridden. A string replaces the token. `null` omits the parameter; for GAM `cust_params`,
422
- * only the containing pair is dropped and the key is omitted if no pair remains. For VAST,
423
- * the whole `cust_params` parameter is omitted. `undefined` leaves an unresolved token literal
424
- * and sends the parameter. `DA-ASSET-MACRO-UNKNOWN` reports
425
- * unresolved built-in or registered macros; `DA-ASSET-PARAMETER-OMITTED` reports null omissions.
436
+ * overridden. A string replaces the token. `""`, `null`, or a registered callback's `undefined`
437
+ * result omits the parameter, or only the containing pair when its value has a literal `&`;
438
+ * `DA-ASSET-PARAMETER-OMITTED` reports the omission. An `undefined` map entry is not registered.
439
+ * `updateAssetParameterMacros` uses `undefined` to unregister a name. A throwing callback warns
440
+ * and is unresolved, falling back to a built-in when one exists. `DA-ASSET-MACRO-UNKNOWN` reports
441
+ * unresolved built-in or registered macros.
426
442
  * Other unresolved `$NAME$` tokens stay literal without a diagnostic. `$` without a closing `$`
427
443
  * is unchanged.
428
444
  * Callbacks are evaluated per ad request and cleared when the session ends.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dolby-optiview/ads-sdk-core",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "OptiView Ads SDK Core - Player-agnostic ad insertion",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,6 +17,10 @@
17
17
  "types": "./dist/id3/index.d.ts",
18
18
  "default": "./dist/id3/index.js"
19
19
  },
20
+ "./external-playback": {
21
+ "types": "./dist/external-playback/index.d.ts",
22
+ "default": "./dist/external-playback/index.js"
23
+ },
20
24
  "./server": {
21
25
  "types": "./dist/server/index.d.ts",
22
26
  "default": "./dist/server/index.js"