{"_id":"@42videobricks/42videobricks-playeriframe","_rev":"12-f59952f5eb3896cc4931ea07b42f94ba","name":"@42videobricks/42videobricks-playeriframe","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.4":{"name":"@42videobricks/42videobricks-playeriframe","version":"1.0.4","keywords":["video","player","iframe","42videobricks"],"author":{"name":"Laurent Bodelet"},"license":"MIT","_id":"@42videobricks/42videobricks-playeriframe@1.0.4","maintainers":[{"name":"bastien-alchimie","email":"bastien.combes@alchimie.com"},{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"}],"homepage":"https://github.com/42videobricks/42videobricks-playeriframe#readme","bugs":{"url":"https://github.com/42videobricks/42videobricks-playeriframe/issues"},"dist":{"shasum":"3583931eb7d7243448865c5329c58495d6a65e99","tarball":"https://registry.npmjs.org/@42videobricks/42videobricks-playeriframe/-/42videobricks-playeriframe-1.0.4.tgz","fileCount":8,"integrity":"sha512-iibY6dmpIxW1FIaTSr/JtQxVHf5tA8bOWEzpiohbfOHa65NmRNbUO6VgsxdDs/GTUIkgnuTfN5LcfOg0juLWLA==","signatures":[{"sig":"MEQCIAhd/fUC7+lRHUi6vEMVGttljKuOm1bIVfy7UvP1grzeAiAE7Zu9nesPzYW9/oxi5MBqW3rjB+HKR1iFFeqiTYLoCg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63357},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"e1d8adfeb80872e3bc5b0531a889ce425d4cb8bd","scripts":{"test":"jest","build":"rollup -c","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"},"repository":{"url":"git+https://github.com/42videobricks/42videobricks-playeriframe.git","type":"git"},"_npmVersion":"10.9.0","description":"A JavaScript library for controlling 42Videobricks player iframe","directories":{},"_nodeVersion":"20.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rollup":"^4.30.1","jest-cli":"^29.7.0","@babel/core":"^7.26.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/42videobricks-playeriframe_1.0.4_1736852457387_0.2701320905742661","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@42videobricks/42videobricks-playeriframe","version":"1.0.5","keywords":["video","player","iframe","42videobricks"],"author":{"name":"Laurent Bodelet"},"license":"MIT","_id":"@42videobricks/42videobricks-playeriframe@1.0.5","maintainers":[{"name":"bastien-alchimie","email":"bastien.combes@alchimie.com"},{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"}],"homepage":"https://github.com/42videobricks/42videobricks-playeriframe#readme","bugs":{"url":"https://github.com/42videobricks/42videobricks-playeriframe/issues"},"dist":{"shasum":"facf213e5a1e53e528c970b0c63313b9a79bbcd5","tarball":"https://registry.npmjs.org/@42videobricks/42videobricks-playeriframe/-/42videobricks-playeriframe-1.0.5.tgz","fileCount":9,"integrity":"sha512-Rqe4AseQ0h6Oh34X60a/nAs0AqwO1Yt1W2PGre3d9S/3ziqRDf9Tl+cyUp3ctIMf6x2DY2aNESvVkCZo7UkILg==","signatures":[{"sig":"MEYCIQDYS5fHODF7sBGbSxxMrqGe3176bLZ5uDIH8lOotyDPFAIhAOmEIiIpQcdcstbHtHWWgsuRYqakv0pBuZqKiEhgmQLB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65194},"main":"dist/index.js","type":"commonjs","module":"dist/index.esm.js","browser":"dist/index.min.js","gitHead":"69c2c904435dd296996a37a807e3fb360c6d5e44","scripts":{"test":"jest","build":"rollup -c","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"},"repository":{"url":"git+https://github.com/42videobricks/42videobricks-playeriframe.git","type":"git"},"_npmVersion":"10.9.0","description":"A JavaScript library for controlling 42Videobricks player iframe","directories":{},"_nodeVersion":"20.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rollup":"^4.30.1","jest-cli":"^29.7.0","@babel/core":"^7.26.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/42videobricks-playeriframe_1.0.5_1736870174733_0.6123410533542373","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@42videobricks/42videobricks-playeriframe","version":"1.0.6","keywords":["video","player","iframe","42videobricks"],"author":{"name":"Laurent Bodelet"},"license":"MIT","_id":"@42videobricks/42videobricks-playeriframe@1.0.6","maintainers":[{"name":"bastien-alchimie","email":"bastien.combes@alchimie.com"},{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"}],"homepage":"https://github.com/42videobricks/42videobricks-playeriframe#readme","bugs":{"url":"https://github.com/42videobricks/42videobricks-playeriframe/issues"},"dist":{"shasum":"733b66ba92b53c6ff2e16c7f3dbc7e9a102963f2","tarball":"https://registry.npmjs.org/@42videobricks/42videobricks-playeriframe/-/42videobricks-playeriframe-1.0.6.tgz","fileCount":11,"integrity":"sha512-qpyzhKQ5LFSPtojw8cIL1eZrp62UarZC9rNFDrhUWM9qrsVk6D16LXswFYkFasXC4wUxR8hd8o5siG4YWXIBkg==","signatures":[{"sig":"MEUCIQCHSjRUaqhmZ05ZxyurQ4AEvQDag1gW8cF1cTF6G4VlrAIgRNRdXa7ib1h4Ao0vmHIv0FnMdijyYipOk53uMsVGzn0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":138846},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.min.js","gitHead":"a076c4aa3ac562b60b79d86db8f5595142bd3db5","scripts":{"test":"jest","build":"rollup -c","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"},"repository":{"url":"git+https://github.com/42videobricks/42videobricks-playeriframe.git","type":"git"},"_npmVersion":"10.9.0","description":"A JavaScript library for controlling 42Videobricks player iframe","directories":{},"_nodeVersion":"20.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.8.1","rollup":"^4.30.1","ts-jest":"^29.2.5","jest-cli":"^29.7.0","typescript":"^5.7.3","@babel/core":"^7.26.0","@types/jest":"^29.5.14","@types/node":"^22.10.6","rollup-plugin-dts":"^6.1.1","rollup-plugin-strip":"^1.2.2","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/42videobricks-playeriframe_1.0.6_1737391231121_0.027606940556397896","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@42videobricks/42videobricks-playeriframe","version":"1.0.7","description":"A JavaScript library for controlling 42Videobricks player iframe","main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","browser":"dist/index.min.js","scripts":{"build":"rollup -c","prepare":"npm run build","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"type":"commonjs","keywords":["video","player","iframe","42videobricks"],"author":{"name":"Laurent Bodelet"},"license":"MIT","devDependencies":{"@babel/core":"^7.26.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-node-resolve":"^16.0.0","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^12.1.2","@types/jest":"^29.5.14","@types/node":"^22.10.6","jest":"^29.7.0","jest-cli":"^29.7.0","jest-environment-jsdom":"^29.7.0","rollup":"^4.30.1","rollup-plugin-dts":"^6.1.1","rollup-plugin-strip":"^1.2.2","ts-jest":"^29.2.5","tslib":"^2.8.1","typescript":"^5.7.3"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/42videobricks/42videobricks-playeriframe.git"},"gitHead":"4dfd5706b3ff252ac764f0ae879573d49130210c","bugs":{"url":"https://github.com/42videobricks/42videobricks-playeriframe/issues"},"homepage":"https://github.com/42videobricks/42videobricks-playeriframe#readme","_id":"@42videobricks/42videobricks-playeriframe@1.0.7","_nodeVersion":"18.19.1","_npmVersion":"9.2.0","dist":{"integrity":"sha512-DedZA7UAWkg3Mcj5AlsA7PfokWAfDEtQHAi591qcncD0iT9q+SBLcO0PIg1VTBQFvl7L6kQwjVkCyavOIT4uPg==","shasum":"75781f43493e9de351a5656af0172c0b84dacd32","tarball":"https://registry.npmjs.org/@42videobricks/42videobricks-playeriframe/-/42videobricks-playeriframe-1.0.7.tgz","fileCount":11,"unpackedSize":142947,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDt+U2Jm2aWEFwQVrX71chWWT4zen9Cakq1qUMvi1lTRAiEArlluVgUriW02dz+NQpSGwgmyKRaD0KTcFEWPnMp0Big="}]},"_npmUser":{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"},"directories":{},"maintainers":[{"name":"bastien-alchimie","email":"bastien.combes@alchimie.com"},{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/42videobricks-playeriframe_1.0.7_1743583349139_0.8792715742171919"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-13T15:07:15.792Z","modified":"2025-04-02T08:42:29.515Z","1.0.0":"2025-01-13T15:07:16.239Z","1.0.1":"2025-01-14T09:25:05.567Z","1.0.2":"2025-01-14T10:26:24.624Z","1.0.3":"2025-01-14T10:33:09.333Z","1.0.4":"2025-01-14T11:00:57.614Z","1.0.5":"2025-01-14T15:56:15.001Z","1.0.6":"2025-01-20T16:40:31.311Z","1.0.7":"2025-04-02T08:42:29.316Z"},"bugs":{"url":"https://github.com/42videobricks/42videobricks-playeriframe/issues"},"author":{"name":"Laurent Bodelet"},"license":"MIT","homepage":"https://github.com/42videobricks/42videobricks-playeriframe#readme","keywords":["video","player","iframe","42videobricks"],"repository":{"type":"git","url":"git+https://github.com/42videobricks/42videobricks-playeriframe.git"},"description":"A JavaScript library for controlling 42Videobricks player iframe","maintainers":[{"name":"bastien-alchimie","email":"bastien.combes@alchimie.com"},{"name":"laurent-alchimie","email":"laurent.bodelet@alchimie.com"}],"readme":"# 42Videobricks Player\n\nA lightweight JavaScript library for controlling 42Videobricks video player iframes. This library provides a simple interface for video playback control, event handling, and player state management.\n\n## Installation\n\n```bash\nnpm install @42videobricks/42videobricks-playeriframe@latest\n```\n\nOr via CDN:\n```html\n<script src=\"https://unpkg.com/@42videobricks/42videobricks-playeriframe/dist/index.min.js\"></script>\n```\n\n## Quick Start\n\n```html\n<iframe \n    id=\"myPlayer\"\n    src=\"https://stream.42videobricks.com/WWhUSEJqbHRLeVR5MlVPOA==/player\"\n    width=\"640\" \n    height=\"360\"    \n    allow=\"autoplay; fullscreen\"\n    allowfullscreen>\n</iframe>\n\n<script>\n    const iframe = document.getElementById('myPlayer');\n    const player = new Api42Videobricks(iframe);\n\n    player.onReady(() => {\n        player.play();\n    });\n</script>\n```\n\n## Usage\n\n### Initialize Player\n\n```javascript\nconst player = new Api42Videobricks(iframeElement, {\n    origin: '*' // Use '*' for development\n});\n```\n\n### Basic Controls\n\n```javascript\n// Playback\nplayer.play();\nplayer.pause();\n\n// Volume\nplayer.mute();\nplayer.unmute();\nplayer.setSound(0.5); // 0 to 1\n\n// Navigation\nplayer.rewind(10); // Rewind 10 seconds\nplayer.forward(10); // Forward 10 seconds\n\n// Target Times\nplayer.addTargetTime(30, { label: 'Chapitre 1' }); // Add a target time at 30 seconds\nplayer.removeTargetTime(30); // Remove a specific target time\nplayer.clearTargetTimes(); // Remove all target times\n\n// Fullscreen if the user interacted with the player beforehand\nplayer.enterFullscreen();\nplayer.leaveFullscreen();\n```\n\n### Event Handling\n\n```javascript\nplayer.onReady(() => {\n    console.log('Player is ready');\n});\n\nplayer.on('videoPlaying', () => {\n    console.log('Video started playing');\n});\n\nplayer.on('videoPaused', () => {\n    console.log('Video paused');\n});\n\nplayer.on('videoEnded', () => {\n    console.log('Video ended');\n});\n```\n\n### Async Methods\n\n```javascript\nasync function getPlayerInfo() {\n    const videoInfo = await player.getVideoInfos();\n    const currentTime = await player.getCurrentTime();\n    const quality = await player.getQuality();\n    const volume = await player.getSound();\n}\n```\n\n## API Reference\n\n### Constructor\n\n```javascript\nnew Api42Videobricks(element, options)\n```\n\n- `element`: HTMLIFrameElement\n- `options`: Object\n    - `origin`: string (default: '*')\n\n### Methods\n\n#### Player Controls\n- `play()`: Start playback\n- `pause()`: Pause playback\n- `mute()`: Mute audio\n- `unmute()`: Unmute audio\n- `setSound(value)`: Set volume (0-1)\n- `setLoop(value)`: Set loop state\n- `enterFullscreen()`: Enter fullscreen\n- `leaveFullscreen()`: Exit fullscreen\n- `rewind(duration)`: Rewind video\n- `forward(duration)`: Forward video\n- `addTargetTime(time, data)`: Add a target time with optional data\n- `removeTargetTime(time)`: Remove a specific target time\n- `clearTargetTimes()`: Remove all target times\n\n#### Event Handling\n- `onReady(callback)`: Register ready callback\n- `on(eventName, callback)`: Add event listener\n- `off(eventName, callback)`: Remove event listener\n\n#### Async Getters\n- `getVideoInfos()`\n- `getCurrentTime()`\n- `getLoop()`\n- `getSound()`\n- `getQuality()`\n- `getQualities()`\n\n### Events\n\n- `canPlay`: Video can playing\n- `error`: Video on error\n- `qualityChange`: Quality changes\n- `timeUpdate`: Playback position changes\n- `videoEnded`: Video playback ends\n- `videoPaused`: Video is paused\n- `videoPlaying`: Video start playing\n- `volumeChange`: Volume changes\n\n\n## Known Limitations\n\n### Autoplay & Unmute\nOn some browsers (like Chrome), trying to unmute (`unmute()`) without user interaction can automatically pause the video. Refer to [the official documentation](https://goo.gl/xX8pDD) for more details.\n\n### Fullscreen\nEntering fullscreen mode (`enterFullscreen()`) requires an explicit user gesture (e.g., click or key press). Otherwise, the following error will be thrown:  \n`Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.`\n\n\n## Browser Support\n\n- Chrome (latest)\n- Firefox (latest)\n- Safari (latest)\n- Edge (latest)\n\n## License\n\nMIT © Alchimie\n\n","readmeFilename":"README.md"}