@verdaccio/middleware 7.0.0-next-7.18 → 7.0.0-next-7.20

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/build/index.js.map +1 -1
  3. package/build/middlewares/allow.js +2 -2
  4. package/build/middlewares/allow.js.map +1 -1
  5. package/build/middlewares/antiLoop.js +1 -1
  6. package/build/middlewares/antiLoop.js.map +1 -1
  7. package/build/middlewares/encode-pkg.js.map +1 -1
  8. package/build/middlewares/error.js +1 -1
  9. package/build/middlewares/error.js.map +1 -1
  10. package/build/middlewares/final.js +2 -2
  11. package/build/middlewares/final.js.map +1 -1
  12. package/build/middlewares/json.js.map +1 -1
  13. package/build/middlewares/log.js +1 -1
  14. package/build/middlewares/log.js.map +1 -1
  15. package/build/middlewares/match.js.map +1 -1
  16. package/build/middlewares/media.js.map +1 -1
  17. package/build/middlewares/rate-limit.js +1 -1
  18. package/build/middlewares/rate-limit.js.map +1 -1
  19. package/build/middlewares/security-headers.js.map +1 -1
  20. package/build/middlewares/user-agent.js.map +1 -1
  21. package/build/middlewares/validation.js.map +1 -1
  22. package/build/middlewares/web/index.js +1 -1
  23. package/build/middlewares/web/index.js.map +1 -1
  24. package/build/middlewares/web/render-web.js +17 -7
  25. package/build/middlewares/web/render-web.js.map +1 -1
  26. package/build/middlewares/web/security.js.map +1 -1
  27. package/build/middlewares/web/utils/manifest.js +8 -2
  28. package/build/middlewares/web/utils/manifest.js.map +1 -1
  29. package/build/middlewares/web/utils/renderHTML.js +14 -12
  30. package/build/middlewares/web/utils/renderHTML.js.map +1 -1
  31. package/build/middlewares/web/utils/template.js +7 -7
  32. package/build/middlewares/web/utils/template.js.map +1 -1
  33. package/build/middlewares/web/utils/web-utils.js +2 -2
  34. package/build/middlewares/web/utils/web-utils.js.map +1 -1
  35. package/build/middlewares/web/web-api.js +1 -1
  36. package/build/middlewares/web/web-api.js.map +1 -1
  37. package/build/middlewares/web/web-middleware.js +1 -1
  38. package/build/middlewares/web/web-middleware.js.map +1 -1
  39. package/build/types.js.map +1 -1
  40. package/package.json +11 -10
  41. package/src/middlewares/web/render-web.ts +9 -1
  42. package/src/middlewares/web/utils/manifest.ts +9 -1
  43. package/src/middlewares/web/utils/renderHTML.ts +2 -0
  44. package/src/middlewares/web/utils/template.ts +6 -6
  45. package/test/__snapshots__/template.test.ts.snap +49 -69
  46. package/test/config/favicon.ico +0 -0
  47. package/test/config/file-logo.yaml +1 -0
  48. package/test/config/http-logo.yaml +26 -0
  49. package/test/config/no-logo.yaml +1 -0
  50. package/test/manifest.test.ts +12 -0
  51. package/test/render.spec.ts +16 -0
  52. package/test/template.test.ts +10 -15
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @verdaccio/middleware
2
2
 
3
+ ## 7.0.0-next-7.20
4
+
5
+ ### Patch Changes
6
+
7
+ - ccc7bd1: fix(middleware): link to favicon in template
8
+ - Updated dependencies [ccc7bd1]
9
+ - @verdaccio/url@12.0.0-next-7.20
10
+ - @verdaccio/core@7.0.0-next-7.20
11
+ - @verdaccio/config@7.0.0-next-7.20
12
+ - @verdaccio/utils@7.0.0-next-7.20
13
+
14
+ ## 7.0.0-next-7.19
15
+
16
+ ### Patch Changes
17
+
18
+ - 2a6ee33: fix(middleware): custom favicon
19
+ - 6c5f7a4: fix(middleware): link to favicon in template
20
+ - Updated dependencies [c31aec8]
21
+ - @verdaccio/config@7.0.0-next-7.19
22
+ - @verdaccio/core@7.0.0-next-7.19
23
+ - @verdaccio/url@12.0.0-next-7.19
24
+ - @verdaccio/utils@7.0.0-next-7.19
25
+
3
26
  ## 7.0.0-next-7.18
4
27
 
