Compare commits

..

1 Commits

Author SHA1 Message Date
williamlardier e5c7cf28dd
ARSNN-1: fixups 2022-12-13 18:34:46 +01:00
16 changed files with 1652 additions and 126 deletions

View File

@ -1 +0,0 @@
index.d.ts

View File

@ -1,15 +0,0 @@
module.exports = {
env: {
browser: true,
commonjs: true,
es2021: true,
},
extends: 'airbnb-base',
overrides: [
],
parserOptions: {
ecmaVersion: 'latest',
},
rules: {
},
};

23
.eslintrc.json Normal file
View File

@ -0,0 +1,23 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"ignorePatterns": ["build/**/*.js", "build/**/*.d.ts"],
"overrides": [
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
}
}

View File

@ -32,4 +32,5 @@ jobs:
run: yarn install --frozen-lockfile
- name: run lint
run: yarn run eslint
- name: run build
run: yarn build

29
index.d.ts vendored
View File

@ -1,29 +0,0 @@
import HttpAgent, { HttpsAgent } from 'agentkeepalive';
import { HttpsOptions, HttpOptions } from 'agentkeepalive';
declare namespace http {
export interface clientConfigurationDefault {
/**
* Maximum Socket Number: true if TCP session reuse must be enabled
*/
maxSockets?: boolean;
}
export class Agent extends HttpAgent {
constructor(opts?: HttpOptions, config?: clientConfigurationDefault);
}
}
declare namespace https {
export interface clientConfigurationDefault {
/**
* Maximum Socket Number: true if TCP session reuse must be enabled
*/
maxSockets?: boolean;
}
export class Agent extends HttpsAgent {
constructor(opts?: HttpsOptions, config?: clientConfigurationDefault);
}
}

View File

@ -1,11 +0,0 @@
/* eslint-disable global-require */
exports.http = {
Agent: require('./lib/http-agent').default,
};
exports.https = {
Agent: require('./lib/https-agent').default,
};
exports.AgentConfiguration = require('./lib/config/agentConfiguration').default;

13
index.ts Normal file
View File

@ -0,0 +1,13 @@
import agentConfiguration from "./lib/config/agentConfiguration";
import httpAgent from "./lib/http-agent";
import httpsAgent from "./lib/https-agent";
export const http = {
Agent: httpAgent,
};
export const https = {
Agent: httpsAgent,
};
export const AgentConfiguration = agentConfiguration;

View File

@ -1,3 +1,5 @@
import * as http from 'http';
/**
* The maximum socket configuration defaults to 50.
*/
@ -8,10 +10,10 @@ const maxSocketsNumber = Number(process.env.MAX_SOCKETS) || 50;
* The goal is to enforce a `maxSockets` property to properly
* handle load.
*/
const agentConfiguration = {
const agentConfiguration: http.AgentOptions = {
keepAlive: true,
maxSockets: maxSocketsNumber,
maxFreeSockets: maxSocketsNumber,
};
}
exports.default = agentConfiguration;
export default agentConfiguration;

6
lib/config/default.ts Normal file
View File

@ -0,0 +1,6 @@
export default interface clientConfigurationDefault {
/**
* Maximum Socket Number: true if TCP session reuse must be enabled
*/
maxSockets?: boolean;
}

View File

@ -1,28 +0,0 @@
const HttpAgent = require('agentkeepalive');
const agentConfiguration = require('./config/agentConfiguration');
/**
* @class AgentHttp
* Abstracts the native HttpAgent class from agentkeepalive to enforce common
* networking configuration across components.
*/
class AgentHttp extends HttpAgent {
/**
* Constructor for the AgentHttp class
*
* @param opts - Custom HTTP Agent options
* @param config - user-defined default configuration to apply
*/
constructor(opts, config = {
maxSockets: true,
}) {
// Enforce TCP session reuse configuration, unless explicitely specified.
let defaultConfigurations = {};
if (config.maxSockets) {
defaultConfigurations = agentConfiguration;
}
super({ ...opts, ...defaultConfigurations });
}
}
exports.default = AgentHttp;

33
lib/http-agent.ts Normal file
View File

