@naturalcycles/backend-lib 8.0.4 → 9.0.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.
Files changed (133) hide show
  1. package/dist/admin/adminMiddleware.d.ts +3 -3
  2. package/dist/admin/adminMiddleware.js +11 -18
  3. package/dist/admin/base.admin.service.d.ts +1 -1
  4. package/dist/admin/base.admin.service.js +9 -13
  5. package/dist/admin/firebase.shared.service.d.ts +3 -3
  6. package/dist/admin/firebase.shared.service.js +12 -15
  7. package/dist/admin/secureHeaderMiddleware.d.ts +2 -2
  8. package/dist/admin/secureHeaderMiddleware.js +7 -10
  9. package/dist/bin/deploy-gae.js +9 -11
  10. package/dist/bin/deploy-health-check.js +6 -8
  11. package/dist/bin/deploy-prepare.js +5 -7
  12. package/dist/bin/undeploy-gae.js +5 -7
  13. package/dist/db/httpDB.js +7 -11
  14. package/dist/db/httpDBRequestHandler.d.ts +1 -1
  15. package/dist/db/httpDBRequestHandler.js +27 -29
  16. package/dist/db/index.d.ts +3 -3
  17. package/dist/db/index.js +3 -7
  18. package/dist/deploy/backend.cfg.util.js +6 -9
  19. package/dist/deploy/deploy.model.js +1 -2
  20. package/dist/deploy/deploy.util.d.ts +2 -2
  21. package/dist/deploy/deploy.util.js +25 -33
  22. package/dist/deploy/deployGae.d.ts +2 -2
  23. package/dist/deploy/deployGae.js +23 -27
  24. package/dist/deploy/deployHealthCheck.js +16 -20
  25. package/dist/deploy/deployPrepare.d.ts +1 -1
  26. package/dist/deploy/deployPrepare.js +17 -21
  27. package/dist/deploy/index.d.ts +8 -8
  28. package/dist/deploy/index.js +6 -14
  29. package/dist/env/env.shared.service.js +8 -12
  30. package/dist/index.d.ts +33 -33
  31. package/dist/index.js +34 -38
  32. package/dist/paths.cnst.js +5 -9
  33. package/dist/sentry/sentry.shared.service.js +11 -15
  34. package/dist/server/asyncLocalStorageMiddleware.d.ts +1 -1
  35. package/dist/server/asyncLocalStorageMiddleware.js +9 -15
  36. package/dist/server/basicAuthMiddleware.d.ts +1 -1
  37. package/dist/server/basicAuthMiddleware.js +5 -8
  38. package/dist/server/bodyParserTimeoutMiddleware.d.ts +1 -1
  39. package/dist/server/bodyParserTimeoutMiddleware.js +5 -9
  40. package/dist/server/createDefaultApp.d.ts +3 -3
  41. package/dist/server/createDefaultApp.js +22 -23
  42. package/dist/server/createDefaultApp.model.d.ts +3 -3
  43. package/dist/server/createDefaultApp.model.js +1 -2
  44. package/dist/server/deployInfo.util.d.ts +1 -1
  45. package/dist/server/deployInfo.util.js +5 -8
  46. package/dist/server/genericErrorMiddleware.d.ts +2 -2
  47. package/dist/server/genericErrorMiddleware.js +6 -10
  48. package/dist/server/getDefaultRouter.d.ts +1 -1
  49. package/dist/server/getDefaultRouter.js +3 -6
  50. package/dist/server/logMiddleware.d.ts +1 -1
  51. package/dist/server/logMiddleware.js +12 -16
  52. package/dist/server/methodOverrideMiddleware.d.ts +1 -1
  53. package/dist/server/methodOverrideMiddleware.js +1 -4
  54. package/dist/server/notFoundMiddleware.d.ts +1 -1
  55. package/dist/server/notFoundMiddleware.js +3 -6
  56. package/dist/server/okMiddleware.d.ts +1 -1
  57. package/dist/server/okMiddleware.js +1 -4
  58. package/dist/server/request.log.util.d.ts +1 -1
  59. package/dist/server/request.log.util.js +7 -11
  60. package/dist/server/request.util.d.ts +1 -1
  61. package/dist/server/request.util.js +1 -4
  62. package/dist/server/requestTimeoutMiddleware.d.ts +1 -1
  63. package/dist/server/requestTimeoutMiddleware.js +9 -13
  64. package/dist/server/safeJsonMiddleware.d.ts +1 -1
  65. package/dist/server/safeJsonMiddleware.js +3 -6
  66. package/dist/server/server.model.js +1 -2
  67. package/dist/server/server.util.js +1 -4
  68. package/dist/server/serverStatsMiddleware.d.ts +1 -1
  69. package/dist/server/serverStatsMiddleware.js +19 -24
  70. package/dist/server/serverStatusMiddleware.d.ts +1 -1
  71. package/dist/server/serverStatusMiddleware.js +12 -16
  72. package/dist/server/simpleRequestLoggerMiddleware.d.ts +1 -1
  73. package/dist/server/simpleRequestLoggerMiddleware.js +8 -11
  74. package/dist/server/startServer.d.ts +1 -1
  75. package/dist/server/startServer.js +18 -22
  76. package/dist/server/startServer.model.d.ts +3 -3
  77. package/dist/server/startServer.model.js +1 -2
  78. package/dist/server/validation/validateMiddleware.d.ts +2 -2
  79. package/dist/server/validation/validateMiddleware.js +9 -15
  80. package/dist/server/validation/validateRequest.d.ts +1 -1
  81. package/dist/server/validation/validateRequest.js +6 -9
  82. package/dist/server/validation/zodValidateMiddleware.d.ts +2 -2
  83. package/dist/server/validation/zodValidateMiddleware.js +6 -9
  84. package/dist/testing/express.test.service.d.ts +5 -5
  85. package/dist/testing/express.test.service.js +16 -14
  86. package/dist/testing/index.d.ts +2 -2
  87. package/dist/testing/index.js +2 -5
  88. package/dist/util.js +2 -6
  89. package/package.json +7 -7
  90. package/src/admin/adminMiddleware.ts +3 -3
  91. package/src/admin/base.admin.service.ts +1 -1
  92. package/src/admin/firebase.shared.service.ts +7 -6
  93. package/src/admin/secureHeaderMiddleware.ts +4 -4
  94. package/src/bin/deploy-gae.ts +3 -3
  95. package/src/bin/deploy-health-check.ts +1 -1
  96. package/src/bin/deploy-prepare.ts +1 -1
  97. package/src/bin/undeploy-gae.ts +1 -1
  98. package/src/db/httpDBRequestHandler.ts +4 -3
  99. package/src/db/index.ts +3 -3
  100. package/src/deploy/backend.cfg.util.ts +1 -1
  101. package/src/deploy/deploy.util.ts +3 -4
  102. package/src/deploy/deployGae.ts +6 -6
  103. package/src/deploy/deployHealthCheck.ts +1 -1
  104. package/src/deploy/deployPrepare.ts +6 -5
  105. package/src/deploy/index.ts +8 -8
  106. package/src/index.ts +33 -33
  107. package/src/sentry/sentry.shared.service.ts +1 -1
  108. package/src/server/asyncLocalStorageMiddleware.ts +2 -2
  109. package/src/server/basicAuthMiddleware.ts +1 -1
  110. package/src/server/bodyParserTimeoutMiddleware.ts +2 -2
  111. package/src/server/createDefaultApp.model.ts +3 -3
  112. package/src/server/createDefaultApp.ts +16 -14
  113. package/src/server/deployInfo.util.ts +1 -1
  114. package/src/server/genericErrorMiddleware.ts +2 -2
  115. package/src/server/getDefaultRouter.ts +1 -1
  116. package/src/server/logMiddleware.ts +1 -1
  117. package/src/server/methodOverrideMiddleware.ts +1 -1
  118. package/src/server/notFoundMiddleware.ts +2 -2
  119. package/src/server/okMiddleware.ts +1 -1
  120. package/src/server/request.log.util.ts +1 -1
  121. package/src/server/request.util.ts +1 -1
  122. package/src/server/requestTimeoutMiddleware.ts +2 -2
  123. package/src/server/safeJsonMiddleware.ts +1 -1
  124. package/src/server/serverStatsMiddleware.ts +3 -3
  125. package/src/server/serverStatusMiddleware.ts +2 -2
  126. package/src/server/simpleRequestLoggerMiddleware.ts +3 -3
  127. package/src/server/startServer.model.ts +3 -3
  128. package/src/server/startServer.ts +4 -7
  129. package/src/server/validation/validateMiddleware.ts +2 -2
  130. package/src/server/validation/validateRequest.ts +1 -1
  131. package/src/server/validation/zodValidateMiddleware.ts +2 -2
  132. package/src/testing/express.test.service.ts +20 -11
  133. package/src/testing/index.ts +2 -2