5
28
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_match","require","_securityHeaders","_validation","_media","_encodePkg","_json","_antiLoop","_final","_allow","_rateLimit","_userAgent","_web","_error","_log","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["../src/index.ts"],"sourcesContent":["export { match } from './middlewares/match';\nexport { setSecurityWebHeaders } from './middlewares/security-headers';\nexport { validateName, validatePackage } from './middlewares/validation';\nexport { media } from './middlewares/media';\nexport { encodeScopePackage } from './middlewares/encode-pkg';\nexport { expectJson } from './middlewares/json';\nexport { antiLoop } from './middlewares/antiLoop';\nexport { final } from './middlewares/final';\nexport { allow } from './middlewares/allow';\nexport { rateLimit } from './middlewares/rate-limit';\nexport { userAgent } from './middlewares/user-agent';\nexport { webMiddleware, renderWebMiddleware } from './middlewares/web';\nexport { errorReportingMiddleware, handleError } from './middlewares/error';\nexport {\n log,\n LOG_STATUS_MESSAGE,\n LOG_VERDACCIO_BYTES,\n LOG_VERDACCIO_ERROR,\n} from './middlewares/log';\nexport * from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AACA,IAAAS,UAAA,GAAAT,OAAA;AACA,IAAAU,UAAA,GAAAV,OAAA;AACA,IAAAW,IAAA,GAAAX,OAAA;AACA,IAAAY,MAAA,GAAAZ,OAAA;AACA,IAAAa,IAAA,GAAAb,OAAA;AAMA,IAAAc,MAAA,GAAAd,OAAA;AAAAe,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":["_match","require","_securityHeaders","_validation","_media","_encodePkg","_json","_antiLoop","_final","_allow","_rateLimit","_userAgent","_web","_error","_log","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["../src/index.ts"],"sourcesContent":["export { match } from './middlewares/match';\nexport { setSecurityWebHeaders } from './middlewares/security-headers';\nexport { validateName, validatePackage } from './middlewares/validation';\nexport { media } from './middlewares/media';\nexport { encodeScopePackage } from './middlewares/encode-pkg';\nexport { expectJson } from './middlewares/json';\nexport { antiLoop } from './middlewares/antiLoop';\nexport { final } from './middlewares/final';\nexport { allow } from './middlewares/allow';\nexport { rateLimit } from './middlewares/rate-limit';\nexport { userAgent } from './middlewares/user-agent';\nexport { webMiddleware, renderWebMiddleware } from './middlewares/web';\nexport { errorReportingMiddleware, handleError } from './middlewares/error';\nexport {\n log,\n LOG_STATUS_MESSAGE,\n LOG_VERDACCIO_BYTES,\n LOG_VERDACCIO_ERROR,\n} from './middlewares/log';\nexport * from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AACA,IAAAS,UAAA,GAAAT,OAAA;AACA,IAAAU,UAAA,GAAAV,OAAA;AACA,IAAAW,IAAA,GAAAX,OAAA;AACA,IAAAY,MAAA,GAAAZ,OAAA;AACA,IAAAa,IAAA,GAAAb,OAAA;AAMA,IAAAc,MAAA,GAAAd,OAAA;AAAAe,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -22,7 +22,7 @@ function allow(auth, options = {
22
22
  const packageName = req.params.scope ? `@${req.params.scope}/${req.params.package}` : req.params.package;
23
23
  const packageVersion = req.params.filename ? (0, _utils.getVersionFromTarball)(req.params.filename) : undefined;
24
24
  const remote = req.remote_user;
25
- beforeAll === null || beforeAll === void 0 ? void 0 : beforeAll({
25
+ beforeAll === null || beforeAll === void 0 || beforeAll({
26
26
  action,
27
27
  user: remote === null || remote === void 0 ? void 0 : remote.name
28
28
  }, `[middleware/allow][@{action}] allow for @{user}`);
@@ -34,7 +34,7 @@ function allow(auth, options = {
34
34
  if (error) {
35
35
  next(error);
36
36
  } else if (allowed) {
37
- afterAll === null || afterAll === void 0 ? void 0 : afterAll({
37
+ afterAll === null || afterAll === void 0 || afterAll({
38
38
  action,
39
39
  user: remote === null || remote === void 0 ? void 0 : remote.name
40
40
  }, `[middleware/allow][@{action}] allowed for @{user}`);
@@ -1 +1 @@
1
- {"version":3,"file":"allow.js","names":["_core","require","_utils","allow","auth","options","beforeAll","_a","_b","afterAll","action","req","res","next","pause","packageName","params","scope","package","packageVersion","filename","getVersionFromTarball","undefined","remote","remote_user","user","name","error","allowed","resume","errorUtils","getInternalError","API_ERROR","PLUGIN_ERROR"],"sources":["../../src/middlewares/allow.ts"],"sourcesContent":["import { API_ERROR, errorUtils } from '@verdaccio/core';\nimport { getVersionFromTarball } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function allow<T>(\n auth: T,\n options = {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n beforeAll: (_a: any, _b: any) => {},\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n afterAll: (_a: any, _b: any) => {},\n }\n): Function {\n const { beforeAll, afterAll } = options;\n return function (action: string): Function {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n req.pause();\n const packageName = req.params.scope\n ? `@${req.params.scope}/${req.params.package}`\n : req.params.package;\n const packageVersion = req.params.filename\n ? getVersionFromTarball(req.params.filename)\n : undefined;\n const remote = req.remote_user;\n beforeAll?.(\n { action, user: remote?.name },\n `[middleware/allow][@{action}] allow for @{user}`\n );\n auth['allow_' + action](\n { packageName, packageVersion },\n remote,\n function (error, allowed): void {\n req.resume();\n if (error) {\n next(error);\n } else if (allowed) {\n afterAll?.(\n { action, user: remote?.name },\n `[middleware/allow][@{action}] allowed for @{user}`\n );\n next();\n } else {\n // last plugin (that's our built-in one) returns either\n // cb(err) or cb(null, true), so this should never happen\n throw errorUtils.getInternalError(API_ERROR.PLUGIN_ERROR);\n }\n }\n );\n };\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAIO,SAASE,KAAKA,CACnBC,IAAO,EACPC,OAAO,GAAG;EACR;EACAC,SAAS,EAAEA,CAACC,EAAO,EAAEC,EAAO,KAAK,CAAC,CAAC;EACnC;EACAC,QAAQ,EAAEA,CAACF,EAAO,EAAEC,EAAO,KAAK,CAAC;AACnC,CAAC,EACS;EACV,MAAM;IAAEF,SAAS;IAAEG;EAAS,CAAC,GAAGJ,OAAO;EACvC,OAAO,UAAUK,MAAc,EAAY;IACzC,OAAO,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;MACxFF,GAAG,CAACG,KAAK,CAAC,CAAC;MACX,MAAMC,WAAW,GAAGJ,GAAG,CAACK,MAAM,CAACC,KAAK,GAC/B,IAAGN,GAAG,CAACK,MAAM,CAACC,KAAM,IAAGN,GAAG,CAACK,MAAM,CAACE,OAAQ,EAAC,GAC5CP,GAAG,CAACK,MAAM,CAACE,OAAO;MACtB,MAAMC,cAAc,GAAGR,GAAG,CAACK,MAAM,CAACI,QAAQ,GACtC,IAAAC,4BAAqB,EAACV,GAAG,CAACK,MAAM,CAACI,QAAQ,CAAC,GAC1CE,SAAS;MACb,MAAMC,MAAM,GAAGZ,GAAG,CAACa,WAAW;MAC9BlB,SAAS,aAATA,SAAS,uBAATA,SAAS,CACP;QAAEI,MAAM;QAAEe,IAAI,EAAEF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG;MAAK,CAAC,EAC7B,iDACH,CAAC;MACDtB,IAAI,CAAC,QAAQ,GAAGM,MAAM,CAAC,CACrB;QAAEK,WAAW;QAAEI;MAAe,CAAC,EAC/BI,MAAM,EACN,UAAUI,KAAK,EAAEC,OAAO,EAAQ;QAC9BjB,GAAG,CAACkB,MAAM,CAAC,CAAC;QACZ,IAAIF,KAAK,EAAE;UACTd,IAAI,CAACc,KAAK,CAAC;QACb,CAAC,MAAM,IAAIC,OAAO,EAAE;UAClBnB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CACN;YAAEC,MAAM;YAAEe,IAAI,EAAEF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG;UAAK,CAAC,EAC7B,mDACH,CAAC;UACDb,IAAI,CAAC,CAAC;QACR,CAAC,MAAM;UACL;UACA;UACA,MAAMiB,gBAAU,CAACC,gBAAgB,CAACC,eAAS,CAACC,YAAY,CAAC;QAC3D;MACF,CACF,CAAC;IACH,CAAC;EACH,CAAC;AACH"}
1
+ {"version":3,"file":"allow.js","names":["_core","require","_utils","allow","auth","options","beforeAll","_a","_b","afterAll","action","req","res","next","pause","packageName","params","scope","package","packageVersion","filename","getVersionFromTarball","undefined","remote","remote_user","user","name","error","allowed","resume","errorUtils","getInternalError","API_ERROR","PLUGIN_ERROR"],"sources":["../../src/middlewares/allow.ts"],"sourcesContent":["import { API_ERROR, errorUtils } from '@verdaccio/core';\nimport { getVersionFromTarball } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function allow<T>(\n auth: T,\n options = {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n beforeAll: (_a: any, _b: any) => {},\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n afterAll: (_a: any, _b: any) => {},\n }\n): Function {\n const { beforeAll, afterAll } = options;\n return function (action: string): Function {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n req.pause();\n const packageName = req.params.scope\n ? `@${req.params.scope}/${req.params.package}`\n : req.params.package;\n const packageVersion = req.params.filename\n ? getVersionFromTarball(req.params.filename)\n : undefined;\n const remote = req.remote_user;\n beforeAll?.(\n { action, user: remote?.name },\n `[middleware/allow][@{action}] allow for @{user}`\n );\n auth['allow_' + action](\n { packageName, packageVersion },\n remote,\n function (error, allowed): void {\n req.resume();\n if (error) {\n next(error);\n } else if (allowed) {\n afterAll?.(\n { action, user: remote?.name },\n `[middleware/allow][@{action}] allowed for @{user}`\n );\n next();\n } else {\n // last plugin (that's our built-in one) returns either\n // cb(err) or cb(null, true), so this should never happen\n throw errorUtils.getInternalError(API_ERROR.PLUGIN_ERROR);\n }\n }\n );\n };\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAIO,SAASE,KAAKA,CACnBC,IAAO,EACPC,OAAO,GAAG;EACR;EACAC,SAAS,EAAEA,CAACC,EAAO,EAAEC,EAAO,KAAK,CAAC,CAAC;EACnC;EACAC,QAAQ,EAAEA,CAACF,EAAO,EAAEC,EAAO,KAAK,CAAC;AACnC,CAAC,EACS;EACV,MAAM;IAAEF,SAAS;IAAEG;EAAS,CAAC,GAAGJ,OAAO;EACvC,OAAO,UAAUK,MAAc,EAAY;IACzC,OAAO,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;MACxFF,GAAG,CAACG,KAAK,CAAC,CAAC;MACX,MAAMC,WAAW,GAAGJ,GAAG,CAACK,MAAM,CAACC,KAAK,GAChC,IAAIN,GAAG,CAACK,MAAM,CAACC,KAAK,IAAIN,GAAG,CAACK,MAAM,CAACE,OAAO,EAAE,GAC5CP,GAAG,CAACK,MAAM,CAACE,OAAO;MACtB,MAAMC,cAAc,GAAGR,GAAG,CAACK,MAAM,CAACI,QAAQ,GACtC,IAAAC,4BAAqB,EAACV,GAAG,CAACK,MAAM,CAACI,QAAQ,CAAC,GAC1CE,SAAS;MACb,MAAMC,MAAM,GAAGZ,GAAG,CAACa,WAAW;MAC9BlB,SAAS,aAATA,SAAS,eAATA,SAAS,CACP;QAAEI,MAAM;QAAEe,IAAI,EAAEF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG;MAAK,CAAC,EAC9B,iDACF,CAAC;MACDtB,IAAI,CAAC,QAAQ,GAAGM,MAAM,CAAC,CACrB;QAAEK,WAAW;QAAEI;MAAe,CAAC,EAC/BI,MAAM,EACN,UAAUI,KAAK,EAAEC,OAAO,EAAQ;QAC9BjB,GAAG,CAACkB,MAAM,CAAC,CAAC;QACZ,IAAIF,KAAK,EAAE;UACTd,IAAI,CAACc,KAAK,CAAC;QACb,CAAC,MAAM,IAAIC,OAAO,EAAE;UAClBnB,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CACN;YAAEC,MAAM;YAAEe,IAAI,EAAEF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG;UAAK,CAAC,EAC9B,mDACF,CAAC;UACDb,IAAI,CAAC,CAAC;QACR,CAAC,MAAM;UACL;UACA;UACA,MAAMiB,gBAAU,CAACC,gBAAgB,CAACC,eAAS,CAACC,YAAY,CAAC;QAC3D;MACF,CACF,CAAC;IACH,CAAC;EACH,CAAC;AACH","ignoreList":[]}
@@ -13,7 +13,7 @@ var _core = require("@verdaccio/core");
13
13
  function antiLoop(config) {
14
14
  return function (req, res, next) {
15
15
  var _req$headers;
16
- if ((req === null || req === void 0 ? void 0 : (_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : _req$headers.via) != null) {
16
+ if ((req === null || req === void 0 || (_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : _req$headers.via) != null) {
17
17
  var _req$get;
18
18
  const arr = (_req$get = req.get('via')) === null || _req$get === void 0 ? void 0 : _req$get.split(',');
19
19
  if (Array.isArray(arr)) {
@@ -1 +1 @@
1
- {"version":3,"file":"antiLoop.js","names":["_core","require","antiLoop","config","req","res","next","_req$headers","headers","via","_req$get","arr","get","split","Array","isArray","i","length","m","trim","match","server_id","errorUtils","getCode","HTTP_STATUS","LOOP_DETECTED"],"sources":["../../src/middlewares/antiLoop.ts"],"sourcesContent":["import { HTTP_STATUS, errorUtils } from '@verdaccio/core';\nimport { Config } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n/**\n * A middleware that avoid a registry points itself as proxy and avoid create infinite loops.\n * @param config\n * @returns\n */\nexport function antiLoop(config: Config) {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n if (req?.headers?.via != null) {\n const arr = req.get('via')?.split(',');\n if (Array.isArray(arr)) {\n for (let i = 0; i < arr.length; i++) {\n // the \"via\" header must contains an specific headers, this has to be on sync\n // with the proxy request\n // match eg: Server 1 or Server 2\n // TODO: improve this RegEX\n const m = arr[i].trim().match(/\\s*(\\S+)\\s+(\\S+)/);\n if (m && m[2] === config.server_id) {\n return next(errorUtils.getCode(HTTP_STATUS.LOOP_DETECTED, 'loop detected'));\n }\n }\n }\n }\n next();\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAKA;AACA;AACA;AACA;AACA;AACO,SAASC,QAAQA,CAACC,MAAc,EAAE;EACvC,OAAO,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;IAAA,IAAAC,YAAA;IACxF,IAAI,CAAAH,GAAG,aAAHA,GAAG,wBAAAG,YAAA,GAAHH,GAAG,CAAEI,OAAO,cAAAD,YAAA,uBAAZA,YAAA,CAAcE,GAAG,KAAI,IAAI,EAAE;MAAA,IAAAC,QAAA;MAC7B,MAAMC,GAAG,IAAAD,QAAA,GAAGN,GAAG,CAACQ,GAAG,CAAC,KAAK,CAAC,cAAAF,QAAA,uBAAdA,QAAA,CAAgBG,KAAK,CAAC,GAAG,CAAC;MACtC,IAAIC,KAAK,CAACC,OAAO,CAACJ,GAAG,CAAC,EAAE;QACtB,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,GAAG,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;UACnC;UACA;UACA;UACA;UACA,MAAME,CAAC,GAAGP,GAAG,CAACK,CAAC,CAAC,CAACG,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,kBAAkB,CAAC;UACjD,IAAIF,CAAC,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAKf,MAAM,CAACkB,SAAS,EAAE;YAClC,OAAOf,IAAI,CAACgB,gBAAU,CAACC,OAAO,CAACC,iBAAW,CAACC,aAAa,EAAE,eAAe,CAAC,CAAC;UAC7E;QACF;MACF;IACF;IACAnB,IAAI,CAAC,CAAC;EACR,CAAC;AACH"}
1
+ {"version":3,"file":"antiLoop.js","names":["_core","require","antiLoop","config","req","res","next","_req$headers","headers","via","_req$get","arr","get","split","Array","isArray","i","length","m","trim","match","server_id","errorUtils","getCode","HTTP_STATUS","LOOP_DETECTED"],"sources":["../../src/middlewares/antiLoop.ts"],"sourcesContent":["import { HTTP_STATUS, errorUtils } from '@verdaccio/core';\nimport { Config } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n/**\n * A middleware that avoid a registry points itself as proxy and avoid create infinite loops.\n * @param config\n * @returns\n */\nexport function antiLoop(config: Config) {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n if (req?.headers?.via != null) {\n const arr = req.get('via')?.split(',');\n if (Array.isArray(arr)) {\n for (let i = 0; i < arr.length; i++) {\n // the \"via\" header must contains an specific headers, this has to be on sync\n // with the proxy request\n // match eg: Server 1 or Server 2\n // TODO: improve this RegEX\n const m = arr[i].trim().match(/\\s*(\\S+)\\s+(\\S+)/);\n if (m && m[2] === config.server_id) {\n return next(errorUtils.getCode(HTTP_STATUS.LOOP_DETECTED, 'loop detected'));\n }\n }\n }\n }\n next();\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAKA;AACA;AACA;AACA;AACA;AACO,SAASC,QAAQA,CAACC,MAAc,EAAE;EACvC,OAAO,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;IAAA,IAAAC,YAAA;IACxF,IAAI,CAAAH,GAAG,aAAHA,GAAG,gBAAAG,YAAA,GAAHH,GAAG,CAAEI,OAAO,cAAAD,YAAA,uBAAZA,YAAA,CAAcE,GAAG,KAAI,IAAI,EAAE;MAAA,IAAAC,QAAA;MAC7B,MAAMC,GAAG,IAAAD,QAAA,GAAGN,GAAG,CAACQ,GAAG,CAAC,KAAK,CAAC,cAAAF,QAAA,uBAAdA,QAAA,CAAgBG,KAAK,CAAC,GAAG,CAAC;MACtC,IAAIC,KAAK,CAACC,OAAO,CAACJ,GAAG,CAAC,EAAE;QACtB,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,GAAG,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;UACnC;UACA;UACA;UACA;UACA,MAAME,CAAC,GAAGP,GAAG,CAACK,CAAC,CAAC,CAACG,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,kBAAkB,CAAC;UACjD,IAAIF,CAAC,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAKf,MAAM,CAACkB,SAAS,EAAE;YAClC,OAAOf,IAAI,CAACgB,gBAAU,CAACC,OAAO,CAACC,iBAAW,CAACC,aAAa,EAAE,eAAe,CAAC,CAAC;UAC7E;QACF;MACF;IACF;IACAnB,IAAI,CAAC,CAAC;EACR,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"encode-pkg.js","names":["encodeScopePackage","req","res","next","url","indexOf","replace"],"sources":["../../src/middlewares/encode-pkg.ts"],"sourcesContent":["import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n/**\n * Encode / in a scoped package name to be matched as a single parameter in routes\n * @param req\n * @param res\n * @param next\n */\nexport function encodeScopePackage(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n if (req.url.indexOf('@') !== -1) {\n // e.g.: /@org/pkg/1.2.3 -> /@org%2Fpkg/1.2.3, /@org%2Fpkg/1.2.3 -> /@org%2Fpkg/1.2.3\n req.url = req.url.replace(/^(\\/@[^\\/%]+)\\/(?!$)/, '$1%2F');\n }\n next();\n}\n"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,kBAAkBA,CAChCC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EAChB;EACN,IAAIF,GAAG,CAACG,GAAG,CAACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;IAC/B;IACAJ,GAAG,CAACG,GAAG,GAAGH,GAAG,CAACG,GAAG,CAACE,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;EAC5D;EACAH,IAAI,CAAC,CAAC;AACR"}
1
+ {"version":3,"file":"encode-pkg.js","names":["encodeScopePackage","req","res","next","url","indexOf","replace"],"sources":["../../src/middlewares/encode-pkg.ts"],"sourcesContent":["import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n/**\n * Encode / in a scoped package name to be matched as a single parameter in routes\n * @param req\n * @param res\n * @param next\n */\nexport function encodeScopePackage(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n if (req.url.indexOf('@') !== -1) {\n // e.g.: /@org/pkg/1.2.3 -> /@org%2Fpkg/1.2.3, /@org%2Fpkg/1.2.3 -> /@org%2Fpkg/1.2.3\n req.url = req.url.replace(/^(\\/@[^\\/%]+)\\/(?!$)/, '$1%2F');\n }\n next();\n}\n"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,kBAAkBA,CAChCC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EAChB;EACN,IAAIF,GAAG,CAACG,GAAG,CAACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;IAC/B;IACAJ,GAAG,CAACG,GAAG,GAAGH,GAAG,CAACG,GAAG,CAACE,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;EAC5D;EACAH,IAAI,CAAC,CAAC;AACR","ignoreList":[]}
@@ -7,7 +7,7 @@ exports.handleError = exports.errorReportingMiddleware = void 0;
7
7
  var _debug = _interopRequireDefault(require("debug"));
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
9
  var _core = require("@verdaccio/core");
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
11
  const debug = (0, _debug.default)('verdaccio:middleware:error');
12
12
  const handleError = logger => function handleError(err, req, res, next) {
13
13
  debug('error handler init');
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","names":["_debug","_interopRequireDefault","require","_lodash","_core","obj","__esModule","default","debug","buildDebug","handleError","logger","err","req","res","next","_","isError","code","statusCode","HTTP_STATUS","NOT_MODIFIED","isFunction","locals","report_error","errorReportingMiddleware","noop","exports","status","BAD_REQUEST","isNil","headersSent","message","error","API_ERROR","UNKNOWN_ERROR","send","destroy","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"],"sources":["../../src/middlewares/error.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { HttpError } from 'http-errors';\nimport _ from 'lodash';\n\nimport { API_ERROR, HTTP_STATUS, VerdaccioError } from '@verdaccio/core';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nconst debug = buildDebug('verdaccio:middleware:error');\n\nexport const handleError = (logger) =>\n function handleError(\n err: HttpError,\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ) {\n debug('error handler init');\n if (_.isError(err)) {\n debug('is native error');\n if (err.code === 'ECONNABORT' && res.statusCode === HTTP_STATUS.NOT_MODIFIED) {\n return next();\n }\n if (_.isFunction(res.locals.report_error) === false) {\n debug('is locals error report ref');\n // in case of very early error this middleware may not be loaded before error is generated\n // fixing that\n errorReportingMiddleware(logger)(req, res, _.noop);\n }\n debug('set locals error report ref');\n res.locals.report_error(err);\n } else {\n // Fall to Middleware.final\n debug('no error to report, jump next layer');\n return next(err);\n }\n };\n\n// Middleware\nexport const errorReportingMiddleware = (logger) =>\n function errorReportingMiddleware(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): void {\n debug('error report middleware start');\n res.locals.report_error =\n res.locals.report_error ||\n function (err: VerdaccioError): void {\n if (err.status && err.status >= HTTP_STATUS.BAD_REQUEST && err.status < 600) {\n debug('is error > 409 %o', err?.status);\n if (_.isNil(res.headersSent) === false) {\n debug('send status %o', err?.status);\n res.status(err.status);\n debug('next layer %o', err?.message);\n next({ error: err.message || API_ERROR.UNKNOWN_ERROR });\n }\n } else {\n debug('is error < 409 %o', err?.status);\n logger.error({ err: err }, 'unexpected error: @{!err.message}\\n@{err.stack}');\n if (!res.status || !res.send) {\n // TODO: decide which debug keep\n logger.error('this is an error in express.js, please report this');\n debug('this is an error in express.js, please report this, destroy response %o', err);\n res.destroy();\n } else if (!res.headersSent) {\n debug('send internal error %o', err);\n res.status(HTTP_STATUS.INTERNAL_ERROR);\n next({ error: API_ERROR.INTERNAL_SERVER_ERROR });\n } else {\n // socket should be already closed\n debug('this should not happen, otherwise report %o', err);\n }\n }\n };\n\n debug('error report middleware end (skip next layer) next()');\n next();\n };\n"],"mappings":"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"}
1
+ {"version":3,"file":"error.js","names":["_debug","_interopRequireDefault","require","_lodash","_core","e","__esModule","default","debug","buildDebug","handleError","logger","err","req","res","next","_","isError","code","statusCode","HTTP_STATUS","NOT_MODIFIED","isFunction","locals","report_error","errorReportingMiddleware","noop","exports","status","BAD_REQUEST","isNil","headersSent","message","error","API_ERROR","UNKNOWN_ERROR","send","destroy","INTERNAL_ERROR","INTERNAL_SERVER_ERROR"],"sources":["../../src/middlewares/error.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { HttpError } from 'http-errors';\nimport _ from 'lodash';\n\nimport { API_ERROR, HTTP_STATUS, VerdaccioError } from '@verdaccio/core';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nconst debug = buildDebug('verdaccio:middleware:error');\n\nexport const handleError = (logger) =>\n function handleError(\n err: HttpError,\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ) {\n debug('error handler init');\n if (_.isError(err)) {\n debug('is native error');\n if (err.code === 'ECONNABORT' && res.statusCode === HTTP_STATUS.NOT_MODIFIED) {\n return next();\n }\n if (_.isFunction(res.locals.report_error) === false) {\n debug('is locals error report ref');\n // in case of very early error this middleware may not be loaded before error is generated\n // fixing that\n errorReportingMiddleware(logger)(req, res, _.noop);\n }\n debug('set locals error report ref');\n res.locals.report_error(err);\n } else {\n // Fall to Middleware.final\n debug('no error to report, jump next layer');\n return next(err);\n }\n };\n\n// Middleware\nexport const errorReportingMiddleware = (logger) =>\n function errorReportingMiddleware(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): void {\n debug('error report middleware start');\n res.locals.report_error =\n res.locals.report_error ||\n function (err: VerdaccioError): void {\n if (err.status && err.status >= HTTP_STATUS.BAD_REQUEST && err.status < 600) {\n debug('is error > 409 %o', err?.status);\n if (_.isNil(res.headersSent) === false) {\n debug('send status %o', err?.status);\n res.status(err.status);\n debug('next layer %o', err?.message);\n next({ error: err.message || API_ERROR.UNKNOWN_ERROR });\n }\n } else {\n debug('is error < 409 %o', err?.status);\n logger.error({ err: err }, 'unexpected error: @{!err.message}\\n@{err.stack}');\n if (!res.status || !res.send) {\n // TODO: decide which debug keep\n logger.error('this is an error in express.js, please report this');\n debug('this is an error in express.js, please report this, destroy response %o', err);\n res.destroy();\n } else if (!res.headersSent) {\n debug('send internal error %o', err);\n res.status(HTTP_STATUS.INTERNAL_ERROR);\n next({ error: API_ERROR.INTERNAL_SERVER_ERROR });\n } else {\n // socket should be already closed\n debug('this should not happen, otherwise report %o', err);\n }\n }\n };\n\n debug('error report middleware end (skip next layer) next()');\n next();\n };\n"],"mappings":"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","ignoreList":[]}
@@ -8,7 +8,7 @@ var _debug = _interopRequireDefault(require("debug"));
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
9
  var _core = require("@verdaccio/core");
10
10
  var _utils = require("@verdaccio/utils");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
12
  const debug = (0, _debug.default)('verdaccio:middleware:final');
13
13
  function final(body, req, res,
14
14
  // if we remove `next` breaks test
@@ -51,7 +51,7 @@ next) {
51
51
  if (_lodash.default.isNil(res.socket) === false) {
52
52
  var _res$socket;
53
53
  debug('force destroy socket');
54
- (_res$socket = res.socket) === null || _res$socket === void 0 ? void 0 : _res$socket.destroy();
54
+ (_res$socket = res.socket) === null || _res$socket === void 0 || _res$socket.destroy();
55
55
  }
56
56
  return;
57
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"final.js","names":["_debug","_interopRequireDefault","require","_lodash","_core","_utils","obj","__esModule","default","debug","buildDebug","final","body","req","res","next","statusCode","HTTP_STATUS","UNAUTHORIZED","getHeader","HEADERS","WWW_AUTH","header","TOKEN_BASIC","TOKEN_BEARER","_","isString","isObject","get","CONTENT_TYPE","JSON","isNil","error","locals","_verdaccio_error","stringify","undefined","OK","MULTIPLE_CHOICES","etag","stringToMD5","ETAG","err","message","match","socket","_res$socket","destroy","send"],"sources":["../../src/middlewares/final.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport { HEADERS, HTTP_STATUS, TOKEN_BASIC, TOKEN_BEARER } from '@verdaccio/core';\nimport { Manifest } from '@verdaccio/types';\nimport { stringToMD5 } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, MiddlewareError } from '../types';\n\nexport type FinalBody = Manifest | MiddlewareError | string;\n\nconst debug = buildDebug('verdaccio:middleware:final');\n\nexport function final(\n body: FinalBody,\n req: $RequestExtend,\n res: $ResponseExtend,\n // if we remove `next` breaks test\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: $NextFunctionVer\n): void {\n if (res.statusCode === HTTP_STATUS.UNAUTHORIZED && !res.getHeader(HEADERS.WWW_AUTH)) {\n debug('set auth header support');\n res.header(HEADERS.WWW_AUTH, `${TOKEN_BASIC}, ${TOKEN_BEARER}`);\n }\n\n try {\n if (_.isString(body) || _.isObject(body)) {\n if (!res.get(HEADERS.CONTENT_TYPE)) {\n debug('set json type header support');\n res.header(HEADERS.CONTENT_TYPE, HEADERS.JSON);\n }\n\n if (typeof body === 'object' && _.isNil(body) === false) {\n if (typeof (body as MiddlewareError).error === 'string') {\n debug('set verdaccio_error method');\n res.locals._verdaccio_error = (body as MiddlewareError).error;\n }\n body = JSON.stringify(body, undefined, ' ') + '\\n';\n }\n\n // don't send etags with errors\n if (\n !res.statusCode ||\n (res.statusCode >= HTTP_STATUS.OK && res.statusCode < HTTP_STATUS.MULTIPLE_CHOICES)\n ) {\n const etag = stringToMD5(body as string);\n debug('set etag header %s', etag);\n res.header(HEADERS.ETAG, '\"' + etag + '\"');\n }\n } else {\n debug('this line should never be visible, if does report');\n // send(null), send(204), etc.\n }\n } catch (err: any) {\n // if verdaccio sends headers first, and then calls res.send()\n // as an error handler, we can't report error properly,\n // and should just close socket\n if (err.message.match(/set headers after they are sent/)) {\n debug('set headers after they are sent');\n if (_.isNil(res.socket) === false) {\n debug('force destroy socket');\n res.socket?.destroy();\n }\n return;\n }\n throw err;\n }\n\n res.send(body);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAA+C,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAM/C,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,4BAA4B,CAAC;AAE/C,SAASC,KAAKA,CACnBC,IAAe,EACfC,GAAmB,EACnBC,GAAoB;AACpB;AACA;AACAC,IAAsB,EAChB;EACN,IAAID,GAAG,CAACE,UAAU,KAAKC,iBAAW,CAACC,YAAY,IAAI,CAACJ,GAAG,CAACK,SAAS,CAACC,aAAO,CAACC,QAAQ,CAAC,EAAE;IACnFZ,KAAK,CAAC,yBAAyB,CAAC;IAChCK,GAAG,CAACQ,MAAM,CAACF,aAAO,CAACC,QAAQ,EAAG,GAAEE,iBAAY,KAAIC,kBAAa,EAAC,CAAC;EACjE;EAEA,IAAI;IACF,IAAIC,eAAC,CAACC,QAAQ,CAACd,IAAI,CAAC,IAAIa,eAAC,CAACE,QAAQ,CAACf,IAAI,CAAC,EAAE;MACxC,IAAI,CAACE,GAAG,CAACc,GAAG,CAACR,aAAO,CAACS,YAAY,CAAC,EAAE;QAClCpB,KAAK,CAAC,8BAA8B,CAAC;QACrCK,GAAG,CAACQ,MAAM,CAACF,aAAO,CAACS,YAAY,EAAET,aAAO,CAACU,IAAI,CAAC;MAChD;MAEA,IAAI,OAAOlB,IAAI,KAAK,QAAQ,IAAIa,eAAC,CAACM,KAAK,CAACnB,IAAI,CAAC,KAAK,KAAK,EAAE;QACvD,IAAI,OAAQA,IAAI,CAAqBoB,KAAK,KAAK,QAAQ,EAAE;UACvDvB,KAAK,CAAC,4BAA4B,CAAC;UACnCK,GAAG,CAACmB,MAAM,CAACC,gBAAgB,GAAItB,IAAI,CAAqBoB,KAAK;QAC/D;QACApB,IAAI,GAAGkB,IAAI,CAACK,SAAS,CAACvB,IAAI,EAAEwB,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI;MACrD;;MAEA;MACA,IACE,CAACtB,GAAG,CAACE,UAAU,IACdF,GAAG,CAACE,UAAU,IAAIC,iBAAW,CAACoB,EAAE,IAAIvB,GAAG,CAACE,UAAU,GAAGC,iBAAW,CAACqB,gBAAiB,EACnF;QACA,MAAMC,IAAI,GAAG,IAAAC,kBAAW,EAAC5B,IAAc,CAAC;QACxCH,KAAK,CAAC,oBAAoB,EAAE8B,IAAI,CAAC;QACjCzB,GAAG,CAACQ,MAAM,CAACF,aAAO,CAACqB,IAAI,EAAE,GAAG,GAAGF,IAAI,GAAG,GAAG,CAAC;MAC5C;IACF,CAAC,MAAM;MACL9B,KAAK,CAAC,mDAAmD,CAAC;MAC1D;IACF;EACF,CAAC,CAAC,OAAOiC,GAAQ,EAAE;IACjB;IACA;IACA;IACA,IAAIA,GAAG,CAACC,OAAO,CAACC,KAAK,CAAC,iCAAiC,CAAC,EAAE;MACxDnC,KAAK,CAAC,iCAAiC,CAAC;MACxC,IAAIgB,eAAC,CAACM,KAAK,CAACjB,GAAG,CAAC+B,MAAM,CAAC,KAAK,KAAK,EAAE;QAAA,IAAAC,WAAA;QACjCrC,KAAK,CAAC,sBAAsB,CAAC;QAC7B,CAAAqC,WAAA,GAAAhC,GAAG,CAAC+B,MAAM,cAAAC,WAAA,uBAAVA,WAAA,CAAYC,OAAO,CAAC,CAAC;MACvB;MACA;IACF;IACA,MAAML,GAAG;EACX;EAEA5B,GAAG,CAACkC,IAAI,CAACpC,IAAI,CAAC;AAChB"}
1
+ {"version":3,"file":"final.js","names":["_debug","_interopRequireDefault","require","_lodash","_core","_utils","e","__esModule","default","debug","buildDebug","final","body","req","res","next","statusCode","HTTP_STATUS","UNAUTHORIZED","getHeader","HEADERS","WWW_AUTH","header","TOKEN_BASIC","TOKEN_BEARER","_","isString","isObject","get","CONTENT_TYPE","JSON","isNil","error","locals","_verdaccio_error","stringify","undefined","OK","MULTIPLE_CHOICES","etag","stringToMD5","ETAG","err","message","match","socket","_res$socket","destroy","send"],"sources":["../../src/middlewares/final.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport { HEADERS, HTTP_STATUS, TOKEN_BASIC, TOKEN_BEARER } from '@verdaccio/core';\nimport { Manifest } from '@verdaccio/types';\nimport { stringToMD5 } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, MiddlewareError } from '../types';\n\nexport type FinalBody = Manifest | MiddlewareError | string;\n\nconst debug = buildDebug('verdaccio:middleware:final');\n\nexport function final(\n body: FinalBody,\n req: $RequestExtend,\n res: $ResponseExtend,\n // if we remove `next` breaks test\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: $NextFunctionVer\n): void {\n if (res.statusCode === HTTP_STATUS.UNAUTHORIZED && !res.getHeader(HEADERS.WWW_AUTH)) {\n debug('set auth header support');\n res.header(HEADERS.WWW_AUTH, `${TOKEN_BASIC}, ${TOKEN_BEARER}`);\n }\n\n try {\n if (_.isString(body) || _.isObject(body)) {\n if (!res.get(HEADERS.CONTENT_TYPE)) {\n debug('set json type header support');\n res.header(HEADERS.CONTENT_TYPE, HEADERS.JSON);\n }\n\n if (typeof body === 'object' && _.isNil(body) === false) {\n if (typeof (body as MiddlewareError).error === 'string') {\n debug('set verdaccio_error method');\n res.locals._verdaccio_error = (body as MiddlewareError).error;\n }\n body = JSON.stringify(body, undefined, ' ') + '\\n';\n }\n\n // don't send etags with errors\n if (\n !res.statusCode ||\n (res.statusCode >= HTTP_STATUS.OK && res.statusCode < HTTP_STATUS.MULTIPLE_CHOICES)\n ) {\n const etag = stringToMD5(body as string);\n debug('set etag header %s', etag);\n res.header(HEADERS.ETAG, '\"' + etag + '\"');\n }\n } else {\n debug('this line should never be visible, if does report');\n // send(null), send(204), etc.\n }\n } catch (err: any) {\n // if verdaccio sends headers first, and then calls res.send()\n // as an error handler, we can't report error properly,\n // and should just close socket\n if (err.message.match(/set headers after they are sent/)) {\n debug('set headers after they are sent');\n if (_.isNil(res.socket) === false) {\n debug('force destroy socket');\n res.socket?.destroy();\n }\n return;\n }\n throw err;\n }\n\n res.send(body);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAA+C,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAM/C,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,4BAA4B,CAAC;AAE/C,SAASC,KAAKA,CACnBC,IAAe,EACfC,GAAmB,EACnBC,GAAoB;AACpB;AACA;AACAC,IAAsB,EAChB;EACN,IAAID,GAAG,CAACE,UAAU,KAAKC,iBAAW,CAACC,YAAY,IAAI,CAACJ,GAAG,CAACK,SAAS,CAACC,aAAO,CAACC,QAAQ,CAAC,EAAE;IACnFZ,KAAK,CAAC,yBAAyB,CAAC;IAChCK,GAAG,CAACQ,MAAM,CAACF,aAAO,CAACC,QAAQ,EAAE,GAAGE,iBAAW,KAAKC,kBAAY,EAAE,CAAC;EACjE;EAEA,IAAI;IACF,IAAIC,eAAC,CAACC,QAAQ,CAACd,IAAI,CAAC,IAAIa,eAAC,CAACE,QAAQ,CAACf,IAAI,CAAC,EAAE;MACxC,IAAI,CAACE,GAAG,CAACc,GAAG,CAACR,aAAO,CAACS,YAAY,CAAC,EAAE;QAClCpB,KAAK,CAAC,8BAA8B,CAAC;QACrCK,GAAG,CAACQ,MAAM,CAACF,aAAO,CAACS,YAAY,EAAET,aAAO,CAACU,IAAI,CAAC;MAChD;MAEA,IAAI,OAAOlB,IAAI,KAAK,QAAQ,IAAIa,eAAC,CAACM,KAAK,CAACnB,IAAI,CAAC,KAAK,KAAK,EAAE;QACvD,IAAI,OAAQA,IAAI,CAAqBoB,KAAK,KAAK,QAAQ,EAAE;UACvDvB,KAAK,CAAC,4BAA4B,CAAC;UACnCK,GAAG,CAACmB,MAAM,CAACC,gBAAgB,GAAItB,IAAI,CAAqBoB,KAAK;QAC/D;QACApB,IAAI,GAAGkB,IAAI,CAACK,SAAS,CAACvB,IAAI,EAAEwB,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI;MACrD;;MAEA;MACA,IACE,CAACtB,GAAG,CAACE,UAAU,IACdF,GAAG,CAACE,UAAU,IAAIC,iBAAW,CAACoB,EAAE,IAAIvB,GAAG,CAACE,UAAU,GAAGC,iBAAW,CAACqB,gBAAiB,EACnF;QACA,MAAMC,IAAI,GAAG,IAAAC,kBAAW,EAAC5B,IAAc,CAAC;QACxCH,KAAK,CAAC,oBAAoB,EAAE8B,IAAI,CAAC;QACjCzB,GAAG,CAACQ,MAAM,CAACF,aAAO,CAACqB,IAAI,EAAE,GAAG,GAAGF,IAAI,GAAG,GAAG,CAAC;MAC5C;IACF,CAAC,MAAM;MACL9B,KAAK,CAAC,mDAAmD,CAAC;MAC1D;IACF;EACF,CAAC,CAAC,OAAOiC,GAAQ,EAAE;IACjB;IACA;IACA;IACA,IAAIA,GAAG,CAACC,OAAO,CAACC,KAAK,CAAC,iCAAiC,CAAC,EAAE;MACxDnC,KAAK,CAAC,iCAAiC,CAAC;MACxC,IAAIgB,eAAC,CAACM,KAAK,CAACjB,GAAG,CAAC+B,MAAM,CAAC,KAAK,KAAK,EAAE;QAAA,IAAAC,WAAA;QACjCrC,KAAK,CAAC,sBAAsB,CAAC;QAC7B,CAAAqC,WAAA,GAAAhC,GAAG,CAAC+B,MAAM,cAAAC,WAAA,eAAVA,WAAA,CAAYC,OAAO,CAAC,CAAC;MACvB;MACA;IACF;IACA,MAAML,GAAG;EACX;EAEA5B,GAAG,CAACkC,IAAI,CAACpC,IAAI,CAAC;AAChB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","names":["_core","require","_utils","expectJson","req","res","next","isObject","body","errorUtils","getBadRequest"],"sources":["../../src/middlewares/json.ts"],"sourcesContent":["import { errorUtils } from '@verdaccio/core';\nimport { isObject } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function expectJson(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n if (!isObject(req.body)) {\n return next(errorUtils.getBadRequest(\"can't parse incoming json\"));\n }\n next();\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAIO,SAASE,UAAUA,CACxBC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EAChB;EACN,IAAI,CAAC,IAAAC,eAAQ,EAACH,GAAG,CAACI,IAAI,CAAC,EAAE;IACvB,OAAOF,IAAI,CAACG,gBAAU,CAACC,aAAa,CAAC,2BAA2B,CAAC,CAAC;EACpE;EACAJ,IAAI,CAAC,CAAC;AACR"}
1
+ {"version":3,"file":"json.js","names":["_core","require","_utils","expectJson","req","res","next","isObject","body","errorUtils","getBadRequest"],"sources":["../../src/middlewares/json.ts"],"sourcesContent":["import { errorUtils } from '@verdaccio/core';\nimport { isObject } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function expectJson(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n if (!isObject(req.body)) {\n return next(errorUtils.getBadRequest(\"can't parse incoming json\"));\n }\n next();\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAIO,SAASE,UAAUA,CACxBC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EAChB;EACN,IAAI,CAAC,IAAAC,eAAQ,EAACH,GAAG,CAACI,IAAI,CAAC,EAAE;IACvB,OAAOF,IAAI,CAACG,gBAAU,CAACC,aAAa,CAAC,2BAA2B,CAAC,CAAC;EACpE;EACAJ,IAAI,CAAC,CAAC;AACR","ignoreList":[]}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.log = exports.LOG_VERDACCIO_ERROR = exports.LOG_VERDACCIO_BYTES = exports.LOG_STATUS_MESSAGE = void 0;
7
7
  var _lodash = _interopRequireDefault(require("lodash"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  // FIXME: deprecated, moved to @verdaccio/dev-commons
10
10
  const LOG_STATUS_MESSAGE = exports.LOG_STATUS_MESSAGE = "@{status}, user: @{user}(@{remoteIP}), req: '@{request.method} @{request.url}'";
11
11
  const LOG_VERDACCIO_ERROR = exports.LOG_VERDACCIO_ERROR = `${LOG_STATUS_MESSAGE}, error: @{!error}`;
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","names":["_lodash","_interopRequireDefault","require","obj","__esModule","default","LOG_STATUS_MESSAGE","exports","LOG_VERDACCIO_ERROR","LOG_VERDACCIO_BYTES","log","logger","req","res","next","child","sub","_auth","headers","authorization","_","isNil","_cookie","get","cookie","url","originalUrl","info","ip","bytesin","on","chunk","length","bytesout","_write","write","buf","apply","arguments","_req$remote_user","forwardedFor","remoteAddress","connection","remoteIP","message","locals","_verdaccio_error","http","request","method","user","remote_user","name","status","statusCode","error","bytes","in","out","_end","end"],"sources":["../../src/middlewares/log.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n// FIXME: deprecated, moved to @verdaccio/dev-commons\nexport const LOG_STATUS_MESSAGE =\n \"@{status}, user: @{user}(@{remoteIP}), req: '@{request.method} @{request.url}'\";\nexport const LOG_VERDACCIO_ERROR = `${LOG_STATUS_MESSAGE}, error: @{!error}`;\nexport const LOG_VERDACCIO_BYTES = `${LOG_STATUS_MESSAGE}, bytes: @{bytes.in}/@{bytes.out}`;\n\nexport const log = (logger) => {\n return function log(req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n // logger\n req.log = logger.child({ sub: 'in' });\n\n const _auth = req.headers.authorization;\n if (_.isNil(_auth) === false) {\n req.headers.authorization = '<Classified>';\n }\n\n const _cookie = req.get('cookie');\n if (_.isNil(_cookie) === false) {\n req.headers.cookie = '<Classified>';\n }\n\n req.url = req.originalUrl;\n req.log.info({ req: req, ip: req.ip }, \"@{ip} requested '@{req.method} @{req.url}'\");\n req.originalUrl = req.url;\n\n if (_.isNil(_auth) === false) {\n req.headers.authorization = _auth;\n }\n\n if (_.isNil(_cookie) === false) {\n req.headers.cookie = _cookie;\n }\n\n let bytesin = 0;\n req.on('data', function (chunk): void {\n bytesin += chunk.length;\n });\n\n let bytesout = 0;\n const _write = res.write;\n // FIXME: res.write should return boolean\n // @ts-ignore\n res.write = function (buf): boolean {\n bytesout += buf.length;\n /* eslint prefer-rest-params: \"off\" */\n // @ts-ignore\n _write.apply(res, arguments);\n };\n\n const log = function (): void {\n const forwardedFor = req.get('x-forwarded-for');\n const remoteAddress = req.connection.remoteAddress;\n const remoteIP = forwardedFor ? `${forwardedFor} via ${remoteAddress}` : remoteAddress;\n let message;\n if (res.locals._verdaccio_error) {\n message = LOG_VERDACCIO_ERROR;\n } else {\n message = LOG_VERDACCIO_BYTES;\n }\n\n req.url = req.originalUrl;\n req.log.http(\n {\n request: {\n method: req.method,\n url: req.url,\n },\n user: req.remote_user?.name || null,\n remoteIP,\n status: res.statusCode,\n error: res.locals._verdaccio_error,\n bytes: {\n in: bytesin,\n out: bytesout,\n },\n },\n message\n );\n req.originalUrl = req.url;\n };\n\n req.on('close', function (): void {\n log();\n });\n\n const _end = res.end;\n // @ts-ignore\n res.end = function (buf): void {\n if (buf) {\n bytesout += buf.length;\n }\n /* eslint prefer-rest-params: \"off\" */\n // @ts-ignore\n _end.apply(res, arguments);\n log();\n };\n next();\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"log.js","names":["_lodash","_interopRequireDefault","require","e","__esModule","default","LOG_STATUS_MESSAGE","exports","LOG_VERDACCIO_ERROR","LOG_VERDACCIO_BYTES","log","logger","req","res","next","child","sub","_auth","headers","authorization","_","isNil","_cookie","get","cookie","url","originalUrl","info","ip","bytesin","on","chunk","length","bytesout","_write","write","buf","apply","arguments","_req$remote_user","forwardedFor","remoteAddress","connection","remoteIP","message","locals","_verdaccio_error","http","request","method","user","remote_user","name","status","statusCode","error","bytes","in","out","_end","end"],"sources":["../../src/middlewares/log.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n// FIXME: deprecated, moved to @verdaccio/dev-commons\nexport const LOG_STATUS_MESSAGE =\n \"@{status}, user: @{user}(@{remoteIP}), req: '@{request.method} @{request.url}'\";\nexport const LOG_VERDACCIO_ERROR = `${LOG_STATUS_MESSAGE}, error: @{!error}`;\nexport const LOG_VERDACCIO_BYTES = `${LOG_STATUS_MESSAGE}, bytes: @{bytes.in}/@{bytes.out}`;\n\nexport const log = (logger) => {\n return function log(req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n // logger\n req.log = logger.child({ sub: 'in' });\n\n const _auth = req.headers.authorization;\n if (_.isNil(_auth) === false) {\n req.headers.authorization = '<Classified>';\n }\n\n const _cookie = req.get('cookie');\n if (_.isNil(_cookie) === false) {\n req.headers.cookie = '<Classified>';\n }\n\n req.url = req.originalUrl;\n req.log.info({ req: req, ip: req.ip }, \"@{ip} requested '@{req.method} @{req.url}'\");\n req.originalUrl = req.url;\n\n if (_.isNil(_auth) === false) {\n req.headers.authorization = _auth;\n }\n\n if (_.isNil(_cookie) === false) {\n req.headers.cookie = _cookie;\n }\n\n let bytesin = 0;\n req.on('data', function (chunk): void {\n bytesin += chunk.length;\n });\n\n let bytesout = 0;\n const _write = res.write;\n // FIXME: res.write should return boolean\n // @ts-ignore\n res.write = function (buf): boolean {\n bytesout += buf.length;\n /* eslint prefer-rest-params: \"off\" */\n // @ts-ignore\n _write.apply(res, arguments);\n };\n\n const log = function (): void {\n const forwardedFor = req.get('x-forwarded-for');\n const remoteAddress = req.connection.remoteAddress;\n const remoteIP = forwardedFor ? `${forwardedFor} via ${remoteAddress}` : remoteAddress;\n let message;\n if (res.locals._verdaccio_error) {\n message = LOG_VERDACCIO_ERROR;\n } else {\n message = LOG_VERDACCIO_BYTES;\n }\n\n req.url = req.originalUrl;\n req.log.http(\n {\n request: {\n method: req.method,\n url: req.url,\n },\n user: req.remote_user?.name || null,\n remoteIP,\n status: res.statusCode,\n error: res.locals._verdaccio_error,\n bytes: {\n in: bytesin,\n out: bytesout,\n },\n },\n message\n );\n req.originalUrl = req.url;\n };\n\n req.on('close', function (): void {\n log();\n });\n\n const _end = res.end;\n // @ts-ignore\n res.end = function (buf): void {\n if (buf) {\n bytesout += buf.length;\n }\n /* eslint prefer-rest-params: \"off\" */\n // @ts-ignore\n _end.apply(res, arguments);\n log();\n };\n next();\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"match.js","names":["match","regexp","req","res","next","value","exec"],"sources":["../../src/middlewares/match.ts"],"sourcesContent":["import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function match(regexp: RegExp): any {\n return function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer,\n value: string\n ): void {\n if (regexp.exec(value)) {\n next();\n } else {\n next('route');\n }\n };\n}\n"],"mappings":";;;;;;AAEO,SAASA,KAAKA,CAACC,MAAc,EAAO;EACzC,OAAO,UACLC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EACtBC,KAAa,EACP;IACN,IAAIJ,MAAM,CAACK,IAAI,CAACD,KAAK,CAAC,EAAE;MACtBD,IAAI,CAAC,CAAC;IACR,CAAC,MAAM;MACLA,IAAI,CAAC,OAAO,CAAC;IACf;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"match.js","names":["match","regexp","req","res","next","value","exec"],"sources":["../../src/middlewares/match.ts"],"sourcesContent":["import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function match(regexp: RegExp): any {\n return function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer,\n value: string\n ): void {\n if (regexp.exec(value)) {\n next();\n } else {\n next('route');\n }\n };\n}\n"],"mappings":";;;;;;AAEO,SAASA,KAAKA,CAACC,MAAc,EAAO;EACzC,OAAO,UACLC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EACtBC,KAAa,EACP;IACN,IAAIJ,MAAM,CAACK,IAAI,CAACD,KAAK,CAAC,EAAE;MACtBD,IAAI,CAAC,CAAC;IACR,CAAC,MAAM;MACLA,IAAI,CAAC,OAAO,CAAC;IACf;EACF,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","names":["_core","require","media","expect","req","res","next","headers","HEADER_TYPE","CONTENT_TYPE","errorUtils","getCode","HTTP_STATUS","UNSUPPORTED_MEDIA","get"],"sources":["../../src/middlewares/media.ts"],"sourcesContent":["import { HEADER_TYPE, HTTP_STATUS, errorUtils } from '@verdaccio/core';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function media(expect: string | null): any {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n if (req.headers[HEADER_TYPE.CONTENT_TYPE] !== expect) {\n next(\n errorUtils.getCode(\n HTTP_STATUS.UNSUPPORTED_MEDIA,\n 'wrong content-type, expect: ' + expect + ', got: ' + req.get[HEADER_TYPE.CONTENT_TYPE]\n )\n );\n } else {\n next();\n }\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAIO,SAASC,KAAKA,CAACC,MAAqB,EAAO;EAChD,OAAO,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;IACxF,IAAIF,GAAG,CAACG,OAAO,CAACC,iBAAW,CAACC,YAAY,CAAC,KAAKN,MAAM,EAAE;MACpDG,IAAI,CACFI,gBAAU,CAACC,OAAO,CAChBC,iBAAW,CAACC,iBAAiB,EAC7B,8BAA8B,GAAGV,MAAM,GAAG,SAAS,GAAGC,GAAG,CAACU,GAAG,CAACN,iBAAW,CAACC,YAAY,CACxF,CACF,CAAC;IACH,CAAC,MAAM;MACLH,IAAI,CAAC,CAAC;IACR;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"media.js","names":["_core","require","media","expect","req","res","next","headers","HEADER_TYPE","CONTENT_TYPE","errorUtils","getCode","HTTP_STATUS","UNSUPPORTED_MEDIA","get"],"sources":["../../src/middlewares/media.ts"],"sourcesContent":["import { HEADER_TYPE, HTTP_STATUS, errorUtils } from '@verdaccio/core';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function media(expect: string | null): any {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n if (req.headers[HEADER_TYPE.CONTENT_TYPE] !== expect) {\n next(\n errorUtils.getCode(\n HTTP_STATUS.UNSUPPORTED_MEDIA,\n 'wrong content-type, expect: ' + expect + ', got: ' + req.get[HEADER_TYPE.CONTENT_TYPE]\n )\n );\n } else {\n next();\n }\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAIO,SAASC,KAAKA,CAACC,MAAqB,EAAO;EAChD,OAAO,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;IACxF,IAAIF,GAAG,CAACG,OAAO,CAACC,iBAAW,CAACC,YAAY,CAAC,KAAKN,MAAM,EAAE;MACpDG,IAAI,CACFI,gBAAU,CAACC,OAAO,CAChBC,iBAAW,CAACC,iBAAiB,EAC7B,8BAA8B,GAAGV,MAAM,GAAG,SAAS,GAAGC,GAAG,CAACU,GAAG,CAACN,iBAAW,CAACC,YAAY,CACxF,CACF,CAAC;IACH,CAAC,MAAM;MACLH,IAAI,CAAC,CAAC;IACR;EACF,CAAC;AACH","ignoreList":[]}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.rateLimit = rateLimit;
7
7
  var _expressRateLimit = _interopRequireDefault(require("express-rate-limit"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  function rateLimit(rateLimitOptions) {
10
10
  const limiter = new _expressRateLimit.default(rateLimitOptions);
11
11
  return limiter;
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","names":["_expressRateLimit","_interopRequireDefault","require","obj","__esModule","default","rateLimit","rateLimitOptions","limiter","RateLimit"],"sources":["../../src/middlewares/rate-limit.ts"],"sourcesContent":["import RateLimit from 'express-rate-limit';\n\nimport { RateLimit as RateLimitType } from '@verdaccio/types';\n\nexport function rateLimit(rateLimitOptions?: RateLimitType) {\n const limiter = new RateLimit(rateLimitOptions);\n return limiter;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAIpC,SAASG,SAASA,CAACC,gBAAgC,EAAE;EAC1D,MAAMC,OAAO,GAAG,IAAIC,yBAAS,CAACF,gBAAgB,CAAC;EAC/C,OAAOC,OAAO;AAChB"}
1
+ {"version":3,"file":"rate-limit.js","names":["_expressRateLimit","_interopRequireDefault","require","e","__esModule","default","rateLimit","rateLimitOptions","limiter","RateLimit"],"sources":["../../src/middlewares/rate-limit.ts"],"sourcesContent":["import RateLimit from 'express-rate-limit';\n\nimport { RateLimit as RateLimitType } from '@verdaccio/types';\n\nexport function rateLimit(rateLimitOptions?: RateLimitType) {\n const limiter = new RateLimit(rateLimitOptions);\n return limiter;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIpC,SAASG,SAASA,CAACC,gBAAgC,EAAE;EAC1D,MAAMC,OAAO,GAAG,IAAIC,yBAAS,CAACF,gBAAgB,CAAC;EAC/C,OAAOC,OAAO;AAChB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"security-headers.js","names":["_core","require","setSecurityWebHeaders","req","res","next","header","HEADERS","FRAMES_OPTIONS","CSP","CTO","XSS"],"sources":["../../src/middlewares/security-headers.ts"],"sourcesContent":["import { HEADERS } from '@verdaccio/core';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n// TODO: remove, was relocated to web package\n// @ts-deprecated\nexport function setSecurityWebHeaders(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n // disable loading in frames (clickjacking, etc.)\n res.header(HEADERS.FRAMES_OPTIONS, 'deny');\n // avoid stablish connections outside of domain\n res.header(HEADERS.CSP, \"connect-src 'self'\");\n // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff\n res.header(HEADERS.CTO, 'nosniff');\n // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection\n res.header(HEADERS.XSS, '1; mode=block');\n next();\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAIA;AACA;AACO,SAASC,qBAAqBA,CACnCC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EAChB;EACN;EACAD,GAAG,CAACE,MAAM,CAACC,aAAO,CAACC,cAAc,EAAE,MAAM,CAAC;EAC1C;EACAJ,GAAG,CAACE,MAAM,CAACC,aAAO,CAACE,GAAG,EAAE,oBAAoB,CAAC;EAC7C;EACAL,GAAG,CAACE,MAAM,CAACC,aAAO,CAACG,GAAG,EAAE,SAAS,CAAC;EAClC;EACAN,GAAG,CAACE,MAAM,CAACC,aAAO,CAACI,GAAG,EAAE,eAAe,CAAC;EACxCN,IAAI,CAAC,CAAC;AACR"}
1
+ {"version":3,"file":"security-headers.js","names":["_core","require","setSecurityWebHeaders","req","res","next","header","HEADERS","FRAMES_OPTIONS","CSP","CTO","XSS"],"sources":["../../src/middlewares/security-headers.ts"],"sourcesContent":["import { HEADERS } from '@verdaccio/core';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\n// TODO: remove, was relocated to web package\n// @ts-deprecated\nexport function setSecurityWebHeaders(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n // disable loading in frames (clickjacking, etc.)\n res.header(HEADERS.FRAMES_OPTIONS, 'deny');\n // avoid stablish connections outside of domain\n res.header(HEADERS.CSP, \"connect-src 'self'\");\n // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff\n res.header(HEADERS.CTO, 'nosniff');\n // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection\n res.header(HEADERS.XSS, '1; mode=block');\n next();\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAIA;AACA;AACO,SAASC,qBAAqBA,CACnCC,GAAmB,EACnBC,GAAoB,EACpBC,IAAsB,EAChB;EACN;EACAD,GAAG,CAACE,MAAM,CAACC,aAAO,CAACC,cAAc,EAAE,MAAM,CAAC;EAC1C;EACAJ,GAAG,CAACE,MAAM,CAACC,aAAO,CAACE,GAAG,EAAE,oBAAoB,CAAC;EAC7C;EACAL,GAAG,CAACE,MAAM,CAACC,aAAO,CAACG,GAAG,EAAE,SAAS,CAAC;EAClC;EACAN,GAAG,CAACE,MAAM,CAACC,aAAO,CAACI,GAAG,EAAE,eAAe,CAAC;EACxCN,IAAI,CAAC,CAAC;AACR","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"user-agent.js","names":["_config","require","userAgent","config","_req","res","next","setHeader","getUserAgent","user_agent"],"sources":["../../src/middlewares/user-agent.ts"],"sourcesContent":["import { getUserAgent } from '@verdaccio/config';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function userAgent(config) {\n return function (_req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n res.setHeader('x-powered-by', getUserAgent(config?.user_agent));\n next();\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAIO,SAASC,SAASA,CAACC,MAAM,EAAE;EAChC,OAAO,UAAUC,IAAoB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;IACzFD,GAAG,CAACE,SAAS,CAAC,cAAc,EAAE,IAAAC,oBAAY,EAACL,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEM,UAAU,CAAC,CAAC;IAC/DH,IAAI,CAAC,CAAC;EACR,CAAC;AACH"}
1
+ {"version":3,"file":"user-agent.js","names":["_config","require","userAgent","config","_req","res","next","setHeader","getUserAgent","user_agent"],"sources":["../../src/middlewares/user-agent.ts"],"sourcesContent":["import { getUserAgent } from '@verdaccio/config';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function userAgent(config) {\n return function (_req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n res.setHeader('x-powered-by', getUserAgent(config?.user_agent));\n next();\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAIO,SAASC,SAASA,CAACC,MAAM,EAAE;EAChC,OAAO,UAAUC,IAAoB,EAAEC,GAAoB,EAAEC,IAAsB,EAAQ;IACzFD,GAAG,CAACE,SAAS,CAAC,cAAc,EAAE,IAAAC,oBAAY,EAACL,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEM,UAAU,CAAC,CAAC;IAC/DH,IAAI,CAAC,CAAC;EACR,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","names":["_core","require","validateName","_req","_res","next","value","name","validationUtils","errorUtils","getBadRequest","validatePackage"],"sources":["../../src/middlewares/validation.ts"],"sourcesContent":["import { NextFunction, Request, Response } from 'express';\n\nimport { errorUtils, validationUtils } from '@verdaccio/core';\n\nexport function validateName(\n _req: Request,\n _res: Response,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validateName(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n\nexport function validatePackage(\n _req: Request,\n _res,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validatePackage(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n"],"mappings":";;;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AAEO,SAASC,YAAYA,CAC1BC,IAAa,EACbC,IAAc,EACdC,IAAkB,EAClBC,KAAa,EACbC,IAAY,EACZ;EACA,IAAIC,qBAAe,CAACN,YAAY,CAACI,KAAK,CAAC,EAAE;IACvCD,IAAI,CAAC,CAAC;EACR,CAAC,MAAM;IACLA,IAAI,CAACI,gBAAU,CAACC,aAAa,CAAC,UAAU,GAAGH,IAAI,CAAC,CAAC;EACnD;AACF;AAEO,SAASI,eAAeA,CAC7BR,IAAa,EACbC,IAAI,EACJC,IAAkB,EAClBC,KAAa,EACbC,IAAY,EACZ;EACA,IAAIC,qBAAe,CAACG,eAAe,CAACL,KAAK,CAAC,EAAE;IAC1CD,IAAI,CAAC,CAAC;EACR,CAAC,MAAM;IACLA,IAAI,CAACI,gBAAU,CAACC,aAAa,CAAC,UAAU,GAAGH,IAAI,CAAC,CAAC;EACnD;AACF"}
1
+ {"version":3,"file":"validation.js","names":["_core","require","validateName","_req","_res","next","value","name","validationUtils","errorUtils","getBadRequest","validatePackage"],"sources":["../../src/middlewares/validation.ts"],"sourcesContent":["import { NextFunction, Request, Response } from 'express';\n\nimport { errorUtils, validationUtils } from '@verdaccio/core';\n\nexport function validateName(\n _req: Request,\n _res: Response,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validateName(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n\nexport function validatePackage(\n _req: Request,\n _res,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validatePackage(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n"],"mappings":";;;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AAEO,SAASC,YAAYA,CAC1BC,IAAa,EACbC,IAAc,EACdC,IAAkB,EAClBC,KAAa,EACbC,IAAY,EACZ;EACA,IAAIC,qBAAe,CAACN,YAAY,CAACI,KAAK,CAAC,EAAE;IACvCD,IAAI,CAAC,CAAC;EACR,CAAC,MAAM;IACLA,IAAI,CAACI,gBAAU,CAACC,aAAa,CAAC,UAAU,GAAGH,IAAI,CAAC,CAAC;EACnD;AACF;AAEO,SAASI,eAAeA,CAC7BR,IAAa,EACbC,IAAI,EACJC,IAAkB,EAClBC,KAAa,EACbC,IAAY,EACZ;EACA,IAAIC,qBAAe,CAACG,eAAe,CAACL,KAAK,CAAC,EAAE;IAC1CD,IAAI,CAAC,CAAC;EACR,CAAC,MAAM;IACLA,IAAI,CAACI,gBAAU,CAACC,aAAa,CAAC,UAAU,GAAGH,IAAI,CAAC,CAAC;EACnD;AACF","ignoreList":[]}
@@ -31,5 +31,5 @@ var _webMiddleware = _interopRequireDefault(require("./web-middleware"));
31
31
  var _webApi = require("./web-api");
32
32
  var _security = require("./security");
33
33
  var _renderWeb = require("./render-web");
34
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
35
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_webMiddleware","_interopRequireDefault","require","_webApi","_security","_renderWeb","obj","__esModule","default"],"sources":["../../../src/middlewares/web/index.ts"],"sourcesContent":["export { default as webMiddleware } from './web-middleware';\nexport { webAPIMiddleware } from './web-api';\nexport { setSecurityWebHeaders } from './security';\nexport { renderWebMiddleware } from './render-web';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAAmD,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA"}
1
+ {"version":3,"file":"index.js","names":["_webMiddleware","_interopRequireDefault","require","_webApi","_security","_renderWeb","e","__esModule","default"],"sources":["../../../src/middlewares/web/index.ts"],"sourcesContent":["export { default as webMiddleware } from './web-middleware';\nexport { webAPIMiddleware } from './web-api';\nexport { setSecurityWebHeaders } from './security';\nexport { renderWebMiddleware } from './render-web';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAAmD,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -12,7 +12,7 @@ var _core = require("@verdaccio/core");
12
12
  var _url = require("@verdaccio/url");
13
13
  var _security = require("./security");
14
14
  var _renderHTML = _interopRequireDefault(require("./utils/renderHTML"));
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
16
  const debug = (0, _debug.default)('verdaccio:web:render');
17
17
  const sendFileCallback = next => err => {
18
18
  if (!err) {
@@ -25,7 +25,7 @@ const sendFileCallback = next => err => {
25
25
  }
26
26
  };
27
27
  function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {
28
- var _config$web, _config$web2, _config$web3, _config$web4;
28
+ var _config$web3, _config$web4, _config$web5, _config$web6;
29
29
  const {
30
30
  staticPath,
31
31
  manifest,
@@ -42,8 +42,18 @@ function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {
42
42
 
43
43
  // any match within the static is routed to the file system
44
44
  router.get('/-/static/*', function (req, res, next) {
45
+ var _config$web;
45
46
  const filename = req.params[0];
46
- const file = `${staticPath}/${filename}`;
47
+ let file = `${staticPath}/${filename}`;
48
+ if (filename === 'favicon.ico' && config !== null && config !== void 0 && (_config$web = config.web) !== null && _config$web !== void 0 && _config$web.favicon) {
49
+ var _config$web2;
50
+ file = config === null || config === void 0 || (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.favicon;
51
+ if ((0, _url.isURLhasValidProtocol)(file)) {
52
+ debug('redirect to favicon %s', file);
53
+ req.url = file;
54
+ return next();
55
+ }
56
+ }
47
57
  debug('render static file %o', file);
48
58
  res.sendFile(file, sendFileCallback(next));
49
59
  });
@@ -76,12 +86,12 @@ function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {
76
86
  }
77
87
  return logo;
78
88
  }
79
- const logo = renderLogo(config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.logo);
80
- if (config !== null && config !== void 0 && (_config$web2 = config.web) !== null && _config$web2 !== void 0 && _config$web2.logo) {
89
+ const logo = renderLogo(config === null || config === void 0 || (_config$web3 = config.web) === null || _config$web3 === void 0 ? void 0 : _config$web3.logo);
90
+ if (config !== null && config !== void 0 && (_config$web4 = config.web) !== null && _config$web4 !== void 0 && _config$web4.logo) {
81
91
  config.web.logo = logo;
82
92
  }
83
- const logoDark = renderLogo(config === null || config === void 0 ? void 0 : (_config$web3 = config.web) === null || _config$web3 === void 0 ? void 0 : _config$web3.logoDark);
84
- if (config !== null && config !== void 0 && (_config$web4 = config.web) !== null && _config$web4 !== void 0 && _config$web4.logoDark) {
93
+ const logoDark = renderLogo(config === null || config === void 0 || (_config$web5 = config.web) === null || _config$web5 === void 0 ? void 0 : _config$web5.logoDark);
94
+ if (config !== null && config !== void 0 && (_config$web6 = config.web) !== null && _config$web6 !== void 0 && _config$web6.logoDark) {
85
95
  config.web.logoDark = logoDark;
86
96
  }
87
97
  router.get('/-/web/:section/*', function (req, res) {
@@ -1 +1 @@
1
- {"version":3,"file":"render-web.js","names":["_debug","_interopRequireDefault","require","_express","_fs","_path","_core","_url","_security","_renderHTML","obj","__esModule","default","debug","buildDebug","sendFileCallback","next","err","status","HTTP_STATUS","NOT_FOUND","renderWebMiddleware","config","tokenMiddleware","pluginOptions","_config$web","_config$web2","_config$web3","_config$web4","staticPath","manifest","manifestFiles","router","express","Router","use","setSecurityWebHeaders","get","req","res","filename","params","file","sendFile","renderLogo","logo","isURLhasValidProtocol","absoluteLocalFile","path","posix","resolve","fs","existsSync","accessSync","constants","R_OK","join","basename","_req","undefined","web","logoDark","renderHTML"],"sources":["../../../src/middlewares/web/render-web.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport express from 'express';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { isURLhasValidProtocol } from '@verdaccio/url';\n\nimport { setSecurityWebHeaders } from './security';\nimport renderHTML from './utils/renderHTML';\n\nconst debug = buildDebug('verdaccio:web:render');\n\nconst sendFileCallback = (next) => (err) => {\n if (!err) {\n return;\n }\n if (err.status === HTTP_STATUS.NOT_FOUND) {\n next();\n } else {\n next(err);\n }\n};\n\nexport function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {\n const { staticPath, manifest, manifestFiles } = pluginOptions;\n debug('static path %o', staticPath);\n\n /* eslint new-cap:off */\n const router = express.Router();\n if (typeof tokenMiddleware === 'function') {\n router.use(tokenMiddleware);\n }\n\n router.use(setSecurityWebHeaders);\n\n // any match within the static is routed to the file system\n router.get('/-/static/*', function (req, res, next) {\n const filename = req.params[0];\n const file = `${staticPath}/${filename}`;\n debug('render static file %o', file);\n res.sendFile(file, sendFileCallback(next));\n });\n\n function renderLogo(logo: string | undefined): string | undefined {\n // check the origin of the logo\n if (logo && !isURLhasValidProtocol(logo)) {\n // URI related to a local file\n const absoluteLocalFile = path.posix.resolve(logo);\n debug('serve local logo %s', absoluteLocalFile);\n try {\n // TODO: replace existsSync by async alternative\n if (\n fs.existsSync(absoluteLocalFile) &&\n typeof fs.accessSync(absoluteLocalFile, fs.constants.R_OK) === 'undefined'\n ) {\n // Note: `path.join` will break on Windows, because it transforms `/` to `\\`\n // Use POSIX version `path.posix.join` instead.\n logo = path.posix.join('/-/static/', path.basename(logo));\n router.get(logo, function (_req, res, next) {\n // @ts-ignore\n debug('serve custom logo web:%s - local:%s', logo, absoluteLocalFile);\n res.sendFile(absoluteLocalFile, sendFileCallback(next));\n });\n debug('enabled custom logo %s', logo);\n } else {\n logo = undefined;\n debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);\n }\n } catch {\n logo = undefined;\n debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);\n }\n }\n return logo;\n }\n\n const logo = renderLogo(config?.web?.logo);\n if (config?.web?.logo) {\n config.web.logo = logo;\n }\n const logoDark = renderLogo(config?.web?.logoDark);\n if (config?.web?.logoDark) {\n config.web.logoDark = logoDark;\n }\n\n router.get('/-/web/:section/*', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render html section');\n });\n\n router.get('/', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render root');\n });\n\n return router;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"render-web.js","names":["_debug","_interopRequireDefault","require","_express","_fs","_path","_core","_url","_security","_renderHTML","e","__esModule","default","debug","buildDebug","sendFileCallback","next","err","status","HTTP_STATUS","NOT_FOUND","renderWebMiddleware","config","tokenMiddleware","pluginOptions","_config$web3","_config$web4","_config$web5","_config$web6","staticPath","manifest","manifestFiles","router","express","Router","use","setSecurityWebHeaders","get","req","res","_config$web","filename","params","file","web","favicon","_config$web2","isURLhasValidProtocol","url","sendFile","renderLogo","logo","absoluteLocalFile","path","posix","resolve","fs","existsSync","accessSync","constants","R_OK","join","basename","_req","undefined","logoDark","renderHTML"],"sources":["../../../src/middlewares/web/render-web.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport express from 'express';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { isURLhasValidProtocol } from '@verdaccio/url';\n\nimport { setSecurityWebHeaders } from './security';\nimport renderHTML from './utils/renderHTML';\n\nconst debug = buildDebug('verdaccio:web:render');\n\nconst sendFileCallback = (next) => (err) => {\n if (!err) {\n return;\n }\n if (err.status === HTTP_STATUS.NOT_FOUND) {\n next();\n } else {\n next(err);\n }\n};\n\nexport function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {\n const { staticPath, manifest, manifestFiles } = pluginOptions;\n debug('static path %o', staticPath);\n\n /* eslint new-cap:off */\n const router = express.Router();\n if (typeof tokenMiddleware === 'function') {\n router.use(tokenMiddleware);\n }\n\n router.use(setSecurityWebHeaders);\n\n // any match within the static is routed to the file system\n router.get('/-/static/*', function (req, res, next) {\n const filename = req.params[0];\n let file = `${staticPath}/${filename}`;\n if (filename === 'favicon.ico' && config?.web?.favicon) {\n file = config?.web?.favicon;\n if (isURLhasValidProtocol(file)) {\n debug('redirect to favicon %s', file);\n req.url = file;\n return next();\n }\n }\n debug('render static file %o', file);\n res.sendFile(file, sendFileCallback(next));\n });\n\n function renderLogo(logo: string | undefined): string | undefined {\n // check the origin of the logo\n if (logo && !isURLhasValidProtocol(logo)) {\n // URI related to a local file\n const absoluteLocalFile = path.posix.resolve(logo);\n debug('serve local logo %s', absoluteLocalFile);\n try {\n // TODO: replace existsSync by async alternative\n if (\n fs.existsSync(absoluteLocalFile) &&\n typeof fs.accessSync(absoluteLocalFile, fs.constants.R_OK) === 'undefined'\n ) {\n // Note: `path.join` will break on Windows, because it transforms `/` to `\\`\n // Use POSIX version `path.posix.join` instead.\n logo = path.posix.join('/-/static/', path.basename(logo));\n router.get(logo, function (_req, res, next) {\n // @ts-ignore\n debug('serve custom logo web:%s - local:%s', logo, absoluteLocalFile);\n res.sendFile(absoluteLocalFile, sendFileCallback(next));\n });\n debug('enabled custom logo %s', logo);\n } else {\n logo = undefined;\n debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);\n }\n } catch {\n logo = undefined;\n debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);\n }\n }\n return logo;\n }\n\n const logo = renderLogo(config?.web?.logo);\n if (config?.web?.logo) {\n config.web.logo = logo;\n }\n const logoDark = renderLogo(config?.web?.logoDark);\n if (config?.web?.logoDark) {\n config.web.logoDark = logoDark;\n }\n\n router.get('/-/web/:section/*', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render html section');\n });\n\n router.get('/', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render root');\n });\n\n return router;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","names":["_core","require","setSecurityWebHeaders","_req","res","next","header","HEADERS","FRAMES_OPTIONS","CSP","CTO","XSS"],"sources":["../../../src/middlewares/web/security.ts"],"sourcesContent":["import { HEADERS } from '@verdaccio/core';\n\nexport function setSecurityWebHeaders(_req, res, next): void {\n // disable loading in frames (clickjacking, etc.)\n res.header(HEADERS.FRAMES_OPTIONS, 'deny');\n // avoid stablish connections outside of domain\n res.header(HEADERS.CSP, \"connect-src 'self'\");\n // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff\n res.header(HEADERS.CTO, 'nosniff');\n // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection\n res.header(HEADERS.XSS, '1; mode=block');\n next();\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEO,SAASC,qBAAqBA,CAACC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAQ;EAC3D;EACAD,GAAG,CAACE,MAAM,CAACC,aAAO,CAACC,cAAc,EAAE,MAAM,CAAC;EAC1C;EACAJ,GAAG,CAACE,MAAM,CAACC,aAAO,CAACE,GAAG,EAAE,oBAAoB,CAAC;EAC7C;EACAL,GAAG,CAACE,MAAM,CAACC,aAAO,CAACG,GAAG,EAAE,SAAS,CAAC;EAClC;EACAN,GAAG,CAACE,MAAM,CAACC,aAAO,CAACI,GAAG,EAAE,eAAe,CAAC;EACxCN,IAAI,CAAC,CAAC;AACR"}
1
+ {"version":3,"file":"security.js","names":["_core","require","setSecurityWebHeaders","_req","res","next","header","HEADERS","FRAMES_OPTIONS","CSP","CTO","XSS"],"sources":["../../../src/middlewares/web/security.ts"],"sourcesContent":["import { HEADERS } from '@verdaccio/core';\n\nexport function setSecurityWebHeaders(_req, res, next): void {\n // disable loading in frames (clickjacking, etc.)\n res.header(HEADERS.FRAMES_OPTIONS, 'deny');\n // avoid stablish connections outside of domain\n res.header(HEADERS.CSP, \"connect-src 'self'\");\n // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff\n res.header(HEADERS.CTO, 'nosniff');\n // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection\n res.header(HEADERS.XSS, '1; mode=block');\n next();\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEO,SAASC,qBAAqBA,CAACC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAQ;EAC3D;EACAD,GAAG,CAACE,MAAM,CAACC,aAAO,CAACC,cAAc,EAAE,MAAM,CAAC;EAC1C;EACAJ,GAAG,CAACE,MAAM,CAACC,aAAO,CAACE,GAAG,EAAE,oBAAoB,CAAC;EAC7C;EACAL,GAAG,CAACE,MAAM,CAACC,aAAO,CAACG,GAAG,EAAE,SAAS,CAAC;EAClC;EACAN,GAAG,CAACE,MAAM,CAACC,aAAO,CAACI,GAAG,EAAE,eAAe,CAAC;EACxCN,IAAI,CAAC,CAAC;AACR","ignoreList":[]}
@@ -5,14 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getManifestValue = getManifestValue;
7
7
  var _debug = _interopRequireDefault(require("debug"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  const debug = (0, _debug.default)('verdaccio:middleware:web:render:manifest');
10
10
  function getManifestValue(manifestItems, manifest, basePath = '') {
11
11
  return manifestItems === null || manifestItems === void 0 ? void 0 : manifestItems.map(item => {
12
12
  debug('resolve item %o', item);
13
- const resolvedItem = `${basePath}${manifest[item]}`;
13
+ const resolvedItem = `${stripTrailingSlash(basePath)}/${stripLeadingSlash(manifest[item])}`;
14
14
  debug('resolved item %o', resolvedItem);
15
15
  return resolvedItem;
16
16
  });
17
17
  }
18
+ function stripTrailingSlash(path) {
19
+ return path.replace(/\/$/, '');
20
+ }
21
+ function stripLeadingSlash(path) {
22
+ return path.replace(/^\//, '');
23
+ }
18
24
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","names":["_debug","_interopRequireDefault","require","obj","__esModule","default","debug","buildDebug","getManifestValue","manifestItems","manifest","basePath","map","item","resolvedItem"],"sources":["../../../../src/middlewares/web/utils/manifest.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nexport type Manifest = {\n // goes on first place at the header\n ico: string;\n css: string[];\n js: string[];\n};\n\nconst debug = buildDebug('verdaccio:middleware:web:render:manifest');\n\nexport function getManifestValue(\n manifestItems: string[],\n manifest,\n basePath: string = ''\n): string[] {\n return manifestItems?.map((item) => {\n debug('resolve item %o', item);\n const resolvedItem = `${basePath}${manifest[item]}`;\n debug('resolved item %o', resolvedItem);\n return resolvedItem;\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA+B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAS/B,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,0CAA0C,CAAC;AAE7D,SAASC,gBAAgBA,CAC9BC,aAAuB,EACvBC,QAAQ,EACRC,QAAgB,GAAG,EAAE,EACX;EACV,OAAOF,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEG,GAAG,CAAEC,IAAI,IAAK;IAClCP,KAAK,CAAC,iBAAiB,EAAEO,IAAI,CAAC;IAC9B,MAAMC,YAAY,GAAI,GAAEH,QAAS,GAAED,QAAQ,CAACG,IAAI,CAAE,EAAC;IACnDP,KAAK,CAAC,kBAAkB,EAAEQ,YAAY,CAAC;IACvC,OAAOA,YAAY;EACrB,CAAC,CAAC;AACJ"}
1
+ {"version":3,"file":"manifest.js","names":["_debug","_interopRequireDefault","require","e","__esModule","default","debug","buildDebug","getManifestValue","manifestItems","manifest","basePath","map","item","resolvedItem","stripTrailingSlash","stripLeadingSlash","path","replace"],"sources":["../../../../src/middlewares/web/utils/manifest.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nexport type Manifest = {\n // goes on first place at the header\n ico: string;\n css: string[];\n js: string[];\n};\n\nconst debug = buildDebug('verdaccio:middleware:web:render:manifest');\n\nexport function getManifestValue(\n manifestItems: string[],\n manifest,\n basePath: string = ''\n): string[] {\n return manifestItems?.map((item) => {\n debug('resolve item %o', item);\n const resolvedItem = `${stripTrailingSlash(basePath)}/${stripLeadingSlash(manifest[item])}`;\n debug('resolved item %o', resolvedItem);\n return resolvedItem;\n });\n}\n\nfunction stripTrailingSlash(path: string): string {\n return path.replace(/\\/$/, '');\n}\n\nfunction stripLeadingSlash(path: string): string {\n return path.replace(/^\\//, '');\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA+B,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAS/B,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,0CAA0C,CAAC;AAE7D,SAASC,gBAAgBA,CAC9BC,aAAuB,EACvBC,QAAQ,EACRC,QAAgB,GAAG,EAAE,EACX;EACV,OAAOF,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEG,GAAG,CAAEC,IAAI,IAAK;IAClCP,KAAK,CAAC,iBAAiB,EAAEO,IAAI,CAAC;IAC9B,MAAMC,YAAY,GAAG,GAAGC,kBAAkB,CAACJ,QAAQ,CAAC,IAAIK,iBAAiB,CAACN,QAAQ,CAACG,IAAI,CAAC,CAAC,EAAE;IAC3FP,KAAK,CAAC,kBAAkB,EAAEQ,YAAY,CAAC;IACvC,OAAOA,YAAY;EACrB,CAAC,CAAC;AACJ;AAEA,SAASC,kBAAkBA,CAACE,IAAY,EAAU;EAChD,OAAOA,IAAI,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAChC;AAEA,SAASF,iBAAiBA,CAACC,IAAY,EAAU;EAC/C,OAAOA,IAAI,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAChC","ignoreList":[]}
@@ -14,7 +14,7 @@ var _core = require("@verdaccio/core");
14
14
  var _url2 = require("@verdaccio/url");
15
15
  var _template = _interopRequireDefault(require("./template"));
16
16
  var _webUtils = require("./web-utils");
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
18
  const DEFAULT_LANGUAGE = 'es-US';
19
19
  const cache = new _lruCache.default({
20
20
  max: 500,
@@ -40,30 +40,31 @@ function resolveLogo(logo, url_prefix, requestOptions) {
40
40
  }
41
41
  }
42
42
  function renderHTML(config, manifest, manifestFiles, requestOptions, res) {
43
- var _config$i18n$web, _config$i18n, _config$web$hideDepre, _config$web, _config$web2, _config$web3, _config$web$darkMode, _config$web4, _config$web$title, _config$web5, _config$web$scope, _config$web6, _config$web7, _config$web8, _config$web$pkgManage, _config$web9, _res$locals$app_versi, _validatePrimaryColor, _config$web$primary_c, _config$web10, _config$web11;
43
+ var _config$i18n$web, _config$i18n, _config$web$hideDepre, _config$web, _config$web2, _config$web3, _config$web$darkMode, _config$web4, _config$web$title, _config$web5, _config$web$scope, _config$web6, _config$web7, _config$web8, _config$web9, _config$web$pkgManage, _config$web10, _res$locals$app_versi, _validatePrimaryColor, _config$web$primary_c, _config$web11, _config$web12;
44
44
  const {
45
45
  url_prefix
46
46
  } = config;
47
47
  const base = (0, _url2.getPublicUrl)(config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
48
48
  const basename = new _url.URL(base).pathname;
49
- const language = (_config$i18n$web = config === null || config === void 0 ? void 0 : (_config$i18n = config.i18n) === null || _config$i18n === void 0 ? void 0 : _config$i18n.web) !== null && _config$i18n$web !== void 0 ? _config$i18n$web : DEFAULT_LANGUAGE;
50
- const hideDeprecatedVersions = (_config$web$hideDepre = config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.hideDeprecatedVersions) !== null && _config$web$hideDepre !== void 0 ? _config$web$hideDepre : false;
49
+ const language = (_config$i18n$web = config === null || config === void 0 || (_config$i18n = config.i18n) === null || _config$i18n === void 0 ? void 0 : _config$i18n.web) !== null && _config$i18n$web !== void 0 ? _config$i18n$web : DEFAULT_LANGUAGE;
50
+ const hideDeprecatedVersions = (_config$web$hideDepre = config === null || config === void 0 || (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.hideDeprecatedVersions) !== null && _config$web$hideDepre !== void 0 ? _config$web$hideDepre : false;
51
51
  // @ts-ignore
52
- const needHtmlCache = [undefined, null].includes(config === null || config === void 0 ? void 0 : (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.html_cache) ? true : config === null || config === void 0 ? void 0 : (_config$web3 = config.web) === null || _config$web3 === void 0 ? void 0 : _config$web3.html_cache;
53
- const darkMode = (_config$web$darkMode = config === null || config === void 0 ? void 0 : (_config$web4 = config.web) === null || _config$web4 === void 0 ? void 0 : _config$web4.darkMode) !== null && _config$web$darkMode !== void 0 ? _config$web$darkMode : false;
54
- const title = (_config$web$title = config === null || config === void 0 ? void 0 : (_config$web5 = config.web) === null || _config$web5 === void 0 ? void 0 : _config$web5.title) !== null && _config$web$title !== void 0 ? _config$web$title : _config.WEB_TITLE;
52
+ const needHtmlCache = [undefined, null].includes(config === null || config === void 0 || (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.html_cache) ? true : config === null || config === void 0 || (_config$web3 = config.web) === null || _config$web3 === void 0 ? void 0 : _config$web3.html_cache;
53
+ const darkMode = (_config$web$darkMode = config === null || config === void 0 || (_config$web4 = config.web) === null || _config$web4 === void 0 ? void 0 : _config$web4.darkMode) !== null && _config$web$darkMode !== void 0 ? _config$web$darkMode : false;
54
+ const title = (_config$web$title = config === null || config === void 0 || (_config$web5 = config.web) === null || _config$web5 === void 0 ? void 0 : _config$web5.title) !== null && _config$web$title !== void 0 ? _config$web$title : _config.WEB_TITLE;
55
55
  const login = (0, _webUtils.hasLogin)(config);
56
- const scope = (_config$web$scope = config === null || config === void 0 ? void 0 : (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.scope) !== null && _config$web$scope !== void 0 ? _config$web$scope : '';
57
- const logo = resolveLogo(config === null || config === void 0 ? void 0 : (_config$web7 = config.web) === null || _config$web7 === void 0 ? void 0 : _config$web7.logo, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
58
- const logoDark = resolveLogo(config === null || config === void 0 ? void 0 : (_config$web8 = config.web) === null || _config$web8 === void 0 ? void 0 : _config$web8.logoDark, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
59
- const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 ? void 0 : (_config$web9 = config.web) === null || _config$web9 === void 0 ? void 0 : _config$web9.pkgManagers) !== null && _config$web$pkgManage !== void 0 ? _config$web$pkgManage : ['yarn', 'pnpm', 'npm'];
56
+ const scope = (_config$web$scope = config === null || config === void 0 || (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.scope) !== null && _config$web$scope !== void 0 ? _config$web$scope : '';
57
+ const favicon = resolveLogo(config === null || config === void 0 || (_config$web7 = config.web) === null || _config$web7 === void 0 ? void 0 : _config$web7.favicon, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
58
+ const logo = resolveLogo(config === null || config === void 0 || (_config$web8 = config.web) === null || _config$web8 === void 0 ? void 0 : _config$web8.logo, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
59
+ const logoDark = resolveLogo(config === null || config === void 0 || (_config$web9 = config.web) === null || _config$web9 === void 0 ? void 0 : _config$web9.logoDark, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
60
+ const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 || (_config$web10 = config.web) === null || _config$web10 === void 0 ? void 0 : _config$web10.pkgManagers) !== null && _config$web$pkgManage !== void 0 ? _config$web$pkgManage : ['yarn', 'pnpm', 'npm'];
60
61
  const version = (_res$locals$app_versi = res.locals.app_version) !== null && _res$locals$app_versi !== void 0 ? _res$locals$app_versi : '';
61
62
  const flags = {
62
63
  ...config.flags,
63
64
  // legacy from 5.x
64
65
  ...config.experiments
65
66
  };
66
- const primaryColor = (_validatePrimaryColor = (0, _webUtils.validatePrimaryColor)((_config$web$primary_c = config === null || config === void 0 ? void 0 : (_config$web10 = config.web) === null || _config$web10 === void 0 ? void 0 : _config$web10.primary_color) !== null && _config$web$primary_c !== void 0 ? _config$web$primary_c : config === null || config === void 0 ? void 0 : (_config$web11 = config.web) === null || _config$web11 === void 0 ? void 0 : _config$web11.primaryColor)) !== null && _validatePrimaryColor !== void 0 ? _validatePrimaryColor : '#4b5e40';
67
+ const primaryColor = (_validatePrimaryColor = (0, _webUtils.validatePrimaryColor)((_config$web$primary_c = config === null || config === void 0 || (_config$web11 = config.web) === null || _config$web11 === void 0 ? void 0 : _config$web11.primary_color) !== null && _config$web$primary_c !== void 0 ? _config$web$primary_c : config === null || config === void 0 || (_config$web12 = config.web) === null || _config$web12 === void 0 ? void 0 : _config$web12.primaryColor)) !== null && _validatePrimaryColor !== void 0 ? _validatePrimaryColor : '#4b5e40';
67
68
  const {
68
69
  scriptsBodyAfter,
69
70
  metaScripts,
@@ -98,6 +99,7 @@ function renderHTML(config, manifest, manifestFiles, requestOptions, res) {
98
99
  version,
99
100
  logo,
100
101
  logoDark,
102
+ favicon,
101
103
  flags,
102
104
  login,
103
105
  pkgManagers,