Compare commits

...

10 Commits

Author SHA1 Message Date
github-actions[bot]
b970102bfc chore: update versions (6-next) (#2456)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2021-10-15 23:13:06 +02:00
Juan Picado
b702ea3631 abort search request support for proxy (#2474)
* update undici

* abort search request support for proxy
2021-10-15 23:00:30 +02:00
Juan Picado
794af76c50 Remove Node 12 support (v6.x) (#2473) 2021-10-15 18:49:47 +02:00
Oscar Dominguez
6218d7723d refactor(ci): fix typo in filename (#2471) 2021-10-14 08:14:05 +02:00
Leonardo Metzger
b261741ef6 refactor: Remove some FIXME annotations (#2465)
* refactor: Remove the @ts-ignore in middleware-utils

* refactor: Remove __mocks__ imports in local-storage package

Co-authored-by: Juan Picado <juanpicado19@gmail.com>
2021-10-03 14:21:01 +02:00
Juan Picado
61add32bff ci: avoid crowdin step is mandatory (#2466)
* avoid crowdin step is mandatory

* make it fail

* split step

* split step

* try again

* try again

* restore key

* add comment

* improve wording

* test something

* test something

* restore key
2021-10-03 14:04:24 +02:00
Andreas Opferkuch
b753b4010f website: Improve docs link discoverability (#2462)
... by flipping the underline behavior within articles
2021-10-01 17:51:04 +02:00
Juan Picado
c168b4e47a chore: update benchmark version 2021-09-26 10:39:45 +02:00
Juan Picado
3a7f81ab0c chore: delete changelog
now is located in verdaccio package
2021-09-26 08:21:44 +02:00
Juan Picado
154b2ecd34 refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplication (#2455)
* migrate api package

* migrate auth

* migrate config

* refactor: remove @verdaccio/commons-api in favor @verdaccio/core

* fix lint

* relocate pkg

* relocate pkg

* fix tsconfig
2021-09-26 00:08:00 +02:00
239 changed files with 1707 additions and 3346 deletions

View File

@@ -7,7 +7,7 @@
"version": 3, "proposals": true
},
"targets": {
"node": 12
"node": 14
}
}
],

View File

@@ -0,0 +1,39 @@
---
'@verdaccio/api': major
'@verdaccio/auth': major
'@verdaccio/cli': major
'@verdaccio/config': major
'@verdaccio/core': major
'@verdaccio/file-locking': major
'verdaccio-htpasswd': major
'@verdaccio/readme': major
'@verdaccio/fastify-migration': major
'@verdaccio/streams': major
'@verdaccio/tarball': major
'@verdaccio/types': major
'@verdaccio/url': major
'@verdaccio/hooks': major
'@verdaccio/loaders': major
'@verdaccio/logger': major
'@verdaccio/middleware': major
'@verdaccio/mock': major
'@verdaccio/node-api': major
'@verdaccio/active-directory': major
'verdaccio-audit': major
'verdaccio-auth-memory': major
'verdaccio-aws-s3-storage': major
'verdaccio-google-cloud': major
'verdaccio-memory': major
'@verdaccio/ui-theme': major
'@verdaccio/server': major
'@verdaccio/cli-standalone': major
'@verdaccio/store': major
'@verdaccio/dev-types': major
'@verdaccio/utils': major
'verdaccio': major
'@verdaccio/web': major
---
Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12

View File

@@ -0,0 +1,10 @@
---
'@verdaccio/api': minor
'@verdaccio/fastify-migration': minor
'@verdaccio/hooks': minor
'@verdaccio/logger-prettify': minor
'@verdaccio/proxy': minor
'@verdaccio/store': minor
---
abort search request support for proxy

View File

@@ -0,0 +1,35 @@
---
'@verdaccio/api': minor
'@verdaccio/auth': minor
'@verdaccio/cli': minor
'@verdaccio/config': minor
'@verdaccio/core': minor
'verdaccio-htpasswd': minor
'@verdaccio/local-storage': minor
'@verdaccio/fastify-migration': minor
'@verdaccio/tarball': minor
'@verdaccio/types': minor
'@verdaccio/url': minor
'@verdaccio/hooks': minor
'@verdaccio/loaders': minor
'@verdaccio/logger': minor
'@verdaccio/middleware': minor
'@verdaccio/mock': minor
'@verdaccio/node-api': minor
'@verdaccio/active-directory': minor
'verdaccio-auth-memory': minor
'verdaccio-aws-s3-storage': minor
'verdaccio-google-cloud': minor
'verdaccio-memory': minor
'@verdaccio/ui-theme': minor
'@verdaccio/proxy': minor
'@verdaccio/server': minor
'@verdaccio/cli-standalone': minor
'@verdaccio/store': minor
'@verdaccio/utils': minor
'verdaccio': minor
'@verdaccio/web': minor
'@verdaccio/e2e-ui': minor
---
refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications

View File

@@ -6,7 +6,6 @@
"@verdaccio/auth": "6.0.0-alpha.0",
"@verdaccio/cli": "6.0.0-alpha.0",
"@verdaccio/config": "6.0.0-alpha.0",
"@verdaccio/commons-api": "11.0.0-alpha.0",
"@verdaccio/file-locking": "11.0.0-alpha.0",
"verdaccio-htpasswd": "11.0.0-alpha.0",
"@verdaccio/local-storage": "11.0.0-alpha.0",
@@ -43,16 +42,19 @@
"@verdaccio/eslint-config": "1.0.0",
"@verdaccio/benchmark": "1.0.0",
"@verdaccio/website": "5.1.3",
"@verdaccio/core": "6.0.0-next.0"
"@verdaccio/core": "6.0.0-next.0",
"@verdaccio/helper": "1.0.0"
},
"changesets": [
"afraid-mice-obey",
"big-lobsters-sin",
"calm-pants-impress",
"dry-planes-tap",
"eleven-spoons-matter",
"few-cooks-destroy",
"few-mangos-grow",
"fifty-jars-rest",
"fuzzy-onions-draw",
"gentle-parrots-lay",
"gentle-trains-switch",
"gold-vans-tease",
@@ -67,6 +69,7 @@
"modern-spies-tell",
"neat-toes-report",
"olive-candles-speak",
"perfect-candles-clap",
"perfect-emus-clean",
"perfect-kangaroos-agree",
"plenty-news-remember",

View File

@@ -58,7 +58,7 @@ jobs:
- 3.13.1
- 4.12.2
- 5.1.3
- 6.0.0-6-next.23
- 6.0.0-6-next.24
name: Benchmark autocannon
runs-on: ubuntu-latest
steps:
@@ -119,7 +119,7 @@ jobs:
- 3.13.1
- 4.12.2
- 5.1.3
- 6.0.0-6-next.23
- 6.0.0-6-next.24
name: Benchmark hyperfine
runs-on: ubuntu-latest
steps:

View File

@@ -46,7 +46,12 @@ jobs:
run: pnpm install
env:
NODE_AUTH_TOKEN: ${{ secrets.REGISTRY_AUTH_TOKEN }}
- name: crowdin download
env:
CROWDIN_VERDACCIO_PROJECT_ID: ${{ secrets.CROWDIN_VERDACCIO_PROJECT_ID }}
CROWDIN_VERDACCIO_API_KEY: ${{ secrets.CROWDIN_VERDACCIO_API_KEY }}
CONTEXT: production
run: pnpm crowdin:download
- name: build
run: pnpm build

View File

@@ -107,7 +107,10 @@ jobs:
CROWDIN_VERDACCIO_PROJECT_ID: ${{ secrets.CROWDIN_VERDACCIO_PROJECT_ID }}
CROWDIN_VERDACCIO_API_KEY: ${{ secrets.CROWDIN_VERDACCIO_API_KEY }}
CONTEXT: production
run: pnpm crowdin:download
run: pnpm crowdin:download
## this step is optional, translations are not mandatory for PR
## secrets keys are not available on forks, the failure here is guaranteed
continue-on-error: true
- name: build
run: pnpm build
- name: tar packages

View File

@@ -2,7 +2,7 @@
{
"files.exclude": {
"**/.nyc_output": true,
"**/build": true,
"**/build": false,
"**/coverage": true,
".idea": true,
"storage_default_storage": true,

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
FROM --platform=${BUILDPLATFORM:-linux/amd64} node:14.17.6-alpine as builder
FROM --platform=${BUILDPLATFORM:-linux/amd64} node:14.18.1-alpine as builder
ENV NODE_ENV=development \
VERDACCIO_BUILD_REGISTRY=https://registry.verdaccio.org
@@ -19,7 +19,7 @@ RUN npm -g i pnpm@6.10.3 && \
# FIXME: need to remove devDependencies from the build
# RUN pnpm install --prod --ignore-scripts
FROM node:14.17.6-alpine
FROM node:14.18.1-alpine
LABEL maintainer="https://github.com/verdaccio/verdaccio"
ENV VERDACCIO_APPDIR=/opt/verdaccio \

View File

@@ -29,6 +29,8 @@ Google Cloud Storage** or create your own plugin.
## Install
> Latest Node.js v14
Install with npm:
```bash

View File

@@ -74,3 +74,7 @@ Introduce environment variables for legacy tokens.
- `VERDACCIO_LEGACY_ALGORITHM`: Allows to define the specific algorithm for the token signature which by default is `aes-256-ctr`
- `VERDACCIO_LEGACY_ENCRYPTION_KEY`: By default, the token stores in the database, but using this variable allows to get it from memory
#### @verdaccio/commons-api migration
The package has been removed in favor of `@verdaccio/core` with a similar API, check API documentation for further details.

View File

@@ -1,5 +1,33 @@
# @verdaccio/api
## 6.0.0-6-next.16
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- b702ea36: abort search request support for proxy
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [b702ea36]
- Updated dependencies [154b2ecd]
- @verdaccio/auth@6.0.0-6-next.13
- @verdaccio/config@6.0.0-6-next.9
- @verdaccio/core@6.0.0-6-next.2
- @verdaccio/tarball@11.0.0-6-next.8
- @verdaccio/hooks@6.0.0-6-next.8
- @verdaccio/logger@6.0.0-6-next.6
- @verdaccio/middleware@6.0.0-6-next.13
- @verdaccio/store@6.0.0-6-next.14
- @verdaccio/utils@6.0.0-6-next.7
## 6.0.0-6-next.15
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/api",
"version": "6.0.0-6-next.15",
"version": "6.0.0-6-next.16",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -25,7 +25,7 @@
"verdaccio"
],
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"scripts": {
@@ -39,16 +39,16 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/auth": "workspace:6.0.0-6-next.12",
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/config": "workspace:6.0.0-6-next.8",
"@verdaccio/core": "workspace:6.0.0-6-next.1",
"@verdaccio/hooks": "workspace:6.0.0-6-next.7",
"@verdaccio/logger": "workspace:6.0.0-6-next.5",
"@verdaccio/middleware": "workspace:6.0.0-6-next.12",
"@verdaccio/store": "workspace:6.0.0-6-next.13",
"@verdaccio/tarball": "workspace:11.0.0-6-next.7",
"@verdaccio/utils": "workspace:6.0.0-6-next.6",
"@verdaccio/auth": "workspace:6.0.0-6-next.13",
"@verdaccio/config": "workspace:6.0.0-6-next.9",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"@verdaccio/hooks": "workspace:6.0.0-6-next.8",
"@verdaccio/logger": "workspace:6.0.0-6-next.6",
"@verdaccio/middleware": "workspace:6.0.0-6-next.13",
"@verdaccio/store": "workspace:6.0.0-6-next.14",
"@verdaccio/tarball": "workspace:11.0.0-6-next.8",
"@verdaccio/utils": "workspace:6.0.0-6-next.7",
"abortcontroller-polyfill": "1.7.3",
"cookies": "0.8.0",
"debug": "4.3.2",
"express": "4.17.1",
@@ -58,8 +58,9 @@
},
"devDependencies": {
"@types/node": "16.9.1",
"@verdaccio/server": "workspace:6.0.0-6-next.20",
"@verdaccio/types": "workspace:11.0.0-6-next.8",
"@verdaccio/server": "workspace:6.0.0-6-next.21",
"@verdaccio/types": "workspace:11.0.0-6-next.9",
"@verdaccio/helper": "1.0.0",
"body-parser": "1.19.0",
"lodash": "4.17.21",
"supertest": "6.1.6"

View File

@@ -3,7 +3,7 @@ import _ from 'lodash';
import { Router } from 'express';
import { media, allow } from '@verdaccio/middleware';
import { API_MESSAGE, HTTP_STATUS, DIST_TAGS, VerdaccioError } from '@verdaccio/commons-api';
import { constants, VerdaccioError } from '@verdaccio/core';
import { Package } from '@verdaccio/types';
import { Storage } from '@verdaccio/store';
import { IAuth } from '@verdaccio/auth';
@@ -26,8 +26,8 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
if (err) {
return next(err);
}
res.status(HTTP_STATUS.CREATED);
return next({ ok: API_MESSAGE.TAG_ADDED });
res.status(constants.HTTP_STATUS.CREATED);
return next({ ok: constants.API_MESSAGE.TAG_ADDED });
});
};
@@ -58,9 +58,9 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
if (err) {
return next(err);
}
res.status(HTTP_STATUS.CREATED);
res.status(constants.HTTP_STATUS.CREATED);
return next({
ok: API_MESSAGE.TAG_REMOVED,
ok: constants.API_MESSAGE.TAG_REMOVED,
});
});
}
@@ -79,7 +79,7 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
return next(err);
}
next(info[DIST_TAGS]);
next(info[constants.DIST_TAGS]);
},
});
}
@@ -96,9 +96,9 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
if (err) {
return next(err);
}
res.status(HTTP_STATUS.CREATED);
res.status(constants.HTTP_STATUS.CREATED);
return next({
ok: API_MESSAGE.TAG_UPDATED,
ok: constants.API_MESSAGE.TAG_UPDATED,
});
}
);

View File

@@ -10,6 +10,7 @@ import { IAuth } from '@verdaccio/auth';
import { Storage } from '@verdaccio/store';
import { Config } from '@verdaccio/types';
import bodyParser from 'body-parser';
import semver from 'semver';
import whoami from './whoami';
import ping from './ping';
@@ -23,6 +24,10 @@ import profile from './v1/profile';
import token from './v1/token';
import v1Search from './v1/search';
if (semver.lte(process.version, 'v15.0.0')) {
global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;
}
export default function (config: Config, auth: IAuth, storage: Storage): Router {
/* eslint new-cap:off */
const app = express.Router();

View File

@@ -3,8 +3,8 @@ import { Router } from 'express';
import buildDebug from 'debug';
import { allow } from '@verdaccio/middleware';
import { getVersion, ErrorCode } from '@verdaccio/utils';
import { HEADERS, DIST_TAGS, API_ERROR } from '@verdaccio/commons-api';
import { getVersion } from '@verdaccio/utils';
import { HEADERS, DIST_TAGS, API_ERROR, errorUtils } from '@verdaccio/core';
import { Config, Package } from '@verdaccio/types';
import { IAuth } from '@verdaccio/auth';
import { Storage } from '@verdaccio/store';
@@ -80,7 +80,7 @@ export default function (route: Router, auth: IAuth, storage: Storage, config: C
}
debug('package version not found %o', queryVersion);
return next(ErrorCode.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`));
return next(errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`));
};
debug('get package name %o', name);

View File

@@ -4,8 +4,15 @@ import mime from 'mime';
import { Router } from 'express';
import buildDebug from 'debug';
import { API_MESSAGE, HEADERS, DIST_TAGS, API_ERROR, HTTP_STATUS } from '@verdaccio/commons-api';
import { validateMetadata, isObject, ErrorCode, hasDiffOneKey } from '@verdaccio/utils';
import {
API_MESSAGE,
HEADERS,
DIST_TAGS,
API_ERROR,
HTTP_STATUS,
errorUtils,
} from '@verdaccio/core';
import { validateMetadata, isObject, hasDiffOneKey } from '@verdaccio/utils';
import { media, expectJson, allow } from '@verdaccio/middleware';
import { notify } from '@verdaccio/hooks';
import { Config, Callback, MergeTags, Version, Package, CallbackAction } from '@verdaccio/types';
@@ -224,7 +231,7 @@ export function publishPackage(storage: Storage, config: Config, auth: IAuth): a
// if this happens in normal circumstances, report it as a bug
debug('invalid body format');
logger.info({ packageName }, `wrong package format on publish a package @{packageName}`);
return next(ErrorCode.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL));
return next(errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL));
}
if (error && error.status !== HTTP_STATUS.CONFLICT) {
@@ -322,7 +329,7 @@ export function publishPackage(storage: Storage, config: Config, auth: IAuth): a
} catch (error: any) {
debug('error on publish, bad package format %o', packageName);
logger.error({ packageName }, 'error on publish, bad package data for @{packageName}');
return next(ErrorCode.getBadData(API_ERROR.BAD_PACKAGE_DATA));
return next(errorUtils.getBadData(API_ERROR.BAD_PACKAGE_DATA));
}
};
}

View File

@@ -1,4 +1,4 @@
import { HTTP_STATUS } from '@verdaccio/commons-api';
import { HTTP_STATUS } from '@verdaccio/core';
import { logger } from '@verdaccio/logger';
export default function (route): void {

View File

@@ -1,4 +1,4 @@
import { USERS, HTTP_STATUS } from '@verdaccio/commons-api';
import { USERS, HTTP_STATUS } from '@verdaccio/core';
import { Response } from 'express';
import _ from 'lodash';
import buildDebug from 'debug';

View File

@@ -1,7 +1,7 @@
import _ from 'lodash';
import { Response, Router } from 'express';
import { USERS, HTTP_STATUS } from '@verdaccio/commons-api';
import { USERS, HTTP_STATUS } from '@verdaccio/core';
import { Package } from '@verdaccio/types';
import { Storage } from '@verdaccio/store';

View File

@@ -2,14 +2,14 @@ import _ from 'lodash';
import { Response, Router } from 'express';
import buildDebug from 'debug';
import { getAuthenticatedMessage, validatePassword, ErrorCode } from '@verdaccio/utils';
import { getAuthenticatedMessage, validatePassword } from '@verdaccio/utils';
import { getApiToken } from '@verdaccio/auth';
import { logger } from '@verdaccio/logger';
import { createRemoteUser } from '@verdaccio/config';
import { Config, RemoteUser } from '@verdaccio/types';
import { IAuth } from '@verdaccio/auth';
import { API_ERROR, API_MESSAGE, HTTP_STATUS } from '@verdaccio/commons-api';
import { API_ERROR, API_MESSAGE, HTTP_STATUS, errorUtils } from '@verdaccio/core';
import { $RequestExtend, $NextFunctionVer } from '../types/custom';
const debug = buildDebug('verdaccio:api:user');
@@ -47,7 +47,7 @@ export default function (route: Router, auth: IAuth, config: Config): void {
'authenticating for user @{username} failed. Error: @{err.message}'
);
return next(
ErrorCode.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.BAD_USERNAME_PASSWORD)
errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.BAD_USERNAME_PASSWORD)
);
}
@@ -55,7 +55,7 @@ export default function (route: Router, auth: IAuth, config: Config): void {
const token = await getApiToken(auth, config, restoredRemoteUser, password);
debug('login: new token');
if (!token) {
return next(ErrorCode.getUnauthorized());
return next(errorUtils.getUnauthorized());
}
res.status(HTTP_STATUS.CREATED);
@@ -73,7 +73,7 @@ export default function (route: Router, auth: IAuth, config: Config): void {
if (validatePassword(password) === false) {
debug('adduser: invalid password');
// eslint-disable-next-line new-cap
return next(ErrorCode.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.PASSWORD_SHORT()));
return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.PASSWORD_SHORT()));
}
auth.add_user(name, password, async function (err, user): Promise<void> {
@@ -84,7 +84,7 @@ export default function (route: Router, auth: IAuth, config: Config): void {
// and npm accepts only an 409 error.
// So, changing status code here.
return next(
ErrorCode.getCode(err.status, err.message) || ErrorCode.getConflict(err.message)
errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message)
);
}
return next(err);
@@ -94,7 +94,7 @@ export default function (route: Router, auth: IAuth, config: Config): void {
name && password ? await getApiToken(auth, config, user, password) : undefined;
debug('adduser: new token %o', token);
if (!token) {
return next(ErrorCode.getUnauthorized());
return next(errorUtils.getUnauthorized());
}
req.remote_user = user;

View File

@@ -1,8 +1,8 @@
import _ from 'lodash';
import { Response, Router } from 'express';
import { API_ERROR, APP_ERROR, HTTP_STATUS, SUPPORT_ERRORS } from '@verdaccio/commons-api';
import { ErrorCode, validatePassword } from '@verdaccio/utils';
import { API_ERROR, APP_ERROR, HTTP_STATUS, SUPPORT_ERRORS, errorUtils } from '@verdaccio/core';
import { validatePassword } from '@verdaccio/utils';
import { IAuth } from '@verdaccio/auth';
import { $RequestExtend, $NextFunctionVer } from '../../types/custom';
@@ -61,7 +61,7 @@ export default function (route: Router, auth: IAuth): void {
if (_.isNil(password) === false) {
if (validatePassword(password.new) === false) {
/* eslint new-cap:off */
return next(ErrorCode.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.PASSWORD_SHORT()));
return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.PASSWORD_SHORT()));
/* eslint new-cap:off */
}
@@ -72,22 +72,22 @@ export default function (route: Router, auth: IAuth): void {
(err, isUpdated): $NextFunctionVer => {
if (_.isNull(err) === false) {
return next(
ErrorCode.getCode(err.status, err.message) || ErrorCode.getConflict(err.message)
errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message)
);
}
if (isUpdated) {
return next(buildProfile(req.remote_user.name));
}
return next(ErrorCode.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));
return next(errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));
}
);
} else if (_.isNil(tfa) === false) {
return next(
ErrorCode.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.TFA_DISABLED)
errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.TFA_DISABLED)
);
} else {
return next(ErrorCode.getCode(HTTP_STATUS.INTERNAL_ERROR, APP_ERROR.PROFILE_ERROR));
return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, APP_ERROR.PROFILE_ERROR));
}
}
);

View File

@@ -2,8 +2,7 @@ import _ from 'lodash';
import buildDebug from 'debug';
import { logger } from '@verdaccio/logger';
import { IAuth } from '@verdaccio/auth';
import { searchUtils } from '@verdaccio/core';
import { HTTP_STATUS } from '@verdaccio/commons-api';
import { HTTP_STATUS, searchUtils } from '@verdaccio/core';
import { Storage } from '@verdaccio/store';
import { Package } from '@verdaccio/types';
@@ -36,16 +35,23 @@ export default function (route, auth: IAuth, storage: Storage): void {
}
route.get('/-/v1/search', async (req, res, next) => {
let [size, from] = ['size', 'from'].map((k) => req.query[k]);
const { query, url } = req;
let [size, from] = ['size', 'from'].map((k) => query[k]);
let data;
const abort = new AbortController();
req.on('aborted', () => {
abort.abort();
});
size = parseInt(size, 10) || 20;
from = parseInt(from, 10) || 0;
try {
data = await storage.searchManager?.search({
query: req.query,
url: req.url,
query,
url,
abort,
});
debug('stream finish');
const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(

View File

@@ -1,6 +1,6 @@
import _ from 'lodash';
import { HTTP_STATUS, SUPPORT_ERRORS, getInternalError } from '@verdaccio/commons-api';
import { ErrorCode, stringToMD5, mask } from '@verdaccio/utils';
import { errorUtils, HTTP_STATUS, SUPPORT_ERRORS } from '@verdaccio/core';
import { stringToMD5, mask } from '@verdaccio/utils';
import { getApiToken } from '@verdaccio/auth';
import { logger } from '@verdaccio/logger';
import { Response, Router } from 'express';
@@ -43,10 +43,10 @@ export default function (route: Router, auth: IAuth, storage: Storage, config: C
});
} catch (error: any) {
logger.error({ error: error.msg }, 'token list has failed: @{error}');
return next(ErrorCode.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));
return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));
}
}
return next(ErrorCode.getUnauthorized());
return next(errorUtils.getUnauthorized());
}
);
@@ -57,27 +57,27 @@ export default function (route: Router, auth: IAuth, storage: Storage, config: C
const { name } = req.remote_user;
if (!_.isBoolean(readonly) || !_.isArray(cidr_whitelist)) {
return next(ErrorCode.getCode(HTTP_STATUS.BAD_DATA, SUPPORT_ERRORS.PARAMETERS_NOT_VALID));
return next(errorUtils.getCode(HTTP_STATUS.BAD_DATA, SUPPORT_ERRORS.PARAMETERS_NOT_VALID));
}
auth.authenticate(name, password, async (err, user: RemoteUser) => {
if (err) {
const errorCode = err.message ? HTTP_STATUS.UNAUTHORIZED : HTTP_STATUS.INTERNAL_ERROR;
return next(ErrorCode.getCode(errorCode, err.message));
return next(errorUtils.getCode(errorCode, err.message));
}
req.remote_user = user;
if (!_.isFunction(storage.saveToken)) {
return next(
ErrorCode.getCode(HTTP_STATUS.NOT_IMPLEMENTED, SUPPORT_ERRORS.STORAGE_NOT_IMPLEMENT)
errorUtils.getCode(HTTP_STATUS.NOT_IMPLEMENTED, SUPPORT_ERRORS.STORAGE_NOT_IMPLEMENT)
);
}
try {
const token = await getApiToken(auth, config, user, password);
if (!token) {
throw getInternalError();
throw errorUtils.getInternalError();
}
const key = stringToMD5(token);
@@ -113,7 +113,7 @@ export default function (route: Router, auth: IAuth, storage: Storage, config: C
);
} catch (error: any) {
logger.error({ error: error.msg }, 'token creation has failed: @{error}');
return next(ErrorCode.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));
return next(errorUtils.getInternalError(error.message));
}
});
}
@@ -135,10 +135,10 @@ export default function (route: Router, auth: IAuth, storage: Storage, config: C
return next({});
} catch (error: any) {
logger.error({ error: error.msg }, 'token creation has failed: @{error}');
return next(ErrorCode.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));
return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));
}
}
return next(ErrorCode.getUnauthorized());
return next(errorUtils.getUnauthorized());
}
);
}

View File

@@ -1,7 +1,6 @@
import { Response, Router } from 'express';
import buildDebug from 'debug';
import { $RequestExtend, $NextFunctionVer } from '../types/custom';
// import { getUnauthorized } from '@verdaccio/commons-api';
const debug = buildDebug('verdaccio:api:user');

View File

@@ -5,9 +5,10 @@ import bodyParser from 'body-parser';
import { Config, parseConfigFile } from '@verdaccio/config';
import { Storage } from '@verdaccio/store';
import { generatePackageMetadata } from '@verdaccio/helper';
import { final, handleError, errorReportingMiddleware } from '@verdaccio/middleware';
import { Auth, IAuth } from '@verdaccio/auth';
import { HEADERS, HEADER_TYPE, HTTP_STATUS, generatePackageMetadata } from '@verdaccio/commons-api';
import { HEADERS, HEADER_TYPE, HTTP_STATUS } from '@verdaccio/core';
import apiEndpoints from '../../src';
const getConf = (conf) => {

View File

@@ -1,6 +1,6 @@
import supertest from 'supertest';
import { HEADER_TYPE, HEADERS, HTTP_STATUS } from '@verdaccio/commons-api';
import { HEADER_TYPE, HEADERS, HTTP_STATUS } from '@verdaccio/core';
import { $ResponseExtend, $RequestExtend } from '../../types/custom';
import { initializeServer, publishTaggedVersion, publishVersion } from './_helper';

View File

@@ -1,6 +1,6 @@
import supertest from 'supertest';
import { HEADER_TYPE, HEADERS, HTTP_STATUS } from '@verdaccio/commons-api';
import { HEADER_TYPE, HEADERS, HTTP_STATUS } from '@verdaccio/core';
import { initializeServer } from './_helper';
describe('ping', () => {

View File

@@ -1,12 +1,7 @@
import { HTTP_STATUS } from '@verdaccio/commons-api';
import { HTTP_STATUS } from '@verdaccio/core';
import supertest from 'supertest';
import {
API_ERROR,
API_MESSAGE,
generatePackageMetadata,
HEADER_TYPE,
HEADERS,
} from '@verdaccio/commons-api';
import { API_ERROR, API_MESSAGE, HEADER_TYPE, HEADERS } from '@verdaccio/core';
import { generatePackageMetadata } from '@verdaccio/helper';
import { $ResponseExtend, $RequestExtend } from '../../types/custom';
import { initializeServer, publishVersion } from './_helper';

View File

@@ -2,15 +2,13 @@ import supertest from 'supertest';
import _ from 'lodash';
import {
getBadRequest,
getConflict,
getUnauthorized,
errorUtils,
HEADERS,
HEADER_TYPE,
API_MESSAGE,
HTTP_STATUS,
API_ERROR,
} from '@verdaccio/commons-api';
} from '@verdaccio/core';
import { $RequestExtend, $ResponseExtend } from '../../types/custom';
import { initializeServer } from './_helper';
@@ -28,7 +26,7 @@ const mockAuthenticate = jest.fn(() => (_name, _password, callback): void => {
});
const mockAddUser = jest.fn(() => (_name, _password, callback): void => {
return callback(getConflict(API_ERROR.USERNAME_ALREADY_REGISTERED));
return callback(errorUtils.getConflict(API_ERROR.USERNAME_ALREADY_REGISTERED));
});
jest.mock('@verdaccio/auth', () => ({
@@ -143,7 +141,7 @@ describe('user', () => {
}
);
mockAddUser.mockImplementationOnce(() => (_name, _password, callback): void => {
return callback(getBadRequest(API_ERROR.USERNAME_PASSWORD_REQUIRED));
return callback(errorUtils.getBadRequest(API_ERROR.USERNAME_PASSWORD_REQUIRED));
});
const credentialsShort = _.cloneDeep(credentials);
delete credentialsShort.name;
@@ -208,7 +206,7 @@ describe('user', () => {
}
);
mockAuthenticate.mockImplementationOnce(() => (_name, _password, callback): void => {
return callback(getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));
return callback(errorUtils.getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));
});
const credentialsShort = _.cloneDeep(credentials);
credentialsShort.password = 'failPassword';
@@ -240,7 +238,7 @@ describe('user', () => {
}
);
mockAuthenticate.mockImplementationOnce(() => (_name, _password, callback): void => {
return callback(getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));
return callback(errorUtils.getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));
});
const credentialsShort = _.cloneDeep(credentials);
credentialsShort.password = 'failPassword';

View File

@@ -1,6 +1,6 @@
import supertest from 'supertest';
import { HEADERS, HTTP_STATUS } from '@verdaccio/commons-api';
import { HEADERS, HTTP_STATUS } from '@verdaccio/core';
import { $RequestExtend, $ResponseExtend } from '../../types/custom';
import { initializeServer } from './_helper';

View File

@@ -1,5 +1,4 @@
import { HTTP_STATUS, API_ERROR } from '@verdaccio/commons-api';
import { ErrorCode } from '@verdaccio/utils';
import { errorUtils, HTTP_STATUS, API_ERROR } from '@verdaccio/core';
import {
addVersion,
uploadPackageTarball,
@@ -202,13 +201,13 @@ describe('Publish endpoints - un-publish package', () => {
const storage = {
removePackage(packageName) {
expect(packageName).toEqual(req.params.package);
return Promise.reject(ErrorCode.getInternalError());
return Promise.reject(errorUtils.getInternalError());
},
};
// @ts-ignore
await unPublishPackage(storage)(req, res, next);
expect(next).toHaveBeenCalledWith(ErrorCode.getInternalError());
expect(next).toHaveBeenCalledWith(errorUtils.getInternalError());
});
});

View File

@@ -13,9 +13,6 @@
{
"path": "../config"
},
{
"path": "../core/commons-api"
},
{
"path": "../core/core"
},

View File

@@ -1,5 +1,28 @@
# @verdaccio/auth
## 6.0.0-6-next.13
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [154b2ecd]
- @verdaccio/config@6.0.0-6-next.9
- @verdaccio/core@6.0.0-6-next.2
- verdaccio-htpasswd@11.0.0-6-next.9
- @verdaccio/loaders@6.0.0-6-next.6
- @verdaccio/logger@6.0.0-6-next.6
- @verdaccio/utils@6.0.0-6-next.7
## 6.0.0-6-next.12
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/auth",
"version": "6.0.0-6-next.12",
"version": "6.0.0-6-next.13",
"description": "logger",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -25,7 +25,7 @@
"verdaccio"
],
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"scripts": {
@@ -39,20 +39,20 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/config": "workspace:6.0.0-6-next.8",
"@verdaccio/loaders": "workspace:6.0.0-6-next.5",
"@verdaccio/logger": "workspace:6.0.0-6-next.5",
"@verdaccio/utils": "workspace:6.0.0-6-next.6",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"@verdaccio/config": "workspace:6.0.0-6-next.9",
"@verdaccio/loaders": "workspace:6.0.0-6-next.6",
"@verdaccio/logger": "workspace:6.0.0-6-next.6",
"@verdaccio/utils": "workspace:6.0.0-6-next.7",
"debug": "4.3.2",
"express": "4.17.1",
"jsonwebtoken": "8.5.1",
"lodash": "4.17.21",
"verdaccio-htpasswd": "workspace:11.0.0-6-next.8"
"verdaccio-htpasswd": "workspace:11.0.0-6-next.9"
},
"devDependencies": {
"@verdaccio/mock": "workspace:6.0.0-6-next.9",
"@verdaccio/types": "workspace:11.0.0-6-next.8"
"@verdaccio/mock": "workspace:6.0.0-6-next.10",
"@verdaccio/types": "workspace:11.0.0-6-next.9"
},
"funding": {
"type": "opencollective",

View File

@@ -8,10 +8,8 @@ import {
TOKEN_BASIC,
TOKEN_BEARER,
VerdaccioError,
getBadRequest,
getInternalError,
getForbidden,
} from '@verdaccio/commons-api';
errorUtils,
} from '@verdaccio/core';
import { loadPlugin } from '@verdaccio/loaders';
import { HTPasswd, HTPasswdConfig } from 'verdaccio-htpasswd';
@@ -153,7 +151,7 @@ class Auth implements IAuth {
const validPlugins = _.filter(this.plugins, (plugin) => isFunction(plugin.changePassword));
if (_.isEmpty(validPlugins)) {
return cb(getInternalError(SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE));
return cb(errorUtils.getInternalError(SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE));
}
for (const plugin of validPlugins) {
@@ -425,7 +423,7 @@ class Auth implements IAuth {
if (!isAuthHeaderValid(authorization)) {
debug('api middleware authentication heather is invalid');
return next(getBadRequest(API_ERROR.BAD_AUTH_HEADER));
return next(errorUtils.getBadRequest(API_ERROR.BAD_AUTH_HEADER));
}
const { secret, security } = this.config;
@@ -476,7 +474,7 @@ class Auth implements IAuth {
} else {
// with JWT throw 401
debug('jwt invalid token');
next(getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
next(errorUtils.getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
}
}
}
@@ -510,7 +508,7 @@ class Auth implements IAuth {
} else {
// we force npm client to ask again with basic authentication
debug('legacy invalid header');
return next(getBadRequest(API_ERROR.BAD_AUTH_HEADER));
return next(errorUtils.getBadRequest(API_ERROR.BAD_AUTH_HEADER));
}
}
@@ -544,7 +542,7 @@ class Auth implements IAuth {
}
if (!isAuthHeaderValid(authorization)) {
return next(getBadRequest(API_ERROR.BAD_AUTH_HEADER));
return next(errorUtils.getBadRequest(API_ERROR.BAD_AUTH_HEADER));
}
const token = (authorization || '').replace(`${TOKEN_BEARER} `, '');

View File

@@ -13,12 +13,9 @@ import {
TOKEN_BASIC,
TOKEN_BEARER,
API_ERROR,
getForbidden,
getUnauthorized,
getConflict,
getCode,
} from '@verdaccio/commons-api';
import { VerdaccioError } from '@verdaccio/commons-api';
VerdaccioError,
errorUtils,
} from '@verdaccio/core';
import { createAnonymousRemoteUser } from '@verdaccio/config';
import { TokenEncryption, AESPayload } from './auth';
@@ -155,7 +152,7 @@ export function verifyJWTPayload(token: string, secret: string): RemoteUser {
// we return an anonymous user to force log in.
return createAnonymousRemoteUser();
}
throw getCode(HTTP_STATUS.UNAUTHORIZED, error.message);
throw errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, error.message);
}
}
@@ -166,11 +163,11 @@ export function isAuthHeaderValid(authorization: string): boolean {
export function getDefaultPlugins(logger: any): IPluginAuth<Config> {
return {
authenticate(user: string, password: string, cb: Callback): void {
cb(getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
cb(errorUtils.getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
},
adduser(user: string, password: string, cb: Callback): void {
return cb(getConflict(API_ERROR.BAD_USERNAME_PASSWORD));
return cb(errorUtils.getConflict(API_ERROR.BAD_USERNAME_PASSWORD));
},
// FIXME: allow_action and allow_publish should be in the @verdaccio/types
@@ -205,9 +202,13 @@ export function allow_action(action: ActionsAllowed, logger): AllowAction {
}
if (name) {
callback(getForbidden(`user ${name} is not allowed to ${action} package ${pkg.name}`));
callback(
errorUtils.getForbidden(`user ${name} is not allowed to ${action} package ${pkg.name}`)
);
} else {
callback(getUnauthorized(`authorization required to ${action} package ${pkg.name}`));
callback(
errorUtils.getUnauthorized(`authorization required to ${action} package ${pkg.name}`)
);
}
};
}

View File

@@ -1,8 +1,6 @@
import path from 'path';
import _ from 'lodash';
import { CHARACTER_ENCODING, TOKEN_BEARER, API_ERROR } from '@verdaccio/commons-api';
import { configExample } from '@verdaccio/mock';
import {
Config as AppConfig,
@@ -20,7 +18,13 @@ import {
} from '@verdaccio/utils';
import { Config, Security, RemoteUser } from '@verdaccio/types';
import { VerdaccioError, getForbidden } from '@verdaccio/commons-api';
import {
VerdaccioError,
CHARACTER_ENCODING,
TOKEN_BEARER,
API_ERROR,
errorUtils,
} from '@verdaccio/core';
import { setup } from '@verdaccio/logger';
import {
IAuth,
@@ -110,7 +114,7 @@ describe('Auth utilities', () => {
test('authentication should fail by default (default)', () => {
const plugin = getDefaultPlugins({ trace: jest.fn() });
plugin.authenticate('foo', 'bar', (error: any) => {
expect(error).toEqual(getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
expect(error).toEqual(errorUtils.getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
});
});
@@ -118,7 +122,7 @@ describe('Auth utilities', () => {
const plugin = getDefaultPlugins({ trace: jest.fn() });
// @ts-ignore
plugin.adduser('foo', 'bar', (error: any) => {
expect(error).toEqual(getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
expect(error).toEqual(errorUtils.getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
});
});
});

View File

@@ -3,7 +3,7 @@ import { ROLES, Config as AppConfig } from '@verdaccio/config';
import { setup } from '@verdaccio/logger';
import { IAuth } from '@verdaccio/auth';
import { Config } from '@verdaccio/types';
import { getInternalError } from '@verdaccio/commons-api';
import { errorUtils } from '@verdaccio/core';
import { Auth } from '../src';
@@ -57,7 +57,7 @@ describe('AuthTest', () => {
auth.authenticate('foo', 'bar', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(getInternalError());
expect(callback).toHaveBeenCalledWith(errorUtils.getInternalError());
});
});

View File

@@ -10,9 +10,6 @@
{
"path": "../config"
},
{
"path": "../core/commons-api"
},
{
"path": "../core/htpasswd"
},

View File

@@ -1,5 +1,27 @@
# @verdaccio/cli
## 6.0.0-6-next.23
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [b702ea36]
- Updated dependencies [154b2ecd]
- @verdaccio/config@6.0.0-6-next.9
- @verdaccio/fastify-migration@6.0.0-6-next.14
- @verdaccio/logger@6.0.0-6-next.6
- @verdaccio/node-api@6.0.0-6-next.22
## 6.0.0-6-next.22
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/cli",
"version": "6.0.0-6-next.22",
"version": "6.0.0-6-next.23",
"author": {
"name": "Juan Picado",
"email": "juanpicado19@gmail.com"
@@ -26,7 +26,7 @@
"verdaccio"
],
"engines": {
"node": ">=12",
"node": ">=14",
"npm": ">=6"
},
"description": "verdaccio CLI",
@@ -44,10 +44,10 @@
"start": "ts-node src/index.ts"
},
"dependencies": {
"@verdaccio/config": "workspace:6.0.0-6-next.8",
"@verdaccio/logger": "workspace:6.0.0-6-next.5",
"@verdaccio/node-api": "workspace:6.0.0-6-next.21",
"@verdaccio/fastify-migration": "workspace:6.0.0-6-next.13",
"@verdaccio/config": "workspace:6.0.0-6-next.9",
"@verdaccio/logger": "workspace:6.0.0-6-next.6",
"@verdaccio/node-api": "workspace:6.0.0-6-next.22",
"@verdaccio/fastify-migration": "workspace:6.0.0-6-next.14",
"clipanion": "3.0.1",
"envinfo": "7.8.1",
"kleur": "3.0.3",

View File

@@ -1,5 +1,24 @@
# @verdaccio/config
## 6.0.0-6-next.9
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [154b2ecd]
- @verdaccio/core@6.0.0-6-next.2
- @verdaccio/utils@6.0.0-6-next.7
## 6.0.0-6-next.8
### Major Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/config",
"version": "6.0.0-6-next.8",
"version": "6.0.0-6-next.9",
"description": "logger",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -26,7 +26,7 @@
"verdaccio"
],
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"scripts": {
@@ -39,8 +39,8 @@
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/utils": "workspace:6.0.0-6-next.6",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"@verdaccio/utils": "workspace:6.0.0-6-next.7",
"debug": "4.3.2",
"js-yaml": "3.14.1",
"lodash": "4.17.21",

View File

@@ -3,7 +3,7 @@ import path from 'path';
import _ from 'lodash';
import buildDebug from 'debug';
import { CHARACTER_ENCODING } from '@verdaccio/commons-api';
import { CHARACTER_ENCODING } from '@verdaccio/core';
import { folderExists, fileExists } from './config-utils';
const CONFIG_FILE = 'config.yaml';

View File

@@ -3,7 +3,7 @@ import _ from 'lodash';
import buildDebug from 'debug';
import { getMatchedPackagesSpec, generateRandomHexString, isObject } from '@verdaccio/utils';
import { APP_ERROR } from '@verdaccio/commons-api';
import { APP_ERROR } from '@verdaccio/core';
import {
PackageList,
Config as AppConfig,

View File

@@ -1,7 +1,7 @@
import assert from 'assert';
import _ from 'lodash';
import { PackageAccess } from '@verdaccio/types';
import { ErrorCode } from '@verdaccio/utils';
import { errorUtils } from '@verdaccio/core';
export interface LegacyPackageList {
[key: string]: PackageAccess;
}
@@ -35,7 +35,7 @@ export function normalizeUserList(groupsList: any): any {
} else if (Array.isArray(groupsList)) {
result.push(groupsList);
} else {
throw ErrorCode.getInternalError(
throw errorUtils.getInternalError(
'CONFIG: bad package acl (array or string expected): ' + JSON.stringify(groupsList)
);
}

View File

@@ -1,6 +1,6 @@
import fs from 'fs';
import YAML from 'js-yaml';
import { APP_ERROR } from '@verdaccio/commons-api';
import { APP_ERROR } from '@verdaccio/core';
import { ConfigRuntime, ConfigYaml } from '@verdaccio/types';
/**

View File

@@ -7,9 +7,6 @@
"include": ["src/**/*.ts"],
"exclude": ["src/**/*.test.ts"],
"references": [
{
"path": "../core/commons-api"
},
{
"path": "../utils"
}

View File

@@ -1,15 +0,0 @@
# @verdaccio/commons-api
commons api utilities for verdaccio
[![verdaccio (latest)](https://img.shields.io/npm/v/@verdaccio/commons-api/latest.svg)](https://www.npmjs.com/package/@verdaccio/commons-api)
[![docker pulls](https://img.shields.io/docker/pulls/verdaccio/verdaccio.svg?maxAge=43200)](https://verdaccio.org/docs/en/docker.html)
[![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)
[![discord](https://img.shields.io/discord/388674437219745793.svg)](http://chat.verdaccio.org/)
[![node](https://img.shields.io/node/v/@verdaccio/commons-api/latest.svg)](https://www.npmjs.com/package/@verdaccio/commons-api)
![MIT](https://img.shields.io/github/license/mashape/apistatus.svg)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/verdaccio/localized.svg)](https://crowdin.com/project/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)

View File

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

View File

@@ -1,55 +0,0 @@
{
"name": "@verdaccio/commons-api",
"version": "11.0.0-6-next.4",
"description": "Commons API utilities for Verdaccio",
"keywords": [
"private",
"package",
"repository",
"registry",
"enterprise",
"modules",
"proxy",
"server",
"verdaccio"
],
"author": "Juan Picado <juanpicado19@gmail.com>",
"license": "MIT",
"homepage": "https://verdaccio.org",
"repository": {
"type": "https",
"url": "https://github.com/verdaccio/verdaccio",
"directory": "packages/core/commons-api"
},
"bugs": {
"url": "https://github.com/verdaccio/verdaccio/issues"
},
"publishConfig": {
"access": "public"
},
"main": "build/index.js",
"types": "build/index.d.ts",
"files": [
"build"
],
"engines": {
"node": ">=10",
"npm": ">=6"
},
"dependencies": {
"http-errors": "1.8.0",
"http-status-codes": "2.1.4"
},
"scripts": {
"clean": "rimraf ./build",
"test": "cross-env NODE_ENV=test BABEL_ENV=test jest",
"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"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/verdaccio"
}
}

View File

@@ -1,200 +0,0 @@
import createError, { HttpError } from 'http-errors';
import httpCodes from 'http-status-codes';
export const DEFAULT_MIN_LIMIT_PASSWORD = 3;
export const HEADER_TYPE = {
CONTENT_ENCODING: 'content-encoding',
CONTENT_TYPE: 'content-type',
CONTENT_LENGTH: 'content-length',
ACCEPT_ENCODING: 'accept-encoding',
};
export const HTTP_STATUS = {
OK: httpCodes.OK,
CREATED: httpCodes.CREATED,
MULTIPLE_CHOICES: httpCodes.MULTIPLE_CHOICES,
NOT_MODIFIED: httpCodes.NOT_MODIFIED,
BAD_REQUEST: httpCodes.BAD_REQUEST,
UNAUTHORIZED: httpCodes.UNAUTHORIZED,
FORBIDDEN: httpCodes.FORBIDDEN,
NOT_FOUND: httpCodes.NOT_FOUND,
CONFLICT: httpCodes.CONFLICT,
NOT_IMPLEMENTED: httpCodes.NOT_IMPLEMENTED,
UNSUPPORTED_MEDIA: httpCodes.UNSUPPORTED_MEDIA_TYPE,
BAD_DATA: httpCodes.UNPROCESSABLE_ENTITY,
INTERNAL_ERROR: httpCodes.INTERNAL_SERVER_ERROR,
SERVICE_UNAVAILABLE: httpCodes.SERVICE_UNAVAILABLE,
LOOP_DETECTED: 508,
};
export const CHARACTER_ENCODING = {
UTF8: 'utf8',
};
export const ERROR_CODE = {
token_required: 'token is required',
};
export const TOKEN_BASIC = 'Basic';
export const TOKEN_BEARER = 'Bearer';
export const HEADERS = {
ACCEPT: 'Accept',
ACCEPT_ENCODING: 'Accept-Encoding',
USER_AGENT: 'User-Agent',
JSON: 'application/json',
CONTENT_TYPE: 'Content-type',
CONTENT_LENGTH: 'content-length',
TEXT_PLAIN: 'text/plain',
TEXT_PLAIN_UTF8: 'text/plain; charset=utf-8',
TEXT_HTML_UTF8: 'text/html; charset=utf-8',
TEXT_HTML: 'text/html',
AUTHORIZATION: 'authorization',
// only set with proxy that setup HTTPS
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
FORWARDED_PROTO: 'X-Forwarded-Proto',
FORWARDED_FOR: 'X-Forwarded-For',
FRAMES_OPTIONS: 'X-Frame-Options',
CSP: 'Content-Security-Policy',
CTO: 'X-Content-Type-Options',
XSS: 'X-XSS-Protection',
ETAG: 'ETag',
JSON_CHARSET: 'application/json; charset=utf-8',
OCTET_STREAM: 'application/octet-stream; charset=utf-8',
TEXT_CHARSET: 'text/plain; charset=utf-8',
WWW_AUTH: 'WWW-Authenticate',
GZIP: 'gzip',
};
export const API_MESSAGE = {
PKG_CREATED: 'created new package',
PKG_CHANGED: 'package changed',
PKG_REMOVED: 'package removed',
PKG_PUBLISHED: 'package published',
TARBALL_UPLOADED: 'tarball uploaded successfully',
TARBALL_REMOVED: 'tarball removed',
TAG_UPDATED: 'tags updated',
TAG_REMOVED: 'tag removed',
TAG_ADDED: 'package tagged',
LOGGED_OUT: 'Logged out',
};
// @deprecated
export const SUPPORT_ERRORS = {
PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',
TFA_DISABLED: 'the two-factor authentication is not yet supported',
STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',
PARAMETERS_NOT_VALID: 'the parameters are not valid',
};
// @deprecated
export const API_ERROR = {
PASSWORD_SHORT: (passLength = DEFAULT_MIN_LIMIT_PASSWORD): string =>
`The provided password is too short. Please pick a password longer than ` +
`${passLength} characters.`,
MUST_BE_LOGGED: 'You must be logged in to publish packages.',
PLUGIN_ERROR: 'bug in the auth plugin system',
CONFIG_BAD_FORMAT: 'config file must be an object',
BAD_USERNAME_PASSWORD: 'bad username/password, access denied',
NO_PACKAGE: 'no such package available',
PACKAGE_CANNOT_BE_ADDED: 'this package cannot be added',
BAD_DATA: 'bad data',
NOT_ALLOWED: 'not allowed to access package',
NOT_ALLOWED_PUBLISH: 'not allowed to publish package',
INTERNAL_SERVER_ERROR: 'internal server error',
UNKNOWN_ERROR: 'unknown error',
NOT_PACKAGE_UPLINK: 'package does not exist on uplink',
UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish',
UPLINK_OFFLINE: 'uplink is offline',
CONTENT_MISMATCH: 'content length mismatch',
NOT_FILE_UPLINK: "file doesn't exist on uplink",
MAX_USERS_REACHED: 'maximum amount of users reached',
VERSION_NOT_EXIST: "this version doesn't exist",
UNSUPORTED_REGISTRY_CALL: 'unsupported registry call',
FILE_NOT_FOUND: 'File not found',
REGISTRATION_DISABLED: 'user registration disabled',
UNAUTHORIZED_ACCESS: 'unauthorized access',
BAD_STATUS_CODE: 'bad status code',
PACKAGE_EXIST: 'this package is already present',
BAD_AUTH_HEADER: 'bad authorization header',
WEB_DISABLED: 'Web interface is disabled in the config file',
DEPRECATED_BASIC_HEADER: 'basic authentication is deprecated, please use JWT instead',
BAD_FORMAT_USER_GROUP: 'user groups is different than an array',
RESOURCE_UNAVAILABLE: 'resource unavailable',
BAD_PACKAGE_DATA: 'bad incoming package data',
USERNAME_PASSWORD_REQUIRED: 'username and password is required',
USERNAME_ALREADY_REGISTERED: 'username is already registered',
};
// @deprecated
export const APP_ERROR = {
CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file',
PROFILE_ERROR: 'profile unexpected error',
PASSWORD_VALIDATION: 'not valid password',
};
// @deprecated
export type VerdaccioError = HttpError & { code: number };
function getError(code: number, message: string): VerdaccioError {
const httpError = createError(code, message);
httpError.code = code;
return httpError as VerdaccioError;
}
export function getConflict(message: string = API_ERROR.PACKAGE_EXIST): VerdaccioError {
return getError(HTTP_STATUS.CONFLICT, message);
}
export function getBadData(customMessage?: string): VerdaccioError {
return getError(HTTP_STATUS.BAD_DATA, customMessage || API_ERROR.BAD_DATA);
}
export function getBadRequest(customMessage: string): VerdaccioError {
return getError(HTTP_STATUS.BAD_REQUEST, customMessage);
}
export function getInternalError(customMessage?: string): VerdaccioError {
return customMessage
? getError(HTTP_STATUS.INTERNAL_ERROR, customMessage)
: getError(HTTP_STATUS.INTERNAL_ERROR, API_ERROR.UNKNOWN_ERROR);
}
export function getUnauthorized(message = 'no credentials provided'): VerdaccioError {
return getError(HTTP_STATUS.UNAUTHORIZED, message);
}
export function getForbidden(message = "can't use this filename"): VerdaccioError {
return getError(HTTP_STATUS.FORBIDDEN, message);
}
export function getServiceUnavailable(
message: string = API_ERROR.RESOURCE_UNAVAILABLE
): VerdaccioError {
return getError(HTTP_STATUS.SERVICE_UNAVAILABLE, message);
}
export function getNotFound(customMessage?: string): VerdaccioError {
return getError(HTTP_STATUS.NOT_FOUND, customMessage || API_ERROR.NO_PACKAGE);
}
export function getCode(statusCode: number, customMessage: string): VerdaccioError {
return getError(statusCode, customMessage);
}
export const TIME_EXPIRATION_24H = '24h';
export const TIME_EXPIRATION_7D = '7d';
export const DIST_TAGS = 'dist-tags';
export const LATEST = 'latest';
export const USERS = 'users';
export const DEFAULT_USER = 'Anonymous';
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 * from './helpers/pkg';

View File

@@ -1,108 +0,0 @@
import _ from 'lodash';
import {
getNotFound,
VerdaccioError,
HTTP_STATUS,
getConflict,
getBadData,
getInternalError,
API_ERROR,
getUnauthorized,
getForbidden,
getServiceUnavailable,
getCode,
} from '../src/index';
describe('testing errors', () => {
test('should qualify as an native error', () => {
expect(_.isError(getNotFound())).toBeTruthy();
expect(_.isError(getConflict())).toBeTruthy();
expect(_.isError(getBadData())).toBeTruthy();
expect(_.isError(getInternalError())).toBeTruthy();
expect(_.isError(getUnauthorized())).toBeTruthy();
expect(_.isError(getForbidden())).toBeTruthy();
expect(_.isError(getServiceUnavailable())).toBeTruthy();
expect(_.isError(getCode(400, 'fooError'))).toBeTruthy();
});
test('should test not found', () => {
const err: VerdaccioError = getNotFound('foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.NOT_FOUND);
expect(err.statusCode).toEqual(HTTP_STATUS.NOT_FOUND);
expect(err.message).toEqual('foo');
});
test('should test conflict', () => {
const err: VerdaccioError = getConflict('foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.CONFLICT);
expect(err.message).toEqual('foo');
});
test('should test bad data', () => {
const err: VerdaccioError = getBadData('foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.BAD_DATA);
expect(err.message).toEqual('foo');
});
test('should test internal error custom message', () => {
const err: VerdaccioError = getInternalError('foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.INTERNAL_ERROR);
expect(err.message).toEqual('foo');
});
test('should test internal error', () => {
const err: VerdaccioError = getInternalError();
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.INTERNAL_ERROR);
expect(err.message).toEqual(API_ERROR.UNKNOWN_ERROR);
});
test('should test Unauthorized message', () => {
const err: VerdaccioError = getUnauthorized('foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.UNAUTHORIZED);
expect(err.message).toEqual('foo');
});
test('should test forbidden message', () => {
const err: VerdaccioError = getForbidden('foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.FORBIDDEN);
expect(err.message).toEqual('foo');
});
test('should test service unavailable message', () => {
const err: VerdaccioError = getServiceUnavailable('foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.SERVICE_UNAVAILABLE);
expect(err.message).toEqual('foo');
});
test('should test custom code error message', () => {
const err: VerdaccioError = getCode(HTTP_STATUS.NOT_FOUND, 'foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.NOT_FOUND);
expect(err.message).toEqual('foo');
});
test('should test custom code ok message', () => {
const err: VerdaccioError = getCode(HTTP_STATUS.OK, 'foo');
expect(err.code).toBeDefined();
expect(err.code).toEqual(HTTP_STATUS.OK);
});
});

View File

@@ -1,20 +0,0 @@
declare module 'lockfile' {
type Callback = (err?: Error) => void;
interface LockOptions {
wait?: number;
pollPeriod?: number;
stale?: number;
retries?: number;
retryWait?: number;
}
interface LockFileExport {
lock(fileName: string, opts: LockOptions, cb: Callback): void;
unlock(fileName: string, cb: Callback): void;
}
const lockFileExport: LockFileExport;
export default lockFileExport;
}

View File

@@ -1,25 +1,38 @@
# @verdaccio/core
## 6.0.0-6-next.2
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
## 6.0.0-6-next.1
### Major Changes
- 459b6fa7: refactor: search v1 endpoint and local-database
- refactor search `api v1` endpoint, improve performance
- remove usage of `async` dependency https://github.com/verdaccio/verdaccio/issues/1225
- refactor method storage class
- create new module `core` to reduce the ammount of modules with utilities
- use `undici` instead `node-fetch`
- use `fastify` instead `express` for functional test
### Breaking changes
- plugin storage API changes
- remove old search endpoint (return 404)
- filter local private packages at plugin level
The storage api changes for methods `get`, `add`, `remove` as promise base. The `search` methods also changes and recieves a `query` object that contains all query params from the client.
```ts
export interface IPluginStorage<T> extends IPlugin {
add(name: string): Promise<void>;

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/core",
"version": "6.0.0-6-next.1",
"version": "6.0.0-6-next.2",
"description": "core utilities",
"keywords": [
"private",
@@ -19,7 +19,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=12",
"node": ">=14",
"npm": ">=6"
},
"repository": {
@@ -39,7 +39,7 @@
"semver": "7.3.5"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.8"
"@verdaccio/types": "workspace:11.0.0-6-next.9"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,3 +1,5 @@
import httpCodes from 'http-status-codes';
export const DEFAULT_MIN_LIMIT_PASSWORD = 3;
export const TIME_EXPIRATION_24H = '24h';
export const TIME_EXPIRATION_7D = '7d';
@@ -47,3 +49,43 @@ export const HEADERS = {
WWW_AUTH: 'WWW-Authenticate',
GZIP: 'gzip',
};
export const HTTP_STATUS = {
OK: httpCodes.OK,
CREATED: httpCodes.CREATED,
MULTIPLE_CHOICES: httpCodes.MULTIPLE_CHOICES,
NOT_MODIFIED: httpCodes.NOT_MODIFIED,
BAD_REQUEST: httpCodes.BAD_REQUEST,
UNAUTHORIZED: httpCodes.UNAUTHORIZED,
FORBIDDEN: httpCodes.FORBIDDEN,
NOT_FOUND: httpCodes.NOT_FOUND,
CONFLICT: httpCodes.CONFLICT,
NOT_IMPLEMENTED: httpCodes.NOT_IMPLEMENTED,
UNSUPPORTED_MEDIA: httpCodes.UNSUPPORTED_MEDIA_TYPE,
BAD_DATA: httpCodes.UNPROCESSABLE_ENTITY,
INTERNAL_ERROR: httpCodes.INTERNAL_SERVER_ERROR,
SERVICE_UNAVAILABLE: httpCodes.SERVICE_UNAVAILABLE,
LOOP_DETECTED: 508,
};
export const ERROR_CODE = {
token_required: 'token is required',
};
export const API_MESSAGE = {
PKG_CREATED: 'created new package',
PKG_CHANGED: 'package changed',
PKG_REMOVED: 'package removed',
PKG_PUBLISHED: 'package published',
TARBALL_UPLOADED: 'tarball uploaded successfully',
TARBALL_REMOVED: 'tarball removed',
TAG_UPDATED: 'tags updated',
TAG_REMOVED: 'tag removed',
TAG_ADDED: 'package tagged',
LOGGED_OUT: 'Logged out',
};
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}`;

View File

@@ -1,48 +1,5 @@
import createError, { HttpError } from 'http-errors';
import httpCodes from 'http-status-codes';
import { DEFAULT_MIN_LIMIT_PASSWORD } from './constants';
export const HTTP_STATUS = {
OK: httpCodes.OK,
CREATED: httpCodes.CREATED,
MULTIPLE_CHOICES: httpCodes.MULTIPLE_CHOICES,
NOT_MODIFIED: httpCodes.NOT_MODIFIED,
BAD_REQUEST: httpCodes.BAD_REQUEST,
UNAUTHORIZED: httpCodes.UNAUTHORIZED,
FORBIDDEN: httpCodes.FORBIDDEN,
NOT_FOUND: httpCodes.NOT_FOUND,
CONFLICT: httpCodes.CONFLICT,
NOT_IMPLEMENTED: httpCodes.NOT_IMPLEMENTED,
UNSUPPORTED_MEDIA: httpCodes.UNSUPPORTED_MEDIA_TYPE,
BAD_DATA: httpCodes.UNPROCESSABLE_ENTITY,
INTERNAL_ERROR: httpCodes.INTERNAL_SERVER_ERROR,
SERVICE_UNAVAILABLE: httpCodes.SERVICE_UNAVAILABLE,
LOOP_DETECTED: 508,
};
export const ERROR_CODE = {
token_required: 'token is required',
};
export const API_MESSAGE = {
PKG_CREATED: 'created new package',
PKG_CHANGED: 'package changed',
PKG_REMOVED: 'package removed',
PKG_PUBLISHED: 'package published',
TARBALL_UPLOADED: 'tarball uploaded successfully',
TARBALL_REMOVED: 'tarball removed',
TAG_UPDATED: 'tags updated',
TAG_REMOVED: 'tag removed',
TAG_ADDED: 'package tagged',
LOGGED_OUT: 'Logged out',
};
export const SUPPORT_ERRORS = {
PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',
TFA_DISABLED: 'the two-factor authentication is not yet supported',
STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',
PARAMETERS_NOT_VALID: 'the parameters are not valid',
};
import { DEFAULT_MIN_LIMIT_PASSWORD, HTTP_STATUS } from './constants';
export const API_ERROR = {
PASSWORD_SHORT: (passLength = DEFAULT_MIN_LIMIT_PASSWORD): string =>
@@ -82,6 +39,13 @@ export const API_ERROR = {
USERNAME_ALREADY_REGISTERED: 'username is already registered',
};
export const SUPPORT_ERRORS = {
PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',
TFA_DISABLED: 'the two-factor authentication is not yet supported',
STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',
PARAMETERS_NOT_VALID: 'the parameters are not valid',
};
export const APP_ERROR = {
CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file',
PROFILE_ERROR: 'profile unexpected error',
@@ -137,8 +101,3 @@ export function getNotFound(customMessage?: string): VerdaccioError {
export function getCode(statusCode: number, customMessage: string): VerdaccioError {
return getError(statusCode, customMessage);
}
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}`;

View File

@@ -7,6 +7,22 @@ import * as pluginUtils from './plugin-utils';
import * as fileUtils from './file-utils';
import * as pkgUtils from './pkg-utils';
export { VerdaccioError, API_ERROR, SUPPORT_ERRORS, APP_ERROR } from './error-utils';
export {
TOKEN_BASIC,
TOKEN_BEARER,
HTTP_STATUS,
API_MESSAGE,
HEADERS,
DIST_TAGS,
CHARACTER_ENCODING,
HEADER_TYPE,
LATEST,
DEFAULT_MIN_LIMIT_PASSWORD,
DEFAULT_USER,
USERS,
} from './constants';
export {
fileUtils,
pkgUtils,

View File

@@ -1,9 +1,9 @@
import _ from 'lodash';
import { HTTP_STATUS } from '../src/constants';
import {
getNotFound,
VerdaccioError,
HTTP_STATUS,
getConflict,
getBadData,
getInternalError,

View File

@@ -1,5 +1,13 @@
# Change Log
## 11.0.0-6-next.4
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
## 10.0.0-alpha.3
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/file-locking",
"version": "11.0.0-alpha.3",
"version": "11.0.0-6-next.4",
"description": "library that handle file locking",
"keywords": [
"private",
@@ -17,7 +17,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"repository": {
@@ -40,7 +40,7 @@
"lockfile": "1.0.4"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.8"
"@verdaccio/types": "workspace:11.0.0-6-next.9"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,24 @@
# Change Log
## 11.0.0-6-next.9
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [154b2ecd]
- @verdaccio/core@6.0.0-6-next.2
- @verdaccio/file-locking@11.0.0-6-next.4
## 11.0.0-6-next.8
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "verdaccio-htpasswd",
"version": "11.0.0-6-next.8",
"version": "11.0.0-6-next.9",
"description": "htpasswd auth plugin for Verdaccio",
"keywords": [
"private",
@@ -30,12 +30,12 @@
"build"
],
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"dependencies": {
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/file-locking": "workspace:11.0.0-alpha.3",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"@verdaccio/file-locking": "workspace:11.0.0-6-next.4",
"apache-md5": "1.1.7",
"bcryptjs": "2.4.3",
"core-js": "3.17.2",
@@ -44,7 +44,7 @@
},
"devDependencies": {
"@types/bcryptjs": "2.4.2",
"@verdaccio/types": "workspace:11.0.0-6-next.8",
"@verdaccio/types": "workspace:11.0.0-6-next.9",
"mockdate": "3.0.5"
},
"scripts": {

View File

@@ -5,7 +5,7 @@ import bcrypt from 'bcryptjs';
import createError, { HttpError } from 'http-errors';
import { readFile } from '@verdaccio/file-locking';
import { Callback } from '@verdaccio/types';
import { API_ERROR, HTTP_STATUS } from '@verdaccio/commons-api';
import { API_ERROR, HTTP_STATUS } from '@verdaccio/core';
import crypt3 from './crypt3';

View File

@@ -7,9 +7,6 @@
"include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"],
"references": [
{
"path": "../commons-api"
},
{
"path": "../file-locking"
}

View File

@@ -1,5 +1,19 @@
# Change Log
## 11.0.0-6-next.9
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [154b2ecd]
- @verdaccio/core@6.0.0-6-next.2
- @verdaccio/file-locking@11.0.0-6-next.4
- @verdaccio/streams@11.0.0-6-next.5
## 11.0.0-6-next.8
### Major Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/local-storage",
"version": "11.0.0-6-next.8",
"version": "11.0.0-6-next.9",
"description": "Local storage implementation",
"keywords": [
"private",
@@ -37,10 +37,9 @@
"npm": ">=7"
},
"dependencies": {
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/core": "workspace:6.0.0-6-next.1",
"@verdaccio/file-locking": "workspace:11.0.0-alpha.3",
"@verdaccio/streams": "workspace:11.0.0-6-next.4",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"@verdaccio/file-locking": "workspace:11.0.0-6-next.4",
"@verdaccio/streams": "workspace:11.0.0-6-next.5",
"async": "3.2.1",
"core-js": "3.17.2",
"debug": "4.3.2",
@@ -52,9 +51,9 @@
},
"devDependencies": {
"@types/minimatch": "3.0.5",
"@verdaccio/types": "workspace:11.0.0-6-next.8",
"@verdaccio/config": "workspace:6.0.0-6-next.8",
"@verdaccio/utils": "workspace:6.0.0-6-next.6",
"@verdaccio/types": "workspace:11.0.0-6-next.9",
"@verdaccio/config": "workspace:6.0.0-6-next.9",
"@verdaccio/utils": "workspace:6.0.0-6-next.7",
"minimatch": "3.0.4",
"tmp-promise": "3.0.2"
},

View File

@@ -8,7 +8,7 @@ import _ from 'lodash';
import { UploadTarball, ReadTarball } from '@verdaccio/streams';
import { unlockFile, readFile } from '@verdaccio/file-locking';
import { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';
import { getCode, getInternalError, getNotFound, VerdaccioError } from '@verdaccio/commons-api';
import { VerdaccioError, errorUtils } from '@verdaccio/core';
import { unlinkPromise, rmdirPromise, readFilePromise } from './fs';
export const fileExist = 'EEXISTS';
@@ -19,7 +19,7 @@ export const packageJSONFileName = 'package.json';
const debug = buildDebug('verdaccio:plugin:local-storage:local-fs');
export const fSError = function (message: string, code = 409): VerdaccioError {
const err: VerdaccioError = getCode(code, message);
const err: VerdaccioError = errorUtils.getCode(code, message);
// FIXME: we should return http-status codes here instead, future improvement
// @ts-ignore
err.code = message;
@@ -118,9 +118,9 @@ export default class LocalFS implements ILocalFSPackageManager {
if (_.isNil(err) === false) {
if (err.code === resourceNotAvailable) {
return unLockCallback(getInternalError('resource temporarily unavailable'));
return unLockCallback(errorUtils.getInternalError('resource temporarily unavailable'));
} else if (err.code === noSuchFile) {
return unLockCallback(getNotFound());
return unLockCallback(errorUtils.getNotFound());
} else {
return unLockCallback(err);
}

View File

@@ -1,14 +0,0 @@
import { Logger } from '@verdaccio/types';
const logger: Logger = {
warn: jest.fn(),
error: jest.fn(),
// fatal: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
child: jest.fn(),
http: jest.fn(),
trace: jest.fn(),
};
export default logger;

View File

@@ -2,7 +2,7 @@
import path from 'path';
import { dirSync } from 'tmp-promise';
import { IPluginStorage, PluginOptions } from '@verdaccio/types';
import { IPluginStorage, Logger, PluginOptions } from '@verdaccio/types';
import LocalDatabase, { ERROR_DB_LOCKED } from '../src/local-database';
@@ -16,8 +16,15 @@ jest.mock('../src/fs', () => ({
writeFilePromise: () => mockWrite(),
}));
// FIXME: remove this mocks imports
import logger from './__mocks__/Logger';
const logger: Logger = {
error: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
child: jest.fn(),
warn: jest.fn(),
http: jest.fn(),
trace: jest.fn(),
};
// @ts-expect-error
const optionsPlugin: PluginOptions<{}> = {

View File

@@ -2,18 +2,25 @@ import path from 'path';
import fs from 'fs';
import { dirSync } from 'tmp-promise';
import { ILocalPackageManager, Package } from '@verdaccio/types';
import { ILocalPackageManager, Logger, Package } from '@verdaccio/types';
import LocalDriver, { fileExist, fSError, noSuchFile, resourceNotAvailable } from '../src/local-fs';
// FIXME: remove this mocks imports
// eslint-disable-next-line jest/no-mocks-import
import logger from './__mocks__/Logger';
import pkg from './__fixtures__/pkg';
let localTempStorage: string;
const pkgFileName = 'package.json';
const logger: Logger = {
error: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
child: jest.fn(),
warn: jest.fn(),
http: jest.fn(),
trace: jest.fn(),
};
describe('Local FS test', () => {
let tmpFolder;
beforeAll(() => {

View File

@@ -2,12 +2,19 @@
import fs from 'fs';
import path from 'path';
import { dirSync } from 'tmp-promise';
import { Token } from '@verdaccio/types';
import { Logger, Token } from '@verdaccio/types';
import LocalDatabase from '../src/local-database';
// FIXME: remove this mocks imports
import logger from './__mocks__/Logger';
const logger: Logger = {
error: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
child: jest.fn(),
warn: jest.fn(),
http: jest.fn(),
trace: jest.fn(),
};
describe('Local Database', () => {
let tmpFolder;

View File

@@ -1,13 +1,20 @@
import path from 'path';
import { Logger } from '@verdaccio/types';
import * as readFile from '../src/fs';
import { findPackages, _dbGenPath } from '../src/utils';
import { loadPrivatePackages } from '../src/pkg-utils';
import { noSuchFile } from '../src/local-fs';
// FIXME: remove this mocks imports
// eslint-disable-next-line jest/no-mocks-import
import logger from './__mocks__/Logger';
const logger: Logger = {
error: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
child: jest.fn(),
warn: jest.fn(),
http: jest.fn(),
trace: jest.fn(),
};
describe('Utitlies', () => {
const loadDb = (name): string => path.join(__dirname, '__fixtures__/databases', `${name}.json`);

View File

@@ -7,9 +7,6 @@
"include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"],
"references": [
{
"path": "../commons-api"
},
{
"path": "../file-locking"
},

View File

@@ -1,5 +1,13 @@
# Change Log
## 11.0.0-6-next.4
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
## 10.0.0-alpha.3
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/readme",
"version": "11.0.0-alpha.3",
"version": "11.0.0-6-next.4",
"description": "Readme markdown parser",
"keywords": [
"private",
@@ -20,7 +20,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"repository": {
@@ -45,7 +45,7 @@
"marked": "3.0.2"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.8"
"@verdaccio/types": "workspace:11.0.0-6-next.9"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,28 @@
# @verdaccio/fastify-migration
## 6.0.0-6-next.14
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- b702ea36: abort search request support for proxy
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [b702ea36]
- Updated dependencies [154b2ecd]
- @verdaccio/auth@6.0.0-6-next.13
- @verdaccio/config@6.0.0-6-next.9
- @verdaccio/logger@6.0.0-6-next.6
- @verdaccio/store@6.0.0-6-next.14
## 6.0.0-6-next.13
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/fastify-migration",
"version": "6.0.0-6-next.13",
"version": "6.0.0-6-next.14",
"description": "Fastify server migration package",
"keywords": [
"private",
@@ -19,7 +19,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=12",
"node": ">=14",
"npm": ">=6"
},
"repository": {
@@ -34,18 +34,20 @@
"access": "public"
},
"dependencies": {
"@verdaccio/config": "workspace:6.0.0-6-next.8",
"@verdaccio/auth": "workspace:6.0.0-6-next.12",
"@verdaccio/logger": "workspace:6.0.0-6-next.5",
"@verdaccio/store": "workspace:6.0.0-6-next.13",
"@verdaccio/config": "workspace:6.0.0-6-next.9",
"@verdaccio/auth": "workspace:6.0.0-6-next.13",
"@verdaccio/logger": "workspace:6.0.0-6-next.6",
"@verdaccio/store": "workspace:6.0.0-6-next.14",
"abortcontroller-polyfill": "1.7.3",
"core-js": "3.17.2",
"debug": "4.3.2",
"fastify": "3.20.2",
"fastify-plugin": "3.0.0"
"fastify-plugin": "3.0.0",
"semver": "7.3.5"
},
"devDependencies": {
"@types/node": "16.9.1",
"@verdaccio/types": "workspace:11.0.0-6-next.8",
"@verdaccio/types": "workspace:11.0.0-6-next.9",
"ts-node": "10.2.1"
},
"scripts": {

View File

@@ -9,12 +9,18 @@ async function searchRoute(fastify) {
// TODO: add validations for query, some parameters are mandatory
// TODO: review which query fields are mandatory
const abort = new AbortController();
request.on('aborted', () => {
abort.abort();
});
const { url, query } = request;
const storage = fastify.storage;
const data = await storage.searchManager?.search({
query: query,
url: url,
query,
url,
abort,
});
logger.http('search endpoint');

View File

@@ -1 +1,7 @@
import semver from 'semver';
if (semver.lte(process.version, 'v15.0.0')) {
global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;
}
export { default } from './server';

View File

@@ -1,5 +1,13 @@
# Change Log
## 11.0.0-6-next.5
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
## 11.0.0-6-next.4
### Major Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/streams",
"version": "11.0.0-6-next.4",
"version": "11.0.0-6-next.5",
"description": "Stream extension for Verdaccio",
"keywords": [
"private",
@@ -19,7 +19,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"repository": {
@@ -34,7 +34,7 @@
"access": "public"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.8"
"@verdaccio/types": "workspace:11.0.0-6-next.9"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,25 @@
# Change Log
## 11.0.0-6-next.8
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [154b2ecd]
- @verdaccio/core@6.0.0-6-next.2
- @verdaccio/url@11.0.0-6-next.6
- @verdaccio/utils@6.0.0-6-next.7
## 11.0.0-6-next.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/tarball",
"version": "11.0.0-6-next.7",
"version": "11.0.0-6-next.8",
"description": "tarball utilities resolver",
"keywords": [
"private",
@@ -19,7 +19,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"repository": {
@@ -34,13 +34,13 @@
"access": "public"
},
"dependencies": {
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/url": "workspace:11.0.0-6-next.5",
"@verdaccio/utils": "workspace:6.0.0-6-next.6",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"@verdaccio/url": "workspace:11.0.0-6-next.6",
"@verdaccio/utils": "workspace:6.0.0-6-next.7",
"lodash": "4.17.21"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.8",
"@verdaccio/types": "workspace:11.0.0-6-next.9",
"express": "4.17.1",
"node-mocks-http": "1.10.1"
},

View File

@@ -1,5 +1,5 @@
import * as httpMocks from 'node-mocks-http';
import { HEADERS } from '@verdaccio/commons-api';
import { HEADERS } from '@verdaccio/core';
import { convertDistRemoteToLocalTarballUrls } from '../src';
describe('convertDistRemoteToLocalTarballUrls', () => {

View File

@@ -10,9 +10,6 @@
{
"path": "../../utils"
},
{
"path": "../commons-api"
},
{
"path": "../url"
}

View File

@@ -1,5 +1,17 @@
# Change Log
## 11.0.0-6-next.9
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
## 11.0.0-6-next.8
### Major Changes

View File

@@ -532,7 +532,7 @@ declare module '@verdaccio/types' {
// FIXME: error should be export type `VerdaccioError = HttpError & { code: number };`
// instead of AuthError
// but this type is on @verdaccio/commons-api and cannot be used here yet (I don't know why)
// but this type is on @verdaccio/core and cannot be used here yet (I don't know why)
interface HttpError extends Error {
status: number;
statusCode: number;

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/types",
"version": "11.0.0-6-next.8",
"version": "11.0.0-6-next.9",
"description": "verdaccio types definitions",
"keywords": [
"private",
@@ -17,7 +17,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"repository": {

View File

@@ -1,5 +1,23 @@
# Change Log
## 11.0.0-6-next.6
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [154b2ecd]
- @verdaccio/core@6.0.0-6-next.2
## 11.0.0-6-next.5
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/url",
"version": "11.0.0-6-next.5",
"version": "11.0.0-6-next.6",
"description": "url utilities resolver",
"keywords": [
"private",
@@ -19,7 +19,7 @@
"license": "MIT",
"homepage": "https://verdaccio.org",
"engines": {
"node": ">=10",
"node": ">=14",
"npm": ">=6"
},
"repository": {
@@ -34,13 +34,13 @@
"access": "public"
},
"dependencies": {
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"debug": "4.3.2",
"lodash": "4.17.21",
"validator": "13.6.0"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.8",
"@verdaccio/types": "workspace:11.0.0-6-next.9",
"node-mocks-http": "1.10.1"
},
"scripts": {

View File

@@ -1,7 +1,7 @@
import { URL } from 'url';
import buildDebug from 'debug';
import isURLValidator from 'validator/lib/isURL';
import { HEADERS } from '@verdaccio/commons-api';
import { HEADERS } from '@verdaccio/core';
const debug = buildDebug('verdaccio:core:url');

View File

@@ -1,6 +1,6 @@
import * as httpMocks from 'node-mocks-http';
import { HEADERS } from '@verdaccio/commons-api';
import { HEADERS } from '@verdaccio/core';
import { getPublicUrl } from '../src';
describe('host', () => {

View File

@@ -5,10 +5,5 @@
"outDir": "./build"
},
"include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"],
"references": [
{
"path": "../commons-api"
}
]
"exclude": ["src/**/*.test.ts"]
}

View File

@@ -1,5 +1,25 @@
# @verdaccio/hooks
## 6.0.0-6-next.8
### Major Changes
- 794af76c: Remove Node 12 support
- We need move to the new `undici` and does not support Node.js 12
### Minor Changes
- b702ea36: abort search request support for proxy
- 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
### Patch Changes
- Updated dependencies [794af76c]
- Updated dependencies [154b2ecd]
- @verdaccio/core@6.0.0-6-next.2
- @verdaccio/logger@6.0.0-6-next.6
## 6.0.0-6-next.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/hooks",
"version": "6.0.0-6-next.7",
"version": "6.0.0-6-next.8",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -26,24 +26,23 @@
"verdaccio"
],
"engines": {
"node": ">=12",
"node": ">=14",
"npm": ">=6"
},
"dependencies": {
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/logger": "workspace:6.0.0-6-next.5",
"@verdaccio/core": "workspace:6.0.0-6-next.2",
"@verdaccio/logger": "workspace:6.0.0-6-next.6",
"core-js": "3.17.2",
"debug": "4.3.2",
"handlebars": "4.7.7",
"undici": "4.4.7",
"undici": "4.7.3",
"undici-fetch": "1.0.0-rc.4"
},
"devDependencies": {
"@types/node": "16.9.1",
"@verdaccio/auth": "workspace:6.0.0-6-next.12",
"@verdaccio/commons-api": "workspace:11.0.0-6-next.4",
"@verdaccio/config": "workspace:6.0.0-6-next.8",
"@verdaccio/types": "workspace:11.0.0-6-next.8"
"@verdaccio/auth": "workspace:6.0.0-6-next.13",
"@verdaccio/config": "workspace:6.0.0-6-next.9",
"@verdaccio/types": "workspace:11.0.0-6-next.9"
},
"scripts": {
"clean": "rimraf ./build",

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