@backstage/backend-app-api 0.1.1-next.0 → 0.2.1-next.1
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 +39 -0
- package/alpha/package.json +1 -1
- package/dist/index.alpha.d.ts +54 -6
- package/dist/index.beta.d.ts +54 -6
- package/dist/index.cjs.js +296 -249
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +54 -6
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @backstage/backend-app-api
|
|
2
2
|
|
|
3
|
+
## 0.2.1-next.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2c57c0c499: Made `ApiRef.defaultFactory` internal.
|
|
8
|
+
- af6bb42c68: Updated `ServiceRegistry` to not initialize factories more than once.
|
|
9
|
+
- 1f384c5644: Improved error messaging when failing to instantiate services.
|
|
10
|
+
- Updated dependencies
|
|
11
|
+
- @backstage/backend-plugin-api@0.1.2-next.1
|
|
12
|
+
- @backstage/backend-common@0.15.1-next.2
|
|
13
|
+
- @backstage/plugin-permission-node@0.6.5-next.2
|
|
14
|
+
|
|
15
|
+
## 0.2.1-next.0
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- de3347ca74: Updated usages of `ServiceFactory`.
|
|
20
|
+
- Updated dependencies
|
|
21
|
+
- @backstage/backend-common@0.15.1-next.0
|
|
22
|
+
- @backstage/backend-tasks@0.3.5-next.0
|
|
23
|
+
- @backstage/backend-plugin-api@0.1.2-next.0
|
|
24
|
+
- @backstage/plugin-permission-node@0.6.5-next.0
|
|
25
|
+
|
|
26
|
+
## 0.2.0
|
|
27
|
+
|
|
28
|
+
### Minor Changes
|
|
29
|
+
|
|
30
|
+
- 5df230d48c: Introduced a new `backend-defaults` package carrying `createBackend` which was previously exported from `backend-app-api`.
|
|
31
|
+
The `backend-app-api` package now exports the `createSpecializedBacked` that does not add any service factories by default.
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- 0599732ec0: Refactored experimental backend system with new type names.
|
|
36
|
+
- Updated dependencies
|
|
37
|
+
- @backstage/backend-common@0.15.0
|
|
38
|
+
- @backstage/backend-plugin-api@0.1.1
|
|
39
|
+
- @backstage/backend-tasks@0.3.4
|
|
40
|
+
- @backstage/plugin-permission-node@0.6.4
|
|
41
|
+
|
|
3
42
|
## 0.1.1-next.0
|
|
4
43
|
|
|
5
44
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/dist/index.alpha.d.ts
CHANGED
|
@@ -4,27 +4,75 @@
|
|
|
4
4
|
* @packageDocumentation
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { BackendFeature } from '@backstage/backend-plugin-api';
|
|
8
|
+
import { Config } from '@backstage/config';
|
|
9
|
+
import { ExtensionPoint } from '@backstage/backend-plugin-api';
|
|
10
|
+
import { HttpRouterService } from '@backstage/backend-plugin-api';
|
|
11
|
+
import { Logger } from '@backstage/backend-plugin-api';
|
|
12
|
+
import { PermissionAuthorizer } from '@backstage/plugin-permission-common';
|
|
13
|
+
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
|
|
14
|
+
import { PluginCacheManager } from '@backstage/backend-common';
|
|
15
|
+
import { PluginDatabaseManager } from '@backstage/backend-common';
|
|
16
|
+
import { PluginEndpointDiscovery } from '@backstage/backend-common';
|
|
17
|
+
import { PluginTaskScheduler } from '@backstage/backend-tasks';
|
|
18
|
+
import { ServiceFactory } from '@backstage/backend-plugin-api';
|
|
19
|
+
import { ServiceRef } from '@backstage/backend-plugin-api';
|
|
20
|
+
import { TokenManager } from '@backstage/backend-common';
|
|
21
|
+
import { UrlReader } from '@backstage/backend-common';
|
|
9
22
|
|
|
10
23
|
/**
|
|
11
24
|
* @public
|
|
12
25
|
*/
|
|
13
26
|
export declare interface Backend {
|
|
14
|
-
add(
|
|
27
|
+
add(feature: BackendFeature): void;
|
|
15
28
|
start(): Promise<void>;
|
|
16
29
|
}
|
|
17
30
|
|
|
31
|
+
/** @public */
|
|
32
|
+
export declare const cacheFactory: ServiceFactory<PluginCacheManager>;
|
|
33
|
+
|
|
34
|
+
/** @public */
|
|
35
|
+
export declare const configFactory: ServiceFactory<Config>;
|
|
36
|
+
|
|
18
37
|
/**
|
|
19
38
|
* @public
|
|
20
39
|
*/
|
|
21
|
-
export declare function
|
|
40
|
+
export declare function createSpecializedBackend(options: CreateSpecializedBackendOptions): Backend;
|
|
22
41
|
|
|
23
42
|
/**
|
|
24
43
|
* @public
|
|
25
44
|
*/
|
|
26
|
-
export declare interface
|
|
27
|
-
|
|
45
|
+
export declare interface CreateSpecializedBackendOptions {
|
|
46
|
+
services: ServiceFactory[];
|
|
28
47
|
}
|
|
29
48
|
|
|
49
|
+
/** @public */
|
|
50
|
+
export declare const databaseFactory: ServiceFactory<PluginDatabaseManager>;
|
|
51
|
+
|
|
52
|
+
/** @public */
|
|
53
|
+
export declare const discoveryFactory: ServiceFactory<PluginEndpointDiscovery>;
|
|
54
|
+
|
|
55
|
+
/** @public */
|
|
56
|
+
export declare const httpRouterFactory: ServiceFactory<HttpRouterService>;
|
|
57
|
+
|
|
58
|
+
/** @public */
|
|
59
|
+
export declare const loggerFactory: ServiceFactory<Logger>;
|
|
60
|
+
|
|
61
|
+
/** @public */
|
|
62
|
+
export declare const permissionsFactory: ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
63
|
+
|
|
64
|
+
/** @public */
|
|
65
|
+
export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export declare type ServiceOrExtensionPoint<T = unknown> = ExtensionPoint<T> | ServiceRef<T>;
|
|
71
|
+
|
|
72
|
+
/** @public */
|
|
73
|
+
export declare const tokenManagerFactory: ServiceFactory<TokenManager>;
|
|
74
|
+
|
|
75
|
+
/** @public */
|
|
76
|
+
export declare const urlReaderFactory: ServiceFactory<UrlReader>;
|
|
77
|
+
|
|
30
78
|
export { }
|
package/dist/index.beta.d.ts
CHANGED
|
@@ -4,27 +4,75 @@
|
|
|
4
4
|
* @packageDocumentation
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { BackendFeature } from '@backstage/backend-plugin-api';
|
|
8
|
+
import { Config } from '@backstage/config';
|
|
9
|
+
import { ExtensionPoint } from '@backstage/backend-plugin-api';
|
|
10
|
+
import { HttpRouterService } from '@backstage/backend-plugin-api';
|
|
11
|
+
import { Logger } from '@backstage/backend-plugin-api';
|
|
12
|
+
import { PermissionAuthorizer } from '@backstage/plugin-permission-common';
|
|
13
|
+
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
|
|
14
|
+
import { PluginCacheManager } from '@backstage/backend-common';
|
|
15
|
+
import { PluginDatabaseManager } from '@backstage/backend-common';
|
|
16
|
+
import { PluginEndpointDiscovery } from '@backstage/backend-common';
|
|
17
|
+
import { PluginTaskScheduler } from '@backstage/backend-tasks';
|
|
18
|
+
import { ServiceFactory } from '@backstage/backend-plugin-api';
|
|
19
|
+
import { ServiceRef } from '@backstage/backend-plugin-api';
|
|
20
|
+
import { TokenManager } from '@backstage/backend-common';
|
|
21
|
+
import { UrlReader } from '@backstage/backend-common';
|
|
9
22
|
|
|
10
23
|
/**
|
|
11
24
|
* @public
|
|
12
25
|
*/
|
|
13
26
|
export declare interface Backend {
|
|
14
|
-
add(
|
|
27
|
+
add(feature: BackendFeature): void;
|
|
15
28
|
start(): Promise<void>;
|
|
16
29
|
}
|
|
17
30
|
|
|
31
|
+
/** @public */
|
|
32
|
+
export declare const cacheFactory: ServiceFactory<PluginCacheManager>;
|
|
33
|
+
|
|
34
|
+
/** @public */
|
|
35
|
+
export declare const configFactory: ServiceFactory<Config>;
|
|
36
|
+
|
|
18
37
|
/**
|
|
19
38
|
* @public
|
|
20
39
|
*/
|
|
21
|
-
export declare function
|
|
40
|
+
export declare function createSpecializedBackend(options: CreateSpecializedBackendOptions): Backend;
|
|
22
41
|
|
|
23
42
|
/**
|
|
24
43
|
* @public
|
|
25
44
|
*/
|
|
26
|
-
export declare interface
|
|
27
|
-
|
|
45
|
+
export declare interface CreateSpecializedBackendOptions {
|
|
46
|
+
services: ServiceFactory[];
|
|
28
47
|
}
|
|
29
48
|
|
|
49
|
+
/** @public */
|
|
50
|
+
export declare const databaseFactory: ServiceFactory<PluginDatabaseManager>;
|
|
51
|
+
|
|
52
|
+
/** @public */
|
|
53
|
+
export declare const discoveryFactory: ServiceFactory<PluginEndpointDiscovery>;
|
|
54
|
+
|
|
55
|
+
/** @public */
|
|
56
|
+
export declare const httpRouterFactory: ServiceFactory<HttpRouterService>;
|
|
57
|
+
|
|
58
|
+
/** @public */
|
|
59
|
+
export declare const loggerFactory: ServiceFactory<Logger>;
|
|
60
|
+
|
|
61
|
+
/** @public */
|
|
62
|
+
export declare const permissionsFactory: ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
63
|
+
|
|
64
|
+
/** @public */
|
|
65
|
+
export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export declare type ServiceOrExtensionPoint<T = unknown> = ExtensionPoint<T> | ServiceRef<T>;
|
|
71
|
+
|
|
72
|
+
/** @public */
|
|
73
|
+
export declare const tokenManagerFactory: ServiceFactory<TokenManager>;
|
|
74
|
+
|
|
75
|
+
/** @public */
|
|
76
|
+
export declare const urlReaderFactory: ServiceFactory<UrlReader>;
|
|
77
|
+
|
|
30
78
|
export { }
|
package/dist/index.cjs.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var errors = require('@backstage/errors');
|
|
5
6
|
var backendCommon = require('@backstage/backend-common');
|
|
6
7
|
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
7
8
|
var pluginPermissionNode = require('@backstage/plugin-permission-node');
|
|
@@ -12,192 +13,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
12
13
|
|
|
13
14
|
var Router__default = /*#__PURE__*/_interopDefaultLegacy(Router);
|
|
14
15
|
|
|
15
|
-
const cacheFactory = backendPluginApi.createServiceFactory({
|
|
16
|
-
service: backendPluginApi.cacheServiceRef,
|
|
17
|
-
deps: {
|
|
18
|
-
configFactory: backendPluginApi.configServiceRef
|
|
19
|
-
},
|
|
20
|
-
factory: async ({ configFactory }) => {
|
|
21
|
-
const config = await configFactory("root");
|
|
22
|
-
const cacheManager = backendCommon.CacheManager.fromConfig(config);
|
|
23
|
-
return async (pluginId) => {
|
|
24
|
-
return cacheManager.forPlugin(pluginId);
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
const configFactory = backendPluginApi.createServiceFactory({
|
|
30
|
-
service: backendPluginApi.configServiceRef,
|
|
31
|
-
deps: {
|
|
32
|
-
loggerFactory: backendPluginApi.loggerServiceRef
|
|
33
|
-
},
|
|
34
|
-
factory: async ({ loggerFactory }) => {
|
|
35
|
-
const logger = await loggerFactory("root");
|
|
36
|
-
const config = await backendCommon.loadBackendConfig({
|
|
37
|
-
argv: process.argv,
|
|
38
|
-
logger: backendPluginApi.loggerToWinstonLogger(logger)
|
|
39
|
-
});
|
|
40
|
-
return async () => {
|
|
41
|
-
return config;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
const databaseFactory = backendPluginApi.createServiceFactory({
|
|
47
|
-
service: backendPluginApi.databaseServiceRef,
|
|
48
|
-
deps: {
|
|
49
|
-
configFactory: backendPluginApi.configServiceRef
|
|
50
|
-
},
|
|
51
|
-
factory: async ({ configFactory }) => {
|
|
52
|
-
const config = await configFactory("root");
|
|
53
|
-
const databaseManager = backendCommon.DatabaseManager.fromConfig(config);
|
|
54
|
-
return async (pluginId) => {
|
|
55
|
-
return databaseManager.forPlugin(pluginId);
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
const discoveryFactory = backendPluginApi.createServiceFactory({
|
|
61
|
-
service: backendPluginApi.discoveryServiceRef,
|
|
62
|
-
deps: {
|
|
63
|
-
configFactory: backendPluginApi.configServiceRef
|
|
64
|
-
},
|
|
65
|
-
factory: async ({ configFactory }) => {
|
|
66
|
-
const config = await configFactory("root");
|
|
67
|
-
const discovery = backendCommon.SingleHostDiscovery.fromConfig(config);
|
|
68
|
-
return async () => {
|
|
69
|
-
return discovery;
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
class BackstageLogger {
|
|
75
|
-
constructor(winston) {
|
|
76
|
-
this.winston = winston;
|
|
77
|
-
}
|
|
78
|
-
static fromWinston(logger) {
|
|
79
|
-
return new BackstageLogger(logger);
|
|
80
|
-
}
|
|
81
|
-
info(message, ...meta) {
|
|
82
|
-
this.winston.info(message, ...meta);
|
|
83
|
-
}
|
|
84
|
-
child(fields) {
|
|
85
|
-
return new BackstageLogger(this.winston.child(fields));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
const loggerFactory = backendPluginApi.createServiceFactory({
|
|
89
|
-
service: backendPluginApi.loggerServiceRef,
|
|
90
|
-
deps: {},
|
|
91
|
-
factory: async () => {
|
|
92
|
-
const root = BackstageLogger.fromWinston(backendCommon.createRootLogger());
|
|
93
|
-
return async (pluginId) => {
|
|
94
|
-
return root.child({ pluginId });
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
const permissionsFactory = backendPluginApi.createServiceFactory({
|
|
100
|
-
service: backendPluginApi.permissionsServiceRef,
|
|
101
|
-
deps: {
|
|
102
|
-
configFactory: backendPluginApi.configServiceRef,
|
|
103
|
-
discoveryFactory: backendPluginApi.discoveryServiceRef,
|
|
104
|
-
tokenManagerFactory: backendPluginApi.tokenManagerServiceRef
|
|
105
|
-
},
|
|
106
|
-
factory: async ({ configFactory, discoveryFactory, tokenManagerFactory }) => {
|
|
107
|
-
const config = await configFactory("root");
|
|
108
|
-
const discovery = await discoveryFactory("root");
|
|
109
|
-
const tokenManager = await tokenManagerFactory("root");
|
|
110
|
-
const permissions = pluginPermissionNode.ServerPermissionClient.fromConfig(config, {
|
|
111
|
-
discovery,
|
|
112
|
-
tokenManager
|
|
113
|
-
});
|
|
114
|
-
return async (_pluginId) => {
|
|
115
|
-
return permissions;
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
const schedulerFactory = backendPluginApi.createServiceFactory({
|
|
121
|
-
service: backendPluginApi.schedulerServiceRef,
|
|
122
|
-
deps: {
|
|
123
|
-
configFactory: backendPluginApi.configServiceRef
|
|
124
|
-
},
|
|
125
|
-
factory: async ({ configFactory }) => {
|
|
126
|
-
const config = await configFactory("root");
|
|
127
|
-
const taskScheduler = backendTasks.TaskScheduler.fromConfig(config);
|
|
128
|
-
return async (pluginId) => {
|
|
129
|
-
return taskScheduler.forPlugin(pluginId);
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
const tokenManagerFactory = backendPluginApi.createServiceFactory({
|
|
135
|
-
service: backendPluginApi.tokenManagerServiceRef,
|
|
136
|
-
deps: {
|
|
137
|
-
configFactory: backendPluginApi.configServiceRef,
|
|
138
|
-
loggerFactory: backendPluginApi.loggerServiceRef
|
|
139
|
-
},
|
|
140
|
-
factory: async ({ configFactory, loggerFactory }) => {
|
|
141
|
-
const logger = await loggerFactory("root");
|
|
142
|
-
const config = await configFactory("root");
|
|
143
|
-
return async (_pluginId) => {
|
|
144
|
-
return backendCommon.ServerTokenManager.fromConfig(config, {
|
|
145
|
-
logger: backendPluginApi.loggerToWinstonLogger(logger)
|
|
146
|
-
});
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
const urlReaderFactory = backendPluginApi.createServiceFactory({
|
|
152
|
-
service: backendPluginApi.urlReaderServiceRef,
|
|
153
|
-
deps: {
|
|
154
|
-
configFactory: backendPluginApi.configServiceRef,
|
|
155
|
-
loggerFactory: backendPluginApi.loggerServiceRef
|
|
156
|
-
},
|
|
157
|
-
factory: async ({ configFactory, loggerFactory }) => {
|
|
158
|
-
return async (pluginId) => {
|
|
159
|
-
const logger = await loggerFactory(pluginId);
|
|
160
|
-
return backendCommon.UrlReaders.default({
|
|
161
|
-
logger: backendPluginApi.loggerToWinstonLogger(logger),
|
|
162
|
-
config: await configFactory(pluginId)
|
|
163
|
-
});
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
const httpRouterFactory = backendPluginApi.createServiceFactory({
|
|
169
|
-
service: backendPluginApi.httpRouterServiceRef,
|
|
170
|
-
deps: {
|
|
171
|
-
configFactory: backendPluginApi.configServiceRef
|
|
172
|
-
},
|
|
173
|
-
factory: async ({ configFactory }) => {
|
|
174
|
-
const rootRouter = Router__default["default"]();
|
|
175
|
-
const service = backendCommon.createServiceBuilder(module).loadConfig(await configFactory("root")).addRouter("", rootRouter);
|
|
176
|
-
await service.start();
|
|
177
|
-
return async (pluginId) => {
|
|
178
|
-
const path = pluginId ? `/api/${pluginId}` : "";
|
|
179
|
-
return {
|
|
180
|
-
use(handler) {
|
|
181
|
-
rootRouter.use(path, handler);
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
const defaultServiceFactories = [
|
|
189
|
-
cacheFactory,
|
|
190
|
-
configFactory,
|
|
191
|
-
databaseFactory,
|
|
192
|
-
discoveryFactory,
|
|
193
|
-
loggerFactory,
|
|
194
|
-
permissionsFactory,
|
|
195
|
-
schedulerFactory,
|
|
196
|
-
tokenManagerFactory,
|
|
197
|
-
urlReaderFactory,
|
|
198
|
-
httpRouterFactory
|
|
199
|
-
];
|
|
200
|
-
|
|
201
16
|
var __accessCheck$2 = (obj, member, msg) => {
|
|
202
17
|
if (!member.has(obj))
|
|
203
18
|
throw TypeError("Cannot " + msg);
|
|
@@ -220,37 +35,33 @@ var __privateMethod = (obj, member, method) => {
|
|
|
220
35
|
__accessCheck$2(obj, member, "access private method");
|
|
221
36
|
return method;
|
|
222
37
|
};
|
|
223
|
-
var _started,
|
|
38
|
+
var _started, _features, _registerInits, _extensionPoints, _serviceHolder, _getInitDeps, getInitDeps_fn, _resolveInitOrder, resolveInitOrder_fn;
|
|
224
39
|
class BackendInitializer {
|
|
225
40
|
constructor(serviceHolder) {
|
|
226
41
|
__privateAdd$2(this, _getInitDeps);
|
|
227
42
|
__privateAdd$2(this, _resolveInitOrder);
|
|
228
43
|
__privateAdd$2(this, _started, false);
|
|
229
|
-
__privateAdd$2(this,
|
|
44
|
+
__privateAdd$2(this, _features, /* @__PURE__ */ new Map());
|
|
230
45
|
__privateAdd$2(this, _registerInits, new Array());
|
|
231
46
|
__privateAdd$2(this, _extensionPoints, /* @__PURE__ */ new Map());
|
|
232
47
|
__privateAdd$2(this, _serviceHolder, void 0);
|
|
233
48
|
__privateSet$2(this, _serviceHolder, serviceHolder);
|
|
234
49
|
}
|
|
235
|
-
add(
|
|
50
|
+
add(feature, options) {
|
|
236
51
|
if (__privateGet$2(this, _started)) {
|
|
237
|
-
throw new Error(
|
|
238
|
-
"extension can not be added after the backend has started"
|
|
239
|
-
);
|
|
52
|
+
throw new Error("feature can not be added after the backend has started");
|
|
240
53
|
}
|
|
241
|
-
__privateGet$2(this,
|
|
54
|
+
__privateGet$2(this, _features).set(feature, options);
|
|
242
55
|
}
|
|
243
56
|
async start() {
|
|
244
|
-
console.log(`Starting backend`);
|
|
245
57
|
if (__privateGet$2(this, _started)) {
|
|
246
58
|
throw new Error("Backend has already started");
|
|
247
59
|
}
|
|
248
60
|
__privateSet$2(this, _started, true);
|
|
249
|
-
for (const [
|
|
61
|
+
for (const [feature] of __privateGet$2(this, _features)) {
|
|
250
62
|
const provides = /* @__PURE__ */ new Set();
|
|
251
63
|
let registerInit = void 0;
|
|
252
|
-
|
|
253
|
-
extension.register({
|
|
64
|
+
feature.register({
|
|
254
65
|
registerExtensionPoint: (extensionPointRef, impl) => {
|
|
255
66
|
if (registerInit) {
|
|
256
67
|
throw new Error("registerExtensionPoint called after registerInit");
|
|
@@ -266,7 +77,7 @@ class BackendInitializer {
|
|
|
266
77
|
throw new Error("registerInit must only be called once");
|
|
267
78
|
}
|
|
268
79
|
registerInit = {
|
|
269
|
-
id:
|
|
80
|
+
id: feature.id,
|
|
270
81
|
provides,
|
|
271
82
|
consumes: new Set(Object.values(registerOptions.deps)),
|
|
272
83
|
deps: registerOptions.deps,
|
|
@@ -276,38 +87,51 @@ class BackendInitializer {
|
|
|
276
87
|
});
|
|
277
88
|
if (!registerInit) {
|
|
278
89
|
throw new Error(
|
|
279
|
-
`registerInit was not called by register in ${
|
|
90
|
+
`registerInit was not called by register in ${feature.id}`
|
|
280
91
|
);
|
|
281
92
|
}
|
|
282
93
|
__privateGet$2(this, _registerInits).push(registerInit);
|
|
283
94
|
}
|
|
284
|
-
this.validateSetup();
|
|
285
95
|
const orderedRegisterResults = __privateMethod(this, _resolveInitOrder, resolveInitOrder_fn).call(this, __privateGet$2(this, _registerInits));
|
|
286
96
|
for (const registerInit of orderedRegisterResults) {
|
|
287
97
|
const deps = await __privateMethod(this, _getInitDeps, getInitDeps_fn).call(this, registerInit.deps, registerInit.id);
|
|
288
98
|
await registerInit.init(deps);
|
|
289
99
|
}
|
|
290
100
|
}
|
|
291
|
-
validateSetup() {
|
|
292
|
-
}
|
|
293
101
|
}
|
|
294
102
|
_started = new WeakMap();
|
|
295
|
-
|
|
103
|
+
_features = new WeakMap();
|
|
296
104
|
_registerInits = new WeakMap();
|
|
297
105
|
_extensionPoints = new WeakMap();
|
|
298
106
|
_serviceHolder = new WeakMap();
|
|
299
107
|
_getInitDeps = new WeakSet();
|
|
300
108
|
getInitDeps_fn = async function(deps, pluginId) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
109
|
+
const result = /* @__PURE__ */ new Map();
|
|
110
|
+
const missingRefs = /* @__PURE__ */ new Set();
|
|
111
|
+
for (const [name, ref] of Object.entries(deps)) {
|
|
112
|
+
const extensionPoint = __privateGet$2(this, _extensionPoints).get(
|
|
113
|
+
ref
|
|
114
|
+
);
|
|
115
|
+
if (extensionPoint) {
|
|
116
|
+
result.set(name, extensionPoint);
|
|
117
|
+
} else {
|
|
118
|
+
const factory = await __privateGet$2(this, _serviceHolder).get(
|
|
119
|
+
ref
|
|
120
|
+
);
|
|
121
|
+
if (factory) {
|
|
122
|
+
result.set(name, await factory(pluginId));
|
|
123
|
+
} else {
|
|
124
|
+
missingRefs.add(ref);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (missingRefs.size > 0) {
|
|
129
|
+
const missing = Array.from(missingRefs).join(", ");
|
|
130
|
+
throw new Error(
|
|
131
|
+
`No extension point or service available for the following ref(s): ${missing}`
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
return Object.fromEntries(result);
|
|
311
135
|
};
|
|
312
136
|
_resolveInitOrder = new WeakSet();
|
|
313
137
|
resolveInitOrder_fn = function(registerInits) {
|
|
@@ -317,15 +141,14 @@ resolveInitOrder_fn = function(registerInits) {
|
|
|
317
141
|
const toRemove = /* @__PURE__ */ new Set();
|
|
318
142
|
for (const registerInit of registerInitsToOrder) {
|
|
319
143
|
const unInitializedDependents = [];
|
|
320
|
-
for (const
|
|
144
|
+
for (const provided of registerInit.provides) {
|
|
321
145
|
if (registerInitsToOrder.some(
|
|
322
|
-
(init) => init !== registerInit && init.consumes.has(
|
|
146
|
+
(init) => init !== registerInit && init.consumes.has(provided)
|
|
323
147
|
)) {
|
|
324
|
-
unInitializedDependents.push(
|
|
148
|
+
unInitializedDependents.push(provided);
|
|
325
149
|
}
|
|
326
150
|
}
|
|
327
151
|
if (unInitializedDependents.length === 0) {
|
|
328
|
-
console.log(`DEBUG: pushed ${registerInit.id} to results`);
|
|
329
152
|
orderedRegisterInits.push(registerInit);
|
|
330
153
|
toRemove.add(registerInit);
|
|
331
154
|
}
|
|
@@ -353,44 +176,89 @@ var __privateSet$1 = (obj, member, value, setter) => {
|
|
|
353
176
|
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
354
177
|
return value;
|
|
355
178
|
};
|
|
356
|
-
var
|
|
179
|
+
var _providedFactories, _loadedDefaultFactories, _implementations;
|
|
357
180
|
class ServiceRegistry {
|
|
358
181
|
constructor(factories) {
|
|
182
|
+
__privateAdd$1(this, _providedFactories, void 0);
|
|
183
|
+
__privateAdd$1(this, _loadedDefaultFactories, void 0);
|
|
359
184
|
__privateAdd$1(this, _implementations, void 0);
|
|
360
|
-
|
|
361
|
-
__privateSet$1(this,
|
|
185
|
+
__privateSet$1(this, _providedFactories, new Map(factories.map((f) => [f.service.id, f])));
|
|
186
|
+
__privateSet$1(this, _loadedDefaultFactories, /* @__PURE__ */ new Map());
|
|
362
187
|
__privateSet$1(this, _implementations, /* @__PURE__ */ new Map());
|
|
363
188
|
}
|
|
364
189
|
get(ref) {
|
|
365
|
-
|
|
366
|
-
|
|
190
|
+
let factory = __privateGet$1(this, _providedFactories).get(ref.id);
|
|
191
|
+
const { __defaultFactory: defaultFactory } = ref;
|
|
192
|
+
if (!factory && !defaultFactory) {
|
|
367
193
|
return void 0;
|
|
368
194
|
}
|
|
369
195
|
return async (pluginId) => {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
if (
|
|
373
|
-
|
|
196
|
+
if (!factory) {
|
|
197
|
+
let loadedFactory = __privateGet$1(this, _loadedDefaultFactories).get(defaultFactory);
|
|
198
|
+
if (!loadedFactory) {
|
|
199
|
+
loadedFactory = Promise.resolve().then(
|
|
200
|
+
() => defaultFactory(ref)
|
|
201
|
+
);
|
|
202
|
+
__privateGet$1(this, _loadedDefaultFactories).set(defaultFactory, loadedFactory);
|
|
374
203
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
204
|
+
factory = await loadedFactory.catch((error) => {
|
|
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
|
+
});
|
|
378
211
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
])
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
212
|
+
let implementation = __privateGet$1(this, _implementations).get(factory);
|
|
213
|
+
if (!implementation) {
|
|
214
|
+
const missingRefs = new Array();
|
|
215
|
+
const factoryDeps = {};
|
|
216
|
+
for (const [name, serviceRef] of Object.entries(factory.deps)) {
|
|
217
|
+
const target = this.get(serviceRef);
|
|
218
|
+
if (!target) {
|
|
219
|
+
missingRefs.push(serviceRef);
|
|
220
|
+
} else {
|
|
221
|
+
factoryDeps[name] = target;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
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
|
+
implementation = {
|
|
231
|
+
factoryFunc: Promise.resolve().then(() => factory.factory(factoryDeps)).catch((error) => {
|
|
232
|
+
throw new Error(
|
|
233
|
+
`Failed to instantiate service '${ref.id}' because the top-level factory function threw an error, ${errors.stringifyError(
|
|
234
|
+
error
|
|
235
|
+
)}`
|
|
236
|
+
);
|
|
237
|
+
}),
|
|
238
|
+
byPlugin: /* @__PURE__ */ new Map()
|
|
239
|
+
};
|
|
240
|
+
__privateGet$1(this, _implementations).set(factory, implementation);
|
|
241
|
+
}
|
|
242
|
+
let result = implementation.byPlugin.get(pluginId);
|
|
243
|
+
if (!result) {
|
|
244
|
+
result = implementation.factoryFunc.then(
|
|
245
|
+
(func) => Promise.resolve().then(() => func(pluginId)).catch((error) => {
|
|
246
|
+
throw new Error(
|
|
247
|
+
`Failed to instantiate service '${ref.id}' for '${pluginId}' because the factory function threw an error, ${errors.stringifyError(
|
|
248
|
+
error
|
|
249
|
+
)}`
|
|
250
|
+
);
|
|
251
|
+
})
|
|
252
|
+
);
|
|
253
|
+
implementation.byPlugin.set(pluginId, result);
|
|
254
|
+
}
|
|
255
|
+
return result;
|
|
389
256
|
};
|
|
390
257
|
}
|
|
391
258
|
}
|
|
259
|
+
_providedFactories = new WeakMap();
|
|
260
|
+
_loadedDefaultFactories = new WeakMap();
|
|
392
261
|
_implementations = new WeakMap();
|
|
393
|
-
_factories = new WeakMap();
|
|
394
262
|
|
|
395
263
|
var __accessCheck = (obj, member, msg) => {
|
|
396
264
|
if (!member.has(obj))
|
|
@@ -418,8 +286,8 @@ class BackstageBackend {
|
|
|
418
286
|
__privateSet(this, _services, new ServiceRegistry(apiFactories));
|
|
419
287
|
__privateSet(this, _initializer, new BackendInitializer(__privateGet(this, _services)));
|
|
420
288
|
}
|
|
421
|
-
add(
|
|
422
|
-
__privateGet(this, _initializer).add(
|
|
289
|
+
add(feature) {
|
|
290
|
+
__privateGet(this, _initializer).add(feature);
|
|
423
291
|
}
|
|
424
292
|
async start() {
|
|
425
293
|
await __privateGet(this, _initializer).start();
|
|
@@ -428,13 +296,192 @@ class BackstageBackend {
|
|
|
428
296
|
_services = new WeakMap();
|
|
429
297
|
_initializer = new WeakMap();
|
|
430
298
|
|
|
431
|
-
function
|
|
432
|
-
|
|
433
|
-
return new BackstageBackend([
|
|
434
|
-
...defaultServiceFactories,
|
|
435
|
-
...(_a = options == null ? void 0 : options.apis) != null ? _a : []
|
|
436
|
-
]);
|
|
299
|
+
function createSpecializedBackend(options) {
|
|
300
|
+
return new BackstageBackend(options.services);
|
|
437
301
|
}
|
|
438
302
|
|
|
439
|
-
|
|
303
|
+
const cacheFactory = backendPluginApi.createServiceFactory({
|
|
304
|
+
service: backendPluginApi.cacheServiceRef,
|
|
305
|
+
deps: {
|
|
306
|
+
configFactory: backendPluginApi.configServiceRef
|
|
307
|
+
},
|
|
308
|
+
factory: async ({ configFactory }) => {
|
|
309
|
+
const config = await configFactory("root");
|
|
310
|
+
const cacheManager = backendCommon.CacheManager.fromConfig(config);
|
|
311
|
+
return async (pluginId) => {
|
|
312
|
+
return cacheManager.forPlugin(pluginId);
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
const configFactory = backendPluginApi.createServiceFactory({
|
|
318
|
+
service: backendPluginApi.configServiceRef,
|
|
319
|
+
deps: {
|
|
320
|
+
loggerFactory: backendPluginApi.loggerServiceRef
|
|
321
|
+
},
|
|
322
|
+
factory: async ({ loggerFactory }) => {
|
|
323
|
+
const logger = await loggerFactory("root");
|
|
324
|
+
const config = await backendCommon.loadBackendConfig({
|
|
325
|
+
argv: process.argv,
|
|
326
|
+
logger: backendPluginApi.loggerToWinstonLogger(logger)
|
|
327
|
+
});
|
|
328
|
+
return async () => {
|
|
329
|
+
return config;
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
const databaseFactory = backendPluginApi.createServiceFactory({
|
|
335
|
+
service: backendPluginApi.databaseServiceRef,
|
|
336
|
+
deps: {
|
|
337
|
+
configFactory: backendPluginApi.configServiceRef
|
|
338
|
+
},
|
|
339
|
+
factory: async ({ configFactory }) => {
|
|
340
|
+
const config = await configFactory("root");
|
|
341
|
+
const databaseManager = backendCommon.DatabaseManager.fromConfig(config);
|
|
342
|
+
return async (pluginId) => {
|
|
343
|
+
return databaseManager.forPlugin(pluginId);
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
const discoveryFactory = backendPluginApi.createServiceFactory({
|
|
349
|
+
service: backendPluginApi.discoveryServiceRef,
|
|
350
|
+
deps: {
|
|
351
|
+
configFactory: backendPluginApi.configServiceRef
|
|
352
|
+
},
|
|
353
|
+
factory: async ({ configFactory }) => {
|
|
354
|
+
const config = await configFactory("root");
|
|
355
|
+
const discovery = backendCommon.SingleHostDiscovery.fromConfig(config);
|
|
356
|
+
return async () => {
|
|
357
|
+
return discovery;
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
|
|
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
|
+
const loggerFactory = backendPluginApi.createServiceFactory({
|
|
377
|
+
service: backendPluginApi.loggerServiceRef,
|
|
378
|
+
deps: {},
|
|
379
|
+
factory: async () => {
|
|
380
|
+
const root = BackstageLogger.fromWinston(backendCommon.createRootLogger());
|
|
381
|
+
return async (pluginId) => {
|
|
382
|
+
return root.child({ pluginId });
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
const permissionsFactory = backendPluginApi.createServiceFactory({
|
|
388
|
+
service: backendPluginApi.permissionsServiceRef,
|
|
389
|
+
deps: {
|
|
390
|
+
configFactory: backendPluginApi.configServiceRef,
|
|
391
|
+
discoveryFactory: backendPluginApi.discoveryServiceRef,
|
|
392
|
+
tokenManagerFactory: backendPluginApi.tokenManagerServiceRef
|
|
393
|
+
},
|
|
394
|
+
factory: async ({ configFactory, discoveryFactory, tokenManagerFactory }) => {
|
|
395
|
+
const config = await configFactory("root");
|
|
396
|
+
const discovery = await discoveryFactory("root");
|
|
397
|
+
const tokenManager = await tokenManagerFactory("root");
|
|
398
|
+
const permissions = pluginPermissionNode.ServerPermissionClient.fromConfig(config, {
|
|
399
|
+
discovery,
|
|
400
|
+
tokenManager
|
|
401
|
+
});
|
|
402
|
+
return async (_pluginId) => {
|
|
403
|
+
return permissions;
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
const schedulerFactory = backendPluginApi.createServiceFactory({
|
|
409
|
+
service: backendPluginApi.schedulerServiceRef,
|
|
410
|
+
deps: {
|
|
411
|
+
configFactory: backendPluginApi.configServiceRef
|
|
412
|
+
},
|
|
413
|
+
factory: async ({ configFactory }) => {
|
|
414
|
+
const config = await configFactory("root");
|
|
415
|
+
const taskScheduler = backendTasks.TaskScheduler.fromConfig(config);
|
|
416
|
+
return async (pluginId) => {
|
|
417
|
+
return taskScheduler.forPlugin(pluginId);
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
const tokenManagerFactory = backendPluginApi.createServiceFactory({
|
|
423
|
+
service: backendPluginApi.tokenManagerServiceRef,
|
|
424
|
+
deps: {
|
|
425
|
+
configFactory: backendPluginApi.configServiceRef,
|
|
426
|
+
loggerFactory: backendPluginApi.loggerServiceRef
|
|
427
|
+
},
|
|
428
|
+
factory: async ({ configFactory, loggerFactory }) => {
|
|
429
|
+
const logger = await loggerFactory("root");
|
|
430
|
+
const config = await configFactory("root");
|
|
431
|
+
return async (_pluginId) => {
|
|
432
|
+
return backendCommon.ServerTokenManager.fromConfig(config, {
|
|
433
|
+
logger: backendPluginApi.loggerToWinstonLogger(logger)
|
|
434
|
+
});
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
const urlReaderFactory = backendPluginApi.createServiceFactory({
|
|
440
|
+
service: backendPluginApi.urlReaderServiceRef,
|
|
441
|
+
deps: {
|
|
442
|
+
configFactory: backendPluginApi.configServiceRef,
|
|
443
|
+
loggerFactory: backendPluginApi.loggerServiceRef
|
|
444
|
+
},
|
|
445
|
+
factory: async ({ configFactory, loggerFactory }) => {
|
|
446
|
+
return async (pluginId) => {
|
|
447
|
+
const logger = await loggerFactory(pluginId);
|
|
448
|
+
return backendCommon.UrlReaders.default({
|
|
449
|
+
logger: backendPluginApi.loggerToWinstonLogger(logger),
|
|
450
|
+
config: await configFactory(pluginId)
|
|
451
|
+
});
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
const httpRouterFactory = backendPluginApi.createServiceFactory({
|
|
457
|
+
service: backendPluginApi.httpRouterServiceRef,
|
|
458
|
+
deps: {
|
|
459
|
+
configFactory: backendPluginApi.configServiceRef
|
|
460
|
+
},
|
|
461
|
+
factory: async ({ configFactory }) => {
|
|
462
|
+
const rootRouter = Router__default["default"]();
|
|
463
|
+
const service = backendCommon.createServiceBuilder(module).loadConfig(await configFactory("root")).addRouter("", rootRouter);
|
|
464
|
+
await service.start();
|
|
465
|
+
return async (pluginId) => {
|
|
466
|
+
const path = pluginId ? `/api/${pluginId}` : "";
|
|
467
|
+
return {
|
|
468
|
+
use(handler) {
|
|
469
|
+
rootRouter.use(path, handler);
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
exports.cacheFactory = cacheFactory;
|
|
477
|
+
exports.configFactory = configFactory;
|
|
478
|
+
exports.createSpecializedBackend = createSpecializedBackend;
|
|
479
|
+
exports.databaseFactory = databaseFactory;
|
|
480
|
+
exports.discoveryFactory = discoveryFactory;
|
|
481
|
+
exports.httpRouterFactory = httpRouterFactory;
|
|
482
|
+
exports.loggerFactory = loggerFactory;
|
|
483
|
+
exports.permissionsFactory = permissionsFactory;
|
|
484
|
+
exports.schedulerFactory = schedulerFactory;
|
|
485
|
+
exports.tokenManagerFactory = tokenManagerFactory;
|
|
486
|
+
exports.urlReaderFactory = urlReaderFactory;
|
|
440
487
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../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","../src/services/implementations/index.ts","../src/wiring/BackendInitializer.ts","../src/wiring/ServiceRegistry.ts","../src/wiring/BackstageBackend.ts","../src/wiring/types.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 { CacheManager } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n cacheServiceRef,\n} from '@backstage/backend-plugin-api';\n\n// TODO: Work out some naming and implementation patterns for these\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\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\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\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\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\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\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\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\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\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","/*\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 { cacheFactory } from './cacheService';\nimport { configFactory } from './configService';\nimport { databaseFactory } from './databaseService';\nimport { discoveryFactory } from './discoveryService';\nimport { loggerFactory } from './loggerService';\nimport { permissionsFactory } from './permissionsService';\nimport { schedulerFactory } from './schedulerService';\nimport { tokenManagerFactory } from './tokenManagerService';\nimport { urlReaderFactory } from './urlReaderService';\nimport { httpRouterFactory } from './httpRouterService';\n\nexport const defaultServiceFactories = [\n cacheFactory,\n configFactory,\n databaseFactory,\n discoveryFactory,\n loggerFactory,\n permissionsFactory,\n schedulerFactory,\n tokenManagerFactory,\n urlReaderFactory,\n httpRouterFactory,\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 BackendRegistrable,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { BackendRegisterInit, ServiceHolder } from './types';\n\ntype ServiceOrExtensionPoint = ExtensionPoint<unknown> | ServiceRef<unknown>;\n\nexport class BackendInitializer {\n #started = false;\n #extensions = new Map<BackendRegistrable, unknown>();\n #registerInits = new Array<BackendRegisterInit>();\n #extensionPoints = new Map<ServiceOrExtensionPoint, 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 return Object.fromEntries(\n await Promise.all(\n Object.entries(deps).map(async ([name, ref]) => [\n name,\n this.#extensionPoints.get(ref) ||\n (await this.#serviceHolder.get(ref as ServiceRef<unknown>)!(\n pluginId,\n )),\n ]),\n ),\n );\n }\n\n add<TOptions>(extension: BackendRegistrable, options?: TOptions) {\n if (this.#started) {\n throw new Error(\n 'extension can not be added after the backend has started',\n );\n }\n this.#extensions.set(extension, options);\n }\n\n async start(): Promise<void> {\n console.log(`Starting backend`);\n if (this.#started) {\n throw new Error('Backend has already started');\n }\n this.#started = true;\n\n for (const [extension] of this.#extensions) {\n const provides = new Set<ServiceRef<unknown>>();\n\n let registerInit: BackendRegisterInit | undefined = undefined;\n\n console.log('Registering', extension.id);\n extension.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: extension.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 ${extension.id}`,\n );\n }\n\n this.#registerInits.push(registerInit);\n }\n\n this.validateSetup();\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 private validateSetup() {}\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 serviceRef of registerInit.provides) {\n if (\n registerInitsToOrder.some(\n init => init !== registerInit && init.consumes.has(serviceRef),\n )\n ) {\n unInitializedDependents.push(serviceRef);\n }\n }\n\n if (unInitializedDependents.length === 0) {\n console.log(`DEBUG: pushed ${registerInit.id} to results`);\n orderedRegisterInits.push(registerInit);\n toRemove.add(registerInit);\n }\n }\n\n registerInitsToOrder = registerInitsToOrder.filter(r => !toRemove.has(r));\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 */\nimport {\n AnyServiceFactory,\n FactoryFunc,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\n\nexport class ServiceRegistry {\n readonly #implementations: Map<string, Map<string, unknown>>;\n readonly #factories: Map<string, AnyServiceFactory>;\n\n constructor(factories: AnyServiceFactory[]) {\n this.#factories = new Map(factories.map(f => [f.service.id, f]));\n this.#implementations = new Map();\n }\n\n get<T>(ref: ServiceRef<T>): FactoryFunc<T> | undefined {\n const factory = this.#factories.get(ref.id);\n if (!factory) {\n return undefined;\n }\n\n return async (pluginId: string): Promise<T> => {\n let implementations = this.#implementations.get(ref.id);\n if (implementations) {\n if (implementations.has(pluginId)) {\n return implementations.get(pluginId) as T;\n }\n } else {\n implementations = new Map();\n this.#implementations.set(ref.id, implementations);\n }\n\n const factoryDeps = Object.fromEntries(\n Object.entries(factory.deps).map(([name, serviceRef]) => [\n name,\n this.get(serviceRef)!, // TODO: throw\n ]),\n );\n\n const factoryFunc = await factory.factory(factoryDeps);\n const implementation = await factoryFunc(pluginId);\n\n implementations.set(pluginId, implementation);\n\n return implementation as T;\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 AnyServiceFactory,\n BackendRegistrable,\n} 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: AnyServiceFactory[]) {\n this.#services = new ServiceRegistry(apiFactories);\n this.#initializer = new BackendInitializer(this.#services);\n }\n\n add(extension: BackendRegistrable): void {\n this.#initializer.add(extension);\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 AnyServiceFactory,\n BackendRegistrable,\n FactoryFunc,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { defaultServiceFactories } from '../services/implementations';\nimport { BackstageBackend } from './BackstageBackend';\n\n/**\n * @public\n */\nexport interface Backend {\n add(extension: BackendRegistrable): void;\n start(): Promise<void>;\n}\n\nexport interface BackendRegisterInit {\n id: string;\n consumes: Set<ServiceRef<unknown>>;\n provides: Set<ServiceRef<unknown>>;\n deps: { [name: string]: ServiceRef<unknown> };\n init: (deps: { [name: string]: unknown }) => Promise<void>;\n}\n\n/**\n * @public\n */\nexport interface CreateBackendOptions {\n apis: AnyServiceFactory[];\n}\n\nexport type ServiceHolder = {\n get<T>(api: ServiceRef<T>): FactoryFunc<T> | undefined;\n};\n\n/**\n * @public\n */\nexport function createBackend(options?: CreateBackendOptions): Backend {\n // TODO: merge with provided APIs\n return new BackstageBackend([\n ...defaultServiceFactories,\n ...(options?.apis ?? []),\n ]);\n}\n"],"names":["createServiceFactory","cacheServiceRef","configServiceRef","CacheManager","loggerServiceRef","loadBackendConfig","loggerToWinstonLogger","databaseServiceRef","DatabaseManager","discoveryServiceRef","SingleHostDiscovery","createRootLogger","permissionsServiceRef","tokenManagerServiceRef","ServerPermissionClient","schedulerServiceRef","TaskScheduler","ServerTokenManager","urlReaderServiceRef","UrlReaders","httpRouterServiceRef","Router","createServiceBuilder","__accessCheck","__privateGet","__privateAdd","__privateSet"],"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 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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,27 +4,75 @@
|
|
|
4
4
|
* @packageDocumentation
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { BackendFeature } from '@backstage/backend-plugin-api';
|
|
8
|
+
import { Config } from '@backstage/config';
|
|
9
|
+
import { ExtensionPoint } from '@backstage/backend-plugin-api';
|
|
10
|
+
import { HttpRouterService } from '@backstage/backend-plugin-api';
|
|
11
|
+
import { Logger } from '@backstage/backend-plugin-api';
|
|
12
|
+
import { PermissionAuthorizer } from '@backstage/plugin-permission-common';
|
|
13
|
+
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
|
|
14
|
+
import { PluginCacheManager } from '@backstage/backend-common';
|
|
15
|
+
import { PluginDatabaseManager } from '@backstage/backend-common';
|
|
16
|
+
import { PluginEndpointDiscovery } from '@backstage/backend-common';
|
|
17
|
+
import { PluginTaskScheduler } from '@backstage/backend-tasks';
|
|
18
|
+
import { ServiceFactory } from '@backstage/backend-plugin-api';
|
|
19
|
+
import { ServiceRef } from '@backstage/backend-plugin-api';
|
|
20
|
+
import { TokenManager } from '@backstage/backend-common';
|
|
21
|
+
import { UrlReader } from '@backstage/backend-common';
|
|
9
22
|
|
|
10
23
|
/**
|
|
11
24
|
* @public
|
|
12
25
|
*/
|
|
13
26
|
export declare interface Backend {
|
|
14
|
-
add(
|
|
27
|
+
add(feature: BackendFeature): void;
|
|
15
28
|
start(): Promise<void>;
|
|
16
29
|
}
|
|
17
30
|
|
|
31
|
+
/** @public */
|
|
32
|
+
export declare const cacheFactory: ServiceFactory<PluginCacheManager>;
|
|
33
|
+
|
|
34
|
+
/** @public */
|
|
35
|
+
export declare const configFactory: ServiceFactory<Config>;
|
|
36
|
+
|
|
18
37
|
/**
|
|
19
38
|
* @public
|
|
20
39
|
*/
|
|
21
|
-
export declare function
|
|
40
|
+
export declare function createSpecializedBackend(options: CreateSpecializedBackendOptions): Backend;
|
|
22
41
|
|
|
23
42
|
/**
|
|
24
43
|
* @public
|
|
25
44
|
*/
|
|
26
|
-
export declare interface
|
|
27
|
-
|
|
45
|
+
export declare interface CreateSpecializedBackendOptions {
|
|
46
|
+
services: ServiceFactory[];
|
|
28
47
|
}
|
|
29
48
|
|
|
49
|
+
/** @public */
|
|
50
|
+
export declare const databaseFactory: ServiceFactory<PluginDatabaseManager>;
|
|
51
|
+
|
|
52
|
+
/** @public */
|
|
53
|
+
export declare const discoveryFactory: ServiceFactory<PluginEndpointDiscovery>;
|
|
54
|
+
|
|
55
|
+
/** @public */
|
|
56
|
+
export declare const httpRouterFactory: ServiceFactory<HttpRouterService>;
|
|
57
|
+
|
|
58
|
+
/** @public */
|
|
59
|
+
export declare const loggerFactory: ServiceFactory<Logger>;
|
|
60
|
+
|
|
61
|
+
/** @public */
|
|
62
|
+
export declare const permissionsFactory: ServiceFactory<PermissionAuthorizer | PermissionEvaluator>;
|
|
63
|
+
|
|
64
|
+
/** @public */
|
|
65
|
+
export declare const schedulerFactory: ServiceFactory<PluginTaskScheduler>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export declare type ServiceOrExtensionPoint<T = unknown> = ExtensionPoint<T> | ServiceRef<T>;
|
|
71
|
+
|
|
72
|
+
/** @public */
|
|
73
|
+
export declare const tokenManagerFactory: ServiceFactory<TokenManager>;
|
|
74
|
+
|
|
75
|
+
/** @public */
|
|
76
|
+
export declare const urlReaderFactory: ServiceFactory<UrlReader>;
|
|
77
|
+
|
|
30
78
|
export { }
|
package/package.json
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/backend-app-api",
|
|
3
3
|
"description": "Core API used by Backstage backend apps",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.1-next.1",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
-
"private": false,
|
|
8
7
|
"publishConfig": {
|
|
9
8
|
"access": "public",
|
|
10
9
|
"main": "dist/index.cjs.js",
|
|
@@ -34,20 +33,21 @@
|
|
|
34
33
|
"start": "backstage-cli package start"
|
|
35
34
|
},
|
|
36
35
|
"dependencies": {
|
|
37
|
-
"@backstage/backend-common": "^0.15.
|
|
38
|
-
"@backstage/backend-plugin-api": "^0.1.
|
|
39
|
-
"@backstage/backend-tasks": "^0.3.
|
|
40
|
-
"@backstage/
|
|
36
|
+
"@backstage/backend-common": "^0.15.1-next.2",
|
|
37
|
+
"@backstage/backend-plugin-api": "^0.1.2-next.1",
|
|
38
|
+
"@backstage/backend-tasks": "^0.3.5-next.0",
|
|
39
|
+
"@backstage/errors": "^1.1.0",
|
|
40
|
+
"@backstage/plugin-permission-node": "^0.6.5-next.2",
|
|
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.
|
|
46
|
+
"@backstage/cli": "^0.19.0-next.2"
|
|
47
47
|
},
|
|
48
48
|
"files": [
|
|
49
49
|
"dist",
|
|
50
50
|
"alpha"
|
|
51
51
|
],
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "24f889f173370f060725fcf9404081e40769beb4"
|
|
53
53
|
}
|