@naturalcycles/backend-lib 4.2.3 → 4.4.0

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.
@@ -42,7 +42,7 @@ export declare class BaseAdminService {
42
42
  * Override if needed.
43
43
  */
44
44
  getAdminToken(req: BackendRequest): Promise<string | undefined>;
45
- isAdmin(req: BackendRequest): Promise<boolean>;
45
+ isAdmin(req: BackendRequest | undefined): Promise<boolean>;
46
46
  getAdminInfo(req: BackendRequest): Promise<AdminInfo | undefined>;
47
47
  /**
48
48
  * Returns AdminInfo if it has all required permissions.
@@ -75,6 +75,8 @@ class BaseAdminService {
75
75
  req.header('x-admin-token'));
76
76
  }
77
77
  async isAdmin(req) {
78
+ if (!req)
79
+ return false;
78
80
  const adminToken = await this.getAdminToken(req);
79
81
  const email = await this.getEmailByToken(req, adminToken);
80
82
  return !!this.getEmailPermissions(email);
@@ -26,7 +26,7 @@ class FirebaseSharedService {
26
26
  return this.admin().auth();
27
27
  }
28
28
  }
29
- (0, tslib_1.__decorate)([
29
+ tslib_1.__decorate([
30
30
  (0, js_lib_1._Memo)()
31
31
  ], FirebaseSharedService.prototype, "admin", null);
32
32
  exports.FirebaseSharedService = FirebaseSharedService;
@@ -4,7 +4,6 @@ exports.validateGAEServiceName = exports.createAppYaml = exports.createAndSaveAp
4
4
  const fs = require("fs");
5
5
  const js_lib_1 = require("@naturalcycles/js-lib");
6
6
  const colors_1 = require("@naturalcycles/nodejs-lib/dist/colors");
7
- const time_lib_1 = require("@naturalcycles/time-lib");
8
7
  const yaml = require("js-yaml");
9
8
  const APP_YAML_DEFAULT = () => ({
10
9
  runtime: 'nodejs16',
@@ -35,7 +34,7 @@ exports.createAndSaveDeployInfo = createAndSaveDeployInfo;
35
34
  async function createDeployInfo(backendCfg) {
36
35
  const simpleGit = require('simple-git/promise'); // lazy load
37
36
  const git = simpleGit('.');
38
- const now = time_lib_1.dayjs.utc();
37
+ const now = (0, js_lib_1.localTime)();
39
38
  const gitBranch = (await git.status()).current;
40
39
  const gitRev = (await git.revparse(['HEAD'])).slice(0, 7);
41
40
  let { gaeProject, gaeProjectByBranch = {}, gaeService, gaeServiceByBranch = {}, serviceWithBranchName, prodBranch, branchesWithTimestampVersions = [], } = backendCfg;
@@ -49,7 +48,8 @@ async function createDeployInfo(backendCfg) {
49
48
  if (branchesWithTimestampVersions.includes(gitBranch)) {
50
49
  // May only contain lowercase letters, digits, and hyphens. Must begin and end with a letter or digit. Must not exceed 63 characters.
51
50
  gaeVersion = [
52
- now.format('YYYYMMDD-HHmm'),
51
+ // now.format('YYYYMMDD-HHmm'), // 20190521-1721
52
+ now.toStringCompact().replace('_', '-'),
53
53
  gitRev,
54
54
  ].join('-');
55
55
  }
package/dist/index.js CHANGED
@@ -15,23 +15,23 @@ const secureHeaderMiddleware_1 = require("./admin/secureHeaderMiddleware");
15
15
  Object.defineProperty(exports, "createSecureHeaderMiddleware", { enumerable: true, get: function () { return secureHeaderMiddleware_1.createSecureHeaderMiddleware; } });
16
16
  const env_shared_service_1 = require("./env/env.shared.service");
17
17
  Object.defineProperty(exports, "EnvSharedService", { enumerable: true, get: function () { return env_shared_service_1.EnvSharedService; } });
18
- (0, tslib_1.__exportStar)(require("./gae/appEngine.util"), exports);
18
+ tslib_1.__exportStar(require("./gae/appEngine.util"), exports);
19
19
  const sentry_shared_service_1 = require("./sentry/sentry.shared.service");
20
20
  Object.defineProperty(exports, "SentrySharedService", { enumerable: true, get: function () { return sentry_shared_service_1.SentrySharedService; } });
21
- (0, tslib_1.__exportStar)(require("./server/catchWrapper"), exports);
22
- (0, tslib_1.__exportStar)(require("./server/createDefaultApp"), exports);
23
- (0, tslib_1.__exportStar)(require("./server/deployInfo.util"), exports);
24
- (0, tslib_1.__exportStar)(require("./server/getDefaultRouter"), exports);
21
+ tslib_1.__exportStar(require("./server/catchWrapper"), exports);
22
+ tslib_1.__exportStar(require("./server/createDefaultApp"), exports);
23
+ tslib_1.__exportStar(require("./server/deployInfo.util"), exports);
24
+ tslib_1.__exportStar(require("./server/getDefaultRouter"), exports);
25
25
  const bodyParserTimeoutMiddleware_1 = require("./server/bodyParserTimeoutMiddleware");
26
26
  Object.defineProperty(exports, "bodyParserTimeoutMiddleware", { enumerable: true, get: function () { return bodyParserTimeoutMiddleware_1.bodyParserTimeoutMiddleware; } });
27
27
  Object.defineProperty(exports, "clearBodyParserTimeout", { enumerable: true, get: function () { return bodyParserTimeoutMiddleware_1.clearBodyParserTimeout; } });
28
- (0, tslib_1.__exportStar)(require("./server/genericErrorMiddleware"), exports);
29
- (0, tslib_1.__exportStar)(require("./server/serverStatsMiddleware"), exports);
28
+ tslib_1.__exportStar(require("./server/genericErrorMiddleware"), exports);
29
+ tslib_1.__exportStar(require("./server/serverStatsMiddleware"), exports);
30
30
  const methodOverrideMiddleware_1 = require("./server/methodOverrideMiddleware");
31
31
  Object.defineProperty(exports, "methodOverrideMiddleware", { enumerable: true, get: function () { return methodOverrideMiddleware_1.methodOverrideMiddleware; } });
32
- (0, tslib_1.__exportStar)(require("./server/notFoundMiddleware"), exports);
33
- (0, tslib_1.__exportStar)(require("./server/okMiddleware"), exports);
34
- (0, tslib_1.__exportStar)(require("./server/requestTimeoutMiddleware"), exports);
32
+ tslib_1.__exportStar(require("./server/notFoundMiddleware"), exports);
33
+ tslib_1.__exportStar(require("./server/okMiddleware"), exports);
34
+ tslib_1.__exportStar(require("./server/requestTimeoutMiddleware"), exports);
35
35
  const reqValidationMiddleware_1 = require("./server/reqValidationMiddleware");
36
36
  Object.defineProperty(exports, "reqValidation", { enumerable: true, get: function () { return reqValidationMiddleware_1.reqValidation; } });
37
37
  const simpleRequestLoggerMiddleware_1 = require("./server/simpleRequestLoggerMiddleware");
@@ -39,12 +39,12 @@ Object.defineProperty(exports, "simpleRequestLoggerMiddleware", { enumerable: tr
39
39
  const serverStatusMiddleware_1 = require("./server/serverStatusMiddleware");
40
40
  Object.defineProperty(exports, "serverStatusMiddleware", { enumerable: true, get: function () { return serverStatusMiddleware_1.serverStatusMiddleware; } });
41
41
  Object.defineProperty(exports, "getServerStatusData", { enumerable: true, get: function () { return serverStatusMiddleware_1.getServerStatusData; } });
42
- (0, tslib_1.__exportStar)(require("./server/validateMiddleware"), exports);
43
- (0, tslib_1.__exportStar)(require("./server/request.log.util"), exports);
42
+ tslib_1.__exportStar(require("./server/validateMiddleware"), exports);
43
+ tslib_1.__exportStar(require("./server/request.log.util"), exports);
44
44
  const startServer_1 = require("./server/startServer");
45
45
  Object.defineProperty(exports, "BackendServer", { enumerable: true, get: function () { return startServer_1.BackendServer; } });
46
46
  Object.defineProperty(exports, "startServer", { enumerable: true, get: function () { return startServer_1.startServer; } });
47
- (0, tslib_1.__exportStar)(require("./server/asyncLocalStorageMiddleware"), exports);
48
- (0, tslib_1.__exportStar)(require("./server/appEngineLogMiddleware"), exports);
49
- (0, tslib_1.__exportStar)(require("./server/safeJsonMiddleware"), exports);
50
- (0, tslib_1.__exportStar)(require("./server/request.util"), exports);
47
+ tslib_1.__exportStar(require("./server/asyncLocalStorageMiddleware"), exports);
48
+ tslib_1.__exportStar(require("./server/appEngineLogMiddleware"), exports);
49
+ tslib_1.__exportStar(require("./server/safeJsonMiddleware"), exports);
50
+ tslib_1.__exportStar(require("./server/request.util"), exports);
@@ -126,7 +126,7 @@ class SentrySharedService {
126
126
  };
127
127
  }
128
128
  }
129
- (0, tslib_1.__decorate)([
129
+ tslib_1.__decorate([
130
130
  (0, js_lib_1._Memo)()
131
131
  ], SentrySharedService.prototype, "sentry", null);
132
132
  exports.SentrySharedService = SentrySharedService;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getServerStatusData = exports.serverStatusMiddleware = void 0;
4
4
  const js_lib_1 = require("@naturalcycles/js-lib");
5
5
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
- const time_lib_1 = require("@naturalcycles/time-lib");
7
6
  const deployInfo_util_1 = require("./deployInfo.util");
8
7
  const { versions } = process;
9
8
  const { GAE_APPLICATION, GAE_SERVICE, GAE_VERSION, APP_ENV } = process.env;
@@ -15,11 +14,12 @@ function serverStatusMiddleware(projectDir, extra) {
15
14
  exports.serverStatusMiddleware = serverStatusMiddleware;
16
15
  function getServerStatusData(projectDir = process.cwd(), extra) {
17
16
  const { gitRev, gitBranch, prod, ts } = (0, deployInfo_util_1.getDeployInfo)(projectDir);
18
- const deployBuildTimeUTC = time_lib_1.dayjs.unix(ts).toPretty();
19
- const buildInfo = [time_lib_1.dayjs.unix(ts).toCompactTime(), gitBranch, gitRev].filter(Boolean).join('_');
17
+ const t = (0, js_lib_1.localTime)(ts);
18
+ const deployBuildTime = t.toPretty();
19
+ const buildInfo = [t.toStringCompact(), gitBranch, gitRev].filter(Boolean).join('_');
20
20
  return (0, js_lib_1._filterFalsyValues)({
21
21
  started: getStartedStr(),
22
- deployBuildTimeUTC,
22
+ deployBuildTime,
23
23
  APP_ENV,
24
24
  prod,
25
25
  buildInfo,
@@ -35,8 +35,8 @@ function getServerStatusData(projectDir = process.cwd(), extra) {
35
35
  }
36
36
  exports.getServerStatusData = getServerStatusData;
37
37
  function getStartedStr() {
38
- const serverStarted = time_lib_1.dayjs.utc().subtract(process.uptime(), 's');
39
- const s1 = (0, time_lib_1.dayjs)(serverStarted).toPretty();
40
- const s2 = (0, time_lib_1.dayjs)(serverStarted).fromNow();
41
- return `${s1} UTC (${s2})`;
38
+ const serverStarted = (0, js_lib_1.localTime)().subtract(process.uptime(), 'second');
39
+ const s1 = serverStarted.toPretty();
40
+ const s2 = (0, js_lib_1._ms)(Date.now() - serverStarted.unix() * 1000);
41
+ return `${s1} (${s2} ago)`;
42
42
  }
@@ -78,7 +78,7 @@ class BackendServer {
78
78
  }
79
79
  }
80
80
  }
81
- (0, tslib_1.__decorate)([
81
+ tslib_1.__decorate([
82
82
  (0, js_lib_1._Memo)()
83
83
  ], BackendServer.prototype, "stop", null);
84
84
  exports.BackendServer = BackendServer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/backend-lib",
3
- "version": "4.2.3",
3
+ "version": "4.4.0",
4
4
  "scripts": {
5
5
  "prepare": "husky install && patch-package",
6
6
  "serve": "APP_ENV=dev nodemon",
@@ -19,14 +19,13 @@
19
19
  "@naturalcycles/db-lib": "^8.0.2",
20
20
  "@naturalcycles/js-lib": "^14.27.0",
21
21
  "@naturalcycles/nodejs-lib": "^12.0.0",
22
- "@naturalcycles/time-lib": "^3.0.1",
23
22
  "@types/cookie-parser": "^1.4.1",
24
23
  "@types/cors": "^2.8.4",
25
24
  "@types/express": "^4.16.1",
26
25
  "@types/on-finished": "^2.3.1",
27
26
  "cookie-parser": "^1.4.3",
28
27
  "cors": "^2.8.5",
29
- "dotenv": "^14.2.0",
28
+ "dotenv": "^16.0.0",
30
29
  "ejs": "^3.0.1",
31
30
  "express": "^4.16.4",
32
31
  "express-promise-router": "^4.0.0",
@@ -119,7 +119,8 @@ export class BaseAdminService {
119
119
  )
120
120
  }
121
121
 
122
- async isAdmin(req: BackendRequest): Promise<boolean> {
122
+ async isAdmin(req: BackendRequest | undefined): Promise<boolean> {
123
+ if (!req) return false
123
124
  const adminToken = await this.getAdminToken(req)
124
125
  const email = await this.getEmailByToken(req, adminToken)
125
126
  return !!this.getEmailPermissions(email)
@@ -1,7 +1,6 @@
1
1
  import * as fs from 'fs'
2
- import { _mapValues, _merge, _truncate } from '@naturalcycles/js-lib'
2
+ import { _mapValues, _merge, _truncate, localTime } from '@naturalcycles/js-lib'
3
3
  import { dimGrey, white } from '@naturalcycles/nodejs-lib/dist/colors'
4
- import { dayjs } from '@naturalcycles/time-lib'
5
4
  import * as yaml from 'js-yaml'
6
5
  import type * as simpleGitLib from 'simple-git/promise'
7
6
  import { BackendCfg } from './backend.cfg.util'
@@ -44,7 +43,7 @@ export async function createDeployInfo(backendCfg: BackendCfg): Promise<DeployIn
44
43
  const simpleGit = require('simple-git/promise') as typeof simpleGitLib // lazy load
45
44
  const git = simpleGit('.')
46
45
 
47
- const now = dayjs.utc()
46
+ const now = localTime()
48
47
  const gitBranch = (await git.status()).current!
49
48
  const gitRev = (await git.revparse(['HEAD'])).slice(0, 7)
50
49
 
@@ -73,7 +72,8 @@ export async function createDeployInfo(backendCfg: BackendCfg): Promise<DeployIn
73
72
  if (branchesWithTimestampVersions.includes(gitBranch)) {
74
73
  // May only contain lowercase letters, digits, and hyphens. Must begin and end with a letter or digit. Must not exceed 63 characters.
75
74
  gaeVersion = [
76
- now.format('YYYYMMDD-HHmm'), // 20190521-1721
75
+ // now.format('YYYYMMDD-HHmm'), // 20190521-1721
76
+ now.toStringCompact().replace('_', '-'),
77
77
  gitRev,
78
78
  ].join('-')
79
79
  }
@@ -1,6 +1,5 @@
1
- import { _filterFalsyValues } from '@naturalcycles/js-lib'
1
+ import { _filterFalsyValues, _ms, localTime } from '@naturalcycles/js-lib'
2
2
  import { memoryUsageFull, processSharedUtil } from '@naturalcycles/nodejs-lib'
3
- import { dayjs } from '@naturalcycles/time-lib'
4
3
  import { getDeployInfo } from './deployInfo.util'
5
4
  import { BackendRequestHandler } from './server.model'
6
5
 
@@ -18,12 +17,13 @@ export function getServerStatusData(
18
17
  extra?: any,
19
18
  ): Record<string, any> {
20
19
  const { gitRev, gitBranch, prod, ts } = getDeployInfo(projectDir)
21
- const deployBuildTimeUTC = dayjs.unix(ts).toPretty()
22
- const buildInfo = [dayjs.unix(ts).toCompactTime(), gitBranch, gitRev].filter(Boolean).join('_')
20
+ const t = localTime(ts)
21
+ const deployBuildTime = t.toPretty()
22
+ const buildInfo = [t.toStringCompact(), gitBranch, gitRev].filter(Boolean).join('_')
23
23
 
24
24
  return _filterFalsyValues({
25
25
  started: getStartedStr(),
26
- deployBuildTimeUTC,
26
+ deployBuildTime,
27
27
  APP_ENV,
28
28
  prod,
29
29
  buildInfo,
@@ -39,9 +39,9 @@ export function getServerStatusData(
39
39
  }
40
40
 
41
41
  function getStartedStr(): string {
42
- const serverStarted = dayjs.utc().subtract(process.uptime(), 's')
42
+ const serverStarted = localTime().subtract(process.uptime(), 'second')
43
43
 
44
- const s1 = dayjs(serverStarted).toPretty()
45
- const s2 = dayjs(serverStarted).fromNow()
46
- return `${s1} UTC (${s2})`
44
+ const s1 = serverStarted.toPretty()
45
+ const s2 = _ms(Date.now() - serverStarted.unix() * 1000)
46
+ return `${s1} (${s2} ago)`
47
47
  }