@naturalcycles/backend-lib 4.16.0 → 4.17.1

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.
@@ -84,7 +84,7 @@ async function deployHealthCheck(url, opt = {}) {
84
84
  attempt++;
85
85
  console.log([`>>`, (0, colors_1.dimGrey)(url), (0, node_util_1.inspect)({ attempt }, inspectOpt)].join(' '));
86
86
  const started = Date.now();
87
- const { err, fetchResponse } = await fetcher.rawFetch(url, {
87
+ const { err, fetchResponse } = await fetcher.doFetch(url, {
88
88
  mode: 'json',
89
89
  timeoutSeconds: timeoutSec,
90
90
  retry: {
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export * from './server/serverStatsMiddleware';
18
18
  export * from './server/methodOverrideMiddleware';
19
19
  export * from './server/notFoundMiddleware';
20
20
  export * from './server/okMiddleware';
21
+ export * from './server/basicAuthMiddleware';
21
22
  export * from './server/requestTimeoutMiddleware';
22
23
  export * from './server/reqValidationMiddleware';
23
24
  export * from './server/simpleRequestLoggerMiddleware';
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ tslib_1.__exportStar(require("./server/serverStatsMiddleware"), exports);
23
23
  tslib_1.__exportStar(require("./server/methodOverrideMiddleware"), exports);
24
24
  tslib_1.__exportStar(require("./server/notFoundMiddleware"), exports);
25
25
  tslib_1.__exportStar(require("./server/okMiddleware"), exports);
26
+ tslib_1.__exportStar(require("./server/basicAuthMiddleware"), exports);
26
27
  tslib_1.__exportStar(require("./server/requestTimeoutMiddleware"), exports);
27
28
  tslib_1.__exportStar(require("./server/reqValidationMiddleware"), exports);
28
29
  tslib_1.__exportStar(require("./server/simpleRequestLoggerMiddleware"), exports);
@@ -0,0 +1,13 @@
1
+ import { StringMap } from '@naturalcycles/js-lib';
2
+ import { BackendRequestHandler } from './server.model';
3
+ export interface BasicAuthMiddlewareCfg {
4
+ /**
5
+ * Map from login (Sting) to password (String).
6
+ */
7
+ loginPasswordMap: StringMap;
8
+ /**
9
+ *
10
+ */
11
+ realm?: string;
12
+ }
13
+ export declare function basicAuthMiddleware(cfg: BasicAuthMiddlewareCfg): BackendRequestHandler;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.basicAuthMiddleware = void 0;
4
+ const js_lib_1 = require("@naturalcycles/js-lib");
5
+ const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
+ function basicAuthMiddleware(cfg) {
7
+ const { realm } = cfg;
8
+ return function basicAuthMiddlewareHandler(req, res, next) {
9
+ const hash = (req.headers.authorization || '').split(' ')[1];
10
+ if (hash) {
11
+ const [login, password] = (0, js_lib_1._split)((0, nodejs_lib_1.base64ToString)(hash), ':', 2);
12
+ if (login && password && cfg.loginPasswordMap[login] === password) {
13
+ return next();
14
+ }
15
+ }
16
+ // Unauthorized
17
+ res
18
+ .set('WWW-Authenticate', `Basic${realm ? ` realm="${realm}"` : ''}`)
19
+ .status(401)
20
+ .send('Unauthorized');
21
+ };
22
+ }
23
+ exports.basicAuthMiddleware = basicAuthMiddleware;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/backend-lib",
3
- "version": "4.16.0",
3
+ "version": "4.17.1",
4
4
  "scripts": {
5
5
  "prepare": "husky install && patch-package",
6
6
  "serve": "APP_ENV=dev nodemon",
@@ -126,7 +126,7 @@ export async function deployHealthCheck(
126
126
 
127
127
  const started = Date.now()
128
128
 
129
- const { err, fetchResponse } = await fetcher.rawFetch(url, {
129
+ const { err, fetchResponse } = await fetcher.doFetch(url, {
130
130
  mode: 'json',
131
131
  timeoutSeconds: timeoutSec,
132
132
  retry: {
package/src/index.ts CHANGED
@@ -18,6 +18,7 @@ export * from './server/serverStatsMiddleware'
18
18
  export * from './server/methodOverrideMiddleware'
19
19
  export * from './server/notFoundMiddleware'
20
20
  export * from './server/okMiddleware'
21
+ export * from './server/basicAuthMiddleware'
21
22
  export * from './server/requestTimeoutMiddleware'
22
23
  export * from './server/reqValidationMiddleware'
23
24
  export * from './server/simpleRequestLoggerMiddleware'
@@ -0,0 +1,35 @@
1
+ import { _split, StringMap } from '@naturalcycles/js-lib'
2
+ import { base64ToString } from '@naturalcycles/nodejs-lib'
3
+ import { BackendRequestHandler } from './server.model'
4
+
5
+ export interface BasicAuthMiddlewareCfg {
6
+ /**
7
+ * Map from login (Sting) to password (String).
8
+ */
9
+ loginPasswordMap: StringMap
10
+
11
+ /**
12
+ *
13
+ */
14
+ realm?: string
15
+ }
16
+
17
+ export function basicAuthMiddleware(cfg: BasicAuthMiddlewareCfg): BackendRequestHandler {
18
+ const { realm } = cfg
19
+
20
+ return function basicAuthMiddlewareHandler(req, res, next) {
21
+ const hash = (req.headers.authorization || '').split(' ')[1]
22
+ if (hash) {
23
+ const [login, password] = _split(base64ToString(hash), ':', 2)
24
+ if (login && password && cfg.loginPasswordMap[login] === password) {
25
+ return next()
26
+ }
27
+ }
28
+
29
+ // Unauthorized
30
+ res
31
+ .set('WWW-Authenticate', `Basic${realm ? ` realm="${realm}"` : ''}`)
32
+ .status(401)
33
+ .send('Unauthorized')
34
+ }
35
+ }
@@ -95,7 +95,7 @@ export function respondWithError(req: BackendRequest, res: BackendResponse, err:
95
95
 
96
96
  res.status(httpError.data.httpStatusCode).json({
97
97
  error: httpError,
98
- } as HttpErrorResponse)
98
+ } satisfies HttpErrorResponse)
99
99
  }
100
100
 
101
101
  function shouldReportToSentry(err: Error): boolean {