mirror of
https://github.com/Skyvern-AI/skyvern.git
synced 2026-07-09 16:09:13 +00:00
fix(SKY-12078): restore run-level editable credential input for single-credential login blocks (#7219)
Some checks are pending
Run tests and pre-commit / Run tests and pre-commit hooks (push) Waiting to run
Run tests and pre-commit / Frontend Lint and Build (push) Waiting to run
Run tests and pre-commit / pip Package Smoke Tests (3.11) (push) Waiting to run
Run tests and pre-commit / pip Package Smoke Tests (3.13) (push) Waiting to run
Publish Fern Docs / run (push) Waiting to run
Some checks are pending
Run tests and pre-commit / Run tests and pre-commit hooks (push) Waiting to run
Run tests and pre-commit / Frontend Lint and Build (push) Waiting to run
Run tests and pre-commit / pip Package Smoke Tests (3.11) (push) Waiting to run
Run tests and pre-commit / pip Package Smoke Tests (3.13) (push) Waiting to run
Publish Fern Docs / run (push) Waiting to run
This commit is contained in:
parent
7681a7cd2b
commit
26f73ec044
3 changed files with 95 additions and 26 deletions
|
|
@ -69,7 +69,6 @@ import {
|
|||
WorkflowApiResponse,
|
||||
WorkflowEditorParameterTypes,
|
||||
WorkflowParameterTypes,
|
||||
WorkflowParameterValueType,
|
||||
} from "../types/workflowTypes";
|
||||
import {
|
||||
BitwardenCreditCardDataParameterYAML,
|
||||
|
|
@ -123,6 +122,7 @@ import {
|
|||
parameterIsBitwardenCredential,
|
||||
parameterIsAzureVaultCredential,
|
||||
} from "./types";
|
||||
import { skyvernCredentialToParameterYAML } from "./utils";
|
||||
import "./reactFlowOverrideStyles.css";
|
||||
import {
|
||||
convertEchoParameters,
|
||||
|
|
@ -316,29 +316,7 @@ function convertToParametersYAML(
|
|||
BITWARDEN_MASTER_PASSWORD_AWS_SECRET_KEY,
|
||||
};
|
||||
} else if (parameterIsSkyvernCredential(parameter)) {
|
||||
const hasCredentialRotation =
|
||||
(parameter.credentialIds?.length ?? 0) >= 2;
|
||||
if (
|
||||
parameter.dataType === WorkflowParameterValueType.CredentialId &&
|
||||
!hasCredentialRotation
|
||||
) {
|
||||
return {
|
||||
parameter_type: WorkflowParameterTypes.Workflow,
|
||||
workflow_parameter_type:
|
||||
WorkflowParameterValueType.CredentialId,
|
||||
default_value: parameter.credentialId,
|
||||
key: parameter.key,
|
||||
description: parameter.description || null,
|
||||
};
|
||||
}
|
||||
return {
|
||||
parameter_type: WorkflowParameterTypes.Credential,
|
||||
credential_id: parameter.credentialId,
|
||||
credential_ids: parameter.credentialIds ?? null,
|
||||
selection_strategy: parameter.selectionStrategy ?? null,
|
||||
key: parameter.key,
|
||||
description: parameter.description || null,
|
||||
};
|
||||
return skyvernCredentialToParameterYAML(parameter);
|
||||
} else if (parameterIsOnePasswordCredential(parameter)) {
|
||||
return {
|
||||
parameter_type: WorkflowParameterTypes.OnePassword,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ import {
|
|||
type WorkflowApiResponse,
|
||||
WorkflowParameterValueType,
|
||||
} from "../types/workflowTypes";
|
||||
import { getInitialParameters } from "./utils";
|
||||
import {
|
||||
getInitialParameters,
|
||||
skyvernCredentialToParameterYAML,
|
||||
} from "./utils";
|
||||
import { SkyvernCredential } from "./types";
|
||||
|
||||
const baseWorkflow = {
|
||||
workflow_id: "w_test",
|
||||
|
|
@ -98,3 +102,57 @@ describe("getInitialParameters", () => {
|
|||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("skyvernCredentialToParameterYAML", () => {
|
||||
test("serializes a freshly selected single credential (no dataType) as an editable workflow credential_id parameter", () => {
|
||||
const parameter: SkyvernCredential = {
|
||||
key: "credentials",
|
||||
parameterType: "credential",
|
||||
credentialId: "cred_123",
|
||||
};
|
||||
|
||||
expect(skyvernCredentialToParameterYAML(parameter)).toEqual({
|
||||
parameter_type: "workflow",
|
||||
workflow_parameter_type: WorkflowParameterValueType.CredentialId,
|
||||
default_value: "cred_123",
|
||||
key: "credentials",
|
||||
description: null,
|
||||
});
|
||||
});
|
||||
|
||||
test("serializes a legacy single credential (dataType set) as an editable workflow credential_id parameter", () => {
|
||||
const parameter: SkyvernCredential = {
|
||||
key: "credentials",
|
||||
parameterType: "credential",
|
||||
credentialId: "cred_123",
|
||||
dataType: WorkflowParameterValueType.CredentialId,
|
||||
};
|
||||
|
||||
expect(skyvernCredentialToParameterYAML(parameter)).toEqual({
|
||||
parameter_type: "workflow",
|
||||
workflow_parameter_type: WorkflowParameterValueType.CredentialId,
|
||||
default_value: "cred_123",
|
||||
key: "credentials",
|
||||
description: null,
|
||||
});
|
||||
});
|
||||
|
||||
test("serializes a rotation pool (2+ credentials) as a credential parameter", () => {
|
||||
const parameter: SkyvernCredential = {
|
||||
key: "credentials",
|
||||
parameterType: "credential",
|
||||
credentialId: "cred_1",
|
||||
credentialIds: ["cred_1", "cred_2"],
|
||||
selectionStrategy: "round_robin",
|
||||
};
|
||||
|
||||
expect(skyvernCredentialToParameterYAML(parameter)).toEqual({
|
||||
parameter_type: "credential",
|
||||
credential_id: "cred_1",
|
||||
credential_ids: ["cred_1", "cred_2"],
|
||||
selection_strategy: "round_robin",
|
||||
key: "credentials",
|
||||
description: null,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -6,7 +6,39 @@ import {
|
|||
WorkflowParameterTypes,
|
||||
WorkflowParameterValueType,
|
||||
} from "../types/workflowTypes";
|
||||
import { ParametersState } from "./types";
|
||||
import {
|
||||
CredentialParameterYAML,
|
||||
WorkflowParameterYAML,
|
||||
} from "../types/workflowYamlTypes";
|
||||
import { ParametersState, SkyvernCredential } from "./types";
|
||||
|
||||
/**
|
||||
* A single credential serializes to an editable workflow `credential_id`
|
||||
* parameter (overridable at run/rerun time); only a rotation pool (2+
|
||||
* credentials) becomes a block-scoped credential parameter.
|
||||
*/
|
||||
function skyvernCredentialToParameterYAML(
|
||||
parameter: SkyvernCredential,
|
||||
): WorkflowParameterYAML | CredentialParameterYAML {
|
||||
const hasCredentialRotation = (parameter.credentialIds?.length ?? 0) >= 2;
|
||||
if (!hasCredentialRotation) {
|
||||
return {
|
||||
parameter_type: WorkflowParameterTypes.Workflow,
|
||||
workflow_parameter_type: WorkflowParameterValueType.CredentialId,
|
||||
default_value: parameter.credentialId,
|
||||
key: parameter.key,
|
||||
description: parameter.description || null,
|
||||
};
|
||||
}
|
||||
return {
|
||||
parameter_type: WorkflowParameterTypes.Credential,
|
||||
credential_id: parameter.credentialId,
|
||||
credential_ids: parameter.credentialIds ?? null,
|
||||
selection_strategy: parameter.selectionStrategy ?? null,
|
||||
key: parameter.key,
|
||||
description: parameter.description || null,
|
||||
};
|
||||
}
|
||||
|
||||
const getInitialParameters = (workflow: WorkflowApiResponse) => {
|
||||
return workflow.workflow_definition.parameters
|
||||
|
|
@ -173,4 +205,5 @@ export {
|
|||
constructCacheKeyValue,
|
||||
constructCacheKeyValueFromParameters,
|
||||
getInitialParameters,
|
||||
skyvernCredentialToParameterYAML,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue