UNPKG

@tduniec/backstage-plugin-time-saver-backend

Version:

This plugin provides an implementation of charts and statistics related to your time savings that are coming from usage of your templates. Plugins is built from frontend and backend part. Backend plugin is responsible for scheduled stats parsing process a

75 lines (72 loc) 2.22 kB
'use strict'; class ScaffolderClient { constructor(logger, config, auth) { this.logger = logger; this.config = config; this.auth = auth; } /** * Fetch a page of templates with pagination support. */ async fetchTemplatesFromScaffolder(opts = {}) { const { page = 0, pageSize = 50 } = opts; let backendUrl = this.config.getOptionalString("ts.backendUrl") ?? "http://127.0.0.1:7007"; backendUrl = backendUrl.replace( /(http:\/\/)localhost(:\d+)/g, "$1127.0.0.1$2" ); const templatePath = "/api/scaffolder/v2/tasks"; const offset = page * pageSize; const callUrl = `${backendUrl}${templatePath}?limit=${pageSize}&offset=${offset}`; const token = await this.generateBackendToken(); try { const response = await fetch(callUrl, { method: "GET", headers: { Authorization: `Bearer ${token}` } }); const data = await response.json(); this.logger.debug( `Scaffolder API response (page=${page}, size=${pageSize}): ${JSON.stringify( data )}` ); if (Object.hasOwn(data, "error")) { this.logger.error("Error retrieving scaffolder tasks", data.error); return []; } if (!Array.isArray(data.tasks)) { this.logger.error("Unexpected response: tasks array missing"); return []; } return data.tasks; } catch (error) { this.logger.error(`Failed to fetch from ${callUrl}`, error); return []; } } /** * Stream all templates, page by page, yielding each task as it arrives. */ async *streamTemplatesFromScaffolder(pageSize = 50) { let page = 0; while (true) { const batch = await this.fetchTemplatesFromScaffolder({ page, pageSize }); if (!batch.length) break; for (const task of batch) { yield task; } page++; } } async generateBackendToken() { const { token } = await this.auth.getPluginRequestToken({ onBehalfOf: await this.auth.getOwnServiceCredentials(), targetPluginId: "scaffolder" }); return token; } } exports.ScaffolderClient = ScaffolderClient; //# sourceMappingURL=scaffolderClient.cjs.js.map