@verdaccio/api 9.0.0-next-9.9 → 9.0.0-next-9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/v1/search.js +11 -10
- package/build/v1/search.js.map +1 -1
- package/build/v1/search.mjs +11 -10
- package/build/v1/search.mjs.map +1 -1
- package/package.json +9 -9
package/build/v1/search.js
CHANGED
|
@@ -15,10 +15,8 @@ function search_default(route, auth, storage, logger) {
|
|
|
15
15
|
function checkAccess(pkg, auth, remoteUser) {
|
|
16
16
|
return new Promise((resolve, reject) => {
|
|
17
17
|
auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function(err, allowed) {
|
|
18
|
-
if (err) if (err.status && String(err.status).match(/^4\d\d$/))
|
|
19
|
-
|
|
20
|
-
return resolve(null);
|
|
21
|
-
} else reject(err);
|
|
18
|
+
if (err) if (err.status && String(err.status).match(/^4\d\d$/)) return resolve(null);
|
|
19
|
+
else reject(err);
|
|
22
20
|
else return resolve(allowed ? pkg : null);
|
|
23
21
|
});
|
|
24
22
|
});
|
|
@@ -28,13 +26,14 @@ function search_default(route, auth, storage, logger) {
|
|
|
28
26
|
let [size, from] = ["size", "from"].map((k) => query[k]);
|
|
29
27
|
let data;
|
|
30
28
|
const abort = new AbortController();
|
|
31
|
-
|
|
29
|
+
const onClientClose = () => {
|
|
32
30
|
debug$1("search web aborted");
|
|
33
31
|
abort.abort();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
from = parseInt(from, 10) || 0;
|
|
32
|
+
};
|
|
33
|
+
req.socket.on("close", onClientClose);
|
|
37
34
|
try {
|
|
35
|
+
size = parseInt(Number.isFinite(size) ? size : "20", 10);
|
|
36
|
+
from = parseInt(Number.isFinite(from) ? from : "0", 10);
|
|
38
37
|
debug$1("storage search initiated");
|
|
39
38
|
data = await storage.search({
|
|
40
39
|
query,
|
|
@@ -44,7 +43,7 @@ function search_default(route, auth, storage, logger) {
|
|
|
44
43
|
debug$1("storage items tota: %o", data.length);
|
|
45
44
|
const final = (await Promise.all(data.map((pkgItem) => {
|
|
46
45
|
return checkAccess(pkgItem, auth, req.remote_user);
|
|
47
|
-
}))).filter((i) => i !== null).slice(from, size);
|
|
46
|
+
}))).filter((i) => i !== null).slice(from, from + size);
|
|
48
47
|
logger.debug(`search results ${final?.length}`);
|
|
49
48
|
const response = {
|
|
50
49
|
objects: final,
|
|
@@ -54,8 +53,10 @@ function search_default(route, auth, storage, logger) {
|
|
|
54
53
|
res.status(_verdaccio_core.HTTP_STATUS.OK).json(response);
|
|
55
54
|
} catch (error) {
|
|
56
55
|
logger.error({ error }, "search endpoint has failed @{error.message}");
|
|
57
|
-
next(
|
|
56
|
+
next(error);
|
|
58
57
|
return;
|
|
58
|
+
} finally {
|
|
59
|
+
req.socket.off("close", onClientClose);
|
|
59
60
|
}
|
|
60
61
|
});
|
|
61
62
|
}
|
package/build/v1/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","names":[],"sources":["../../src/v1/search.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nimport type { Auth } from '@verdaccio/auth';\nimport type { searchUtils } from '@verdaccio/core';\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { SEARCH_API_ENDPOINTS } from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Logger, Manifest } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:api:search');\n\n/**\n * Endpoint for npm search v1\n * Empty value\n * - {\"objects\":[],\"total\":0,\"time\":\"Sun Jul 25 2021 14:09:11 GMT+0000 (Coordinated Universal Time)\"}\n * req: 'GET /-/v1/search?text=react&size=20&frpom=0&quality=0.65&popularity=0.98&maintenance=0.5'\n */\nexport default function (route, auth: Auth, storage: Storage, logger: Logger): void {\n function checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n
|
|
1
|
+
{"version":3,"file":"search.js","names":[],"sources":["../../src/v1/search.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nimport type { Auth } from '@verdaccio/auth';\nimport type { searchUtils } from '@verdaccio/core';\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { SEARCH_API_ENDPOINTS } from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Logger, Manifest } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:api:search');\n\n/**\n * Endpoint for npm search v1\n * Empty value\n * - {\"objects\":[],\"total\":0,\"time\":\"Sun Jul 25 2021 14:09:11 GMT+0000 (Coordinated Universal Time)\"}\n * req: 'GET /-/v1/search?text=react&size=20&frpom=0&quality=0.65&popularity=0.98&maintenance=0.5'\n */\nexport default function (route, auth: Auth, storage: Storage, logger: Logger): void {\n function checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n }\n\n route.get(SEARCH_API_ENDPOINTS.search, async (req, res, next) => {\n const { query, url } = req;\n let [size, from] = ['size', 'from'].map((k) => query[k]);\n let data;\n const abort = new AbortController();\n const onClientClose = (): void => {\n debug('search web aborted');\n abort.abort();\n };\n req.socket.on('close', onClientClose);\n\n try {\n size = parseInt(Number.isFinite(size) ? size : '20', 10);\n from = parseInt(Number.isFinite(from) ? from : '0', 10);\n\n debug('storage search initiated');\n data = await storage.search({\n query,\n url,\n abort,\n });\n debug('storage items tota: %o', data.length);\n const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final: searchUtils.SearchItemPkg[] = checkAccessPromises\n .filter((i) => i !== null)\n .slice(from, from + size);\n logger.debug(`search results ${final?.length}`);\n\n const response: searchUtils.SearchResults = {\n objects: final,\n total: final.length,\n time: new Date().toUTCString(),\n };\n\n res.status(HTTP_STATUS.OK).json(response);\n } catch (error) {\n logger.error({ error }, 'search endpoint has failed @{error.message}');\n next(error);\n return;\n } finally {\n req.socket.off('close', onClientClose);\n }\n });\n}\n"],"mappings":";;;;;;AASA,IAAM,WAAA,GAAA,MAAA,SAAmB,uBAAuB;;;;;;;AAQhD,SAAA,eAAyB,OAAO,MAAY,SAAkB,QAAsB;CAClF,SAAS,YAAY,KAAU,MAAW,YAAsC;AAC9E,SAAO,IAAI,SAAS,SAAS,WAAW;AACtC,QAAK,aAAa,EAAE,aAAa,KAAK,SAAS,MAAM,EAAE,YAAY,SAAU,KAAK,SAAS;AACzF,QAAI,IACF,KAAI,IAAI,UAAU,OAAO,IAAI,OAAO,CAAC,MAAM,UAAU,CAGnD,QAAO,QAAQ,KAAK;QAEpB,QAAO,IAAI;QAGb,QAAO,QAAQ,UAAU,MAAM,KAAK;KAEtC;IACF;;AAGJ,OAAM,IAAI,sBAAA,qBAAqB,QAAQ,OAAO,KAAK,KAAK,SAAS;EAC/D,MAAM,EAAE,OAAO,QAAQ;EACvB,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG;EACxD,IAAI;EACJ,MAAM,QAAQ,IAAI,iBAAiB;EACnC,MAAM,sBAA4B;AAChC,WAAM,qBAAqB;AAC3B,SAAM,OAAO;;AAEf,MAAI,OAAO,GAAG,SAAS,cAAc;AAErC,MAAI;AACF,UAAO,SAAS,OAAO,SAAS,KAAK,GAAG,OAAO,MAAM,GAAG;AACxD,UAAO,SAAS,OAAO,SAAS,KAAK,GAAG,OAAO,KAAK,GAAG;AAEvD,WAAM,2BAA2B;AACjC,UAAO,MAAM,QAAQ,OAAO;IAC1B;IACA;IACA;IACD,CAAC;AACF,WAAM,0BAA0B,KAAK,OAAO;GAO5C,MAAM,SANmD,MAAM,QAAQ,IACrE,KAAK,KAAK,YAAY;AACpB,WAAO,YAAY,SAAS,MAAM,IAAI,YAAY;KAClD,CACH,EAGE,QAAQ,MAAM,MAAM,KAAK,CACzB,MAAM,MAAM,OAAO,KAAK;AAC3B,UAAO,MAAM,kBAAkB,OAAO,SAAS;GAE/C,MAAM,WAAsC;IAC1C,SAAS;IACT,OAAO,MAAM;IACb,uBAAM,IAAI,MAAM,EAAC,aAAa;IAC/B;AAED,OAAI,OAAO,gBAAA,YAAY,GAAG,CAAC,KAAK,SAAS;WAClC,OAAO;AACd,UAAO,MAAM,EAAE,OAAO,EAAE,8CAA8C;AACtE,QAAK,MAAM;AACX;YACQ;AACR,OAAI,OAAO,IAAI,SAAS,cAAc;;GAExC"}
|
package/build/v1/search.mjs
CHANGED
|
@@ -13,10 +13,8 @@ function search_default(route, auth, storage, logger) {
|
|
|
13
13
|
function checkAccess(pkg, auth, remoteUser) {
|
|
14
14
|
return new Promise((resolve, reject) => {
|
|
15
15
|
auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function(err, allowed) {
|
|
16
|
-
if (err) if (err.status && String(err.status).match(/^4\d\d$/))
|
|
17
|
-
|
|
18
|
-
return resolve(null);
|
|
19
|
-
} else reject(err);
|
|
16
|
+
if (err) if (err.status && String(err.status).match(/^4\d\d$/)) return resolve(null);
|
|
17
|
+
else reject(err);
|
|
20
18
|
else return resolve(allowed ? pkg : null);
|
|
21
19
|
});
|
|
22
20
|
});
|
|
@@ -26,13 +24,14 @@ function search_default(route, auth, storage, logger) {
|
|
|
26
24
|
let [size, from] = ["size", "from"].map((k) => query[k]);
|
|
27
25
|
let data;
|
|
28
26
|
const abort = new AbortController();
|
|
29
|
-
|
|
27
|
+
const onClientClose = () => {
|
|
30
28
|
debug("search web aborted");
|
|
31
29
|
abort.abort();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
from = parseInt(from, 10) || 0;
|
|
30
|
+
};
|
|
31
|
+
req.socket.on("close", onClientClose);
|
|
35
32
|
try {
|
|
33
|
+
size = parseInt(Number.isFinite(size) ? size : "20", 10);
|
|
34
|
+
from = parseInt(Number.isFinite(from) ? from : "0", 10);
|
|
36
35
|
debug("storage search initiated");
|
|
37
36
|
data = await storage.search({
|
|
38
37
|
query,
|
|
@@ -42,7 +41,7 @@ function search_default(route, auth, storage, logger) {
|
|
|
42
41
|
debug("storage items tota: %o", data.length);
|
|
43
42
|
const final = (await Promise.all(data.map((pkgItem) => {
|
|
44
43
|
return checkAccess(pkgItem, auth, req.remote_user);
|
|
45
|
-
}))).filter((i) => i !== null).slice(from, size);
|
|
44
|
+
}))).filter((i) => i !== null).slice(from, from + size);
|
|
46
45
|
logger.debug(`search results ${final?.length}`);
|
|
47
46
|
const response = {
|
|
48
47
|
objects: final,
|
|
@@ -52,8 +51,10 @@ function search_default(route, auth, storage, logger) {
|
|
|
52
51
|
res.status(HTTP_STATUS.OK).json(response);
|
|
53
52
|
} catch (error) {
|
|
54
53
|
logger.error({ error }, "search endpoint has failed @{error.message}");
|
|
55
|
-
next(
|
|
54
|
+
next(error);
|
|
56
55
|
return;
|
|
56
|
+
} finally {
|
|
57
|
+
req.socket.off("close", onClientClose);
|
|
57
58
|
}
|
|
58
59
|
});
|
|
59
60
|
}
|
package/build/v1/search.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.mjs","names":[],"sources":["../../src/v1/search.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nimport type { Auth } from '@verdaccio/auth';\nimport type { searchUtils } from '@verdaccio/core';\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { SEARCH_API_ENDPOINTS } from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Logger, Manifest } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:api:search');\n\n/**\n * Endpoint for npm search v1\n * Empty value\n * - {\"objects\":[],\"total\":0,\"time\":\"Sun Jul 25 2021 14:09:11 GMT+0000 (Coordinated Universal Time)\"}\n * req: 'GET /-/v1/search?text=react&size=20&frpom=0&quality=0.65&popularity=0.98&maintenance=0.5'\n */\nexport default function (route, auth: Auth, storage: Storage, logger: Logger): void {\n function checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n
|
|
1
|
+
{"version":3,"file":"search.mjs","names":[],"sources":["../../src/v1/search.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nimport type { Auth } from '@verdaccio/auth';\nimport type { searchUtils } from '@verdaccio/core';\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { SEARCH_API_ENDPOINTS } from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Logger, Manifest } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:api:search');\n\n/**\n * Endpoint for npm search v1\n * Empty value\n * - {\"objects\":[],\"total\":0,\"time\":\"Sun Jul 25 2021 14:09:11 GMT+0000 (Coordinated Universal Time)\"}\n * req: 'GET /-/v1/search?text=react&size=20&frpom=0&quality=0.65&popularity=0.98&maintenance=0.5'\n */\nexport default function (route, auth: Auth, storage: Storage, logger: Logger): void {\n function checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n }\n\n route.get(SEARCH_API_ENDPOINTS.search, async (req, res, next) => {\n const { query, url } = req;\n let [size, from] = ['size', 'from'].map((k) => query[k]);\n let data;\n const abort = new AbortController();\n const onClientClose = (): void => {\n debug('search web aborted');\n abort.abort();\n };\n req.socket.on('close', onClientClose);\n\n try {\n size = parseInt(Number.isFinite(size) ? size : '20', 10);\n from = parseInt(Number.isFinite(from) ? from : '0', 10);\n\n debug('storage search initiated');\n data = await storage.search({\n query,\n url,\n abort,\n });\n debug('storage items tota: %o', data.length);\n const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final: searchUtils.SearchItemPkg[] = checkAccessPromises\n .filter((i) => i !== null)\n .slice(from, from + size);\n logger.debug(`search results ${final?.length}`);\n\n const response: searchUtils.SearchResults = {\n objects: final,\n total: final.length,\n time: new Date().toUTCString(),\n };\n\n res.status(HTTP_STATUS.OK).json(response);\n } catch (error) {\n logger.error({ error }, 'search endpoint has failed @{error.message}');\n next(error);\n return;\n } finally {\n req.socket.off('close', onClientClose);\n }\n });\n}\n"],"mappings":";;;;AASA,IAAM,QAAQ,WAAW,uBAAuB;;;;;;;AAQhD,SAAA,eAAyB,OAAO,MAAY,SAAkB,QAAsB;CAClF,SAAS,YAAY,KAAU,MAAW,YAAsC;AAC9E,SAAO,IAAI,SAAS,SAAS,WAAW;AACtC,QAAK,aAAa,EAAE,aAAa,KAAK,SAAS,MAAM,EAAE,YAAY,SAAU,KAAK,SAAS;AACzF,QAAI,IACF,KAAI,IAAI,UAAU,OAAO,IAAI,OAAO,CAAC,MAAM,UAAU,CAGnD,QAAO,QAAQ,KAAK;QAEpB,QAAO,IAAI;QAGb,QAAO,QAAQ,UAAU,MAAM,KAAK;KAEtC;IACF;;AAGJ,OAAM,IAAI,qBAAqB,QAAQ,OAAO,KAAK,KAAK,SAAS;EAC/D,MAAM,EAAE,OAAO,QAAQ;EACvB,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG;EACxD,IAAI;EACJ,MAAM,QAAQ,IAAI,iBAAiB;EACnC,MAAM,sBAA4B;AAChC,SAAM,qBAAqB;AAC3B,SAAM,OAAO;;AAEf,MAAI,OAAO,GAAG,SAAS,cAAc;AAErC,MAAI;AACF,UAAO,SAAS,OAAO,SAAS,KAAK,GAAG,OAAO,MAAM,GAAG;AACxD,UAAO,SAAS,OAAO,SAAS,KAAK,GAAG,OAAO,KAAK,GAAG;AAEvD,SAAM,2BAA2B;AACjC,UAAO,MAAM,QAAQ,OAAO;IAC1B;IACA;IACA;IACD,CAAC;AACF,SAAM,0BAA0B,KAAK,OAAO;GAO5C,MAAM,SANmD,MAAM,QAAQ,IACrE,KAAK,KAAK,YAAY;AACpB,WAAO,YAAY,SAAS,MAAM,IAAI,YAAY;KAClD,CACH,EAGE,QAAQ,MAAM,MAAM,KAAK,CACzB,MAAM,MAAM,OAAO,KAAK;AAC3B,UAAO,MAAM,kBAAkB,OAAO,SAAS;GAE/C,MAAM,WAAsC;IAC1C,SAAS;IACT,OAAO,MAAM;IACb,uBAAM,IAAI,MAAM,EAAC,aAAa;IAC/B;AAED,OAAI,OAAO,YAAY,GAAG,CAAC,KAAK,SAAS;WAClC,OAAO;AACd,UAAO,MAAM,EAAE,OAAO,EAAE,8CAA8C;AACtE,QAAK,MAAM;AACX;YACQ;AACR,OAAI,OAAO,IAAI,SAAS,cAAc;;GAExC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/api",
|
|
3
|
-
"version": "9.0.0-next-9.
|
|
3
|
+
"version": "9.0.0-next-9.11",
|
|
4
4
|
"description": "Verdaccio Registry API",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -33,19 +33,19 @@
|
|
|
33
33
|
},
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@verdaccio/auth": "9.0.0-next-9.
|
|
37
|
-
"@verdaccio/config": "9.0.0-next-9.
|
|
38
|
-
"@verdaccio/core": "9.0.0-next-9.
|
|
39
|
-
"@verdaccio/logger": "9.0.0-next-9.
|
|
40
|
-
"@verdaccio/middleware": "9.0.0-next-9.
|
|
41
|
-
"@verdaccio/store": "9.0.0-next-9.
|
|
36
|
+
"@verdaccio/auth": "9.0.0-next-9.11",
|
|
37
|
+
"@verdaccio/config": "9.0.0-next-9.11",
|
|
38
|
+
"@verdaccio/core": "9.0.0-next-9.11",
|
|
39
|
+
"@verdaccio/logger": "9.0.0-next-9.11",
|
|
40
|
+
"@verdaccio/middleware": "9.0.0-next-9.11",
|
|
41
|
+
"@verdaccio/store": "9.0.0-next-9.11",
|
|
42
42
|
"debug": "4.4.3",
|
|
43
43
|
"express": "5.2.1",
|
|
44
44
|
"lodash-es": "4.17.23"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@verdaccio/test-helper": "5.0.0-next-9.
|
|
48
|
-
"@verdaccio/types": "14.0.0-next-9.
|
|
47
|
+
"@verdaccio/test-helper": "5.0.0-next-9.11",
|
|
48
|
+
"@verdaccio/types": "14.0.0-next-9.5",
|
|
49
49
|
"@types/lodash-es": "4.17.12",
|
|
50
50
|
"mockdate": "3.0.5",
|
|
51
51
|
"nock": "13.5.6",
|