# Dependencies

## Fixed Dependencies

The dependencies available on the free plan are fixed, but they should cover most major use cases.

For cases where custom dependencies are required, upgrade to a paid plan.

### Major Dependencies

* mocha - [NPM](http://npmjs.com/package/mocha) - [Docs](https://mochajs.org/)
* chai - [NPM](https://www.npmjs.com/package/chai) - [Docs](https://www.chaijs.com/)
* sinon - [NPM](https://www.npmjs.com/package/sinon) - [Docs](https://sinonjs.org/)
* axios - [NPM](https://www.npmjs.com/package/axios) - [Docs](https://www.npmjs.com/package/axios)
* lodash - [NPM](https://www.npmjs.com/package/lodash) - [Docs](https://lodash.com/)

### All Available Dependencies

```javascript
{
    "ajv": "6.12.2",
    "async": "3.2.0",
    "axios": "0.19.2",
    "bcrypt": "5.0.0",
    "bluebird": "3.7.2",
    "chai": "4.2.0",
    "cookie": "0.4.1",
    "crypto-js": "4.0.0",
    "dotenv": "8.2.0",
    "faker": "4.1.0",
    "fs-extra": "^9.0.1",
    "getenv": "1.0.0",
    "got": "^11.3.0",
    "http-status": "1.4.2",
    "ip": "1.1.5",
    "jsdom": "16.2.2",
    "jsonwebtoken": "8.5.1",
    "lodash": "4.17.15",
    "luxon": "1.24.1",
    "mocha": "8.0.1",
    "moment": "^2.26.0",
    "ms": "2.1.2",
    "node-fetch": "2.6.0",
    "qs": "6.9.4",
    "ramda": "0.27.0",
    "request": "2.88.2",
    "request-promise": "4.2.5",
    "sinon": "9.0.2",
    "ssl-checker": "2.0.4",
    "tar": "6.0.2",
    "underscore": "1.10.2",
    "uuid": "^8.1.0",
    "validator": "^13.1.1"
}
```

## Custom Dependencies

For paid plans, custom dependencies are an option.

To use custom dependencies, just change the "dependencies" entry in your [`routine.json`](https://docs.asserted.io/reference/routine-json) to "custom", as shown below.

```javascript
{
  "id": "rt-GKgRG",
  "projectId": "p-1HLbs9Z",
  "name": "custom-dep-tests",
  "description": "Tests with Custom Dependencies",
  "interval": {
    "unit": "min",
    "value": 10
  },
  "dependencies": "custom", // The "custom" option is available on paid plans
  "mocha": {
    "files": [
      "**/*.asrtd.js"
    ],
    "ignore": [],
    "bail": false,
    "ui": "bdd"
  },
  "timeoutSec": 10
}
```

Once that change is made, any subsequent pushes will include all of the dependencies listed in the "dependencies" entry of your `package.json`. "devDependencies" and "peerDependencies" are ignored.

A modified version of [`npm-shrinkwrap`](https://docs.npmjs.com/cli/shrinkwrap) is used to capture the exact versions of the dependencies in your current `node_modules` folder during the push.
