@backstage/backend-app-api 0.7.2-next.1 → 0.7.2

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/CHANGELOG.md CHANGED
@@ -1,40 +1,16 @@
1
1
  # @backstage/backend-app-api
2
2
 
3
- ## 0.7.2-next.1
3
+ ## 0.7.2
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - 09f8988: Remove explicit `alg` check for user tokens in `verifyToken`
8
- - Updated dependencies
9
- - @backstage/backend-common@0.22.0-next.1
10
- - @backstage/backend-tasks@0.5.23-next.1
11
- - @backstage/plugin-auth-node@0.4.13-next.1
12
- - @backstage/plugin-permission-node@0.7.29-next.1
13
- - @backstage/cli-node@0.2.5
14
- - @backstage/config-loader@1.8.0
15
- - @backstage/backend-plugin-api@0.6.18-next.1
7
+ - b6b59c5: Redact `meta` fields too with the logger
16
8
 
17
- ## 0.7.1-next.0
9
+ ## 0.7.1
18
10
 
19
11
  ### Patch Changes
20
12
 
21
- - 4cd5ff0: Add ability to configure the Node.js HTTP Server when configuring the root HTTP Router service
22
- - e8199b1: Move the JWKS registration outside of the lifecycle middleware
23
- - dc8c5dd: The default `TokenManager` implementation no longer requires keys to be configured in production, but it will throw an errors when generating or authenticating tokens. The default `AuthService` implementation will now also provide additional context if such an error is throw when falling back to using the `TokenManager` service to generate tokens for outgoing requests.
24
- - 025641b: Redact `meta` fields too with the logger
25
- - 5863e02: Internal refactor to only create one external token handler
26
- - Updated dependencies
27
- - @backstage/plugin-auth-node@0.4.13-next.0
28
- - @backstage/backend-common@0.21.8-next.0
29
- - @backstage/backend-plugin-api@0.6.18-next.0
30
- - @backstage/backend-tasks@0.5.23-next.0
31
- - @backstage/cli-common@0.1.13
32
- - @backstage/cli-node@0.2.5
33
- - @backstage/config@1.2.0
34
- - @backstage/config-loader@1.8.0
35
- - @backstage/errors@1.2.4
36
- - @backstage/types@1.1.1
37
- - @backstage/plugin-permission-node@0.7.29-next.0
13
+ - 3554ebe: Move the JWKS registration outside of the lifecycle middleware
38
14
 
39
15
  ## 0.7.0
40
16
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/backend-app-api",
3
- "version": "0.7.2-next.1",
3
+ "version": "0.7.2",
4
4
  "main": "../dist/alpha.cjs.js",
5
5
  "types": "../dist/alpha.d.ts"
6
6
  }
package/dist/index.cjs.js CHANGED
@@ -26,10 +26,10 @@ var backendCommon = require('@backstage/backend-common');
26
26
  var jose = require('jose');
27
27
  var uuid = require('uuid');
28
28
  var pluginAuthNode = require('@backstage/plugin-auth-node');
29
- var types = require('@backstage/types');
30
29
  var backendAppApi = require('@backstage/backend-app-api');
31
30
  var cookie = require('cookie');
32
31
  var Router = require('express-promise-router');
32
+ var types = require('@backstage/types');
33
33
  var pathToRegexp = require('path-to-regexp');
34
34
  var pluginPermissionNode = require('@backstage/plugin-permission-node');
35
35
  var express = require('express');
@@ -618,7 +618,7 @@ var __accessCheck$e = (obj, member, msg) => {
618
618
  };
619
619
  var __privateGet$c = (obj, member, getter) => {
620
620
  __accessCheck$e(obj, member, "read from private field");
621
- return member.get(obj);
621
+ return getter ? getter.call(obj) : member.get(obj);
622
622
  };
