@backstage/backend-app-api 0.2.1-next.1 → 0.2.1-next.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.
Potentially problematic release.
This version of @backstage/backend-app-api might be problematic. Click here for more details.
- package/CHANGELOG.md +13 -0
- package/alpha/package.json +1 -1
- package/dist/index.alpha.d.ts +11 -11
- package/dist/index.beta.d.ts +11 -11
- package/dist/index.cjs.js +181 -130
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +11 -11
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @backstage/backend-app-api
|
|
2
2
|
|
|
3
|
+
## 0.2.1-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 854ba37357: Updated to support new `ServiceFactory` formats.
|
|
8
|
+
- 409ed984e8: Updated service implementations and backend wiring to support scoped service.
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
- @backstage/backend-plugin-api@0.1.2-next.2
|
|
11
|
+
- @backstage/errors@1.1.1-next.0
|
|
12
|
+
- @backstage/backend-common@0.15.1-next.3
|
|
13
|
+
- @backstage/backend-tasks@0.3.5-next.1
|
|
14
|
+
- @backstage/plugin-permission-node@0.6.5-next.3
|
|
15
|
+
|
|
3
16
|
## 0.2.1-next.1
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/dist/index.alpha.d.ts
CHANGED
|
@@ -29,10 +29,10 @@ export declare interface Backend {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/** @public */
|
|
32
|
-
export declare const cacheFactory: ServiceFactory<PluginCacheManager>;
|
|
32
|
+
export declare const cacheFactory: (options?: undefined) => ServiceFactory<PluginCacheManager>;
|
|
33
33
|
|
|
34
34
|
/** @public */
|
|
35
|
-
export declare const configFactory: ServiceFactory<Config>;
|
|
35
|
+
export declare const configFactory: (options?: undefined) => ServiceFactory<Config>;
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* @public
|
|
@@ -43,26 +43,26 @@ export declare function createSpecializedBackend(options: CreateSpecializedBacke
|
|
|
43
43
|
* @public
|
|
44
44
|
*/
|
|
45
45
|
export declare interface CreateSpecializedBackendOptions {
|
|
46
|
-
services: ServiceFactory[];
|
|
46
|
+
services: (ServiceFactory | (() => ServiceFactory))[];
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/** @public */
|
|
50
|
-
export declare const databaseFactory: ServiceFactory<PluginDatabaseManager>;
|
|
50
|
+
export declare const databaseFactory: (options?: undefined) => ServiceFactory<PluginDatabaseManager>;
|
|
51
51
|
|
|
52
52
|
/** @public */
|
|
53
|
-
export declare const discoveryFactory: ServiceFactory<PluginEndpointDiscovery>;
|
|
53
|
+
export declare const discoveryFactory: (options?: undefined) => ServiceFactory<PluginEndpointDiscovery>;
|
|
54
54
|
|
|
55
55
|
/** @public */
|
|
56
|
-
export declare const httpRouterFactory: ServiceFactory<HttpRouterService>;
|
|
56
|
+
export declare const httpRouterFactory: (options?: undefined) => ServiceFactory<HttpRouterService>;
|
|
57
57
|
|
|
58
58
|
/** @public */
|
|
59
|
-
export declare const loggerFactory: ServiceFactory<Logger>;
|
|
59
|
+
export declare const loggerFactory: (options?: undefined) => ServiceFactory<Logger>;
|
|
60
60
|
|
|
61
61
|
/** @public */
|
|
62
|
-
export declare const permissionsFactory: ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
62
|
+
export declare const permissionsFactory: (options?: undefined) => ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
63
63
|
|
|
64
64
|
/** @public */
|
|
65
|
-
export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
65
|
+
export declare const schedulerFactory: (options?: undefined) => ServiceFactory<PluginTaskScheduler>;
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
68
|
* @public
|
|
@@ -70,9 +70,9 @@ export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
|
70
70
|
export declare type ServiceOrExtensionPoint<T = unknown> = ExtensionPoint<T> | ServiceRef<T>;
|
|
71
71
|
|
|
72
72
|
/** @public */
|
|
73
|
-
export declare const tokenManagerFactory: ServiceFactory<TokenManager>;
|
|
73
|
+
export declare const tokenManagerFactory: (options?: undefined) => ServiceFactory<TokenManager>;
|
|
74
74
|
|
|
75
75
|
/** @public */
|
|
76
|
-
export declare const urlReaderFactory: ServiceFactory<UrlReader>;
|
|
76
|
+
export declare const urlReaderFactory: (options?: undefined) => ServiceFactory<UrlReader>;
|
|
77
77
|
|
|
78
78
|
export { }
|
package/dist/index.beta.d.ts
CHANGED
|
@@ -29,10 +29,10 @@ export declare interface Backend {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/** @public */
|
|
32
|
-
export declare const cacheFactory: ServiceFactory<PluginCacheManager>;
|
|
32
|
+
export declare const cacheFactory: (options?: undefined) => ServiceFactory<PluginCacheManager>;
|
|
33
33
|
|
|
34
34
|
/** @public */
|
|
35
|
-
export declare const configFactory: ServiceFactory<Config>;
|
|
35
|
+
export declare const configFactory: (options?: undefined) => ServiceFactory<Config>;
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* @public
|
|
@@ -43,26 +43,26 @@ export declare function createSpecializedBackend(options: CreateSpecializedBacke
|
|
|
43
43
|
* @public
|
|
44
44
|
*/
|
|
45
45
|
export declare interface CreateSpecializedBackendOptions {
|
|
46
|
-
services: ServiceFactory[];
|
|
46
|
+
services: (ServiceFactory | (() => ServiceFactory))[];
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/** @public */
|
|
50
|
-
export declare const databaseFactory: ServiceFactory<PluginDatabaseManager>;
|
|
50
|
+
export declare const databaseFactory: (options?: undefined) => ServiceFactory<PluginDatabaseManager>;
|
|
51
51
|
|
|
52
52
|
/** @public */
|
|
53
|
-
export declare const discoveryFactory: ServiceFactory<PluginEndpointDiscovery>;
|
|
53
|
+
export declare const discoveryFactory: (options?: undefined) => ServiceFactory<PluginEndpointDiscovery>;
|
|
54
54
|
|
|
55
55
|
/** @public */
|
|
56
|
-
export declare const httpRouterFactory: ServiceFactory<HttpRouterService>;
|
|
56
|
+
export declare const httpRouterFactory: (options?: undefined) => ServiceFactory<HttpRouterService>;
|
|
57
57
|
|
|
58
58
|
/** @public */
|
|
59
|
-
export declare const loggerFactory: ServiceFactory<Logger>;
|
|
59
|
+
export declare const loggerFactory: (options?: undefined) => ServiceFactory<Logger>;
|
|
60
60
|
|
|
61
61
|
/** @public */
|
|
62
|
-
export declare const permissionsFactory: ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
62
|
+
export declare const permissionsFactory: (options?: undefined) => ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
63
63
|
|
|
64
64
|
/** @public */
|
|
65
|
-
export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
65
|
+
export declare const schedulerFactory: (options?: undefined) => ServiceFactory<PluginTaskScheduler>;
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
68
|
* @public
|
|
@@ -70,9 +70,9 @@ export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
|
70
70
|
export declare type ServiceOrExtensionPoint<T = unknown> = ExtensionPoint<T> | ServiceRef<T>;
|
|
71
71
|
|
|
72
72
|
/** @public */
|
|
73
|
-
export declare const tokenManagerFactory: ServiceFactory<TokenManager>;
|
|
73
|
+
export declare const tokenManagerFactory: (options?: undefined) => ServiceFactory<TokenManager>;
|
|
74
74
|
|
|
75
75
|
/** @public */
|
|
76
|
-
export declare const urlReaderFactory: ServiceFactory<UrlReader>;
|
|
76
|
+
export declare const urlReaderFactory: (options?: undefined) => ServiceFactory<UrlReader>;
|
|
77
77
|
|
|
78
78
|
export { }
|
package/dist/index.cjs.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
5
6
|
var errors = require('@backstage/errors');
|
|
6
7
|
var backendCommon = require('@backstage/backend-common');
|
|
7
|
-
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
8
8
|
var pluginPermissionNode = require('@backstage/plugin-permission-node');
|
|
9
9
|
var backendTasks = require('@backstage/backend-tasks');
|
|
10
10
|
var Router = require('express-promise-router');
|
|
@@ -31,7 +31,7 @@ var __privateSet$2 = (obj, member, value, setter) => {
|
|
|
31
31
|
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
32
32
|
return value;
|
|
33
33
|
};
|
|
34
|
-
var __privateMethod = (obj, member, method) => {
|
|
34
|
+
var __privateMethod$1 = (obj, member, method) => {
|
|
35
35
|
__accessCheck$2(obj, member, "access private method");
|
|
36
36
|
return method;
|
|
37
37
|
};
|
|
@@ -92,9 +92,9 @@ class BackendInitializer {
|
|
|
92
92
|
}
|
|
93
93
|
__privateGet$2(this, _registerInits).push(registerInit);
|
|
94
94
|
}
|
|
95
|
-
const orderedRegisterResults = __privateMethod(this, _resolveInitOrder, resolveInitOrder_fn).call(this, __privateGet$2(this, _registerInits));
|
|
95
|
+
const orderedRegisterResults = __privateMethod$1(this, _resolveInitOrder, resolveInitOrder_fn).call(this, __privateGet$2(this, _registerInits));
|
|
96
96
|
for (const registerInit of orderedRegisterResults) {
|
|
97
|
-
const deps = await __privateMethod(this, _getInitDeps, getInitDeps_fn).call(this, registerInit.deps, registerInit.id);
|
|
97
|
+
const deps = await __privateMethod$1(this, _getInitDeps, getInitDeps_fn).call(this, registerInit.deps, registerInit.id);
|
|
98
98
|
await registerInit.init(deps);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -115,11 +115,12 @@ getInitDeps_fn = async function(deps, pluginId) {
|
|
|
115
115
|
if (extensionPoint) {
|
|
116
116
|
result.set(name, extensionPoint);
|
|
117
117
|
} else {
|
|
118
|
-
const
|
|
119
|
-
ref
|
|
118
|
+
const impl = await __privateGet$2(this, _serviceHolder).get(
|
|
119
|
+
ref,
|
|
120
|
+
pluginId
|
|
120
121
|
);
|
|
121
|
-
if (
|
|
122
|
-
result.set(name,
|
|
122
|
+
if (impl) {
|
|
123
|
+
result.set(name, impl);
|
|
123
124
|
} else {
|
|
124
125
|
missingRefs.add(ref);
|
|
125
126
|
}
|
|
@@ -176,63 +177,70 @@ var __privateSet$1 = (obj, member, value, setter) => {
|
|
|
176
177
|
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
177
178
|
return value;
|
|
178
179
|
};
|
|
179
|
-
var
|
|
180
|
+
var __privateMethod = (obj, member, method) => {
|
|
181
|
+
__accessCheck$1(obj, member, "access private method");
|
|
182
|
+
return method;
|
|
183
|
+
};
|
|
184
|
+
var _providedFactories, _loadedDefaultFactories, _implementations, _resolveFactory, resolveFactory_fn, _separateMapForTheRootService, _checkForMissingDeps, checkForMissingDeps_fn;
|
|
180
185
|
class ServiceRegistry {
|
|
181
186
|
constructor(factories) {
|
|
187
|
+
__privateAdd$1(this, _resolveFactory);
|
|
188
|
+
__privateAdd$1(this, _checkForMissingDeps);
|
|
182
189
|
__privateAdd$1(this, _providedFactories, void 0);
|
|
183
190
|
__privateAdd$1(this, _loadedDefaultFactories, void 0);
|
|
184
191
|
__privateAdd$1(this, _implementations, void 0);
|
|
185
|
-
|
|
192
|
+
__privateAdd$1(this, _separateMapForTheRootService, /* @__PURE__ */ new Map());
|
|
193
|
+
__privateSet$1(this, _providedFactories, new Map(
|
|
194
|
+
factories.map((f) => {
|
|
195
|
+
if (typeof f === "function") {
|
|
196
|
+
const cf = f();
|
|
197
|
+
return [cf.service.id, cf];
|
|
198
|
+
}
|
|
199
|
+
return [f.service.id, f];
|
|
200
|
+
})
|
|
201
|
+
));
|
|
186
202
|
__privateSet$1(this, _loadedDefaultFactories, /* @__PURE__ */ new Map());
|
|
187
203
|
__privateSet$1(this, _implementations, /* @__PURE__ */ new Map());
|
|
188
204
|
}
|
|
189
|
-
get(ref) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
205
|
+
get(ref, pluginId) {
|
|
206
|
+
var _a;
|
|
207
|
+
return (_a = __privateMethod(this, _resolveFactory, resolveFactory_fn).call(this, ref, pluginId)) == null ? void 0 : _a.then((factory) => {
|
|
208
|
+
if (factory.scope === "root") {
|
|
209
|
+
let existing = __privateGet$1(this, _separateMapForTheRootService).get(factory);
|
|
210
|
+
if (!existing) {
|
|
211
|
+
__privateMethod(this, _checkForMissingDeps, checkForMissingDeps_fn).call(this, factory, pluginId);
|
|
212
|
+
const rootDeps = new Array();
|
|
213
|
+
for (const [name, serviceRef] of Object.entries(factory.deps)) {
|
|
214
|
+
if (serviceRef.scope !== "root") {
|
|
215
|
+
throw new Error(
|
|
216
|
+
`Failed to instantiate 'root' scoped service '${ref.id}' because it depends on '${serviceRef.scope}' scoped service '${serviceRef.id}'.`
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
const target = this.get(serviceRef, pluginId);
|
|
220
|
+
rootDeps.push(target.then((impl) => [name, impl]));
|
|
221
|
+
}
|
|
222
|
+
existing = Promise.all(rootDeps).then(
|
|
223
|
+
(entries) => factory.factory(Object.fromEntries(entries))
|
|
201
224
|
);
|
|
202
|
-
__privateGet$1(this,
|
|
225
|
+
__privateGet$1(this, _separateMapForTheRootService).set(factory, existing);
|
|
203
226
|
}
|
|
204
|
-
|
|
205
|
-
throw new Error(
|
|
206
|
-
`Failed to instantiate service '${ref.id}' because the default factory loader threw an error, ${errors.stringifyError(
|
|
207
|
-
error
|
|
208
|
-
)}`
|
|
209
|
-
);
|
|
210
|
-
});
|
|
227
|
+
return existing;
|
|
211
228
|
}
|
|
212
229
|
let implementation = __privateGet$1(this, _implementations).get(factory);
|
|
213
230
|
if (!implementation) {
|
|
214
|
-
|
|
215
|
-
const
|
|
231
|
+
__privateMethod(this, _checkForMissingDeps, checkForMissingDeps_fn).call(this, factory, pluginId);
|
|
232
|
+
const rootDeps = new Array();
|
|
216
233
|
for (const [name, serviceRef] of Object.entries(factory.deps)) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
} else {
|
|
221
|
-
factoryDeps[name] = target;
|
|
234
|
+
if (serviceRef.scope === "root") {
|
|
235
|
+
const target = this.get(serviceRef, pluginId);
|
|
236
|
+
rootDeps.push(target.then((impl) => [name, impl]));
|
|
222
237
|
}
|
|
223
238
|
}
|
|
224
|
-
if (missingRefs.length) {
|
|
225
|
-
const missing = missingRefs.map((r) => `'${r.id}'`).join(", ");
|
|
226
|
-
throw new Error(
|
|
227
|
-
`Failed to instantiate service '${ref.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`
|
|
228
|
-
);
|
|
229
|
-
}
|
|
230
239
|
implementation = {
|
|
231
|
-
factoryFunc: Promise.
|
|
240
|
+
factoryFunc: Promise.all(rootDeps).then((entries) => factory.factory(Object.fromEntries(entries))).catch((error) => {
|
|
241
|
+
const cause = errors.stringifyError(error);
|
|
232
242
|
throw new Error(
|
|
233
|
-
`Failed to instantiate service '${ref.id}' because the top-level factory function threw an error, ${
|
|
234
|
-
error
|
|
235
|
-
)}`
|
|
243
|
+
`Failed to instantiate service '${ref.id}' because the top-level factory function threw an error, ${cause}`
|
|
236
244
|
);
|
|
237
245
|
}),
|
|
238
246
|
byPlugin: /* @__PURE__ */ new Map()
|
|
@@ -241,24 +249,86 @@ class ServiceRegistry {
|
|
|
241
249
|
}
|
|
242
250
|
let result = implementation.byPlugin.get(pluginId);
|
|
243
251
|
if (!result) {
|
|
252
|
+
const allDeps = new Array();
|
|
253
|
+
for (const [name, serviceRef] of Object.entries(factory.deps)) {
|
|
254
|
+
const target = this.get(serviceRef, pluginId);
|
|
255
|
+
allDeps.push(target.then((impl) => [name, impl]));
|
|
256
|
+
}
|
|
244
257
|
result = implementation.factoryFunc.then(
|
|
245
|
-
(func) => Promise.
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
258
|
+
(func) => Promise.all(allDeps).then(
|
|
259
|
+
(entries) => func(Object.fromEntries(entries))
|
|
260
|
+
)
|
|
261
|
+
).catch((error) => {
|
|
262
|
+
const cause = errors.stringifyError(error);
|
|
263
|
+
throw new Error(
|
|
264
|
+
`Failed to instantiate service '${ref.id}' for '${pluginId}' because the factory function threw an error, ${cause}`
|
|
265
|
+
);
|
|
266
|
+
});
|
|
253
267
|
implementation.byPlugin.set(pluginId, result);
|
|
254
268
|
}
|
|
255
269
|
return result;
|
|
256
|
-
};
|
|
270
|
+
});
|
|
257
271
|
}
|
|
258
272
|
}
|
|
259
273
|
_providedFactories = new WeakMap();
|
|
260
274
|
_loadedDefaultFactories = new WeakMap();
|
|
261
275
|
_implementations = new WeakMap();
|
|
276
|
+
_resolveFactory = new WeakSet();
|
|
277
|
+
resolveFactory_fn = function(ref, pluginId) {
|
|
278
|
+
if (ref.id === backendPluginApi.pluginMetadataServiceRef.id) {
|
|
279
|
+
return Promise.resolve({
|
|
280
|
+
scope: "plugin",
|
|
281
|
+
service: backendPluginApi.pluginMetadataServiceRef,
|
|
282
|
+
deps: {},
|
|
283
|
+
factory: async () => async () => ({
|
|
284
|
+
getId() {
|
|
285
|
+
return pluginId;
|
|
286
|
+
}
|
|
287
|
+
})
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
let resolvedFactory = __privateGet$1(this, _providedFactories).get(ref.id);
|
|
291
|
+
const { __defaultFactory: defaultFactory } = ref;
|
|
292
|
+
if (!resolvedFactory && !defaultFactory) {
|
|
293
|
+
return void 0;
|
|
294
|
+
}
|
|
295
|
+
if (!resolvedFactory) {
|
|
296
|
+
let loadedFactory = __privateGet$1(this, _loadedDefaultFactories).get(defaultFactory);
|
|
297
|
+
if (!loadedFactory) {
|
|
298
|
+
loadedFactory = Promise.resolve().then(() => defaultFactory(ref)).then(
|
|
299
|
+
(f) => typeof f === "function" ? f() : f
|
|
300
|
+
);
|
|
301
|
+
__privateGet$1(this, _loadedDefaultFactories).set(defaultFactory, loadedFactory);
|
|
302
|
+
}
|
|
303
|
+
resolvedFactory = loadedFactory.catch((error) => {
|
|
304
|
+
throw new Error(
|
|
305
|
+
`Failed to instantiate service '${ref.id}' because the default factory loader threw an error, ${errors.stringifyError(
|
|
306
|
+
error
|
|
307
|
+
)}`
|
|
308
|
+
);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
return Promise.resolve(resolvedFactory);
|
|
312
|
+
};
|
|
313
|
+
_separateMapForTheRootService = new WeakMap();
|
|
314
|
+
_checkForMissingDeps = new WeakSet();
|
|
315
|
+
checkForMissingDeps_fn = function(factory, pluginId) {
|
|
316
|
+
const missingDeps = Object.values(factory.deps).filter((ref) => {
|
|
317
|
+
if (ref.id === backendPluginApi.pluginMetadataServiceRef.id) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
if (__privateGet$1(this, _providedFactories).get(ref.id)) {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
return !ref.__defaultFactory;
|
|
324
|
+
});
|
|
325
|
+
if (missingDeps.length) {
|
|
326
|
+
const missing = missingDeps.map((r) => `'${r.id}'`).join(", ");
|
|
327
|
+
throw new Error(
|
|
328
|
+
`Failed to instantiate service '${factory.service.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
262
332
|
|
|
263
333
|
var __accessCheck = (obj, member, msg) => {
|
|
264
334
|
if (!member.has(obj))
|
|
@@ -297,19 +367,21 @@ _services = new WeakMap();
|
|
|
297
367
|
_initializer = new WeakMap();
|
|
298
368
|
|
|
299
369
|
function createSpecializedBackend(options) {
|
|
300
|
-
return new BackstageBackend(
|
|
370
|
+
return new BackstageBackend(
|
|
371
|
+
options.services.map((s) => typeof s === "function" ? s() : s)
|
|
372
|
+
);
|
|
301
373
|
}
|
|
302
374
|
|
|
303
375
|
const cacheFactory = backendPluginApi.createServiceFactory({
|
|
304
376
|
service: backendPluginApi.cacheServiceRef,
|
|
305
377
|
deps: {
|
|
306
|
-
|
|
378
|
+
config: backendPluginApi.configServiceRef,
|
|
379
|
+
plugin: backendPluginApi.pluginMetadataServiceRef
|
|
307
380
|
},
|
|
308
|
-
|
|
309
|
-
const config = await configFactory("root");
|
|
381
|
+
async factory({ config }) {
|
|
310
382
|
const cacheManager = backendCommon.CacheManager.fromConfig(config);
|
|
311
|
-
return async (
|
|
312
|
-
return cacheManager.forPlugin(
|
|
383
|
+
return async ({ plugin }) => {
|
|
384
|
+
return cacheManager.forPlugin(plugin.getId());
|
|
313
385
|
};
|
|
314
386
|
}
|
|
315
387
|
});
|
|
@@ -317,30 +389,27 @@ const cacheFactory = backendPluginApi.createServiceFactory({
|
|
|
317
389
|
const configFactory = backendPluginApi.createServiceFactory({
|
|
318
390
|
service: backendPluginApi.configServiceRef,
|
|
319
391
|
deps: {
|
|
320
|
-
|
|
392
|
+
logger: backendPluginApi.rootLoggerServiceRef
|
|
321
393
|
},
|
|
322
|
-
|
|
323
|
-
const logger = await loggerFactory("root");
|
|
394
|
+
async factory({ logger }) {
|
|
324
395
|
const config = await backendCommon.loadBackendConfig({
|
|
325
396
|
argv: process.argv,
|
|
326
397
|
logger: backendPluginApi.loggerToWinstonLogger(logger)
|
|
327
398
|
});
|
|
328
|
-
return
|
|
329
|
-
return config;
|
|
330
|
-
};
|
|
399
|
+
return config;
|
|
331
400
|
}
|
|
332
401
|
});
|
|
333
402
|
|
|
334
403
|
const databaseFactory = backendPluginApi.createServiceFactory({
|
|
335
404
|
service: backendPluginApi.databaseServiceRef,
|
|
336
405
|
deps: {
|
|
337
|
-
|
|
406
|
+
config: backendPluginApi.configServiceRef,
|
|
407
|
+
plugin: backendPluginApi.pluginMetadataServiceRef
|
|
338
408
|
},
|
|
339
|
-
|
|
340
|
-
const config = await configFactory("root");
|
|
409
|
+
async factory({ config }) {
|
|
341
410
|
const databaseManager = backendCommon.DatabaseManager.fromConfig(config);
|
|
342
|
-
return async (
|
|
343
|
-
return databaseManager.forPlugin(
|
|
411
|
+
return async ({ plugin }) => {
|
|
412
|
+
return databaseManager.forPlugin(plugin.getId());
|
|
344
413
|
};
|
|
345
414
|
}
|
|
346
415
|
});
|
|
@@ -348,10 +417,9 @@ const databaseFactory = backendPluginApi.createServiceFactory({
|
|
|
348
417
|
const discoveryFactory = backendPluginApi.createServiceFactory({
|
|
349
418
|
service: backendPluginApi.discoveryServiceRef,
|
|
350
419
|
deps: {
|
|
351
|
-
|
|
420
|
+
config: backendPluginApi.configServiceRef
|
|
352
421
|
},
|
|
353
|
-
|
|
354
|
-
const config = await configFactory("root");
|
|
422
|
+
async factory({ config }) {
|
|
355
423
|
const discovery = backendCommon.SingleHostDiscovery.fromConfig(config);
|
|
356
424
|
return async () => {
|
|
357
425
|
return discovery;
|
|
@@ -359,27 +427,15 @@ const discoveryFactory = backendPluginApi.createServiceFactory({
|
|
|
359
427
|
}
|
|
360
428
|
});
|
|
361
429
|
|
|
362
|
-
class BackstageLogger {
|
|
363
|
-
constructor(winston) {
|
|
364
|
-
this.winston = winston;
|
|
365
|
-
}
|
|
366
|
-
static fromWinston(logger) {
|
|
367
|
-
return new BackstageLogger(logger);
|
|
368
|
-
}
|
|
369
|
-
info(message, ...meta) {
|
|
370
|
-
this.winston.info(message, ...meta);
|
|
371
|
-
}
|
|
372
|
-
child(fields) {
|
|
373
|
-
return new BackstageLogger(this.winston.child(fields));
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
430
|
const loggerFactory = backendPluginApi.createServiceFactory({
|
|
377
431
|
service: backendPluginApi.loggerServiceRef,
|
|
378
|
-
deps: {
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
432
|
+
deps: {
|
|
433
|
+
rootLogger: backendPluginApi.rootLoggerServiceRef,
|
|
434
|
+
plugin: backendPluginApi.pluginMetadataServiceRef
|
|
435
|
+
},
|
|
436
|
+
async factory({ rootLogger }) {
|
|
437
|
+
return async ({ plugin }) => {
|
|
438
|
+
return rootLogger.child({ pluginId: plugin.getId() });
|
|
383
439
|
};
|
|
384
440
|
}
|
|
385
441
|
});
|
|
@@ -387,20 +443,16 @@ const loggerFactory = backendPluginApi.createServiceFactory({
|
|
|
387
443
|
const permissionsFactory = backendPluginApi.createServiceFactory({
|
|
388
444
|
service: backendPluginApi.permissionsServiceRef,
|
|
389
445
|
deps: {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
446
|
+
config: backendPluginApi.configServiceRef,
|
|
447
|
+
discovery: backendPluginApi.discoveryServiceRef,
|
|
448
|
+
tokenManager: backendPluginApi.tokenManagerServiceRef
|
|
393
449
|
},
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
tokenManager
|
|
401
|
-
});
|
|
402
|
-
return async (_pluginId) => {
|
|
403
|
-
return permissions;
|
|
450
|
+
async factory({ config }) {
|
|
451
|
+
return async ({ discovery, tokenManager }) => {
|
|
452
|
+
return pluginPermissionNode.ServerPermissionClient.fromConfig(config, {
|
|
453
|
+
discovery,
|
|
454
|
+
tokenManager
|
|
455
|
+
});
|
|
404
456
|
};
|
|
405
457
|
}
|
|
406
458
|
});
|
|
@@ -408,13 +460,13 @@ const permissionsFactory = backendPluginApi.createServiceFactory({
|
|
|
408
460
|
const schedulerFactory = backendPluginApi.createServiceFactory({
|
|
409
461
|
service: backendPluginApi.schedulerServiceRef,
|
|
410
462
|
deps: {
|
|
411
|
-
|
|
463
|
+
config: backendPluginApi.configServiceRef,
|
|
464
|
+
plugin: backendPluginApi.pluginMetadataServiceRef
|
|
412
465
|
},
|
|
413
|
-
|
|
414
|
-
const config = await configFactory("root");
|
|
466
|
+
async factory({ config }) {
|
|
415
467
|
const taskScheduler = backendTasks.TaskScheduler.fromConfig(config);
|
|
416
|
-
return async (
|
|
417
|
-
return taskScheduler.forPlugin(
|
|
468
|
+
return async ({ plugin }) => {
|
|
469
|
+
return taskScheduler.forPlugin(plugin.getId());
|
|
418
470
|
};
|
|
419
471
|
}
|
|
420
472
|
});
|
|
@@ -422,13 +474,11 @@ const schedulerFactory = backendPluginApi.createServiceFactory({
|
|
|
422
474
|
const tokenManagerFactory = backendPluginApi.createServiceFactory({
|
|
423
475
|
service: backendPluginApi.tokenManagerServiceRef,
|
|
424
476
|
deps: {
|
|
425
|
-
|
|
426
|
-
|
|
477
|
+
config: backendPluginApi.configServiceRef,
|
|
478
|
+
logger: backendPluginApi.loggerServiceRef
|
|
427
479
|
},
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
const config = await configFactory("root");
|
|
431
|
-
return async (_pluginId) => {
|
|
480
|
+
async factory() {
|
|
481
|
+
return async ({ config, logger }) => {
|
|
432
482
|
return backendCommon.ServerTokenManager.fromConfig(config, {
|
|
433
483
|
logger: backendPluginApi.loggerToWinstonLogger(logger)
|
|
434
484
|
});
|
|
@@ -439,15 +489,14 @@ const tokenManagerFactory = backendPluginApi.createServiceFactory({
|
|
|
439
489
|
const urlReaderFactory = backendPluginApi.createServiceFactory({
|
|
440
490
|
service: backendPluginApi.urlReaderServiceRef,
|
|
441
491
|
deps: {
|
|
442
|
-
|
|
443
|
-
|
|
492
|
+
config: backendPluginApi.configServiceRef,
|
|
493
|
+
logger: backendPluginApi.loggerServiceRef
|
|
444
494
|
},
|
|
445
|
-
|
|
446
|
-
return async (
|
|
447
|
-
const logger = await loggerFactory(pluginId);
|
|
495
|
+
async factory() {
|
|
496
|
+
return async ({ config, logger }) => {
|
|
448
497
|
return backendCommon.UrlReaders.default({
|
|
449
|
-
|
|
450
|
-
|
|
498
|
+
config,
|
|
499
|
+
logger: backendPluginApi.loggerToWinstonLogger(logger)
|
|
451
500
|
});
|
|
452
501
|
};
|
|
453
502
|
}
|
|
@@ -456,13 +505,15 @@ const urlReaderFactory = backendPluginApi.createServiceFactory({
|
|
|
456
505
|
const httpRouterFactory = backendPluginApi.createServiceFactory({
|
|
457
506
|
service: backendPluginApi.httpRouterServiceRef,
|
|
458
507
|
deps: {
|
|
459
|
-
|
|
508
|
+
config: backendPluginApi.configServiceRef,
|
|
509
|
+
plugin: backendPluginApi.pluginMetadataServiceRef
|
|
460
510
|
},
|
|
461
|
-
|
|
511
|
+
async factory({ config }) {
|
|
462
512
|
const rootRouter = Router__default["default"]();
|
|
463
|
-
const service = backendCommon.createServiceBuilder(module).loadConfig(
|
|
513
|
+
const service = backendCommon.createServiceBuilder(module).loadConfig(config).addRouter("", rootRouter);
|
|
464
514
|
await service.start();
|
|
465
|
-
return async (
|
|
515
|
+
return async ({ plugin }) => {
|
|
516
|
+
const pluginId = plugin.getId();
|
|
466
517
|
const path = pluginId ? `/api/${pluginId}` : "";
|
|
467
518
|
return {
|
|
468
519
|
use(handler) {
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/wiring/BackendInitializer.ts","../src/wiring/ServiceRegistry.ts","../src/wiring/BackstageBackend.ts","../src/wiring/types.ts","../src/services/implementations/cacheService.ts","../src/services/implementations/configService.ts","../src/services/implementations/databaseService.ts","../src/services/implementations/discoveryService.ts","../src/services/implementations/loggerService.ts","../src/services/implementations/permissionsService.ts","../src/services/implementations/schedulerService.ts","../src/services/implementations/tokenManagerService.ts","../src/services/implementations/urlReaderService.ts","../src/services/implementations/httpRouterService.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BackendFeature,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport {\n BackendRegisterInit,\n ServiceHolder,\n ServiceOrExtensionPoint,\n} from './types';\n\nexport class BackendInitializer {\n #started = false;\n #features = new Map<BackendFeature, unknown>();\n #registerInits = new Array<BackendRegisterInit>();\n #extensionPoints = new Map<ExtensionPoint<unknown>, unknown>();\n #serviceHolder: ServiceHolder;\n\n constructor(serviceHolder: ServiceHolder) {\n this.#serviceHolder = serviceHolder;\n }\n\n async #getInitDeps(\n deps: { [name: string]: ServiceOrExtensionPoint },\n pluginId: string,\n ) {\n const result = new Map<string, unknown>();\n const missingRefs = new Set<ServiceOrExtensionPoint>();\n\n for (const [name, ref] of Object.entries(deps)) {\n const extensionPoint = this.#extensionPoints.get(\n ref as ExtensionPoint<unknown>,\n );\n if (extensionPoint) {\n result.set(name, extensionPoint);\n } else {\n const factory = await this.#serviceHolder.get(\n ref as ServiceRef<unknown>,\n );\n if (factory) {\n result.set(name, await factory(pluginId));\n } else {\n missingRefs.add(ref);\n }\n }\n }\n\n if (missingRefs.size > 0) {\n const missing = Array.from(missingRefs).join(', ');\n throw new Error(\n `No extension point or service available for the following ref(s): ${missing}`,\n );\n }\n\n return Object.fromEntries(result);\n }\n\n add<TOptions>(feature: BackendFeature, options?: TOptions) {\n if (this.#started) {\n throw new Error('feature can not be added after the backend has started');\n }\n this.#features.set(feature, options);\n }\n\n async start(): Promise<void> {\n if (this.#started) {\n throw new Error('Backend has already started');\n }\n this.#started = true;\n\n for (const [feature] of this.#features) {\n const provides = new Set<ExtensionPoint<unknown>>();\n\n let registerInit: BackendRegisterInit | undefined = undefined;\n\n feature.register({\n registerExtensionPoint: (extensionPointRef, impl) => {\n if (registerInit) {\n throw new Error('registerExtensionPoint called after registerInit');\n }\n if (this.#extensionPoints.has(extensionPointRef)) {\n throw new Error(`API ${extensionPointRef.id} already registered`);\n }\n this.#extensionPoints.set(extensionPointRef, impl);\n provides.add(extensionPointRef);\n },\n registerInit: registerOptions => {\n if (registerInit) {\n throw new Error('registerInit must only be called once');\n }\n registerInit = {\n id: feature.id,\n provides,\n consumes: new Set(Object.values(registerOptions.deps)),\n deps: registerOptions.deps,\n init: registerOptions.init as BackendRegisterInit['init'],\n };\n },\n });\n\n if (!registerInit) {\n throw new Error(\n `registerInit was not called by register in ${feature.id}`,\n );\n }\n\n this.#registerInits.push(registerInit);\n }\n\n const orderedRegisterResults = this.#resolveInitOrder(this.#registerInits);\n\n for (const registerInit of orderedRegisterResults) {\n const deps = await this.#getInitDeps(registerInit.deps, registerInit.id);\n await registerInit.init(deps);\n }\n }\n\n #resolveInitOrder(registerInits: Array<BackendRegisterInit>) {\n let registerInitsToOrder = registerInits.slice();\n const orderedRegisterInits = new Array<BackendRegisterInit>();\n\n // TODO: Validate duplicates\n\n while (registerInitsToOrder.length > 0) {\n const toRemove = new Set<unknown>();\n\n for (const registerInit of registerInitsToOrder) {\n const unInitializedDependents = [];\n\n for (const provided of registerInit.provides) {\n if (\n registerInitsToOrder.some(\n init => init !== registerInit && init.consumes.has(provided),\n )\n ) {\n unInitializedDependents.push(provided);\n }\n }\n\n if (unInitializedDependents.length === 0) {\n orderedRegisterInits.push(registerInit);\n toRemove.add(registerInit);\n }\n }\n\n registerInitsToOrder = registerInitsToOrder.filter(r => !toRemove.has(r));\n }\n\n return orderedRegisterInits;\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n FactoryFunc,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { stringifyError } from '@backstage/errors';\n\n/**\n * Keep in sync with `@backstage/backend-plugin-api/src/services/system/types.ts`\n * @internal\n */\nexport type InternalServiceRef<T> = ServiceRef<T> & {\n __defaultFactory?: (service: ServiceRef<T>) => Promise<ServiceFactory<T>>;\n};\n\nexport class ServiceRegistry {\n readonly #providedFactories: Map<string, ServiceFactory>;\n readonly #loadedDefaultFactories: Map<Function, Promise<ServiceFactory>>;\n readonly #implementations: Map<\n ServiceFactory,\n {\n factoryFunc: Promise<FactoryFunc<unknown>>;\n byPlugin: Map<string, Promise<unknown>>;\n }\n >;\n\n constructor(factories: ServiceFactory<any>[]) {\n this.#providedFactories = new Map(factories.map(f => [f.service.id, f]));\n this.#loadedDefaultFactories = new Map();\n this.#implementations = new Map();\n }\n\n get<T>(ref: ServiceRef<T>): FactoryFunc<T> | undefined {\n let factory = this.#providedFactories.get(ref.id);\n const { __defaultFactory: defaultFactory } = ref as InternalServiceRef<T>;\n if (!factory && !defaultFactory) {\n return undefined;\n }\n\n return async (pluginId: string): Promise<T> => {\n if (!factory) {\n let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!);\n if (!loadedFactory) {\n loadedFactory = Promise.resolve().then(\n () => defaultFactory!(ref) as Promise<ServiceFactory>,\n );\n this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory);\n }\n // NOTE: This await is safe as long as #providedFactories is not mutated.\n factory = await loadedFactory.catch(error => {\n throw new Error(\n `Failed to instantiate service '${\n ref.id\n }' because the default factory loader threw an error, ${stringifyError(\n error,\n )}`,\n );\n });\n }\n\n let implementation = this.#implementations.get(factory);\n if (!implementation) {\n const missingRefs = new Array<ServiceRef<unknown>>();\n const factoryDeps: { [name in string]: FactoryFunc<unknown> } = {};\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n const target = this.get(serviceRef);\n if (!target) {\n missingRefs.push(serviceRef);\n } else {\n factoryDeps[name] = target;\n }\n }\n\n if (missingRefs.length) {\n const missing = missingRefs.map(r => `'${r.id}'`).join(', ');\n throw new Error(\n `Failed to instantiate service '${ref.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`,\n );\n }\n\n implementation = {\n factoryFunc: Promise.resolve()\n .then(() => factory!.factory(factoryDeps))\n .catch(error => {\n throw new Error(\n `Failed to instantiate service '${\n ref.id\n }' because the top-level factory function threw an error, ${stringifyError(\n error,\n )}`,\n );\n }),\n byPlugin: new Map(),\n };\n\n this.#implementations.set(factory, implementation);\n }\n\n let result = implementation.byPlugin.get(pluginId) as Promise<any>;\n if (!result) {\n result = implementation.factoryFunc.then(func =>\n Promise.resolve()\n .then(() => func(pluginId))\n .catch(error => {\n throw new Error(\n `Failed to instantiate service '${\n ref.id\n }' for '${pluginId}' because the factory function threw an error, ${stringifyError(\n error,\n )}`,\n );\n }),\n );\n\n implementation.byPlugin.set(pluginId, result);\n }\n\n return result;\n };\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ServiceFactory, BackendFeature } from '@backstage/backend-plugin-api';\nimport { BackendInitializer } from './BackendInitializer';\nimport { ServiceRegistry } from './ServiceRegistry';\nimport { Backend } from './types';\n\nexport class BackstageBackend implements Backend {\n #services: ServiceRegistry;\n #initializer: BackendInitializer;\n\n constructor(apiFactories: ServiceFactory[]) {\n this.#services = new ServiceRegistry(apiFactories);\n this.#initializer = new BackendInitializer(this.#services);\n }\n\n add(feature: BackendFeature): void {\n this.#initializer.add(feature);\n }\n\n async start(): Promise<void> {\n await this.#initializer.start();\n }\n\n // async stop(): Promise<void> {\n // await this.#initializer.stop();\n // }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n BackendFeature,\n ExtensionPoint,\n FactoryFunc,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { BackstageBackend } from './BackstageBackend';\n\n/**\n * @public\n */\nexport interface Backend {\n add(feature: BackendFeature): void;\n start(): Promise<void>;\n}\n\nexport interface BackendRegisterInit {\n id: string;\n consumes: Set<ServiceOrExtensionPoint>;\n provides: Set<ServiceOrExtensionPoint>;\n deps: { [name: string]: ServiceOrExtensionPoint };\n init: (deps: { [name: string]: unknown }) => Promise<void>;\n}\n\n/**\n * @public\n */\nexport interface CreateSpecializedBackendOptions {\n services: ServiceFactory[];\n}\n\nexport type ServiceHolder = {\n get<T>(api: ServiceRef<T>): FactoryFunc<T> | undefined;\n};\n\n/**\n * @public\n */\nexport function createSpecializedBackend(\n options: CreateSpecializedBackendOptions,\n): Backend {\n return new BackstageBackend(options.services);\n}\n\n/**\n * @public\n */\nexport type ServiceOrExtensionPoint<T = unknown> =\n | ExtensionPoint<T>\n | ServiceRef<T>;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CacheManager } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n cacheServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const cacheFactory = createServiceFactory({\n service: cacheServiceRef,\n deps: {\n configFactory: configServiceRef,\n },\n factory: async ({ configFactory }) => {\n const config = await configFactory('root');\n const cacheManager = CacheManager.fromConfig(config);\n return async (pluginId: string) => {\n return cacheManager.forPlugin(pluginId);\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { loadBackendConfig } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n loggerToWinstonLogger,\n loggerServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const configFactory = createServiceFactory({\n service: configServiceRef,\n deps: {\n loggerFactory: loggerServiceRef,\n },\n factory: async ({ loggerFactory }) => {\n const logger = await loggerFactory('root');\n const config = await loadBackendConfig({\n argv: process.argv,\n logger: loggerToWinstonLogger(logger),\n });\n return async () => {\n return config;\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DatabaseManager } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n databaseServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const databaseFactory = createServiceFactory({\n service: databaseServiceRef,\n deps: {\n configFactory: configServiceRef,\n },\n factory: async ({ configFactory }) => {\n const config = await configFactory('root');\n const databaseManager = DatabaseManager.fromConfig(config);\n return async (pluginId: string) => {\n return databaseManager.forPlugin(pluginId);\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SingleHostDiscovery } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n discoveryServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const discoveryFactory = createServiceFactory({\n service: discoveryServiceRef,\n deps: {\n configFactory: configServiceRef,\n },\n factory: async ({ configFactory }) => {\n const config = await configFactory('root');\n const discovery = SingleHostDiscovery.fromConfig(config);\n return async () => {\n return discovery;\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createRootLogger } from '@backstage/backend-common';\nimport {\n createServiceFactory,\n Logger,\n loggerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { Logger as WinstonLogger } from 'winston';\n\nclass BackstageLogger implements Logger {\n static fromWinston(logger: WinstonLogger): BackstageLogger {\n return new BackstageLogger(logger);\n }\n\n private constructor(private readonly winston: WinstonLogger) {}\n\n info(message: string, ...meta: any[]): void {\n this.winston.info(message, ...meta);\n }\n\n child(fields: { [name: string]: string }): Logger {\n return new BackstageLogger(this.winston.child(fields));\n }\n}\n\n/** @public */\nexport const loggerFactory = createServiceFactory({\n service: loggerServiceRef,\n deps: {},\n factory: async () => {\n const root = BackstageLogger.fromWinston(createRootLogger());\n return async (pluginId: string) => {\n return root.child({ pluginId });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n createServiceFactory,\n discoveryServiceRef,\n permissionsServiceRef,\n tokenManagerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { ServerPermissionClient } from '@backstage/plugin-permission-node';\n\n/** @public */\nexport const permissionsFactory = createServiceFactory({\n service: permissionsServiceRef,\n deps: {\n configFactory: configServiceRef,\n discoveryFactory: discoveryServiceRef,\n tokenManagerFactory: tokenManagerServiceRef,\n },\n factory: async ({ configFactory, discoveryFactory, tokenManagerFactory }) => {\n const config = await configFactory('root');\n const discovery = await discoveryFactory('root');\n const tokenManager = await tokenManagerFactory('root');\n const permissions = ServerPermissionClient.fromConfig(config, {\n discovery,\n tokenManager,\n });\n return async (_pluginId: string) => {\n return permissions;\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n createServiceFactory,\n schedulerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { TaskScheduler } from '@backstage/backend-tasks';\n\n/** @public */\nexport const schedulerFactory = createServiceFactory({\n service: schedulerServiceRef,\n deps: {\n configFactory: configServiceRef,\n },\n factory: async ({ configFactory }) => {\n const config = await configFactory('root');\n const taskScheduler = TaskScheduler.fromConfig(config);\n return async (pluginId: string) => {\n return taskScheduler.forPlugin(pluginId);\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n loggerServiceRef,\n createServiceFactory,\n tokenManagerServiceRef,\n loggerToWinstonLogger,\n} from '@backstage/backend-plugin-api';\nimport { ServerTokenManager } from '@backstage/backend-common';\n\n/** @public */\nexport const tokenManagerFactory = createServiceFactory({\n service: tokenManagerServiceRef,\n deps: {\n configFactory: configServiceRef,\n loggerFactory: loggerServiceRef,\n },\n factory: async ({ configFactory, loggerFactory }) => {\n const logger = await loggerFactory('root');\n const config = await configFactory('root');\n return async (_pluginId: string) => {\n // doesn't the logger want to be inferred from the plugin tho here?\n // maybe ... also why do we recreate it every time otherwise\n // we should memoize on a per plugin right? so I think it's should be fine to re-use the plugin one\n // we shouldn't recreate on a per plugin basis.\n // hm - on the other hand, is this really ever called more than once?\n // not this function right. should only be called when the plugin requests this serviceRef\n // yeah so no need to worry about memo probably\n // but we still want to scope the logger to the ServrTokenmanagfer>?\n // mm sure maybe\n // maybe in this case it doesn't provide so much value b\n // oh hang on - isn't it up to THE MANAGER to make a child internally if it wants to do that\n // so that it becomes a property intrinsic to that class, no matter how it's constructed\n // or is that too much responsibility for it - making the constructor complex so to speak, making it harder to tweak that behavior\n // this is not ultra efficient :)\n\n // I think the naming here is wrong to be gonest\n // this isn't like the cache manager or the database manager\n // the manager name is confusuion i think\n // aye perhaps\n return ServerTokenManager.fromConfig(config, {\n logger: loggerToWinstonLogger(logger),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UrlReaders } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n loggerServiceRef,\n loggerToWinstonLogger,\n urlReaderServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const urlReaderFactory = createServiceFactory({\n service: urlReaderServiceRef,\n deps: {\n configFactory: configServiceRef,\n loggerFactory: loggerServiceRef,\n },\n factory: async ({ configFactory, loggerFactory }) => {\n return async (pluginId: string) => {\n const logger = await loggerFactory(pluginId);\n return UrlReaders.default({\n logger: loggerToWinstonLogger(logger),\n config: await configFactory(pluginId),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createServiceFactory,\n httpRouterServiceRef,\n configServiceRef,\n} from '@backstage/backend-plugin-api';\nimport Router from 'express-promise-router';\nimport { Handler } from 'express';\nimport { createServiceBuilder } from '@backstage/backend-common';\n\n/** @public */\nexport const httpRouterFactory = createServiceFactory({\n service: httpRouterServiceRef,\n deps: {\n configFactory: configServiceRef,\n },\n factory: async ({ configFactory }) => {\n const rootRouter = Router();\n\n const service = createServiceBuilder(module)\n .loadConfig(await configFactory('root'))\n .addRouter('', rootRouter);\n\n await service.start();\n\n return async (pluginId?: string) => {\n const path = pluginId ? `/api/${pluginId}` : '';\n return {\n use(handler: Handler) {\n rootRouter.use(path, handler);\n },\n };\n };\n },\n});\n"],"names":["__privateAdd","__privateSet","__privateGet","stringifyError","createServiceFactory","cacheServiceRef","configServiceRef","CacheManager","loggerServiceRef","loadBackendConfig","loggerToWinstonLogger","databaseServiceRef","DatabaseManager","discoveryServiceRef","SingleHostDiscovery","createRootLogger","permissionsServiceRef","tokenManagerServiceRef","ServerPermissionClient","schedulerServiceRef","TaskScheduler","ServerTokenManager","urlReaderServiceRef","UrlReaders","httpRouterServiceRef","Router","createServiceBuilder"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/wiring/BackendInitializer.ts","../src/wiring/ServiceRegistry.ts","../src/wiring/BackstageBackend.ts","../src/wiring/types.ts","../src/services/implementations/cacheService.ts","../src/services/implementations/configService.ts","../src/services/implementations/databaseService.ts","../src/services/implementations/discoveryService.ts","../src/services/implementations/loggerService.ts","../src/services/implementations/permissionsService.ts","../src/services/implementations/schedulerService.ts","../src/services/implementations/tokenManagerService.ts","../src/services/implementations/urlReaderService.ts","../src/services/implementations/httpRouterService.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BackendFeature,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport {\n BackendRegisterInit,\n ServiceHolder,\n ServiceOrExtensionPoint,\n} from './types';\n\nexport class BackendInitializer {\n #started = false;\n #features = new Map<BackendFeature, unknown>();\n #registerInits = new Array<BackendRegisterInit>();\n #extensionPoints = new Map<ExtensionPoint<unknown>, unknown>();\n #serviceHolder: ServiceHolder;\n\n constructor(serviceHolder: ServiceHolder) {\n this.#serviceHolder = serviceHolder;\n }\n\n async #getInitDeps(\n deps: { [name: string]: ServiceOrExtensionPoint },\n pluginId: string,\n ) {\n const result = new Map<string, unknown>();\n const missingRefs = new Set<ServiceOrExtensionPoint>();\n\n for (const [name, ref] of Object.entries(deps)) {\n const extensionPoint = this.#extensionPoints.get(\n ref as ExtensionPoint<unknown>,\n );\n if (extensionPoint) {\n result.set(name, extensionPoint);\n } else {\n const impl = await this.#serviceHolder.get(\n ref as ServiceRef<unknown>,\n pluginId,\n );\n if (impl) {\n result.set(name, impl);\n } else {\n missingRefs.add(ref);\n }\n }\n }\n\n if (missingRefs.size > 0) {\n const missing = Array.from(missingRefs).join(', ');\n throw new Error(\n `No extension point or service available for the following ref(s): ${missing}`,\n );\n }\n\n return Object.fromEntries(result);\n }\n\n add<TOptions>(feature: BackendFeature, options?: TOptions) {\n if (this.#started) {\n throw new Error('feature can not be added after the backend has started');\n }\n this.#features.set(feature, options);\n }\n\n async start(): Promise<void> {\n if (this.#started) {\n throw new Error('Backend has already started');\n }\n this.#started = true;\n\n for (const [feature] of this.#features) {\n const provides = new Set<ExtensionPoint<unknown>>();\n\n let registerInit: BackendRegisterInit | undefined = undefined;\n\n feature.register({\n registerExtensionPoint: (extensionPointRef, impl) => {\n if (registerInit) {\n throw new Error('registerExtensionPoint called after registerInit');\n }\n if (this.#extensionPoints.has(extensionPointRef)) {\n throw new Error(`API ${extensionPointRef.id} already registered`);\n }\n this.#extensionPoints.set(extensionPointRef, impl);\n provides.add(extensionPointRef);\n },\n registerInit: registerOptions => {\n if (registerInit) {\n throw new Error('registerInit must only be called once');\n }\n registerInit = {\n id: feature.id,\n provides,\n consumes: new Set(Object.values(registerOptions.deps)),\n deps: registerOptions.deps,\n init: registerOptions.init as BackendRegisterInit['init'],\n };\n },\n });\n\n if (!registerInit) {\n throw new Error(\n `registerInit was not called by register in ${feature.id}`,\n );\n }\n\n this.#registerInits.push(registerInit);\n }\n\n const orderedRegisterResults = this.#resolveInitOrder(this.#registerInits);\n\n for (const registerInit of orderedRegisterResults) {\n const deps = await this.#getInitDeps(registerInit.deps, registerInit.id);\n await registerInit.init(deps);\n }\n }\n\n #resolveInitOrder(registerInits: Array<BackendRegisterInit>) {\n let registerInitsToOrder = registerInits.slice();\n const orderedRegisterInits = new Array<BackendRegisterInit>();\n\n // TODO: Validate duplicates\n\n while (registerInitsToOrder.length > 0) {\n const toRemove = new Set<unknown>();\n\n for (const registerInit of registerInitsToOrder) {\n const unInitializedDependents = [];\n\n for (const provided of registerInit.provides) {\n if (\n registerInitsToOrder.some(\n init => init !== registerInit && init.consumes.has(provided),\n )\n ) {\n unInitializedDependents.push(provided);\n }\n }\n\n if (unInitializedDependents.length === 0) {\n orderedRegisterInits.push(registerInit);\n toRemove.add(registerInit);\n }\n }\n\n registerInitsToOrder = registerInitsToOrder.filter(r => !toRemove.has(r));\n }\n\n return orderedRegisterInits;\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n ServiceRef,\n pluginMetadataServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { stringifyError } from '@backstage/errors';\n\n/**\n * Keep in sync with `@backstage/backend-plugin-api/src/services/system/types.ts`\n * @internal\n */\nexport type InternalServiceRef<T> = ServiceRef<T> & {\n __defaultFactory?: (\n service: ServiceRef<T>,\n ) => Promise<ServiceFactory<T> | (() => ServiceFactory<T>)>;\n};\n\nexport class ServiceRegistry {\n readonly #providedFactories: Map<string, ServiceFactory>;\n readonly #loadedDefaultFactories: Map<Function, Promise<ServiceFactory>>;\n readonly #implementations: Map<\n ServiceFactory,\n {\n factoryFunc: Promise<\n (deps: { [name in string]: unknown }) => Promise<unknown>\n >;\n byPlugin: Map<string, Promise<unknown>>;\n }\n >;\n\n constructor(\n factories: Array<ServiceFactory<unknown> | (() => ServiceFactory<unknown>)>,\n ) {\n this.#providedFactories = new Map(\n factories.map(f => {\n if (typeof f === 'function') {\n const cf = f();\n return [cf.service.id, cf];\n }\n return [f.service.id, f];\n }),\n );\n this.#loadedDefaultFactories = new Map();\n this.#implementations = new Map();\n }\n\n #resolveFactory(\n ref: ServiceRef<unknown>,\n pluginId: string,\n ): Promise<ServiceFactory> | undefined {\n // Special case handling of the plugin metadata service, generating a custom factory for it each time\n if (ref.id === pluginMetadataServiceRef.id) {\n return Promise.resolve({\n scope: 'plugin',\n service: pluginMetadataServiceRef,\n deps: {},\n factory: async () => async () => ({\n getId() {\n return pluginId;\n },\n }),\n });\n }\n\n let resolvedFactory: Promise<ServiceFactory> | ServiceFactory | undefined =\n this.#providedFactories.get(ref.id);\n const { __defaultFactory: defaultFactory } =\n ref as InternalServiceRef<unknown>;\n if (!resolvedFactory && !defaultFactory) {\n return undefined;\n }\n\n if (!resolvedFactory) {\n let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!);\n if (!loadedFactory) {\n loadedFactory = Promise.resolve()\n .then(() => defaultFactory!(ref))\n .then(f =>\n typeof f === 'function' ? f() : f,\n ) as Promise<ServiceFactory>;\n this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory);\n }\n resolvedFactory = loadedFactory.catch(error => {\n throw new Error(\n `Failed to instantiate service '${\n ref.id\n }' because the default factory loader threw an error, ${stringifyError(\n error,\n )}`,\n );\n });\n }\n\n return Promise.resolve(resolvedFactory);\n }\n\n #separateMapForTheRootService = new Map<ServiceFactory, Promise<unknown>>();\n\n #checkForMissingDeps(factory: ServiceFactory, pluginId: string) {\n const missingDeps = Object.values(factory.deps).filter(ref => {\n if (ref.id === pluginMetadataServiceRef.id) {\n return false;\n }\n if (this.#providedFactories.get(ref.id)) {\n return false;\n }\n\n return !(ref as InternalServiceRef<unknown>).__defaultFactory;\n });\n\n if (missingDeps.length) {\n const missing = missingDeps.map(r => `'${r.id}'`).join(', ');\n throw new Error(\n `Failed to instantiate service '${factory.service.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`,\n );\n }\n }\n\n get<T>(ref: ServiceRef<T>, pluginId: string): Promise<T> | undefined {\n return this.#resolveFactory(ref, pluginId)?.then(factory => {\n if (factory.scope === 'root') {\n let existing = this.#separateMapForTheRootService.get(factory);\n if (!existing) {\n this.#checkForMissingDeps(factory, pluginId);\n const rootDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n if (serviceRef.scope !== 'root') {\n throw new Error(\n `Failed to instantiate 'root' scoped service '${ref.id}' because it depends on '${serviceRef.scope}' scoped service '${serviceRef.id}'.`,\n );\n }\n const target = this.get(serviceRef, pluginId)!;\n rootDeps.push(target.then(impl => [name, impl]));\n }\n\n existing = Promise.all(rootDeps).then(entries =>\n factory.factory(Object.fromEntries(entries)),\n );\n this.#separateMapForTheRootService.set(factory, existing);\n }\n return existing as Promise<T>;\n }\n\n let implementation = this.#implementations.get(factory);\n if (!implementation) {\n this.#checkForMissingDeps(factory, pluginId);\n const rootDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n if (serviceRef.scope === 'root') {\n const target = this.get(serviceRef, pluginId)!;\n rootDeps.push(target.then(impl => [name, impl]));\n }\n }\n\n implementation = {\n factoryFunc: Promise.all(rootDeps)\n .then(entries => factory.factory(Object.fromEntries(entries)))\n .catch(error => {\n const cause = stringifyError(error);\n throw new Error(\n `Failed to instantiate service '${ref.id}' because the top-level factory function threw an error, ${cause}`,\n );\n }),\n byPlugin: new Map(),\n };\n\n this.#implementations.set(factory, implementation);\n }\n\n let result = implementation.byPlugin.get(pluginId) as Promise<any>;\n if (!result) {\n const allDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n const target = this.get(serviceRef, pluginId)!;\n allDeps.push(target.then(impl => [name, impl]));\n }\n\n result = implementation.factoryFunc\n .then(func =>\n Promise.all(allDeps).then(entries =>\n func(Object.fromEntries(entries)),\n ),\n )\n .catch(error => {\n const cause = stringifyError(error);\n throw new Error(\n `Failed to instantiate service '${ref.id}' for '${pluginId}' because the factory function threw an error, ${cause}`,\n );\n });\n implementation.byPlugin.set(pluginId, result);\n }\n\n return result;\n });\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ServiceFactory, BackendFeature } from '@backstage/backend-plugin-api';\nimport { BackendInitializer } from './BackendInitializer';\nimport { ServiceRegistry } from './ServiceRegistry';\nimport { Backend } from './types';\n\nexport class BackstageBackend implements Backend {\n #services: ServiceRegistry;\n #initializer: BackendInitializer;\n\n constructor(apiFactories: ServiceFactory[]) {\n this.#services = new ServiceRegistry(apiFactories);\n this.#initializer = new BackendInitializer(this.#services);\n }\n\n add(feature: BackendFeature): void {\n this.#initializer.add(feature);\n }\n\n async start(): Promise<void> {\n await this.#initializer.start();\n }\n\n // async stop(): Promise<void> {\n // await this.#initializer.stop();\n // }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n BackendFeature,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { BackstageBackend } from './BackstageBackend';\n\n/**\n * @public\n */\nexport interface Backend {\n add(feature: BackendFeature): void;\n start(): Promise<void>;\n}\n\nexport interface BackendRegisterInit {\n id: string;\n consumes: Set<ServiceOrExtensionPoint>;\n provides: Set<ServiceOrExtensionPoint>;\n deps: { [name: string]: ServiceOrExtensionPoint };\n init: (deps: { [name: string]: unknown }) => Promise<void>;\n}\n\n/**\n * @public\n */\nexport interface CreateSpecializedBackendOptions {\n services: (ServiceFactory | (() => ServiceFactory))[];\n}\n\nexport type ServiceHolder = {\n get<T>(api: ServiceRef<T>, pluginId: string): Promise<T> | undefined;\n};\n\n/**\n * @public\n */\nexport function createSpecializedBackend(\n options: CreateSpecializedBackendOptions,\n): Backend {\n return new BackstageBackend(\n options.services.map(s => (typeof s === 'function' ? s() : s)),\n );\n}\n\n/**\n * @public\n */\nexport type ServiceOrExtensionPoint<T = unknown> =\n | ExtensionPoint<T>\n | ServiceRef<T>;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CacheManager } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n pluginMetadataServiceRef,\n cacheServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const cacheFactory = createServiceFactory({\n service: cacheServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }) {\n const cacheManager = CacheManager.fromConfig(config);\n return async ({ plugin }) => {\n return cacheManager.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { loadBackendConfig } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n loggerToWinstonLogger,\n rootLoggerServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const configFactory = createServiceFactory({\n service: configServiceRef,\n deps: {\n logger: rootLoggerServiceRef,\n },\n async factory({ logger }) {\n const config = await loadBackendConfig({\n argv: process.argv,\n logger: loggerToWinstonLogger(logger),\n });\n return config;\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DatabaseManager } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n databaseServiceRef,\n pluginMetadataServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const databaseFactory = createServiceFactory({\n service: databaseServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }) {\n const databaseManager = DatabaseManager.fromConfig(config);\n return async ({ plugin }) => {\n return databaseManager.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SingleHostDiscovery } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n discoveryServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const discoveryFactory = createServiceFactory({\n service: discoveryServiceRef,\n deps: {\n config: configServiceRef,\n },\n async factory({ config }) {\n const discovery = SingleHostDiscovery.fromConfig(config);\n return async () => {\n return discovery;\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createServiceFactory,\n loggerServiceRef,\n pluginMetadataServiceRef,\n rootLoggerServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const loggerFactory = createServiceFactory({\n service: loggerServiceRef,\n deps: {\n rootLogger: rootLoggerServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ rootLogger }) {\n return async ({ plugin }) => {\n return rootLogger.child({ pluginId: plugin.getId() });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n createServiceFactory,\n discoveryServiceRef,\n permissionsServiceRef,\n tokenManagerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { ServerPermissionClient } from '@backstage/plugin-permission-node';\n\n/** @public */\nexport const permissionsFactory = createServiceFactory({\n service: permissionsServiceRef,\n deps: {\n config: configServiceRef,\n discovery: discoveryServiceRef,\n tokenManager: tokenManagerServiceRef,\n },\n async factory({ config }) {\n return async ({ discovery, tokenManager }) => {\n return ServerPermissionClient.fromConfig(config, {\n discovery,\n tokenManager,\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n createServiceFactory,\n pluginMetadataServiceRef,\n schedulerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { TaskScheduler } from '@backstage/backend-tasks';\n\n/** @public */\nexport const schedulerFactory = createServiceFactory({\n service: schedulerServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }) {\n const taskScheduler = TaskScheduler.fromConfig(config);\n return async ({ plugin }) => {\n return taskScheduler.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n loggerServiceRef,\n createServiceFactory,\n tokenManagerServiceRef,\n loggerToWinstonLogger,\n} from '@backstage/backend-plugin-api';\nimport { ServerTokenManager } from '@backstage/backend-common';\n\n/** @public */\nexport const tokenManagerFactory = createServiceFactory({\n service: tokenManagerServiceRef,\n deps: {\n config: configServiceRef,\n logger: loggerServiceRef,\n },\n async factory() {\n return async ({ config, logger }) => {\n return ServerTokenManager.fromConfig(config, {\n logger: loggerToWinstonLogger(logger),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UrlReaders } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n loggerServiceRef,\n loggerToWinstonLogger,\n urlReaderServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const urlReaderFactory = createServiceFactory({\n service: urlReaderServiceRef,\n deps: {\n config: configServiceRef,\n logger: loggerServiceRef,\n },\n async factory() {\n return async ({ config, logger }) => {\n return UrlReaders.default({\n config,\n logger: loggerToWinstonLogger(logger),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createServiceFactory,\n httpRouterServiceRef,\n configServiceRef,\n pluginMetadataServiceRef,\n} from '@backstage/backend-plugin-api';\nimport Router from 'express-promise-router';\nimport { Handler } from 'express';\nimport { createServiceBuilder } from '@backstage/backend-common';\n\n/** @public */\nexport const httpRouterFactory = createServiceFactory({\n service: httpRouterServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }) {\n const rootRouter = Router();\n\n const service = createServiceBuilder(module)\n .loadConfig(config)\n .addRouter('', rootRouter);\n\n await service.start();\n\n return async ({ plugin }) => {\n const pluginId = plugin.getId();\n const path = pluginId ? `/api/${pluginId}` : '';\n return {\n use(handler: Handler) {\n rootRouter.use(path, handler);\n },\n };\n };\n },\n});\n"],"names":["__privateAdd","__privateSet","__privateGet","__privateMethod","stringifyError","pluginMetadataServiceRef","createServiceFactory","cacheServiceRef","configServiceRef","CacheManager","rootLoggerServiceRef","loadBackendConfig","loggerToWinstonLogger","databaseServiceRef","DatabaseManager","discoveryServiceRef","SingleHostDiscovery","loggerServiceRef","permissionsServiceRef","tokenManagerServiceRef","ServerPermissionClient","schedulerServiceRef","TaskScheduler","ServerTokenManager","urlReaderServiceRef","UrlReaders","httpRouterServiceRef","Router","createServiceBuilder"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -29,10 +29,10 @@ export declare interface Backend {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/** @public */
|
|
32
|
-
export declare const cacheFactory: ServiceFactory<PluginCacheManager>;
|
|
32
|
+
export declare const cacheFactory: (options?: undefined) => ServiceFactory<PluginCacheManager>;
|
|
33
33
|
|
|
34
34
|
/** @public */
|
|
35
|
-
export declare const configFactory: ServiceFactory<Config>;
|
|
35
|
+
export declare const configFactory: (options?: undefined) => ServiceFactory<Config>;
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* @public
|
|
@@ -43,26 +43,26 @@ export declare function createSpecializedBackend(options: CreateSpecializedBacke
|
|
|
43
43
|
* @public
|
|
44
44
|
*/
|
|
45
45
|
export declare interface CreateSpecializedBackendOptions {
|
|
46
|
-
services: ServiceFactory[];
|
|
46
|
+
services: (ServiceFactory | (() => ServiceFactory))[];
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/** @public */
|
|
50
|
-
export declare const databaseFactory: ServiceFactory<PluginDatabaseManager>;
|
|
50
|
+
export declare const databaseFactory: (options?: undefined) => ServiceFactory<PluginDatabaseManager>;
|
|
51
51
|
|
|
52
52
|
/** @public */
|
|
53
|
-
export declare const discoveryFactory: ServiceFactory<PluginEndpointDiscovery>;
|
|
53
|
+
export declare const discoveryFactory: (options?: undefined) => ServiceFactory<PluginEndpointDiscovery>;
|
|
54
54
|
|
|
55
55
|
/** @public */
|
|
56
|
-
export declare const httpRouterFactory: ServiceFactory<HttpRouterService>;
|
|
56
|
+
export declare const httpRouterFactory: (options?: undefined) => ServiceFactory<HttpRouterService>;
|
|
57
57
|
|
|
58
58
|
/** @public */
|
|
59
|
-
export declare const loggerFactory: ServiceFactory<Logger>;
|
|
59
|
+
export declare const loggerFactory: (options?: undefined) => ServiceFactory<Logger>;
|
|
60
60
|
|
|
61
61
|
/** @public */
|
|
62
|
-
export declare const permissionsFactory: ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
62
|
+
export declare const permissionsFactory: (options?: undefined) => ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
63
63
|
|
|
64
64
|
/** @public */
|
|
65
|
-
export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
65
|
+
export declare const schedulerFactory: (options?: undefined) => ServiceFactory<PluginTaskScheduler>;
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
68
|
* @public
|
|
@@ -70,9 +70,9 @@ export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
|
70
70
|
export declare type ServiceOrExtensionPoint<T = unknown> = ExtensionPoint<T> | ServiceRef<T>;
|
|
71
71
|
|
|
72
72
|
/** @public */
|
|
73
|
-
export declare const tokenManagerFactory: ServiceFactory<TokenManager>;
|
|
73
|
+
export declare const tokenManagerFactory: (options?: undefined) => ServiceFactory<TokenManager>;
|
|
74
74
|
|
|
75
75
|
/** @public */
|
|
76
|
-
export declare const urlReaderFactory: ServiceFactory<UrlReader>;
|
|
76
|
+
export declare const urlReaderFactory: (options?: undefined) => ServiceFactory<UrlReader>;
|
|
77
77
|
|
|
78
78
|
export { }
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/backend-app-api",
|
|
3
3
|
"description": "Core API used by Backstage backend apps",
|
|
4
|
-
"version": "0.2.1-next.
|
|
4
|
+
"version": "0.2.1-next.2",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"publishConfig": {
|
|
@@ -33,21 +33,21 @@
|
|
|
33
33
|
"start": "backstage-cli package start"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@backstage/backend-common": "^0.15.1-next.
|
|
37
|
-
"@backstage/backend-plugin-api": "^0.1.2-next.
|
|
38
|
-
"@backstage/backend-tasks": "^0.3.5-next.
|
|
39
|
-
"@backstage/errors": "^1.1.0",
|
|
40
|
-
"@backstage/plugin-permission-node": "^0.6.5-next.
|
|
36
|
+
"@backstage/backend-common": "^0.15.1-next.3",
|
|
37
|
+
"@backstage/backend-plugin-api": "^0.1.2-next.2",
|
|
38
|
+
"@backstage/backend-tasks": "^0.3.5-next.1",
|
|
39
|
+
"@backstage/errors": "^1.1.1-next.0",
|
|
40
|
+
"@backstage/plugin-permission-node": "^0.6.5-next.3",
|
|
41
41
|
"express": "^4.17.1",
|
|
42
42
|
"express-promise-router": "^4.1.0",
|
|
43
43
|
"winston": "^3.2.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@backstage/cli": "^0.19.0-next.
|
|
46
|
+
"@backstage/cli": "^0.19.0-next.3"
|
|
47
47
|
},
|
|
48
48
|
"files": [
|
|
49
49
|
"dist",
|
|
50
50
|
"alpha"
|
|
51
51
|
],
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "2f458448f850dc68a711e2f31d14a91f96cf175d"
|
|
53
53
|
}
|