Compare commits

..

17 Commits

Author SHA1 Message Date
Juan Picado
0a6668c060 chore: update versions (6-next) (#3593)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-02-05 21:58:06 +01:00
Juan Picado
fa274ee44d bump up middleware 2023-02-05 21:36:05 +01:00
Juan Picado
ebc0d5a201 update lockfile 2023-02-05 21:27:53 +01:00
Juan Picado
7b8c250869 chore: add missing changeset config 2023-02-05 21:24:25 +01:00
Juan Picado
631abe1ac1 refactor logger module (#3592)
* refactor logger module

* Update index.ts
2023-02-05 21:00:32 +01:00
Juan Picado
4122520a19 chore: update versions (6-next) (#3591) 2023-02-04 12:28:11 +01:00
Juan Picado
9943e2b189 refactor middleware dependencies (#3588)
* refactor middleware dependencies

* improve wrap

* chore: fix local

* chore: fix test

* changeset
2023-02-04 11:34:33 +01:00
Juan Picado
7abfb6aa3d Update docusaurus.config.js 2023-02-02 20:02:42 +01:00
verdacciobot
5ba6cd1533 chore: updated static data 2023-02-02 00:15:07 +00:00
TLDMain
859c51cd44 fix package parameter (#3575) 2023-01-31 17:09:38 +01:00
Juan Picado
079faf23ca chore: update versions (6-next) (#3581)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-01-31 08:11:07 +01:00
dependabot[bot]
deec651a7f chore(deps): bump actions/github-script from 6.3.3 to 6.4.0 (#3583)
Bumps [actions/github-script](https://github.com/actions/github-script) from 6.3.3 to 6.4.0.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](d556feaca3...98814c53be)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-31 08:04:46 +01:00
renovate[bot]
7f9db75ff7 fix(deps): update all linting dependencies (#3582)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 08:04:31 +01:00
verdacciobot
dc2a373bd8 chore: updated static data 2023-01-30 00:12:56 +00:00
Juan Picado
f61747543c chore: update version website 2023-01-29 16:52:37 +01:00
Juan Picado
a1986e098d feat: expose middleware utils (#3580)
* feat: expose middleware utils

* feat: expose middleware utils

* Update antiLoop.ts

* Update e2e-ci.yml
2023-01-29 15:08:50 +01:00
dependabot[bot]
6c3539ca28 chore(deps): bump github/codeql-action from 2.1.38 to 2.2.1 (#3578)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.38 to 2.2.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](515828d974...3ebbd71c74)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-28 12:54:55 +01:00
184 changed files with 3386 additions and 1557 deletions

View File

@@ -0,0 +1,8 @@
---
'@verdaccio/api': minor
'@verdaccio/middleware': minor
'@verdaccio/utils': minor
'@verdaccio/web': minor
---
feat: expose middleware utils

View File

@@ -0,0 +1,8 @@
---
'@verdaccio/middleware': patch
'@verdaccio/server': patch
'@verdaccio/test-helper': patch
'@verdaccio/local-publish': patch
---
fix: extract logger from middleware

View File

@@ -0,0 +1,25 @@
---
'@verdaccio/api': minor
'@verdaccio/auth': minor
'@verdaccio/cli': minor
'@verdaccio/types': minor
'@verdaccio/hooks': minor
'@verdaccio/loaders': minor
'@verdaccio/middleware': minor
'@verdaccio/node-api': minor
'verdaccio-audit': minor
'verdaccio-auth-memory': minor
'verdaccio-htpasswd': minor
'@verdaccio/local-storage': minor
'@verdaccio/proxy': minor
'@verdaccio/server': minor
'@verdaccio/server-fastify': minor
'@verdaccio/store': minor
'verdaccio': minor
'@verdaccio/web': minor
'@verdaccio/logger': minor
'@verdaccio/logger-7': minor
'@verdaccio/logger-commons': minor
---
feat: refactor logger

View File

@@ -54,12 +54,15 @@
"@verdaccio/e2e-cli-npm9": "1.0.1-6-next.5",
"@verdaccio/e2e-ui": "2.0.0-6-next.3",
"customprefix-auth": "0.0.1",
"@verdaccio/crowdin-translations": "1.0.0"
"@verdaccio/crowdin-translations": "1.0.0",
"@verdaccio/logger-7": "6.0.0-6-next.1",
"@verdaccio/logger-commons": "6.0.0-6-next.25"
},
"changesets": [
"afraid-mice-obey",
"angry-nails-appear",
"big-lobsters-sin",
"big-years-repair",
"brave-seahorses-press",
"bright-poems-obey",
"brown-cycles-laugh",
@@ -72,6 +75,7 @@
"dry-planes-tap",
"dull-monkeys-search",
"early-jokes-nail",
"eight-bottles-own",
"eleven-brooms-hunt",
"eleven-spoons-matter",
"fair-lemons-beam",
@@ -80,6 +84,7 @@
"few-cooks-destroy",
"few-mangos-grow",
"fifty-jars-rest",
"fifty-stingrays-fold",
"fluffy-papayas-lay",
"four-ways-try",
"fuzzy-drinks-taste",
@@ -147,6 +152,7 @@
"three-pots-sit",
"tiny-seals-join",
"tricky-taxis-watch",
"twelve-crabs-guess",
"two-dolls-check",
"unlucky-hairs-wonder",
"wild-jokes-beam",

View File

@@ -0,0 +1,5 @@
---
'@verdaccio/middleware': patch
---
chore: bumb up package

View File

@@ -34,7 +34,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@515828d97454b8354517688ddc5b48402b723750 # tag=v2
uses: github/codeql-action/init@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # tag=v2
# Override language selection by uncommenting this and choosing your languages
# with:
@@ -42,7 +42,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@515828d97454b8354517688ddc5b48402b723750 # tag=v2
uses: github/codeql-action/autobuild@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # tag=v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -56,4 +56,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@515828d97454b8354517688ddc5b48402b723750 # tag=v2
uses: github/codeql-action/analyze@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # tag=v2

View File

@@ -75,14 +75,15 @@ jobs:
strategy:
fail-fast: false
matrix:
pkg: [npm6, npm7, npm8, npm9, pnpm6, pnpm7, yarn1, yarn2, yarn3, yarn4]
name: ${{ matrix.pkg }} / ${{ matrix.os }}
pkg: [npm6, npm7, npm8, npm9, pnpm6, pnpm7, yarn1, yarn2, yarn3, yarn4]
node: [16, 18, 19]
name: ${{ matrix.pkg }}/ ubuntu-latest / ${{ matrix.node }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # tag=v3
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # tag=v3
with:
node-version-file: '.nvmrc'
node-version: ${{ matrix.node }}
- name: Install pnpm
run: npm i pnpm@6.32.15 -g
- uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 # v3

View File

@@ -109,7 +109,7 @@ jobs:
- name: Format lighthouse score
id: format_lighthouse_score
uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0 # tag=v6
uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # tag=v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |

View File

@@ -5,9 +5,9 @@
"main": "./build/index.js",
"types": "./build/index.d.ts",
"devDependencies": {
"verdaccio": "workspace:6.0.0-6-next.55",
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/config": "workspace:6.0.0-6-next.55",
"verdaccio": "workspace:6.0.0-6-next.58",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/config": "workspace:6.0.0-6-next.58",
"@verdaccio/types": "workspace:11.0.0-6-next.19",
"yaml": "2.2.0",
"debug": "4.3.4",

View File

@@ -3,10 +3,10 @@
"name": "@verdaccio/e2e-ui",
"version": "2.0.0-6-next.3",
"devDependencies": {
"verdaccio": "workspace:6.0.0-6-next.55",
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/config": "workspace:6.0.0-6-next.55",
"@verdaccio/test-helper": "workspace:2.0.0-6-next.6",
"verdaccio": "workspace:6.0.0-6-next.58",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/config": "workspace:6.0.0-6-next.58",
"@verdaccio/test-helper": "workspace:2.0.0-6-next.7",
"debug": "4.3.4",
"cypress": "11.2.0"
},

View File

@@ -73,8 +73,8 @@
"@types/react-dom": "18.0.9",
"@types/react-router-dom": "5.3.3",
"@types/react-virtualized": "9.21.21",
"@typescript-eslint/eslint-plugin": "5.47.0",
"@typescript-eslint/parser": "5.47.0",
"@typescript-eslint/eslint-plugin": "5.49.0",
"@typescript-eslint/parser": "5.49.0",
"@verdaccio/crowdin-translations": "workspace:*",
"@verdaccio/eslint-config": "workspace:*",
"@verdaccio/types": "workspace:*",
@@ -90,7 +90,7 @@
"debug": "4.3.4",
"detect-secrets": "1.0.6",
"jest-diff": "29.3.1",
"eslint": "8.30.0",
"eslint": "8.33.0",
"fs-extra": "10.1.0",
"husky": "7.0.4",
"in-publish": "2.0.1",
@@ -105,7 +105,7 @@
"nock": "13.2.9",
"nodemon": "2.0.20",
"npm-run-all": "4.1.5",
"prettier": "2.8.1",
"prettier": "2.8.3",
"rimraf": "3.0.2",
"selfsigned": "1.10.14",
"supertest": "6.3.3",
@@ -157,7 +157,8 @@
"crowdin:sync": "pnpm crowdin:upload && pnpm crowdin:download --verbose",
"postinstall": "husky install",
"local:registry": "pnpm start --filter ...@verdaccio/local-publish",
"local:publish": "cross-env npm_config_registry=http://localhost:4873 pnpm ci:publish",
"local:snapshots": "changeset version --snapshot",
"local:publish": "cross-env npm_config_registry=http://localhost:4873 pnpm ci:publish -- --no-git-tag",
"local:publish:release": "concurrently \"pnpm local:registry\" \"pnpm local:publish\""
},
"pnpm": {

View File

@@ -1,5 +1,48 @@
# @verdaccio/api
## 6.0.0-6-next.41
### Patch Changes
- Updated dependencies [fa274ee4]
- @verdaccio/middleware@6.0.0-6-next.37
- @verdaccio/core@6.0.0-6-next.58
- @verdaccio/config@6.0.0-6-next.58
- @verdaccio/auth@6.0.0-6-next.37
- @verdaccio/store@6.0.0-6-next.38
- @verdaccio/utils@6.0.0-6-next.26
- @verdaccio/logger@6.0.0-6-next.26
## 6.0.0-6-next.40
### Patch Changes
- Updated dependencies [9943e2b1]
- @verdaccio/middleware@6.0.0-6-next.36
- @verdaccio/store@6.0.0-6-next.37
- @verdaccio/core@6.0.0-6-next.57
- @verdaccio/config@6.0.0-6-next.57
- @verdaccio/auth@6.0.0-6-next.36
- @verdaccio/logger@6.0.0-6-next.25
- @verdaccio/utils@6.0.0-6-next.25
## 6.0.0-6-next.39
### Minor Changes
- a1986e09: feat: expose middleware utils
### Patch Changes
- Updated dependencies [a1986e09]
- @verdaccio/middleware@6.0.0-6-next.35
- @verdaccio/utils@6.0.0-6-next.24
- @verdaccio/auth@6.0.0-6-next.35
- @verdaccio/config@6.0.0-6-next.56
- @verdaccio/store@6.0.0-6-next.36
- @verdaccio/core@6.0.0-6-next.56
- @verdaccio/logger@6.0.0-6-next.24
## 6.0.0-6-next.38
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/api",
"version": "6.0.0-6-next.38",
"version": "6.0.0-6-next.41",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -39,13 +39,13 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/auth": "workspace:6.0.0-6-next.34",
"@verdaccio/config": "workspace:6.0.0-6-next.55",
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/logger": "workspace:6.0.0-6-next.23",
"@verdaccio/middleware": "workspace:6.0.0-6-next.34",
"@verdaccio/store": "workspace:6.0.0-6-next.35",
"@verdaccio/utils": "workspace:6.0.0-6-next.23",
"@verdaccio/auth": "workspace:6.0.0-6-next.37",
"@verdaccio/config": "workspace:6.0.0-6-next.58",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/logger": "workspace:6.0.0-6-next.26",
"@verdaccio/middleware": "workspace:6.0.0-6-next.37",
"@verdaccio/store": "workspace:6.0.0-6-next.38",
"@verdaccio/utils": "workspace:6.0.0-6-next.26",
"abortcontroller-polyfill": "1.7.5",
"cookies": "0.8.0",
"debug": "4.3.4",
@@ -57,9 +57,9 @@
},
"devDependencies": {
"@types/node": "16.18.10",
"@verdaccio/server": "workspace:6.0.0-6-next.44",
"@verdaccio/server": "workspace:6.0.0-6-next.47",
"@verdaccio/types": "workspace:11.0.0-6-next.19",
"@verdaccio/test-helper": "workspace:2.0.0-6-next.6",
"@verdaccio/test-helper": "workspace:2.0.0-6-next.7",
"supertest": "6.3.3",
"nock": "13.2.9",
"mockdate": "3.0.5"

View File

@@ -4,13 +4,17 @@ import mime from 'mime';
import { Auth } from '@verdaccio/auth';
import { constants, errorUtils } from '@verdaccio/core';
import { logger } from '@verdaccio/logger';
import { allow, media } from '@verdaccio/middleware';
import { Storage } from '@verdaccio/store';
import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';
export default function (route: Router, auth: Auth, storage: Storage): void {
const can = allow(auth);
const can = allow(auth, {
beforeAll: (a, b) => logger.trace(a, b),
afterAll: (a, b) => logger.trace(a, b),
});
const addTagPackageVersionMiddleware = async function (
req: $RequestExtend,
res: $ResponseExtend,

View File

@@ -42,7 +42,6 @@ export default function (config: Config, auth: Auth, storage: Storage): Router {
// TODO: For some reason? what reason?
app.param('_rev', match(/^-rev$/));
app.param('org_couchdb_user', match(/^org\.couchdb\.user:/));
app.param('anything', match(/.*/));
app.use(auth.apiJWTmiddleware());
app.use(bodyParser.json({ strict: false, limit: config.max_body_size || '10mb' }));
// @ts-ignore

View File

@@ -3,6 +3,7 @@ import { Router } from 'express';
import { Auth } from '@verdaccio/auth';
import { HEADERS, HEADER_TYPE, stringUtils } from '@verdaccio/core';
import { logger } from '@verdaccio/logger';
import { allow } from '@verdaccio/middleware';
import { Storage } from '@verdaccio/store';
@@ -11,8 +12,10 @@ import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/cust
const debug = buildDebug('verdaccio:api:package');
export default function (route: Router, auth: Auth, storage: Storage): void {
const can = allow(auth);
const can = allow(auth, {
beforeAll: (a, b) => logger.trace(a, b),
afterAll: (a, b) => logger.trace(a, b),
});
route.get(
'/:package/:version?',
can('access'),
@@ -58,13 +61,13 @@ export default function (route: Router, auth: Auth, storage: Storage): void {
);
route.get(
'/:pkg/-/:filename',
'/:package/-/:filename',
can('access'),
async function (req: $RequestExtend, res: $ResponseExtend, next): Promise<void> {
const { pkg, filename } = req.params;
const { package: pkgName, filename } = req.params;
const abort = new AbortController();
try {
const stream = (await storage.getTarballNext(pkg, filename, {
const stream = (await storage.getTarballNext(pkgName, filename, {
signal: abort.signal,
// TODO: review why this param
// enableRemote: true,

View File

@@ -93,7 +93,10 @@ const debug = buildDebug('verdaccio:api:publish');
*
*/
export default function publish(router: Router, auth: Auth, storage: Storage): void {
const can = allow(auth);
const can = allow(auth, {
beforeAll: (a, b) => logger.trace(a, b),
afterAll: (a, b) => logger.trace(a, b),
});
router.put(
'/:package',
can('publish'),

View File

@@ -23,7 +23,7 @@
"path": "../hooks"
},
{
"path": "../logger"
"path": "../logger/logger"
},
{
"path": "../middleware"

View File

@@ -1,5 +1,39 @@
# @verdaccio/auth
## 6.0.0-6-next.37
### Patch Changes
- @verdaccio/core@6.0.0-6-next.58
- @verdaccio/config@6.0.0-6-next.58
- @verdaccio/loaders@6.0.0-6-next.27
- verdaccio-htpasswd@11.0.0-6-next.28
- @verdaccio/utils@6.0.0-6-next.26
- @verdaccio/logger@6.0.0-6-next.26
## 6.0.0-6-next.36
### Patch Changes
- @verdaccio/core@6.0.0-6-next.57
- @verdaccio/config@6.0.0-6-next.57
- @verdaccio/loaders@6.0.0-6-next.26
- @verdaccio/logger@6.0.0-6-next.25
- verdaccio-htpasswd@11.0.0-6-next.27
- @verdaccio/utils@6.0.0-6-next.25
## 6.0.0-6-next.35
### Patch Changes
- Updated dependencies [a1986e09]
- @verdaccio/utils@6.0.0-6-next.24
- @verdaccio/config@6.0.0-6-next.56
- @verdaccio/loaders@6.0.0-6-next.25
- verdaccio-htpasswd@11.0.0-6-next.26
- @verdaccio/core@6.0.0-6-next.56
- @verdaccio/logger@6.0.0-6-next.24
## 6.0.0-6-next.34
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/auth",
"version": "6.0.0-6-next.34",
"version": "6.0.0-6-next.37",
"description": "logger",
"main": "./build/index.js",
"types": "./build/index.d.ts",
@@ -39,16 +39,16 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/config": "workspace:6.0.0-6-next.55",
"@verdaccio/loaders": "workspace:6.0.0-6-next.24",
"@verdaccio/logger": "workspace:6.0.0-6-next.23",
"@verdaccio/utils": "workspace:6.0.0-6-next.23",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/config": "workspace:6.0.0-6-next.58",
"@verdaccio/loaders": "workspace:6.0.0-6-next.27",
"@verdaccio/logger": "workspace:6.0.0-6-next.26",
"@verdaccio/utils": "workspace:6.0.0-6-next.26",
"debug": "4.3.4",
"express": "4.18.2",
"jsonwebtoken": "9.0.0",
"lodash": "4.17.21",
"verdaccio-htpasswd": "workspace:11.0.0-6-next.25"
"verdaccio-htpasswd": "workspace:11.0.0-6-next.28"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.19"

View File

@@ -20,7 +20,7 @@
"path": "../loaders"
},
{
"path": "../logger"
"path": "../logger/logger"
},
{
"path": "../utils"

View File

@@ -1,5 +1,32 @@
# @verdaccio/cli
## 6.0.0-6-next.58
### Patch Changes
- @verdaccio/node-api@6.0.0-6-next.58
- @verdaccio/core@6.0.0-6-next.58
- @verdaccio/config@6.0.0-6-next.58
- @verdaccio/logger@6.0.0-6-next.26
## 6.0.0-6-next.57
### Patch Changes
- @verdaccio/node-api@6.0.0-6-next.57
- @verdaccio/core@6.0.0-6-next.57
- @verdaccio/config@6.0.0-6-next.57
- @verdaccio/logger@6.0.0-6-next.25
## 6.0.0-6-next.56
### Patch Changes
- @verdaccio/config@6.0.0-6-next.56
- @verdaccio/node-api@6.0.0-6-next.56
- @verdaccio/core@6.0.0-6-next.56
- @verdaccio/logger@6.0.0-6-next.24
## 6.0.0-6-next.55
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/cli",
"version": "6.0.0-6-next.55",
"version": "6.0.0-6-next.58",
"author": {
"name": "Juan Picado",
"email": "juanpicado19@gmail.com"
@@ -44,10 +44,10 @@
"start": "ts-node src/index.ts"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/config": "workspace:6.0.0-6-next.55",
"@verdaccio/logger": "workspace:6.0.0-6-next.23",
"@verdaccio/node-api": "workspace:6.0.0-6-next.55",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/config": "workspace:6.0.0-6-next.58",
"@verdaccio/logger": "workspace:6.0.0-6-next.26",
"@verdaccio/node-api": "workspace:6.0.0-6-next.58",
"clipanion": "3.1.0",
"envinfo": "7.8.1",
"kleur": "3.0.3",

View File

@@ -20,7 +20,7 @@
"path": "../node-api"
},
{
"path": "../logger"
"path": "../logger/logger"
}
]
}

View File

@@ -1,5 +1,27 @@
# @verdaccio/config
## 6.0.0-6-next.58
### Patch Changes
- @verdaccio/core@6.0.0-6-next.58
- @verdaccio/utils@6.0.0-6-next.26
## 6.0.0-6-next.57
### Patch Changes
- @verdaccio/core@6.0.0-6-next.57
- @verdaccio/utils@6.0.0-6-next.25
## 6.0.0-6-next.56
### Patch Changes
- Updated dependencies [a1986e09]
- @verdaccio/utils@6.0.0-6-next.24
- @verdaccio/core@6.0.0-6-next.56
## 6.0.0-6-next.55
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/config",
"version": "6.0.0-6-next.55",
"version": "6.0.0-6-next.58",
"description": "logger",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -38,8 +38,8 @@
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/utils": "workspace:6.0.0-6-next.23",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/utils": "workspace:6.0.0-6-next.26",
"debug": "4.3.4",
"yaml": "2.2.0",
"lodash": "4.17.21",

View File

@@ -1,5 +1,11 @@
# @verdaccio/core
## 6.0.0-6-next.58
## 6.0.0-6-next.57
## 6.0.0-6-next.56
## 6.0.0-6-next.55
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/core",
"version": "6.0.0-6-next.55",
"version": "6.0.0-6-next.58",
"description": "core utilities",
"keywords": [
"private",

View File

@@ -1,5 +1,30 @@
# Change Log
## 11.0.0-6-next.27
### Patch Changes
- @verdaccio/core@6.0.0-6-next.58
- @verdaccio/url@11.0.0-6-next.24
- @verdaccio/utils@6.0.0-6-next.26
## 11.0.0-6-next.26
### Patch Changes
- @verdaccio/core@6.0.0-6-next.57
- @verdaccio/url@11.0.0-6-next.23
- @verdaccio/utils@6.0.0-6-next.25
## 11.0.0-6-next.25
### Patch Changes
- Updated dependencies [a1986e09]
- @verdaccio/utils@6.0.0-6-next.24
- @verdaccio/core@6.0.0-6-next.56
- @verdaccio/url@11.0.0-6-next.22
## 11.0.0-6-next.24
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/tarball",
"version": "11.0.0-6-next.24",
"version": "11.0.0-6-next.27",
"description": "tarball utilities resolver",
"keywords": [
"private",
@@ -34,9 +34,9 @@
},
"dependencies": {
"debug": "4.3.4",
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/url": "workspace:11.0.0-6-next.21",
"@verdaccio/utils": "workspace:6.0.0-6-next.23",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/url": "workspace:11.0.0-6-next.24",
"@verdaccio/utils": "workspace:6.0.0-6-next.26",
"lodash": "4.17.21"
},
"devDependencies": {

View File

@@ -1,4 +1,4 @@
import { PackageAccess, PackageList } from './manifest';
import { PackageAccess, PackageList } from '@verdaccio/types/src/manifest';
export type TypeToken = 'Bearer' | 'Basic';

View File

@@ -1 +1 @@
export * from './storage';
export * from '@verdaccio/types/src/plugins/storage';

View File

@@ -1,5 +1,5 @@
import { Callback, CallbackAction } from '../commons';
import { Manifest, Token } from '../manifest';
import { Callback, CallbackAction } from '@verdaccio/types/src/commons';
import { Manifest, Token } from '@verdaccio/types/src/manifest';
export type StorageList = string[];

View File

@@ -1,5 +1,5 @@
export * from './plugins';
export * from './manifest';
export * from './search';
export * from './commons';
export * from './configuration';
export * from '@verdaccio/types/src/plugins';
export * from '@verdaccio/types/src/manifest';
export * from '@verdaccio/types/src/search';
export * from '@verdaccio/types/src/commons';
export * from '@verdaccio/types/src/configuration';

View File

@@ -1,5 +1,23 @@
# Change Log
## 11.0.0-6-next.24
### Patch Changes
- @verdaccio/core@6.0.0-6-next.58
## 11.0.0-6-next.23
### Patch Changes
- @verdaccio/core@6.0.0-6-next.57
## 11.0.0-6-next.22
### Patch Changes
- @verdaccio/core@6.0.0-6-next.56
## 11.0.0-6-next.21
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/url",
"version": "11.0.0-6-next.21",
"version": "11.0.0-6-next.24",
"description": "url utilities resolver",
"keywords": [
"private",
@@ -33,7 +33,7 @@
"access": "public"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"debug": "4.3.4",
"lodash": "4.17.21",
"validator": "13.7.0"

View File

@@ -1,5 +1,26 @@
# @verdaccio/hooks
## 6.0.0-6-next.28
### Patch Changes
- @verdaccio/core@6.0.0-6-next.58
- @verdaccio/logger@6.0.0-6-next.26
## 6.0.0-6-next.27
### Patch Changes
- @verdaccio/core@6.0.0-6-next.57
- @verdaccio/logger@6.0.0-6-next.25
## 6.0.0-6-next.26
### Patch Changes
- @verdaccio/core@6.0.0-6-next.56
- @verdaccio/logger@6.0.0-6-next.24
## 6.0.0-6-next.25
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/hooks",
"version": "6.0.0-6-next.25",
"version": "6.0.0-6-next.28",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -29,8 +29,8 @@
"node": ">=16"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/logger": "workspace:6.0.0-6-next.23",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/logger": "workspace:6.0.0-6-next.26",
"core-js": "3.27.0",
"debug": "4.3.4",
"handlebars": "4.7.7",
@@ -38,8 +38,8 @@
},
"devDependencies": {
"@types/node": "16.18.10",
"@verdaccio/auth": "workspace:6.0.0-6-next.34",
"@verdaccio/config": "workspace:6.0.0-6-next.55",
"@verdaccio/auth": "workspace:6.0.0-6-next.37",
"@verdaccio/config": "workspace:6.0.0-6-next.58",
"@verdaccio/types": "workspace:11.0.0-6-next.19"
},
"scripts": {

View File

@@ -14,7 +14,7 @@
"path": "../config"
},
{
"path": "../logger"
"path": "../logger/logger"
}
]
}

View File

@@ -1,5 +1,23 @@
# @verdaccio/loaders
## 6.0.0-6-next.27
### Patch Changes
- @verdaccio/logger@6.0.0-6-next.26
## 6.0.0-6-next.26
### Patch Changes
- @verdaccio/logger@6.0.0-6-next.25
## 6.0.0-6-next.25
### Patch Changes
- @verdaccio/logger@6.0.0-6-next.24
## 6.0.0-6-next.24
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/loaders",
"version": "6.0.0-6-next.24",
"version": "6.0.0-6-next.27",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -13,13 +13,13 @@
"url": "https://github.com/verdaccio/verdaccio"
},
"dependencies": {
"@verdaccio/logger": "workspace:6.0.0-6-next.23",
"@verdaccio/logger": "workspace:6.0.0-6-next.26",
"debug": "4.3.4",
"lodash": "4.17.21"
},
"devDependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/config": "workspace:6.0.0-6-next.55",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/config": "workspace:6.0.0-6-next.58",
"@verdaccio/types": "workspace:11.0.0-6-next.19",
"@verdaccio-scope/verdaccio-auth-foo": "0.0.2",
"verdaccio-auth-memory": "workspace:*",

View File

@@ -80,7 +80,9 @@ export async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(
await isDirectory(pluginsPath);
const pluginDir = pluginsPath;
const externalFilePlugin = resolve(pluginDir, `${prefix}-${pluginId}`);
let plugin = tryLoad<T>(externalFilePlugin);
let plugin = tryLoad<T>(externalFilePlugin, (a: any, b: any) => {
logger.error(a, b);
});
if (plugin && isValid(plugin)) {
plugin = executePlugin(plugin, pluginConfigs[pluginId], params);
if (!sanityCheck(plugin)) {
@@ -106,7 +108,9 @@ export async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(
debug('is scoped plugin %s', isScoped);
const pluginName = isScoped ? pluginId : `${prefix}-${pluginId}`;
debug('plugin pkg name %s', pluginName);
let plugin = tryLoad<T>(pluginName);
let plugin = tryLoad<T>(pluginName, (a: any, b: any) => {
logger.error(a, b);
});
if (plugin && isValid(plugin)) {
plugin = executePlugin(plugin, pluginConfigs[pluginId], params);
if (!sanityCheck(plugin)) {

View File

@@ -2,7 +2,6 @@ import buildDebug from 'debug';
import _ from 'lodash';
import { pluginUtils } from '@verdaccio/core';
import { logger } from '@verdaccio/logger';
const debug = buildDebug('verdaccio:plugin:loader:utils');
const MODULE_NOT_FOUND = 'MODULE_NOT_FOUND';
@@ -23,7 +22,7 @@ export function isES6<T>(plugin: PluginType<T>): boolean {
* @param {*} path the module's path
* @return {Object}
*/
export function tryLoad<T>(path: string): PluginType<T> | null {
export function tryLoad<T>(path: string, onError: any): PluginType<T> | null {
try {
debug('loading plugin %s', path);
return require(path) as PluginType<T>;
@@ -32,7 +31,7 @@ export function tryLoad<T>(path: string): PluginType<T> | null {
debug('plugin %s not found', path);
return null;
}
logger.error({ err: err.msg }, 'error loading plugin @{err}');
onError({ err: err.msg }, 'error loading plugin @{err}');
throw err;
}
}

View File

@@ -15,7 +15,7 @@
"path": "../core/core"
},
{
"path": "../logger"
"path": "../logger/logger"
}
]
}

View File

@@ -1,3 +0,0 @@
{
"extends": "../../.babelrc"
}

View File

@@ -1,3 +0,0 @@
{
"extends": "../../.babelrc"
}

View File

@@ -0,0 +1,14 @@
{
"extends": "../../../.babelrc",
"presets": [
[
"@babel/env",
{
"targets": {
"node": 12
}
}
],
"@babel/typescript"
]
}

View File

@@ -0,0 +1,7 @@
# @verdaccio/logger-7
## 6.0.0-6-next.2
### Patch Changes
- @verdaccio/logger-commons@6.0.0-6-next.26

View File

@@ -0,0 +1,12 @@
# @verdaccio/logger-7
[![backers](https://opencollective.com/verdaccio/tiers/backer/badge.svg?label=Backer&color=brightgreen)](https://opencollective.com/verdaccio)
[![stackshare](https://img.shields.io/badge/Follow%20on-StackShare-blue.svg?logo=stackshare&style=flat)](https://stackshare.io/verdaccio)
[![MIT](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/verdaccio/localized.svg)](https://crowdin.com/project/verdaccio)
[![TODOs](https://badgen.net/https/api.tickgit.com/badgen/github.com/verdaccio/verdaccio)](https://www.tickgit.com/browse?repo=github.com/verdaccio/verdaccio)
[![Twitter followers](https://img.shields.io/twitter/follow/verdaccio_npm.svg?style=social&label=Follow)](https://twitter.com/verdaccio_npm)
[![Github](https://img.shields.io/github/stars/verdaccio/verdaccio.svg?style=social&label=Stars)](https://github.com/verdaccio/verdaccio/stargazers)
Special version of `verdaccio` logger for verdaccio 5.x versions.

View File

@@ -1,4 +1,4 @@
const config = require('../../jest/config');
const config = require('../../../jest/config');
module.exports = Object.assign({}, config, {
coverageThreshold: {

View File

@@ -0,0 +1,51 @@
{
"name": "@verdaccio/logger-7",
"version": "6.0.0-6-next.2",
"description": "logger for verdaccio 5.x version",
"main": "./build/index.js",
"types": "./build/index.d.ts",
"author": {
"name": "Juan Picado",
"email": "juanpicado19@gmail.com"
},
"repository": {
"type": "https",
"url": "https://github.com/verdaccio/verdaccio"
},
"license": "MIT",
"homepage": "https://verdaccio.org",
"keywords": [
"private",
"package",
"repository",
"registry",
"enterprise",
"modules",
"proxy",
"server",
"verdaccio"
],
"engines": {
"node": ">=12"
},
"scripts": {
"clean": "rimraf ./build",
"test": "echo 1",
"type-check": "tsc --noEmit -p tsconfig.build.json",
"build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
"watch": "pnpm build:js -- --watch",
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/logger-commons": "workspace:6.0.0-6-next.26",
"pino": "7.11.0"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.19"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/verdaccio"
}
}

View File

@@ -0,0 +1,24 @@
import pino from 'pino';
import { prepareSetup } from '@verdaccio/logger-commons';
import { Logger, LoggerFormat, LoggerType } from '@verdaccio/types';
let logger: Logger;
export type LoggerConfigItem = {
type?: LoggerType;
format?: LoggerFormat;
path?: string;
level?: string;
colors?: boolean;
async?: boolean;
};
export function setup(options: LoggerConfigItem) {
if (typeof logger !== 'undefined') {
return logger;
}
logger = prepareSetup(options, pino);
return logger;
}

View File

@@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.base",
"extends": "../../../tsconfig.base",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"

View File

@@ -0,0 +1,16 @@
{
"extends": "../../../tsconfig.reference.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*.ts"],
"references": [
{
"path": "../logger-prettify"
},
{
"path": "../logger-commons"
}
]
}

View File

@@ -0,0 +1,14 @@
{
"extends": "../../../.babelrc",
"presets": [
[
"@babel/env",
{
"targets": {
"node": 12
}
}
],
"@babel/typescript"
]
}

View File

@@ -0,0 +1,7 @@
# @verdaccio/logger-commons
## 6.0.0-6-next.26
### Patch Changes
- @verdaccio/core@6.0.0-6-next.58

View File

@@ -0,0 +1,10 @@
const config = require('../../../jest/config');
module.exports = Object.assign({}, config, {
coverageThreshold: {
global: {
// FIXME: increase to 90
lines: 39,
},
},
});

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/logger",
"version": "6.0.0-6-next.23",
"name": "@verdaccio/logger-commons",
"version": "6.0.0-6-next.26",
"description": "logger",
"main": "./build/index.js",
"types": "./build/index.d.ts",
@@ -38,13 +38,13 @@
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/logger-prettify": "workspace:6.0.0-6-next.8",
"debug": "4.3.4",
"colorette": "2.0.19",
"pino": "8.8.0"
"colorette": "2.0.19"
},
"devDependencies": {
"pino": "8.8.0",
"@verdaccio/types": "workspace:11.0.0-6-next.19"
},
"funding": {

View File

@@ -0,0 +1 @@
export { setup, createLogger, prepareSetup } from './logger';

View File

@@ -1,7 +1,6 @@
// <reference types="node" />
import { isColorSupported } from 'colorette';
import buildDebug from 'debug';
import pino from 'pino';
import { fillInMsgTemplate } from '@verdaccio/logger-prettify';
import { Logger, LoggerConfigItem, LoggerFormat } from '@verdaccio/types';
@@ -33,7 +32,8 @@ export function createLogger(
// eslint-disable-next-line no-undef
// @ts-ignore
destination: NodeJS.WritableStream = pino.destination(1),
format: LoggerFormat = DEFAULT_LOG_FORMAT
format: LoggerFormat = DEFAULT_LOG_FORMAT,
pino
): any {
debug('setup logger');
let pinoConfig = {
@@ -109,7 +109,7 @@ const DEFAULT_LOGGER_CONF: LoggerConfigItem = {
export type LoggerConfig = LoggerConfigItem;
export function prepareSetup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {
export function prepareSetup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF, pino) {
let logger: Logger;
let loggerConfig = options;
if (!loggerConfig?.level) {
@@ -133,7 +133,8 @@ export function prepareSetup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {
{ level: loggerConfig.level, path: loggerConfig.path, colors: loggerConfig.colors },
// @ts-ignore
destination,
loggerConfig.format
loggerConfig.format,
pino
);
return logger;
} else {
@@ -143,7 +144,8 @@ export function prepareSetup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {
{ level: loggerConfig.level, colors: loggerConfig.colors },
// @ts-ignore
pino.destination(1),
loggerConfig.format
loggerConfig.format,
pino
);
return logger;
}
@@ -151,11 +153,11 @@ export function prepareSetup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {
export let logger: Logger;
export function setup(options: LoggerConfigItem) {
export function setup(options: LoggerConfigItem, pino) {
if (typeof logger !== 'undefined') {
return logger;
}
logger = prepareSetup(options);
logger = prepareSetup(options, pino);
return logger;
}

View File

@@ -1,3 +1,4 @@
import pino from 'pino';
import { Writable } from 'stream';
import { createLogger } from '../src';
@@ -13,7 +14,7 @@ describe('logger test', () => {
callback();
},
});
const logger = createLogger({ level: 'http' }, stream, 'json');
const logger = createLogger({ level: 'http' }, stream, 'json', pino);
logger.info('test');
});
});

View File

@@ -1,5 +1,6 @@
import { readFile } from 'fs/promises';
import { join } from 'path';
import pino from 'pino';
import { setTimeout } from 'timers/promises';
import { fileUtils } from '@verdaccio/core';
@@ -27,7 +28,7 @@ describe('logger test', () => {
describe('basic', () => {
test('should include default level', async () => {
const file = await createLogFile();
const logger = prepareSetup({ type: 'file', path: file, colors: false });
const logger = prepareSetup({ type: 'file', path: file, colors: false }, pino);
logger.info({ packageName: 'test' }, `testing @{packageName}`);
// Note: this should not be logged
logger.debug(`this should not be logged`);
@@ -40,7 +41,10 @@ describe('logger test', () => {
test('should include all logging level', async () => {
const file = await createLogFile();
const logger = prepareSetup({ type: 'file', level: 'trace', path: file, colors: false });
const logger = prepareSetup(
{ type: 'file', level: 'trace', path: file, colors: false },
pino
);
logger.info({ packageName: 'test' }, `testing @{packageName}`);
logger.debug(`this should not be logged`);
logger.trace(`this should not be logged`);
@@ -55,13 +59,16 @@ describe('logger test', () => {
describe('json format', () => {
test('should log into a file with json format', async () => {
const file = await createLogFile();
const logger = prepareSetup({
...defaultOptions,
format: 'json',
type: 'file',
path: file,
level: 'info',
});
const logger = prepareSetup(
{
...defaultOptions,
format: 'json',
type: 'file',
path: file,
level: 'info',
},
pino
);
logger.info(
{ packageName: 'test' },
`publishing or updating a new version for @{packageName}`
@@ -79,13 +86,16 @@ describe('logger test', () => {
describe('pretty format', () => {
test('should log into a file with pretty', async () => {
const file = await createLogFile();
const logger = prepareSetup({
format: 'pretty',
type: 'file',
path: file,
level: 'trace',
colors: false,
});
const logger = prepareSetup(
{
format: 'pretty',
type: 'file',
path: file,
level: 'trace',
colors: false,
},
pino
);
logger.info(
{ packageName: 'test' },
`publishing or updating a new version for @{packageName}`
@@ -96,13 +106,16 @@ describe('logger test', () => {
test('should log into a file with pretty-timestamped', async () => {
const file = await createLogFile();
const logger = prepareSetup({
format: 'pretty-timestamped',
type: 'file',
path: file,
level: 'trace',
colors: false,
});
const logger = prepareSetup(
{
format: 'pretty-timestamped',
type: 'file',
path: file,
level: 'trace',
colors: false,
},
pino
);
logger.info(
{ packageName: 'test' },
`publishing or updating a new version for @{packageName}`

View File

@@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.base.json",
"extends": "../../../tsconfig.base",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"

View File

@@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.reference.json",
"extends": "../../../tsconfig.reference.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"

View File

@@ -0,0 +1,14 @@
{
"extends": "../../../.babelrc",
"presets": [
[
"@babel/env",
{
"targets": {
"node": 12
}
}
],
"@babel/typescript"
]
}

View File

@@ -1,4 +1,4 @@
const config = require('../../jest/config');
const config = require('../../../jest/config');
module.exports = Object.assign({}, config, {
coverageThreshold: {

View File

@@ -0,0 +1,9 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*.ts"],
"exclude": ["src/**/*.test.ts"]
}

View File

@@ -0,0 +1,9 @@
{
"extends": "../../../tsconfig.reference",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*.ts"],
"exclude": ["src/**/*.test.ts"]
}

View File

@@ -0,0 +1,3 @@
{
"extends": "../../../.babelrc"
}

View File

@@ -1,5 +1,23 @@
# @verdaccio/logger
## 6.0.0-6-next.26
### Patch Changes
- @verdaccio/logger-commons@6.0.0-6-next.26
## 6.0.0-6-next.25
### Patch Changes
- @verdaccio/core@6.0.0-6-next.57
## 6.0.0-6-next.24
### Patch Changes
- @verdaccio/core@6.0.0-6-next.56
## 6.0.0-6-next.23
### Patch Changes

View File

@@ -0,0 +1,75 @@
# @verdaccio/logger
[![backers](https://opencollective.com/verdaccio/tiers/backer/badge.svg?label=Backer&color=brightgreen)](https://opencollective.com/verdaccio)
[![stackshare](https://img.shields.io/badge/Follow%20on-StackShare-blue.svg?logo=stackshare&style=flat)](https://stackshare.io/verdaccio)
[![MIT](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/verdaccio/localized.svg)](https://crowdin.com/project/verdaccio)
[![TODOs](https://badgen.net/https/api.tickgit.com/badgen/github.com/verdaccio/verdaccio)](https://www.tickgit.com/browse?repo=github.com/verdaccio/verdaccio)
[![Twitter followers](https://img.shields.io/twitter/follow/verdaccio_npm.svg?style=social&label=Follow)](https://twitter.com/verdaccio_npm)
[![Github](https://img.shields.io/github/stars/verdaccio/verdaccio.svg?style=social&label=Stars)](https://github.com/verdaccio/verdaccio/stargazers)
## Donations
Verdaccio is run by **volunteers**; nobody is working full-time on it. If you find this project to be useful and would like to support its development, consider making a donation - **your logo might end up in this readme.** 😉
**[Donate](https://opencollective.com/verdaccio)** 💵👍🏻 starting from _\$1/month_ or just one single contribution.
## Report a vulnerability
If you want to report a security vulnerability, please follow the steps which we have defined for you in our [security policy](https://github.com/verdaccio/verdaccio/security/policy).
## Open Collective Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/verdaccio#sponsor)]
[![sponsor](https://opencollective.com/verdaccio/sponsor/0/avatar.svg)](https://opencollective.com/verdaccio/sponsor/0/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/1/avatar.svg)](https://opencollective.com/verdaccio/sponsor/1/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/2/avatar.svg)](https://opencollective.com/verdaccio/sponsor/2/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/3/avatar.svg)](https://opencollective.com/verdaccio/sponsor/3/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/4/avatar.svg)](https://opencollective.com/verdaccio/sponsor/4/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/5/avatar.svg)](https://opencollective.com/verdaccio/sponsor/5/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/6/avatar.svg)](https://opencollective.com/verdaccio/sponsor/6/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/7/avatar.svg)](https://opencollective.com/verdaccio/sponsor/7/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/8/avatar.svg)](https://opencollective.com/verdaccio/sponsor/8/website)
[![sponsor](https://opencollective.com/verdaccio/sponsor/9/avatar.svg)](https://opencollective.com/verdaccio/sponsor/9/website)
## Open Collective Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/verdaccio#backer)]
[![backers](https://opencollective.com/verdaccio/backers.svg?width=890)](https://opencollective.com/verdaccio#backers)
## Special Thanks
Thanks to the following companies to help us to achieve our goals providing free open source licenses.
[![jetbrain](assets/thanks/jetbrains/logo.png)](https://www.jetbrains.com/)
[![crowdin](assets/thanks/crowdin/logo.png)](https://crowdin.com/)
[![balsamiq](assets/thanks/balsamiq/logo.jpg)](https://balsamiq.com/)
## Contributors
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
[![contributors](https://opencollective.com/verdaccio/contributors.svg?width=890&button=true)](../../graphs/contributors)
### FAQ / Contact / Troubleshoot
If you have any issue you can try the following options, do no desist to ask or check our issues database, perhaps someone has asked already what you are looking for.
- [Blog](https://verdaccio.org/blog/)
- [Donations](https://opencollective.com/verdaccio)
- [Reporting an issue](https://github.com/verdaccio/verdaccio/blob/master/CONTRIBUTING.md#reporting-a-bug)
- [Running discussions](https://github.com/verdaccio/verdaccio/issues?q=is%3Aissue+is%3Aopen+label%3Adiscuss)
- [Chat](http://chat.verdaccio.org/)
- [Logos](https://verdaccio.org/docs/en/logo)
- [Docker Examples](https://github.com/verdaccio/docker-examples)
- [FAQ](https://github.com/verdaccio/verdaccio/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20)
### License
Verdaccio is [MIT licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)
The Verdaccio documentation and logos (excluding /thanks, e.g., .md, .png, .sketch) files within the /assets folder) is
[Creative Commons licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE-docs).

View File

@@ -0,0 +1,10 @@
const config = require('../../../jest/config');
module.exports = Object.assign({}, config, {
coverageThreshold: {
global: {
// FIXME: increase to 90
lines: 39,
},
},
});

View File

@@ -0,0 +1,51 @@
{
"name": "@verdaccio/logger",
"version": "6.0.0-6-next.26",
"description": "logger",
"main": "./build/index.js",
"types": "./build/index.d.ts",
"author": {
"name": "Juan Picado",
"email": "juanpicado19@gmail.com"
},
"repository": {
"type": "https",
"url": "https://github.com/verdaccio/verdaccio"
},
"license": "MIT",
"homepage": "https://verdaccio.org",
"keywords": [
"private",
"package",
"repository",
"registry",
"enterprise",
"modules",
"proxy",
"server",
"verdaccio"
],
"engines": {
"node": ">=12"
},
"scripts": {
"clean": "rimraf ./build",
"test": "echo 1",
"type-check": "tsc --noEmit -p tsconfig.build.json",
"build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
"watch": "pnpm build:js -- --watch",
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/logger-commons": "workspace:6.0.0-6-next.26",
"pino": "8.8.0"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.19"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/verdaccio"
}
}

View File

@@ -0,0 +1,15 @@
import pino from 'pino';
import { prepareSetup } from '@verdaccio/logger-commons';
import { Logger, LoggerConfigItem } from '@verdaccio/types';
export function setup(options: LoggerConfigItem) {
if (typeof logger !== 'undefined') {
return logger;
}
logger = prepareSetup(options, pino);
return logger;
}
export let logger: Logger;

View File

@@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.reference",
"extends": "../../../tsconfig.base",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"

View File

@@ -0,0 +1,16 @@
{
"extends": "../../../tsconfig.reference.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build"
},
"include": ["src/**/*.ts"],
"references": [
{
"path": "../logger-prettify"
},
{
"path": "../logger-commons"
}
]
}

View File

@@ -1 +0,0 @@
export { setup, createLogger, logger, prepareSetup } from './logger';

View File

@@ -1,3 +1,14 @@
{
"extends": "../../.babelrc"
"extends": "../../.babelrc",
"presets": [
[
"@babel/env",
{
"targets": {
"node": 12
}
}
],
"@babel/typescript"
]
}

View File

@@ -1,5 +1,34 @@
# @verdaccio/middleware
## 6.0.0-6-next.37
### Patch Changes
- fa274ee4: chore: bumb up package
- @verdaccio/core@6.0.0-6-next.58
- @verdaccio/utils@6.0.0-6-next.26
## 6.0.0-6-next.36
### Patch Changes
- 9943e2b1: fix: extract logger from middleware
- @verdaccio/core@6.0.0-6-next.57
- @verdaccio/utils@6.0.0-6-next.25
## 6.0.0-6-next.35
### Minor Changes
- a1986e09: feat: expose middleware utils
### Patch Changes
- Updated dependencies [a1986e09]
- @verdaccio/utils@6.0.0-6-next.24
- @verdaccio/core@6.0.0-6-next.56
- @verdaccio/logger@6.0.0-6-next.24
## 6.0.0-6-next.34
### Patch Changes

View File

@@ -1,3 +1,12 @@
const config = require('../../jest/config');
module.exports = Object.assign({}, config, {});
module.exports = Object.assign({}, config, {
coverageThreshold: {
global: {
lines: 67,
functions: 70,
branches: 55,
statements: 67,
},
},
});

View File

@@ -1,7 +1,7 @@
{
"name": "@verdaccio/middleware",
"version": "6.0.0-6-next.34",
"description": "loaders logic",
"version": "6.0.0-6-next.37",
"description": "express middleware utils",
"main": "./build/index.js",
"types": "build/index.d.ts",
"author": {
@@ -26,8 +26,7 @@
"verdaccio"
],
"engines": {
"node": ">=14",
"npm": ">=6"
"node": ">=12"
},
"scripts": {
"clean": "rimraf ./build",
@@ -35,19 +34,23 @@
"build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
"watch": "pnpm build:js -- --watch",
"test": "jest",
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.58",
"@verdaccio/utils": "workspace:6.0.0-6-next.26",
"debug": "4.3.4",
"body-parser": "1.20.1",
"@verdaccio/auth": "workspace:6.0.0-6-next.34",
"@verdaccio/core": "workspace:6.0.0-6-next.55",
"@verdaccio/logger": "workspace:6.0.0-6-next.23",
"@verdaccio/utils": "workspace:6.0.0-6-next.23",
"lodash": "4.17.21"
"lodash": "4.17.21",
"mime": "2.6.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/verdaccio"
},
"devDependencies": {
"@verdaccio/logger": "workspace:6.0.0-6-next.26",
"body-parser": "1.20.1",
"supertest": "6.3.3"
}
}

View File

@@ -1 +1,17 @@
export * from './middleware';
export { match } from './middlewares/match';
export { setSecurityWebHeaders } from './middlewares/security-headers';
export { validateName, validatePackage } from './middlewares/validation';
export { media } from './middlewares/media';
export { encodeScopePackage } from './middlewares/encode-pkg';
export { expectJson } from './middlewares/json';
export { antiLoop } from './middlewares/antiLoop';
export { final } from './middlewares/final';
export { allow } from './middlewares/allow';
export { errorReportingMiddleware, handleError } from './middlewares/error';
export {
log,
LOG_STATUS_MESSAGE,
LOG_VERDACCIO_BYTES,
LOG_VERDACCIO_ERROR,
} from './middlewares/log';
export * from './types';

View File

@@ -1,413 +0,0 @@
import buildDebug from 'debug';
import { NextFunction, Request, Response } from 'express';
import { HttpError } from 'http-errors';
import _ from 'lodash';
import { Auth } from '@verdaccio/auth';
import {
API_ERROR,
HEADERS,
HEADER_TYPE,
HTTP_STATUS,
TOKEN_BASIC,
TOKEN_BEARER,
VerdaccioError,
errorUtils,
} from '@verdaccio/core';
import { logger } from '@verdaccio/logger';
import { Config, Logger, Package, RemoteUser } from '@verdaccio/types';
import {
isObject,
stringToMD5,
validateName as utilValidateName,
validatePackage as utilValidatePackage,
} from '@verdaccio/utils';
import { getVersionFromTarball } from './middleware-utils';
export type $RequestExtend = Request & { remote_user?: RemoteUser; log: Logger };
export type $ResponseExtend = Response & { cookies?: any };
export type $NextFunctionVer = NextFunction & any;
const debug = buildDebug('verdaccio:middleware');
export function match(regexp: RegExp): any {
return function (
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer,
value: string
): void {
if (regexp.exec(value)) {
next();
} else {
next('route');
}
};
}
// TODO: remove, was relocated to web package
// @ts-deprecated
export function setSecurityWebHeaders(
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer
): void {
// disable loading in frames (clickjacking, etc.)
res.header(HEADERS.FRAMES_OPTIONS, 'deny');
// avoid stablish connections outside of domain
res.header(HEADERS.CSP, "connect-src 'self'");
// https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff
res.header(HEADERS.CTO, 'nosniff');
// https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection
res.header(HEADERS.XSS, '1; mode=block');
next();
}
export function validateName(
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer,
value: string,
name: string
): void {
if (value === '-') {
// special case in couchdb usually
next('route');
} else if (utilValidateName(value)) {
next();
} else {
next(errorUtils.getForbidden('invalid ' + name));
}
}
export function validatePackage(
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer,
value: string,
name: string
): void {
if (value === '-') {
// special case in couchdb usually
next('route');
} else if (utilValidatePackage(value)) {
next();
} else {
next(errorUtils.getForbidden('invalid ' + name));
}
}
export function media(expect: string | null): any {
return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
if (req.headers[HEADER_TYPE.CONTENT_TYPE] !== expect) {
next(
errorUtils.getCode(
HTTP_STATUS.UNSUPPORTED_MEDIA,
'wrong content-type, expect: ' + expect + ', got: ' + req.get[HEADER_TYPE.CONTENT_TYPE]
)
);
} else {
next();
}
};
}
export function encodeScopePackage(
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer
): void {
if (req.url.indexOf('@') !== -1) {
// e.g.: /@org/pkg/1.2.3 -> /@org%2Fpkg/1.2.3, /@org%2Fpkg/1.2.3 -> /@org%2Fpkg/1.2.3
req.url = req.url.replace(/^(\/@[^\/%]+)\/(?!$)/, '$1%2F');
}
next();
}
export function expectJson(
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer
): void {
if (!isObject(req.body)) {
return next(errorUtils.getBadRequest("can't parse incoming json"));
}
next();
}
export function antiLoop(config: Config): Function {
return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
if (req?.headers?.via != null) {
const arr = req.headers.via.split(',');
for (let i = 0; i < arr.length; i++) {
const m = arr[i].match(/\s*(\S+)\s+(\S+)/);
if (m && m[2] === config.server_id) {
return next(errorUtils.getCode(HTTP_STATUS.LOOP_DETECTED, 'loop detected'));
}
}
}
next();
};
}
export function allow(auth: Auth): Function {
return function (action: string): Function {
return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
req.pause();
const packageName = req.params.scope
? `@${req.params.scope}/${req.params.package}`
: req.params.package;
const packageVersion = req.params.filename
? getVersionFromTarball(req.params.filename)
: undefined;
const remote = req.remote_user;
logger.trace(
{ action, user: remote?.name },
`[middleware/allow][@{action}] allow for @{user}`
);
auth['allow_' + action](
{ packageName, packageVersion },
remote,
function (error, allowed): void {
req.resume();
if (error) {
next(error);
} else if (allowed) {
next();
} else {
// last plugin (that's our built-in one) returns either
// cb(err) or cb(null, true), so this should never happen
throw errorUtils.getInternalError(API_ERROR.PLUGIN_ERROR);
}
}
);
};
};
}
export interface MiddlewareError {
error: string;
}
export type FinalBody = Package | MiddlewareError | string;
export function final(
body: FinalBody,
req: $RequestExtend,
res: $ResponseExtend,
// if we remove `next` breaks test
// eslint-disable-next-line @typescript-eslint/no-unused-vars
next: $NextFunctionVer
): void {
if (res.statusCode === HTTP_STATUS.UNAUTHORIZED && !res.getHeader(HEADERS.WWW_AUTH)) {
// they say it's required for 401, so...
res.header(HEADERS.WWW_AUTH, `${TOKEN_BASIC}, ${TOKEN_BEARER}`);
}
try {
if (_.isString(body) || _.isObject(body)) {
if (!res.getHeader(HEADERS.CONTENT_TYPE)) {
res.header(HEADERS.CONTENT_TYPE, HEADERS.JSON);
}
if (typeof body === 'object' && _.isNil(body) === false) {
if (typeof (body as MiddlewareError).error === 'string') {
res.locals._verdaccio_error = (body as MiddlewareError).error;
// res._verdaccio_error = (body as MiddlewareError).error;
}
body = JSON.stringify(body, undefined, ' ') + '\n';
}
// don't send etags with errors
if (
!res.statusCode ||
(res.statusCode >= HTTP_STATUS.OK && res.statusCode < HTTP_STATUS.MULTIPLE_CHOICES)
) {
res.header(HEADERS.ETAG, '"' + stringToMD5(body as string) + '"');
}
} else {
// send(null), send(204), etc.
}
} catch (err: any) {
// if verdaccio sends headers first, and then calls res.send()
// as an error handler, we can't report error properly,
// and should just close socket
if (err.message.match(/set headers after they are sent/)) {
if (_.isNil(res.socket) === false) {
res.socket?.destroy();
}
return;
}
throw err;
}
res.send(body);
}
// FIXME: deprecated, moved to @verdaccio/dev-commons
export const LOG_STATUS_MESSAGE =
"@{status}, user: @{user}(@{remoteIP}), req: '@{request.method} @{request.url}'";
export const LOG_VERDACCIO_ERROR = `${LOG_STATUS_MESSAGE}, error: @{!error}`;
export const LOG_VERDACCIO_BYTES = `${LOG_STATUS_MESSAGE}, bytes: @{bytes.in}/@{bytes.out}`;
export function log(req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
// logger
req.log = logger.child({ sub: 'in' });
const _auth = req.headers.authorization;
if (_.isNil(_auth) === false) {
req.headers.authorization = '<Classified>';
}
const _cookie = req.get('cookie');
if (_.isNil(_cookie) === false) {
req.headers.cookie = '<Classified>';
}
req.url = req.originalUrl;
req.log.info({ req: req, ip: req.ip }, "@{ip} requested '@{req.method} @{req.url}'");
req.originalUrl = req.url;
if (_.isNil(_auth) === false) {
req.headers.authorization = _auth;
}
if (_.isNil(_cookie) === false) {
req.headers.cookie = _cookie;
}
let bytesin = 0;
req.on('data', function (chunk): void {
bytesin += chunk.length;
});
let bytesout = 0;
const _write = res.write;
// FIXME: res.write should return boolean
// @ts-ignore
res.write = function (buf): boolean {
bytesout += buf.length;
/* eslint prefer-rest-params: "off" */
// @ts-ignore
_write.apply(res, arguments);
};
const log = function (): void {
const forwardedFor = req.get('x-forwarded-for');
const remoteAddress = req.connection.remoteAddress;
const remoteIP = forwardedFor ? `${forwardedFor} via ${remoteAddress}` : remoteAddress;
let message;
if (res.locals._verdaccio_error) {
message = LOG_VERDACCIO_ERROR;
} else {
message = LOG_VERDACCIO_BYTES;
}
req.url = req.originalUrl;
req.log.http(
{
request: {
method: req.method,
url: req.url,
},
user: (req.remote_user && req.remote_user.name) || null,
remoteIP,
status: res.statusCode,
error: res.locals._verdaccio_error,
bytes: {
in: bytesin,
out: bytesout,
},
},
message
);
req.originalUrl = req.url;
};
req.on('close', function (): void {
log();
});
const _end = res.end;
// @ts-ignore
res.end = function (buf): void {
if (buf) {
bytesout += buf.length;
}
/* eslint prefer-rest-params: "off" */
// @ts-ignore
_end.apply(res, arguments);
log();
};
next();
}
export function handleError(
err: HttpError,
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer
) {
debug('error handler init');
if (_.isError(err)) {
debug('is native error');
if (err.code === 'ECONNABORT' && res.statusCode === HTTP_STATUS.NOT_MODIFIED) {
return next();
}
if (_.isFunction(res.locals.report_error) === false) {
debug('is locals error report ref');
// in case of very early error this middleware may not be loaded before error is generated
// fixing that
errorReportingMiddleware(req, res, _.noop);
}
debug('set locals error report ref');
res.locals.report_error(err);
} else {
// Fall to Middleware.final
debug('no error to report, jump next layer');
return next(err);
}
}
// Middleware
export function errorReportingMiddleware(
req: $RequestExtend,
res: $ResponseExtend,
next: $NextFunctionVer
): void {
debug('error report middleware');
res.locals.report_error =
res.locals.report_error ||
function (err: VerdaccioError): void {
if (err.status && err.status >= HTTP_STATUS.BAD_REQUEST && err.status < 600) {
debug('is error > 409 %o', err?.status);
if (_.isNil(res.headersSent) === false) {
debug('send status %o', err?.status);
res.status(err.status);
debug('next layer %o', err?.message);
next({ error: err.message || API_ERROR.UNKNOWN_ERROR });
}
} else {
debug('is error < 409 %o', err?.status);
logger.error({ err: err }, 'unexpected error: @{!err.message}\n@{err.stack}');
if (!res.status || !res.send) {
// TODO: decide which debug keep
logger.error('this is an error in express.js, please report this');
debug('this is an error in express.js, please report this, destroy response %o', err);
res.destroy();
} else if (!res.headersSent) {
debug('report internal error %o', err);
res.status(HTTP_STATUS.INTERNAL_ERROR);
next({ error: API_ERROR.INTERNAL_SERVER_ERROR });
} else {
// socket should be already closed
debug('this should not happen, otherwise report %o', err);
}
}
};
debug('error report middleware next()');
next();
}

View File

@@ -0,0 +1,52 @@
import { API_ERROR, errorUtils } from '@verdaccio/core';
import { getVersionFromTarball } from '@verdaccio/utils';
import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';
export function allow<T>(
auth: T,
options = {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
beforeAll: (_a: any, _b: any) => {},
// eslint-disable-next-line @typescript-eslint/no-unused-vars
afterAll: (_a: any, _b: any) => {},
}
): Function {
const { beforeAll, afterAll } = options;
return function (action: string): Function {
return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
req.pause();
const packageName = req.params.scope
? `@${req.params.scope}/${req.params.package}`
: req.params.package;
const packageVersion = req.params.filename
? getVersionFromTarball(req.params.filename)
: undefined;
const remote = req.remote_user;
beforeAll?.(
{ action, user: remote?.name },
`[middleware/allow][@{action}] allow for @{user}`
);
auth['allow_' + action](
{ packageName, packageVersion },
remote,
function (error, allowed): void {
req.resume();
if (error) {
next(error);
} else if (allowed) {
afterAll?.(
{ action, user: remote?.name },
`[middleware/allow][@{action}] allowed for @{user}`
);
next();
} else {
// last plugin (that's our built-in one) returns either
// cb(err) or cb(null, true), so this should never happen
throw errorUtils.getInternalError(API_ERROR.PLUGIN_ERROR);
}
}
);
};
};
}

View File

@@ -0,0 +1,30 @@
import { HTTP_STATUS, errorUtils } from '@verdaccio/core';
import { Config } from '@verdaccio/types';
import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';
/**
* A middleware that avoid a registry points itself as proxy and avoid create infinite loops.
* @param config
* @returns
*/
export function antiLoop(config: Config): Function {
return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
if (req?.headers?.via != null) {
const arr = req.get('via')?.split(',');
if (Array.isArray(arr)) {
for (let i = 0; i < arr.length; i++) {
// the "via" header must contains an specific headers, this has to be on sync
// with the proxy request
// match eg: Server 1 or Server 2
// TODO: improve this RegEX
const m = arr[i].trim().match(/\s*(\S+)\s+(\S+)/);
if (m && m[2] === config.server_id) {
return next(errorUtils.getCode(HTTP_STATUS.LOOP_DETECTED, 'loop detected'));
}
}
}
}
next();
};
}

Some files were not shown because too many files have changed in this diff Show More