@verdaccio/node-api 9.0.0-next-9.7 → 9.0.0-next-9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export { initServer, runServer } from './server';
2
+ export type { ServerFactory } from './server';
package/build/server.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { ConfigYaml } from '@verdaccio/types';
2
+ export type ServerFactory = (config: ConfigYaml) => Promise<any>;
2
3
  /**
3
4
  * Return a native HTTP/HTTPS server instance
4
5
  * @param config
@@ -13,7 +14,7 @@ export declare function createServerFactory(config: ConfigYaml, addr: any, app:
13
14
  * @param version
14
15
  * @param pkgName
15
16
  */
16
- export declare function initServer(config: ConfigYaml, port: string | void, version: string, pkgName: string): Promise<void>;
17
+ export declare function initServer(config: ConfigYaml, port: string | void, version: string, pkgName: string, serverFactory: ServerFactory): Promise<void>;
17
18
  /**
18
19
  * Exposes a server factory to be instantiated programmatically.
19
20
  *
@@ -27,4 +28,4 @@ export declare function initServer(config: ConfigYaml, port: string | void, vers
27
28
  ```
28
29
  * @param config
29
30
  */
30
- export declare function runServer(config?: string | ConfigYaml): Promise<any>;
31
+ export declare function runServer(config: string | ConfigYaml | undefined, serverFactory: ServerFactory): Promise<any>;
package/build/server.js CHANGED
@@ -2,7 +2,7 @@ const require_runtime = require("./_virtual/_rolldown/runtime.js");
2
2
  const require_experiments = require("./experiments.js");
3
3
  let debug = require("debug");
4
4
  debug = require_runtime.__toESM(debug);
5
- let lodash = require("lodash");
5
+ let lodash_es = require("lodash-es");
6
6
  let node_constants = require("node:constants");
7
7
  node_constants = require_runtime.__toESM(node_constants);
8
8
  let node_fs = require("node:fs");
@@ -15,8 +15,6 @@ let node_url = require("node:url");
15
15
  node_url = require_runtime.__toESM(node_url);
16
16
  let _verdaccio_config = require("@verdaccio/config");
17
17
  let _verdaccio_logger = require("@verdaccio/logger");
18
- let _verdaccio_server = require("@verdaccio/server");
19
- _verdaccio_server = require_runtime.__toESM(_verdaccio_server);
20
18
  //#region src/server.ts
21
19
  var debug$1 = (0, debug.default)("verdaccio:node-api");
