this repo has no description
at main 103 lines 3.1 kB view raw
1import { platform } from '@amp/web-apps-utils'; 2import { HLSJS_CDN, HLSJS_VERSION } from './hlsjs'; 3 4declare global { 5 interface Window { 6 rtc?: any; 7 } 8} 9 10export type ReportingOptions = { 11 storeBagURL: string; 12 clientName: string; 13 serviceName: string; 14 applicationName: string; 15 applicationVersion: string; 16 browserName: string; 17 browserMajorVersion: string; 18 browserMinorVersion: string; 19 osName: string; 20 osVersion: string; 21}; 22 23/** 24 * Generate a URL for loading HLS.js. 25 */ 26export function generateRTCJSURL(version?: string): URL { 27 // FIXME: Add a local storage override for the HLS.js version 28 version = version ?? HLSJS_VERSION; 29 30 return new URL(`${HLSJS_CDN}/${version}/rtc.js/rtc.js`); 31} 32 33export function getRTCNamespace() { 34 if (window.rtc === undefined) { 35 throw new Error('Unable to load RTC library'); 36 } 37 38 return window.rtc; 39} 40 41export function getReportingOptions(): ReportingOptions { 42 // FIXME: Add correct information for RTC reporting for Web App Store 43 return { 44 storeBagURL: 45 'https://mediaservices.cdn-apple.com/store_bags/hlsjs/aasw/v1/rtc_storebag.json', 46 47 // Application 48 clientName: 'AASW', 49 serviceName: 'com.apple.apps.external', 50 applicationName: 'AppleAppStoreVWeb', 51 applicationVersion: 'WebAppStore/1.0.0', 52 53 // Browser 54 browserName: platform.clientName() ?? '', 55 browserMajorVersion: platform.majorVersion()?.toString() ?? '0', 56 browserMinorVersion: platform.minorVersion()?.toString() ?? '0', 57 58 // Operating System 59 osName: platform.osName() ?? '', 60 osVersion: platform.osName() ?? '', 61 } as const; 62} 63 64/** 65 * Generate the configuration used for an `RTCReportingAgent`. 66 * 67 * @see {@link makeReportingAgent} 68 */ 69export function generateReportingConfig(rtc: any) { 70 rtc = rtc ?? getRTCNamespace(); 71 const options = getReportingOptions(); 72 const key = rtc.RTCReportingAgentConfigKeys; 73 74 return { 75 [key.Sender]: 'HLSJS', 76 [key.ClientName]: options.clientName, 77 [key.ServiceName]: options.serviceName, 78 [key.ApplicationName]: options.applicationName, 79 [key.DeviceName]: options.osVersion, 80 [key.ReportingStoreBag]: new rtc.RTCStorebag.RTCReportingStoreBag( 81 options.storeBagURL, 82 options.clientName, 83 options.serviceName, 84 options.applicationName, 85 options.browserName, 86 { iTunesAppVersion: options.applicationVersion }, 87 ), 88 89 // Fake out these fields 90 model: options.browserName, 91 firmwareVersion: `${options.browserMajorVersion}.${options.browserMinorVersion}`, 92 }; 93} 94 95/** 96 * Create an `RTCReportingAgent` with default configuration from `generateReportingConfig`. 97 * 98 * The reporting agent can be used with HLS.js playback to enable RTC reporting. 99 */ 100export function makeReportingAgent(rtc: any): any { 101 rtc = rtc ?? getRTCNamespace(); 102 return new rtc.RTCReportingAgent(generateReportingConfig(rtc)); 103}