@stackgenhq/backstage-plugin-stackgen-backend 0.3.6-beta.1 → 0.3.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"api-objects.cjs.js","sources":["../../src/utils/api-objects.ts"],"sourcesContent":["import { Config } from \"@backstage/config\";\nimport {\n AppStacksApi,\n AppcdConfiguration,\n AuthenticationApi,\n ConfigApi,\n ConfigTemplatesApi,\n ExportApi,\n ExporterConfiguration,\n IntegrationsConfiguration,\n IntegrationsResourceApi,\n IntegrationsTopologyApi,\n OrgManagementApi,\n RoleManagementApi,\n SecretApi,\n TopologyConfiguration,\n TopologyResourceApi,\n UserGroupManagementApi,\n UsersApi,\n VaultConfiguration,\n V1AppstackApi,\n V1CustomResourceTemplateApi,\n V1EnvironmentProfileApi,\n V1ProjectApi,\n V1TeamApi,\n V1TfBlocksApi,\n V1TopologyApi,\n} from \"../../vendor/stackgen-api-client\";\nimport { apiErrorMessage } from \"../exporter/http\";\nimport { cleanBaseUrl, exporterRoot, iacGenRoot, vaultRoot } from \"../exporter/paths\";\n\nfunction getFetchApi(token: string): typeof fetch {\n return (input, init) => {\n const headers = new Headers(init?.headers);\n headers.set(\"Authorization\", `Bearer ${token}`);\n if (!headers.has(\"Accept\")) {\n headers.set(\"Accept\", \"application/json\");\n }\n return fetch(input, { ...init, headers });\n };\n}\n\nexport type StackgenApiObjects = {\n baseUrl: string;\n token: string;\n /** Authenticated fetch adapter (Bearer token); only HTTP entry point outside generated clients. */\n fetchApi: typeof fetch;\n appStacksApiObj: AppStacksApi;\n authenticationApiObject: AuthenticationApi;\n projectApiObject: OrgManagementApi;\n roleApiObj: RoleManagementApi;\n usersApiObj: UsersApi;\n userGroupApiObj: UserGroupManagementApi;\n v1TopologyApiObj: V1TopologyApi;\n v1ResourceApiObj: TopologyResourceApi;\n v1EnvironmentProfileApiObj: V1EnvironmentProfileApi;\n v1CustomResourceTemplateApiObj: V1CustomResourceTemplateApi;\n v1TfBlocksApiObj: V1TfBlocksApi;\n integrationsAppstackApiObj: V1AppstackApi;\n integrationsProjectApiObj: V1ProjectApi;\n integrationsResourceApiObj: IntegrationsResourceApi;\n integrationsTeamApiObj: V1TeamApi;\n integrationsTopologyApiObj: IntegrationsTopologyApi;\n vaultSecretApiObj: SecretApi;\n exporterConfigApiObj: ConfigApi;\n exporterConfigTemplatesApiObj: ConfigTemplatesApi;\n exporterApiObj: ExportApi;\n};\n\nconst apiObjectsCache = new WeakMap<Config, StackgenApiObjects>();\n\nexport function getStackgenApiObjects(config: Config): StackgenApiObjects {\n const cached = apiObjectsCache.get(config);\n if (cached) {\n return cached;\n }\n\n const baseUrl = cleanBaseUrl(config.getString(\"stackGen.baseUrl\"));\n const token = config.getString(\"stackGen.apiToken\");\n const fetchApi = getFetchApi(token);\n\n const appcdConfig = new AppcdConfiguration({\n basePath: `${baseUrl}/appcd/api`,\n fetchApi,\n });\n const topologyConfig = new TopologyConfiguration({\n basePath: `${baseUrl}${iacGenRoot(config)}`,\n fetchApi,\n });\n const exporterConfig = new ExporterConfiguration({\n basePath: `${baseUrl}${exporterRoot(config)}`,\n fetchApi,\n });\n const integrationsConfig = new IntegrationsConfiguration({\n basePath: `${baseUrl}/integrations/api`,\n fetchApi,\n });\n const vaultConfig = new VaultConfiguration({\n basePath: `${baseUrl}${vaultRoot(config)}`,\n fetchApi,\n });\n\n const objects: StackgenApiObjects = {\n baseUrl,\n token,\n fetchApi,\n appStacksApiObj: new AppStacksApi(appcdConfig),\n authenticationApiObject: new AuthenticationApi(appcdConfig),\n projectApiObject: new OrgManagementApi(appcdConfig),\n roleApiObj: new RoleManagementApi(appcdConfig),\n usersApiObj: new UsersApi(appcdConfig),\n userGroupApiObj: new UserGroupManagementApi(appcdConfig),\n v1TopologyApiObj: new V1TopologyApi(topologyConfig),\n v1ResourceApiObj: new TopologyResourceApi(topologyConfig),\n v1EnvironmentProfileApiObj: new V1EnvironmentProfileApi(topologyConfig),\n v1CustomResourceTemplateApiObj: new V1CustomResourceTemplateApi(\n topologyConfig,\n ),\n v1TfBlocksApiObj: new V1TfBlocksApi(topologyConfig),\n integrationsAppstackApiObj: new V1AppstackApi(integrationsConfig),\n integrationsProjectApiObj: new V1ProjectApi(integrationsConfig),\n integrationsResourceApiObj: new IntegrationsResourceApi(integrationsConfig),\n integrationsTeamApiObj: new V1TeamApi(integrationsConfig),\n integrationsTopologyApiObj: new IntegrationsTopologyApi(integrationsConfig),\n vaultSecretApiObj: new SecretApi(vaultConfig),\n exporterConfigApiObj: new ConfigApi(exporterConfig),\n exporterConfigTemplatesApiObj: new ConfigTemplatesApi(exporterConfig),\n exporterApiObj: new ExportApi(exporterConfig),\n };\n\n apiObjectsCache.set(config, objects);\n return objects;\n}\n\nexport type ClientErrorDetails = {\n status: number;\n body: unknown;\n text: string;\n /** Upstream `x-request-id` when present on the error Response. */\n requestId?: string;\n};\n\nfunction requestIdFromResponse(response: Response): string | undefined {\n const id = response.headers.get(\"x-request-id\")?.trim();\n return id || undefined;\n}\n\nexport async function readClientError(error: unknown): Promise<ClientErrorDetails> {\n const response = (error as { response?: Response })?.response;\n if (!response) {\n return {\n status: 500,\n body: { message: String(error) },\n text: String(error),\n };\n }\n\n const requestId = requestIdFromResponse(response);\n const text = await response.text().catch(() => \"\");\n if (!text.trim()) {\n return { status: response.status, body: {}, text, requestId };\n }\n\n try {\n return {\n status: response.status,\n body: JSON.parse(text),\n text,\n requestId,\n };\n } catch {\n return {\n status: response.status,\n body: { message: text },\n text,\n requestId,\n };\n }\n}\n\n/**\n * Formats status / body / request-id the same way for thrown client errors and\n * executeApiRequest non-ok results.\n */\nexport function formatApiFailure(\n status: number,\n body: unknown,\n text = \"\",\n requestId?: string,\n): string {\n const fromBody = apiErrorMessage(body, text).trim();\n const raw = fromBody || text.trim() || \"\";\n const detail = collapseOpaqueResponseError(raw, status);\n\n const parts: string[] = [];\n if (status >= 400 && status < 600) {\n parts.push(`HTTP ${status}`);\n }\n if (requestId) {\n parts.push(`Request ID: ${requestId}`);\n }\n if (parts.length === 0) {\n return detail;\n }\n return `${detail} (${parts.join(\", \")})`;\n}\n\n/**\n * Builds a user-facing error string from a generated-client / fetch failure.\n * Prefer API body `msg` / `message` / `extras` over opaque ResponseError text;\n * include HTTP status and Request ID when available.\n *\n * Response-less errors (already wrapped `Error`s, validation, FS, etc.) are\n * returned as-is — do not invent a synthetic HTTP 500.\n */\nexport async function formatClientErrorMessage(error: unknown): Promise<string> {\n if (!(error as { response?: unknown })?.response) {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n\n const parsed = await readClientError(error);\n const textFallback =\n parsed.text.trim() ||\n (error instanceof Error ? error.message : String(error));\n return formatApiFailure(\n parsed.status,\n parsed.body,\n textFallback,\n parsed.requestId,\n );\n}\n\nfunction collapseOpaqueResponseError(message: string, status: number): string {\n const trimmed = message.trim();\n if (/Response returned an error code/i.test(trimmed)) {\n return status ? `StackGen API request failed` : trimmed;\n }\n return trimmed || \"StackGen API request failed\";\n}\n\nexport type ApiRequestResult<T = unknown> = {\n ok: boolean;\n status: number;\n parsed: T;\n text: string;\n requestId?: string;\n};\n\nexport type FetchRequestResult = {\n ok: boolean;\n status: number;\n data: unknown;\n headers: Record<string, string>;\n};\n\nasync function parseFetchResponseBody(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n if (!contentType.includes(\"application/json\") || !text.trim()) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n/** For StackGen routes not covered by generated OpenAPI clients (e.g. legacy backstage adapter). */\nexport async function executeFetchRequest(\n fetchApi: typeof fetch,\n url: string,\n init: RequestInit,\n): Promise<FetchRequestResult> {\n const response = await fetchApi(url, init);\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return {\n ok: response.ok,\n status: response.status,\n data: await parseFetchResponseBody(response),\n headers,\n };\n}\n\n/**\n * Runs a generated-client call and normalizes success/error into { ok, status, parsed }.\n * `parsed` is intentionally untyped: error bodies and some StackGen responses use\n * fields outside the OpenAPI success models (msg/message, legacy aliases, etc.).\n */\nexport async function executeApiRequest(\n request: () => Promise<unknown>,\n successStatus = 200,\n): Promise<ApiRequestResult<any>> {\n try {\n const parsed = await request();\n const text =\n typeof parsed === \"string\" ? parsed : JSON.stringify(parsed ?? {});\n return {\n ok: true,\n status: successStatus,\n parsed,\n text,\n };\n } catch (error) {\n const parsedError = await readClientError(error);\n if (parsedError.status === 500 && parsedError.text === String(error)) {\n throw error;\n }\n return {\n ok: false,\n status: parsedError.status,\n parsed: parsedError.body,\n text: parsedError.text,\n requestId: parsedError.requestId,\n };\n }\n}\n"],"names":["cleanBaseUrl","AppcdConfiguration","TopologyConfiguration","iacGenRoot","ExporterConfiguration","exporterRoot","IntegrationsConfiguration","VaultConfiguration","vaultRoot","AppStacksApi","AuthenticationApi","OrgManagementApi","RoleManagementApi","UsersApi","UserGroupManagementApi","V1TopologyApi","TopologyResourceApi","V1EnvironmentProfileApi","V1CustomResourceTemplateApi","V1TfBlocksApi","V1AppstackApi","V1ProjectApi","IntegrationsResourceApi","V1TeamApi","IntegrationsTopologyApi","SecretApi","ConfigApi","ConfigTemplatesApi","ExportApi","apiErrorMessage"],"mappings":"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"}
1
+ {"version":3,"file":"api-objects.cjs.js","sources":["../../src/utils/api-objects.ts"],"sourcesContent":["import { Config } from \"@backstage/config\";\nimport {\n AppStacksApi,\n AppcdConfiguration,\n AuthenticationApi,\n ConfigApi,\n ConfigTemplatesApi,\n ExportApi,\n ExporterConfiguration,\n IntegrationsConfiguration,\n IntegrationsResourceApi,\n IntegrationsTopologyApi,\n OrgManagementApi,\n RoleManagementApi,\n SecretApi,\n TopologyConfiguration,\n TopologyResourceApi,\n UserGroupManagementApi,\n UsersApi,\n VaultConfiguration,\n V1AppstackApi,\n V1CustomResourceTemplateApi,\n V1EnvironmentProfileApi,\n V1ProjectApi,\n V1TeamApi,\n V1TfBlocksApi,\n V1TopologyApi,\n} from \"../../vendor/stackgen-api-client\";\nimport { cleanBaseUrl, exporterRoot, iacGenRoot, vaultRoot } from \"../exporter/paths\";\n\nfunction getFetchApi(token: string): typeof fetch {\n return (input, init) => {\n const headers = new Headers(init?.headers);\n headers.set(\"Authorization\", `Bearer ${token}`);\n if (!headers.has(\"Accept\")) {\n headers.set(\"Accept\", \"application/json\");\n }\n return fetch(input, { ...init, headers });\n };\n}\n\nexport type StackgenApiObjects = {\n baseUrl: string;\n token: string;\n /** Authenticated fetch adapter (Bearer token); only HTTP entry point outside generated clients. */\n fetchApi: typeof fetch;\n appStacksApiObj: AppStacksApi;\n authenticationApiObject: AuthenticationApi;\n projectApiObject: OrgManagementApi;\n roleApiObj: RoleManagementApi;\n usersApiObj: UsersApi;\n userGroupApiObj: UserGroupManagementApi;\n v1TopologyApiObj: V1TopologyApi;\n v1ResourceApiObj: TopologyResourceApi;\n v1EnvironmentProfileApiObj: V1EnvironmentProfileApi;\n v1CustomResourceTemplateApiObj: V1CustomResourceTemplateApi;\n v1TfBlocksApiObj: V1TfBlocksApi;\n integrationsAppstackApiObj: V1AppstackApi;\n integrationsProjectApiObj: V1ProjectApi;\n integrationsResourceApiObj: IntegrationsResourceApi;\n integrationsTeamApiObj: V1TeamApi;\n integrationsTopologyApiObj: IntegrationsTopologyApi;\n vaultSecretApiObj: SecretApi;\n exporterConfigApiObj: ConfigApi;\n exporterConfigTemplatesApiObj: ConfigTemplatesApi;\n exporterApiObj: ExportApi;\n};\n\nconst apiObjectsCache = new WeakMap<Config, StackgenApiObjects>();\n\nexport function getStackgenApiObjects(config: Config): StackgenApiObjects {\n const cached = apiObjectsCache.get(config);\n if (cached) {\n return cached;\n }\n\n const baseUrl = cleanBaseUrl(config.getString(\"stackGen.baseUrl\"));\n const token = config.getString(\"stackGen.apiToken\");\n const fetchApi = getFetchApi(token);\n\n const appcdConfig = new AppcdConfiguration({\n basePath: `${baseUrl}/appcd/api`,\n fetchApi,\n });\n const topologyConfig = new TopologyConfiguration({\n basePath: `${baseUrl}${iacGenRoot(config)}`,\n fetchApi,\n });\n const exporterConfig = new ExporterConfiguration({\n basePath: `${baseUrl}${exporterRoot(config)}`,\n fetchApi,\n });\n const integrationsConfig = new IntegrationsConfiguration({\n basePath: `${baseUrl}/integrations/api`,\n fetchApi,\n });\n const vaultConfig = new VaultConfiguration({\n basePath: `${baseUrl}${vaultRoot(config)}`,\n fetchApi,\n });\n\n const objects: StackgenApiObjects = {\n baseUrl,\n token,\n fetchApi,\n appStacksApiObj: new AppStacksApi(appcdConfig),\n authenticationApiObject: new AuthenticationApi(appcdConfig),\n projectApiObject: new OrgManagementApi(appcdConfig),\n roleApiObj: new RoleManagementApi(appcdConfig),\n usersApiObj: new UsersApi(appcdConfig),\n userGroupApiObj: new UserGroupManagementApi(appcdConfig),\n v1TopologyApiObj: new V1TopologyApi(topologyConfig),\n v1ResourceApiObj: new TopologyResourceApi(topologyConfig),\n v1EnvironmentProfileApiObj: new V1EnvironmentProfileApi(topologyConfig),\n v1CustomResourceTemplateApiObj: new V1CustomResourceTemplateApi(\n topologyConfig,\n ),\n v1TfBlocksApiObj: new V1TfBlocksApi(topologyConfig),\n integrationsAppstackApiObj: new V1AppstackApi(integrationsConfig),\n integrationsProjectApiObj: new V1ProjectApi(integrationsConfig),\n integrationsResourceApiObj: new IntegrationsResourceApi(integrationsConfig),\n integrationsTeamApiObj: new V1TeamApi(integrationsConfig),\n integrationsTopologyApiObj: new IntegrationsTopologyApi(integrationsConfig),\n vaultSecretApiObj: new SecretApi(vaultConfig),\n exporterConfigApiObj: new ConfigApi(exporterConfig),\n exporterConfigTemplatesApiObj: new ConfigTemplatesApi(exporterConfig),\n exporterApiObj: new ExportApi(exporterConfig),\n };\n\n apiObjectsCache.set(config, objects);\n return objects;\n}\n\nexport async function readClientError(error: unknown): Promise<{\n status: number;\n body: unknown;\n text: string;\n}> {\n const response = (error as { response?: Response })?.response;\n if (!response) {\n return {\n status: 500,\n body: { message: String(error) },\n text: String(error),\n };\n }\n\n const text = await response.text().catch(() => \"\");\n if (!text.trim()) {\n return { status: response.status, body: {}, text };\n }\n\n try {\n return {\n status: response.status,\n body: JSON.parse(text),\n text,\n };\n } catch {\n return {\n status: response.status,\n body: { message: text },\n text,\n };\n }\n}\n\n/**\n * Builds a user-facing error string from a generated-client / fetch failure.\n * Prefer API body `msg` / `message` over opaque `ResponseError: Response returned an error code`.\n */\nexport async function formatClientErrorMessage(error: unknown): Promise<string> {\n const parsed = await readClientError(error);\n const fromBody = messageFromErrorBody(parsed.body);\n const raw =\n fromBody ||\n (parsed.text.trim() && parsed.text !== String(error)\n ? parsed.text.trim()\n : \"\") ||\n (error instanceof Error ? error.message : String(error));\n\n const detail = collapseOpaqueResponseError(raw, parsed.status);\n if (parsed.status >= 400 && parsed.status < 600) {\n return `${detail} (HTTP ${parsed.status})`;\n }\n return detail;\n}\n\nfunction messageFromErrorBody(body: unknown): string {\n if (!body || typeof body !== \"object\") {\n return typeof body === \"string\" ? body.trim() : \"\";\n }\n const o = body as Record<string, unknown>;\n for (const key of [\"msg\", \"message\", \"error\", \"detail\", \"title\"] as const) {\n const value = o[key];\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n }\n return \"\";\n}\n\nfunction collapseOpaqueResponseError(message: string, status: number): string {\n const trimmed = message.trim();\n if (/Response returned an error code/i.test(trimmed)) {\n return status ? `StackGen API request failed` : trimmed;\n }\n return trimmed || \"StackGen API request failed\";\n}\n\nexport type ApiRequestResult<T = unknown> = {\n ok: boolean;\n status: number;\n parsed: T;\n text: string;\n};\n\nexport type FetchRequestResult = {\n ok: boolean;\n status: number;\n data: unknown;\n headers: Record<string, string>;\n};\n\nasync function parseFetchResponseBody(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n if (!contentType.includes(\"application/json\") || !text.trim()) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n/** For StackGen routes not covered by generated OpenAPI clients (e.g. legacy backstage adapter). */\nexport async function executeFetchRequest(\n fetchApi: typeof fetch,\n url: string,\n init: RequestInit,\n): Promise<FetchRequestResult> {\n const response = await fetchApi(url, init);\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return {\n ok: response.ok,\n status: response.status,\n data: await parseFetchResponseBody(response),\n headers,\n };\n}\n\n/**\n * Runs a generated-client call and normalizes success/error into { ok, status, parsed }.\n * `parsed` is intentionally untyped: error bodies and some StackGen responses use\n * fields outside the OpenAPI success models (msg/message, legacy aliases, etc.).\n */\nexport async function executeApiRequest(\n request: () => Promise<unknown>,\n successStatus = 200,\n): Promise<ApiRequestResult<any>> {\n try {\n const parsed = await request();\n const text =\n typeof parsed === \"string\" ? parsed : JSON.stringify(parsed ?? {});\n return {\n ok: true,\n status: successStatus,\n parsed,\n text,\n };\n } catch (error) {\n const parsedError = await readClientError(error);\n if (parsedError.status === 500 && parsedError.text === String(error)) {\n throw error;\n }\n return {\n ok: false,\n status: parsedError.status,\n parsed: parsedError.body,\n text: parsedError.text,\n };\n }\n}\n"],"names":["cleanBaseUrl","AppcdConfiguration","TopologyConfiguration","iacGenRoot","ExporterConfiguration","exporterRoot","IntegrationsConfiguration","VaultConfiguration","vaultRoot","AppStacksApi","AuthenticationApi","OrgManagementApi","RoleManagementApi","UsersApi","UserGroupManagementApi","V1TopologyApi","TopologyResourceApi","V1EnvironmentProfileApi","V1CustomResourceTemplateApi","V1TfBlocksApi","V1AppstackApi","V1ProjectApi","IntegrationsResourceApi","V1TeamApi","IntegrationsTopologyApi","SecretApi","ConfigApi","ConfigTemplatesApi","ExportApi"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackgenhq/backstage-plugin-stackgen-backend",
3
- "version": "0.3.6-beta.1",
3
+ "version": "0.3.7",
4
4
  "main": "dist/index.cjs.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",