@dolby-optiview/ads-sdk-adapter-shaka 1.1.1 → 1.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.
@@ -215,6 +215,7 @@ export declare class ShakaAdapter implements PlayerAdapter {
215
215
  * Current playback time in seconds.
216
216
  */
217
217
  get currentTime(): number;
218
+ prepareForAdPlayback(): void;
218
219
  /**
219
220
  * Total duration of the content in seconds.
220
221
  */
@@ -1 +1 @@
1
- import{decodeUtf8 as e,parseId3GeobBody as t}from"@dolby-optiview/ads-sdk-core/id3";import{shakaPtsOffsetAt as i}from"./shakaPtsOffset";function a(e){if(null!=e)return"string"==typeof e?e:r(e)?new TextDecoder("utf-8").decode(e):ArrayBuffer.isView(e)?new TextDecoder("utf-8").decode(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)):String(e)}function r(e){return e instanceof ArrayBuffer||"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function s(e){if(r(e))return new Uint8Array(e);const t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}export class ShakaAdapter{constructor(e,t){this.eventListeners=new Map,this.boundHandlers=new Map,this.deferredSeekTime=null,this.loadingViaAdapter=!1,this.pendingPresentationDelay=null,this.abrEnabledBeforePin=null,this.variantBeforePin=null,this.emittedCueKeys=new Set,this.player=e,this.video=t;const i=e.load;this.originalPlayerLoad=i,e.load=async(...t)=>{null!==this.pendingPresentationDelay&&e.configure?.("manifest.defaultPresentationDelay",this.pendingPresentationDelay),this.pendingPresentationDelay=null;try{return await i.apply(e,t)}catch(e){throw this.loadingViaAdapter||function(e){return"object"==typeof e&&null!==e&&7e3===e.code}(e)||this.emit("error",e),e}},this.setupVideoListeners(),this.setupMetadataListener()}get currentTime(){return this.video.currentTime}get duration(){return this.video.duration}get isLive(){return this.player.isLive?.()??null}get paused(){return this.video.paused}get playbackReady(){return this.video.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA&&!this.video.seeking}get muted(){return this.video.muted}set muted(e){this.video.muted=e}get volume(){return this.video.volume}set volume(e){this.video.volume=e}get videoElement(){return this.video}get programDateTime(){try{const e=this.player.getManifest();if(!e)return null;const t=e.presentationTimeline.getInitialProgramDateTime();return null==t?null:new Date(1e3*(t+this.video.currentTime))}catch{return null}}pause(){this.video.pause()}async play(){await this.video.play()}seek(e){this.video.seeking?this.deferredSeekTime=e:this.video.currentTime=e}get sourceUrl(){return this.player.getAssetUri?.()??null}async load(e){this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{await this.player.load(e)}finally{this.loadingViaAdapter=!1}}async releaseMediaElement(){await(this.player.detach?.())}async unload(){"function"==typeof this.player.unload?await this.player.unload(!1):await(this.player.detach?.())}async recreateMediaPipeline(e){const t=this.sourceUrl;if(!t)throw new Error("Shaka pipeline recreate: no asset URI");this.deferredSeekTime=null;const i=e.startTime,a=!0===this.isLive;let r;try{r=this.player.getManifest()?.presentationTimeline.getInitialProgramDateTime()??null}catch{r=null}const s=a&&null!==r?1e3*(r+i):null,n=this.player.seekRange?.()?.end,d=a&&void 0!==n&&Number.isFinite(n)?Math.max(0,n-i):null;await this.unload(),this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{if(a)if(null!==s)await this.player.load(t,new Date(s));else if(null!==d){await this.player.load(t,null);const e=this.player.seekRange?.()?.end;if(void 0!==e&&Number.isFinite(e)){const t=e-d;Math.abs(t-this.video.currentTime)>.5&&(this.video.currentTime=t)}}else await this.player.load(t,i);else await this.player.load(t,i)}finally{this.loadingViaAdapter=!1}}on(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t)}off(e,t){const i=this.eventListeners.get(e);i&&i.delete(t)}destroy(){for(const[e,t]of this.boundHandlers)this.video.removeEventListener(e,t);this.boundHandlers.clear(),this.deferredSeekTime=null,this.player.removeEventListener&&(this.presentedMetadataHandler&&(this.player.removeEventListener("metadata",this.presentedMetadataHandler),this.presentedMetadataHandler=void 0),this.parsedMetadataHandler&&(this.player.removeEventListener("metadataadded",this.parsedMetadataHandler),this.parsedMetadataHandler=void 0)),this.emsgHandler&&this.player.removeEventListener&&(this.player.removeEventListener("emsg",this.emsgHandler),this.emsgHandler=void 0),this.shakaErrorHandler&&this.player.removeEventListener&&(this.player.removeEventListener("error",this.shakaErrorHandler),this.shakaErrorHandler=void 0),this.originalPlayerLoad&&(this.player.load=this.originalPlayerLoad,this.originalPlayerLoad=void 0),this.emittedCueKeys.clear(),this.eventListeners.clear(),this.player.destroy()}get playbackRate(){return this.video.playbackRate}set playbackRate(e){this.video.playbackRate=e}setVideoQuality(e){if(null===e){if(null===this.abrEnabledBeforePin)return!1;const e=this.abrEnabledBeforePin,t=this.variantBeforePin;if(e){if(!this.player.configure)return!1;this.player.configure("abr.enabled",!0)}else{if(!t)return!1;if(!this.player.selectVariantTrack)return!1;this.player.selectVariantTrack(t,!1)}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!0}const t=this.player.getVariantTracks?.();if(!t||!this.player.selectVariantTrack)return!1;const i=t.filter(e=>{const t=e?.bandwidth;return"number"==typeof t&&Number.isFinite(t)&&t>0});if(i.length<2)return!1;let a=i[0];for(let e=1;e<i.length;e++)i[e].bandwidth<a.bandwidth&&(a=i[e]);if(null!==this.abrEnabledBeforePin)return!0;const r=this.player.getConfiguration?.()?.abr?.enabled??!0,s=t.find(e=>e?.active)??null;if(r&&!this.player.configure||!r&&!s)return!1;this.abrEnabledBeforePin=r,this.variantBeforePin=s;try{return this.player.configure?.("abr.enabled",!1),this.player.selectVariantTrack(a,!1),!0}catch{if(r)try{this.player.configure?.("abr.enabled",!0)}catch{this.variantBeforePin=null}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!1}}requestLiveStartOffset(e,t){const i=(e??NaN)*(t??NaN),a=Number.isFinite(i)&&i>0&&!!this.player.configure&&!this.player.getManifest();return this.pendingPresentationDelay=a?i:null,a}get liveEdge(){const e=this.player.isLive?.()?this.player.getManifest()?.presentationTimeline.getMaxSegmentEndTime?.():null;return"number"==typeof e&&Number.isFinite(e)?e:null}get maxLiveSeekPosition(){if(!this.player.isLive?.())return null;const e=this.player.seekRange?.(),t=e?.end;if("number"!=typeof t||!Number.isFinite(t))return null;const i=this.player.getConfiguration?.()?.streaming,a=i?.liveSync;let r;if(a?.enabled){const e=a.targetLatency,t=a.targetLatencyTolerance??0;"number"==typeof e&&(r=e-t)}if(void 0===r&&(r=i?.safeSeekEndOffset),"number"!=typeof r||!Number.isFinite(r))return null;const s=t-r;return Number.isFinite(s)?s:null}setupMetadataListener(){if(!this.player.addEventListener)return;const e=e=>t=>{const i={...this.toCue(t),phase:e};this.isDuplicateCue(i)||this.emit("timedmetadata",i)};this.parsedMetadataHandler=e("parsed"),this.presentedMetadataHandler=e("presented"),this.player.addEventListener("metadata",this.presentedMetadataHandler),this.player.addEventListener("metadataadded",this.parsedMetadataHandler);const t=e=>{const t=e.detail;t&&this.emit("timedmetadata",this.emsgToCue(t))};this.emsgHandler=t,this.player.addEventListener("emsg",t);const i=e=>{2===e.detail?.severity&&this.emit("error",e.detail)};this.shakaErrorHandler=i,this.player.addEventListener("error",i)}isDuplicateCue(e){const t=[e.startTime,e.description??"",e.mimeType??"",e.messageData??"",e.frames?JSON.stringify(e.frames):"",e.phase??""].join("\0");return!!this.emittedCueKeys.has(t)||(this.emittedCueKeys.add(t),this.emittedCueKeys.size>256&&this.emittedCueKeys.delete(this.emittedCueKeys.values().next().value),!1)}toCue(i){const n=(i.metadataType??"").toLowerCase(),d=n.includes("emsg")?"emsg":n.includes("daterange")?"daterange":"id3",l=i.payload?.key??i.key,o=i.payload?.data??i.payload?.value??i.data,h={type:d,startTime:i.startTime??i.cueTime??0,endTime:i.endTime};if(void 0!==i.schemeIdUri&&(h.schemeIdUri=i.schemeIdUri),"emsg"===d){const e=null==o?null:s(o);e&&(h.raw=e)}if("id3"===d&&"GEOB"===l){const n=function(e,t){return(void 0===e||""===e)&&(r(t)||ArrayBuffer.isView(t))}(i.payload?.description,o)?t(s(o)):null;if(n)return h.description=n.description,n.mimeType&&(h.mimeType=n.mimeType),h.messageData=e(n.data),h;void 0!==i.payload?.description&&(h.description=i.payload.description),null!=i.payload?.mimeType&&(h.mimeType=i.payload.mimeType);const d=a(o);return void 0!==d&&(h.messageData=d),h}const u="id3"===d?null==o?void 0:String(o):a(o);return l&&void 0!==u?"id3"===d?h.frames={[l]:u}:h.messageData=u:void 0!==u&&(h.messageData=u),h}emsgToCue(e){const t={type:"emsg",startTime:e.startTime??0,endTime:e.endTime};void 0!==e.schemeIdUri&&(t.schemeIdUri=e.schemeIdUri),void 0!==e.id&&(t.id=String(e.id));const r=i(this.player.getManifest(),t.startTime);if(void 0!==r&&(t.ptsOffset=r),null!=e.messageData){const i=s(e.messageData);i&&(t.raw=i)}const n=a(e.messageData);return void 0!==n&&(t.messageData=n),t}setupVideoListeners(){const e=()=>{this.emit("timeupdate")},t=()=>{this.emit("ended")},i=()=>{this.emit("error",this.video.error)},a=()=>{if(this.emit("seeked"),null!==this.deferredSeekTime){const e=this.deferredSeekTime;this.deferredSeekTime=null,this.seek(e)}},r=()=>{this.emit("volumechange")},s=()=>{this.emit("waiting")},n=()=>{this.emit("playing")},d=()=>{this.emit("pause")};this.video.addEventListener("timeupdate",e),this.video.addEventListener("ended",t),this.video.addEventListener("error",i),this.video.addEventListener("seeked",a),this.video.addEventListener("volumechange",r),this.video.addEventListener("waiting",s),this.video.addEventListener("playing",n),this.video.addEventListener("pause",d),this.boundHandlers.set("timeupdate",e),this.boundHandlers.set("ended",t),this.boundHandlers.set("error",i),this.boundHandlers.set("seeked",a),this.boundHandlers.set("volumechange",r),this.boundHandlers.set("waiting",s),this.boundHandlers.set("playing",n),this.boundHandlers.set("pause",d)}emit(e,t){const i=this.eventListeners.get(e);if(i)for(const e of i)try{e(t)}catch(e){console.error("[ShakaAdapter] Event handler error:",e)}}}
1
+ import{decodeUtf8 as e,parseId3GeobBody as t}from"@dolby-optiview/ads-sdk-core/id3";import{shakaPtsOffsetAt as i}from"./shakaPtsOffset";import{isLoadInterrupted as a,refineShakaLoadError as r}from"./shakaLoadError";function s(e){if(null!=e)return"string"==typeof e?e:n(e)?new TextDecoder("utf-8").decode(e):ArrayBuffer.isView(e)?new TextDecoder("utf-8").decode(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)):String(e)}function n(e){return e instanceof ArrayBuffer||"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function d(e){if(n(e))return new Uint8Array(e);const t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}export class ShakaAdapter{constructor(e,t){this.eventListeners=new Map,this.boundHandlers=new Map,this.deferredSeekTime=null,this.loadingViaAdapter=!1,this.pendingPresentationDelay=null,this.abrEnabledBeforePin=null,this.variantBeforePin=null,this.emittedCueKeys=new Set,this.player=e,this.video=t;const i=e.load;this.originalPlayerLoad=i,e.load=async(...t)=>{null!==this.pendingPresentationDelay&&e.configure?.("manifest.defaultPresentationDelay",this.pendingPresentationDelay),this.pendingPresentationDelay=null;try{return await i.apply(e,t)}catch(e){throw this.loadingViaAdapter||a(e)||this.emit("error",e),e}},this.setupVideoListeners(),this.setupMetadataListener()}get currentTime(){return this.video.currentTime}prepareForAdPlayback(){try{this.player.configure?.("mediaSource.dispatchAllEmsgBoxes",!0)}catch{return}}get duration(){return this.video.duration}get isLive(){return this.player.isLive?.()??null}get paused(){return this.video.paused}get playbackReady(){return this.video.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA&&!this.video.seeking}get muted(){return this.video.muted}set muted(e){this.video.muted=e}get volume(){return this.video.volume}set volume(e){this.video.volume=e}get videoElement(){return this.video}get programDateTime(){try{const e=this.player.getManifest();if(!e)return null;const t=e.presentationTimeline.getInitialProgramDateTime();return null==t?null:new Date(1e3*(t+this.video.currentTime))}catch{return null}}pause(){this.video.pause()}async play(){await this.video.play()}seek(e){this.video.seeking?this.deferredSeekTime=e:this.video.currentTime=e}get sourceUrl(){return this.player.getAssetUri?.()??null}async load(e){this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{await this.player.load(e)}catch(t){throw await r(t,e)}finally{this.loadingViaAdapter=!1}}async releaseMediaElement(){await(this.player.detach?.())}async unload(){"function"==typeof this.player.unload?await this.player.unload(!1):await(this.player.detach?.())}async recreateMediaPipeline(e){const t=this.sourceUrl;if(!t)throw new Error("Shaka pipeline recreate: no asset URI");this.deferredSeekTime=null;const i=e.startTime,a=!0===this.isLive;let r;try{r=this.player.getManifest()?.presentationTimeline.getInitialProgramDateTime()??null}catch{r=null}const s=a&&null!==r?1e3*(r+i):null,n=this.player.seekRange?.()?.end,d=a&&void 0!==n&&Number.isFinite(n)?Math.max(0,n-i):null;await this.unload(),this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{if(a)if(null!==s)await this.player.load(t,new Date(s));else if(null!==d){await this.player.load(t,null);const e=this.player.seekRange?.()?.end;if(void 0!==e&&Number.isFinite(e)){const t=e-d;Math.abs(t-this.video.currentTime)>.5&&(this.video.currentTime=t)}}else await this.player.load(t,i);else await this.player.load(t,i)}finally{this.loadingViaAdapter=!1}}on(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t)}off(e,t){const i=this.eventListeners.get(e);i&&i.delete(t)}destroy(){for(const[e,t]of this.boundHandlers)this.video.removeEventListener(e,t);this.boundHandlers.clear(),this.deferredSeekTime=null,this.player.removeEventListener&&(this.presentedMetadataHandler&&(this.player.removeEventListener("metadata",this.presentedMetadataHandler),this.presentedMetadataHandler=void 0),this.parsedMetadataHandler&&(this.player.removeEventListener("metadataadded",this.parsedMetadataHandler),this.parsedMetadataHandler=void 0)),this.emsgHandler&&this.player.removeEventListener&&(this.player.removeEventListener("emsg",this.emsgHandler),this.emsgHandler=void 0),this.shakaErrorHandler&&this.player.removeEventListener&&(this.player.removeEventListener("error",this.shakaErrorHandler),this.shakaErrorHandler=void 0),this.originalPlayerLoad&&(this.player.load=this.originalPlayerLoad,this.originalPlayerLoad=void 0),this.emittedCueKeys.clear(),this.eventListeners.clear(),this.player.destroy()}get playbackRate(){return this.video.playbackRate}set playbackRate(e){this.video.playbackRate=e}setVideoQuality(e){if(null===e){if(null===this.abrEnabledBeforePin)return!1;const e=this.abrEnabledBeforePin,t=this.variantBeforePin;if(e){if(!this.player.configure)return!1;this.player.configure("abr.enabled",!0)}else{if(!t)return!1;if(!this.player.selectVariantTrack)return!1;this.player.selectVariantTrack(t,!1)}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!0}const t=this.player.getVariantTracks?.();if(!t||!this.player.selectVariantTrack)return!1;const i=t.filter(e=>{const t=e?.bandwidth;return"number"==typeof t&&Number.isFinite(t)&&t>0});if(i.length<2)return!1;let a=i[0];for(let e=1;e<i.length;e++)i[e].bandwidth<a.bandwidth&&(a=i[e]);if(null!==this.abrEnabledBeforePin)return!0;const r=this.player.getConfiguration?.()?.abr?.enabled??!0,s=t.find(e=>e?.active)??null;if(r&&!this.player.configure||!r&&!s)return!1;this.abrEnabledBeforePin=r,this.variantBeforePin=s;try{return this.player.configure?.("abr.enabled",!1),this.player.selectVariantTrack(a,!1),!0}catch{if(r)try{this.player.configure?.("abr.enabled",!0)}catch{this.variantBeforePin=null}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!1}}requestLiveStartOffset(e,t){const i=(e??NaN)*(t??NaN),a=Number.isFinite(i)&&i>0&&!!this.player.configure&&!this.player.getManifest();return this.pendingPresentationDelay=a?i:null,a}get liveEdge(){const e=this.player.isLive?.()?this.player.getManifest()?.presentationTimeline.getMaxSegmentEndTime?.():null;return"number"==typeof e&&Number.isFinite(e)?e:null}get maxLiveSeekPosition(){if(!this.player.isLive?.())return null;const e=this.player.seekRange?.(),t=e?.end;if("number"!=typeof t||!Number.isFinite(t))return null;const i=this.player.getConfiguration?.()?.streaming,a=i?.liveSync;let r;if(a?.enabled){const e=a.targetLatency,t=a.targetLatencyTolerance??0;"number"==typeof e&&(r=e-t)}if(void 0===r&&(r=i?.safeSeekEndOffset),"number"!=typeof r||!Number.isFinite(r))return null;const s=t-r;return Number.isFinite(s)?s:null}setupMetadataListener(){if(!this.player.addEventListener)return;const e=e=>t=>{const i={...this.toCue(t),phase:e};this.isDuplicateCue(i)||this.emit("timedmetadata",i)};this.parsedMetadataHandler=e("parsed"),this.presentedMetadataHandler=e("presented"),this.player.addEventListener("metadata",this.presentedMetadataHandler),this.player.addEventListener("metadataadded",this.parsedMetadataHandler);const t=e=>{const t=e.detail;t&&this.emit("timedmetadata",this.emsgToCue(t))};this.emsgHandler=t,this.player.addEventListener("emsg",t);const i=e=>{2!==e.detail?.severity||this.loadingViaAdapter||this.emit("error",e.detail)};this.shakaErrorHandler=i,this.player.addEventListener("error",i)}isDuplicateCue(e){const t=[e.startTime,e.description??"",e.mimeType??"",e.messageData??"",e.frames?JSON.stringify(e.frames):"",e.phase??""].join("\0");return!!this.emittedCueKeys.has(t)||(this.emittedCueKeys.add(t),this.emittedCueKeys.size>256&&this.emittedCueKeys.delete(this.emittedCueKeys.values().next().value),!1)}toCue(i){const a=(i.metadataType??"").toLowerCase(),r=a.includes("emsg")?"emsg":a.includes("daterange")?"daterange":"id3",l=i.payload?.key??i.key,o=i.payload?.data??i.payload?.value??i.data,h={type:r,startTime:i.startTime??i.cueTime??0,endTime:i.endTime};if(void 0!==i.schemeIdUri&&(h.schemeIdUri=i.schemeIdUri),"emsg"===r){const e=null==o?null:d(o);e&&(h.raw=e)}if("id3"===r&&"GEOB"===l){const a=function(e,t){return(void 0===e||""===e)&&(n(t)||ArrayBuffer.isView(t))}(i.payload?.description,o)?t(d(o)):null;if(a)return h.description=a.description,a.mimeType&&(h.mimeType=a.mimeType),h.messageData=e(a.data),h;void 0!==i.payload?.description&&(h.description=i.payload.description),null!=i.payload?.mimeType&&(h.mimeType=i.payload.mimeType);const r=s(o);return void 0!==r&&(h.messageData=r),h}const u="id3"===r?null==o?void 0:String(o):s(o);return l&&void 0!==u?"id3"===r?h.frames={[l]:u}:h.messageData=u:void 0!==u&&(h.messageData=u),h}emsgToCue(e){const t={type:"emsg",startTime:e.startTime??0,endTime:e.endTime};void 0!==e.schemeIdUri&&(t.schemeIdUri=e.schemeIdUri),void 0!==e.id&&(t.id=String(e.id));const a=i(this.player.getManifest(),t.startTime);if(void 0!==a&&(t.ptsOffset=a),null!=e.messageData){const i=d(e.messageData);i&&(t.raw=i)}const r=s(e.messageData);return void 0!==r&&(t.messageData=r),t}setupVideoListeners(){const e=()=>{this.emit("timeupdate")},t=()=>{this.emit("ended")},i=()=>{this.loadingViaAdapter||this.emit("error",this.video.error)},a=()=>{if(this.emit("seeked"),null!==this.deferredSeekTime){const e=this.deferredSeekTime;this.deferredSeekTime=null,this.seek(e)}},r=()=>{this.emit("volumechange")},s=()=>{this.emit("waiting")},n=()=>{this.emit("playing")},d=()=>{this.emit("pause")};this.video.addEventListener("timeupdate",e),this.video.addEventListener("ended",t),this.video.addEventListener("error",i),this.video.addEventListener("seeked",a),this.video.addEventListener("volumechange",r),this.video.addEventListener("waiting",s),this.video.addEventListener("playing",n),this.video.addEventListener("pause",d),this.boundHandlers.set("timeupdate",e),this.boundHandlers.set("ended",t),this.boundHandlers.set("error",i),this.boundHandlers.set("seeked",a),this.boundHandlers.set("volumechange",r),this.boundHandlers.set("waiting",s),this.boundHandlers.set("playing",n),this.boundHandlers.set("pause",d)}emit(e,t){const i=this.eventListeners.get(e);if(i)for(const e of i)try{e(t)}catch(e){console.error("[ShakaAdapter] Event handler error:",e)}}}
@@ -0,0 +1,24 @@
1
+ interface ShakaErrorLike {
2
+ code?: unknown;
3
+ category?: unknown;
4
+ severity?: unknown;
5
+ data?: unknown;
6
+ message?: unknown;
7
+ }
8
+ export declare function isLoadInterrupted(error: unknown): boolean;
9
+ /** A Shaka load failure re-categorised as a network failure after the probe found no resource. */
10
+ export declare class ShakaMediaLoadError extends Error {
11
+ readonly category = 1;
12
+ readonly code: unknown;
13
+ readonly severity: unknown;
14
+ readonly data: unknown;
15
+ constructor(source: ShakaErrorLike);
16
+ }
17
+ /** One bounded GET (no custom headers, so no CORS preflight): `true` when the URL is missing or unreachable. */
18
+ export declare function isMediaUrlUnreachable(url: string, timeoutMs?: number): Promise<boolean>;
19
+ /**
20
+ * Shaka plays progressive files through the element, which reports a missing file and an
21
+ * unplayable one alike (`3016` with `MEDIA_ERR_SRC_NOT_SUPPORTED`); a probe tells them apart.
22
+ */
23
+ export declare function refineShakaLoadError(error: unknown, url: string): Promise<unknown>;
24
+ export {};
@@ -0,0 +1 @@
1
+ export function isLoadInterrupted(e){return"object"==typeof e&&null!==e&&7e3===e.code}export class ShakaMediaLoadError extends Error{constructor(e){super(`Shaka load error (code ${String(e.code)}): resource not reachable`),this.category=1,this.name="ShakaMediaLoadError",this.code=e.code,this.severity=e.severity,this.data=e.data}}export async function isMediaUrlUnreachable(e,r=2e3){if("function"!=typeof fetch||!/^https?:/i.test(e))return!1;const t="function"==typeof AbortController?new AbortController:null;let a=null;const o=new Promise(e=>{a=setTimeout(()=>{t?.abort(),e(!1)},r)}),n=fetch(e,{credentials:"omit",cache:"no-store",...t?{signal:t.signal}:{}}).then(e=>(e.body?.cancel().catch(()=>{}),e.status>=400),()=>!t?.signal.aborted);try{return await Promise.race([n,o])}finally{a&&clearTimeout(a)}}export async function refineShakaLoadError(e,r){const t=e,a=Array.isArray(t?.data)?t.data:[];return 3016!==t?.code||4!==a[0]?e:await isMediaUrlUnreachable(r)?new ShakaMediaLoadError(t):e}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dolby-optiview/ads-sdk-adapter-shaka",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Shaka Player adapter for OptiView Ads SDK",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "sideEffects": false,
40
40
  "dependencies": {
41
- "@dolby-optiview/ads-sdk-core": "^1.1.1"
41
+ "@dolby-optiview/ads-sdk-core": "^1.2.0"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "shaka-player": "^4.0.0 || ^5.0.0"