npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

stratocaster

v1.1.1

Published

a totally tubular chromecast client

Downloads

71

Readme

stratocaster

a totally tubular chromecast client

What?

stratocaster is a lightweight, Promise-based Chromecast "receiver" library, providing abstractions at various levels to facilitate most use cases. It does not include any tools for interacting with specific Chromecast applications (see babbling) but instead is meant to provide clean interfaces for implementing such interactions.

Here's how to use it:

import { ChromecastDevice, MEDIA_NS } from "stratocaster";

// in most practical cases, you will want to speak to a specific device:
const d = new ChromecastDevice("Family Room TV");

// ... but you can also search for one if you like:
const d = await ChromecastDevice.find(info => {
    return info.model === "Chromecast Ultra";
});

// ... or step through every device you can find:
for await (const device of ChromecastDevice.discover()) {
    // ...
}

// once you've found a device, typically you'll want to work with
// a specific app on the device; this opens the "generic media receiver":
const app = await d.app("CC1AD845");

// the app is not necessarily opened on the device at this point;
// if that's all you want to do, or if you want to show the app early
// while performing other preparations before interacting with it,
// you can explicitly launch the app:
await app.launch();

// communications are silo'd into different "channels," identified with
// a string namespace. the media namespace is commonly used to play videos
const channel = await app.channel(MEDIA_NS);

// JSON-encoded messages can be conveniently sent to channels, and the
// response message will be returned
const response = await ch.send({
    type: "LOAD",
    media: {
      contentId: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
      streamType: "BUFFERED",
    },
});

// don't forget to close the device when done! this will disconnect any
// active connection and invalidate all app and channel references
d.close();

Why?

I've been using nodecastor for quite some time but finally got tired of waiting for mdns to compile. I could perhaps have switched to node-castv2, but that also has a mix of emitter and callback-style APIs that I would have to adapt, and I would also have to maintain my own typescript typings for it.

stratocaster is implemented natively in Typescript, with only pure JS dependencies (and as few of them as possible).

Also, I thought it'd be a fun project :)

Credits