- Información general
- Funciones JavaScript
- Primeros pasos
- Crear funciones JavaScript
- Desencadenadores HTTP y enrutamiento
- Contexto de la función
- Acceder a los servicios de la plataforma
- Pruebas y depuración
- Funciones de Python
- Implementar y ejecutar
Acceder a los servicios de la plataforma
Activos, depósitos, colas y procesos de Orchestrator disponibles para una función JavaScript a través del SDK de TypeScript de UiPath, con la posibilidad de elegir entre identidad delegada y de función.
Las funciones de JavaScript llegan a los recursos de la plataforma a través del SDK de TypeScript de UiPath. No hay nada codificado en el paquete: las coordenadas provienen de ctx.platform y el token de una de las dos identidades que proporciona el runtime.
import { UiPath } from "@uipath/uipath-typescript/core";
import { Assets } from "@uipath/uipath-typescript/assets";
const { baseUrl, orgId, tenantId } = ctx.platform;
const sdk = new UiPath({
baseUrl,
orgName: orgId,
tenantName: tenantId,
secret: ctx.user.accessToken, // or ctx.robot.accessToken
});
import { UiPath } from "@uipath/uipath-typescript/core";
import { Assets } from "@uipath/uipath-typescript/assets";
const { baseUrl, orgId, tenantId } = ctx.platform;
const sdk = new UiPath({
baseUrl,
orgName: orgId,
tenantName: tenantId,
secret: ctx.user.accessToken, // or ctx.robot.accessToken
});
@uipath/uipath-typescript pertenece a dependencies, no a devDependencies: la función implementada instala solo las dependencias de producción.
Elegir la identidad
| Patrón | Token | Quién necesita acceso a la carpeta |
|---|---|---|
| Delegado | ctx.user.accessToken | El usuario que llama necesita Assets.View en la carpeta |
| Identidad de función | ctx.robot.accessToken | Solo la cuenta de servicio de la función; la persona que llama no necesita nada |
Delegado es la opción predeterminada: se aplican los propios permisos de la persona que llama, por lo que la función no se puede utilizar para ver más de lo que la persona que llama tiene derecho a ver. La propia identidad de la función es para los recursos que deben permanecer fuera del alcance de la persona que llama: una credencial en una carpeta restringida que solo la función puede leer.
En ese caso, lo que obtiene el controlador debe estar restringido. Un backend privilegiado que lee un nombre de recurso proporcionado por la persona que llama entregará cualquier cosa que su identidad pueda ver:
const READABLE = new Set(["PartnerApiCredential"]);
if (!READABLE.has(input.assetName)) {
throw new FunctionError(`"${input.assetName}" is not readable by this function.`, 403);
}
const READABLE = new Set(["PartnerApiCredential"]);
if (!READABLE.has(input.assetName)) {
throw new FunctionError(`"${input.assetName}" is not readable by this function.`, 403);
}
Activos
const response = await new Assets(sdk).getAll({
filter: `Name eq 'ApiBaseUrl'`,
folderId: 42,
});
const value = response.items[0]?.value;
const response = await new Assets(sdk).getAll({
filter: `Name eq 'ApiBaseUrl'`,
folderId: 42,
});
const value = response.items[0]?.value;
folderId es obligatorio: sin él, la llamada devuelve metadatos con valores vacíos.
folderId es el ID numérico de la carpeta, no su clave. Una clave de carpeta es un GUID, y pasar uno donde pertenece el ID numérico se rechaza como un error de permisos en lugar de un identificador incorrecto, que te envía a buscar en el lugar equivocado. ctx.platform.folderKey te da la clave de la invocación actual; resuelve el ID numérico a partir de él cuando una llamada lo necesite.
Estos puntos finales no devuelven el nombre de usuario y la contraseña de un activo de Credencial, para ningún token. Leer uno requiere la propia identidad de la función y la ruta de ejecución del robot, que necesita ctx.robot.key, por lo que solo funciona en una ejecución implementada. Consulta Llamar a Orchestrator.
Para un activo secreto , el valor llega al campo SecretValue . StringValue, el campo que lleva el valor de un activo de texto, está vacío para un secreto: leerlo parece una característica rota en lugar de un campo incorrecto.
Un activo también tiene una configuración AllowDirectApiAccess que hace que su valor sea legible con el propio token de la persona que llama. Activarlo es una ampliación, no un paso de habilitación: la configuración es ciega a la identidad, por lo que el valor se vuelve legible para todas las identidades que contienen Assets.View en la carpeta, incluido un navegador que contiene el token del usuario que ha iniciado sesión. La propia identidad de la función es la opción más segura que habilitar esta configuración.
Otros servicios
El mismo cliente expone depósitos, colas, trabajos, procesos, entidades y conexiones de Integration Service. Consulta la referencia del SDK para ver la superficie completa.
Credenciales y seguridad
- Los secretos residen en los activos de Orchestrator y se leen en runtime; nunca los codifiques ni los confirmes en el proyecto.
- El control de acceso basado en roles (RBAC) a nivel de carpeta rige lo que puede leer cada identidad. Con el patrón delegado que es el acceso de la persona que llama; con la propia identidad de la función es la de la cuenta de servicio.
- Devuelve un resultado derivado en lugar de un secreto siempre que puedas y registra la acción, nunca el valor.