'use strict';
/**
* Express framework
*
* @namespace Express
*
* @see {@link https://expressjs.com/en/4x/api.html}
*/
/**
* Express Request
*
* @memberof Express
* @inner
*
* @typedef Request
*
* @see {@link https://expressjs.com/en/4x/api.html#req}
*/
/**
* Express Response
*
* @memberof Express
* @inner
*
* @typedef Response
*
* @see {@link https://expressjs.com/en/4x/api.html#res}
*/
/**
* Express Router
*
* @function Express.Router
*
* @see {@link https://expressjs.com/en/4x/api.html#router}
*/
const Router = require('express').Router,
config = {
userAgent: 'Express Middleware - GitHub API',
apiRoot: 'https://api.github.com'
};
/**
* API configuration
*
* @typedef {object} APIConfig
*
* @property {string} AppID
* @property {string} AppSecret
* @property {string[]} [AppScope]
* @property {string} [HookSecret] - Secret code of a **Web hook**
*/
/**
* Session data
*
* @typedef {object} SessionData
*
* @property {string} AccessToken - Access token of **OAuth 2.0**
*
* @see {@link https://developer.github.com/v3/users/#get-the-authenticated-user|More data about the Login User}
*/
/**
* Session handler
*
* @callback SessionHandler
*
* @param {Express~Request} request
* @param {Express~Response} response
* @param {SessionData} [data]
*/
/**
* Local configuration
*
* @typedef {object} LocalConfig
*
* @property {SessionHandler} setSession
* @property {SessionHandler} getSession
* @property {string} [successURL=""] - URL to redirect when OAuth succeed
*/
/**
* Middleware instance
*
* @typedef {object} Middleware
*
* @property {Express.Router} router
* @property {external:EventEmitter} emitter
*/
/**
* @global
*
* @param {APIConfig} API_Config
* @param {LocalConfig} Local_Config
*
* @return {Middleware}
*/
module.exports = function (API_Config, Local_Config) {
const router = Router();
Object.assign(config, API_Config, Local_Config);
require('./OAuth').call(router, config);
require('./Language').call(router, config);
const emitter = require('./Hook').call(router, config);
require('./Proxy').call(router, config);
return {
router: router,
emitter: emitter
};
};