{"_id":"@astrophant/webrtc-radio-sdk","_rev":"3-f754b469d4e4fd9d2165690a37eed49b","name":"@astrophant/webrtc-radio-sdk","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@astrophant/webrtc-radio-sdk","version":"0.1.0","keywords":["webrtc","radio","walkie-talkie","sdk","flutter","browser"],"license":"UNLICENSED","_id":"@astrophant/webrtc-radio-sdk@0.1.0","maintainers":[{"name":"astrophant","email":"matt@minervainsights.co.uk"}],"dist":{"shasum":"68642aec5e8e9505d367fe405d89cf468327b246","tarball":"https://registry.npmjs.org/@astrophant/webrtc-radio-sdk/-/webrtc-radio-sdk-0.1.0.tgz","fileCount":4,"integrity":"sha512-D/h3WdyXi3+J9JZgTpPPEtZ8aIGIQ0P7qNw1kh29YfV0P1wwN+IWC5Emnzd+2dV4AHboGp+vVx24/LwWLtr82Q==","signatures":[{"sig":"MEUCIQC6ofQuoQXToRo6obmdlD/KzEeA907L1A1VvwL4245TQwIgFJC+hNTmEWaN+BI0xsQVaJuowMUJo+sJt8K7zRVi7AA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9419},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","module":"./src/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js","default":"./src/index.js"}},"private":false,"_npmUser":{"name":"astrophant","email":"matt@minervainsights.co.uk"},"_npmVersion":"11.6.2","description":"Browser SDK for embedding and controlling WebRTC Radio from a web app.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/webrtc-radio-sdk_0.1.0_1785511838027_0.3995324047279032","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@astrophant/webrtc-radio-sdk","version":"0.1.1","keywords":["webrtc","radio","walkie-talkie","sdk","flutter","browser"],"license":"Apache-2.0","_id":"@astrophant/webrtc-radio-sdk@0.1.1","maintainers":[{"name":"astrophant","email":"matt@minervainsights.co.uk"}],"homepage":"https://webrtc-radio.web.app/?screen=sdk","dist":{"shasum":"d4d39aeaa52b1d643172aba114e5133df9d5fa31","tarball":"https://registry.npmjs.org/@astrophant/webrtc-radio-sdk/-/webrtc-radio-sdk-0.1.1.tgz","fileCount":5,"integrity":"sha512-INMsS3wlqhhT6i7b/qTzM3ilPctskQlL+mY7Na0KXsgsMWDVhDBPlj9K9tEDOgEnWh/lFNu+kz6zxdT5jDEmtw==","signatures":[{"sig":"MEQCIB0v5f5Vz6xMMS9lYa/Na3yCYvwRkRvZV9xRmBe9inJCAiA23VmYT/soVHmPj6hmOUblQLx0cFOvuSURIfzgvFKrbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19718},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","module":"./src/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js","default":"./src/index.js"}},"private":false,"_npmUser":{"name":"astrophant","email":"matt@minervainsights.co.uk"},"_npmVersion":"11.6.2","description":"Browser SDK for WebRTC Radio. Docs: https://webrtc-radio.web.app/?screen=sdk","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/webrtc-radio-sdk_0.1.1_1785566130862_0.10873500891346777","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@astrophant/webrtc-radio-sdk","version":"0.2.0","description":"Browser SDK for WebRTC Radio. Docs: https://webrtc-radio.web.app/?screen=sdk","private":false,"type":"module","main":"./src/index.js","module":"./src/index.js","types":"./src/index.d.ts","sideEffects":false,"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js","default":"./src/index.js"}},"publishConfig":{"access":"public"},"homepage":"https://webrtc-radio.web.app/?screen=sdk","keywords":["webrtc","radio","walkie-talkie","sdk","flutter","browser"],"license":"Apache-2.0","scripts":{"test":"node --test test/*.test.mjs"},"engines":{"node":">=18"},"_id":"@astrophant/webrtc-radio-sdk@0.2.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-B5YlgYxznInfrtpXh9Vq8KDTOj4dl+EDN98LTzzX9pKr0TUXefa9sakN/Lgh/SnL5c8+5dnis96M8bxhLe4HWA==","shasum":"5496575d8fe97a5446ce5d121df361ff0a55ae7d","tarball":"https://registry.npmjs.org/@astrophant/webrtc-radio-sdk/-/webrtc-radio-sdk-0.2.0.tgz","fileCount":5,"unpackedSize":27247,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCu3Lgl9A6Zk+ddvod/qr6O3F6koo7RECxP3sxhGTILXQIgOSJGK15zREJimnUEPRpq9z23PuNT+fVKE5RsQEzlNuE="}]},"_npmUser":{"name":"astrophant","email":"matt@minervainsights.co.uk"},"directories":{},"maintainers":[{"name":"astrophant","email":"matt@minervainsights.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/webrtc-radio-sdk_0.2.0_1787209218112_0.7648573892910102"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-31T15:30:37.804Z","modified":"2026-08-20T07:00:18.459Z","0.1.0":"2026-07-31T15:30:38.190Z","0.1.1":"2026-08-01T06:35:31.008Z","0.2.0":"2026-08-20T07:00:18.257Z"},"license":"Apache-2.0","homepage":"https://webrtc-radio.web.app/?screen=sdk","keywords":["webrtc","radio","walkie-talkie","sdk","flutter","browser"],"description":"Browser SDK for WebRTC Radio. Docs: https://webrtc-radio.web.app/?screen=sdk","maintainers":[{"name":"astrophant","email":"matt@minervainsights.co.uk"}],"readme":"# `@astrophant/webrtc-radio-sdk`\n\nBrowser SDK for controlling a hosted WebRTC Radio web app from another web app.\n\nSDK docs:\n\n- https://webrtc-radio.web.app/?screen=sdk\n\n## Install\n\n```bash\nnpm install @astrophant/webrtc-radio-sdk\n```\n\nPackage page:\n\n- https://www.npmjs.com/package/@astrophant/webrtc-radio-sdk\n\nIf you are testing it locally before publishing:\n\n```bash\nnpm install ./npm/webrtc-radio-sdk\n```\n\n## Publish\n\nThis package is structured so a normal website can install it from npm after one publish step:\n\n```bash\ncd npm/webrtc-radio-sdk\nnpm publish --access public\n```\n\nAfter that, any site can use the normal install flow:\n\n```bash\nnpm install @astrophant/webrtc-radio-sdk\n```\n\n## Basic use\n\n```js\nimport { WebRTCRadio } from \"@astrophant/webrtc-radio-sdk\";\n\nconst radio = await WebRTCRadio.create({\n  callsign: \"Browser-Client\",\n  src: \"https://webrtc-radio.web.app/\",\n});\n\nawait radio.join({\n  channelCode: \"DGC-101\",\n  messageKey: \"shared-message-key\",\n});\n\nawait radio.sendText(\"Hello from npm\");\nawait radio.leave();\n```\n\n## Download and share authorized YouTube media\n\nYouTube extraction needs an application-owned server endpoint; browsers cannot\nreliably extract YouTube media directly. Configure an HTTPS endpoint that accepts\n`POST { url, format }` and returns either the media bytes directly or JSON with a\ntemporary `downloadUrl`.\n\nUse this only for media you own, public-domain media, or media you otherwise have\npermission to download and redistribute.\n\nOne function downloads and sends the file through the existing encrypted radio\nchannel:\n\n```js\nawait radio.sendYouTube({\n  url: \"https://www.youtube.com/watch?v=VIDEO_ID\",\n  format: \"audio\", // \"audio\" or \"video\"\n  resolverUrl: \"https://your-app.example/api/youtube\",\n});\n```\n\nTo download without sharing:\n\n```js\nimport { downloadYouTube } from \"@astrophant/webrtc-radio-sdk\";\n\nconst media = await downloadYouTube({\n  url: \"https://youtu.be/VIDEO_ID\",\n  format: \"video\",\n  resolverUrl: \"https://your-app.example/api/youtube\",\n});\n\n// media: { bytes: Uint8Array, name: string, mimeType: string }\n```\n\nOr trigger the browser's Save dialog in one line:\n\n```js\nimport { saveYouTube } from \"@astrophant/webrtc-radio-sdk\";\n\nawait saveYouTube({\n  url: \"https://youtu.be/VIDEO_ID\",\n  format: \"audio\",\n  resolverUrl: \"https://your-app.example/api/youtube\",\n});\n```\n\nThe default maximum is 5 MB, matching WebRTC Radio's attachment limit. The\nresolver should select or transcode a small media variant before responding and\nmust allow CORS requests from the host web app.\n\nDirect media response:\n\n```http\nContent-Type: audio/mpeg\nContent-Disposition: attachment; filename=\"clip.mp3\"\n```\n\nTemporary URL response:\n\n```json\n{\n  \"downloadUrl\": \"https://storage.example/signed/clip.mp4\",\n  \"name\": \"clip.mp4\",\n  \"mimeType\": \"video/mp4\"\n}\n```\n","readmeFilename":"README.md"}