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

immutable-app-auth

v0.10.1

Published

Immutable app authentication module

Downloads

375

Readme

immutable-app-auth

Immutable App Auth integrates with Immutable App to provide device and session tracking, authentication and access control.

Immutable App Auth currently supports authentication via Facebook and Google.

Immutable App Auth integrates with Immutable Access Control and loads the access control rules and roles that are used for access control.

Immutable App Auth v0.10 and Immutable Core Model v4

Immutable App Auth v0.10 is required to support the breaking changes that were made in Immutable Core Model v4.

Immutable App v0.10 is not compatible with Imutable Core Model v3.

!!! WARNING !!!

geoip support has been removed. this will be added back in a modified way at a later time.

Using Immutable App Auth

app.js
------

const immutableApp = require('immutable-app')`
const immutableAppAuth = require('immutable-app-auth')

immutableAppAuth.config({
    device: {
        cookie: {
            domain: '.your-app.com',
        },
    },
    facebook: {
        callbackHost: 'https://your-app.com',
        clientId: 'XXX',
        clientSecret: 'XXX',
    },
    google: {
        callbackHost: 'https://your-app.com',
        clientId: 'XXX',
        clientSecret: 'XXX',
    },
    session: {
        cookie: {
            domain: '.your-app.com',
        },
    },
})

immutableApp.config({ ... })

In this example Facebook and Google are configured as authentication providers and the domain for the device and session cookies is set.

device configuration

  • cookie - object with device cookie config
    • domain - domain name for device cookie ('')
    • expires - expiration defaults to far future (new Date(2147483647000))
    • name - name of cookie to set ('deviceId')

Any other properties set will be used as options for res.cookie()

facebook configuation

  • callbackHost - protocol and host for callback url ('')
  • callbackPath - path for callback url ('/auth/facebook/callback')
  • clientId - facebook client id ('')
  • clientSecret - facebook client secret ('')
  • loginPath - login path that redirects to facebook ('/auth/facebook/login')profileFields - profile data to request from facebook (['id', 'emails', 'name', 'gender', 'picture.type(large)'])
  • scope - scope for facebook access (['email'])

google configuration

  • callbackHost - protocol and host for callback url ('')
  • callbackPath - path for callback url ('/auth/google/callback')
  • clientId - google client id ('')
  • clientSecret - google client secret ('')
  • loginPath - login path that redirects to google ('/auth/google/login')
  • scope - scope for google access (['email'])

session configuration

  • access - object with config for access id
    • cookie - object with access id cookie config
  • cookie - object with session cookie config
    • domain - domain name for session cookie ('')
    • expires - expiration defaults to session context only (0)
    • name - name of cookie to set ('sessionId')
  • currencies - object with 3 letter code (capitalized) and name of supported currencies for app ({USD: 'United States Dollar'})
  • defaultCurrency - string default currency code (USD)
  • defaultLanguage - string default language (eng)
  • defaultTimezone - string timezone (UTC)
  • geoip - string abs path to maxmind geoip2 database file
  • languages - object with language 3 digit lower case language code and anme ({eng: 'English'})

Immutable App Auth architecture

Immutable App Auth identifies clients by device, session and account.

device

The purpose of device tracking is track multiple different sessions and account using the same physical device.

By default the device id is based on the user agent and ip address of the client. More elaborate "fingerprinting" methods are possible but the basic idea is to identify distinct clients without relying on cookies.

A deviceId cookie will be set but if the cookie is not sent by the client the same deviceId will be calculate again from the user agent and ip address.

session

All requests take place within the context of a session.

Immutable Core and many other components of the Immutable framework use a session and Immutable App Auth initializes this session.

If the client sends a sessionId cookie an existing session will be loaded if the id exists.

If a session does not exist for the client a new session will be created

session-location

The location for the session is tracked using both MaxMind GeoIP and navigator.location in the browser.

profile

A profile is created for each session if it does not exist and if the session is logged in then the profile for the account is loaded.

The profile contains information like location, timezone, language and currency which will be set automatically unless set by the user.

device-session

Whenever a new session is created a deviceSession record is created to link the session to the current device.

session-account

When a sessionId cookie is sent by the client the sessionAccount model is queried to check if the session is associated with an account. If the session is associated with an account the roles for that account will be loaded and used for access control.

Whenever a client creates or logs into an account a new sessionAccount record is created to link the current session to the account.

role-account

The roleAccount model links accounts to roles.

role

The role model provides the names of roles and the types of permissions the role grants - i.e. access, assign, revoke.

Roles are assigned to accounts via roleAccount and access rules are assigned to roles via roleAccess.

If the role has access permission only then sessions with the role will be able to access all of the resources defined by the role's linked access rules.

If the role has assign or revoke permissions then session with the role will be able to assign and/or revoke any of the role's linked access rules to other accounts if they also have the appropriate permissions to administer roles.

role-access

The roleAccess model links roles to access rules.

access

The access model provides access rules that can be linked to roles in order to assign them to accounts.

account

The account model consists solely of an id and createTime. All account data is stored in other models indexed by accountId.

The accountId is the default value used for determining ownership of records.

Models have an accountId property by default and whenever a model is created the accountId property will be populated from the session.

Models can specify alternative properties to use as an accessId but Immutable App Auth must be configured to load the alternative properties onto the session.

auth

Accounts can have one or more auth records from different auth providers. The auth record provides the details needed to identify an account such as email and password.

Immutable App Auth admin functionality

Immutable App Auth provides admin functionality for managing access control rules, accounts, and roles.

To administer Immutable App Auth go to: /admin/