@backstage/backend-app-api 0.7.0 → 0.7.1-next.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.
- package/CHANGELOG.md +22 -0
- package/alpha/package.json +1 -1
- package/dist/index.cjs.js +80 -60
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @backstage/backend-app-api
|
|
2
2
|
|
|
3
|
+
## 0.7.1-next.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 4cd5ff0: Add ability to configure the Node.js HTTP Server when configuring the root HTTP Router service
|
|
8
|
+
- e8199b1: Move the JWKS registration outside of the lifecycle middleware
|
|
9
|
+
- 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.
|
|
10
|
+
- 025641b: Redact `meta` fields too with the logger
|
|
11
|
+
- 5863e02: Internal refactor to only create one external token handler
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
- @backstage/plugin-auth-node@0.4.13-next.0
|
|
14
|
+
- @backstage/backend-common@0.21.8-next.0
|
|
15
|
+
- @backstage/backend-plugin-api@0.6.18-next.0
|
|
16
|
+
- @backstage/backend-tasks@0.5.23-next.0
|
|
17
|
+
- @backstage/cli-common@0.1.13
|
|
18
|
+
- @backstage/cli-node@0.2.5
|
|
19
|
+
- @backstage/config@1.2.0
|
|
20
|
+
- @backstage/config-loader@1.8.0
|
|
21
|
+
- @backstage/errors@1.2.4
|
|
22
|
+
- @backstage/types@1.1.1
|
|
23
|
+
- @backstage/plugin-permission-node@0.7.29-next.0
|
|
24
|
+
|
|
3
25
|
## 0.7.0
|
|
4
26
|
|
|
5
27
|
### Minor Changes
|
package/alpha/package.json
CHANGED
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');
|
|
29
30
|
var backendAppApi = require('@backstage/backend-app-api');
|
|
30
31
|
var cookie = require('cookie');
|
|
31
32
|
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
|
|
621
|
+
return 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
|
-
|
|
630
|
+
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
|
|
814
|
+
return 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
|
-
|
|
823
|
+
member.set(obj, value);
|
|
824
824
|
return value;
|
|
825
825
|
};
|
|
826
826
|
var _winston, _addRedactions;
|
|
@@ -857,16 +857,21 @@ const _WinstonLogger = class _WinstonLogger {
|
|
|
857
857
|
static redacter() {
|
|
858
858
|
const redactionSet = /* @__PURE__ */ new Set();
|
|
859
859
|
let redactionPattern = void 0;
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
860
|
+
const replace = (obj) => {
|
|
861
|
+
var _a;
|
|
862
|
+
for (const key in obj) {
|
|
863
|
+
if (obj.hasOwnProperty(key)) {
|
|
864
|
+
if (typeof obj[key] === "object") {
|
|
865
|
+
obj[key] = replace(obj[key]);
|
|
866
|
+
} else if (typeof obj[key] === "string") {
|
|
867
|
+
obj[key] = (_a = obj[key]) == null ? void 0 : _a.replace(redactionPattern, "[REDACTED]");
|
|
868
|
+
}
|
|
867
869
|
}
|
|
868
|
-
|
|
869
|
-
|
|
870
|
+
}
|
|
871
|
+
return obj;
|
|
872
|
+
};
|
|
873
|
+
return {
|
|
874
|
+
format: winston.format(replace)(),
|
|
870
875
|
add(newRedactions) {
|
|
871
876
|
let added = 0;
|
|
872
877
|
for (const redactionToTrim of newRedactions) {
|
|
@@ -943,7 +948,7 @@ var __accessCheck$c = (obj, member, msg) => {
|
|
|
943
948
|
};
|
|
944
949
|
var __privateGet$a = (obj, member, getter) => {
|
|
945
950
|
__accessCheck$c(obj, member, "read from private field");
|
|
946
|
-
return
|
|
951
|
+
return member.get(obj);
|
|
947
952
|
};
|
|
948
953
|
var __privateAdd$c = (obj, member, value) => {
|
|
949
954
|
if (member.has(obj))
|
|
@@ -952,7 +957,7 @@ var __privateAdd$c = (obj, member, value) => {
|
|
|
952
957
|
};
|
|
953
958
|
var __privateSet$8 = (obj, member, value, setter) => {
|
|
954
959
|
__accessCheck$c(obj, member, "write to private field");
|
|
955
|
-
|
|
960
|
+
member.set(obj, value);
|
|
956
961
|
return value;
|
|
957
962
|
};
|
|
958
963
|
var _hasStarted$1, _startupTasks$1, _hasShutdown, _shutdownTasks;
|
|
@@ -1037,7 +1042,7 @@ var __accessCheck$b = (obj, member, msg) => {
|
|
|
1037
1042
|
};
|
|
1038
1043
|
var __privateGet$9 = (obj, member, getter) => {
|
|
1039
1044
|
__accessCheck$b(obj, member, "read from private field");
|
|
1040
|
-
return
|
|
1045
|
+
return member.get(obj);
|
|
1041
1046
|
};
|
|
1042
1047
|
var __privateAdd$b = (obj, member, value) => {
|
|
1043
1048
|
if (member.has(obj))
|
|
@@ -1046,7 +1051,7 @@ var __privateAdd$b = (obj, member, value) => {
|
|
|
1046
1051
|
};
|
|
1047
1052
|
var __privateSet$7 = (obj, member, value, setter) => {
|
|
1048
1053
|
__accessCheck$b(obj, member, "write to private field");
|
|
1049
|
-
|
|
1054
|
+
member.set(obj, value);
|
|
1050
1055
|
return value;
|
|
1051
1056
|
};
|
|
1052
1057
|
var _hasStarted, _startupTasks;
|
|
@@ -1117,7 +1122,7 @@ var __accessCheck$a = (obj, member, msg) => {
|
|
|
1117
1122
|
};
|
|
1118
1123
|
var __privateGet$8 = (obj, member, getter) => {
|
|
1119
1124
|
__accessCheck$a(obj, member, "read from private field");
|
|
1120
|
-
return
|
|
1125
|
+
return member.get(obj);
|
|
1121
1126
|
};
|
|
1122
1127
|
var __privateAdd$a = (obj, member, value) => {
|
|
1123
1128
|
if (member.has(obj))
|
|
@@ -1126,7 +1131,7 @@ var __privateAdd$a = (obj, member, value) => {
|
|
|
1126
1131
|
};
|
|
1127
1132
|
var __privateSet$6 = (obj, member, value, setter) => {
|
|
1128
1133
|
__accessCheck$a(obj, member, "write to private field");
|
|
1129
|
-
|
|
1134
|
+
member.set(obj, value);
|
|
1130
1135
|
return value;
|
|
1131
1136
|
};
|
|
1132
1137
|
var __privateMethod$7 = (obj, member, method) => {
|
|
@@ -1326,7 +1331,7 @@ var __accessCheck$9 = (obj, member, msg) => {
|
|
|
1326
1331
|
};
|
|
1327
1332
|
var __privateGet$7 = (obj, member, getter) => {
|
|
1328
1333
|
__accessCheck$9(obj, member, "read from private field");
|
|
1329
|
-
return
|
|
1334
|
+
return member.get(obj);
|
|
1330
1335
|
};
|
|
1331
1336
|
var __privateAdd$9 = (obj, member, value) => {
|
|
1332
1337
|
if (member.has(obj))
|
|
@@ -1335,7 +1340,7 @@ var __privateAdd$9 = (obj, member, value) => {
|
|
|
1335
1340
|
};
|
|
1336
1341
|
var __privateSet$5 = (obj, member, value, setter) => {
|
|
1337
1342
|
__accessCheck$9(obj, member, "write to private field");
|
|
1338
|
-
|
|
1343
|
+
member.set(obj, value);
|
|
1339
1344
|
return value;
|
|
1340
1345
|
};
|
|
1341
1346
|
var __privateMethod$6 = (obj, member, method) => {
|
|
@@ -1565,7 +1570,7 @@ var __accessCheck$8 = (obj, member, msg) => {
|
|
|
1565
1570
|
};
|
|
1566
1571
|
var __privateGet$6 = (obj, member, getter) => {
|
|
1567
1572
|
__accessCheck$8(obj, member, "read from private field");
|
|
1568
|
-
return
|
|
1573
|
+
return member.get(obj);
|
|
1569
1574
|
};
|
|
1570
1575
|
var __privateAdd$8 = (obj, member, value) => {
|
|
1571
1576
|
if (member.has(obj))
|
|
@@ -1574,7 +1579,7 @@ var __privateAdd$8 = (obj, member, value) => {
|
|
|
1574
1579
|
};
|
|
1575
1580
|
var __privateSet$4 = (obj, member, value, setter) => {
|
|
1576
1581
|
__accessCheck$8(obj, member, "write to private field");
|
|
1577
|
-
|
|
1582
|
+
member.set(obj, value);
|
|
1578
1583
|
return value;
|
|
1579
1584
|
};
|
|
1580
1585
|
var __privateMethod$5 = (obj, member, method) => {
|
|
@@ -1865,7 +1870,7 @@ var __accessCheck$7 = (obj, member, msg) => {
|
|
|
1865
1870
|
};
|
|
1866
1871
|
var __privateGet$5 = (obj, member, getter) => {
|
|
1867
1872
|
__accessCheck$7(obj, member, "read from private field");
|
|
1868
|
-
return
|
|
1873
|
+
return member.get(obj);
|
|
1869
1874
|
};
|
|
1870
1875
|
var __privateAdd$7 = (obj, member, value) => {
|
|
1871
1876
|
if (member.has(obj))
|
|
@@ -1874,7 +1879,7 @@ var __privateAdd$7 = (obj, member, value) => {
|
|
|
1874
1879
|
};
|
|
1875
1880
|
var __privateSet$3 = (obj, member, value, setter) => {
|
|
1876
1881
|
__accessCheck$7(obj, member, "write to private field");
|
|
1877
|
-
|
|
1882
|
+
member.set(obj, value);
|
|
1878
1883
|
return value;
|
|
1879
1884
|
};
|
|
1880
1885
|
var _initializer;
|
|
@@ -2142,7 +2147,12 @@ class DefaultAuthService {
|
|
|
2142
2147
|
targetPluginId
|
|
2143
2148
|
});
|
|
2144
2149
|
}
|
|
2145
|
-
return this.tokenManager.getToken()
|
|
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
|
+
});
|
|
2146
2156
|
case "user": {
|
|
2147
2157
|
const { token } = internalForward;
|
|
2148
2158
|
if (!token) {
|
|
@@ -2200,7 +2210,7 @@ var __accessCheck$5 = (obj, member, msg) => {
|
|
|
2200
2210
|
};
|
|
2201
2211
|
var __privateGet$4 = (obj, member, getter) => {
|
|
2202
2212
|
__accessCheck$5(obj, member, "read from private field");
|
|
2203
|
-
return
|
|
2213
|
+
return member.get(obj);
|
|
2204
2214
|
};
|
|
2205
2215
|
var __privateAdd$5 = (obj, member, value) => {
|
|
2206
2216
|
if (member.has(obj))
|
|
@@ -2209,7 +2219,7 @@ var __privateAdd$5 = (obj, member, value) => {
|
|
|
2209
2219
|
};
|
|
2210
2220
|
var __privateSet$2 = (obj, member, value, setter) => {
|
|
2211
2221
|
__accessCheck$5(obj, member, "write to private field");
|
|
2212
|
-
|
|
2222
|
+
member.set(obj, value);
|
|
2213
2223
|
return value;
|
|
2214
2224
|
};
|
|
2215
2225
|
var _keyStore, _keyStoreUpdated;
|
|
@@ -2287,7 +2297,7 @@ class PluginTokenHandler {
|
|
|
2287
2297
|
options.logger,
|
|
2288
2298
|
options.ownPluginId,
|
|
2289
2299
|
options.publicKeyStore,
|
|
2290
|
-
options.
|
|
2300
|
+
Math.round(types.durationToMilliseconds(options.keyDuration) / 1e3),
|
|
2291
2301
|
(_a = options.algorithm) != null ? _a : "ES256",
|
|
2292
2302
|
options.discovery
|
|
2293
2303
|
);
|
|
@@ -2572,7 +2582,7 @@ var __accessCheck$3 = (obj, member, msg) => {
|
|
|
2572
2582
|
};
|
|
2573
2583
|
var __privateGet$3 = (obj, member, getter) => {
|
|
2574
2584
|
__accessCheck$3(obj, member, "read from private field");
|
|
2575
|
-
return
|
|
2585
|
+
return member.get(obj);
|
|
2576
2586
|
};
|
|
2577
2587
|
var __privateAdd$3 = (obj, member, value) => {
|
|
2578
2588
|
if (member.has(obj))
|
|
@@ -2646,7 +2656,7 @@ var __accessCheck$2 = (obj, member, msg) => {
|
|
|
2646
2656
|
};
|
|
2647
2657
|
var __privateGet$2 = (obj, member, getter) => {
|
|
2648
2658
|
__accessCheck$2(obj, member, "read from private field");
|
|
2649
|
-
return
|
|
2659
|
+
return member.get(obj);
|
|
2650
2660
|
};
|
|
2651
2661
|
var __privateAdd$2 = (obj, member, value) => {
|
|
2652
2662
|
if (member.has(obj))
|
|
@@ -2748,7 +2758,16 @@ const authServiceFactory = backendPluginApi.createServiceFactory({
|
|
|
2748
2758
|
// new auth services in the new backend system.
|
|
2749
2759
|
tokenManager: backendPluginApi.coreServices.tokenManager
|
|
2750
2760
|
},
|
|
2751
|
-
async
|
|
2761
|
+
async createRootContext({ config, logger }) {
|
|
2762
|
+
const externalTokens = ExternalTokenHandler.create({
|
|
2763
|
+
config,
|
|
2764
|
+
logger
|
|
2765
|
+
});
|
|
2766
|
+
return {
|
|
2767
|
+
externalTokens
|
|
2768
|
+
};
|
|
2769
|
+
},
|
|
2770
|
+
async factory({ config, discovery, plugin, tokenManager, logger, database }, { externalTokens }) {
|
|
2752
2771
|
const disableDefaultAuthPolicy = Boolean(
|
|
2753
2772
|
config.getOptionalBoolean(
|
|
2754
2773
|
"backend.auth.dangerouslyDisableDefaultAuthPolicy"
|
|
@@ -2763,15 +2782,11 @@ const authServiceFactory = backendPluginApi.createServiceFactory({
|
|
|
2763
2782
|
});
|
|
2764
2783
|
const pluginTokens = PluginTokenHandler.create({
|
|
2765
2784
|
ownPluginId: plugin.getId(),
|
|
2766
|
-
|
|
2785
|
+
keyDuration: { hours: 1 },
|
|
2767
2786
|
logger,
|
|
2768
2787
|
publicKeyStore,
|
|
2769
2788
|
discovery
|
|
2770
2789
|
});
|
|
2771
|
-
const externalTokens = ExternalTokenHandler.create({
|
|
2772
|
-
config,
|
|
2773
|
-
logger
|
|
2774
|
-
});
|
|
2775
2790
|
return new DefaultAuthService(
|
|
2776
2791
|
userTokens,
|
|
2777
2792
|
pluginTokens,
|
|
@@ -2935,7 +2950,7 @@ var __accessCheck$1 = (obj, member, msg) => {
|
|
|
2935
2950
|
};
|
|
2936
2951
|
var __privateGet$1 = (obj, member, getter) => {
|
|
2937
2952
|
__accessCheck$1(obj, member, "read from private field");
|
|
2938
|
-
return
|
|
2953
|
+
return member.get(obj);
|
|
2939
2954
|
};
|
|
2940
2955
|
var __privateAdd$1 = (obj, member, value) => {
|
|
2941
2956
|
if (member.has(obj))
|
|
@@ -2944,7 +2959,7 @@ var __privateAdd$1 = (obj, member, value) => {
|
|
|
2944
2959
|
};
|
|
2945
2960
|
var __privateSet$1 = (obj, member, value, setter) => {
|
|
2946
2961
|
__accessCheck$1(obj, member, "write to private field");
|
|
2947
|
-
|
|
2962
|
+
member.set(obj, value);
|
|
2948
2963
|
return value;
|
|
2949
2964
|
};
|
|
2950
2965
|
var __privateMethod$1 = (obj, member, method) => {
|
|
@@ -3314,8 +3329,8 @@ const httpRouterServiceFactory = backendPluginApi.createServiceFactory(
|
|
|
3314
3329
|
httpAuth,
|
|
3315
3330
|
config
|
|
3316
3331
|
});
|
|
3317
|
-
router.use(createLifecycleMiddleware({ lifecycle }));
|
|
3318
3332
|
router.use(createAuthIntegrationRouter({ auth }));
|
|
3333
|
+
router.use(createLifecycleMiddleware({ lifecycle }));
|
|
3319
3334
|
router.use(credentialsBarrier.middleware);
|
|
3320
3335
|
router.use(createCookieAuthRefreshMiddleware({ auth, httpAuth }));
|
|
3321
3336
|
return {
|
|
@@ -3376,7 +3391,7 @@ var __accessCheck = (obj, member, msg) => {
|
|
|
3376
3391
|
};
|
|
3377
3392
|
var __privateGet = (obj, member, getter) => {
|
|
3378
3393
|
__accessCheck(obj, member, "read from private field");
|
|
3379
|
-
return
|
|
3394
|
+
return member.get(obj);
|
|
3380
3395
|
};
|
|
3381
3396
|
var __privateAdd = (obj, member, value) => {
|
|
3382
3397
|
if (member.has(obj))
|
|
@@ -3385,7 +3400,7 @@ var __privateAdd = (obj, member, value) => {
|
|
|
3385
3400
|
};
|
|
3386
3401
|
var __privateSet = (obj, member, value, setter) => {
|
|
3387
3402
|
__accessCheck(obj, member, "write to private field");
|
|
3388
|
-
|
|
3403
|
+
member.set(obj, value);
|
|
3389
3404
|
return value;
|
|
3390
3405
|
};
|
|
3391
3406
|
var __privateMethod = (obj, member, method) => {
|
|
@@ -3467,15 +3482,8 @@ findConflictingPath_fn = function(newPath) {
|
|
|
3467
3482
|
};
|
|
3468
3483
|
let DefaultRootHttpRouter = _DefaultRootHttpRouter;
|
|
3469
3484
|
|
|
3470
|
-
function defaultConfigure(
|
|
3471
|
-
|
|
3472
|
-
app.use(middleware.helmet());
|
|
3473
|
-
app.use(middleware.cors());
|
|
3474
|
-
app.use(middleware.compression());
|
|
3475
|
-
app.use(middleware.logging());
|
|
3476
|
-
app.use(routes);
|
|
3477
|
-
app.use(middleware.notFound());
|
|
3478
|
-
app.use(middleware.error());
|
|
3485
|
+
function defaultConfigure({ applyDefaults }) {
|
|
3486
|
+
applyDefaults();
|
|
3479
3487
|
}
|
|
3480
3488
|
const rootHttpRouterServiceFactory = backendPluginApi.createServiceFactory(
|
|
3481
3489
|
(options) => ({
|
|
@@ -3491,19 +3499,30 @@ const rootHttpRouterServiceFactory = backendPluginApi.createServiceFactory(
|
|
|
3491
3499
|
const app = express__default.default();
|
|
3492
3500
|
const router = DefaultRootHttpRouter.create({ indexPath });
|
|
3493
3501
|
const middleware = MiddlewareFactory.create({ config, logger });
|
|
3502
|
+
const routes = router.handler();
|
|
3503
|
+
const server = await createHttpServer(
|
|
3504
|
+
app,
|
|
3505
|
+
readHttpServerOptions(config.getOptionalConfig("backend")),
|
|
3506
|
+
{ logger }
|
|
3507
|
+
);
|
|
3494
3508
|
configure({
|
|
3495
3509
|
app,
|
|
3496
|
-
|
|
3510
|
+
server,
|
|
3511
|
+
routes,
|
|
3497
3512
|
middleware,
|
|
3498
3513
|
config,
|
|
3499
3514
|
logger,
|
|
3500
|
-
lifecycle
|
|
3515
|
+
lifecycle,
|
|
3516
|
+
applyDefaults() {
|
|
3517
|
+
app.use(middleware.helmet());
|
|
3518
|
+
app.use(middleware.cors());
|
|
3519
|
+
app.use(middleware.compression());
|
|
3520
|
+
app.use(middleware.logging());
|
|
3521
|
+
app.use(routes);
|
|
3522
|
+
app.use(middleware.notFound());
|
|
3523
|
+
app.use(middleware.error());
|
|
3524
|
+
}
|
|
3501
3525
|
});
|
|
3502
|
-
const server = await createHttpServer(
|
|
3503
|
-
app,
|
|
3504
|
-
readHttpServerOptions(config.getOptionalConfig("backend")),
|
|
3505
|
-
{ logger }
|
|
3506
|
-
);
|
|
3507
3526
|
lifecycle.addShutdownHook(() => server.stop());
|
|
3508
3527
|
await server.start();
|
|
3509
3528
|
return router;
|
|
@@ -3557,7 +3576,8 @@ const tokenManagerServiceFactory = backendPluginApi.createServiceFactory({
|
|
|
3557
3576
|
},
|
|
3558
3577
|
createRootContext({ config, logger }) {
|
|
3559
3578
|
return backendCommon.ServerTokenManager.fromConfig(config, {
|
|
3560
|
-
logger
|
|
3579
|
+
logger,
|
|
3580
|
+
allowDisabledTokenManager: true
|
|
3561
3581
|
});
|
|
3562
3582
|
},
|
|
3563
3583
|
async factory(_deps, tokenManager) {
|