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

lucy-console

v2.0.0

Published

LucyBot's API Console uses **Swagger 2.0** to generate customizable documentation for your API.

Downloads

3

Readme

lucy-console

LucyBot's API Console uses Swagger 2.0 to generate customizable documentation for your API.

If you use another type of API Specification, such as RAML, WADL, or API Blueprint, you can use api-spec-converter to generate a Swagger document.

Demo

You can see the console in action for over 150 different APIs at AnyAPI.

There is also a small gallery of consoles using custom styles.

Installation

The API Console can be installed as a NodeJS package, which will expose an Express router that you can attatch to any existing Express server:

npm install --save lucy-console

You can also clone this project and edit server.js to point to your Swagger file.

Sample Usage

var FS = require('fs');
var App = require('express')();
var LucyConsole = require('lucy-console');

var SWAGGER_FILE = __dirname + '/node_modules/lucy-console/examples/hacker_news.json';
var hackerNewsConsole = new LucyConsole({
  swagger: JSON.parse(FS.readFileSync(SWAGGER_FILE, 'utf8')),
});

App.use(hackerNewsConsole.router);

App.listen(3000);

Options

You can initialize a LucyConsole object with a few different options:

var LucyConsole = require('lucy-console');
var myConsole = new LucyConsole({
  swagger: swagger, // A JS object representing your Swagger specification
  basePath: '/api', // The path on which the router will be mounted
  oauth_callback: 'https://example.com/api/html/oauth_callback.html', // The URL that the user will be redirected to after authorization. A default callback page is provided at /{basePath}/html/oauth_callback.html
  client_ids: { // A mapping from hostname to OAuth2 client IDs
    'example.com': 'abcd1234'
  },
  cache: 1000 * 60 * 60, // The number of ms to cache static assets like JS and CSS
  cssIncludes: ['/css/styles.css', '/css/bootstrap.css'], // See Customization below
  jsIncludes: ['/js/console.js'],                         // See Customization below
  strapping: {  // See Customization below
    css: __dirname + '/static/css/bootstrap.css',
    config: __dirname + '/static/css/bootstrap-config.json',
  }
});
App.use(Express.static(__dirname + '/static'));
App.use('/api', myConsole.router);

Customization

You can use the cssIncludes and jsIncludes options to inject CSS and JS into the page. This helps individual deployments customize the console's look, feel, and behavior.

lucy-console also comes loaded with Strapping!, a GUI for customizing bootstrap. If you pass in the strapping option, the router will serve the GUI at {basePath}/strapping/editor. Making changes inside the GUI and clicking Save will alter the css and config files passed in as options. Be sure to disable Strapping! in production. You'll also need to add the CSS file to cssIncludes so your changes are reflected on the page.

Visual Overlays

In addition to showing the raw output of your API, the LucyBot Console UI allows you to display neatly-formatted output using snippets of HTML.

Views are snippets of HTML for displaying responses from the API. Any valid HTML can be used here, including <script> and <style> tags. You can attach HTML to any endpoint's response, or to a definition's schema, by adding the field 'x-lucy/view'.

LucyBot also provides some helper tags:

  • Use {{ variable.name }} to print the value of a given variable
  • Use <lucy for="thing" in="array"> to iterate over an array
  • Use <lucy if="condition"> to add conditionals
  • Use <lucy include="ViewName"> to include other views

You have access to two global variables inside of your views:

  • result which is the API's response (but can be overriden via <lucy include>)
  • answers which contains the user's responses from inside the recipe

<lucy include> can operate in two different ways:

  1. It can simply copy the HTML of the included view

  2. It can make a new call to the API, and use the included view as a template for displaying the result.

Case (1) is the default behavior. In addition, you can use <lucy include="ViewName" resultvar="foo"> to use variable "foo" in place of API output.

Case (2) is useful if you need more data from the API. You can specify action, which is the name of the action to use, and inputvars which is a mapping from variable names to API inputs.

Example

Let's consider an API with two endpoints:

  • GET /users, which returns an array of user IDs
  • GET /users/{id}, which returns the details for a given user

First let's tell LucyBot how to display the details for a given User by setting swagger.definitions.User['x-lucy/view']

<h2>{{ result.name }}</h2>
<p>{{ result.about }}</p>

Next let's tell LucyBot to use that view for the /users/{id} endpoint by setting swagger.paths['/users/{id}'].responses['200']['x-lucy/view']

<lucy include="User"></lucy>

For the /users endpoint, we only get an array of user IDs. In order to display their details, we'll need to tell LucyBot to call the /users/{id} endpoint. For this example, we assume GET /users/{id} has its operationId set to "getUserById". To show the details for the first 10 users, set swagger.paths['/users'].responses['200']['x-lucy/view']

<lucy for="userID" in="result">
  <lucy if="index < 10">
    <lucy include="User" action="getUserById" inputvars="{id: userID}">
    </lucy>
  </lucy>
</lucy>

Contributing

Contributions are welcome and encouraged. We'll try to respond to Pull Requests within 24 hours.

See Issues for some things that need to get done.

Development Mode

To work with a local copy:

git clone https://github.com/lucybot/lucy-console && cd lucy-console && npm link && npm install
cd /path/to/your/project
npm link lucy-console

In your project, you can specify

var apiConsole = new LucyConsole({
  swagger: SWAGGER,
  development: true,
})

This will cause console to use the raw assets in the ./static/ directory. To regenerate minified assets, run

node asset-manager.js