623
623
  var __privateAdd$e = (obj, member, value) => {
624
624
  if (member.has(obj))
@@ -627,7 +627,7 @@ var __privateAdd$e = (obj, member, value) => {
627
627
  };
628
628
  var __privateSet$a = (obj, member, value, setter) => {
629
629
  __accessCheck$e(obj, member, "write to private field");
630
- member.set(obj, value);
630
+ setter ? setter.call(obj, value) : member.set(obj, value);
631
631
  return value;
632
632
  };
633
633
  var _config, _logger;
@@ -811,7 +811,7 @@ var __accessCheck$d = (obj, member, msg) => {
811
811
  };
812
812
  var __privateGet$b = (obj, member, getter) => {
813
813
  __accessCheck$d(obj, member, "read from private field");
814
- return member.get(obj);
814
+ return getter ? getter.call(obj) : member.get(obj);
815
815
  };
816
816
  var __privateAdd$d = (obj, member, value) => {
817
817
  if (member.has(obj))
@@ -820,7 +820,7 @@ var __privateAdd$d = (obj, member, value) => {
820
820
  };
821
821
  var __privateSet$9 = (obj, member, value, setter) => {
822
822
  __accessCheck$d(obj, member, "write to private field");
823
- member.set(obj, value);
823
+ setter ? setter.call(obj, value) : member.set(obj, value);
824
824
  return value;
825
825
  };
826
826
  var _winston, _addRedactions;
@@ -948,7 +948,7 @@ var __accessCheck$c = (obj, member, msg) => {
948
948
  };
949
949
  var __privateGet$a = (obj, member, getter) => {
950
950
  __accessCheck$c(obj, member, "read from private field");
951
- return member.get(obj);
951
+ return getter ? getter.call(obj) : member.get(obj);
952
952
  };
953
953
  var __privateAdd$c = (obj, member, value) => {
954
954
  if (member.has(obj))
@@ -957,7 +957,7 @@ var __privateAdd$c = (obj, member, value) => {
957
957
  };
958
958
  var __privateSet$8 = (obj, member, value, setter) => {
959
959
  __accessCheck$c(obj, member, "write to private field");
960
- member.set(obj, value);
960
+ setter ? setter.call(obj, value) : member.set(obj, value);
961
961
  return value;
962
962
  };
963
963
  var _hasStarted$1, _startupTasks$1, _hasShutdown, _shutdownTasks;
@@ -1042,7 +1042,7 @@ var __accessCheck$b = (obj, member, msg) => {
1042
1042
  };
1043
1043
  var __privateGet$9 = (obj, member, getter) => {
1044
1044
  __accessCheck$b(obj, member, "read from private field");
1045
- return member.get(obj);
1045
+ return getter ? getter.call(obj) : member.get(obj);
1046
1046
  };
1047
1047
  var __privateAdd$b = (obj, member, value) => {
1048
1048
  if (member.has(obj))
@@ -1051,7 +1051,7 @@ var __privateAdd$b = (obj, member, value) => {
1051
1051
  };
1052
1052
  var __privateSet$7 = (obj, member, value, setter) => {
1053
1053
  __accessCheck$b(obj, member, "write to private field");
1054
- member.set(obj, value);
1054
+ setter ? setter.call(obj, value) : member.set(obj, value);
1055
1055
  return value;
1056
1056
  };
1057
1057
  var _hasStarted, _startupTasks;
@@ -1122,7 +1122,7 @@ var __accessCheck$a = (obj, member, msg) => {
1122
1122
  };
1123
1123
  var __privateGet$8 = (obj, member, getter) => {
1124
1124
  __accessCheck$a(obj, member, "read from private field");
1125
- return member.get(obj);
1125
+ return getter ? getter.call(obj) : member.get(obj);
1126
1126
  };
1127
1127
  var __privateAdd$a = (obj, member, value) => {
1128
1128
  if (member.has(obj))
@@ -1131,7 +1131,7 @@ var __privateAdd$a = (obj, member, value) => {
1131
1131
  };
1132
1132
  var __privateSet$6 = (obj, member, value, setter) => {
1133
1133
  __accessCheck$a(obj, member, "write to private field");
1134
- member.set(obj, value);
1134
+ setter ? setter.call(obj, value) : member.set(obj, value);
1135
1135
  return value;
1136
1136
  };
1137
1137
  var __privateMethod$7 = (obj, member, method) => {
@@ -1331,7 +1331,7 @@ var __accessCheck$9 = (obj, member, msg) => {
1331
1331
  };
1332
1332
  var __privateGet$7 = (obj, member, getter) => {
1333
1333
  __accessCheck$9(obj, member, "read from private field");
1334
- return member.get(obj);
1334
+ return getter ? getter.call(obj) : member.get(obj);
1335
1335
  };
1336
1336
  var __privateAdd$9 = (obj, member, value) => {
1337
1337
  if (member.has(obj))
@@ -1340,7 +1340,7 @@ var __privateAdd$9 = (obj, member, value) => {
1340
1340
  };
1341
1341
  var __privateSet$5 = (obj, member, value, setter) => {
1342
1342
  __accessCheck$9(obj, member, "write to private field");
1343
- member.set(obj, value);
1343
+ setter ? setter.call(obj, value) : member.set(obj, value);
1344
1344
  return value;
1345
1345
  };
1346
1346
  var __privateMethod$6 = (obj, member, method) => {
@@ -1570,7 +1570,7 @@ var __accessCheck$8 = (obj, member, msg) => {
1570
1570
  };
1571
1571
  var __privateGet$6 = (obj, member, getter) => {
1572
1572
  __accessCheck$8(obj, member, "read from private field");
1573
- return member.get(obj);
1573
+ return getter ? getter.call(obj) : member.get(obj);
1574
1574
  };
1575
1575
  var __privateAdd$8 = (obj, member, value) => {
1576
1576
  if (member.has(obj))
@@ -1579,7 +1579,7 @@ var __privateAdd$8 = (obj, member, value) => {
1579
1579
  };
1580
1580
  var __privateSet$4 = (obj, member, value, setter) => {
1581
1581
  __accessCheck$8(obj, member, "write to private field");
1582
- member.set(obj, value);
1582
+ setter ? setter.call(obj, value) : member.set(obj, value);
1583
1583
  return value;
1584
1584
  };
1585
1585
  var __privateMethod$5 = (obj, member, method) => {
@@ -1870,7 +1870,7 @@ var __accessCheck$7 = (obj, member, msg) => {
1870
1870
  };
1871
1871
  var __privateGet$5 = (obj, member, getter) => {
1872
1872
  __accessCheck$7(obj, member, "read from private field");
1873
- return member.get(obj);
1873
+ return getter ? getter.call(obj) : member.get(obj);
1874
1874
  };
1875
1875
  var __privateAdd$7 = (obj, member, value) => {
1876
1876
  if (member.has(obj))
@@ -1879,7 +1879,7 @@ var __privateAdd$7 = (obj, member, value) => {
1879
1879
  };
1880
1880
  var __privateSet$3 = (obj, member, value, setter) => {
1881
1881
  __accessCheck$7(obj, member, "write to private field");
1882
- member.set(obj, value);
1882
+ setter ? setter.call(obj, value) : member.set(obj, value);
1883
1883
  return value;
1884
1884
  };
1885
1885
  var _initializer;
@@ -2147,12 +2147,7 @@ class DefaultAuthService {
2147
2147
  targetPluginId
2148
2148
  });
2149
2149
  }
2150
- return this.tokenManager.getToken().catch((error) => {
2151
- throw new errors.ForwardedError(
2152
- `Unable to generate legacy token for communication with the '${targetPluginId}' plugin. You will typically encounter this error when attempting to call a plugin that does not exist, or is deployed with an old version of Backstage`,
2153
- error
2154
- );
2155
- });
2150
+ return this.tokenManager.getToken();
2156
2151
  case "user": {
2157
2152
  const { token } = internalForward;
2158
2153
  if (!token) {
@@ -2210,7 +2205,7 @@ var __accessCheck$5 = (obj, member, msg) => {
2210
2205
  };
2211
2206
  var __privateGet$4 = (obj, member, getter) => {
2212
2207
  __accessCheck$5(obj, member, "read from private field");
2213
- return member.get(obj);
2208
+ return getter ? getter.call(obj) : member.get(obj);
2214
2209
  };
2215
2210
  var __privateAdd$5 = (obj, member, value) => {
2216
2211
  if (member.has(obj))
@@ -2219,7 +2214,7 @@ var __privateAdd$5 = (obj, member, value) => {
2219
2214
  };
2220
2215
  var __privateSet$2 = (obj, member, value, setter) => {
2221
2216
  __accessCheck$5(obj, member, "write to private field");
2222
- member.set(obj, value);
2217
+ setter ? setter.call(obj, value) : member.set(obj, value);
2223
2218
  return value;
2224
2219
  };
2225
2220
  var _keyStore, _keyStoreUpdated;
@@ -2297,7 +2292,7 @@ class PluginTokenHandler {
2297
2292
  options.logger,
2298
2293
  options.ownPluginId,
2299
2294
  options.publicKeyStore,
2300
- Math.round(types.durationToMilliseconds(options.keyDuration) / 1e3),
2295
+ options.keyDurationSeconds,
2301
2296
  (_a = options.algorithm) != null ? _a : "ES256",
2302
2297
  options.discovery
2303
2298
  );
@@ -2467,16 +2462,18 @@ var __privateMethod$3 = (obj, member, method) => {
2467
2462
  };
2468
2463
  var _getTokenVerificationOptions, getTokenVerificationOptions_fn;
2469
2464
  const _UserTokenHandler = class _UserTokenHandler {
2470
- constructor(jwksClient) {
2465
+ constructor(algorithms, jwksClient) {
2466
+ this.algorithms = algorithms;
2471
2467
  this.jwksClient = jwksClient;
2472
2468
  __privateAdd$4(this, _getTokenVerificationOptions);
2473
2469
  }
2474
2470
  static create(options) {
2471
+ const algorithms = ["ES256"];
2475
2472
  const jwksClient = new JwksClient(async () => {
2476
2473
  const url = await options.discovery.getBaseUrl("auth");
2477
2474
  return new URL(`${url}/.well-known/jwks.json`);
2478
2475
  });
2479
- return new _UserTokenHandler(jwksClient);
2476
+ return new _UserTokenHandler(algorithms, jwksClient);
2480
2477
  }
2481
2478
  async verifyToken(token) {
2482
2479
  const verifyOpts = __privateMethod$3(this, _getTokenVerificationOptions, getTokenVerificationOptions_fn).call(this, token);
@@ -2549,12 +2546,14 @@ getTokenVerificationOptions_fn = function(token) {
2549
2546
  const { typ } = jose.decodeProtectedHeader(token);
2550
2547
  if (typ === pluginAuthNode.tokenTypes.user.typParam) {
2551
2548
  return {
2549
+ algorithms: this.algorithms,
2552
2550
  requiredClaims: ["iat", "exp", "sub"],
2553
2551
  typ: pluginAuthNode.tokenTypes.user.typParam
2554
2552
  };
2555
2553
  }
2556
2554
  if (typ === pluginAuthNode.tokenTypes.limitedUser.typParam) {
2557
2555
  return {
2556
+ algorithms: this.algorithms,
2558
2557
  requiredClaims: ["iat", "exp", "sub"],
2559
2558
  typ: pluginAuthNode.tokenTypes.limitedUser.typParam
2560
2559
  };
@@ -2562,6 +2561,7 @@ getTokenVerificationOptions_fn = function(token) {
2562
2561
  const { aud } = jose.decodeJwt(token);
2563
2562
  if (aud === pluginAuthNode.tokenTypes.user.audClaim) {
2564
2563
  return {
2564
+ algorithms: this.algorithms,
2565
2565
  audience: pluginAuthNode.tokenTypes.user.audClaim
2566
2566
  };
2567
2567
  }
@@ -2577,7 +2577,7 @@ var __accessCheck$3 = (obj, member, msg) => {
2577
2577
  };
2578
2578
  var __privateGet$3 = (obj, member, getter) => {
2579
2579
  __accessCheck$3(obj, member, "read from private field");
2580
- return member.get(obj);
2580
+ return getter ? getter.call(obj) : member.get(obj);
2581
2581
  };
2582
2582
  var __privateAdd$3 = (obj, member, value) => {
2583
2583
  if (member.has(obj))
@@ -2651,7 +2651,7 @@ var __accessCheck$2 = (obj, member, msg) => {
2651
2651
  };
2652
2652
  var __privateGet$2 = (obj, member, getter) => {
2653
2653
  __accessCheck$2(obj, member, "read from private field");
2654
- return member.get(obj);
2654
+ return getter ? getter.call(obj) : member.get(obj);
2655
2655
  };
2656
2656
  var __privateAdd$2 = (obj, member, value) => {
2657
2657
  if (member.has(obj))
@@ -2753,16 +2753,7 @@ const authServiceFactory = backendPluginApi.createServiceFactory({
2753
2753
  // new auth services in the new backend system.
2754
2754
  tokenManager: backendPluginApi.coreServices.tokenManager
2755
2755
  },
2756
- async createRootContext({ config, logger }) {
2757
- const externalTokens = ExternalTokenHandler.create({
2758
- config,
2759
- logger
2760
- });
2761
- return {
2762
- externalTokens
2763
- };
2764
- },
2765
- async factory({ config, discovery, plugin, tokenManager, logger, database }, { externalTokens }) {
2756
+ async factory({ config, discovery, plugin, tokenManager, logger, database }) {
2766
2757
  const disableDefaultAuthPolicy = Boolean(
2767
2758
  config.getOptionalBoolean(
2768
2759
  "backend.auth.dangerouslyDisableDefaultAuthPolicy"
@@ -2777,11 +2768,15 @@ const authServiceFactory = backendPluginApi.createServiceFactory({
2777
2768
  });
2778
2769
  const pluginTokens = PluginTokenHandler.create({
2779
2770
  ownPluginId: plugin.getId(),
2780
- keyDuration: { hours: 1 },
2771
+ keyDurationSeconds: 60 * 60,
2781
2772
  logger,
2782
2773
  publicKeyStore,
2783
2774
  discovery
2784
2775
  });
2776
+ const externalTokens = ExternalTokenHandler.create({
2777
+ config,
2778
+ logger
2779
+ });
2785
2780
  return new DefaultAuthService(
2786
2781
  userTokens,
2787
2782
  pluginTokens,
@@ -2945,7 +2940,7 @@ var __accessCheck$1 = (obj, member, msg) => {
2945
2940
  };
2946
2941
  var __privateGet$1 = (obj, member, getter) => {
2947
2942
  __accessCheck$1(obj, member, "read from private field");
2948
- return member.get(obj);
2943
+ return getter ? getter.call(obj) : member.get(obj);
2949
2944
  };
2950
2945
  var __privateAdd$1 = (obj, member, value) => {
2951
2946
  if (member.has(obj))
@@ -2954,7 +2949,7 @@ var __privateAdd$1 = (obj, member, value) => {
2954
2949
  };
2955
2950
  var __privateSet$1 = (obj, member, value, setter) => {
2956
2951
  __accessCheck$1(obj, member, "write to private field");
2957
- member.set(obj, value);
2952
+ setter ? setter.call(obj, value) : member.set(obj, value);
2958
2953
  return value;
2959
2954
  };
2960
2955
  var __privateMethod$1 = (obj, member, method) => {
@@ -3386,7 +3381,7 @@ var __accessCheck = (obj, member, msg) => {
3386
3381
  };
3387
3382
  var __privateGet = (obj, member, getter) => {
3388
3383
  __accessCheck(obj, member, "read from private field");
3389
- return member.get(obj);
3384
+ return getter ? getter.call(obj) : member.get(obj);
3390
3385
  };
3391
3386
  var __privateAdd = (obj, member, value) => {
3392
3387
  if (member.has(obj))
@@ -3395,7 +3390,7 @@ var __privateAdd = (obj, member, value) => {
3395
3390
  };
3396
3391
  var __privateSet = (obj, member, value, setter) => {
3397
3392
  __accessCheck(obj, member, "write to private field");
3398
- member.set(obj, value);
3393
+ setter ? setter.call(obj, value) : member.set(obj, value);
3399
3394
  return value;
3400
3395
  };
3401
3396
  var __privateMethod = (obj, member, method) => {
@@ -3477,8 +3472,15 @@ findConflictingPath_fn = function(newPath) {
3477
3472
  };
3478
3473
  let DefaultRootHttpRouter = _DefaultRootHttpRouter;
3479
3474
 
3480
- function defaultConfigure({ applyDefaults }) {
3481
- applyDefaults();
3475
+ function defaultConfigure(context) {
3476
+ const { app, routes, middleware } = context;
3477
+ app.use(middleware.helmet());
3478
+ app.use(middleware.cors());
3479
+ app.use(middleware.compression());
3480
+ app.use(middleware.logging());
3481
+ app.use(routes);
3482
+ app.use(middleware.notFound());
3483
+ app.use(middleware.error());
3482
3484
  }
3483
3485
  const rootHttpRouterServiceFactory = backendPluginApi.createServiceFactory(
3484
3486
  (options) => ({
@@ -3494,30 +3496,19 @@ const rootHttpRouterServiceFactory = backendPluginApi.createServiceFactory(
3494
3496
  const app = express__default.default();
3495
3497
  const router = DefaultRootHttpRouter.create({ indexPath });
3496
3498
  const middleware = MiddlewareFactory.create({ config, logger });
3497
- const routes = router.handler();
3498
- const server = await createHttpServer(
3499
- app,
3500
- readHttpServerOptions(config.getOptionalConfig("backend")),
3501
- { logger }
3502
- );
3503
3499
  configure({
3504
3500
  app,
3505
- server,
3506
- routes,
3501
+ routes: router.handler(),
3507
3502
  middleware,
3508
3503
  config,
3509
3504
  logger,
3510
- lifecycle,
3511
- applyDefaults() {
3512
- app.use(middleware.helmet());
3513
- app.use(middleware.cors());
3514
- app.use(middleware.compression());
3515
- app.use(middleware.logging());
3516
- app.use(routes);
3517
- app.use(middleware.notFound());
3518
- app.use(middleware.error());
3519
- }
3505
+ lifecycle
3520
3506
  });
3507
+ const server = await createHttpServer(
3508
+ app,
3509
+ readHttpServerOptions(config.getOptionalConfig("backend")),
3510
+ { logger }
3511
+ );
3521
3512
  lifecycle.addShutdownHook(() => server.stop());
3522
3513
  await server.start();
3523
3514
  return router;
@@ -3571,8 +3562,7 @@ const tokenManagerServiceFactory = backendPluginApi.createServiceFactory({
3571
3562
  },
3572
3563
  createRootContext({ config, logger }) {
3573
3564
  return backendCommon.ServerTokenManager.fromConfig(config, {
3574
- logger,
3575
- allowDisabledTokenManager: true
3565
+ logger
3576
3566
  });
3577
3567
  },
3578
3568
  async factory(_deps, tokenManager) {