Skip to content

Commit ad0926f

Browse files
wvanhaevretvanlaerhoven
authored andcommitted
Add drmUtils to get certificate/license urls for each keySystem, with appended queryParams
1 parent 4e2ecbe commit ad0926f

1 file changed

Lines changed: 89 additions & 0 deletions

File tree

drm/src/utils/drmUtils.ts

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import type {
2+
DRMConfiguration,
3+
FairPlayKeySystemConfiguration,
4+
WidevineKeySystemConfiguration,
5+
PlayReadyKeySystemConfiguration,
6+
KeySystemConfiguration,
7+
} from 'react-native-theoplayer';
8+
9+
/**
10+
* Appends query parameters to a URL, merging global DRM-level params with key-system-specific params.
11+
* Key-system-specific params take precedence over global params; no duplicate keys are added.
12+
*
13+
* @param url - The base URL to append query parameters to.
14+
* @param config - The top-level DRMConfiguration containing optional global `queryParameters`.
15+
* @param keySystemConfig - The key-system-specific configuration containing optional `queryParameters`.
16+
* @returns The URL with merged query parameters appended.
17+
*/
18+
function appendQueryParameters(url: string, config: DRMConfiguration, keySystemConfig: KeySystemConfiguration | undefined): string {
19+
const merged: { [key: string]: any } = {
20+
...config.queryParameters,
21+
...keySystemConfig?.queryParameters,
22+
};
23+
24+
const entries = Object.entries(merged);
25+
if (entries.length === 0) {
26+
return url;
27+
}
28+
29+
const separator = url.includes('?') ? '&' : '?';
30+
const queryString = entries.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join('&');
31+
return `${url}${separator}${queryString}`;
32+
}
33+
34+
/**
35+
* Returns the FairPlay certificate URL from the DRM configuration with query parameters appended.
36+
*
37+
* @param config - The DRM configuration.
38+
* @param defaultUrl - Fallback URL if no certificateURL is set on the fairplay config.
39+
* @returns The resolved certificate URL with merged query parameters.
40+
*/
41+
export function getFairplayCertificateURL(config: DRMConfiguration & { fairplay?: FairPlayKeySystemConfiguration }, defaultUrl: string): string {
42+
const baseUrl = config.fairplay?.certificateURL ?? defaultUrl;
43+
return appendQueryParameters(baseUrl, config, config.fairplay);
44+
}
45+
46+
/**
47+
* Returns the FairPlay license acquisition URL from the DRM configuration with query parameters appended.
48+
*
49+
* @param config - The DRM configuration.
50+
* @param defaultUrl - Fallback URL if no licenseAcquisitionURL is set on the fairplay config.
51+
* @returns The resolved license acquisition URL with merged query parameters.
52+
*/
53+
export function getFairplayLicenseAcquisitionURL(
54+
config: DRMConfiguration & { fairplay?: FairPlayKeySystemConfiguration },
55+
defaultUrl: string,
56+
): string {
57+
const baseUrl = config.fairplay?.licenseAcquisitionURL ?? defaultUrl;
58+
return appendQueryParameters(baseUrl, config, config.fairplay);
59+
}
60+
61+
/**
62+
* Returns the Widevine license acquisition URL from the DRM configuration with query parameters appended.
63+
*
64+
* @param config - The DRM configuration.
65+
* @param defaultUrl - Fallback URL if no licenseAcquisitionURL is set on the widevine config.
66+
* @returns The resolved license acquisition URL with merged query parameters.
67+
*/
68+
export function getWidevineLicenseAcquisitionURL(
69+
config: DRMConfiguration & { widevine?: WidevineKeySystemConfiguration },
70+
defaultUrl: string,
71+
): string {
72+
const baseUrl = config.widevine?.licenseAcquisitionURL ?? defaultUrl;
73+
return appendQueryParameters(baseUrl, config, config.widevine);
74+
}
75+
76+
/**
77+
* Returns the PlayReady license acquisition URL from the DRM configuration with query parameters appended.
78+
*
79+
* @param config - The DRM configuration.
80+
* @param defaultUrl - Fallback URL if no licenseAcquisitionURL is set on the playready config.
81+
* @returns The resolved license acquisition URL with merged query parameters.
82+
*/
83+
export function getPlayReadyLicenseAcquisitionURL(
84+
config: DRMConfiguration & { playready?: PlayReadyKeySystemConfiguration },
85+
defaultUrl: string,
86+
): string {
87+
const baseUrl = config.playready?.licenseAcquisitionURL ?? defaultUrl;
88+
return appendQueryParameters(baseUrl, config, config.playready);
89+
}

0 commit comments

Comments
 (0)