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 🙏

© 2026 – Pkg Stats / Ryan Hefner

appstore

v1.5.0

Published

App API

Readme

AppStore2

Dynamic API that allows you to create, read, update, and delete using Node and Express.

Getting Started

First make sure you have node installed on your computer
If you do not open up your terminal and run the command brew install node
If you already have node on your computer make sure it is up to date by running the command node-v
If you do not have the latest update run the command brew update
Now clone this repository to get started by typing git clone https://github.com/kcossifos/AppStore2.git

Install Dependencies

To install dependencies needed for this dynamic api use

npm install

Install all Command line tools

npm install -g mocha

Create your Database

This dynamic api is using MySQL

1) Make sure you have MySQL installed, if not in your terminal run the command brew install mysql
2) Once that is installed to run MySQL server, run the command mysql.server start in your terminal
3) Create a database

Database configuration

Create a .env file and insert the information to connect to your database

DB_NAME =
DB_USER =
DB_PASS =
DB_HOST =
DB_SCHEMA =
DB_PORT =

#Usage

##Start Server To start the server on port 3000 without debug mode use

npm start

#Unit Testing Tests you code to make sure there are no errors

Make Sure your server is on by using npm start

To run the test use the command mocha:
mocha

##Code Coverage This ensures what part of your code is tested

To run the command for the code coverage report use:

istanbul cover _mocha

#Airbnb Style Guide This style guide is used to make sure your code is formatted correctly.

##Installing

To install eslint run this command:
npm i --save-dev eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react

Then install linter or eslinter packge for the IDE you are using

##Configuration You will need to create a .eslintrc.json file

{
    "env": {
        "node": true
    },
    "extends": "airbnb",
    "plugins": [
        "react"
    ],
    "rules": {
        "new-cap": 0,
        "prefer-template": 0,
        "global-require": 0
    },
    "globals": {
        "describe": true,
        "it": true
    }
}

This file will set off error messages with your code. You can also add addition rules. For more information on airbnb style guide go to https://github.com/airbnb/javascript

Root Page

| Method | URL | Response | |----|----|----| | GET | / | Check out this dynamic api|

Status Page

| Method | URL | Response | |----|----|----| | GET | /status | Healthy: true

Create an App

To create an app

Method: POST
URL: /v1/apps
Response:
{
  "id": 2,
  "userId": 3,
  "title": "Best App-Store in Florida",
  "description": "A fast paced app",
  "artAssets":
  [
    { "title": "Splash Screen", "srcLink": "http://i.imgur.com/5e5Ihb6.jpg" },
    { "title": "Cut Scene", "srcLink": "http://i.imgur.com/QQ3O6PO.jpg" }
  ],
  "releaseDate": "2016-06-15T22:29:20.000Z",
  "createdAt": "2016-05-15T22:29:20.000Z",
  "updatedAt": "2016-05-15T22:29:20.000Z"
}

Read all Apps

To get all apps

Method: GET
URL: /api/v1/apps
Response:
  {
           "apps": [
               {
                 "id": 2,
                 "userId": 3,
                 "title": "Best App-Store in Florida",
                 "description": "A fast paced app",
                 "artAssets": [
                   { "title": "Splash Screen", "srcLink": "http://i.imgur.com/5e5Ihb6.jpg" },
                   { "title": "Cut Scene", "srcLink": "http://i.imgur.com/QQ3O6PO.jpg" }
                 ],
                 "releaseDate": "2016-06-15T22:29:20.000Z",
                 "createdAt": "2016-05-15T22:29:20.000Z",
                 "updatedAt": "2016-05-15T22:29:20.000Z",
                 "user": {
                   "id": 3,
                   "name": "Kelsey"
                 }
               },
               {
                 "id": 4,
                 "userId": 5,
                 "title": "Best App-Store in the World",
                 "description": "A fast paced app store on the east",
                 "artAssets": [
                   { "title": "Splash Screen", "srcLink": "http://i.imgur.com/5e5Ihb6.jpg" },
                   { "title": "Cut Scene", "srcLink": "http://i.imgur.com/QQ3O6PO.jpg" }
                 ],
                 "releaseDate": "2016-06-15T22:29:20.000Z",
                 "createdAt": "2016-05-15T22:29:20.000Z",
                 "updatedAt": "2016-05-15T22:29:20.000Z",
                 "user": {
                   "id": 5,
                   "name": "Shrub"
                 }
               },
               {
                 "id": 5,
                 "userId": 6,
                 "title": "Best App-Store in the Universe",
                 "description": "A fast paced side scrolling shooter",
                 "artAssets": [
                   { "title": "Splash Screen", "srcLink": "http://i.imgur.com/5e5Ihb6.jpg" },
                   { "title": "Cut Scene", "srcLink": "http://i.imgur.com/QQ3O6PO.jpg" }
                 ],
                 "releaseDate": "2016-06-15T22:29:20.000Z",
                 "createdAt": "2016-05-15T22:29:20.000Z",
                 "updatedAt": "2016-05-15T22:29:20.000Z",
                 "user": {
                   "id": 6,
                   "name": "Kah"
                 }
               }
           ]
 }

