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

@salla.sa/passport-strategy

v1.0.6

Published

Salla authentication strategy for Passport.

Downloads

207

Readme

Overview

This module enables you to implement the authentication process using Salla within your Nodejs applications. By plugging it into Passport, Salla authentication can be quickly and unobtrusively implemented into any application or framework that supports connect-style middleware, including Express.js, by plugging it into Passport.

For more information about Salla's OAuth 2.0 implementation, check our Web API Authorization Guide.

OAuth Workflow

OAuth Workflow

Installation

$ npm install @salla.sa/passport-strategy

Usage

Configure Strategy

Salla authentication strategy authenticates users using a Salla Merchant Account and OAuth 2.0 tokens. This strategy requires a verify callback, which accepts these credentials and calls done providing a user as well as options specifying a client ID, client secret, and callback URL.

const express = require("express");
const passport = require("passport");
const SallaAPIFactory = require("@salla.sa/passport-strategy");
const app = express();

const port = 8081;

// we initialize our Salla API
const SallaAPI = new SallaAPIFactory({
  clientID: "CLIENT_ID", // The client ID assigned to you by Salla in Salla Partner Portal
  clientSecret: "CLIENT_SECRET", // The client password assigned to you by Salla in Salla Partner Portal
  callbackURL: "http://localhost:8081/oauth/callback", // the /oauth/callback in your service
});

// Use the Salla Strategy within Passport.
passport.use(SallaAPI.getPassportStrategy());

// save token and user data to your selected database
SallaAPI.onAuth((accessToken, refreshToken, expires_in, user) => {
  /*
    accessToken
    refreshToken 
    expires_in
    user
  */
});

/*
  when your user login to your application you can retrieve the access token and use
  it to access the Salla APIs from SallaAPI.setAccessToken   .
  
  SallaAPI.setAccessToken(
    ACCESS_TOKEN_FROM_DATABASE,
    REFRESH_TOKEN_FROM_DATABASE,
    EXPIRES_IN_FROM_DATABASE,
    USER_PROFILE_FROM_DATABASE
  );

*/

// we set salla express middleware
app.use((req, res, next) => SallaAPI.setExpressVerify(req, res, next));

// GET /
// render the index page

app.get("/", function (req, res) {
  res.send({ user: req.user });
});

// GET /oauth/redirect
//   Use passport.authenticate() as route middleware to authenticate the
//   request. The first step in salla authentication will involve redirecting
//   the user to accounts.salla.sa. After authorization, salla will redirect the user
//   back to this application at /oauth/callback
app.get("/oauth/redirect", passport.authenticate("salla"));

// GET /oauth/callback
//   Use passport.authenticate() as route middleware to authenticate the
//   request. If authentication fails, the user will be redirected back to the
//   login page. Otherwise, the primary route function function will be called,
//   which, in this example, will redirect the user to the home page.
app.get(
  "/oauth/callback",
  passport.authenticate("salla", { failureRedirect: "/login" }),
  function (req, res) {
    res.redirect("/");
  }
);

app.listen(port, function () {
  console.log("App is listening on port " + port);
});

Refreshing a Token

Refresh tokens can be received by calling SallaAPI.refreshToken() function, which returns a Promies.

const SallaAPI = require("@salla.sa/passport-strategy");

SallaAPI.requestNewAccessToken(SallaAPI.getRefreshToken())
  .then(({ accessToken, newRefreshToken }) => {
    // save new access token and refresh token to your database
  })
  .catch((err) => res.send(err));

Examples

For a complete, working example, refer to the login example, you can get your keys on Salla Partners > My Applications.

Getting All Orders from the store

app.get("/orders", ensureAuthenticated, async function (req, res) {
  res.render("orders.html", {
    orders: await SallaAPI.getAllOrders(),
  });
});

Fetching Resources dynamic url

app.get("/customers", ensureAuthenticated, async function (req, res) {
  res.render("orders.html", {
    customers: await SallaAPI.fetchResource({
      url: "https://api.salla.dev/admin/v2/customers",
    }),
  });
});

Tests

$ npm install --dev
$ npm test

Contributing

Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Security

If you discover any securitys-related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.