MQTT module for gjs? (original) (raw)

March 18, 2022, 12:08am 1

Is there an MQTT client module available for use with gjs?

I’ve googled and searched this group but found nothing relevant, so assuming the answer is no, a supplementary question:

Is it possible for a gjs app to somehow use modules normally distributed through npm? There’s an npm client module there which I’ve used previously in a nodejs application. Can I use it in a gjs application?

Thanks,
chris

sonny (Sonny Piers) March 18, 2022, 10:16am 2

Is it possible for a gjs app to somehow use modules normally distributed through npm?

Yes with a bit of effort depending on what you are trying to use.

If it’s a pure ES module and doesn’t depend on anything extraneous to gjs - you can import it as is from node_modules.

If it depends on globals that gjs doesn’t support, you will need to polyfill them. For example setTimeout, atob, websocket, fetch … I did some (minimal) work there in GitHub - sonnyp/troll: Libraries for GNOME JavaScript (GJS) - check older revisions for things that are now included in gjs if you need to support an older gjs version but I recommend upgrading to 1.72. For now, you can simply use org.gnome.Platform from flathub beta with

flatpak remote-add flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo
flatpak install flathub-beta org.gnome.Platform//42beta
flatpak run --command="gjs" --filesystem="host" org.gnome.Platform//42beta -m myfile.js

For the other cases - you will need to “compile” the modules

I use rollup for that, you can find an examples here and here - install rollup and the plugins and run npx rollup -c rollup.config.js

With polyfills and rollup, I’ve managed to get xmpp.js working in gjs, if mqtt client has a WebSocket transport it should be doable as well.

If mqtt exclusively relies on the Node.js net module, you will need to write a compat layer with Gio.

chris.willing (Christoph Willing) March 18, 2022, 1:09pm 3

Thanks for all that info Sonny - really helpful.

It’s great to know that it’s possible.

It doesn’t look like it would be a week end job though so it’s good I don’t need it immediately. Working with gjs for a couple of weeks has made me start thinking about converting another already existing nodejs app I finished recently.

chris

system (system) Closed April 17, 2022, 1:09pm 4

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.