stormcloud-video-player 0.2.11 → 0.2.13

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.
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { StormcloudVideoPlayer } from '../player/StormcloudVideoPlayer.cjs';
3
- import { S as StormcloudVideoPlayerConfig } from '../types-GpA_hKek.cjs';
3
+ import { S as StormcloudVideoPlayerConfig } from '../types-mVgmKmzM.cjs';
4
4
 
5
5
  type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElement"> & React.VideoHTMLAttributes<HTMLVideoElement> & {
6
6
  onReady?: (player: StormcloudVideoPlayer) => void;
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/utils/browserCompat.ts
21
+ var browserCompat_exports = {};
22
+ __export(browserCompat_exports, {
23
+ detectBrowser: () => detectBrowser,
24
+ getBrowserConfigOverrides: () => getBrowserConfigOverrides,
25
+ getRecommendedAdPlayer: () => getRecommendedAdPlayer,
26
+ logBrowserInfo: () => logBrowserInfo,
27
+ supportsFeature: () => supportsFeature,
28
+ supportsGoogleIMA: () => supportsGoogleIMA,
29
+ supportsModernJS: () => supportsModernJS
30
+ });
31
+ module.exports = __toCommonJS(browserCompat_exports);
32
+ function getChromeVersion(ua) {
33
+ const match = ua.match(/Chrome\/(\d+)/);
34
+ return match && match[1] ? parseInt(match[1], 10) : 0;
35
+ }
36
+ function getWebKitVersion(ua) {
37
+ const match = ua.match(/AppleWebKit\/(\d+)/);
38
+ return match && match[1] ? parseInt(match[1], 10) : 0;
39
+ }
40
+ function getPlatform() {
41
+ if ("userAgentData" in navigator && navigator.userAgentData?.platform) {
42
+ return navigator.userAgentData.platform;
43
+ }
44
+ const ua = navigator.userAgent;
45
+ if (/Mac|iPhone|iPad|iPod/i.test(ua)) {
46
+ return /iPhone|iPad|iPod/i.test(ua) ? "iPhone" : "MacIntel";
47
+ }
48
+ if (/Win/i.test(ua)) {
49
+ return "Win32";
50
+ }
51
+ if (/Linux/i.test(ua)) {
52
+ return /Android/i.test(ua) ? "Linux armv8l" : "Linux x86_64";
53
+ }
54
+ if (/CrOS/i.test(ua)) {
55
+ return "CrOS";
56
+ }
57
+ return navigator.platform || "Unknown";
58
+ }
59
+ function detectBrowser() {
60
+ const ua = navigator.userAgent;
61
+ const platform = getPlatform();
62
+ let name = "Unknown";
63
+ let version = "0";
64
+ let majorVersion = 0;
65
+ let isSmartTV = false;
66
+ let isLegacyTV = false;
67
+ let supportsIMA = true;
68
+ let supportsModernJS2 = true;
69
+ let recommendedAdPlayer = "ima";
70
+ if (/Web0S|webOS/i.test(ua)) {
71
+ name = "LG WebOS";
72
+ isSmartTV = true;
73
+ const match = ua.match(/Web0S[/\s]*([\d.]+)/i);
74
+ version = match && match[1] ? match[1] : "Unknown";
75
+ if (version !== "Unknown") {
76
+ const parts = version.split(".");
77
+ majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
78
+ }
79
+ } else if (/Tizen/i.test(ua)) {
80
+ name = "Samsung Tizen";
81
+ isSmartTV = true;
82
+ const match = ua.match(/Tizen[/\s]*([\d.]+)/i);
83
+ version = match && match[1] ? match[1] : "Unknown";
84
+ if (version !== "Unknown") {
85
+ const parts = version.split(".");
86
+ majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
87
+ }
88
+ } else if (/SMART-TV|SmartTV/i.test(ua)) {
89
+ name = "Smart TV";
90
+ isSmartTV = true;
91
+ } else if (/NetCast/i.test(ua)) {
92
+ name = "LG NetCast";
93
+ isSmartTV = true;
94
+ isLegacyTV = true;
95
+ } else if (/BRAVIA/i.test(ua)) {
96
+ name = "Sony BRAVIA";
97
+ isSmartTV = true;
98
+ }
99
+ const chromeVersion = getChromeVersion(ua);
100
+ const webkitVersion = getWebKitVersion(ua);
101
+ if (chromeVersion > 0) {
102
+ if (!isSmartTV) {
103
+ name = "Chrome";
104
+ version = chromeVersion.toString();
105
+ majorVersion = chromeVersion;
106
+ }
107
+ if (chromeVersion < 50) {
108
+ supportsIMA = false;
109
+ supportsModernJS2 = false;
110
+ isLegacyTV = true;
111
+ recommendedAdPlayer = "hls";
112
+ }
113
+ }
114
+ if (webkitVersion > 0 && webkitVersion < 600) {
115
+ supportsModernJS2 = false;
116
+ if (isSmartTV) {
117
+ isLegacyTV = true;
118
+ supportsIMA = false;
119
+ recommendedAdPlayer = "hls";
120
+ }
121
+ }
122
+ if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
123
+ supportsModernJS2 = false;
124
+ supportsIMA = false;
125
+ recommendedAdPlayer = "hls";
126
+ }
127
+ if (typeof URLSearchParams === "undefined") {
128
+ supportsModernJS2 = false;
129
+ }
130
+ return {
131
+ name,
132
+ version,
133
+ majorVersion,
134
+ isSmartTV,
135
+ isLegacyTV,
136
+ platform,
137
+ supportsIMA,
138
+ supportsModernJS: supportsModernJS2,
139
+ recommendedAdPlayer
140
+ };
141
+ }
142
+ function supportsGoogleIMA() {
143
+ const browser = detectBrowser();
144
+ if (browser.isLegacyTV) {
145
+ return false;
146
+ }
147
+ if (typeof document === "undefined" || typeof document.createElement !== "function") {
148
+ return false;
149
+ }
150
+ try {
151
+ const video = document.createElement("video");
152
+ if (!video) {
153
+ return false;
154
+ }
155
+ } catch (e) {
156
+ return false;
157
+ }
158
+ if (typeof Promise === "undefined") {
159
+ return false;
160
+ }
161
+ return browser.supportsIMA;
162
+ }
163
+ function getRecommendedAdPlayer() {
164
+ const browser = detectBrowser();
165
+ return browser.recommendedAdPlayer;
166
+ }
167
+ function supportsModernJS() {
168
+ try {
169
+ return typeof Promise !== "undefined" && typeof Map !== "undefined" && typeof Set !== "undefined" && typeof Array.from !== "undefined" && typeof Object.assign !== "undefined" && typeof Array.prototype.forEach !== "undefined" && typeof String.prototype.includes !== "undefined";
170
+ } catch (e) {
171
+ return false;
172
+ }
173
+ }
174
+ function logBrowserInfo(debug = false) {
175
+ if (!debug) return;
176
+ const browser = detectBrowser();
177
+ const imaSupport = supportsGoogleIMA();
178
+ console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", {
179
+ browser: `${browser.name} ${browser.version}`,
180
+ platform: browser.platform,
181
+ isSmartTV: browser.isSmartTV,
182
+ isLegacyTV: browser.isLegacyTV,
183
+ supportsIMA: imaSupport,
184
+ supportsModernJS: browser.supportsModernJS,
185
+ recommendedAdPlayer: browser.recommendedAdPlayer,
186
+ userAgent: navigator.userAgent
187
+ });
188
+ }
189
+ function getBrowserConfigOverrides() {
190
+ const browser = detectBrowser();
191
+ const overrides = {};
192
+ if (browser.isLegacyTV || !browser.supportsIMA) {
193
+ overrides.adPlayerType = "hls";
194
+ }
195
+ if (browser.isSmartTV) {
196
+ overrides.allowNativeHls = true;
197
+ }
198
+ return overrides;
199
+ }
200
+ function supportsFeature(feature) {
201
+ switch (feature) {
202
+ case "ima":
203
+ return supportsGoogleIMA();
204
+ case "urlsearchparams":
205
+ return typeof URLSearchParams !== "undefined";
206
+ case "textencoder":
207
+ return typeof TextEncoder !== "undefined";
208
+ case "promises":
209
+ return typeof Promise !== "undefined";
210
+ case "fetch":
211
+ return typeof fetch !== "undefined";
212
+ case "crypto":
213
+ return typeof crypto !== "undefined" && typeof crypto.subtle !== "undefined";
214
+ default:
215
+ return false;
216
+ }
217
+ }
218
+ // Annotate the CommonJS export names for ESM import in node:
219
+ 0 && (module.exports = {
220
+ detectBrowser,
221
+ getBrowserConfigOverrides,
222
+ getRecommendedAdPlayer,
223
+ logBrowserInfo,
224
+ supportsFeature,
225
+ supportsGoogleIMA,
226
+ supportsModernJS
227
+ });
228
+ //# sourceMappingURL=browserCompat.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/browserCompat.ts"],"sourcesContent":["interface NavigatorUAData {\n platform?: string;\n brands?: Array<{ brand: string; version: string }>;\n mobile?: boolean;\n}\n\ndeclare global {\n interface Navigator {\n userAgentData?: NavigatorUAData;\n }\n}\n\nexport interface BrowserInfo {\n name: string;\n version: string;\n majorVersion: number;\n isSmartTV: boolean;\n isLegacyTV: boolean;\n platform: string;\n supportsIMA: boolean;\n supportsModernJS: boolean;\n recommendedAdPlayer: 'ima' | 'hls';\n}\n\nfunction getChromeVersion(ua: string): number {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\n\nfunction getWebKitVersion(ua: string): number {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\n\nfunction getPlatform(): string {\n if ('userAgentData' in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? 'iPhone' : 'MacIntel';\n }\n if (/Win/i.test(ua)) {\n return 'Win32';\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? 'Linux armv8l' : 'Linux x86_64';\n }\n if (/CrOS/i.test(ua)) {\n return 'CrOS';\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return (navigator as any).platform || 'Unknown';\n}\n\nexport function detectBrowser(): BrowserInfo {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n\n let name = 'Unknown';\n let version = '0';\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsIMA = true;\n let supportsModernJS = true;\n let recommendedAdPlayer: 'ima' | 'hls' = 'ima';\n\n if (/Web0S|webOS/i.test(ua)) {\n name = 'LG WebOS';\n isSmartTV = true;\n const match = ua.match(/Web0S[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : 'Unknown';\n if (version !== 'Unknown') {\n const parts = version.split('.');\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/Tizen/i.test(ua)) {\n name = 'Samsung Tizen';\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : 'Unknown';\n if (version !== 'Unknown') {\n const parts = version.split('.');\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n }\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = 'Smart TV';\n isSmartTV = true;\n } else if (/NetCast/i.test(ua)) {\n name = 'LG NetCast';\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = 'Sony BRAVIA';\n isSmartTV = true;\n }\n\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n\n if (chromeVersion > 0) {\n if (!isSmartTV) {\n name = 'Chrome';\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n }\n\n if (chromeVersion < 50) {\n supportsIMA = false;\n supportsModernJS = false;\n isLegacyTV = true;\n recommendedAdPlayer = 'hls';\n }\n }\n\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n if (isSmartTV) {\n isLegacyTV = true;\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n }\n }\n\n if (typeof Promise === 'undefined' ||\n typeof Map === 'undefined' ||\n typeof Set === 'undefined') {\n supportsModernJS = false;\n supportsIMA = false;\n recommendedAdPlayer = 'hls';\n }\n\n if (typeof URLSearchParams === 'undefined') {\n supportsModernJS = false;\n }\n\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsIMA,\n supportsModernJS,\n recommendedAdPlayer,\n };\n}\n\nexport function supportsGoogleIMA(): boolean {\n const browser = detectBrowser();\n\n if (browser.isLegacyTV) {\n return false;\n }\n\n if (typeof document === 'undefined' ||\n typeof document.createElement !== 'function') {\n return false;\n }\n\n try {\n const video = document.createElement('video');\n if (!video) {\n return false;\n }\n } catch (e) {\n return false;\n }\n\n if (typeof Promise === 'undefined') {\n return false;\n }\n\n return browser.supportsIMA;\n}\n\nexport function getRecommendedAdPlayer(): 'ima' | 'hls' {\n const browser = detectBrowser();\n return browser.recommendedAdPlayer;\n}\n\nexport function supportsModernJS(): boolean {\n try {\n return (\n typeof Promise !== 'undefined' &&\n typeof Map !== 'undefined' &&\n typeof Set !== 'undefined' &&\n typeof Array.from !== 'undefined' &&\n typeof Object.assign !== 'undefined' &&\n typeof Array.prototype.forEach !== 'undefined' &&\n typeof String.prototype.includes !== 'undefined'\n );\n } catch (e) {\n return false;\n }\n}\n\nexport function logBrowserInfo(debug: boolean = false): void {\n if (!debug) return;\n\n const browser = detectBrowser();\n const imaSupport = supportsGoogleIMA();\n\n console.log('[StormcloudVideoPlayer] Browser Compatibility Info:', {\n browser: `${browser.name} ${browser.version}`,\n platform: browser.platform,\n isSmartTV: browser.isSmartTV,\n isLegacyTV: browser.isLegacyTV,\n supportsIMA: imaSupport,\n supportsModernJS: browser.supportsModernJS,\n recommendedAdPlayer: browser.recommendedAdPlayer,\n userAgent: navigator.userAgent,\n });\n}\n\nexport function getBrowserConfigOverrides(): {\n adPlayerType?: 'ima' | 'hls';\n allowNativeHls?: boolean;\n} {\n const browser = detectBrowser();\n const overrides: any = {};\n\n if (browser.isLegacyTV || !browser.supportsIMA) {\n overrides.adPlayerType = 'hls';\n }\n\n if (browser.isSmartTV) {\n overrides.allowNativeHls = true;\n }\n\n return overrides;\n}\n\nexport function supportsFeature(feature: string): boolean {\n switch (feature) {\n case 'ima':\n return supportsGoogleIMA();\n case 'urlsearchparams':\n return typeof URLSearchParams !== 'undefined';\n case 'textencoder':\n return typeof TextEncoder !== 'undefined';\n case 'promises':\n return typeof Promise !== 'undefined';\n case 'fetch':\n return typeof fetch !== 'undefined';\n case 'crypto':\n return typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';\n default:\n return false;\n }\n}\n\n"],"mappings":"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","names":["supportsModernJS"]}
@@ -0,0 +1,36 @@
1
+ interface NavigatorUAData {
2
+ platform?: string;
3
+ brands?: Array<{
4
+ brand: string;
5
+ version: string;
6
+ }>;
7
+ mobile?: boolean;
8
+ }
9
+ declare global {
10
+ interface Navigator {
11
+ userAgentData?: NavigatorUAData;
12
+ }
13
+ }
14
+ interface BrowserInfo {
15
+ name: string;
16
+ version: string;
17
+ majorVersion: number;
18
+ isSmartTV: boolean;
19
+ isLegacyTV: boolean;
20
+ platform: string;
21
+ supportsIMA: boolean;
22
+ supportsModernJS: boolean;
23
+ recommendedAdPlayer: 'ima' | 'hls';
24
+ }
25
+ declare function detectBrowser(): BrowserInfo;
26
+ declare function supportsGoogleIMA(): boolean;
27
+ declare function getRecommendedAdPlayer(): 'ima' | 'hls';
28
+ declare function supportsModernJS(): boolean;
29
+ declare function logBrowserInfo(debug?: boolean): void;
30
+ declare function getBrowserConfigOverrides(): {
31
+ adPlayerType?: 'ima' | 'hls';
32
+ allowNativeHls?: boolean;
33
+ };
34
+ declare function supportsFeature(feature: string): boolean;
35
+
36
+ export { type BrowserInfo, detectBrowser, getBrowserConfigOverrides, getRecommendedAdPlayer, logBrowserInfo, supportsFeature, supportsGoogleIMA, supportsModernJS };
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/utils/polyfills.ts
21
+ var polyfills_exports = {};
22
+ __export(polyfills_exports, {
23
+ initializePolyfills: () => initializePolyfills,
24
+ polyfillArrayFrom: () => polyfillArrayFrom,
25
+ polyfillObjectAssign: () => polyfillObjectAssign,
26
+ polyfillPromiseFinally: () => polyfillPromiseFinally,
27
+ polyfillStringEndsWith: () => polyfillStringEndsWith,
28
+ polyfillStringIncludes: () => polyfillStringIncludes,
29
+ polyfillStringStartsWith: () => polyfillStringStartsWith,
30
+ polyfillTextEncoder: () => polyfillTextEncoder,
31
+ polyfillURLSearchParams: () => polyfillURLSearchParams
32
+ });
33
+ module.exports = __toCommonJS(polyfills_exports);
34
+ function polyfillURLSearchParams() {
35
+ if (typeof URLSearchParams !== "undefined") {
36
+ return;
37
+ }
38
+ class URLSearchParamsPolyfill {
39
+ constructor(init) {
40
+ this.params = /* @__PURE__ */ new Map();
41
+ if (typeof init === "string") {
42
+ this.parseQueryString(init);
43
+ } else if (init instanceof URLSearchParamsPolyfill) {
44
+ init.forEach((value, key) => {
45
+ this.append(key, value);
46
+ });
47
+ }
48
+ }
49
+ parseQueryString(query) {
50
+ const cleanQuery = query.startsWith("?") ? query.slice(1) : query;
51
+ if (!cleanQuery) return;
52
+ cleanQuery.split("&").forEach((param) => {
53
+ const [key, value] = param.split("=");
54
+ if (key) {
55
+ const decodedKey = this.safeDecodeURIComponent(key);
56
+ const decodedValue = value ? this.safeDecodeURIComponent(value) : "";
57
+ this.append(decodedKey, decodedValue);
58
+ }
59
+ });
60
+ }
61
+ safeDecodeURIComponent(str) {
62
+ try {
63
+ return decodeURIComponent(str.replace(/\+/g, " "));
64
+ } catch (e) {
65
+ return str;
66
+ }
67
+ }
68
+ append(name, value) {
69
+ const values = this.params.get(name) || [];
70
+ values.push(String(value));
71
+ this.params.set(name, values);
72
+ }
73
+ delete(name) {
74
+ this.params.delete(name);
75
+ }
76
+ get(name) {
77
+ const values = this.params.get(name);
78
+ return values && values.length > 0 && values[0] !== void 0 ? values[0] : null;
79
+ }
80
+ getAll(name) {
81
+ return this.params.get(name) || [];
82
+ }
83
+ has(name) {
84
+ return this.params.has(name);
85
+ }
86
+ set(name, value) {
87
+ this.params.set(name, [String(value)]);
88
+ }
89
+ forEach(callback) {
90
+ this.params.forEach((values, key) => {
91
+ values.forEach((value) => {
92
+ callback(value, key, this);
93
+ });
94
+ });
95
+ }
96
+ toString() {
97
+ const parts = [];
98
+ this.params.forEach((values, key) => {
99
+ values.forEach((value) => {
100
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
101
+ });
102
+ });
103
+ return parts.join("&");
104
+ }
105
+ }
106
+ window.URLSearchParams = URLSearchParamsPolyfill;
107
+ }
108
+ function polyfillTextEncoder() {
109
+ if (typeof TextEncoder !== "undefined") {
110
+ return;
111
+ }
112
+ class TextEncoderPolyfill {
113
+ constructor() {
114
+ this.encoding = "utf-8";
115
+ }
116
+ encode(str) {
117
+ const utf8 = [];
118
+ for (let i = 0; i < str.length; i++) {
119
+ let charcode = str.charCodeAt(i);
120
+ if (charcode < 128) {
121
+ utf8.push(charcode);
122
+ } else if (charcode < 2048) {
123
+ utf8.push(192 | charcode >> 6, 128 | charcode & 63);
124
+ } else if (charcode < 55296 || charcode >= 57344) {
125
+ utf8.push(
126
+ 224 | charcode >> 12,
127
+ 128 | charcode >> 6 & 63,
128
+ 128 | charcode & 63
129
+ );
130
+ } else {
131
+ i++;
132
+ charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);
133
+ utf8.push(
134
+ 240 | charcode >> 18,
135
+ 128 | charcode >> 12 & 63,
136
+ 128 | charcode >> 6 & 63,
137
+ 128 | charcode & 63
138
+ );
139
+ }
140
+ }
141
+ return new Uint8Array(utf8);
142
+ }
143
+ }
144
+ window.TextEncoder = TextEncoderPolyfill;
145
+ }
146
+ function polyfillPromiseFinally() {
147
+ if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
148
+ Promise.prototype.finally = function(callback) {
149
+ const constructor = this.constructor;
150
+ return this.then(
151
+ (value) => constructor.resolve(callback()).then(() => value),
152
+ (reason) => constructor.resolve(callback()).then(() => {
153
+ throw reason;
154
+ })
155
+ );
156
+ };
157
+ }
158
+ }
159
+ function polyfillObjectAssign() {
160
+ if (typeof Object.assign !== "function") {
161
+ Object.assign = function(target, ...sources) {
162
+ if (target == null) {
163
+ throw new TypeError("Cannot convert undefined or null to object");
164
+ }
165
+ const to = Object(target);
166
+ for (let i = 0; i < sources.length; i++) {
167
+ const nextSource = sources[i];
168
+ if (nextSource != null) {
169
+ for (const nextKey in nextSource) {
170
+ if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
171
+ to[nextKey] = nextSource[nextKey];
172
+ }
173
+ }
174
+ }
175
+ }
176
+ return to;
177
+ };
178
+ }
179
+ }
180
+ function polyfillArrayFrom() {
181
+ if (!Array.from) {
182
+ Array.from = function(arrayLike, mapFn, thisArg) {
183
+ const items = Object(arrayLike);
184
+ if (arrayLike == null) {
185
+ throw new TypeError("Array.from requires an array-like object");
186
+ }
187
+ const len = items.length >>> 0;
188
+ const result = new Array(len);
189
+ for (let i = 0; i < len; i++) {
190
+ if (mapFn) {
191
+ result[i] = mapFn.call(thisArg, items[i], i);
192
+ } else {
193
+ result[i] = items[i];
194
+ }
195
+ }
196
+ return result;
197
+ };
198
+ }
199
+ }
200
+ function polyfillStringStartsWith() {
201
+ if (!String.prototype.startsWith) {
202
+ String.prototype.startsWith = function(search, pos) {
203
+ pos = !pos || pos < 0 ? 0 : +pos;
204
+ return this.substring(pos, pos + search.length) === search;
205
+ };
206
+ }
207
+ }
208
+ function polyfillStringEndsWith() {
209
+ if (!String.prototype.endsWith) {
210
+ String.prototype.endsWith = function(search, length) {
211
+ if (length === void 0 || length > this.length) {
212
+ length = this.length;
213
+ }
214
+ return this.substring(length - search.length, length) === search;
215
+ };
216
+ }
217
+ }
218
+ function polyfillStringIncludes() {
219
+ if (!String.prototype.includes) {
220
+ String.prototype.includes = function(search, start) {
221
+ if (typeof start !== "number") {
222
+ start = 0;
223
+ }
224
+ if (start + search.length > this.length) {
225
+ return false;
226
+ }
227
+ return this.indexOf(search, start) !== -1;
228
+ };
229
+ }
230
+ }
231
+ function initializePolyfills() {
232
+ polyfillObjectAssign();
233
+ polyfillArrayFrom();
234
+ polyfillStringStartsWith();
235
+ polyfillStringEndsWith();
236
+ polyfillStringIncludes();
237
+ polyfillURLSearchParams();
238
+ polyfillTextEncoder();
239
+ polyfillPromiseFinally();
240
+ }
241
+ // Annotate the CommonJS export names for ESM import in node:
242
+ 0 && (module.exports = {
243
+ initializePolyfills,
244
+ polyfillArrayFrom,
245
+ polyfillObjectAssign,
246
+ polyfillPromiseFinally,
247
+ polyfillStringEndsWith,
248
+ polyfillStringIncludes,
249
+ polyfillStringStartsWith,
250
+ polyfillTextEncoder,
251
+ polyfillURLSearchParams
252
+ });
253
+ //# sourceMappingURL=polyfills.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/polyfills.ts"],"sourcesContent":["export function polyfillURLSearchParams(): void {\n if (typeof URLSearchParams !== 'undefined') {\n return;\n }\n\n class URLSearchParamsPolyfill {\n private params: Map<string, string[]>;\n\n constructor(init?: string | URLSearchParamsPolyfill) {\n this.params = new Map();\n\n if (typeof init === 'string') {\n this.parseQueryString(init);\n } else if (init instanceof URLSearchParamsPolyfill) {\n init.forEach((value, key) => {\n this.append(key, value);\n });\n }\n }\n\n private parseQueryString(query: string): void {\n const cleanQuery = query.startsWith('?') ? query.slice(1) : query;\n if (!cleanQuery) return;\n\n cleanQuery.split('&').forEach((param) => {\n const [key, value] = param.split('=');\n if (key) {\n const decodedKey = this.safeDecodeURIComponent(key);\n const decodedValue = value ? this.safeDecodeURIComponent(value) : '';\n this.append(decodedKey, decodedValue);\n }\n });\n }\n\n private safeDecodeURIComponent(str: string): string {\n try {\n return decodeURIComponent(str.replace(/\\+/g, ' '));\n } catch (e) {\n return str;\n }\n }\n\n append(name: string, value: string): void {\n const values = this.params.get(name) || [];\n values.push(String(value));\n this.params.set(name, values);\n }\n\n delete(name: string): void {\n this.params.delete(name);\n }\n\n get(name: string): string | null {\n const values = this.params.get(name);\n return values && values.length > 0 && values[0] !== undefined ? values[0] : null;\n }\n\n getAll(name: string): string[] {\n return this.params.get(name) || [];\n }\n\n has(name: string): boolean {\n return this.params.has(name);\n }\n\n set(name: string, value: string): void {\n this.params.set(name, [String(value)]);\n }\n\n forEach(callback: (value: string, key: string, parent: URLSearchParamsPolyfill) => void): void {\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n callback(value, key, this);\n });\n });\n }\n\n toString(): string {\n const parts: string[] = [];\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n });\n });\n return parts.join('&');\n }\n }\n\n // @ts-ignore\n window.URLSearchParams = URLSearchParamsPolyfill;\n}\n\nexport function polyfillTextEncoder(): void {\n if (typeof TextEncoder !== 'undefined') {\n return;\n }\n\n class TextEncoderPolyfill {\n encoding = 'utf-8';\n\n encode(str: string): Uint8Array {\n const utf8: number[] = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 0x80) {\n utf8.push(charcode);\n } else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));\n } else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(\n 0xe0 | (charcode >> 12),\n 0x80 | ((charcode >> 6) & 0x3f),\n 0x80 | (charcode & 0x3f)\n );\n } else {\n i++;\n charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n utf8.push(\n 0xf0 | (charcode >> 18),\n 0x80 | ((charcode >> 12) & 0x3f),\n 0x80 | ((charcode >> 6) & 0x3f),\n 0x80 | (charcode & 0x3f)\n );\n }\n }\n return new Uint8Array(utf8);\n }\n }\n\n // @ts-ignore\n window.TextEncoder = TextEncoderPolyfill;\n}\n\nexport function polyfillPromiseFinally(): void {\n if (typeof Promise !== 'undefined' && !Promise.prototype.finally) {\n Promise.prototype.finally = function (callback: () => void) {\n const constructor = this.constructor as PromiseConstructor;\n return this.then(\n (value) => constructor.resolve(callback()).then(() => value),\n (reason) =>\n constructor.resolve(callback()).then(() => {\n throw reason;\n })\n );\n };\n }\n}\n\nexport function polyfillObjectAssign(): void {\n if (typeof Object.assign !== 'function') {\n Object.assign = function (target: any, ...sources: any[]) {\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n const to = Object(target);\n\n for (let i = 0; i < sources.length; i++) {\n const nextSource = sources[i];\n\n if (nextSource != null) {\n for (const nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n\n return to;\n };\n }\n}\n\nexport function polyfillArrayFrom(): void {\n if (!Array.from) {\n Array.from = function (arrayLike: any, mapFn?: any, thisArg?: any) {\n const items = Object(arrayLike);\n if (arrayLike == null) {\n throw new TypeError('Array.from requires an array-like object');\n }\n\n const len = items.length >>> 0;\n const result = new Array(len);\n\n for (let i = 0; i < len; i++) {\n if (mapFn) {\n result[i] = mapFn.call(thisArg, items[i], i);\n } else {\n result[i] = items[i];\n }\n }\n\n return result;\n };\n }\n}\n\nexport function polyfillStringStartsWith(): void {\n if (!String.prototype.startsWith) {\n String.prototype.startsWith = function (search: string, pos?: number) {\n pos = !pos || pos < 0 ? 0 : +pos;\n return this.substring(pos, pos + search.length) === search;\n };\n }\n}\n\nexport function polyfillStringEndsWith(): void {\n if (!String.prototype.endsWith) {\n String.prototype.endsWith = function (search: string, length?: number) {\n if (length === undefined || length > this.length) {\n length = this.length;\n }\n return this.substring(length - search.length, length) === search;\n };\n }\n}\n\nexport function polyfillStringIncludes(): void {\n if (!String.prototype.includes) {\n String.prototype.includes = function (search: string, start?: number) {\n if (typeof start !== 'number') {\n start = 0;\n }\n if (start + search.length > this.length) {\n return false;\n }\n return this.indexOf(search, start) !== -1;\n };\n }\n}\n\nexport function initializePolyfills(): void {\n polyfillObjectAssign();\n polyfillArrayFrom();\n polyfillStringStartsWith();\n polyfillStringEndsWith();\n polyfillStringIncludes();\n polyfillURLSearchParams();\n polyfillTextEncoder();\n polyfillPromiseFinally();\n}\n\n"],"mappings":"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","names":[]}
@@ -0,0 +1,11 @@
1
+ declare function polyfillURLSearchParams(): void;
2
+ declare function polyfillTextEncoder(): void;
3
+ declare function polyfillPromiseFinally(): void;
4
+ declare function polyfillObjectAssign(): void;
5
+ declare function polyfillArrayFrom(): void;
6
+ declare function polyfillStringStartsWith(): void;
7
+ declare function polyfillStringEndsWith(): void;
8
+ declare function polyfillStringIncludes(): void;
9
+ declare function initializePolyfills(): void;
10
+
11
+ export { initializePolyfills, polyfillArrayFrom, polyfillObjectAssign, polyfillPromiseFinally, polyfillStringEndsWith, polyfillStringIncludes, polyfillStringStartsWith, polyfillTextEncoder, polyfillURLSearchParams };
@@ -176,10 +176,18 @@ async function getBrowserID(clientInfo) {
176
176
  if (typeof crypto !== "undefined" && crypto.subtle && crypto.subtle.digest) {
177
177
  try {
178
178
  await crypto.subtle.digest("SHA-256", new Uint8Array([1, 2, 3]));
179
- const hashBuffer = await crypto.subtle.digest(
180
- "SHA-256",
181
- new TextEncoder().encode(fingerprintString)
182
- );
179
+ let encodedData;
180
+ if (typeof TextEncoder !== "undefined") {
181
+ encodedData = new TextEncoder().encode(fingerprintString);
182
+ } else {
183
+ const utf8 = unescape(encodeURIComponent(fingerprintString));
184
+ const buffer = new Uint8Array(utf8.length);
185
+ for (let i = 0; i < utf8.length; i++) {
186
+ buffer[i] = utf8.charCodeAt(i);
187
+ }
188
+ encodedData = buffer;
189
+ }
190
+ const hashBuffer = await crypto.subtle.digest("SHA-256", encodedData);
183
191
  const hashArray = Array.from(new Uint8Array(hashBuffer));
184
192
  const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
185
193
  cachedBrowserId = hashHex;