videoplayer-extension 0.0.2 → 1.1.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.
package/README.md CHANGED
@@ -6,27 +6,21 @@ https://sharkiller.dev/videoplayer/
6
6
 
7
7
  https://github.com/sharkiller/Reproductor-MPD-M3U8
8
8
 
9
- ## Installation
9
+ ### Required
10
10
 
11
- ```bash
12
- npm install videoplayer-extension
13
- ```
11
+ ⚠️ This validate VideoPlayer Extension installation version > `26.1.5.8388`
14
12
 
15
13
  ## Direct Usage
16
14
  ```html
17
- <script type="module">
18
- import VideoPlayer from 'https://cdn.jsdelivr.net/npm/videoplayer-extension/+esm';
19
- VideoPlayer.isInstalled(
20
- // Installed
21
- () => {
22
- // Your code when detected extension is installed
23
- alert('installed');
24
- },
25
- // Uninstalled
26
- () => {
27
- // Your code when detected extension is uninstalled
28
- alert('uninstalled');
29
- }
30
- );
15
+ <script src="https://unpkg.com/videoplayer-extension@latest/index.min.js"></script>
16
+
17
+ <script>
18
+ (async () => {
19
+ console.log('getInstallUrl()? ', VideoPlayer.getInstallUrl());
20
+ const vp = await VideoPlayer.init();
21
+ console.log('isInstalled()? ', vp.isInstalled());
22
+ console.log('getDirectPlayer()? ', vp.getDirectPlayer());
23
+ console.log('getIPTVPlayer()? ', vp.getIPTVPlayer());
24
+ })();
31
25
  </script>
32
26
  ```