@@ -1,6 +1,6 @@
1
- import type { BackendRequestHandler } from '../server/server.model';
2
- import type { BaseAdminService } from './base.admin.service';
3
- import type { FirebaseSharedServiceCfg } from './firebase.shared.service';
1
+ import type { BackendRequestHandler } from '../server/server.model.js';
2
+ import type { BaseAdminService } from './base.admin.service.js';
3
+ import type { FirebaseSharedServiceCfg } from './firebase.shared.service.js';
4
4
  export interface RequireAdminCfg {
5
5
  /**
6
6
  * @default '/login.html'
@@ -1,14 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAdminMiddleware = createAdminMiddleware;
4
- exports.requireAdminPermissions = requireAdminPermissions;
5
- exports.loginHtml = loginHtml;
6
- exports.getLoginHtmlRedirect = getLoginHtmlRedirect;
7
- const tslib_1 = require("tslib");
8
- const js_lib_1 = require("@naturalcycles/js-lib");
9
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
10
- const ejs_1 = tslib_1.__importDefault(require("ejs"));
11
- function createAdminMiddleware(adminService, cfgDefaults = {}) {
1
+ import { _memoFn, AppError } from '@naturalcycles/js-lib';
2
+ import { fs2 } from '@naturalcycles/nodejs-lib';
3
+ import ejs from 'ejs';
4
+ export function createAdminMiddleware(adminService, cfgDefaults = {}) {
12
5
  return (reqPermissions, cfg) => requireAdminPermissions(adminService, reqPermissions, {
13
6
  ...cfgDefaults,
14
7
  ...cfg,
@@ -20,7 +13,7 @@ function createAdminMiddleware(adminService, cfgDefaults = {}) {
20
13
  * If authenticated, but not authorized - will throw 403.
21
14
  * Otherwise will just pass.
22
15
  */
23
- function requireAdminPermissions(adminService, reqPermissions = [], cfg = {}) {
16
+ export function requireAdminPermissions(adminService, reqPermissions = [], cfg = {}) {
24
17
  const { loginHtmlPath = '/login.html', urlStartsWith, apiHost, autoLogin = true } = cfg;
25
18
  return async function requireAdminPermissionsFn(req, res, next) {
26
19
  if (urlStartsWith && !req.url.startsWith(urlStartsWith))
@@ -30,7 +23,7 @@ function requireAdminPermissions(adminService, reqPermissions = [], cfg = {}) {
30
23
  return next();
31
24
  }
32
25
  catch (err) {
33
- if (err instanceof js_lib_1.AppError && err.data.adminAuthRequired) {
26
+ if (err instanceof AppError && err.data.adminAuthRequired) {
34
27
  // Redirect to login.html
35
28
  const href = `${loginHtmlPath}?${autoLogin ? 'autoLogin=1&' : ''}returnUrl=\${encodeURIComponent(location.href)}${apiHost ? '&apiHost=' + apiHost : ''}`;
36
29
  res.status(401).send(getLoginHtmlRedirect(href));
@@ -41,7 +34,7 @@ function requireAdminPermissions(adminService, reqPermissions = [], cfg = {}) {
41
34
  }
42
35
  };
43
36
  }
44
- function loginHtml(firebaseServiceCfg) {
37
+ export function loginHtml(firebaseServiceCfg) {
45
38
  const { apiKey: firebaseApiKey, authDomain: firebaseAuthDomain, adminAuthProvider: firebaseAuthProvider = 'GoogleAuthProvider', } = firebaseServiceCfg;
46
39
  return (_req, res) => {
47
40
  res.send(getLoginHtml({
@@ -51,12 +44,12 @@ function loginHtml(firebaseServiceCfg) {
51
44
  }));
52
45
  };
53
46
  }
54
- const getLoginHtml = (0, js_lib_1._memoFn)((cfg) => {
47
+ const getLoginHtml = _memoFn((cfg) => {
55
48
  console.log(`reading login.html`);
56
- const tmpl = nodejs_lib_1.fs2.readText(`${__dirname}/login.html`);
57
- return ejs_1.default.render(tmpl, cfg);
49
+ const tmpl = fs2.readText(`${__dirname}/login.html`);
50
+ return ejs.render(tmpl, cfg);
58
51
  });
59
- function getLoginHtmlRedirect(href) {
52
+ export function getLoginHtmlRedirect(href) {
60
53
  return `
61
54
  <html>
62
55
  <body>401 Admin Authentication Required
@@ -1,5 +1,5 @@
1
1
  import type FirebaseAdmin from 'firebase-admin';
2
- import type { BackendRequest, BackendRequestHandler } from '../server/server.model';
2
+ import type { BackendRequest, BackendRequestHandler } from '../server/server.model.js';
3
3
  export interface AdminServiceCfg {
4
4
  /**
5
5
  * @default 'admin_token'
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseAdminService = void 0;
4
- const js_lib_1 = require("@naturalcycles/js-lib");
5
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
1
+ import { _assert, AppError } from '@naturalcycles/js-lib';
2
+ import { dimGrey, green, red } from '@naturalcycles/nodejs-lib';
6
3
  const adminInfoDisabled = () => ({
7
4
  email: 'authDisabled',
8
5
  permissions: [],
@@ -10,7 +7,7 @@ const adminInfoDisabled = () => ({
10
7
  /**
11
8
  * Base implementation based on Firebase Auth tokens passed as 'admin_token' cookie.
12
9
  */
13
- class BaseAdminService {
10
+ export class BaseAdminService {
14
11
  firebaseAuth;
15
12
  constructor(firebaseAuth, cfg) {
16
13
  this.firebaseAuth = firebaseAuth;
@@ -37,7 +34,7 @@ class BaseAdminService {
37
34
  async getEmailPermissions(email) {
38
35
  if (!email)
39
36
  return;
40
- console.log(`getEmailPermissions (${(0, nodejs_lib_1.dimGrey)(email)}) returning undefined (please override the implementation)`);
37
+ console.log(`getEmailPermissions (${dimGrey(email)}) returning undefined (please override the implementation)`);
41
38
  return;
42
39
  }
43
40
  /**
@@ -45,7 +42,7 @@ class BaseAdminService {
45
42
  */
46
43
  // eslint-disable-next-line max-params
47
44
  async onPermissionCheck(req, email, reqPermissions, required, granted, meta = {}) {
48
- req.log(`${(0, nodejs_lib_1.dimGrey)(email)} ${required ? 'required' : 'optional'} permissions check [${(0, nodejs_lib_1.dimGrey)(reqPermissions.join(', '))}]: ${granted ? (0, nodejs_lib_1.green)('GRANTED') : (0, nodejs_lib_1.red)('DENIED')}`, meta);
45
+ req.log(`${dimGrey(email)} ${required ? 'required' : 'optional'} permissions check [${dimGrey(reqPermissions.join(', '))}]: ${granted ? green('GRANTED') : red('DENIED')}`, meta);
49
46
  }
50
47
  async getEmailByToken(req, adminToken) {
51
48
  if (!adminToken)
@@ -53,7 +50,7 @@ class BaseAdminService {
53
50
  try {
54
51
  const decodedToken = await this.firebaseAuth.verifyIdToken(adminToken);
55
52
  const email = decodedToken?.email;
56
- req.log(`admin email: ${(0, nodejs_lib_1.dimGrey)(email)}`);
53
+ req.log(`admin email: ${dimGrey(email)}`);
57
54
  return email;
58
55
  }
59
56
  catch (err) {
@@ -118,7 +115,7 @@ class BaseAdminService {
118
115
  const adminToken = this.getAdminToken(req);
119
116
  const email = await this.getEmailByToken(req, adminToken);
120
117
  if (!email) {
121
- throw new js_lib_1.AppError('adminToken required', {
118
+ throw new AppError('adminToken required', {
122
119
  adminAuthRequired: true,
123
120
  backendResponseStatusCode: 401,
124
121
  userFriendly: true,
@@ -144,7 +141,7 @@ class BaseAdminService {
144
141
  }
145
142
  }
146
143
  if (!granted) {
147
- throw new js_lib_1.AppError(`Admin permissions required: [${reqPermissions.join(', ')}]`, {
144
+ throw new AppError(`Admin permissions required: [${reqPermissions.join(', ')}]`, {
148
145
  adminPermissionsRequired: reqPermissions,
149
146
  email,
150
147
  backendResponseStatusCode: 403,
@@ -175,7 +172,7 @@ class BaseAdminService {
175
172
  getFirebaseAuthLoginHandler() {
176
173
  return async (req, res) => {
177
174
  const token = req.header('authentication');
178
- (0, js_lib_1._assert)(token, `401 Unauthenticated`, {
175
+ _assert(token, `401 Unauthenticated`, {
179
176
  userFriendly: true,
180
177
  backendResponseStatusCode: 401,
181
178
  });
@@ -198,4 +195,3 @@ class BaseAdminService {
198
195
  };
199
196
  }
200
197
  }
201
- exports.BaseAdminService = BaseAdminService;
@@ -31,7 +31,7 @@ export interface FirebaseSharedServiceCfg {
31
31
  export declare class FirebaseSharedService {
32
32
  cfg: FirebaseSharedServiceCfg;
33
33
  constructor(cfg: FirebaseSharedServiceCfg);
34
- init(): void;
35
- admin(): FirebaseAdmin.app.App;
36
- auth(): FirebaseAdmin.auth.Auth;
34
+ init(): Promise<void>;
35
+ admin(): Promise<FirebaseAdmin.app.App>;
36
+ auth(): Promise<FirebaseAdmin.auth.Auth>;
37
37
  }
@@ -1,20 +1,17 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FirebaseSharedService = void 0;
4
- const tslib_1 = require("tslib");
5
- const js_lib_1 = require("@naturalcycles/js-lib");
6
- class FirebaseSharedService {
1
+ import { __decorate } from "tslib";
2
+ import { _Memo } from '@naturalcycles/js-lib';
3
+ export class FirebaseSharedService {
7
4
  cfg;
8
5
  constructor(cfg) {
9
6
  this.cfg = cfg;
10
7
  }
11
- init() {
12
- this.admin();
8
+ async init() {
9
+ await this.admin();
13
10
  }
14
- admin() {
11
+ async admin() {
15
12
  const { serviceAccount } = this.cfg;
16
13
  // lazy loading
17
- const admin = require('firebase-admin');
14
+ const admin = await import('firebase-admin');
18
15
  const credential = serviceAccount
19
16
  ? admin.credential.cert(serviceAccount)
20
17
  : admin.credential.applicationDefault();
@@ -23,11 +20,11 @@ class FirebaseSharedService {
23
20
  ...this.cfg.opt,
24
21
  }, this.cfg.appName);
25
22
  }
26
- auth() {
27
- return this.admin().auth();
23
+ async auth() {
24
+ const admin = await this.admin();
25
+ return admin.auth();
28
26
  }
29
27
  }
30
- exports.FirebaseSharedService = FirebaseSharedService;
31
- tslib_1.__decorate([
32
- (0, js_lib_1._Memo)()
28
+ __decorate([
29
+ _Memo()
33
30
  ], FirebaseSharedService.prototype, "admin", null);
@@ -1,5 +1,5 @@
1
- import type { AdminMiddleware, RequireAdminCfg } from './adminMiddleware';
2
- import type { BaseAdminService } from './base.admin.service';
1
+ import type { AdminMiddleware, RequireAdminCfg } from './adminMiddleware.js';
2
+ import type { BaseAdminService } from './base.admin.service.js';
3
3
  export interface SecureHeaderMiddlewareCfg extends RequireAdminCfg {
4
4
  adminService: BaseAdminService;
5
5
  /**
@@ -1,19 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSecureHeaderMiddleware = createSecureHeaderMiddleware;
4
- const js_lib_1 = require("@naturalcycles/js-lib");
5
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
- const adminMiddleware_1 = require("./adminMiddleware");
1
+ import { AppError } from '@naturalcycles/js-lib';
2
+ import { timingSafeStringEqual } from '@naturalcycles/nodejs-lib';
3
+ import { requireAdminPermissions } from './adminMiddleware.js';
7
4
  /**
8
5
  * Secures the endpoint by requiring a secret header to be present.
9
6
  * Throws Error401Admin otherwise.
10
7
  */
11
- function createSecureHeaderMiddleware(cfg) {
8
+ export function createSecureHeaderMiddleware(cfg) {
12
9
  return reqPermissions => requireSecureHeaderOrAdmin(cfg, reqPermissions);
13
10
  }
14
11
  function requireSecureHeaderOrAdmin(cfg, reqPermissions) {
15
12
  const { secureHeaderKey = 'Authorization', secureHeaderValue } = cfg;
16
- const requireAdmin = (0, adminMiddleware_1.requireAdminPermissions)(cfg.adminService, reqPermissions, cfg);
13
+ const requireAdmin = requireAdminPermissions(cfg.adminService, reqPermissions, cfg);
17
14
  return async (req, res, next) => {
18
15
  const providedHeader = req.get(secureHeaderKey);
19
16
  // pass
@@ -21,10 +18,10 @@ function requireSecureHeaderOrAdmin(cfg, reqPermissions) {
21
18
  return next();
22
19
  // Header provided - don't check for Admin
23
20
  if (providedHeader) {
24
- if (!secureHeaderValue || (0, nodejs_lib_1.timingSafeStringEqual)(providedHeader, secureHeaderValue)) {
21
+ if (!secureHeaderValue || timingSafeStringEqual(providedHeader, secureHeaderValue)) {
25
22
  return next();
26
23
  }
27
- return next(new js_lib_1.AppError('secureHeader or adminToken is required', {
24
+ return next(new AppError('secureHeader or adminToken is required', {
28
25
  backendResponseStatusCode: 401,
29
26
  adminAuthRequired: true,
30
27
  }));
@@ -1,14 +1,12 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
5
- const deployGae_1 = require("../deploy/deployGae");
6
- const deployHealthCheck_1 = require("../deploy/deployHealthCheck");
7
- const deployPrepare_1 = require("../deploy/deployPrepare");
8
- (0, nodejs_lib_1.runScript)(async () => {
9
- const opt = (0, nodejs_lib_1._yargs)().options({
10
- ...deployPrepare_1.deployPrepareYargsOptions,
11
- ...deployHealthCheck_1.deployHealthCheckYargsOptions,
2
+ import { _yargs, runScript } from '@naturalcycles/nodejs-lib';
3
+ import { deployGae } from '../deploy/deployGae.js';
4
+ import { deployHealthCheckYargsOptions } from '../deploy/deployHealthCheck.js';
5
+ import { deployPrepareYargsOptions } from '../deploy/deployPrepare.js';
6
+ runScript(async () => {
7
+ const opt = _yargs().options({
8
+ ...deployPrepareYargsOptions,
9
+ ...deployHealthCheckYargsOptions,
12
10
  }).argv;
13
- await (0, deployGae_1.deployGae)(opt);
11
+ await deployGae(opt);
14
12
  });
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
2
  /*
4
3
 
5
4
  yarn deploy-health-check --url https://service-dot-yourproject.appspot.com
@@ -8,16 +7,15 @@ yarn deploy-health-check --url https://service-dot-yourproject.appspot.com
8
7
  --intervalSec 2
9
8
 
10
9
  */
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
13
- const deployHealthCheck_1 = require("../deploy/deployHealthCheck");
14
- (0, nodejs_lib_1.runScript)(async () => {
15
- const { url, ...opt } = (0, nodejs_lib_1._yargs)().options({
16
- ...deployHealthCheck_1.deployHealthCheckYargsOptions,
10
+ import { _yargs, runScript } from '@naturalcycles/nodejs-lib';
11
+ import { deployHealthCheck, deployHealthCheckYargsOptions } from '../deploy/deployHealthCheck.js';
12
+ runScript(async () => {
13
+ const { url, ...opt } = _yargs().options({
14
+ ...deployHealthCheckYargsOptions,
17
15
  url: {
18
16
  type: 'string',
19
17
  demandOption: true,
20
18
  },
21
19
  }).argv;
22
- await (0, deployHealthCheck_1.deployHealthCheck)(url, opt);
20
+ await deployHealthCheck(url, opt);
23
21
  });
@@ -1,16 +1,14 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
2
  /*
4
3
 
5
4
  yarn deploy-prepare
6
5
 
7
6
  */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
10
- const deployPrepare_1 = require("../deploy/deployPrepare");
11
- (0, nodejs_lib_1.runScript)(async () => {
12
- const opt = (0, nodejs_lib_1._yargs)().options(deployPrepare_1.deployPrepareYargsOptions).argv;
13
- await (0, deployPrepare_1.deployPrepare)(opt);
7
+ import { _yargs, runScript } from '@naturalcycles/nodejs-lib';
8
+ import { deployPrepare, deployPrepareYargsOptions } from '../deploy/deployPrepare.js';
9
+ runScript(async () => {
10
+ const opt = _yargs().options(deployPrepareYargsOptions).argv;
11
+ await deployPrepare(opt);
14
12
  });
15
13
  // deploy strategy
16
14
  // gae project: from config
@@ -1,15 +1,13 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
5
- const deployGae_1 = require("../deploy/deployGae");
6
- (0, nodejs_lib_1.runScript)(async () => {
7
- const { branch } = (0, nodejs_lib_1._yargs)().options({
2
+ import { _yargs, runScript } from '@naturalcycles/nodejs-lib';
3
+ import { undeployGae } from '../deploy/deployGae.js';
4
+ runScript(async () => {
5
+ const { branch } = _yargs().options({
8
6
  branch: {
9
7
  type: 'string',
10
8
  demandOption: true,
11
9
  desc: `Because Github Actions delete event happens after the branch is already deleted - you need to pass it manually`,
12
10
  },
13
11
  }).argv;
14
- await (0, deployGae_1.undeployGae)(branch);
12
+ await undeployGae(branch);
15
13
  });
package/dist/db/httpDB.js CHANGED
@@ -1,16 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HttpDB = void 0;
4
- const node_stream_1 = require("node:stream");
5
- const db_lib_1 = require("@naturalcycles/db-lib");
6
- const js_lib_1 = require("@naturalcycles/js-lib");
1
+ import { Readable } from 'node:stream';
2
+ import { BaseCommonDB, commonDBFullSupport } from '@naturalcycles/db-lib';
3
+ import { getFetcher } from '@naturalcycles/js-lib';
7
4
  /**
8
5
  * Implementation of CommonDB that proxies all requests via HTTP to "httpDBRequestHandler".
9
6
  */
10
- class HttpDB extends db_lib_1.BaseCommonDB {
7
+ export class HttpDB extends BaseCommonDB {
11
8
  cfg;
12
9
  support = {
13
- ...db_lib_1.commonDBFullSupport,
10
+ ...commonDBFullSupport,
14
11
  streaming: false,
15
12
  createTable: false,
16
13
  bufferValues: false,
@@ -26,7 +23,7 @@ class HttpDB extends db_lib_1.BaseCommonDB {
26
23
  this.setCfg(cfg);
27
24
  }
28
25
  setCfg(cfg) {
29
- this.fetcher = (0, js_lib_1.getFetcher)(cfg);
26
+ this.fetcher = getFetcher(cfg);
30
27
  }
31
28
  fetcher;
32
29
  async ping() {
@@ -94,7 +91,6 @@ class HttpDB extends db_lib_1.BaseCommonDB {
94
91
  }
95
92
  streamQuery(_q, _opt) {
96
93
  console.warn(`streamQuery not implemented`);
97
- return node_stream_1.Readable.from([]);
94
+ return Readable.from([]);
98
95
  }
99
96
  }
100
- exports.HttpDB = HttpDB;
@@ -1,7 +1,7 @@
1
1
  import type { CommonDB, CommonDBOptions, CommonDBSaveOptions } from '@naturalcycles/db-lib';
2
2
  import { DBQuery } from '@naturalcycles/db-lib';
3
3
  import type { ObjectWithId } from '@naturalcycles/js-lib';
4
- import type { BackendRouter } from '..';
4
+ import type { BackendRouter } from '../server/server.model.js';
5
5
  export interface GetByIdsInput {
6
6
  table: string;
7
7
  ids: string[];
@@ -1,32 +1,30 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.httpDBRequestHandler = httpDBRequestHandler;
4
- const db_lib_1 = require("@naturalcycles/db-lib");
5
- const validation_1 = require("@naturalcycles/db-lib/dist/validation");
6
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
7
- const __1 = require("..");
8
- const getByIdsInputSchema = (0, nodejs_lib_1.objectSchema)({
9
- table: nodejs_lib_1.stringSchema,
10
- ids: (0, nodejs_lib_1.arraySchema)(nodejs_lib_1.stringSchema),
11
- opt: validation_1.commonDBOptionsSchema.optional(),
1
+ import { DBQuery, InMemoryDB } from '@naturalcycles/db-lib';
2
+ import { commonDBOptionsSchema, commonDBSaveOptionsSchema, dbQuerySchema, } from '@naturalcycles/db-lib/dist/validation/index.js';
3
+ import { anyObjectSchema, arraySchema, objectSchema, stringSchema } from '@naturalcycles/nodejs-lib';
4
+ import { getDefaultRouter } from '../server/getDefaultRouter.js';
5
+ import { validateRequest } from '../server/validation/validateRequest.js';
6
+ const getByIdsInputSchema = objectSchema({
7
+ table: stringSchema,
8
+ ids: arraySchema(stringSchema),
9
+ opt: commonDBOptionsSchema.optional(),
12
10
  });
13
- const runQueryInputSchema = (0, nodejs_lib_1.objectSchema)({
14
- query: validation_1.dbQuerySchema,
15
- opt: validation_1.commonDBOptionsSchema.optional(),
11
+ const runQueryInputSchema = objectSchema({
12
+ query: dbQuerySchema,
13
+ opt: commonDBOptionsSchema.optional(),
16
14
  });
17
- const saveBatchInputSchema = (0, nodejs_lib_1.objectSchema)({
18
- table: nodejs_lib_1.stringSchema,
19
- rows: (0, nodejs_lib_1.arraySchema)(nodejs_lib_1.anyObjectSchema),
20
- opt: validation_1.commonDBSaveOptionsSchema.optional(),
15
+ const saveBatchInputSchema = objectSchema({
16
+ table: stringSchema,
17
+ rows: arraySchema(anyObjectSchema),
18
+ opt: commonDBSaveOptionsSchema.optional(),
21
19
  });
22
20
  /**
23
21
  * Exposes CommonDB interface from provided CommonDB as HTTP endpoint (Express RequestHandler).
24
22
  */
25
- function httpDBRequestHandler(db) {
26
- const router = (0, __1.getDefaultRouter)();
23
+ export function httpDBRequestHandler(db) {
24
+ const router = getDefaultRouter();
27
25
  // resetCache, only applicable to InMemoryDB
28
26
  router.put('/resetCache{/:table}', async (req, res) => {
29
- if (db instanceof db_lib_1.InMemoryDB) {
27
+ if (db instanceof InMemoryDB) {
30
28
  await db.resetCache(req.params['table']);
31
29
  }
32
30
  res.end();
@@ -50,24 +48,24 @@ function httpDBRequestHandler(db) {
50
48
  // })
51
49
  // getByIds
52
50
  router.put('/getByIds', async (req, res) => {
53
- const { table, ids, opt } = __1.validateRequest.body(req, getByIdsInputSchema);
51
+ const { table, ids, opt } = validateRequest.body(req, getByIdsInputSchema);
54
52
  res.json(await db.getByIds(table, ids, opt));
55
53
  });
56
54
  // runQuery
57
55
  router.put('/runQuery', async (req, res) => {
58
- const { query, opt } = __1.validateRequest.body(req, runQueryInputSchema);
59
- const q = db_lib_1.DBQuery.fromPlainObject(query);
56
+ const { query, opt } = validateRequest.body(req, runQueryInputSchema);
57
+ const q = DBQuery.fromPlainObject(query);
60
58
  res.json(await db.runQuery(q, opt));
61
59
  });
62
60
  // runQueryCount
63
61
  router.put('/runQueryCount', async (req, res) => {
64
- const { query, opt } = __1.validateRequest.body(req, runQueryInputSchema);
65
- const q = db_lib_1.DBQuery.fromPlainObject(query);
62
+ const { query, opt } = validateRequest.body(req, runQueryInputSchema);
63
+ const q = DBQuery.fromPlainObject(query);
66
64
  res.json(await db.runQueryCount(q, opt));
67
65
  });
68
66
  // saveBatch
69
67
  router.put('/saveBatch', async (req, res) => {
70
- const { table, rows, opt } = __1.validateRequest.body(req, saveBatchInputSchema);
68
+ const { table, rows, opt } = validateRequest.body(req, saveBatchInputSchema);
71
69
  await db.saveBatch(table, rows, opt);
72
70
  res.end();
73
71
  });
@@ -78,8 +76,8 @@ function httpDBRequestHandler(db) {
78
76
  // })
79
77
  // deleteByQuery
80
78
  router.put('/deleteByQuery', async (req, res) => {
81
- const { query, opt } = __1.validateRequest.body(req, runQueryInputSchema);
82
- const q = db_lib_1.DBQuery.fromPlainObject(query);
79
+ const { query, opt } = validateRequest.body(req, runQueryInputSchema);
80
+ const q = DBQuery.fromPlainObject(query);
83
81
  res.json(await db.deleteByQuery(q, opt));
84
82
  });
85
83
  return router;
@@ -1,5 +1,5 @@
1
- import type { HttpDBCfg } from './httpDB';
2
- import { HttpDB } from './httpDB';
3
- import { httpDBRequestHandler } from './httpDBRequestHandler';
1
+ import type { HttpDBCfg } from './httpDB.js';
2
+ import { HttpDB } from './httpDB.js';
3
+ import { httpDBRequestHandler } from './httpDBRequestHandler.js';
4
4
  export type { HttpDBCfg };
5
5
  export { HttpDB, httpDBRequestHandler };
package/dist/db/index.js CHANGED
@@ -1,7 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.httpDBRequestHandler = exports.HttpDB = void 0;
4
- const httpDB_1 = require("./httpDB");
5
- Object.defineProperty(exports, "HttpDB", { enumerable: true, get: function () { return httpDB_1.HttpDB; } });
6
- const httpDBRequestHandler_1 = require("./httpDBRequestHandler");
7
- Object.defineProperty(exports, "httpDBRequestHandler", { enumerable: true, get: function () { return httpDBRequestHandler_1.httpDBRequestHandler; } });
1
+ import { HttpDB } from './httpDB.js';
2
+ import { httpDBRequestHandler } from './httpDBRequestHandler.js';
3
+ export { HttpDB, httpDBRequestHandler };
@@ -1,16 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBackendCfg = getBackendCfg;
4
- const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
5
- const paths_cnst_1 = require("../paths.cnst");
6
- const backendCfgSchema = nodejs_lib_1.AjvSchema.readJsonSync(`${paths_cnst_1.resourcesDir}/backendCfg.schema.json`, {
1
+ import { AjvSchema, fs2, requireFileToExist } from '@naturalcycles/nodejs-lib';
2
+ import { resourcesDir } from '../paths.cnst.js';
3
+ const backendCfgSchema = AjvSchema.readJsonSync(`${resourcesDir}/backendCfg.schema.json`, {
7
4
  objectName: 'backend.cfg.yaml',
8
5
  });
9
- function getBackendCfg(projectDir = '.') {
6
+ export function getBackendCfg(projectDir = '.') {
10
7
  const backendCfgYamlPath = `${projectDir}/backend.cfg.yaml`;
11
- (0, nodejs_lib_1.requireFileToExist)(backendCfgYamlPath);
8
+ requireFileToExist(backendCfgYamlPath);
12
9
  const backendCfg = {
13
- ...nodejs_lib_1.fs2.readYaml(backendCfgYamlPath),
10
+ ...fs2.readYaml(backendCfgYamlPath),
14
11
  };
15
12
  backendCfgSchema.validate(backendCfg);
16
13
  return backendCfg;
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
@@ -1,5 +1,5 @@
1
- import type { BackendCfg } from './backend.cfg.util';
2
- import type { AppYaml, DeployInfo } from './deploy.model';
1
+ import type { BackendCfg } from './backend.cfg.util.js';
2
+ import type { AppYaml, DeployInfo } from './deploy.model.js';
3
3
  export declare function createAndSaveDeployInfo(backendCfg: BackendCfg, targetDir: string): Promise<DeployInfo>;
4
4
  export declare function createDeployInfo(backendCfg: BackendCfg, overrideBranch?: string): Promise<DeployInfo>;
5
5
  export declare function createAndSaveAppYaml(backendCfg: BackendCfg, deployInfo: DeployInfo, projectDir: string, targetDir: string, appYamlPassEnv?: string): AppYaml;