@backstage/plugin-scaffolder-backend 2.1.0 → 2.2.0-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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.cjs.js","sources":["../../../../src/schema/openapi/generated/router.ts"],"sourcesContent":["/*\n * Copyright 2025 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\n// ******************************************************************\n// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. *\n// ******************************************************************\nimport { createValidatedOpenApiRouterFromGeneratedEndpointMap } from '@backstage/backend-openapi-utils';\nimport { EndpointMap } from './apis';\n\nexport const spec = {\n openapi: '3.0.3',\n info: {\n title: 'scaffolder',\n version: '1',\n description:\n 'The Backstage backend plugin that helps you create new things',\n license: {\n name: 'Apache-2.0',\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html',\n },\n contact: {},\n },\n servers: [\n {\n url: '/',\n },\n ],\n components: {\n examples: {},\n headers: {},\n parameters: {\n createdBy: {\n name: 'createdBy',\n in: 'query',\n description: 'Created by',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n eventsAfter: {\n name: 'after',\n in: 'query',\n description: 'Offset event ID to stream events after.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n },\n },\n kind: {\n name: 'kind',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n limit: {\n name: 'limit',\n in: 'query',\n description: 'Number of records to return in the response.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n minimum: 0,\n },\n },\n namespace: {\n name: 'namespace',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n name: {\n name: 'name',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n offset: {\n name: 'offset',\n in: 'query',\n description: 'Number of records to skip in the query page.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n minimum: 0,\n },\n },\n order: {\n name: 'order',\n in: 'query',\n description: 'Order',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n status: {\n name: 'status',\n in: 'query',\n description: 'Status',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n taskId: {\n name: 'taskId',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n },\n requestBodies: {},\n responses: {\n ErrorResponse: {\n description: 'An error response from the backend.',\n content: {\n 'application/json; charset=utf-8': {\n schema: {\n $ref: '#/components/schemas/Error',\n },\n },\n },\n },\n },\n schemas: {\n Action: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n },\n description: {\n type: 'string',\n },\n \"'examples'\": {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ActionExample',\n },\n },\n schema: {\n type: 'object',\n properties: {\n input: {\n $ref: '#/components/schemas/JsonObject',\n },\n output: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n },\n },\n required: ['id'],\n description:\n 'The response shape for a single action in the `listActions` call to the `scaffolder-backend`',\n },\n ActionExample: {\n type: 'object',\n properties: {\n description: {\n type: 'string',\n },\n example: {\n type: 'string',\n },\n },\n required: ['description', 'example'],\n description: 'A single action example',\n },\n DryRunResult: {\n type: 'object',\n properties: {\n log: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n body: {\n allOf: [\n {\n $ref: '#/components/schemas/JsonObject',\n },\n {\n type: 'object',\n properties: {\n message: {\n type: 'string',\n },\n status: {\n $ref: '#/components/schemas/TaskStatus',\n },\n stepId: {\n type: 'string',\n },\n },\n required: ['message'],\n },\n ],\n },\n },\n required: ['body'],\n },\n },\n directoryContents: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/SerializedFile',\n },\n },\n output: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n required: ['log', 'directoryContents', 'output'],\n },\n Error: {\n type: 'object',\n properties: {\n error: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n stack: {\n type: 'string',\n },\n code: {\n type: 'string',\n },\n },\n required: ['name', 'message'],\n },\n request: {\n type: 'object',\n properties: {\n method: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n },\n required: ['method', 'url'],\n },\n response: {\n type: 'object',\n properties: {\n statusCode: {\n type: 'number',\n },\n },\n required: ['statusCode'],\n },\n },\n required: ['error', 'response'],\n additionalProperties: {},\n },\n JsonArray: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/JsonValue',\n },\n description: 'A type representing all allowed JSON array values.',\n },\n JsonObject: {\n type: 'object',\n properties: {},\n description: 'A type representing all allowed JSON object values.',\n additionalProperties: {},\n },\n JsonPrimitive: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n type: 'number',\n },\n {\n type: 'string',\n },\n {\n type: 'object',\n nullable: true,\n },\n ],\n description: 'A type representing all allowed JSON primitive values.',\n },\n JsonValue: {\n oneOf: [\n {\n $ref: '#/components/schemas/JsonObject',\n },\n {\n $ref: '#/components/schemas/JsonArray',\n },\n {\n $ref: '#/components/schemas/JsonPrimitive',\n },\n ],\n description: 'A type representing all allowed JSON values.',\n },\n ListActionsResponse: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/Action',\n },\n description:\n 'The response shape for the `listActions` call to the `scaffolder-backend`',\n },\n ListTasksResponse: {\n type: 'object',\n properties: {\n tasks: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/SerializedTask',\n },\n },\n totalTasks: {\n type: 'number',\n },\n },\n required: ['tasks'],\n description:\n 'The response shape for the `listTasks` call to the `scaffolder-backend`',\n },\n ListTemplatingExtensionsResponse: {\n type: 'object',\n properties: {\n filters: {\n type: 'object',\n additionalProperties: {\n $ref: '#/components/schemas/TemplateFilter',\n },\n },\n globals: {\n type: 'object',\n properties: {\n functions: {\n type: 'object',\n additionalProperties: {\n $ref: '#/components/schemas/TemplateGlobalFunction',\n },\n },\n values: {\n type: 'object',\n additionalProperties: {\n $ref: '#/components/schemas/TemplateGlobalValue',\n },\n },\n },\n required: ['functions', 'values'],\n },\n },\n required: ['filters', 'globals'],\n description:\n 'The response shape for the `listTemplatingExtensions` call to the `scaffolder-backend`',\n },\n ScaffolderScaffoldOptions: {\n type: 'object',\n properties: {\n templateRef: {\n type: 'string',\n },\n values: {\n type: 'object',\n additionalProperties: {},\n },\n secrets: {\n type: 'object',\n additionalProperties: {\n type: 'string',\n },\n },\n },\n required: ['templateRef', 'values'],\n description:\n 'The input options to the `scaffold` method of the `ScaffolderClient`.',\n },\n ScaffolderUsageExample: {\n type: 'object',\n properties: {\n description: {\n type: 'string',\n },\n example: {\n type: 'string',\n },\n notes: {\n type: 'string',\n },\n },\n required: ['example'],\n description: 'A single scaffolder usage example',\n },\n SerializedFile: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n },\n content: {\n type: 'string',\n },\n executable: {\n type: 'boolean',\n },\n symlink: {\n type: 'boolean',\n },\n },\n required: ['path', 'content'],\n },\n SerializedTaskEvent: {\n type: 'object',\n properties: {\n id: {\n type: 'integer',\n },\n isTaskRecoverable: {\n type: 'boolean',\n },\n taskId: {\n type: 'string',\n },\n body: {\n allOf: [\n {\n $ref: '#/components/schemas/JsonObject',\n },\n {\n type: 'object',\n properties: {\n message: {\n type: 'string',\n },\n status: {\n $ref: '#/components/schemas/TaskStatus',\n },\n stepId: {\n type: 'string',\n },\n },\n required: ['message'],\n },\n ],\n },\n type: {\n $ref: '#/components/schemas/TaskEventType',\n },\n createdAt: {\n type: 'string',\n },\n },\n required: ['id', 'taskId', 'body', 'type', 'createdAt'],\n description: 'SerializedTaskEvent',\n },\n SerializedTask: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n },\n spec: {\n type: 'object',\n },\n status: {\n $ref: '#/components/schemas/TaskStatus',\n },\n createdAt: {\n type: 'string',\n },\n lastHeartbeatAt: {\n type: 'string',\n },\n createdBy: {\n type: 'string',\n },\n secrets: {\n $ref: '#/components/schemas/TaskSecrets',\n },\n state: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n required: ['id', 'spec', 'status', 'createdAt'],\n description: 'SerializedTask',\n },\n TaskEventType: {\n type: 'string',\n description: 'TaskEventType',\n enum: ['cancelled', 'completion', 'log', 'recovered'],\n },\n TaskSecrets: {\n allOf: [\n {\n type: 'object',\n additionalProperties: {\n type: 'string',\n },\n },\n {\n type: 'object',\n properties: {\n backstageToken: {\n type: 'string',\n },\n },\n },\n ],\n description: 'TaskSecrets',\n },\n TaskStatus: {\n type: 'string',\n enum: [\n 'cancelled',\n 'completed',\n 'failed',\n 'open',\n 'processing',\n 'skipped',\n ],\n description: 'The status of each step of the Task',\n },\n TemplateGlobalFunction: {\n type: 'object',\n properties: {\n description: {\n type: 'string',\n },\n schema: {\n type: 'object',\n properties: {\n arguments: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n output: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n },\n \"'examples'\": {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ScaffolderUsageExample',\n },\n },\n },\n description:\n 'The response shape for a single global function in the `listTemplatingExtensions` call to the `scaffolder-backend`',\n },\n TemplateGlobalValue: {\n type: 'object',\n properties: {\n description: {\n type: 'string',\n },\n value: {\n type: 'object',\n nullable: true,\n },\n },\n required: ['value'],\n description:\n 'The response shape for a single global value in the `listTemplatingExtensions` call to the `scaffolder-backend`',\n },\n TemplateFilter: {\n type: 'object',\n properties: {\n description: {\n type: 'string',\n },\n schema: {\n type: 'object',\n properties: {\n input: {\n $ref: '#/components/schemas/JsonObject',\n },\n arguments: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n output: {\n $ref: '#/components/schemas/JsonObject',\n },\n },\n },\n \"'examples'\": {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ScaffolderUsageExample',\n },\n },\n },\n description:\n 'The response shape for a single filter in the `listTemplatingExtensions` call to the `scaffolder-backend`',\n },\n TemplateParameterSchema: {\n type: 'object',\n properties: {\n title: {\n type: 'string',\n },\n description: {\n type: 'string',\n },\n steps: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n title: {\n type: 'string',\n },\n description: {\n type: 'string',\n },\n schema: {\n type: 'object',\n },\n },\n required: ['title', 'schema'],\n },\n },\n },\n required: ['title', 'steps'],\n description:\n 'The shape of each entry of parameters which gets rendered\\nas a separate step in the wizard input',\n additionalProperties: {},\n },\n ValidationError: {\n type: 'object',\n properties: {\n path: {\n type: 'array',\n items: {\n oneOf: [\n {\n type: 'string',\n },\n {\n type: 'integer',\n },\n ],\n },\n },\n property: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n instance: {\n type: 'object',\n },\n name: {\n type: 'string',\n },\n argument: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n type: 'number',\n },\n {\n type: 'object',\n },\n {\n type: 'string',\n },\n ],\n },\n stack: {\n type: 'string',\n },\n },\n required: [\n 'path',\n 'property',\n 'message',\n 'schema',\n 'instance',\n 'name',\n 'argument',\n 'stack',\n ],\n additionalProperties: {},\n },\n },\n securitySchemes: {\n JWT: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n },\n paths: {\n '/v2/templates/{namespace}/{kind}/{name}/parameter-schema': {\n get: {\n operationId: 'GetTemplateParameterSchema',\n description: 'Get template parameter schema.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/TemplateParameterSchema',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/namespace',\n },\n {\n $ref: '#/components/parameters/kind',\n },\n {\n $ref: '#/components/parameters/name',\n },\n ],\n },\n },\n '/v2/actions': {\n get: {\n operationId: 'ListActions',\n description: 'Returns a list of all installed actions.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/ListActionsResponse',\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n },\n },\n '/v2/tasks': {\n get: {\n operationId: 'ListTasks',\n description:\n 'Returns a list of tasks, filtering by ownership and/or status if given.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/ListTasksResponse',\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/createdBy',\n },\n {\n $ref: '#/components/parameters/limit',\n },\n {\n $ref: '#/components/parameters/offset',\n },\n {\n $ref: '#/components/parameters/order',\n },\n {\n $ref: '#/components/parameters/status',\n },\n ],\n },\n post: {\n operationId: 'Scaffold',\n description:\n 'Executes the scaffolding of a component, given a template and its\\nparameter values.',\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/ScaffolderScaffoldOptions',\n },\n },\n },\n },\n responses: {\n '201': {\n description: 'Created',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n },\n },\n required: ['id'],\n },\n },\n },\n },\n '400': {\n description: 'Validation errors.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n errors: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ValidationError',\n },\n },\n },\n required: ['errors'],\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n },\n },\n '/v2/tasks/{taskId}': {\n get: {\n operationId: 'GetTask',\n description: 'Get a task by ID.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/SerializedTask',\n },\n },\n },\n },\n '403': {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/taskId',\n },\n ],\n },\n },\n '/v2/tasks/{taskId}/cancel': {\n post: {\n operationId: 'CancelTask',\n description:\n 'Sends a signal to a task broker to cancel the running task by taskId.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/components/schemas/TaskStatus',\n },\n },\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/taskId',\n },\n ],\n },\n },\n '/v2/tasks/{taskId}/retry': {\n post: {\n operationId: 'Retry',\n description: 'Starts the task again from the point where it failed.',\n requestBody: {\n required: false,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n secrets: {\n type: 'object',\n additionalProperties: {\n type: 'string',\n },\n },\n },\n },\n },\n },\n },\n responses: {\n '201': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n },\n },\n required: ['id'],\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/taskId',\n },\n ],\n },\n },\n '/v2/tasks/{taskId}/events': {\n get: {\n operationId: 'StreamLogsPolling',\n description: 'Get events for a task by ID.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/SerializedTaskEvent',\n },\n },\n },\n },\n },\n '403': {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n parameters: [\n {\n $ref: '#/components/parameters/eventsAfter',\n },\n {\n $ref: '#/components/parameters/taskId',\n },\n ],\n },\n },\n '/v2/dry-run': {\n post: {\n operationId: 'DryRun',\n description: 'Perform a dry-run of a template',\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n template: {\n type: 'object',\n },\n values: {\n $ref: '#/components/schemas/JsonObject',\n },\n secrets: {\n type: 'object',\n additionalProperties: {\n type: 'string',\n },\n },\n directoryContents: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n },\n base64Content: {\n type: 'string',\n },\n },\n },\n },\n },\n required: ['template', 'values', 'directoryContents'],\n },\n },\n },\n },\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n allOf: [\n {\n $ref: '#/components/schemas/DryRunResult',\n },\n {\n type: 'object',\n properties: {\n steps: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n },\n name: {\n type: 'string',\n },\n action: {\n type: 'string',\n },\n },\n required: ['id', 'name', 'action'],\n additionalProperties: {},\n },\n },\n directoryContents: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n },\n executable: {\n type: 'boolean',\n },\n base64Content: {\n type: 'string',\n },\n },\n required: ['path', 'base64Content'],\n },\n },\n },\n required: ['steps'],\n },\n ],\n },\n },\n },\n },\n '400': {\n description: 'Validation errors.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n errors: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ValidationError',\n },\n },\n },\n required: ['errors'],\n },\n },\n },\n },\n },\n parameters: [],\n },\n },\n '/v2/autocomplete/{provider}/{resource}': {\n post: {\n operationId: 'Autocomplete',\n description:\n 'Perform an autocomplete for the given provider and resource.',\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n context: {\n type: 'object',\n additionalProperties: {\n type: 'string',\n },\n },\n token: {\n type: 'string',\n },\n },\n required: ['context', 'token'],\n },\n },\n },\n },\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n results: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n title: {\n type: 'string',\n },\n id: {\n type: 'string',\n },\n },\n required: ['id'],\n },\n },\n },\n required: ['results'],\n },\n },\n },\n },\n '400': {\n description: 'Unsupported provider.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n message: {\n type: 'string',\n },\n name: {\n type: 'string',\n },\n },\n },\n },\n },\n },\n },\n parameters: [\n {\n in: 'path',\n name: 'provider',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n in: 'path',\n name: 'resource',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n },\n },\n '/v2/templating-extensions': {\n get: {\n operationId: 'ListTemplatingExtensions',\n description:\n 'Returns a structure describing the available templating extensions.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/ListTemplatingExtensionsResponse',\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n },\n },\n },\n} as const;\nexport const createOpenApiRouter = async (\n options?: Parameters<\n typeof createValidatedOpenApiRouterFromGeneratedEndpointMap\n >['1'],\n) =>\n createValidatedOpenApiRouterFromGeneratedEndpointMap<EndpointMap>(\n spec,\n options,\n );\n"],"names":["createValidatedOpenApiRouterFromGeneratedEndpointMap"],"mappings":"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"}
@@ -70,17 +70,6 @@ function parseStringsParam(param, paramName) {
70
70
  }
71
71
  return array;
72
72
  }
73
- function parseNumberParam(param, paramName) {
74
- return parseStringsParam(param, paramName)?.map((val) => {
75
- const ret = Number.parseInt(val, 10);
76
- if (isNaN(ret)) {
77
- throw new errors.InputError(
78
- `Invalid ${paramName} parameter "${val}", expected a number or array of numbers`
79
- );
80
- }
81
- return ret;
82
- });
83
- }
84
73
  function flattenParams(...params) {
85
74
  return [...params].flat().filter(Boolean);
86
75
  }
@@ -89,6 +78,5 @@ exports.findTemplate = findTemplate;
89
78
  exports.flattenParams = flattenParams;
90
79
  exports.getEntityBaseUrl = getEntityBaseUrl;
91
80
  exports.getWorkingDirectory = getWorkingDirectory;
92
- exports.parseNumberParam = parseNumberParam;
93
81
  exports.parseStringsParam = parseStringsParam;
94
82
  //# sourceMappingURL=helpers.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.cjs.js","sources":["../../src/service/helpers.ts"],"sourcesContent":["/*\n * Copyright 2020 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 BackstageCredentials,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport {\n ANNOTATION_LOCATION,\n ANNOTATION_SOURCE_LOCATION,\n CompoundEntityRef,\n Entity,\n parseLocationRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { Config } from '@backstage/config';\nimport { assertError, InputError, NotFoundError } from '@backstage/errors';\nimport { CatalogService } from '@backstage/plugin-catalog-node';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport fs from 'fs-extra';\nimport os from 'os';\n\nexport async function getWorkingDirectory(\n config: Config,\n logger: LoggerService,\n): Promise<string> {\n if (!config.has('backend.workingDirectory')) {\n return os.tmpdir();\n }\n\n const workingDirectory = config.getString('backend.workingDirectory');\n try {\n // Check if working directory exists and is writable\n await fs.access(workingDirectory, fs.constants.F_OK | fs.constants.W_OK);\n logger.info(`using working directory: ${workingDirectory}`);\n } catch (err) {\n assertError(err);\n logger.error(\n `working directory ${workingDirectory} ${\n err.code === 'ENOENT' ? 'does not exist' : 'is not writable'\n }`,\n );\n throw err;\n }\n return workingDirectory;\n}\n\n/**\n * Gets the base URL of the entity location that points to the source location\n * of the entity description within a repo. If there is not source location\n * or if it has an invalid type, undefined will be returned instead.\n *\n * For file locations this will return a `file://` URL.\n */\nexport function getEntityBaseUrl(entity: Entity): string | undefined {\n let location = entity.metadata.annotations?.[ANNOTATION_SOURCE_LOCATION];\n if (!location) {\n location = entity.metadata.annotations?.[ANNOTATION_LOCATION];\n }\n if (!location) {\n return undefined;\n }\n\n const { type, target } = parseLocationRef(location);\n if (type === 'url') {\n return target;\n } else if (type === 'file') {\n return `file://${target}`;\n }\n\n // Only url and file location are handled, as we otherwise don't know if\n // what the url is pointing to makes sense to use as a baseUrl\n return undefined;\n}\n\n/**\n * Will use the provided CatalogApi to go find the given template entity with an additional token.\n * Returns the matching template, or throws a NotFoundError if no such template existed.\n */\nexport async function findTemplate(options: {\n entityRef: CompoundEntityRef;\n catalog: CatalogService;\n credentials: BackstageCredentials;\n}): Promise<TemplateEntityV1beta3> {\n const { entityRef, catalog, credentials } = options;\n\n if (entityRef.kind.toLocaleLowerCase('en-US') !== 'template') {\n throw new InputError(`Invalid kind, only 'Template' kind is supported`);\n }\n\n const template = await catalog.getEntityByRef(entityRef, {\n credentials,\n });\n if (!template) {\n throw new NotFoundError(\n `Template ${stringifyEntityRef(entityRef)} not found`,\n );\n }\n\n return template as TemplateEntityV1beta3;\n}\n\n/**\n * Takes a single unknown parameter and makes sure that it's a single string or\n * an array of strings, and returns as an array.\n */\nexport function parseStringsParam(\n param: unknown,\n paramName: string,\n): string[] | undefined {\n if (param === undefined) {\n return undefined;\n }\n\n const array = [param].flat();\n if (array.some(p => typeof p !== 'string')) {\n throw new InputError(\n `Invalid ${paramName}, not a string or array of strings`,\n );\n }\n\n return array as string[];\n}\n\nexport function parseNumberParam(\n param: unknown,\n paramName: string,\n): number[] | undefined {\n return parseStringsParam(param, paramName)?.map(val => {\n const ret = Number.parseInt(val, 10);\n if (isNaN(ret)) {\n throw new InputError(\n `Invalid ${paramName} parameter \"${val}\", expected a number or array of numbers`,\n );\n }\n return ret;\n });\n}\n\nexport function flattenParams<T>(...params: (undefined | T | T[])[]): T[] {\n return [...params].flat().filter(Boolean) as T[];\n}\n"],"names":["os","fs","assertError","ANNOTATION_SOURCE_LOCATION","ANNOTATION_LOCATION","parseLocationRef","InputError","NotFoundError","stringifyEntityRef"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.cjs.js","sources":["../../src/service/helpers.ts"],"sourcesContent":["/*\n * Copyright 2020 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 BackstageCredentials,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport {\n ANNOTATION_LOCATION,\n ANNOTATION_SOURCE_LOCATION,\n CompoundEntityRef,\n Entity,\n parseLocationRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { Config } from '@backstage/config';\nimport { assertError, InputError, NotFoundError } from '@backstage/errors';\nimport { CatalogService } from '@backstage/plugin-catalog-node';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport fs from 'fs-extra';\nimport os from 'os';\n\nexport async function getWorkingDirectory(\n config: Config,\n logger: LoggerService,\n): Promise<string> {\n if (!config.has('backend.workingDirectory')) {\n return os.tmpdir();\n }\n\n const workingDirectory = config.getString('backend.workingDirectory');\n try {\n // Check if working directory exists and is writable\n await fs.access(workingDirectory, fs.constants.F_OK | fs.constants.W_OK);\n logger.info(`using working directory: ${workingDirectory}`);\n } catch (err) {\n assertError(err);\n logger.error(\n `working directory ${workingDirectory} ${\n err.code === 'ENOENT' ? 'does not exist' : 'is not writable'\n }`,\n );\n throw err;\n }\n return workingDirectory;\n}\n\n/**\n * Gets the base URL of the entity location that points to the source location\n * of the entity description within a repo. If there is not source location\n * or if it has an invalid type, undefined will be returned instead.\n *\n * For file locations this will return a `file://` URL.\n */\nexport function getEntityBaseUrl(entity: Entity): string | undefined {\n let location = entity.metadata.annotations?.[ANNOTATION_SOURCE_LOCATION];\n if (!location) {\n location = entity.metadata.annotations?.[ANNOTATION_LOCATION];\n }\n if (!location) {\n return undefined;\n }\n\n const { type, target } = parseLocationRef(location);\n if (type === 'url') {\n return target;\n } else if (type === 'file') {\n return `file://${target}`;\n }\n\n // Only url and file location are handled, as we otherwise don't know if\n // what the url is pointing to makes sense to use as a baseUrl\n return undefined;\n}\n\n/**\n * Will use the provided CatalogApi to go find the given template entity with an additional token.\n * Returns the matching template, or throws a NotFoundError if no such template existed.\n */\nexport async function findTemplate(options: {\n entityRef: CompoundEntityRef;\n catalog: CatalogService;\n credentials: BackstageCredentials;\n}): Promise<TemplateEntityV1beta3> {\n const { entityRef, catalog, credentials } = options;\n\n if (entityRef.kind.toLocaleLowerCase('en-US') !== 'template') {\n throw new InputError(`Invalid kind, only 'Template' kind is supported`);\n }\n\n const template = await catalog.getEntityByRef(entityRef, {\n credentials,\n });\n if (!template) {\n throw new NotFoundError(\n `Template ${stringifyEntityRef(entityRef)} not found`,\n );\n }\n\n return template as TemplateEntityV1beta3;\n}\n\n/**\n * Takes a single unknown parameter and makes sure that it's a single string or\n * an array of strings, and returns as an array.\n */\nexport function parseStringsParam(\n param: unknown,\n paramName: string,\n): string[] | undefined {\n if (param === undefined) {\n return undefined;\n }\n\n const array = [param].flat();\n if (array.some(p => typeof p !== 'string')) {\n throw new InputError(\n `Invalid ${paramName}, not a string or array of strings`,\n );\n }\n\n return array as string[];\n}\n\nexport function parseNumberParam(\n param: unknown,\n paramName: string,\n): number[] | undefined {\n return parseStringsParam(param, paramName)?.map(val => {\n const ret = Number.parseInt(val, 10);\n if (isNaN(ret)) {\n throw new InputError(\n `Invalid ${paramName} parameter \"${val}\", expected a number or array of numbers`,\n );\n }\n return ret;\n });\n}\n\nexport function flattenParams<T>(...params: (undefined | T | T[])[]): T[] {\n return [...params].flat().filter(Boolean) as T[];\n}\n"],"names":["os","fs","assertError","ANNOTATION_SOURCE_LOCATION","ANNOTATION_LOCATION","parseLocationRef","InputError","NotFoundError","stringifyEntityRef"],"mappings":";;;;;;;;;;;;AAmCsB,eAAA,mBAAA,CACpB,QACA,MACiB,EAAA;AACjB,EAAA,IAAI,CAAC,MAAA,CAAO,GAAI,CAAA,0BAA0B,CAAG,EAAA;AAC3C,IAAA,OAAOA,oBAAG,MAAO,EAAA;AAAA;AAGnB,EAAM,MAAA,gBAAA,GAAmB,MAAO,CAAA,SAAA,CAAU,0BAA0B,CAAA;AACpE,EAAI,IAAA;AAEF,IAAM,MAAAC,mBAAA,CAAG,OAAO,gBAAkB,EAAAA,mBAAA,CAAG,UAAU,IAAO,GAAAA,mBAAA,CAAG,UAAU,IAAI,CAAA;AACvE,IAAO,MAAA,CAAA,IAAA,CAAK,CAA4B,yBAAA,EAAA,gBAAgB,CAAE,CAAA,CAAA;AAAA,WACnD,GAAK,EAAA;AACZ,IAAAC,kBAAA,CAAY,GAAG,CAAA;AACf,IAAO,MAAA,CAAA,KAAA;AAAA,MACL,qBAAqB,gBAAgB,CAAA,CAAA,EACnC,IAAI,IAAS,KAAA,QAAA,GAAW,mBAAmB,iBAC7C,CAAA;AAAA,KACF;AACA,IAAM,MAAA,GAAA;AAAA;AAER,EAAO,OAAA,gBAAA;AACT;AASO,SAAS,iBAAiB,MAAoC,EAAA;AACnE,EAAA,IAAI,QAAW,GAAA,MAAA,CAAO,QAAS,CAAA,WAAA,GAAcC,uCAA0B,CAAA;AACvE,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAW,QAAA,GAAA,MAAA,CAAO,QAAS,CAAA,WAAA,GAAcC,gCAAmB,CAAA;AAAA;AAE9D,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAA,MAAM,EAAE,IAAA,EAAM,MAAO,EAAA,GAAIC,8BAAiB,QAAQ,CAAA;AAClD,EAAA,IAAI,SAAS,KAAO,EAAA;AAClB,IAAO,OAAA,MAAA;AAAA,GACT,MAAA,IAAW,SAAS,MAAQ,EAAA;AAC1B,IAAA,OAAO,UAAU,MAAM,CAAA,CAAA;AAAA;AAKzB,EAAO,OAAA,KAAA,CAAA;AACT;AAMA,eAAsB,aAAa,OAIA,EAAA;AACjC,EAAA,MAAM,EAAE,SAAA,EAAW,OAAS,EAAA,WAAA,EAAgB,GAAA,OAAA;AAE5C,EAAA,IAAI,SAAU,CAAA,IAAA,CAAK,iBAAkB,CAAA,OAAO,MAAM,UAAY,EAAA;AAC5D,IAAM,MAAA,IAAIC,kBAAW,CAAiD,+CAAA,CAAA,CAAA;AAAA;AAGxE,EAAA,MAAM,QAAW,GAAA,MAAM,OAAQ,CAAA,cAAA,CAAe,SAAW,EAAA;AAAA,IACvD;AAAA,GACD,CAAA;AACD,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,MAAM,IAAIC,oBAAA;AAAA,MACR,CAAA,SAAA,EAAYC,+BAAmB,CAAA,SAAS,CAAC,CAAA,UAAA;AAAA,KAC3C;AAAA;AAGF,EAAO,OAAA,QAAA;AACT;AAMgB,SAAA,iBAAA,CACd,OACA,SACsB,EAAA;AACtB,EAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAA,MAAM,KAAQ,GAAA,CAAC,KAAK,CAAA,CAAE,IAAK,EAAA;AAC3B,EAAA,IAAI,MAAM,IAAK,CAAA,CAAA,CAAA,KAAK,OAAO,CAAA,KAAM,QAAQ,CAAG,EAAA;AAC1C,IAAA,MAAM,IAAIF,iBAAA;AAAA,MACR,WAAW,SAAS,CAAA,kCAAA;AAAA,KACtB;AAAA;AAGF,EAAO,OAAA,KAAA;AACT;AAiBO,SAAS,iBAAoB,MAAsC,EAAA;AACxE,EAAA,OAAO,CAAC,GAAG,MAAM,EAAE,IAAK,EAAA,CAAE,OAAO,OAAO,CAAA;AAC1C;;;;;;;;"}
@@ -9,7 +9,6 @@ var pluginPermissionNode = require('@backstage/plugin-permission-node');
9
9
  var pluginScaffolderCommon = require('@backstage/plugin-scaffolder-common');
10
10
  var alpha = require('@backstage/plugin-scaffolder-common/alpha');
11
11
  var express = require('express');
12
- var Router = require('express-promise-router');
13
12
  var jsonschema = require('jsonschema');
14
13
  var luxon = require('luxon');
15
14
  var url = require('url');
@@ -37,11 +36,13 @@ require('../scaffolder/actions/builtin/fetch/templateFile.examples.cjs.js');
37
36
  require('../scaffolder/actions/builtin/filesystem/delete.examples.cjs.js');
38
37
  require('../scaffolder/actions/builtin/filesystem/rename.examples.cjs.js');
39
38
  require('fs/promises');
39
+ require('../scaffolder/actions/builtin/filesystem/read.examples.cjs.js');
40
40
  var TemplateActionRegistry = require('../scaffolder/actions/TemplateActionRegistry.cjs.js');
41
41
  var DatabaseTaskStore = require('../scaffolder/tasks/DatabaseTaskStore.cjs.js');
42
42
  var StorageTaskBroker = require('../scaffolder/tasks/StorageTaskBroker.cjs.js');
43
43
  var TaskWorker = require('../scaffolder/tasks/TaskWorker.cjs.js');
44
44
  var createDryRunner = require('../scaffolder/dryrun/createDryRunner.cjs.js');
45
+ var router = require('../schema/openapi/generated/router.cjs.js');
45
46
  var checkPermissions = require('../util/checkPermissions.cjs.js');
46
47
  var helpers = require('./helpers.cjs.js');
47
48
  var permissions = require('./permissions.cjs.js');
@@ -50,7 +51,6 @@ var rules = require('./rules.cjs.js');
50
51
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
51
52
 
52
53
  var express__default = /*#__PURE__*/_interopDefaultCompat(express);
53
- var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
54
54
 
55
55
  function isSupportedTemplate(entity) {
56
56
  return entity.apiVersion === "scaffolder.backstage.io/v1beta3";
@@ -62,8 +62,8 @@ const readDuration = (config$1, key, defaultValue) => {
62
62
  return defaultValue;
63
63
  };
64
64
  async function createRouter(options) {
65
- const router = Router__default.default();
66
- router.use(express__default.default.json({ limit: "10MB" }));
65
+ const router$1 = await router.createOpenApiRouter();
66
+ router$1.use(express__default.default.json({ limit: "10MB" }));
67
67
  const {
68
68
  logger: parentLogger,
69
69
  config,
@@ -149,6 +149,7 @@ async function createRouter(options) {
149
149
  integrations,
150
150
  logger,
151
151
  auditor,
152
+ config,
152
153
  workingDirectory,
153
154
  concurrentTasksLimit,
154
155
  permissions: permissions$1,
@@ -216,8 +217,8 @@ async function createRouter(options) {
216
217
  ],
217
218
  permissions: alpha.scaffolderPermissions
218
219
  });
219
- router.use(permissionIntegrationRouter);
220
- router.get(
220
+ router$1.use(permissionIntegrationRouter);
221
+ router$1.get(
221
222
  "/v2/templates/:namespace/:kind/:name/parameter-schema",
222
223
  async (req, res) => {
223
224
  const requestedTemplateRef = `${req.params.kind}:${req.params.namespace}/${req.params.name}`;
@@ -389,8 +390,7 @@ async function createRouter(options) {
389
390
  field: match[2]
390
391
  };
391
392
  });
392
- const limit = helpers.parseNumberParam(req.query.limit, "limit");
393
- const offset = helpers.parseNumberParam(req.query.offset, "offset");
393
+ const { limit, offset } = req.query;
394
394
  const taskPermissionFilters = await checkPermissions.getAuthorizeConditions({
395
395
  credentials,
396
396
  permission: alpha.taskReadPermission,
@@ -404,8 +404,8 @@ async function createRouter(options) {
404
404
  },
405
405
  order,
406
406
  pagination: {
407
- limit: limit ? limit[0] : void 0,
408
- offset: offset ? offset[0] : void 0
407
+ limit,
408
+ offset
409
409
  },
410
410
  permissionFilters: taskPermissionFilters
411
411
  });
@@ -519,71 +519,76 @@ async function createRouter(options) {
519
519
  await auditorEvent?.fail({ error: err });
520
520
  throw err;
521
521
  }
522
- }).get("/v2/tasks/:taskId/eventstream", async (req, res) => {
523
- const { taskId } = req.params;
524
- const auditorEvent = await auditor?.createEvent({
525
- eventId: "task",
526
- request: req,
527
- meta: {
528
- actionType: "stream",
529
- taskId
530
- }
531
- });
532
- try {
533
- const credentials = await httpAuth.credentials(req);
534
- const task = await taskBroker.get(taskId);
535
- await checkPermissions.checkTaskPermission({
536
- credentials,
537
- permissions: [alpha.taskReadPermission],
538
- permissionService: permissions$1,
539
- task,
540
- isTaskAuthorized
541
- });
542
- const after = req.query.after !== void 0 ? Number(req.query.after) : void 0;
543
- logger.debug(`Event stream observing taskId '${taskId}' opened`);
544
- res.writeHead(200, {
545
- Connection: "keep-alive",
546
- "Cache-Control": "no-cache",
547
- "Content-Type": "text/event-stream"
522
+ });
523
+ router$1.get(
524
+ "/v2/tasks/:taskId/eventstream",
525
+ async (req, res) => {
526
+ const { taskId } = req.params;
527
+ const auditorEvent = await auditor?.createEvent({
528
+ eventId: "task",
529
+ request: req,
530
+ meta: {
531
+ actionType: "stream",
532
+ taskId
533
+ }
548
534
  });
549
- const subscription = taskBroker.event$({ taskId, after }).subscribe({
550
- error: async (error) => {
551
- logger.error(
552
- `Received error from event stream when observing taskId '${taskId}', ${error}`
553
- );
554
- await auditorEvent?.fail({ error });
555
- res.end();
556
- },
557
- next: ({ events }) => {
558
- let shouldUnsubscribe = false;
559
- for (const event of events) {
560
- res.write(
561
- `event: ${event.type}
535
+ try {
536
+ const credentials = await httpAuth.credentials(req);
537
+ const task = await taskBroker.get(taskId);
538
+ await checkPermissions.checkTaskPermission({
539
+ credentials,
540
+ permissions: [alpha.taskReadPermission],
541
+ permissionService: permissions$1,
542
+ task,
543
+ isTaskAuthorized
544
+ });
545
+ const after = req.query.after !== void 0 ? Number(req.query.after) : void 0;
546
+ logger.debug(`Event stream observing taskId '${taskId}' opened`);
547
+ res.writeHead(200, {
548
+ Connection: "keep-alive",
549
+ "Cache-Control": "no-cache",
550
+ "Content-Type": "text/event-stream"
551
+ });
552
+ const subscription = taskBroker.event$({ taskId, after }).subscribe({
553
+ error: async (error) => {
554
+ logger.error(
555
+ `Received error from event stream when observing taskId '${taskId}', ${error}`
556
+ );
557
+ await auditorEvent?.fail({ error });
558
+ res.end();
559
+ },
560
+ next: ({ events }) => {
561
+ let shouldUnsubscribe = false;
562
+ for (const event of events) {
563
+ res.write(
564
+ `event: ${event.type}
562
565
  data: ${JSON.stringify(event)}
563
566
 
564
567
  `
565
- );
566
- if (event.type === "completion" && !event.isTaskRecoverable) {
567
- shouldUnsubscribe = true;
568
+ );
569
+ if (event.type === "completion" && !event.isTaskRecoverable) {
570
+ shouldUnsubscribe = true;
571
+ }
572
+ }
573
+ res.flush?.();
574
+ if (shouldUnsubscribe) {
575
+ subscription.unsubscribe();
576
+ res.end();
568
577
  }
569
578
  }
570
- res.flush?.();
571
- if (shouldUnsubscribe) {
572
- subscription.unsubscribe();
573
- res.end();
574
- }
575
- }
576
- });
577
- req.on("close", async () => {
578
- subscription.unsubscribe();
579
- logger.debug(`Event stream observing taskId '${taskId}' closed`);
580
- await auditorEvent?.success();
581
- });
582
- } catch (err) {
583
- await auditorEvent?.fail({ error: err });
584
- throw err;
579
+ });
580
+ req.on("close", async () => {
581
+ subscription.unsubscribe();
582
+ logger.debug(`Event stream observing taskId '${taskId}' closed`);
583
+ await auditorEvent?.success();
584
+ });
585
+ } catch (err) {
586
+ await auditorEvent?.fail({ error: err });
587
+ throw err;
588
+ }
585
589
  }
586
- }).get("/v2/tasks/:taskId/events", async (req, res) => {
590
+ );
591
+ router$1.get("/v2/tasks/:taskId/events", async (req, res) => {
587
592
  const { taskId } = req.params;
588
593
  const auditorEvent = await auditor?.createEvent({
589
594
  eventId: "task",
@@ -767,7 +772,7 @@ data: ${JSON.stringify(event)}
767
772
  });
768
773
  const app = express__default.default();
769
774
  app.set("logger", logger);
770
- app.use("/", router);
775
+ app.use("/", router$1);
771
776
  async function authorizeTemplate(entityRef, credentials) {
772
777
  const template = await helpers.findTemplate({
773
778
  catalog,