@backstage/backend-dynamic-feature-service 0.0.0-nightly-20240116021644

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.
@@ -0,0 +1,199 @@
1
+ import { BackstagePackageJson, PackageRole, PackagePlatform } from '@backstage/cli-node';
2
+ import { Logger } from 'winston';
3
+ import { Config } from '@backstage/config';
4
+ import { PluginCacheManager, PluginDatabaseManager, UrlReader, PluginEndpointDiscovery, TokenManager } from '@backstage/backend-common';
5
+ import { Router } from 'express';
6
+ import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks';
7
+ import { IdentityApi } from '@backstage/plugin-auth-node';
8
+ import { PermissionEvaluator } from '@backstage/plugin-permission-common';
9
+ import { EventBroker, HttpPostIngressOptions } from '@backstage/plugin-events-node';
10
+ import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
11
+ import { BackendFeature, LoggerService } from '@backstage/backend-plugin-api';
12
+ import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
13
+ import { TemplateAction } from '@backstage/plugin-scaffolder-node';
14
+ import { IndexBuilder } from '@backstage/plugin-search-backend-node';
15
+ import { EventsBackend } from '@backstage/plugin-events-backend';
16
+ import { PermissionPolicy } from '@backstage/plugin-permission-node';
17
+ import { FeatureDiscoveryService } from '@backstage/backend-plugin-api/alpha';
18
+
19
+ /**
20
+ * @public
21
+ */
22
+ interface ModuleLoader {
23
+ bootstrap(backstageRoot: string, dynamicPluginPaths: string[]): Promise<void>;
24
+ load(id: string): Promise<any>;
25
+ }
26
+
27
+ /**
28
+ * @public
29
+ */
30
+ interface ScannedPluginPackage {
31
+ location: URL;
32
+ manifest: ScannedPluginManifest;
33
+ }
34
+ /**
35
+ * @public
36
+ */
37
+ type ScannedPluginManifest = BackstagePackageJson & Required<Pick<BackstagePackageJson, 'main'>> & Required<Pick<BackstagePackageJson, 'backstage'>> & {
38
+ backstage: Required<BackstagePackageJson['backstage']>;
39
+ };
40
+
41
+ /**
42
+ * @public
43
+ *
44
+ * @deprecated
45
+ *
46
+ * Support for the legacy backend system will be removed in the future.
47
+ *
48
+ * When adding a legacy plugin installer entrypoint in your plugin,
49
+ * you should always take the opportunity to also implement support
50
+ * for the new backend system if not already done.
51
+ *
52
+ */
53
+ type LegacyPluginEnvironment = {
54
+ logger: Logger;
55
+ cache: PluginCacheManager;
56
+ database: PluginDatabaseManager;
57
+ config: Config;
58
+ reader: UrlReader;
59
+ discovery: PluginEndpointDiscovery;
60
+ tokenManager: TokenManager;
61
+ permissions: PermissionEvaluator;
62
+ scheduler: PluginTaskScheduler;
63
+ identity: IdentityApi;
64
+ eventBroker: EventBroker;
65
+ pluginProvider: BackendPluginProvider;
66
+ };
67
+ /**
68
+ * @public
69
+ */
70
+ interface DynamicPluginProvider extends FrontendPluginProvider, BackendPluginProvider {
71
+ plugins(): DynamicPlugin[];
72
+ }
73
+ /**
74
+ * @public
75
+ */
76
+ interface BackendPluginProvider {
77
+ backendPlugins(): BackendDynamicPlugin[];
78
+ }
79
+ /**
80
+ * @public
81
+ */
82
+ interface FrontendPluginProvider {
83
+ frontendPlugins(): FrontendDynamicPlugin[];
84
+ }
85
+ /**
86
+ * @public
87
+ */
88
+ interface BaseDynamicPlugin {
89
+ name: string;
90
+ version: string;
91
+ role: PackageRole;
92
+ platform: PackagePlatform;
93
+ }
94
+ /**
95
+ * @public
96
+ */
97
+ type DynamicPlugin = FrontendDynamicPlugin | BackendDynamicPlugin;
98
+ /**
99
+ * @public
100
+ */
101
+ interface FrontendDynamicPlugin extends BaseDynamicPlugin {
102
+ platform: 'web';
103
+ }
104
+ /**
105
+ * @public
106
+ */
107
+ interface BackendDynamicPlugin extends BaseDynamicPlugin {
108
+ platform: 'node';
109
+ installer: BackendDynamicPluginInstaller;
110
+ }
111
+ /**
112
+ * @public
113
+ */
114
+ type BackendDynamicPluginInstaller = LegacyBackendPluginInstaller | NewBackendPluginInstaller;
115
+ /**
116
+ * @public
117
+ */
118
+ interface NewBackendPluginInstaller {
119
+ kind: 'new';
120
+ install(): BackendFeature | BackendFeature[];
121
+ }
122
+ /**
123
+ * @public
124
+ * @deprecated
125
+ *
126
+ * Support for the legacy backend system will be removed in the future.
127
+ *
128
+ * When adding a legacy plugin installer entrypoint in your plugin,
129
+ * you should always take the opportunity to also implement support
130
+ * for the new backend system if not already done.
131
+ *
132
+ */
133
+ interface LegacyBackendPluginInstaller {
134
+ kind: 'legacy';
135
+ router?: {
136
+ pluginID: string;
137
+ createPlugin(env: LegacyPluginEnvironment): Promise<Router>;
138
+ };
139
+ catalog?(builder: CatalogBuilder, env: LegacyPluginEnvironment): void;
140
+ scaffolder?(env: LegacyPluginEnvironment): TemplateAction<any>[];
141
+ search?(indexBuilder: IndexBuilder, schedule: TaskRunner, env: LegacyPluginEnvironment): void;
142
+ events?(eventsBackend: EventsBackend, env: LegacyPluginEnvironment): HttpPostIngressOptions[];
143
+ permissions?: {
144
+ policy?: PermissionPolicy;
145
+ };
146
+ }
147
+ /**
148
+ * @public
149
+ */
150
+ declare function isBackendDynamicPluginInstaller(obj: any): obj is BackendDynamicPluginInstaller;
151
+
152
+ /**
153
+ * @public
154
+ */
155
+ interface DynamicPluginManagerOptions {
156
+ config: Config;
157
+ logger: LoggerService;
158
+ preferAlpha?: boolean;
159
+ moduleLoader?: ModuleLoader;
160
+ }
161
+ /**
162
+ * @public
163
+ */
164
+ declare class DynamicPluginManager implements DynamicPluginProvider {
165
+ private readonly logger;
166
+ private packages;
167
+ private readonly moduleLoader;
168
+ static create(options: DynamicPluginManagerOptions): Promise<DynamicPluginManager>;
169
+ private readonly _plugins;
170
+ private _availablePackages;
171
+ private constructor();
172
+ get availablePackages(): ScannedPluginPackage[];
173
+ addBackendPlugin(plugin: BackendDynamicPlugin): void;
174
+ private loadPlugins;
175
+ private loadBackendPlugin;
176
+ backendPlugins(): BackendDynamicPlugin[];
177
+ frontendPlugins(): FrontendDynamicPlugin[];
178
+ plugins(): DynamicPlugin[];
179
+ }
180
+ /**
181
+ * @public
182
+ */
183
+ declare const dynamicPluginsServiceRef: _backstage_backend_plugin_api.ServiceRef<DynamicPluginProvider, "root">;
184
+ /**
185
+ * @public
186
+ */
187
+ interface DynamicPluginsFactoryOptions {
188
+ moduleLoader?(logger: LoggerService): ModuleLoader;
189
+ }
190
+ /**
191
+ * @public
192
+ */
193
+ declare const dynamicPluginsServiceFactory: (options?: DynamicPluginsFactoryOptions | undefined) => _backstage_backend_plugin_api.ServiceFactory<DynamicPluginProvider, "root">;
194
+ /**
195
+ * @public
196
+ */
197
+ declare const dynamicPluginsFeatureDiscoveryServiceFactory: () => _backstage_backend_plugin_api.ServiceFactory<FeatureDiscoveryService, "root">;
198
+
199
+ export { BackendDynamicPlugin, BackendDynamicPluginInstaller, BackendPluginProvider, BaseDynamicPlugin, DynamicPlugin, DynamicPluginManager, DynamicPluginManagerOptions, DynamicPluginProvider, DynamicPluginsFactoryOptions, FrontendDynamicPlugin, FrontendPluginProvider, LegacyBackendPluginInstaller, LegacyPluginEnvironment, ModuleLoader, NewBackendPluginInstaller, ScannedPluginManifest, ScannedPluginPackage, dynamicPluginsFeatureDiscoveryServiceFactory, dynamicPluginsServiceFactory, dynamicPluginsServiceRef, isBackendDynamicPluginInstaller };
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@backstage/backend-dynamic-feature-service",
3
+ "description": "Backstage dynamic feature service",
4
+ "version": "0.0.0-nightly-20240116021644",
5
+ "main": "dist/index.cjs.js",
6
+ "types": "dist/index.d.ts",
7
+ "publishConfig": {
8
+ "access": "public",
9
+ "main": "dist/index.cjs.js",
10
+ "types": "dist/index.d.ts"
11
+ },
12
+ "backstage": {
13
+ "role": "node-library"
14
+ },
15
+ "keywords": [
16
+ "backstage"
17
+ ],
18
+ "license": "Apache-2.0",
19
+ "scripts": {
20
+ "build": "backstage-cli package build",
21
+ "lint": "backstage-cli package lint",
22
+ "test": "backstage-cli package test",
23
+ "prepack": "backstage-cli package prepack",
24
+ "postpack": "backstage-cli package postpack",
25
+ "clean": "backstage-cli package clean",
26
+ "start": "backstage-cli package start"
27
+ },
28
+ "dependencies": {
29
+ "@backstage/backend-common": "^0.0.0-nightly-20240116021644",
30
+ "@backstage/backend-plugin-api": "^0.0.0-nightly-20240116021644",
31
+ "@backstage/backend-tasks": "^0.0.0-nightly-20240116021644",
32
+ "@backstage/cli-common": "^0.1.13",
33
+ "@backstage/cli-node": "^0.0.0-nightly-20240116021644",
34
+ "@backstage/config": "^1.1.1",
35
+ "@backstage/errors": "^1.2.3",
36
+ "@backstage/plugin-auth-node": "^0.0.0-nightly-20240116021644",
37
+ "@backstage/plugin-catalog-backend": "^0.0.0-nightly-20240116021644",
38
+ "@backstage/plugin-events-backend": "^0.0.0-nightly-20240116021644",
39
+ "@backstage/plugin-events-node": "^0.0.0-nightly-20240116021644",
40
+ "@backstage/plugin-permission-common": "^0.0.0-nightly-20240116021644",
41
+ "@backstage/plugin-permission-node": "^0.0.0-nightly-20240116021644",
42
+ "@backstage/plugin-scaffolder-node": "^0.0.0-nightly-20240116021644",
43
+ "@backstage/plugin-search-backend-node": "^0.0.0-nightly-20240116021644",
44
+ "@backstage/plugin-search-common": "^0.0.0-nightly-20240116021644",
45
+ "@backstage/types": "^1.1.1",
46
+ "@types/express": "^4.17.6",
47
+ "chokidar": "^3.5.3",
48
+ "express": "^4.17.1",
49
+ "lodash": "^4.17.21",
50
+ "winston": "^3.2.1"
51
+ },
52
+ "devDependencies": {
53
+ "@backstage/backend-app-api": "^0.0.0-nightly-20240116021644",
54
+ "@backstage/backend-test-utils": "^0.0.0-nightly-20240116021644",
55
+ "@backstage/cli": "^0.0.0-nightly-20240116021644",
56
+ "@backstage/config-loader": "^0.0.0-nightly-20240116021644",
57
+ "wait-for-expect": "^3.0.2"
58
+ },
59
+ "files": [
60
+ "dist"
61
+ ]
62
+ }