@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,4 +1,4 @@
1
- import type { BackendRequestHandler } from './server.model'
1
+ import type { BackendRequestHandler } from './server.model.js'
2
2
 
3
3
  export function okMiddleware(): BackendRequestHandler {
4
4
  return (_req, res) => {
@@ -1,6 +1,6 @@
1
1
  import type { CommonLogLevel } from '@naturalcycles/js-lib'
2
2
  import { boldGrey, green, red, yellow } from '@naturalcycles/nodejs-lib'
3
- import type { BackendRequest } from './server.model'
3
+ import type { BackendRequest } from './server.model.js'
4
4
 
5
5
  export function logRequest(req: BackendRequest, statusCode: number, ...tokens: any[]): void {
6
6
  req[logLevel(statusCode)](
@@ -1,4 +1,4 @@
1
- import type { BackendRequest } from './server.model'
1
+ import type { BackendRequest } from './server.model.js'
2
2
 
3
3
  /**
4
4
  * Returns e.g:
@@ -1,7 +1,7 @@
1
1
  import type { NumberOfSeconds } from '@naturalcycles/js-lib'
2
2
  import { _ms, AppError } from '@naturalcycles/js-lib'
3
- import type { BackendRequest, BackendRequestHandler, BackendResponse } from '../index'
4
- import { getRequestEndpoint, onFinished, respondWithError } from '../index'
3
+ import type { BackendRequest, BackendRequestHandler, BackendResponse } from '../index.js'
4
+ import { getRequestEndpoint, onFinished, respondWithError } from '../index.js'
5
5
 
6
6
  export interface RequestTimeoutMiddlewareCfg {
7
7
  /**
@@ -1,5 +1,5 @@
1
1
  import { _safeJsonStringify } from '@naturalcycles/js-lib'
2
- import type { BackendRequestHandler, BackendResponse } from './server.model'
2
+ import type { BackendRequestHandler, BackendResponse } from './server.model.js'
3
3
 
4
4
  /**
5
5
  * Replaces express's built-in req.json() function with the safe one,
@@ -11,9 +11,9 @@ import {
11
11
  _sum,
12
12
  NumberStack,
13
13
  } from '@naturalcycles/js-lib'
14
- import type { BackendRequestHandler } from '../index'
15
- import { onFinished } from '../index'
16
- import { getRequestEndpoint } from './request.util'
14
+ import type { BackendRequestHandler } from '../index.js'
15
+ import { onFinished } from '../index.js'
16
+ import { getRequestEndpoint } from './request.util.js'
17
17
 
18
18
  const { GAE_INSTANCE } = process.env
19
19
 
@@ -1,7 +1,7 @@
1
1
  import { _filterNullishValues, localTime } from '@naturalcycles/js-lib'
2
2
  import { memoryUsageFull, processSharedUtil } from '@naturalcycles/nodejs-lib'
3
- import { getDeployInfo } from './deployInfo.util'
4
- import type { BackendRequestHandler } from './server.model'
3
+ import { getDeployInfo } from './deployInfo.util.js'
4
+ import type { BackendRequestHandler } from './server.model.js'
5
5
 
6
6
  const { versions, arch, platform } = process
7
7
  const { GAE_APPLICATION, GAE_SERVICE, GAE_VERSION, K_SERVICE, K_REVISION, APP_ENV, NODE_OPTIONS } =
@@ -1,9 +1,9 @@
1
1
  import type { UnixTimestampMillis } from '@naturalcycles/js-lib'
2
2
  import { _since } from '@naturalcycles/js-lib'
3
3
  import { boldGrey, dimGrey } from '@naturalcycles/nodejs-lib'
4
- import type { BackendRequestHandler } from '../index'
5
- import { onFinished } from '../index'
6
- import { logRequest } from './request.log.util'
4
+ import type { BackendRequestHandler } from '../index.js'
5
+ import { onFinished } from '../index.js'
6
+ import { logRequest } from './request.log.util.js'
7
7
 
8
8
  const { APP_ENV } = process.env
9
9
 
@@ -1,7 +1,7 @@
1
1
  import type { Server } from 'node:http'
2
- import type { SentrySharedService } from '../sentry/sentry.shared.service'
3
- import type { DefaultAppCfg } from './createDefaultApp.model'
4
- import type { BackendApplication } from './server.model'
2
+ import type { SentrySharedService } from '../sentry/sentry.shared.service.js'
3
+ import type { DefaultAppCfg } from './createDefaultApp.model.js'
4
+ import type { BackendApplication } from './server.model.js'
5
5
 
6
6
  /**
7
7
  * If DefaultAppCfg.resources is passed and `expressApp` is not passed - it will call createDefaultApp(cfg).
@@ -2,8 +2,8 @@ import type { Server } from 'node:http'
2
2
  import os from 'node:os'
3
3
  import { _Memo, _ms } from '@naturalcycles/js-lib'
4
4
  import { boldGrey, dimGrey, white } from '@naturalcycles/nodejs-lib'
5
- import { createDefaultApp } from '../index'
6
- import type { StartServerCfg, StartServerData } from './startServer.model'
5
+ import { createDefaultApp } from '../index.js'
6
+ import type { StartServerCfg, StartServerData } from './startServer.model.js'
7
7
 
8
8
  const { NODE_OPTIONS, APP_ENV } = process.env
9
9
 
@@ -13,11 +13,8 @@ export class BackendServer {
13
13
  server?: Server
14
14
 
15
15
  async start(): Promise<StartServerData> {
16
- const {
17
- port: cfgPort,
18
- expressApp = createDefaultApp(this.cfg),
19
- registerUncaughtExceptionHandlers = true,
20
- } = this.cfg
16
+ const { port: cfgPort, registerUncaughtExceptionHandlers = true } = this.cfg
17
+ const expressApp = this.cfg.expressApp || (await createDefaultApp(this.cfg))
21
18
 
22
19
  // 1. Register error handlers, etc.
23
20
  if (registerUncaughtExceptionHandlers) {
@@ -2,8 +2,8 @@ import type { JsonSchema, JsonSchemaBuilder } from '@naturalcycles/js-lib'
2
2
  import { _get, AppError } from '@naturalcycles/js-lib'
3
3
  import type { AjvValidationError } from '@naturalcycles/nodejs-lib'
4
4
  import { AjvSchema } from '@naturalcycles/nodejs-lib'
5
- import type { BackendRequestHandler } from '../server.model'
6
- import type { ReqValidationOptions } from './validateRequest'
5
+ import type { BackendRequestHandler } from '../server.model.js'
6
+ import type { ReqValidationOptions } from './validateRequest.js'
7
7
 
8
8
  const REDACTED = 'REDACTED'
9
9
 
@@ -1,7 +1,7 @@
1
1
  import { _get, AppError } from '@naturalcycles/js-lib'
2
2
  import type { AnySchema, JoiValidationError } from '@naturalcycles/nodejs-lib'
3
3
  import { getValidationResult } from '@naturalcycles/nodejs-lib'
4
- import type { BackendRequest } from '../server.model'
4
+ import type { BackendRequest } from '../server.model.js'
5
5
 
6
6
  const REDACTED = 'REDACTED'
7
7
 
@@ -1,8 +1,8 @@
1
1
  import { _get, AppError } from '@naturalcycles/js-lib'
2
2
  import type { ZodSchema, ZodValidationError } from '@naturalcycles/js-lib/dist/zod/index.js'
3
3
  import { zSafeValidate } from '@naturalcycles/js-lib/dist/zod/index.js'
4
- import type { BackendRequestHandler } from '../server.model'
5
- import type { ReqValidationOptions } from './validateRequest'
4
+ import type { BackendRequestHandler } from '../server.model.js'
5
+ import type { ReqValidationOptions } from './validateRequest.js'
6
6
 
7
7
  const REDACTED = 'REDACTED'
8
8
 
@@ -2,13 +2,13 @@ import type { Server } from 'node:http'
2
2
  import type { AddressInfo } from 'node:net'
3
3
  import type { Fetcher, FetcherOptions, FetchFunction } from '@naturalcycles/js-lib'
4
4
  import { getFetcher, pDelay } from '@naturalcycles/js-lib'
5
- import type { BackendApplication, DefaultAppCfg } from '../index'
6
- import { createDefaultApp } from '../index'
7
- import type { BackendRequestHandlerCfg } from '../server/createDefaultApp.model'
5
+ import type { BackendApplication, DefaultAppCfg } from '../index.js'
6
+ import { createDefaultApp } from '../index.js'
7
+ import type { BackendRequestHandlerCfg } from '../server/createDefaultApp.model.js'
8
8
 
9
9
  const nativeFetchFn: FetchFunction = async (url, init) => await globalThis.fetch(url, init)
10
10
 
11
- export interface ExpressApp extends Fetcher {
11
+ export interface ExpressApp extends Fetcher, AsyncDisposable {
12
12
  close: () => Promise<void>
13
13
  }
14
14
 
@@ -19,13 +19,13 @@ export interface ExpressApp extends Fetcher {
19
19
  // })
20
20
 
21
21
  class ExpressTestService {
22
- createAppFromResource(
22
+ async createAppFromResource(
23
23
  resource: BackendRequestHandlerCfg,
24
24
  opt?: FetcherOptions,
25
25
  defaultAppCfg?: DefaultAppCfg,
26
- ): ExpressApp {
26
+ ): Promise<ExpressApp> {
27
27
  return this.createApp(
28
- createDefaultApp({
28
+ await createDefaultApp({
29
29
  ...defaultAppCfg,
30
30
  resources: [resource],
31
31
  }),
@@ -33,9 +33,12 @@ class ExpressTestService {
33
33
  )
34
34
  }
35
35
 
36
- createAppFromResources(resources: BackendRequestHandlerCfg[], opt?: FetcherOptions): ExpressApp {
36
+ async createAppFromResources(
37
+ resources: BackendRequestHandlerCfg[],
38
+ opt?: FetcherOptions,
39
+ ): Promise<ExpressApp> {
37
40
  return this.createApp(
38
- createDefaultApp({
41
+ await createDefaultApp({
39
42
  resources,
40
43
  }),
41
44
  opt,
@@ -70,10 +73,16 @@ class ExpressTestService {
70
73
  // console.log(`close took ${_since(started)}`) // todo: investigate why it takes ~5 seconds!
71
74
  // Kirill: not awaiting the server-close, otherwise it takes significant waiting time
72
75
  // to "teardown" server after it's been hit by Fetcher
73
- server.close()
74
- // server.destroy()
76
+ // server.close()
77
+ // 2024-08-31: server.close is no longer slow, so now we're back at awaiting it
78
+ await new Promise(resolve => {
79
+ server.unref().close(resolve)
80
+ })
81
+ await pDelay()
75
82
  }
76
83
 
84
+ fetcher[Symbol.asyncDispose] = async () => await fetcher.close()
85
+
77
86
  return fetcher
78
87
  }
79
88
 
@@ -1,5 +1,5 @@
1
- import type { ExpressApp } from './express.test.service'
2
- import { expressTestService } from './express.test.service'
1
+ import type { ExpressApp } from './express.test.service.js'
2
+ import { expressTestService } from './express.test.service.js'
3
3
 
4
4
  export type { ExpressApp }
5
5