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

snek-intel

v0.1.2

Published

A not so tiny snek intel.

Downloads

5

Readme

Codacy Badge

Table of contents

Installation

The system can be installed using the npm install command:

$ npm install snek-intel

Features

  • GitLab Querying
  • GitHub Querying
  • Statistics Generation
  • Interface with various GraphQL APIs
  • OAuth2-Authentication
  • Session Management

Usage

Source Object

/* GitHub Source Object */
let source = {
  user: "schettn",
  platform: { name: "github", url: "https://api.github.com/graphql" },
  authorization: "token XXXXXXXXXXXXXXXX",
};

/* GitLab Source Object */
let source = {
  user: "schettn",
  platform: { name: "gitlab", url: "https://gitlab.com" },
};

Append Source Object to Database

await intel.append(source);

Append List of Source Object to Database

await intel.appendList([source1, source2]);

Get Reduced Data from Database

let data = intel.get();

Reset Database

This will erase all data in the database.

intel.resetReducer();

Sessions

Session are completely handled by the Intel.

/* 
 * Starts the session for an anonymous user or maintains the session if
 * a user is logged in.
 */
await intel.snekclient.session.begin();

/*
 * Overrides an active session with a new session using the credential
 * pair.
 */
await intel.snekclient.session.begin({
  username: "schettn",
  password: "tschischkotschicko",
});

/* Ends the session */
await intel.snekclient.session.end();

Tasks

All tasks are session aware! Every task has the capability of token handling. Modifying a token is not suggested.

/** Authorization Tasks */
/* Login an anonymous user on the snek-engine */
let userData =
    await intel.snekclient.session.tasks.auth.anon();

/* Login a real user on the snek-engine */
let userData =
    await intel.snekclient.session.tasks.auth.nonanon();

/* Refresh the user tokens on the snek-engine */
let refreshState =
    await intel.snekclient.session.tasks.auth.refresh();

/* Revoke the user tokens on the snek-engine */
let revokeState =
    await intel.snekclient.session.tasks.auth.revoke();


/** General Tasks */
/* Get all profile pages from snek-engine */
let pagesData =
    await intel.snekclient.session.tasks.general.allPageUrls();

/* Get all GitLab servers from the snek-engine */
let gitlabServerData =
    await intel.snekclient.session.tasks.general.gitlabServer();

/** User Tasks */
/* Get all GitLab servers from the snek-engine */
let cachePageData =
    await intel.snekclient.session.tasks.user.cache();

/* Get the profile page data from the snek-engine */
let profilePageData =
    await intel.snekclient.session.tasks.user.profile();

/* Get the registration data from snek-engine */
let registrationData =
    await intel.snekclient.session.tasks.user.registration();

/* Get the whoami data from snek-engine */
let whoamiData =
    await intel.snekclient.session.tasks.user.whoami();

OAuth2

Config File

The client ID, the client secret and the redirect URL are provided by an OAuth organization. To change this file, the repository has to be cloned in order to create a new config file manually.

{
  "providers": {
    "github": {
      "details": {
        "dev": {
          "clientId": "1440dd4c1d1c4c0fa124",
          "clientSecret": "0723a2b5bfef27efc8b2d26d837ead239fa0b0e6",
          "redirectUrl": "http://localhost:3000/redirect",
          "scope": "repo, user:email, read:user, read:org"
        },
        "deploy": {
          "clientId": "b4337a9c1ad66984c060",
          "clientSecret": "1b05648d36ca92d63766e32e8e9a7d740b214816",
          "redirectUrl": "https://snek.at/redirect",
          "scope": "repo, user:email, read:user, read:org"
        }
      },
      "urls": {
        "authorizeUrl": "https://github.com/login/oauth/authorize?redirect_uri=",
        "accessTokenUrl": "https://github.com/login/oauth/access_token?code=",
        "usernameUrl": "https://api.github.com/user"
      }
    }
  },
  "proxyUrl": "https://cors.snek.at/",
  "devUrl": "http://localhost:3000"
}

Currently, a solution to adapt the config file more easily is under development.

Implementation

Redirect page

Put this script inside your redirect page to obtain the access token from the OAuth2 request.

/*
 * The redirect script:
 * Get name of window which was set by the parent to be the unique
 * request key
 */
const requestKey = window.name;

// Update corresponding entry with the redirected url which should
// either contain the access token or the reason for failure in the query
// parameter / hash
localStorage.setItem(requestKey, window.location.href);
window.close();
Requesting access token
/* Import GithubProvider and the RSA */
import RSA, { GithubProvider } from "snek-intel/utils/oauth";

/* Gets the username and accessToken */
const openGitHubOAuth = () => {
    return await RSA.acquireTokenAsync(GithubProvider)
};

/* Example on how to call the GitHub OAuth function */
const { data } = openGitHubOAuth();

console.log(data.username, data.accessToken)

Contributing

GitHub last commit GitHub issues GitHub closed issues

Please read through our contributing guidelines. Included are directions for opening issues, coding standards, and notes on development.

All code should conform to the Code Guide, maintained by SNEK.

Bugs and feature requests

Do you have a bug or a feature request? Please first search for existing and closed issues. If your problem or idea has not been addressed yet, please open a new issue.

Versioning

GitHub package.json version

For reasons of transparency concering our release cycle and in striving to maintain backward compatibility, this repository is maintained under the Semantic Versioning guidelines. Some minor screw ups aside, we try to adhere to those rules whenever possible.

Creators

Thanks

We do not have any external contributors yet, but if you want your name to be here, feel free to contribute to our project.

Copyright and license

GitHub repository license

SPDX-License-Identifier: (EUPL-1.2) Copyright © 2019-2020 Simon Prast