@ -0,0 +1,33 @@
import HttpAgent, { HttpOptions } from 'agentkeepalive';
import clientConfigurationDefault from './config/default';
import agentConfiguration from './config/agentConfiguration';
/**
* @class AgentHttp
* Abstracts the native HttpAgent class from agentkeepalive to enforce common
* networking configuration across components.
*/
export default class AgentHttp extends HttpAgent {
/**
* Constructor for the AgentHttp class
*
* @param opts - Custom HTTP Agent options
* @param config - user-defined default configuration to apply
*/
constructor(
opts?: HttpOptions,
config: clientConfigurationDefault = {
maxSockets: true,
},
) {
// Enforce TCP session reuse configuration, unless explicitely specified.
let defaultConfigurations: HttpOptions = {};
if (config.maxSockets) {
defaultConfigurations = agentConfiguration;
}
super({
...opts,
...defaultConfigurations,
});
}
}

View File

@ -1,28 +0,0 @@
const { HttpsAgent } = require('agentkeepalive');
const agentConfiguration = require('./config/agentConfiguration');
/**
* @class AgentHttps
* Abstracts the native HttpsAgent class from agentkeepalive to enforce common
* networking configuration across components.
*/
class AgentHttps extends HttpsAgent {
/**
* Constructor for the AgentHttps class
*
* @param opts - Custom HTTPs Agent options
* @param config - user-defined default configuration to apply
*/
constructor(opts, config = {
maxSockets: true,
}) {
// Enforce TCP session reuse configuration, unless explicitely specified.
let defaultConfigurations = {};
if (config.maxSockets) {
defaultConfigurations = agentConfiguration;
}
super({ ...opts, ...defaultConfigurations });
}
}
exports.default = AgentHttps;

33
lib/https-agent.ts Normal file
View File

@ -0,0 +1,33 @@
import { HttpsAgent, HttpsOptions } from 'agentkeepalive';
import clientConfigurationDefault from './config/default';
import agentConfiguration from './config/agentConfiguration';
/**
* @class AgentHttps
* Abstracts the native HttpsAgent class from agentkeepalive to enforce common
* networking configuration across components.
*/
export default class AgentHttps extends HttpsAgent {
/**
* Constructor for the AgentHttps class
*
* @param opts - Custom HTTPs Agent options
* @param config - user-defined default configuration to apply
*/
constructor(
opts?: HttpsOptions,
config: clientConfigurationDefault = {
maxSockets: true,
},
) {
// Enforce TCP session reuse configuration, unless explicitely specified.
let defaultConfigurations: HttpsOptions = {};
if (config.maxSockets) {
defaultConfigurations = agentConfiguration;
}
super({
...opts,
...defaultConfigurations,
});
}
}

View File

@ -1,30 +1,38 @@
{
"name": "httpagent",
"version": "1.0.6",
"version": "1.0.4",
"type": "module",
"engines": {
"node": ">=16"
},
"description": "A utility library for networking",
"main": "index.js",
"main": "build/index.js",
"repository": "git@github.com:scality/httpagent.git",
"author": "Scality Inc.",
"license": "Apache-2.0",
"scripts": {
"build": "tsc --declaration; tsc --build tsconfig.json",
"format": "prettier --write \"**/*.{ts,tsx,css,html}\" ",
"prepare": "yarn build || true",
"eslint": "eslint ./ --ext .js,.ts,.tsx",
"eslint-fix": "eslint ./ --ext .js,.ts,.tsx --fix",
"eslint-init": "eslint --init"
"eslint-init": "eslint --init",
"lint": "eslint ./ --ext .js,.ts,.tsx --format visualstudio --no-color --max-warnings 10 --report-unused-disable-directives"
},
"dependencies": {
"@types/node": "^18.11.9",
"agentkeepalive": "^4.2.1"
},
"devDependencies": {
"eslint": "^7.32.0 || ^8.2.0",
"@typescript-eslint/eslint-plugin": "^5.44.0",
"@typescript-eslint/parser": "^5.44.0",
"eslint": "^8.28.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-scality": "git+https://git.yourcmc.ru/vitalif/zenko-eslint-config-scality.git",
"eslint-plugin-import": "^2.25.2",
"eslint-config-scality": "git+https://github.com/scality/Guidelines#8.2.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-prettier": "^4.2.1",
"prettier": "^2.8.0"
"prettier": "^2.8.0",
"typescript": "^4.9.3"
}
}

22
tsconfig.json Normal file
View File

@ -0,0 +1,22 @@
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"rootDir": "./",
"resolveJsonModule": true,
"allowJs": true,
"checkJs": false,
"outDir": "build",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"declaration": true,
"noImplicitAny": false,
"noEmitOnError": false,
"sourceMap": true,
"declarationMap": true
},
"include": ["index.ts", "lib/**/*"],
"exclude": ["node_modules/*"],
"compileOnSave": true
}

1497
yarn.lock Normal file

File diff suppressed because it is too large Load Diff