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

realworld-api

v1.0.2

Published

RealWorld library for open API calls using JavaScript

Downloads

2

Readme

realworld-api

RealWorld library for open API calls using JavaScript

about

RealWorld is a fullstack Medium clone that can be written using many different web frameworks. It was developed as a way to show how to accomplish the same website using different backend and frontend technologies.

I created this module as a simple way to interact with the RealWorld API Specification which could be easily dropped in to any frontend technology stack.

Each public function is well-documented in the code using JSDoc and the documentation can be automatically generated using documentation.js.

Unit tests are written to be isolated and idempotent. Addtionally, you do not have to be connected to the internet in order to run the tests. The tests run on an ephemeral local Node.js HTTP server and ensure the API requests are correct.

realworld-api mostly follows the logic of the Tiny Guide to Non Fancy Node, however it makes use of template literals from ES6. If you are bundling realworld-api for use in an older browser that doesn't support template literals, you may want to compile your code using Babel or use a browserify transform such as ES2020.

install

npm install realworld-api

usage

var RealWorld = require('realworld-api')

var client = new RealWorld()

client.getArticles(function (err, res, data) {
  if (err) throw err
  console.log(data)
})

api

RealWorld

Realworld library for open API calls using JavaScript

Parameters

  • opts Object? options for configuring API
    • opts.token string authentication token from RealWorld (optional, default null)
    • opts.apiRoot string the url to Realworld API (optional, default https://conduit.productionready.io/api)

Examples

var client = new RealWorld()
var client = new RealWorld({
  apiRoot: 'http://localhost:8000/api',
  token: 'my-secret-authentication-token'
})

login

Log in to the RealWorld API If successful, the data result will be type {User}

Parameters

Examples

client.login(
  {
    email: '[email protected]',
    password: 'secret'
  },
  handleResponse
)

register

Register a new user with the RealWorld API

Parameters

Examples

client.register(
  {
    email: '[email protected]',
    password: 'shhhh',
    username: 'rick'
  },
  handleResponse
)

getUser

Get the logged in user

Parameters

Examples

client.getUser(handleResponse)

updateUser

Update the logged in user info

Parameters

  • opts Object
    • opts.email string email address of user (optional, default null)
    • opts.username string username of user (optional, default null)
    • opts.bio string biography of user (optional, default null)
    • opts.password string password of user (optional, default null)
    • opts.image string url of user image (optional, default null)
  • cb RealWorld~requestCallback Callback function

Examples

client.updateUser(
  {
    email: '[email protected]',
    password: 'hush',
    username: 'stace',
    bio: 'riot grrl'
  },
  handleResponse
)

getProfile

Get profile of a user

Parameters

Examples

client.getProfile('rick', handleResponse)

followUser

Follow a user (authentication required)

Parameters

Examples

client.followUser('rick', handleResponse)

unFollowUser

Unfollow a user (authentication required)

Parameters

Examples

client.unFollowUser('rick', handleResponse)

listAllArticles

Request a list of 20 articles sorted by most recent in descending order

Parameters

Examples

client.listAllArticles(handleResponse)
client.listAllArticles(2, handleResponse)

listArticlesByTag

Request a list of 10 articles filtered by a tag and sorted by most recent in descending order

Parameters

Examples

client.listArticlesByTag('JavaScript', handleResponse)
client.listArticlesByTag('JavaScript', 2, handleResponse)

listArticlesByAuthor

Request a list of five articles filtered by author and sorted by most recent in descending order

Parameters

Examples

client.listArticlesByAuthor('rick', handleResponse)
client.listArticlesByAuthor('rick', 2, handleResponse)

listArticlesByAuthorFavorites

Request a list of 20 articles filtered by author favorites and sorted by most recent in descending order

Parameters

Examples

client.listArticlesByAuthorFavorites('rick', handleResponse)
client.listArticlesByAuthorFavorites('rick', 1, handleResponse)

feedArticles

Request a list of ten articles from the currently logged in users feed sorted by most recent in descending order (authentication required)

Parameters

Examples

client.feedArticles(handleResponse)
client.feedArticles(2, handleResponse)

getArticle

Request contents from a single article with the specified slug

Parameters

Examples

client.getArticle('angular-app-dev-e33mn9', handleResponse)

createArticle

Create a new article (authentication required)

Parameters

Examples

client.createArticle(
  {
    title: 'My awesome article',
    description: 'beep boop',
    body: 'wham bam thank you ma\'am',
    tagList: ['awesomeness', 'robots']
  },
  handleResponse
)

updateArticle

Update an existing article with given slug and options (authentication required)

Parameters

  • slug string shortname (slug) of article to update
  • opts Object
    • opts.title string title of article (optional, default null)
    • opts.description string short description of article (optional, default null)
    • opts.body string content of article (optional, default null)
  • cb RealWorld~requestCallback Callback function

Examples

client.updateArticle('my-awesome-article-ew9439', {
  title: 'my awesome gender neutral article',
  description: 'boop beep',
  body: 'wham bam thank you friend'
})

deleteArticle

Delete an existing article with the given slug (authentication required)

Parameters

Examples

client.deleteArticle('my-awesome-article-ew9439', handleResponse)

addComment

Add a comment to an article with the given slug (authentication required)

Parameters

Examples

client.addComment(
  'my-awesome-article-ew9439',
  {
    body: 'this is a good article'
  },
  handleResponse
)

getComments

Get comments from an article

Parameters

Examples

client.getComments('angular-app-dev-e33mn9', handleResponse)

deleteComment

Delete comment from an article (authentication required)

Parameters

Examples

client.deleteComment('angular-app-dev-e33mn9', 'e11dfeg', handleResponse)

favoriteArticle

Favorite an article (authentication required)

Parameters

Examples

client.favoriteArticle('my-awesome-article-ew9439', handleResponse)

unFavoriteArticle

Unfavorite an article (authentication required)

Parameters

Examples

client.unFavoriteArticle('my-awesome-article-ew9439', handleResponse)

getTags

Get a list of tags

Parameters

Examples

client.getTags(handleResponse)

setToken

Set the authentication token

Parameters

  • _token string authentication token to set

Examples

client.setToken('my-secret-authentication-token')

RealWorld~requestCallback

This callback is displayed as part of the RealWorld class. The error should be null if the method was able to run. HTTP and API errors are not caught as errors so that you can catch them yourself. For example, a response code 500 may return (null, { res.statusCode: 500, res.statusMessage: 'Internal Server Error' }, null).

API errors are returned with a 422 status code. Errors are included as JSON in the data result and are in the form of

{ "errors":{ "body": [ "can't be empty" ] } }

where body may be any parameter such as password, email, etc.

Successful API requests will return JSON data as seen in the RealWorld API Spec

Type: Function

Parameters

  • err Error error if method was unable to run
  • res Object response object from server
  • data Object data result from the server as JSON

Examples

function handleResponse (err, res, data) {
  if (err) return console.error(err)
  if (res.statusCode === 422 && data.errors) {
    Object.keys(data.errors).forEach(function (err) {
      var values = data.errors[err]
      values.forEach(function (v) {
        console.error(`${err} ${v}`)
      })
    })
    return
  }
  if (res.statusCode !== 200) {
    return console.log(`${res.statusCode}: ${res.statusMessage}`)
  }
  return console.log(data)
}

license

Copyright 2017 Nick Peihl

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.