@smpx/koa-request

Handle basic tasks for koajs.

Usage no npm install needed!

<script type="module">
  import smpxKoaRequest from 'https://cdn.skypack.dev/@smpx/koa-request';
</script>

README

Request

Handle basic tasks for koajs.

Example config:

const Koa = require('koa');
const {Request} = require('@smpx/koa-request');

const app = new Koa();

const requestOptions = {
    // install request middleware for access to ctx.$req
    middleware: true,
    // base domain of the app
    baseDomain: 'smartprix.com',
    // limit the request from a single ip (10 requests in 1 minute)
    rateLimit: {
        interval: {min: 1},
        max: 10,
        // don't apply rate limit to these requests
        skip(ctx) {
            return false;
        },
    },
    // enable basic authentication
    basicAuth: {
        enabled: true,
        // skip basic authentication if request is proxied by nginx
        skipOnProxy: true,
        // skip basic authentication if request is from localhost
        skipOnLocalhost: true,
        // custom skip function (don't apply basicAuth if this function returns true)
        skip(ctx) {
            return false;
        },
        // basicAuth username
        name: 'admin',
        // basicAuth password
        pass: 'admin',
    },
    // serve static files from these paths
    staticPaths: [
        {
            path: '/',
            root: `${__dirname}/public`,
            // don't serve these paths directly
            skip(ctx) {
                return ctx.path.startWith('/robots.txt');
            }
        },
        {
            path: '/static',
            root: `${__dirname}/static`,
            allowOrigins: '*',
            immutable: true,
        },
        {
            path: '/files',
            root: `${__dirname}/files`,
            immutable: true,
            // custom path of the file
            async getPath(ctx) {
                return DB.fetch('paths', ctx.path);
            },
        },
    ],
    // ban bots
    banBots: {
        // enable banning of common bots (does not include search bots)
        commonBots: true,
        // ban these user agents
        userAgents: [
            '80legs',
        ],
        // ban these ips
        ips: [
            '27.210.',
        ],
        // what email to show in ban messages
        email: 'a@b.com',
    }
};

// provides, ctx.user, ctx.$req, rateLimit, static paths and more
Request.install(app, requestOptions);