package/index.js CHANGED
@@ -1,30 +1,107 @@
1
- module.exports = {
1
+ /**
2
+ * Check if the VideoPlayer Extension is installed
3
+ * @classDesc Use the static init() method to initialize the class.
4
+ * @author Sharkiller
5
+ * @hideconstructor
6
+ */
7
+ class VideoPlayer {
8
+
9
+ #initialized = false;
10
+ #isInstalled = false;
11
+ #extensionUrl = false;
12
+
13
+ constructor(init) {
14
+ if(init === 'init'){
15
+ this.#initialized = true;
16
+ }else{
17
+ console.warn("Use: const videoplayer = await VideoPlayer.init();");
18
+ }
19
+ }
20
+
2
21
  /**
3
- * Is VideoPlayer Browser Extension installed?
4
- * @param {function} installed
5
- * @param {function} uninstalled
22
+ * Return installation link for the VideoPlayer Extension.
23
+ * @returns {string}
6
24
  */
7
- isInstalled: (installed, uninstalled) => {
8
- console.log(`isInstalled`);
9
- let img = document.createElement('img');
10
- img.onerror = uninstalled;
11
- img.onload = installed;
12
- img.src = 'chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/play-on.png'
13
- },
25
+ static getInstallUrl() {
26
+ return 'https://sharkiller.dev/videoplayer/';
27
+ }
28
+
14
29
  /**
15
- * Get Direct Player extension URL
16
- * @returns {string}
30
+ * Initializes the VideoPlayer detector.
31
+ * Must be called before using any instance methods.
32
+ * @returns {Promise<VideoPlayer>}
33
+ */
34
+ static async init() {
35
+ const videoplayer = new VideoPlayer('init');
36
+ await videoplayer.checkExtension();
37
+ return videoplayer;
38
+ }
39
+
40
+ async checkExtension() {
41
+ if (!this.#isInitialized()) {
42
+ return;
43
+ }
44
+ try {
45
+ const response = await fetch('isInstalled.mpd', {method: 'HEAD', redirect: 'follow'});
46
+
47
+ if (response.redirected && response.url.endsWith('/pages/player.html') ) {
48
+ const regex = /^(.*\/)pages\/player\.html$/i;
49
+ const result = regex.exec(response.url);
50
+ this.#extensionUrl = result[1];
51
+ this.#isInstalled = true;
52
+ }else{
53
+ // Fallback old Chrome versions
54
+ const response = await fetch('chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/play-on.png', {method: 'HEAD'});
55
+ if (response.ok && response.status === 200 ) {
56
+ this.#extensionUrl = 'chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/';
57
+ this.#isInstalled = true;
58
+ }
59
+ }
60
+ } catch (error) {}
61
+ }
62
+
63
+ #isInitialized() {
64
+ if (!this.#initialized) {
65
+ console.warn("VideoPlayer class not initialized! Use first: const videoplayer = await VideoPlayer.init();");
66
+ }
67
+ return this.#initialized;
68
+ }
69
+
70
+ /**
71
+ * Returns TRUE if the VideoPlayer is installed or FALSE if not.
72
+ * @returns {boolean}
17
73
  */
18
- getDirectPlayer: () => {
19
- console.log('getDirectPlayer');
20
- return 'chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/pages/player.html';
21
- },
74
+ isInstalled() {
75
+ if (!this.#isInitialized()) {
76
+ return false;
77
+ }
78
+ return this.#isInstalled;
79
+ }
80
+
22
81
  /**
23
- * Get IPTV Player extension URL
24
- * @returns {string}
82
+ * Return the full extension path to the Direct Player extension.
83
+ * @returns {string|false}
84
+ */
85
+ getDirectPlayer() {
86
+ if (!this.#isInitialized() || !this.#isInstalled) {
87
+ console.warn("VideoPlayer extension is not installed! Check isInstalled() first.");
88
+ return false;
89
+ }
90
+ return this.#extensionUrl + 'pages/player.html';
91
+ }
92
+
93
+ /**
94
+ * Return the full extension path to the IPTV Player extension.
95
+ * @returns {string|false}
25
96
  */
26
- getIPTVPlayer: () => {
27
- console.log('getIPTVPlayer');
28
- return 'chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/iptv/player.html';
97
+ getIPTVPlayer() {
98
+ if (!this.#isInitialized() || !this.#isInstalled) {
99
+ console.warn("VideoPlayer extension is not installed! Check isInstalled() first.");
100
+ return false;
101
+ }
102
+ return this.#extensionUrl + 'iptv/player.html';
29
103
  }
30
- };
104
+
105
+ }
106
+
107
+ window.VideoPlayer = VideoPlayer;
package/index.min.js ADDED
@@ -0,0 +1,2 @@
1
+ class VideoPlayer{#e=!1;#i=!1;#t=!1;constructor(e){"init"===e?this.#e=!0:console.warn("Use: const videoplayer = await VideoPlayer.init();")}static getInstallUrl(){return"https://sharkiller.dev/videoplayer/"}static async init(){const e=new VideoPlayer("init");return await e.checkExtension(),e}async checkExtension(){if(this.#s())try{const e=await fetch("isInstalled.mpd",{method:"HEAD",redirect:"follow"});if(e.redirected&&e.url.endsWith("/pages/player.html")){const i=/^(.*\/)pages\/player\.html$/i.exec(e.url);this.#t=i[1],this.#i=!0}else{const e=await fetch("chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/play-on.png",{method:"HEAD"});e.ok&&200===e.status&&(this.#t="chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/",this.#i=!0)}}catch(e){}}#s(){return this.#e||console.warn("VideoPlayer class not initialized! Use first: const videoplayer = await VideoPlayer.init();"),this.#e}isInstalled(){return!!this.#s()&&this.#i}getDirectPlayer(){return this.#s()&&this.#i?this.#t+"pages/player.html":(console.warn("VideoPlayer extension is not installed! Check isInstalled() first."),!1)}getIPTVPlayer(){return this.#s()&&this.#i?this.#t+"iptv/player.html":(console.warn("VideoPlayer extension is not installed! Check isInstalled() first."),!1)}}window.VideoPlayer=VideoPlayer;
2
+ //# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["VideoPlayer","initialized","isInstalled","extensionUrl","constructor","init","this","console","warn","getInstallUrl","videoplayer","checkExtension","isInitialized","response","fetch","method","redirect","redirected","url","endsWith","result","exec","ok","status","error","getDirectPlayer","getIPTVPlayer","window"],"sources":["index.js"],"sourcesContent":["/**\r\n * Check if the VideoPlayer Extension is installed\r\n * @classDesc Use the static init() method to initialize the class.\r\n * @author Sharkiller\r\n * @hideconstructor\r\n */\r\nclass VideoPlayer {\r\n\r\n #initialized = false;\r\n #isInstalled = false;\r\n #extensionUrl = false;\r\n\r\n constructor(init) {\r\n if(init === 'init'){\r\n this.#initialized = true;\r\n }else{\r\n console.warn(\"Use: const videoplayer = await VideoPlayer.init();\");\r\n }\r\n }\r\n\r\n /**\r\n * Return installation link for the VideoPlayer Extension.\r\n * @returns {string}\r\n */\r\n static getInstallUrl() {\r\n return 'https://sharkiller.dev/videoplayer/';\r\n }\r\n\r\n /**\r\n * Initializes the VideoPlayer detector.\r\n * Must be called before using any instance methods.\r\n * @returns {Promise<VideoPlayer>}\r\n */\r\n static async init() {\r\n const videoplayer = new VideoPlayer('init');\r\n await videoplayer.checkExtension();\r\n return videoplayer;\r\n }\r\n\r\n async checkExtension() {\r\n if (!this.#isInitialized()) {\r\n return;\r\n }\r\n try {\r\n const response = await fetch('isInstalled.mpd', {method: 'HEAD', redirect: 'follow'});\r\n\r\n if (response.redirected && response.url.endsWith('/pages/player.html') ) {\r\n const regex = /^(.*\\/)pages\\/player\\.html$/i;\r\n const result = regex.exec(response.url);\r\n this.#extensionUrl = result[1];\r\n this.#isInstalled = true;\r\n }else{\r\n // Fallback old Chrome versions\r\n const response = await fetch('chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/play-on.png', {method: 'HEAD'});\r\n if (response.ok && response.status === 200 ) {\r\n this.#extensionUrl = 'chrome-extension://opmeopcambhfimffbomjgemehjkbbmji/';\r\n this.#isInstalled = true;\r\n }\r\n }\r\n } catch (error) {}\r\n }\r\n\r\n #isInitialized() {\r\n if (!this.#initialized) {\r\n console.warn(\"VideoPlayer class not initialized! Use first: const videoplayer = await VideoPlayer.init();\");\r\n }\r\n return this.#initialized;\r\n }\r\n\r\n /**\r\n * Returns TRUE if the VideoPlayer is installed or FALSE if not.\r\n * @returns {boolean}\r\n */\r\n isInstalled() {\r\n if (!this.#isInitialized()) {\r\n return false;\r\n }\r\n return this.#isInstalled;\r\n }\r\n\r\n /**\r\n * Return the full extension path to the Direct Player extension.\r\n * @returns {string|false}\r\n */\r\n getDirectPlayer() {\r\n if (!this.#isInitialized() || !this.#isInstalled) {\r\n console.warn(\"VideoPlayer extension is not installed! Check isInstalled() first.\");\r\n return false;\r\n }\r\n return this.#extensionUrl + 'pages/player.html';\r\n }\r\n\r\n /**\r\n * Return the full extension path to the IPTV Player extension.\r\n * @returns {string|false}\r\n */\r\n getIPTVPlayer() {\r\n if (!this.#isInitialized() || !this.#isInstalled) {\r\n console.warn(\"VideoPlayer extension is not installed! Check isInstalled() first.\");\r\n return false;\r\n }\r\n return this.#extensionUrl + 'iptv/player.html';\r\n }\r\n\r\n}\r\n\r\nwindow.VideoPlayer = VideoPlayer;"],"mappings":"AAMA,MAAMA,YAEFC,IAAe,EACfC,IAAe,EACfC,IAAgB,EAEhB,WAAAC,CAAYC,GACI,SAATA,EACCC,MAAKL,GAAe,EAEpBM,QAAQC,KAAK,qDAErB,CAMA,oBAAOC,GACH,MAAO,qCACX,CAOA,iBAAaJ,GACT,MAAMK,EAAc,IAAIV,YAAY,QAEpC,aADMU,EAAYC,iBACXD,CACX,CAEA,oBAAMC,GACF,GAAKL,MAAKM,IAGV,IACI,MAAMC,QAAiBC,MAAM,kBAAmB,CAACC,OAAQ,OAAQC,SAAU,WAE3E,GAAIH,EAASI,YAAcJ,EAASK,IAAIC,SAAS,sBAAwB,CACrE,MACMC,EADQ,+BACOC,KAAKR,EAASK,KACnCZ,MAAKH,EAAgBiB,EAAO,GAC5Bd,MAAKJ,GAAe,CACxB,KAAK,CAED,MAAMW,QAAiBC,MAAM,kEAAmE,CAACC,OAAQ,SACrGF,EAASS,IAA0B,MAApBT,EAASU,SACxBjB,MAAKH,EAAgB,uDACrBG,MAAKJ,GAAe,EAE5B,CACJ,CAAE,MAAOsB,GAAQ,CACrB,CAEA,EAAAZ,GAII,OAHKN,MAAKL,GACNM,QAAQC,KAAK,+FAEVF,MAAKL,CAChB,CAMA,WAAAC,GACI,QAAKI,MAAKM,KAGHN,MAAKJ,CAChB,CAMA,eAAAuB,GACI,OAAKnB,MAAKM,KAAqBN,MAAKJ,EAI7BI,MAAKH,EAAgB,qBAHxBI,QAAQC,KAAK,uEACN,EAGf,CAMA,aAAAkB,GACI,OAAKpB,MAAKM,KAAqBN,MAAKJ,EAI7BI,MAAKH,EAAgB,oBAHxBI,QAAQC,KAAK,uEACN,EAGf,EAIJmB,OAAO3B,YAAcA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "videoplayer-extension",
3
- "version": "0.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "A helper library for VideoPlayer Browser Extension",
5
5
  "main": "index.js",
6
6
  "module": "index.js",