TechDocs: Make requestUrl and storageUrl optional configs by using discovery APIs

closes #3715

Co-authored-by: Himanshu Mishra <himanshu@orkohunter.net>
This commit is contained in:
Parth Shandilya
2021-01-19 23:46:48 +01:00
committed by Himanshu Mishra
parent 17b87a9305
commit e44925723e
18 changed files with 154 additions and 55 deletions
+29 -6
View File
@@ -13,20 +13,38 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { DiscoveryApi } from '@backstage/core';
import { Config } from '@backstage/config';
import { EntityName } from '@backstage/catalog-model';
import { TechDocsStorage } from '../src/api';
export class TechDocsDevStorageApi implements TechDocsStorage {
public apiOrigin: string;
public configApi: Config;
public discoveryApi: DiscoveryApi;
constructor({ apiOrigin }: { apiOrigin: string }) {
this.apiOrigin = apiOrigin;
constructor({
configApi,
discoveryApi,
}: {
configApi: Config;
discoveryApi: DiscoveryApi;
}) {
this.configApi = configApi;
this.discoveryApi = discoveryApi;
}
async getApiOrigin() {
return (
this.configApi.getOptionalString('techdocs.requestUrl') ??
(await this.discoveryApi.getBaseUrl('techdocs'))
);
}
async getEntityDocs(entityId: EntityName, path: string) {
const { name } = entityId;
const url = `${this.apiOrigin}/${name}/${path}`;
const apiOrigin = await this.getApiOrigin();
const url = `${apiOrigin}/${name}/${path}`;
const request = await fetch(
`${url.endsWith('/') ? url : `${url}/`}index.html`,
@@ -39,8 +57,13 @@ export class TechDocsDevStorageApi implements TechDocsStorage {
return request.text();
}
getBaseUrl(oldBaseUrl: string, entityId: EntityName, path: string): string {
async getBaseUrl(
oldBaseUrl: string,
entityId: EntityName,
path: string,
): Promise<string> {
const { name } = entityId;
return new URL(oldBaseUrl, `${this.apiOrigin}/${name}/${path}`).toString();
const apiOrigin = await this.getApiOrigin();
return new URL(oldBaseUrl, `${apiOrigin}/${name}/${path}`).toString();
}
}
+5 -3
View File
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import { configApiRef, discoveryApiRef } from '@backstage/core';
import { createDevApp } from '@backstage/dev-utils';
import { plugin } from '../src/plugin';
import { TechDocsDevStorageApi } from './api';
@@ -22,10 +23,11 @@ import { techdocsStorageApiRef } from '../src';
createDevApp()
.registerApi({
api: techdocsStorageApiRef,
deps: {},
factory: () =>
deps: { configApi: configApiRef, discoveryApi: discoveryApiRef },
factory: ({ configApi, discoveryApi }) =>
new TechDocsDevStorageApi({
apiOrigin: 'http://localhost:3000/api',
configApi,
discoveryApi,
}),
})
.registerPlugin(plugin)