22
20
  function unlinkAddressPath(addr) {
@@ -39,13 +37,13 @@ function createServerFactory(config, addr, app) {
39
37
  if (!(keyCertConfig.key && keyCertConfig.cert || pfxConfig.pfx)) throw Error("bad format https configuration");
40
38
  if (pfxConfig.pfx) {
41
39
  const { pfx, passphrase } = pfxConfig;
42
- httpsOptions = (0, lodash.assign)(httpsOptions, {
40
+ httpsOptions = (0, lodash_es.assign)(httpsOptions, {
43
41
  pfx: node_fs.default.readFileSync(pfx),
44
42
  passphrase: passphrase || ""
45
43
  });
46
44
  } else {
47
45
  const { key, cert, ca } = keyCertConfig;
48
- httpsOptions = (0, lodash.assign)(httpsOptions, {
46
+ httpsOptions = (0, lodash_es.assign)(httpsOptions, {
49
47
  key: node_fs.default.readFileSync(key),
50
48
  cert: node_fs.default.readFileSync(cert),
51
49
  ...ca && { ca: node_fs.default.readFileSync(ca) }
@@ -71,14 +69,14 @@ function createServerFactory(config, addr, app) {
71
69
  * @param version
72
70
  * @param pkgName
73
71
  */
74
- async function initServer(config, port, version, pkgName) {
75
- return new Promise(async (resolve, reject) => {
76
- const logger = await (0, _verdaccio_logger.setup)(config?.log);
77
- const addr = (0, _verdaccio_config.getListenAddress)(port ?? config?.listen, logger);
78
- require_experiments.displayExperimentsInfoBox(config.flags);
79
- const serverFactory = createServerFactory(config, addr, await (0, _verdaccio_server.default)(config));
80
- serverFactory.listen(addr.port || addr.path, addr.host, () => {
81
- if ((0, lodash.isFunction)(process.send)) process.send({ verdaccio_started: true });
72
+ async function initServer(config, port, version, pkgName, serverFactory) {
73
+ const logger = await (0, _verdaccio_logger.setup)(config?.log);
74
+ const addr = (0, _verdaccio_config.getListenAddress)(port ?? config?.listen, logger);
75
+ require_experiments.displayExperimentsInfoBox(config.flags);
76
+ const httpServer = createServerFactory(config, addr, await serverFactory(config));
77
+ return new Promise((resolve, reject) => {
78
+ httpServer.listen(addr.port || addr.path, addr.host, () => {
79
+ if (typeof process.send === "function") process.send({ verdaccio_started: true });
82
80
  const addressServer = `${addr.path ? node_url.default.format({
83
81
  protocol: "unix",
84
82
  pathname: addr.path
@@ -97,7 +95,7 @@ async function initServer(config, port, version, pkgName) {
97
95
  });
98
96
  function handleShutdownGracefully() {
99
97
  logger.info("received shutdown signal - closing server gracefully...");
100
- serverFactory.close(() => {
98
+ httpServer.close(() => {
101
99
  logger.info("server closed.");
102
100
  process.exit(0);
103
101
  });
@@ -122,11 +120,11 @@ app.listen(4000, (event) => {
122
120
  ```
123
121
  * @param config
124
122
  */
125
- async function runServer(config) {
123
+ async function runServer(config, serverFactory) {
126
124
  const configurationParsed = (0, _verdaccio_config.getConfigParsed)(config);
127
125
  await (0, _verdaccio_logger.setup)(configurationParsed.log);
128
126
  require_experiments.displayExperimentsInfoBox(configurationParsed.flags);
129
- return createServerFactory(configurationParsed, (0, _verdaccio_config.getListenAddress)(configurationParsed.listen, _verdaccio_logger.logger), await (0, _verdaccio_server.default)(configurationParsed));
127
+ return createServerFactory(configurationParsed, (0, _verdaccio_config.getListenAddress)(configurationParsed.listen, _verdaccio_logger.logger), await serverFactory(configurationParsed));
130
128
  }
131
129
  //#endregion
132
130
  exports.initServer = initServer;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","names":[],"sources":["../src/server.ts"],"sourcesContent":["/* eslint-disable */\nimport buildDebug from 'debug';\nimport { assign, isFunction } from 'lodash';\nimport constants from 'node:constants';\nimport fs from 'node:fs';\nimport http from 'node:http';\nimport https from 'node:https';\nimport url from 'node:url';\n\nimport { getConfigParsed, getListenAddress } from '@verdaccio/config';\nimport { logger, setup } from '@verdaccio/logger';\nimport expressServer from '@verdaccio/server';\nimport { ConfigYaml, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';\n\nimport { displayExperimentsInfoBox } from './experiments';\n\nconst debug = buildDebug('verdaccio:node-api');\n\nfunction unlinkAddressPath(addr) {\n if (addr.path && fs.existsSync(addr.path)) {\n fs.unlinkSync(addr.path);\n }\n}\n\n/**\n * Return a native HTTP/HTTPS server instance\n * @param config\n * @param addr\n * @param app\n */\nexport function createServerFactory(config: ConfigYaml, addr, app) {\n let serverFactory;\n if (addr.proto === 'https') {\n debug('https enabled');\n try {\n let httpsOptions = {\n // disable insecure SSLv2 and SSLv3\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3,\n };\n\n const keyCertConfig = config.https as HttpsConfKeyCert;\n const pfxConfig = config.https as HttpsConfPfx;\n\n // https must either have key and cert or a pfx and (optionally) a passphrase\n if (!((keyCertConfig.key && keyCertConfig.cert) || pfxConfig.pfx)) {\n // logHTTPSError(configPath);\n throw Error('bad format https configuration');\n }\n\n if (pfxConfig.pfx) {\n const { pfx, passphrase } = pfxConfig;\n httpsOptions = assign(httpsOptions, {\n pfx: fs.readFileSync(pfx),\n passphrase: passphrase || '',\n });\n } else {\n const { key, cert, ca } = keyCertConfig;\n httpsOptions = assign(httpsOptions, {\n key: fs.readFileSync(key),\n cert: fs.readFileSync(cert),\n ...(ca && {\n ca: fs.readFileSync(ca),\n }),\n });\n }\n // TODO: enable http2 as feature\n // if (config.server.http2) <-- check if force http2\n serverFactory = https.createServer(httpsOptions, app);\n } catch (err: any) {\n throw new Error(`cannot create https server: ${err.message}`);\n }\n } else {\n // http\n debug('http enabled');\n serverFactory = http.createServer(app);\n }\n\n debug('server created');\n\n if (\n config.server &&\n typeof config.server.keepAliveTimeout !== 'undefined' &&\n // @ts-ignore\n config.server.keepAliveTimeout !== 'null'\n ) {\n // library definition for node is not up to date (doesn't contain recent 8.0 changes)\n serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1000;\n }\n // FIXE: I could not find the reason of this code.\n unlinkAddressPath(addr);\n\n return serverFactory;\n}\n\n/**\n * Start the server on the port defined (or the port defined in the config file)\n * @param config\n * @param port\n * @param version\n * @param pkgName\n */\nexport async function initServer(\n config: ConfigYaml,\n port: string | void,\n version: string,\n pkgName: string\n): Promise<void> {\n return new Promise(async (resolve, reject) => {\n const logger = await setup(config?.log as any);\n const addr = getListenAddress(port ?? config?.listen, logger);\n displayExperimentsInfoBox(config.flags);\n\n let app = await expressServer(config);\n const serverFactory = createServerFactory(config, addr, app);\n serverFactory\n .listen(addr.port || addr.path, addr.host, (): void => {\n // send a message for test\n if (isFunction(process.send)) {\n process.send({\n verdaccio_started: true,\n });\n }\n const addressServer = `${\n addr.path\n ? url.format({\n protocol: 'unix',\n pathname: addr.path,\n })\n : url.format({\n protocol: addr.proto,\n hostname: addr.host,\n port: addr.port,\n pathname: '/',\n })\n }`;\n logger.info({ addressServer }, 'http address: @{addressServer}');\n logger.info({ version }, 'version: @{version}');\n resolve();\n })\n .on('error', function (err): void {\n reject(err);\n process.exitCode = 1;\n });\n function handleShutdownGracefully() {\n logger.info('received shutdown signal - closing server gracefully...');\n serverFactory.close(() => {\n logger.info('server closed.');\n process.exit(0);\n });\n }\n\n for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {\n // Use once() so that receiving double signals exit the app.\n process.once(signal, handleShutdownGracefully);\n }\n });\n}\n\n/**\n * Exposes a server factory to be instantiated programmatically.\n *\n ```ts\n const app = await runServer(); // default configuration\n const app = await runServer('./config/config.yaml');\n const app = await runServer({ configuration });\n app.listen(4000, (event) => {\n // do something\n });\n ```\n * @param config\n */\nexport async function runServer(config?: string | ConfigYaml): Promise<any> {\n const configurationParsed = getConfigParsed(config);\n await setup(configurationParsed.log as any);\n displayExperimentsInfoBox(configurationParsed.flags);\n const addr = getListenAddress(configurationParsed.listen, logger);\n const app = await expressServer(configurationParsed);\n return createServerFactory(configurationParsed, addr, app);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.js","names":[],"sources":["../src/server.ts"],"sourcesContent":["/* eslint-disable */\nimport buildDebug from 'debug';\nimport { assign } from 'lodash-es';\nimport constants from 'node:constants';\nimport fs from 'node:fs';\nimport http from 'node:http';\nimport https from 'node:https';\nimport url from 'node:url';\n\nimport { getConfigParsed, getListenAddress } from '@verdaccio/config';\nimport { logger, setup } from '@verdaccio/logger';\nimport { ConfigYaml, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';\n\nimport { displayExperimentsInfoBox } from './experiments';\n\nexport type ServerFactory = (config: ConfigYaml) => Promise<any>;\n\nconst debug = buildDebug('verdaccio:node-api');\n\nfunction unlinkAddressPath(addr) {\n if (addr.path && fs.existsSync(addr.path)) {\n fs.unlinkSync(addr.path);\n }\n}\n\n/**\n * Return a native HTTP/HTTPS server instance\n * @param config\n * @param addr\n * @param app\n */\nexport function createServerFactory(config: ConfigYaml, addr, app) {\n let serverFactory;\n if (addr.proto === 'https') {\n debug('https enabled');\n try {\n let httpsOptions = {\n // disable insecure SSLv2 and SSLv3\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3,\n };\n\n const keyCertConfig = config.https as HttpsConfKeyCert;\n const pfxConfig = config.https as HttpsConfPfx;\n\n // https must either have key and cert or a pfx and (optionally) a passphrase\n if (!((keyCertConfig.key && keyCertConfig.cert) || pfxConfig.pfx)) {\n // logHTTPSError(configPath);\n throw Error('bad format https configuration');\n }\n\n if (pfxConfig.pfx) {\n const { pfx, passphrase } = pfxConfig;\n httpsOptions = assign(httpsOptions, {\n pfx: fs.readFileSync(pfx),\n passphrase: passphrase || '',\n });\n } else {\n const { key, cert, ca } = keyCertConfig;\n httpsOptions = assign(httpsOptions, {\n key: fs.readFileSync(key),\n cert: fs.readFileSync(cert),\n ...(ca && {\n ca: fs.readFileSync(ca),\n }),\n });\n }\n // TODO: enable http2 as feature\n // if (config.server.http2) <-- check if force http2\n serverFactory = https.createServer(httpsOptions, app);\n } catch (err: any) {\n throw new Error(`cannot create https server: ${err.message}`);\n }\n } else {\n // http\n debug('http enabled');\n serverFactory = http.createServer(app);\n }\n\n debug('server created');\n\n if (\n config.server &&\n typeof config.server.keepAliveTimeout !== 'undefined' &&\n // @ts-ignore\n config.server.keepAliveTimeout !== 'null'\n ) {\n // library definition for node is not up to date (doesn't contain recent 8.0 changes)\n serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1000;\n }\n // Remove stale Unix socket file from a previous run to avoid EADDRINUSE\n unlinkAddressPath(addr);\n\n return serverFactory;\n}\n\n/**\n * Start the server on the port defined (or the port defined in the config file)\n * @param config\n * @param port\n * @param version\n * @param pkgName\n */\nexport async function initServer(\n config: ConfigYaml,\n port: string | void,\n version: string,\n pkgName: string,\n serverFactory: ServerFactory\n): Promise<void> {\n const logger = await setup(config?.log as any);\n const addr = getListenAddress(port ?? config?.listen, logger);\n displayExperimentsInfoBox(config.flags);\n\n const app = await serverFactory(config);\n const httpServer = createServerFactory(config, addr, app);\n\n return new Promise<void>((resolve, reject) => {\n httpServer\n .listen(addr.port || addr.path, addr.host, (): void => {\n // send a message for test\n if (typeof process.send === 'function') {\n process.send({\n verdaccio_started: true,\n });\n }\n const addressServer = `${\n addr.path\n ? url.format({\n protocol: 'unix',\n pathname: addr.path,\n })\n : url.format({\n protocol: addr.proto,\n hostname: addr.host,\n port: addr.port,\n pathname: '/',\n })\n }`;\n logger.info({ addressServer }, 'http address: @{addressServer}');\n logger.info({ version }, 'version: @{version}');\n resolve();\n })\n .on('error', function (err): void {\n reject(err);\n process.exitCode = 1;\n });\n function handleShutdownGracefully() {\n logger.info('received shutdown signal - closing server gracefully...');\n httpServer.close(() => {\n logger.info('server closed.');\n process.exit(0);\n });\n }\n\n for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {\n // Use once() so that receiving double signals exit the app.\n process.once(signal, handleShutdownGracefully);\n }\n });\n}\n\n/**\n * Exposes a server factory to be instantiated programmatically.\n *\n ```ts\n const app = await runServer(); // default configuration\n const app = await runServer('./config/config.yaml');\n const app = await runServer({ configuration });\n app.listen(4000, (event) => {\n // do something\n });\n ```\n * @param config\n */\nexport async function runServer(\n config: string | ConfigYaml | undefined,\n serverFactory: ServerFactory\n): Promise<any> {\n const configurationParsed = getConfigParsed(config);\n await setup(configurationParsed.log as any);\n displayExperimentsInfoBox(configurationParsed.flags);\n const addr = getListenAddress(configurationParsed.listen, logger);\n const app = await serverFactory(configurationParsed);\n return createServerFactory(configurationParsed, addr, app);\n}\n"],"mappings":"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"}
package/build/server.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { displayExperimentsInfoBox } from "./experiments.mjs";
2
2
  import buildDebug from "debug";
3
- import { assign, isFunction } from "lodash";
3
+ import { assign } from "lodash-es";
4
4
  import constants from "node:constants";
5
5
  import fs from "node:fs";
6
6
  import http from "node:http";
@@ -8,7 +8,6 @@ import https from "node:https";
8
8
  import url from "node:url";
9
9
  import { getConfigParsed, getListenAddress } from "@verdaccio/config";
10
10
  import { logger, setup } from "@verdaccio/logger";
11
- import expressServer from "@verdaccio/server";
12
11
  //#region src/server.ts
13
12
  var debug = buildDebug("verdaccio:node-api");
14
13
  function unlinkAddressPath(addr) {
@@ -63,14 +62,14 @@ function createServerFactory(config, addr, app) {
63
62
  * @param version
64
63
  * @param pkgName
65
64
  */
66
- async function initServer(config, port, version, pkgName) {
67
- return new Promise(async (resolve, reject) => {
68
- const logger = await setup(config?.log);
69
- const addr = getListenAddress(port ?? config?.listen, logger);
70
- displayExperimentsInfoBox(config.flags);
71
- const serverFactory = createServerFactory(config, addr, await expressServer(config));
72
- serverFactory.listen(addr.port || addr.path, addr.host, () => {
73
- if (isFunction(process.send)) process.send({ verdaccio_started: true });
65
+ async function initServer(config, port, version, pkgName, serverFactory) {
66
+ const logger = await setup(config?.log);
67
+ const addr = getListenAddress(port ?? config?.listen, logger);
68
+ displayExperimentsInfoBox(config.flags);
69
+ const httpServer = createServerFactory(config, addr, await serverFactory(config));
70
+ return new Promise((resolve, reject) => {
71
+ httpServer.listen(addr.port || addr.path, addr.host, () => {
72
+ if (typeof process.send === "function") process.send({ verdaccio_started: true });
74
73
  const addressServer = `${addr.path ? url.format({
75
74
  protocol: "unix",
76
75
  pathname: addr.path
@@ -89,7 +88,7 @@ async function initServer(config, port, version, pkgName) {
89
88
  });
90
89
  function handleShutdownGracefully() {
91
90
  logger.info("received shutdown signal - closing server gracefully...");
92
- serverFactory.close(() => {
91
+ httpServer.close(() => {
93
92
  logger.info("server closed.");
94
93
  process.exit(0);
95
94
  });
@@ -114,11 +113,11 @@ app.listen(4000, (event) => {
114
113
  ```
115
114
  * @param config
116
115
  */
117
- async function runServer(config) {
116
+ async function runServer(config, serverFactory) {
118
117
  const configurationParsed = getConfigParsed(config);
119
118
  await setup(configurationParsed.log);
120
119
  displayExperimentsInfoBox(configurationParsed.flags);
121
- return createServerFactory(configurationParsed, getListenAddress(configurationParsed.listen, logger), await expressServer(configurationParsed));
120
+ return createServerFactory(configurationParsed, getListenAddress(configurationParsed.listen, logger), await serverFactory(configurationParsed));
122
121
  }
123
122
  //#endregion
124
123
  export { initServer, runServer };
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","names":[],"sources":["../src/server.ts"],"sourcesContent":["/* eslint-disable */\nimport buildDebug from 'debug';\nimport { assign, isFunction } from 'lodash';\nimport constants from 'node:constants';\nimport fs from 'node:fs';\nimport http from 'node:http';\nimport https from 'node:https';\nimport url from 'node:url';\n\nimport { getConfigParsed, getListenAddress } from '@verdaccio/config';\nimport { logger, setup } from '@verdaccio/logger';\nimport expressServer from '@verdaccio/server';\nimport { ConfigYaml, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';\n\nimport { displayExperimentsInfoBox } from './experiments';\n\nconst debug = buildDebug('verdaccio:node-api');\n\nfunction unlinkAddressPath(addr) {\n if (addr.path && fs.existsSync(addr.path)) {\n fs.unlinkSync(addr.path);\n }\n}\n\n/**\n * Return a native HTTP/HTTPS server instance\n * @param config\n * @param addr\n * @param app\n */\nexport function createServerFactory(config: ConfigYaml, addr, app) {\n let serverFactory;\n if (addr.proto === 'https') {\n debug('https enabled');\n try {\n let httpsOptions = {\n // disable insecure SSLv2 and SSLv3\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3,\n };\n\n const keyCertConfig = config.https as HttpsConfKeyCert;\n const pfxConfig = config.https as HttpsConfPfx;\n\n // https must either have key and cert or a pfx and (optionally) a passphrase\n if (!((keyCertConfig.key && keyCertConfig.cert) || pfxConfig.pfx)) {\n // logHTTPSError(configPath);\n throw Error('bad format https configuration');\n }\n\n if (pfxConfig.pfx) {\n const { pfx, passphrase } = pfxConfig;\n httpsOptions = assign(httpsOptions, {\n pfx: fs.readFileSync(pfx),\n passphrase: passphrase || '',\n });\n } else {\n const { key, cert, ca } = keyCertConfig;\n httpsOptions = assign(httpsOptions, {\n key: fs.readFileSync(key),\n cert: fs.readFileSync(cert),\n ...(ca && {\n ca: fs.readFileSync(ca),\n }),\n });\n }\n // TODO: enable http2 as feature\n // if (config.server.http2) <-- check if force http2\n serverFactory = https.createServer(httpsOptions, app);\n } catch (err: any) {\n throw new Error(`cannot create https server: ${err.message}`);\n }\n } else {\n // http\n debug('http enabled');\n serverFactory = http.createServer(app);\n }\n\n debug('server created');\n\n if (\n config.server &&\n typeof config.server.keepAliveTimeout !== 'undefined' &&\n // @ts-ignore\n config.server.keepAliveTimeout !== 'null'\n ) {\n // library definition for node is not up to date (doesn't contain recent 8.0 changes)\n serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1000;\n }\n // FIXE: I could not find the reason of this code.\n unlinkAddressPath(addr);\n\n return serverFactory;\n}\n\n/**\n * Start the server on the port defined (or the port defined in the config file)\n * @param config\n * @param port\n * @param version\n * @param pkgName\n */\nexport async function initServer(\n config: ConfigYaml,\n port: string | void,\n version: string,\n pkgName: string\n): Promise<void> {\n return new Promise(async (resolve, reject) => {\n const logger = await setup(config?.log as any);\n const addr = getListenAddress(port ?? config?.listen, logger);\n displayExperimentsInfoBox(config.flags);\n\n let app = await expressServer(config);\n const serverFactory = createServerFactory(config, addr, app);\n serverFactory\n .listen(addr.port || addr.path, addr.host, (): void => {\n // send a message for test\n if (isFunction(process.send)) {\n process.send({\n verdaccio_started: true,\n });\n }\n const addressServer = `${\n addr.path\n ? url.format({\n protocol: 'unix',\n pathname: addr.path,\n })\n : url.format({\n protocol: addr.proto,\n hostname: addr.host,\n port: addr.port,\n pathname: '/',\n })\n }`;\n logger.info({ addressServer }, 'http address: @{addressServer}');\n logger.info({ version }, 'version: @{version}');\n resolve();\n })\n .on('error', function (err): void {\n reject(err);\n process.exitCode = 1;\n });\n function handleShutdownGracefully() {\n logger.info('received shutdown signal - closing server gracefully...');\n serverFactory.close(() => {\n logger.info('server closed.');\n process.exit(0);\n });\n }\n\n for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {\n // Use once() so that receiving double signals exit the app.\n process.once(signal, handleShutdownGracefully);\n }\n });\n}\n\n/**\n * Exposes a server factory to be instantiated programmatically.\n *\n ```ts\n const app = await runServer(); // default configuration\n const app = await runServer('./config/config.yaml');\n const app = await runServer({ configuration });\n app.listen(4000, (event) => {\n // do something\n });\n ```\n * @param config\n */\nexport async function runServer(config?: string | ConfigYaml): Promise<any> {\n const configurationParsed = getConfigParsed(config);\n await setup(configurationParsed.log as any);\n displayExperimentsInfoBox(configurationParsed.flags);\n const addr = getListenAddress(configurationParsed.listen, logger);\n const app = await expressServer(configurationParsed);\n return createServerFactory(configurationParsed, addr, app);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.mjs","names":[],"sources":["../src/server.ts"],"sourcesContent":["/* eslint-disable */\nimport buildDebug from 'debug';\nimport { assign } from 'lodash-es';\nimport constants from 'node:constants';\nimport fs from 'node:fs';\nimport http from 'node:http';\nimport https from 'node:https';\nimport url from 'node:url';\n\nimport { getConfigParsed, getListenAddress } from '@verdaccio/config';\nimport { logger, setup } from '@verdaccio/logger';\nimport { ConfigYaml, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';\n\nimport { displayExperimentsInfoBox } from './experiments';\n\nexport type ServerFactory = (config: ConfigYaml) => Promise<any>;\n\nconst debug = buildDebug('verdaccio:node-api');\n\nfunction unlinkAddressPath(addr) {\n if (addr.path && fs.existsSync(addr.path)) {\n fs.unlinkSync(addr.path);\n }\n}\n\n/**\n * Return a native HTTP/HTTPS server instance\n * @param config\n * @param addr\n * @param app\n */\nexport function createServerFactory(config: ConfigYaml, addr, app) {\n let serverFactory;\n if (addr.proto === 'https') {\n debug('https enabled');\n try {\n let httpsOptions = {\n // disable insecure SSLv2 and SSLv3\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3,\n };\n\n const keyCertConfig = config.https as HttpsConfKeyCert;\n const pfxConfig = config.https as HttpsConfPfx;\n\n // https must either have key and cert or a pfx and (optionally) a passphrase\n if (!((keyCertConfig.key && keyCertConfig.cert) || pfxConfig.pfx)) {\n // logHTTPSError(configPath);\n throw Error('bad format https configuration');\n }\n\n if (pfxConfig.pfx) {\n const { pfx, passphrase } = pfxConfig;\n httpsOptions = assign(httpsOptions, {\n pfx: fs.readFileSync(pfx),\n passphrase: passphrase || '',\n });\n } else {\n const { key, cert, ca } = keyCertConfig;\n httpsOptions = assign(httpsOptions, {\n key: fs.readFileSync(key),\n cert: fs.readFileSync(cert),\n ...(ca && {\n ca: fs.readFileSync(ca),\n }),\n });\n }\n // TODO: enable http2 as feature\n // if (config.server.http2) <-- check if force http2\n serverFactory = https.createServer(httpsOptions, app);\n } catch (err: any) {\n throw new Error(`cannot create https server: ${err.message}`);\n }\n } else {\n // http\n debug('http enabled');\n serverFactory = http.createServer(app);\n }\n\n debug('server created');\n\n if (\n config.server &&\n typeof config.server.keepAliveTimeout !== 'undefined' &&\n // @ts-ignore\n config.server.keepAliveTimeout !== 'null'\n ) {\n // library definition for node is not up to date (doesn't contain recent 8.0 changes)\n serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1000;\n }\n // Remove stale Unix socket file from a previous run to avoid EADDRINUSE\n unlinkAddressPath(addr);\n\n return serverFactory;\n}\n\n/**\n * Start the server on the port defined (or the port defined in the config file)\n * @param config\n * @param port\n * @param version\n * @param pkgName\n */\nexport async function initServer(\n config: ConfigYaml,\n port: string | void,\n version: string,\n pkgName: string,\n serverFactory: ServerFactory\n): Promise<void> {\n const logger = await setup(config?.log as any);\n const addr = getListenAddress(port ?? config?.listen, logger);\n displayExperimentsInfoBox(config.flags);\n\n const app = await serverFactory(config);\n const httpServer = createServerFactory(config, addr, app);\n\n return new Promise<void>((resolve, reject) => {\n httpServer\n .listen(addr.port || addr.path, addr.host, (): void => {\n // send a message for test\n if (typeof process.send === 'function') {\n process.send({\n verdaccio_started: true,\n });\n }\n const addressServer = `${\n addr.path\n ? url.format({\n protocol: 'unix',\n pathname: addr.path,\n })\n : url.format({\n protocol: addr.proto,\n hostname: addr.host,\n port: addr.port,\n pathname: '/',\n })\n }`;\n logger.info({ addressServer }, 'http address: @{addressServer}');\n logger.info({ version }, 'version: @{version}');\n resolve();\n })\n .on('error', function (err): void {\n reject(err);\n process.exitCode = 1;\n });\n function handleShutdownGracefully() {\n logger.info('received shutdown signal - closing server gracefully...');\n httpServer.close(() => {\n logger.info('server closed.');\n process.exit(0);\n });\n }\n\n for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {\n // Use once() so that receiving double signals exit the app.\n process.once(signal, handleShutdownGracefully);\n }\n });\n}\n\n/**\n * Exposes a server factory to be instantiated programmatically.\n *\n ```ts\n const app = await runServer(); // default configuration\n const app = await runServer('./config/config.yaml');\n const app = await runServer({ configuration });\n app.listen(4000, (event) => {\n // do something\n });\n ```\n * @param config\n */\nexport async function runServer(\n config: string | ConfigYaml | undefined,\n serverFactory: ServerFactory\n): Promise<any> {\n const configurationParsed = getConfigParsed(config);\n await setup(configurationParsed.log as any);\n displayExperimentsInfoBox(configurationParsed.flags);\n const addr = getListenAddress(configurationParsed.listen, logger);\n const app = await serverFactory(configurationParsed);\n return createServerFactory(configurationParsed, addr, app);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/node-api",
3
- "version": "9.0.0-next-9.7",
3
+ "version": "9.0.0-next-9.9",
4
4
  "description": "Verdaccio Node API",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -33,14 +33,14 @@
33
33
  },
34
34
  "license": "MIT",
35
35
  "dependencies": {
36
- "@verdaccio/config": "9.0.0-next-9.7",
37
- "@verdaccio/logger": "9.0.0-next-9.7",
38
- "@verdaccio/server": "9.0.0-next-9.7",
36
+ "@verdaccio/config": "9.0.0-next-9.9",
37
+ "@verdaccio/logger": "9.0.0-next-9.9",
39
38
  "debug": "4.4.3",
40
- "lodash": "4.17.23"
39
+ "lodash-es": "4.17.23"
41
40
  },
42
41
  "devDependencies": {
43
42
  "@verdaccio/types": "14.0.0-next-9.4",
43
+ "@types/lodash-es": "4.17.12",
44
44
  "supertest": "7.1.4",
45
45
  "vitest": "4.1.0"
46
46
  },