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

freebox

v2.0.0

Published

Simple authentification and secure requests to your Freebox OS server

Downloads

23

Readme

Freebox for Node.js

Simple authentication and secure requests to your Freebox OS server

Build Status npm version tested with jest XO code style

Why ?

From Freebox OS API documentation (https://dev.freebox.fr/sdk/os), register and authentication processes are quite difficult to set up. This little library simplify and automate all the hard authentication stuff to being able to request your Freebox from anywhere using HTTPS protocol.

Install

$ npm install freebox

Usage

Official Freebox OS API Documentation: https://dev.freebox.fr/sdk/os

Tested on:

  • Freebox Revolution V6

If you tested on your Freebox and the device model is not in this list, please open an issue and I will add it in the list.

Register your app

Register only once your app ! You must be connected to your Freebox local network to register an app. To test if are on your Freebox local network, visit this page: https://mafreebox.freebox.fr. If it's working, you are on your Freebox local network.

Note: You can not register an app using a remote HTTPS freebox server domain like https://r42bhm9p.fbxos.fr.

const { FreeboxRegister } = require("freebox");

async function main() {
  const freeboxRegister = new FreeboxRegister({
    app_id: "fbx.my_amazing_app",
    app_name: "My Amazing App",
    app_version: "1.0.0",
    device_name: "My cool PC",
  });

  // Obtaining an app_token & everything you need
  // following the guide at https://dev.freebox.fr/sdk/os/login/
  const access = await freeboxRegister.register();
}

main().catch((err) => console.error(err));

/*

Please check your Freebox Server LCD screen and authorize application access to register your app.

Your app has been granted access !

Save safely those following informations secret to connect to your Freebox API:
{ app_token:
   'etCEF2aytGPLWm1KZM0vIW/ziZOU58v/0qv9jUiJcedjadjaRZ/bflWSKy6HODORGUo6',
  app_id: 'fbx.my_amazing_app',
  api_domain: 'r42bhm9p.fbxos.fr',
  https_port: 35023,
  api_base_url: '/api/',
  api_version: '6.0' }

*/

Login & request your Freebox server

const { Freebox } = require("freebox");

async function main() {
  const freebox = new Freebox({
    app_token:
      "etCEF2aytGPLWm1KZM0vIW/ziZOU58v/0qv9jUiJcedjadjaRZ/bflWSKy6HODORGUo6",
    app_id: "fbx.my_amazing_app",
    api_domain: "r42bhm9p.fbxos.fr",
    https_port: 35023,
    api_base_url: "/api/",
    api_version: "6.0",
  });

  // Open a session
  // https://dev.freebox.fr/sdk/os/login/
  await freebox.login();

  // Get the current Wi-Fi global configuration
  // https://dev.freebox.fr/sdk/os/wifi
  const response = await freebox.request({
    method: "GET",
    url: "wifi/config",
  });

  // Close the current session
  // https://dev.freebox.fr/sdk/os/login/#closing-the-current-session
  await freebox.logout();
}

main().catch((err) => console.error(err));

API: FreeboxRegister

Each application identified with an app_name must gain access to Freebox API before being able to use the api. This procedure can only be initiated from the local network, and the user must have access to the Freebox front panel to grant access to the app.

Once the user authorize the app, the app will be provided with a unique app_token associated with a set of default permissions.

This app_token must be store securely by the app, and will not be exchanged in clear text for the following requests.

Note that the user can revoke the app_token, or edit its permissions afterwards. For instance if the user resets the admin password, app permissions will be reset.

FreeboxRegister([appIdentity])

Returns a new instance.

appIdentity

Type: Object

app_id

Type: String Default: "fbx.nodejs_app_{generatedId}"

A unique app_id string.

app_name

Type: String Default: "nodejs_app_{generatedId}"

A descriptive application name (will be displayed on lcd).

app_version

Type: String Default: "1.0.0"

Your app version.

device_name

Type: String Default: "NodeJS"

The name of the device on which the app will be used.

Instance

.register()

Register your app to the Freebox. It requires a manual input on Freebox LCD screen. Returns an Object with all the informations needed to login and request your Freebox.

.discovery()

Returns an Object (AxiosResponse) containing the API information of the Freebox.

API: Freebox

The app need to open a session to get an auth_token. The app will then be authenticated by adding this session_token in HTTP headers of the following requests. The validity of the auth_token is limited in time and the app will have to renew this auth_token once in a while.

Freebox([appRegistered])

Returns a new instance.

appRegistered

Type: Object

app_id

Type: String

Same app_id used in TokenRequest to get the app_token.

app_token

Type: String

Unique app_token provided after authorizing the app via FreeboxRegister class. This token has been associated with a set of default permissions.

api_domain

Type: String Default: "https://mafreebox.freebox.fr"

The domain to use in place of hardcoded Freebox IP.

https_port

Type: Number

Port to use for remote https access to the Freebox API.

api_base_url

Type: String

The API root path on the HTTP server.

api_version

Type: String

The current API version on the Freebox.

app_version

Type: String Optional

Same app_version used in TokenRequest (using FreeboxRegister class) to get the app_token.

Instance

.login()

Login to a Freebox by opening a session.

.logout()

Close the current session.

.request(object)

Requests the Freebox by passing an object AxiosRequestConfig (https://github.com/axios/axios#request-config). Returns an Object (AxiosResponse).

License

MIT License Copyright (c) 2019 Mathieu Schimmerling.

Crafted with ❤️