Read a Single App

To get a single app

Method: GET
URL: /api/v1/apps/1
Response:
{ "app": { "id": "1",
"title": "Best App-Store in the Universe",
"description": "A fast paced side scrolling shooter",
"releaseDate": "2016-06-15T22:29:20.000Z"}}

Update an App

To update a specific app by id that was previously created

Method: POST
URL: /v1/apps/:id
Response:
{
  "id": 20,
  "userId": 10,
  "title": "Test App has been updated"
  "description": "Dynamic API",
  "artAssets": www.linkunknown.idk,
  "releaseDate": "2016-08-07T21:09:00.000",
  "createdAt": "2016-08-07T21:09:00.000Z",
  "updatedAt": "2016-08-07T21:09:00.000Z"
}

Delete an App

To delete a specific app by id that was previously created

Method: DELETE
URL: /v1/apps/:id
Response: 1 (which means the app was successfully deleted)
Getting the response of a zero means the app was not deleted
or their is no app by that id number

Create a User

To create a user

Method: POST
URL: /v1/users
Response:
{
  "id": 22,
  "name" : Kelsey,
  "updatedAt": "2016-08-07T21:26:43.000Z",
  "createdAt": "2016-08-07T21:26:43.000Z"
}

Update a User

To update a user by id that was previously created

Method: POST
URL: /v1/users/:id
Response:
{
  "id": 22,
  "name": Kelsey,
  "createdAt": "2016-08-07T21:26:43.000Z",
  "updatedAt": "2016-08-07T21:26:43.000Z",
  "apps": []
}
(the "apps" returns an empty array because
this user has no apps associated with its userId)

Read all Users

To get all users

Method: GET
URL: /api/v1/users
Response:
 {
       "users": [
         {
           "id": 1,
           "name": "Kelsey"
         },
         {
           "id": 2,
           "name": "Shrub"
         },
         {
           "id": 3,
           "name": "Kah"
         },
         {
           "id": 4,
           "name": "Kev"
         }
       ]
 }

Read a Single User

To get a single user

Method: GET
URL: /api/v1/users/1
Response: { "user": { "id": 2, "name":"Kelsey" }}

Delete a User

To delete a user by id that was previously created

Method: DELETE
URL: /v1/users/:id
Response: 1 (which means the user was successfully deleted)
Getting the response of a zero means the user was not deleted
or their is no user by that id number

Read all of a Users Apps

To get the relationship between the user id and the apps associated with their id number

Method: GET
URL: /v1/users/:id/apps
Response:
[
  {
    "id": 2,
    "userId": 2,
    "title": "new app",
    "description": "api",
    "artAssets": "www",
    "releaseDate": 2016,
    "createdAt": "2016-08-07T21:26:43.000Z",
    "updatedAt": "2016-08-07T21:26:43.000Z"
  },
  {
    "id": 3,
    "userId": 2,
    "title": "new",
    "description": "none",
    "artAssets": "hi",
    "releaseDate": 2222,
    "createdAt": "2016-08-07T21:26:43.000Z",
    "updatedAt": "2016-08-07T21:26:43.000Z"
  }
]