From e57c09da335ff95a767a6b17424c4a2a0a764caf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 06:12:52 +0000 Subject: [PATCH 1/6] Initial plan From a75aaf852fb61d35dc1e771b458166fcc9fec9ab Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 12:28:00 +0000 Subject: [PATCH 2/6] Add strict contract descriptors, CI validation job, and fix plugin.json downloads Agent-Logs-Url: https://github.com/GoCodeAlone/workflow-plugin-okta/sessions/3858ffaf-833c-4171-8bc8-dc1b60bab928 Co-authored-by: intel352 <77607+intel352@users.noreply.github.com> --- .github/workflows/ci.yml | 14 + go.mod | 2 +- plugin.contracts.json | 1756 ++++++++++++++++++++++++++++++++++++++ plugin.json | 24 +- 4 files changed, 1794 insertions(+), 2 deletions(-) create mode 100644 plugin.contracts.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8204db7..ab14ac1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,3 +14,17 @@ jobs: go-version-file: go.mod - run: go build ./... - run: go test ./... -v -race -count=1 + + wfctl-strict-contracts: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + - name: Fail fast if plugin.json is missing + run: test -f plugin.json || (echo "plugin.json not found" && exit 1) + - name: Validate plugin manifest + run: go run github.com/GoCodeAlone/workflow/cmd/wfctl@v0.3.56 plugin validate --file plugin.json diff --git a/go.mod b/go.mod index ba692c9..bae3202 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.26.0 require ( github.com/GoCodeAlone/workflow v0.3.56 github.com/okta/okta-sdk-golang/v6 v6.1.5 + github.com/patrickmn/go-cache v2.1.0+incompatible ) require ( @@ -167,7 +168,6 @@ require ( github.com/oklog/run v1.2.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect - github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.25 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect diff --git a/plugin.contracts.json b/plugin.contracts.json new file mode 100644 index 0000000..ca9aa20 --- /dev/null +++ b/plugin.contracts.json @@ -0,0 +1,1756 @@ +{ + "schema_version": "1.0", + "plugin": "workflow-plugin-okta", + "modules": { + "okta.provider": { + "config": { + "required": { + "orgUrl": { + "type": "string", + "description": "Okta organization URL (e.g. https://your-org.okta.com)" + } + }, + "optional": { + "apiToken": { + "type": "string", + "description": "Okta API token for SSWS authentication" + }, + "clientId": { + "type": "string", + "description": "OAuth 2.0 client ID for private-key authentication" + }, + "privateKey": { + "type": "string", + "description": "PEM-encoded RSA private key for private-key authentication" + }, + "scopes": { + "type": "slice", + "description": "OAuth 2.0 scopes; defaults to okta.users.manage, okta.groups.manage, okta.apps.manage when using private-key auth" + } + } + } + } + }, + "steps": { + "step.okta_user_create": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name (defaults to 'okta')"}, + "profile": {"type": "map", "description": "Full Okta user profile object; when provided, firstName/lastName/email/login are ignored"}, + "firstName": {"type": "string", "description": "User first name (used when profile map is absent)"}, + "lastName": {"type": "string", "description": "User last name"}, + "email": {"type": "string", "description": "User email address (required when profile is absent)"}, + "login": {"type": "string", "description": "User login; defaults to email when absent"}, + "credentials": {"type": "map", "description": "Okta credentials object (password, recovery question, etc.)"}, + "activate": {"type": "bool", "description": "Activate the user immediately after creation"} + }, + "outputs": { + "id": {"type": "string", "description": "Okta user ID"}, + "status": {"type": "string", "description": "User status"}, + "profile": {"type": "map", "description": "User profile object"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_get": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Okta user ID"}, + "status": {"type": "string", "description": "User status"}, + "profile": {"type": "map", "description": "User profile object"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "q": {"type": "string", "description": "Search query string"}, + "filter": {"type": "string", "description": "SCIM filter expression"}, + "limit": {"type": "int", "description": "Maximum number of results"}, + "after": {"type": "string", "description": "Cursor for pagination"} + }, + "outputs": { + "users": {"type": "slice", "description": "List of user objects"}, + "count": {"type": "int", "description": "Number of users returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_update": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "profile": {"type": "map", "description": "Profile fields to update"}, + "credentials": {"type": "map", "description": "Credentials to update"} + }, + "outputs": { + "id": {"type": "string", "description": "Okta user ID"}, + "status": {"type": "string", "description": "User status"}, + "profile": {"type": "map", "description": "Updated user profile"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_delete": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_activate": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "sendEmail": {"type": "bool", "description": "Send an activation email to the user"} + }, + "outputs": { + "activationUrl": {"type": "string", "description": "Activation URL (when sendEmail is false)"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_deactivate": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_reactivate": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "activationUrl": {"type": "string", "description": "Activation URL"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_suspend": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_unsuspend": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_unlock": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_reset_factors": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_change_password": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"}, + "newPassword": {"type": "string", "description": "New password value"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "oldPassword": {"type": "string", "description": "Current password (required for self-service change)"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_reset_password": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "sendEmail": {"type": "bool", "description": "Send a reset password email"} + }, + "outputs": { + "resetPasswordUrl": {"type": "string", "description": "Password reset URL (when sendEmail is false)"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_expire_password": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_user_set_recovery_question": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID or login"}, + "question": {"type": "string", "description": "Security question text"}, + "answer": {"type": "string", "description": "Security question answer"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_create": { + "required_inputs": { + "name": {"type": "string", "description": "Group name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "description": {"type": "string", "description": "Group description"} + }, + "outputs": { + "id": {"type": "string", "description": "Okta group ID"}, + "profile": {"type": "map", "description": "Group profile object"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_get": { + "required_inputs": { + "groupId": {"type": "string", "description": "Okta group ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Okta group ID"}, + "profile": {"type": "map", "description": "Group profile object"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "q": {"type": "string", "description": "Search query string"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "groups": {"type": "slice", "description": "List of group objects"}, + "count": {"type": "int", "description": "Number of groups returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_delete": { + "required_inputs": { + "groupId": {"type": "string", "description": "Okta group ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_add_user": { + "required_inputs": { + "groupId": {"type": "string", "description": "Okta group ID"}, + "userId": {"type": "string", "description": "Okta user ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_remove_user": { + "required_inputs": { + "groupId": {"type": "string", "description": "Okta group ID"}, + "userId": {"type": "string", "description": "Okta user ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_list_users": { + "required_inputs": { + "groupId": {"type": "string", "description": "Okta group ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "users": {"type": "slice", "description": "List of user objects"}, + "count": {"type": "int", "description": "Number of users returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_rule_create": { + "required_inputs": { + "name": {"type": "string", "description": "Group rule name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "conditions": {"type": "map", "description": "Rule conditions object"}, + "actions": {"type": "map", "description": "Rule actions object"} + }, + "outputs": { + "id": {"type": "string", "description": "Group rule ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_rule_get": { + "required_inputs": { + "ruleId": {"type": "string", "description": "Group rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Group rule ID"}, + "name": {"type": "string", "description": "Group rule name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_rule_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "rules": {"type": "slice", "description": "List of group rule objects"}, + "count": {"type": "int", "description": "Number of rules returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_rule_delete": { + "required_inputs": { + "ruleId": {"type": "string", "description": "Group rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_rule_activate": { + "required_inputs": { + "ruleId": {"type": "string", "description": "Group rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_group_rule_deactivate": { + "required_inputs": { + "ruleId": {"type": "string", "description": "Group rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_create": { + "required_inputs": { + "label": {"type": "string", "description": "Application label"}, + "signOnMode": {"type": "string", "description": "Sign-on mode (e.g. SAML_2_0, OIDC, BOOKMARK)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "name": {"type": "string", "description": "Application name (slug)"}, + "settings": {"type": "map", "description": "Application settings object"}, + "visibility": {"type": "map", "description": "Application visibility settings"} + }, + "outputs": { + "id": {"type": "string", "description": "Application ID"}, + "label": {"type": "string", "description": "Application label"}, + "status": {"type": "string", "description": "Application status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_get": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Application ID"}, + "label": {"type": "string", "description": "Application label"}, + "status": {"type": "string", "description": "Application status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "q": {"type": "string", "description": "Search query string"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "apps": {"type": "slice", "description": "List of application objects"}, + "count": {"type": "int", "description": "Number of applications returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_update": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "label": {"type": "string", "description": "Updated application label"}, + "settings": {"type": "map", "description": "Updated application settings"} + }, + "outputs": { + "id": {"type": "string", "description": "Application ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_delete": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_activate": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_deactivate": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_user_assign": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "userId": {"type": "string", "description": "Okta user ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "profile": {"type": "map", "description": "App user profile"}, + "scope": {"type": "string", "description": "Assignment scope"} + }, + "outputs": { + "id": {"type": "string", "description": "App user assignment ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_user_get": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "userId": {"type": "string", "description": "Okta user ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "App user assignment ID"}, + "profile": {"type": "map", "description": "App user profile"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_user_list": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "users": {"type": "slice", "description": "List of app user assignment objects"}, + "count": {"type": "int", "description": "Number of assignments returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_user_update": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "userId": {"type": "string", "description": "Okta user ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "profile": {"type": "map", "description": "Updated app user profile"} + }, + "outputs": { + "id": {"type": "string", "description": "App user assignment ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_user_unassign": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "userId": {"type": "string", "description": "Okta user ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_group_assign": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "groupId": {"type": "string", "description": "Okta group ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "profile": {"type": "map", "description": "Group assignment profile"}, + "priority": {"type": "int", "description": "Assignment priority"} + }, + "outputs": { + "id": {"type": "string", "description": "App group assignment ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_group_get": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "groupId": {"type": "string", "description": "Okta group ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "App group assignment ID"}, + "profile": {"type": "map", "description": "Group assignment profile"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_group_list": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "groups": {"type": "slice", "description": "List of app group assignment objects"}, + "count": {"type": "int", "description": "Number of assignments returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_group_update": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "groupId": {"type": "string", "description": "Okta group ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "profile": {"type": "map", "description": "Updated group assignment profile"}, + "priority": {"type": "int", "description": "Updated priority"} + }, + "outputs": { + "id": {"type": "string", "description": "App group assignment ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_app_group_unassign": { + "required_inputs": { + "appId": {"type": "string", "description": "Application ID"}, + "groupId": {"type": "string", "description": "Okta group ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_server_create": { + "required_inputs": { + "name": {"type": "string", "description": "Authorization server name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "description": {"type": "string", "description": "Server description"}, + "audiences": {"type": "slice", "description": "Token audiences"}, + "issuerMode": {"type": "string", "description": "Issuer mode (ORG_URL or CUSTOM_URL)"} + }, + "outputs": { + "id": {"type": "string", "description": "Authorization server ID"}, + "name": {"type": "string", "description": "Authorization server name"}, + "issuer": {"type": "string", "description": "Issuer URL"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_server_get": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Authorization server ID"}, + "name": {"type": "string", "description": "Authorization server name"}, + "issuer": {"type": "string", "description": "Issuer URL"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_server_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "servers": {"type": "slice", "description": "List of authorization server objects"}, + "count": {"type": "int", "description": "Number of servers returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_server_update": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "name": {"type": "string", "description": "Updated server name"}, + "description": {"type": "string", "description": "Updated description"} + }, + "outputs": { + "id": {"type": "string", "description": "Authorization server ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_server_delete": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_server_activate": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_server_deactivate": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_claim_create": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "name": {"type": "string", "description": "Claim name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "valueType": {"type": "string", "description": "Claim value type (EXPRESSION or GROUPS)"}, + "value": {"type": "string", "description": "Claim value expression"}, + "claimType": {"type": "string", "description": "Claim type (RESOURCE or IDENTITY)"}, + "alwaysIncludeInToken": {"type": "bool", "description": "Always include in token"} + }, + "outputs": { + "id": {"type": "string", "description": "Claim ID"}, + "name": {"type": "string", "description": "Claim name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_claim_list": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "claims": {"type": "slice", "description": "List of claim objects"}, + "count": {"type": "int", "description": "Number of claims returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_claim_delete": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "claimId": {"type": "string", "description": "Claim ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_scope_create": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "name": {"type": "string", "description": "Scope name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "description": {"type": "string", "description": "Scope description"}, + "consent": {"type": "string", "description": "Consent requirement (REQUIRED, IMPLICIT, or FLEXIBLE)"}, + "metadataPublish": {"type": "string", "description": "Metadata publish setting"} + }, + "outputs": { + "id": {"type": "string", "description": "Scope ID"}, + "name": {"type": "string", "description": "Scope name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_scope_list": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "scopes": {"type": "slice", "description": "List of scope objects"}, + "count": {"type": "int", "description": "Number of scopes returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_scope_delete": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "scopeId": {"type": "string", "description": "Scope ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_policy_create": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "name": {"type": "string", "description": "Policy name"}, + "type": {"type": "string", "description": "Policy type"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "description": {"type": "string", "description": "Policy description"}, + "conditions": {"type": "map", "description": "Policy conditions object"} + }, + "outputs": { + "id": {"type": "string", "description": "Policy ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_policy_list": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "policies": {"type": "slice", "description": "List of policy objects"}, + "count": {"type": "int", "description": "Number of policies returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_policy_delete": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "policyId": {"type": "string", "description": "Policy ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_policy_rule_create": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "policyId": {"type": "string", "description": "Policy ID"}, + "name": {"type": "string", "description": "Rule name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "type": {"type": "string", "description": "Rule type"}, + "conditions": {"type": "map", "description": "Rule conditions"}, + "actions": {"type": "map", "description": "Rule actions"} + }, + "outputs": { + "id": {"type": "string", "description": "Rule ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_policy_rule_list": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "policyId": {"type": "string", "description": "Policy ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "rules": {"type": "slice", "description": "List of policy rule objects"}, + "count": {"type": "int", "description": "Number of rules returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_policy_rule_delete": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, + "policyId": {"type": "string", "description": "Policy ID"}, + "ruleId": {"type": "string", "description": "Rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_key_list": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "keys": {"type": "slice", "description": "List of JSON Web Key objects"}, + "count": {"type": "int", "description": "Number of keys returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authz_key_rotate": { + "required_inputs": { + "authorizationServerId": {"type": "string", "description": "Authorization server ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "use": {"type": "string", "description": "Key use (sig)"} + }, + "outputs": { + "keys": {"type": "slice", "description": "List of rotated JSON Web Key objects"}, + "count": {"type": "int", "description": "Number of keys returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_create": { + "required_inputs": { + "name": {"type": "string", "description": "Policy name"}, + "type": {"type": "string", "description": "Policy type (e.g. OKTA_SIGN_ON, PASSWORD, MFA_ENROLL)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "description": {"type": "string", "description": "Policy description"}, + "conditions": {"type": "map", "description": "Policy conditions object"}, + "status": {"type": "string", "description": "Policy status (ACTIVE or INACTIVE)"} + }, + "outputs": { + "id": {"type": "string", "description": "Policy ID"}, + "name": {"type": "string", "description": "Policy name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_get": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Policy ID"}, + "name": {"type": "string", "description": "Policy name"}, + "type": {"type": "string", "description": "Policy type"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_list": { + "required_inputs": { + "type": {"type": "string", "description": "Policy type to list"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "policies": {"type": "slice", "description": "List of policy objects"}, + "count": {"type": "int", "description": "Number of policies returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_delete": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_activate": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_deactivate": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_rule_create": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"}, + "name": {"type": "string", "description": "Rule name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "type": {"type": "string", "description": "Rule type"}, + "conditions": {"type": "map", "description": "Rule conditions"}, + "actions": {"type": "map", "description": "Rule actions"} + }, + "outputs": { + "id": {"type": "string", "description": "Policy rule ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_rule_list": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "rules": {"type": "slice", "description": "List of policy rule objects"}, + "count": {"type": "int", "description": "Number of rules returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_rule_delete": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"}, + "ruleId": {"type": "string", "description": "Rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_rule_activate": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"}, + "ruleId": {"type": "string", "description": "Rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_policy_rule_deactivate": { + "required_inputs": { + "policyId": {"type": "string", "description": "Policy ID"}, + "ruleId": {"type": "string", "description": "Rule ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authenticator_create": { + "required_inputs": { + "key": {"type": "string", "description": "Authenticator key (e.g. okta_email, google_otp)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "name": {"type": "string", "description": "Authenticator display name"}, + "type": {"type": "string", "description": "Authenticator type"}, + "settings": {"type": "map", "description": "Authenticator settings"} + }, + "outputs": { + "id": {"type": "string", "description": "Authenticator ID"}, + "key": {"type": "string", "description": "Authenticator key"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authenticator_get": { + "required_inputs": { + "authenticatorId": {"type": "string", "description": "Authenticator ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Authenticator ID"}, + "key": {"type": "string", "description": "Authenticator key"}, + "status": {"type": "string", "description": "Authenticator status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authenticator_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "authenticators": {"type": "slice", "description": "List of authenticator objects"}, + "count": {"type": "int", "description": "Number of authenticators returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authenticator_activate": { + "required_inputs": { + "authenticatorId": {"type": "string", "description": "Authenticator ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Authenticator ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_authenticator_deactivate": { + "required_inputs": { + "authenticatorId": {"type": "string", "description": "Authenticator ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Authenticator ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_factor_enroll": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID"}, + "factorType": {"type": "string", "description": "Factor type (e.g. token:software:totp, email)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "provider": {"type": "string", "description": "Factor provider (GOOGLE, OKTA, etc.)"}, + "profile": {"type": "map", "description": "Factor profile data"} + }, + "outputs": { + "id": {"type": "string", "description": "Factor ID"}, + "factorType": {"type": "string", "description": "Factor type"}, + "status": {"type": "string", "description": "Factor enrollment status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_factor_list": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "factors": {"type": "slice", "description": "List of enrolled factor objects"}, + "count": {"type": "int", "description": "Number of factors returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_factor_verify": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID"}, + "factorId": {"type": "string", "description": "Factor ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "passCode": {"type": "string", "description": "OTP pass code for verification"} + }, + "outputs": { + "factorResult": {"type": "string", "description": "Verification result (SUCCESS, CHALLENGE, etc.)"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_factor_unenroll": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID"}, + "factorId": {"type": "string", "description": "Factor ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_factor_activate": { + "required_inputs": { + "userId": {"type": "string", "description": "Okta user ID"}, + "factorId": {"type": "string", "description": "Factor ID"}, + "passCode": {"type": "string", "description": "Activation pass code"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Factor ID"}, + "status": {"type": "string", "description": "Factor status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_idp_create": { + "required_inputs": { + "name": {"type": "string", "description": "Identity provider name"}, + "type": {"type": "string", "description": "IdP type (e.g. SAML2, OIDC, GOOGLE, FACEBOOK)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "protocol": {"type": "map", "description": "Protocol configuration"}, + "policy": {"type": "map", "description": "Policy configuration"} + }, + "outputs": { + "id": {"type": "string", "description": "IdP ID"}, + "name": {"type": "string", "description": "IdP name"}, + "type": {"type": "string", "description": "IdP type"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_idp_get": { + "required_inputs": { + "idpId": {"type": "string", "description": "Identity provider ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "IdP ID"}, + "name": {"type": "string", "description": "IdP name"}, + "type": {"type": "string", "description": "IdP type"}, + "status": {"type": "string", "description": "IdP status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_idp_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "idps": {"type": "slice", "description": "List of identity provider objects"}, + "count": {"type": "int", "description": "Number of IdPs returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_idp_delete": { + "required_inputs": { + "idpId": {"type": "string", "description": "Identity provider ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_idp_activate": { + "required_inputs": { + "idpId": {"type": "string", "description": "Identity provider ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_idp_deactivate": { + "required_inputs": { + "idpId": {"type": "string", "description": "Identity provider ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_session_get": { + "required_inputs": { + "sessionId": {"type": "string", "description": "Okta session ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Session ID"}, + "status": {"type": "string", "description": "Session status"}, + "userId": {"type": "string", "description": "User ID associated with the session"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_session_refresh": { + "required_inputs": { + "sessionId": {"type": "string", "description": "Okta session ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Session ID"}, + "expiresAt": {"type": "string", "description": "Session expiry timestamp"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_session_revoke": { + "required_inputs": { + "sessionId": {"type": "string", "description": "Okta session ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_network_zone_create": { + "required_inputs": { + "name": {"type": "string", "description": "Network zone name"}, + "type": {"type": "string", "description": "Zone type (IP or DYNAMIC)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "gateways": {"type": "slice", "description": "List of gateway IP ranges"}, + "proxies": {"type": "slice", "description": "List of proxy IP ranges"} + }, + "outputs": { + "id": {"type": "string", "description": "Network zone ID"}, + "name": {"type": "string", "description": "Network zone name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_network_zone_get": { + "required_inputs": { + "zoneId": {"type": "string", "description": "Network zone ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Network zone ID"}, + "name": {"type": "string", "description": "Network zone name"}, + "type": {"type": "string", "description": "Network zone type"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_network_zone_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "limit": {"type": "int", "description": "Maximum number of results"} + }, + "outputs": { + "zones": {"type": "slice", "description": "List of network zone objects"}, + "count": {"type": "int", "description": "Number of zones returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_network_zone_delete": { + "required_inputs": { + "zoneId": {"type": "string", "description": "Network zone ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_network_zone_activate": { + "required_inputs": { + "zoneId": {"type": "string", "description": "Network zone ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_network_zone_deactivate": { + "required_inputs": { + "zoneId": {"type": "string", "description": "Network zone ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_log_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "since": {"type": "string", "description": "ISO 8601 timestamp; return logs after this time"}, + "until": {"type": "string", "description": "ISO 8601 timestamp; return logs before this time"}, + "filter": {"type": "string", "description": "SCIM filter expression"}, + "q": {"type": "string", "description": "Keyword search query"}, + "limit": {"type": "int", "description": "Maximum number of results (max 1000)"} + }, + "outputs": { + "logs": {"type": "slice", "description": "List of system log event objects"}, + "count": {"type": "int", "description": "Number of log events returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_event_hook_create": { + "required_inputs": { + "name": {"type": "string", "description": "Event hook name"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "events": {"type": "map", "description": "Events subscription object"}, + "channel": {"type": "map", "description": "Channel configuration object"} + }, + "outputs": { + "id": {"type": "string", "description": "Event hook ID"}, + "name": {"type": "string", "description": "Event hook name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_event_hook_get": { + "required_inputs": { + "eventHookId": {"type": "string", "description": "Event hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Event hook ID"}, + "name": {"type": "string", "description": "Event hook name"}, + "status": {"type": "string", "description": "Event hook status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_event_hook_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "hooks": {"type": "slice", "description": "List of event hook objects"}, + "count": {"type": "int", "description": "Number of hooks returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_event_hook_delete": { + "required_inputs": { + "eventHookId": {"type": "string", "description": "Event hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_event_hook_activate": { + "required_inputs": { + "eventHookId": {"type": "string", "description": "Event hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_event_hook_deactivate": { + "required_inputs": { + "eventHookId": {"type": "string", "description": "Event hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_event_hook_verify": { + "required_inputs": { + "eventHookId": {"type": "string", "description": "Event hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "verificationStatus": {"type": "string", "description": "Verification result"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_inline_hook_create": { + "required_inputs": { + "name": {"type": "string", "description": "Inline hook name"}, + "type": {"type": "string", "description": "Inline hook type (e.g. com.okta.oauth2.tokens.transform)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "version": {"type": "string", "description": "Hook version (e.g. 1.0.0)"}, + "channel": {"type": "map", "description": "Channel configuration object"} + }, + "outputs": { + "id": {"type": "string", "description": "Inline hook ID"}, + "name": {"type": "string", "description": "Inline hook name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_inline_hook_get": { + "required_inputs": { + "inlineHookId": {"type": "string", "description": "Inline hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Inline hook ID"}, + "name": {"type": "string", "description": "Inline hook name"}, + "status": {"type": "string", "description": "Inline hook status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_inline_hook_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "hooks": {"type": "slice", "description": "List of inline hook objects"}, + "count": {"type": "int", "description": "Number of hooks returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_inline_hook_delete": { + "required_inputs": { + "inlineHookId": {"type": "string", "description": "Inline hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_inline_hook_activate": { + "required_inputs": { + "inlineHookId": {"type": "string", "description": "Inline hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_inline_hook_deactivate": { + "required_inputs": { + "inlineHookId": {"type": "string", "description": "Inline hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_inline_hook_execute": { + "required_inputs": { + "inlineHookId": {"type": "string", "description": "Inline hook ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "payload": {"type": "map", "description": "Payload to send to the inline hook"} + }, + "outputs": { + "commands": {"type": "slice", "description": "List of commands returned by the hook"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_domain_create": { + "required_inputs": { + "domain": {"type": "string", "description": "Custom domain name (e.g. login.example.com)"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "certificateSourceType": {"type": "string", "description": "Certificate source type (MANUAL or OKTA_MANAGED)"} + }, + "outputs": { + "id": {"type": "string", "description": "Domain ID"}, + "domain": {"type": "string", "description": "Domain name"}, + "validationStatus": {"type": "string", "description": "Validation status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_domain_get": { + "required_inputs": { + "domainId": {"type": "string", "description": "Domain ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Domain ID"}, + "domain": {"type": "string", "description": "Domain name"}, + "validationStatus": {"type": "string", "description": "Validation status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_domain_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "domains": {"type": "slice", "description": "List of domain objects"}, + "count": {"type": "int", "description": "Number of domains returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_domain_delete": { + "required_inputs": { + "domainId": {"type": "string", "description": "Domain ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_domain_verify": { + "required_inputs": { + "domainId": {"type": "string", "description": "Domain ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Domain ID"}, + "validationStatus": {"type": "string", "description": "Verification status"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_brand_get": { + "required_inputs": { + "brandId": {"type": "string", "description": "Brand ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Brand ID"}, + "customPrivacyPolicyUrl": {"type": "string", "description": "Custom privacy policy URL"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_brand_list": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "brands": {"type": "slice", "description": "List of brand objects"}, + "count": {"type": "int", "description": "Number of brands returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_brand_update": { + "required_inputs": { + "brandId": {"type": "string", "description": "Brand ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "agreeToCustomPrivacyPolicy": {"type": "bool", "description": "Agree to custom privacy policy"}, + "customPrivacyPolicyUrl": {"type": "string", "description": "Custom privacy policy URL"}, + "removePoweredByOkta": {"type": "bool", "description": "Remove Powered by Okta footer"} + }, + "outputs": { + "id": {"type": "string", "description": "Brand ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_theme_get": { + "required_inputs": { + "brandId": {"type": "string", "description": "Brand ID"}, + "themeId": {"type": "string", "description": "Theme ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Theme ID"}, + "primaryColorHex": {"type": "string", "description": "Primary color hex value"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_theme_list": { + "required_inputs": { + "brandId": {"type": "string", "description": "Brand ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "themes": {"type": "slice", "description": "List of theme objects"}, + "count": {"type": "int", "description": "Number of themes returned"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_theme_update": { + "required_inputs": { + "brandId": {"type": "string", "description": "Brand ID"}, + "themeId": {"type": "string", "description": "Theme ID"} + }, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "primaryColorHex": {"type": "string", "description": "Primary color hex value"}, + "secondaryColorHex": {"type": "string", "description": "Secondary color hex value"}, + "signInPageTouchPointVariant": {"type": "string", "description": "Sign-in page touch point variant"}, + "errorPageTouchPointVariant": {"type": "string", "description": "Error page touch point variant"}, + "emailTemplateTouchPointVariant": {"type": "string", "description": "Email template touch point variant"}, + "endUserDashboardTouchPointVariant": {"type": "string", "description": "End-user dashboard touch point variant"} + }, + "outputs": { + "id": {"type": "string", "description": "Theme ID"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_org_get": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"} + }, + "outputs": { + "id": {"type": "string", "description": "Org ID"}, + "companyName": {"type": "string", "description": "Company name"}, + "subdomain": {"type": "string", "description": "Okta subdomain"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + }, + "step.okta_org_update": { + "required_inputs": {}, + "optional_inputs": { + "module": {"type": "string", "description": "okta.provider module instance name"}, + "companyName": {"type": "string", "description": "Updated company name"}, + "website": {"type": "string", "description": "Updated company website"}, + "phoneNumber": {"type": "string", "description": "Updated phone number"}, + "address1": {"type": "string", "description": "Updated street address"}, + "city": {"type": "string", "description": "Updated city"}, + "state": {"type": "string", "description": "Updated state"}, + "country": {"type": "string", "description": "Updated country"} + }, + "outputs": { + "id": {"type": "string", "description": "Org ID"}, + "companyName": {"type": "string", "description": "Updated company name"}, + "error": {"type": "string", "description": "Error message if the step failed"} + } + } + } +} diff --git a/plugin.json b/plugin.json index d78f248..9cb4f7b 100644 --- a/plugin.json +++ b/plugin.json @@ -148,5 +148,27 @@ "step.okta_org_update" ], "triggerTypes": [] - } + }, + "downloads": [ + { + "os": "linux", + "arch": "amd64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-linux-amd64.tar.gz" + }, + { + "os": "linux", + "arch": "arm64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-linux-arm64.tar.gz" + }, + { + "os": "darwin", + "arch": "amd64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-darwin-amd64.tar.gz" + }, + { + "os": "darwin", + "arch": "arm64", + "url": "https://github.com/GoCodeAlone/workflow-plugin-okta/releases/download/v0.2.1/workflow-plugin-okta-darwin-arm64.tar.gz" + } + ] } From fa2802c2d0fb23dc13ff7b35109859941aa68e2b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 2 May 2026 13:52:34 +0000 Subject: [PATCH 3/6] Address review feedback: align plugin version, auto-update URLs, rename CI job, use go install, improve contracts docs Agent-Logs-Url: https://github.com/GoCodeAlone/workflow-plugin-okta/sessions/d83fa4aa-5860-4886-ad31-442ed3b53543 Co-authored-by: intel352 <77607+intel352@users.noreply.github.com> --- .github/workflows/ci.yml | 6 ++++-- .goreleaser.yml | 1 + Makefile | 9 ++++++++- plugin.contracts.json | 9 +++++---- plugin.json | 2 +- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab14ac1..c6c078d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: - run: go build ./... - run: go test ./... -v -race -count=1 - wfctl-strict-contracts: + wfctl-validate-manifest: runs-on: ubuntu-latest permissions: contents: read @@ -26,5 +26,7 @@ jobs: go-version-file: go.mod - name: Fail fast if plugin.json is missing run: test -f plugin.json || (echo "plugin.json not found" && exit 1) + - name: Install wfctl + run: go install github.com/GoCodeAlone/workflow/cmd/wfctl@v0.3.56 - name: Validate plugin manifest - run: go run github.com/GoCodeAlone/workflow/cmd/wfctl@v0.3.56 plugin validate --file plugin.json + run: wfctl plugin validate --file plugin.json diff --git a/.goreleaser.yml b/.goreleaser.yml index 91da14c..370ffb0 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -5,6 +5,7 @@ before: hooks: - go mod tidy - "sed -i.bak 's/\"version\": \".*\"/\"version\": \"{{ .Version }}\"/' plugin.json && rm -f plugin.json.bak" + - "sed -i.bak 's|releases/download/v[^/]*/|releases/download/v{{ .Version }}/|g' plugin.json && rm -f plugin.json.bak" builds: - id: plugin diff --git a/Makefile b/Makefile index 25edb37..e1baaee 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: build test install cross-build clean +.PHONY: build test install cross-build clean validate-contracts BINARY_NAME = workflow-plugin-okta VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") @@ -28,5 +28,12 @@ cross-build: go build $(LDFLAGS) -o $${output} ./cmd/$(BINARY_NAME); \ done +# validate-contracts installs wfctl and validates the plugin manifest. +# plugin.contracts.json is maintained by hand; to update it, edit the file +# directly alongside any step implementation changes (see internal/step_*.go). +validate-contracts: + go install github.com/GoCodeAlone/workflow/cmd/wfctl@v0.3.56 + wfctl plugin validate --file plugin.json + clean: rm -rf bin/ diff --git a/plugin.contracts.json b/plugin.contracts.json index ca9aa20..7f62e36 100644 --- a/plugin.contracts.json +++ b/plugin.contracts.json @@ -13,21 +13,22 @@ "optional": { "apiToken": { "type": "string", - "description": "Okta API token for SSWS authentication" + "description": "Okta API token for SSWS (token-based) authentication. Required when clientId+privateKey are not provided. Mutually exclusive with clientId+privateKey." }, "clientId": { "type": "string", - "description": "OAuth 2.0 client ID for private-key authentication" + "description": "OAuth 2.0 client ID for private-key (OAuth) authentication. Required together with privateKey when apiToken is not provided." }, "privateKey": { "type": "string", - "description": "PEM-encoded RSA private key for private-key authentication" + "description": "PEM-encoded RSA private key for private-key (OAuth) authentication. Required together with clientId when apiToken is not provided." }, "scopes": { "type": "slice", "description": "OAuth 2.0 scopes; defaults to okta.users.manage, okta.groups.manage, okta.apps.manage when using private-key auth" } - } + }, + "constraints": "Credentials are conditionally required: either apiToken OR (clientId AND privateKey) must be provided at runtime." } } }, diff --git a/plugin.json b/plugin.json index 9cb4f7b..92c566b 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "workflow-plugin-okta", - "version": "0.1.0", + "version": "0.2.1", "description": "Okta identity and access management plugin", "author": "GoCodeAlone", "license": "MIT", From 30571c3d2dd5f4cb790d95e3dca1d776e50a737d Mon Sep 17 00:00:00 2001 From: Jon Langevin Date: Sat, 2 May 2026 19:49:02 -0400 Subject: [PATCH 4/6] Address strict contract review feedback --- .github/workflows/ci.yml | 14 +- .goreleaser.yml | 1 + Makefile | 26 +- internal/module.go | 3 + internal/module_test.go | 16 + plugin.contracts.json | 2810 ++++++++++++++------------------------ 6 files changed, 1105 insertions(+), 1765 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6c078d..ba3646e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: - run: go build ./... - run: go test ./... -v -race -count=1 - wfctl-validate-manifest: + wfctl-strict-contracts: runs-on: ubuntu-latest permissions: contents: read @@ -26,7 +26,13 @@ jobs: go-version-file: go.mod - name: Fail fast if plugin.json is missing run: test -f plugin.json || (echo "plugin.json not found" && exit 1) + - name: Fail fast if plugin.contracts.json is missing + run: test -f plugin.contracts.json || (echo "plugin.contracts.json not found" && exit 1) + - name: Verify strict contract descriptors are generated + run: make check-contracts - name: Install wfctl - run: go install github.com/GoCodeAlone/workflow/cmd/wfctl@v0.3.56 - - name: Validate plugin manifest - run: wfctl plugin validate --file plugin.json + run: | + mkdir -p "${PWD}/bin" + GOBIN="${PWD}/bin" go install github.com/GoCodeAlone/workflow/cmd/wfctl@v0.20.5 + - name: Validate plugin manifest and strict contracts + run: ./bin/wfctl plugin validate --file plugin.json --strict-contracts diff --git a/.goreleaser.yml b/.goreleaser.yml index 370ffb0..fc3adeb 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -22,6 +22,7 @@ archives: format: tar.gz files: - plugin.json + - plugin.contracts.json - LICENSE checksum: name_template: checksums.txt diff --git a/Makefile b/Makefile index e1baaee..7360c36 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,13 @@ -.PHONY: build test install cross-build clean validate-contracts +.PHONY: build test install cross-build clean validate-contracts generate-contracts check-contracts BINARY_NAME = workflow-plugin-okta VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") LDFLAGS = -ldflags "-X main.version=$(VERSION)" INSTALL_DIR ?= data/plugins/$(BINARY_NAME) PLATFORMS = linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 +LOCAL_BIN = $(CURDIR)/bin +WFCTL_VERSION ?= v0.20.5 +WFCTL = $(LOCAL_BIN)/wfctl build: GOPRIVATE=github.com/GoCodeAlone/* go build $(LDFLAGS) -o bin/$(BINARY_NAME) ./cmd/$(BINARY_NAME) @@ -16,6 +19,7 @@ install: build mkdir -p $(DESTDIR)/$(INSTALL_DIR) cp bin/$(BINARY_NAME) $(DESTDIR)/$(INSTALL_DIR)/ cp plugin.json $(DESTDIR)/$(INSTALL_DIR)/ + cp plugin.contracts.json $(DESTDIR)/$(INSTALL_DIR)/ cross-build: @mkdir -p bin @@ -28,12 +32,20 @@ cross-build: go build $(LDFLAGS) -o $${output} ./cmd/$(BINARY_NAME); \ done -# validate-contracts installs wfctl and validates the plugin manifest. -# plugin.contracts.json is maintained by hand; to update it, edit the file -# directly alongside any step implementation changes (see internal/step_*.go). -validate-contracts: - go install github.com/GoCodeAlone/workflow/cmd/wfctl@v0.3.56 - wfctl plugin validate --file plugin.json +$(WFCTL): + mkdir -p $(LOCAL_BIN) + GOBIN=$(LOCAL_BIN) go install github.com/GoCodeAlone/workflow/cmd/wfctl@$(WFCTL_VERSION) + +# plugin.contracts.json is generated from plugin.json capabilities so strict +# contract coverage stays in sync with the advertised module and step types. +generate-contracts: + jq '{version:"1",contracts:(([.capabilities.moduleTypes[]|{kind:"module",type:.,mode:"strict",config:"workflow.plugins.okta.v1.ProviderConfig"}]+[.capabilities.stepTypes[]|{kind:"step",type:.,mode:"strict",config:"workflow.plugins.okta.v1.OktaStepConfig",input:"workflow.plugins.okta.v1.OktaStepInput",output:"workflow.plugins.okta.v1.OktaStepOutput"}]))}' plugin.json > plugin.contracts.json + +check-contracts: generate-contracts + git diff --exit-code -- plugin.contracts.json + +validate-contracts: $(WFCTL) + $(WFCTL) plugin validate --file plugin.json --strict-contracts clean: rm -rf bin/ diff --git a/internal/module.go b/internal/module.go index 0d42474..10ce0ed 100644 --- a/internal/module.go +++ b/internal/module.go @@ -28,6 +28,9 @@ func (m *oktaModule) Init() error { clientID, _ := m.config["clientId"].(string) privateKey, _ := m.config["privateKey"].(string) + if apiToken != "" && (clientID != "" || privateKey != "") { + return fmt.Errorf("okta.provider %q: apiToken cannot be combined with clientId or privateKey", m.name) + } if apiToken == "" && (clientID == "" || privateKey == "") { return fmt.Errorf("okta.provider %q: either apiToken or clientId+privateKey are required", m.name) } diff --git a/internal/module_test.go b/internal/module_test.go index 77a75c7..b7d402f 100644 --- a/internal/module_test.go +++ b/internal/module_test.go @@ -63,6 +63,22 @@ func TestModuleInit_MissingCredentials(t *testing.T) { } } +func TestModuleInit_RejectsMixedCredentialModes(t *testing.T) { + m, err := newOktaModule("test-mixed-creds", map[string]any{ + "orgUrl": "https://dev-test.okta.com", + "apiToken": "test-token", + "clientId": "0oa123", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\ntest\n-----END RSA PRIVATE KEY-----", + }) + if err != nil { + t.Fatal(err) + } + if err := m.Init(); err == nil { + t.Error("expected error for mixed credential modes") + UnregisterClient("test-mixed-creds") + } +} + func TestModuleInit_WithClientIdAndPrivateKey(t *testing.T) { m, err := newOktaModule("test-oauth", map[string]any{ "orgUrl": "https://dev-test.okta.com", diff --git a/plugin.contracts.json b/plugin.contracts.json index 7f62e36..42dcbce 100644 --- a/plugin.contracts.json +++ b/plugin.contracts.json @@ -1,1757 +1,1059 @@ { - "schema_version": "1.0", - "plugin": "workflow-plugin-okta", - "modules": { - "okta.provider": { - "config": { - "required": { - "orgUrl": { - "type": "string", - "description": "Okta organization URL (e.g. https://your-org.okta.com)" - } - }, - "optional": { - "apiToken": { - "type": "string", - "description": "Okta API token for SSWS (token-based) authentication. Required when clientId+privateKey are not provided. Mutually exclusive with clientId+privateKey." - }, - "clientId": { - "type": "string", - "description": "OAuth 2.0 client ID for private-key (OAuth) authentication. Required together with privateKey when apiToken is not provided." - }, - "privateKey": { - "type": "string", - "description": "PEM-encoded RSA private key for private-key (OAuth) authentication. Required together with clientId when apiToken is not provided." - }, - "scopes": { - "type": "slice", - "description": "OAuth 2.0 scopes; defaults to okta.users.manage, okta.groups.manage, okta.apps.manage when using private-key auth" - } - }, - "constraints": "Credentials are conditionally required: either apiToken OR (clientId AND privateKey) must be provided at runtime." - } + "version": "1", + "contracts": [ + { + "kind": "module", + "type": "okta.provider", + "mode": "strict", + "config": "workflow.plugins.okta.v1.ProviderConfig" + }, + { + "kind": "step", + "type": "step.okta_user_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_reactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_suspend", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_unsuspend", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_unlock", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_reset_factors", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_change_password", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_reset_password", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_expire_password", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_user_set_recovery_question", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_add_user", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_remove_user", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_list_users", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_group_rule_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_assign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_user_unassign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_assign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_app_group_unassign", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_server_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_claim_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_claim_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_claim_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_scope_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_scope_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_scope_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_rule_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_rule_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_policy_rule_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_key_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authz_key_rotate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_policy_rule_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_authenticator_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_enroll", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_verify", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_unenroll", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_factor_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_idp_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_session_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_session_refresh", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_session_revoke", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_network_zone_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_log_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_event_hook_verify", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_activate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_deactivate", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_inline_hook_execute", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_create", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_delete", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_domain_verify", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_brand_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_brand_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_brand_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_theme_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_theme_list", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_theme_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_org_get", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" + }, + { + "kind": "step", + "type": "step.okta_org_update", + "mode": "strict", + "config": "workflow.plugins.okta.v1.OktaStepConfig", + "input": "workflow.plugins.okta.v1.OktaStepInput", + "output": "workflow.plugins.okta.v1.OktaStepOutput" } - }, - "steps": { - "step.okta_user_create": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name (defaults to 'okta')"}, - "profile": {"type": "map", "description": "Full Okta user profile object; when provided, firstName/lastName/email/login are ignored"}, - "firstName": {"type": "string", "description": "User first name (used when profile map is absent)"}, - "lastName": {"type": "string", "description": "User last name"}, - "email": {"type": "string", "description": "User email address (required when profile is absent)"}, - "login": {"type": "string", "description": "User login; defaults to email when absent"}, - "credentials": {"type": "map", "description": "Okta credentials object (password, recovery question, etc.)"}, - "activate": {"type": "bool", "description": "Activate the user immediately after creation"} - }, - "outputs": { - "id": {"type": "string", "description": "Okta user ID"}, - "status": {"type": "string", "description": "User status"}, - "profile": {"type": "map", "description": "User profile object"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_get": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Okta user ID"}, - "status": {"type": "string", "description": "User status"}, - "profile": {"type": "map", "description": "User profile object"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "q": {"type": "string", "description": "Search query string"}, - "filter": {"type": "string", "description": "SCIM filter expression"}, - "limit": {"type": "int", "description": "Maximum number of results"}, - "after": {"type": "string", "description": "Cursor for pagination"} - }, - "outputs": { - "users": {"type": "slice", "description": "List of user objects"}, - "count": {"type": "int", "description": "Number of users returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_update": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "profile": {"type": "map", "description": "Profile fields to update"}, - "credentials": {"type": "map", "description": "Credentials to update"} - }, - "outputs": { - "id": {"type": "string", "description": "Okta user ID"}, - "status": {"type": "string", "description": "User status"}, - "profile": {"type": "map", "description": "Updated user profile"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_delete": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_activate": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "sendEmail": {"type": "bool", "description": "Send an activation email to the user"} - }, - "outputs": { - "activationUrl": {"type": "string", "description": "Activation URL (when sendEmail is false)"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_deactivate": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_reactivate": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "activationUrl": {"type": "string", "description": "Activation URL"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_suspend": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_unsuspend": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_unlock": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_reset_factors": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_change_password": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"}, - "newPassword": {"type": "string", "description": "New password value"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "oldPassword": {"type": "string", "description": "Current password (required for self-service change)"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_reset_password": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "sendEmail": {"type": "bool", "description": "Send a reset password email"} - }, - "outputs": { - "resetPasswordUrl": {"type": "string", "description": "Password reset URL (when sendEmail is false)"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_expire_password": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_user_set_recovery_question": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID or login"}, - "question": {"type": "string", "description": "Security question text"}, - "answer": {"type": "string", "description": "Security question answer"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_create": { - "required_inputs": { - "name": {"type": "string", "description": "Group name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "description": {"type": "string", "description": "Group description"} - }, - "outputs": { - "id": {"type": "string", "description": "Okta group ID"}, - "profile": {"type": "map", "description": "Group profile object"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_get": { - "required_inputs": { - "groupId": {"type": "string", "description": "Okta group ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Okta group ID"}, - "profile": {"type": "map", "description": "Group profile object"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "q": {"type": "string", "description": "Search query string"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "groups": {"type": "slice", "description": "List of group objects"}, - "count": {"type": "int", "description": "Number of groups returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_delete": { - "required_inputs": { - "groupId": {"type": "string", "description": "Okta group ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_add_user": { - "required_inputs": { - "groupId": {"type": "string", "description": "Okta group ID"}, - "userId": {"type": "string", "description": "Okta user ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_remove_user": { - "required_inputs": { - "groupId": {"type": "string", "description": "Okta group ID"}, - "userId": {"type": "string", "description": "Okta user ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_list_users": { - "required_inputs": { - "groupId": {"type": "string", "description": "Okta group ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "users": {"type": "slice", "description": "List of user objects"}, - "count": {"type": "int", "description": "Number of users returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_rule_create": { - "required_inputs": { - "name": {"type": "string", "description": "Group rule name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "conditions": {"type": "map", "description": "Rule conditions object"}, - "actions": {"type": "map", "description": "Rule actions object"} - }, - "outputs": { - "id": {"type": "string", "description": "Group rule ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_rule_get": { - "required_inputs": { - "ruleId": {"type": "string", "description": "Group rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Group rule ID"}, - "name": {"type": "string", "description": "Group rule name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_rule_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "rules": {"type": "slice", "description": "List of group rule objects"}, - "count": {"type": "int", "description": "Number of rules returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_rule_delete": { - "required_inputs": { - "ruleId": {"type": "string", "description": "Group rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_rule_activate": { - "required_inputs": { - "ruleId": {"type": "string", "description": "Group rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_group_rule_deactivate": { - "required_inputs": { - "ruleId": {"type": "string", "description": "Group rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_create": { - "required_inputs": { - "label": {"type": "string", "description": "Application label"}, - "signOnMode": {"type": "string", "description": "Sign-on mode (e.g. SAML_2_0, OIDC, BOOKMARK)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "name": {"type": "string", "description": "Application name (slug)"}, - "settings": {"type": "map", "description": "Application settings object"}, - "visibility": {"type": "map", "description": "Application visibility settings"} - }, - "outputs": { - "id": {"type": "string", "description": "Application ID"}, - "label": {"type": "string", "description": "Application label"}, - "status": {"type": "string", "description": "Application status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_get": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Application ID"}, - "label": {"type": "string", "description": "Application label"}, - "status": {"type": "string", "description": "Application status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "q": {"type": "string", "description": "Search query string"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "apps": {"type": "slice", "description": "List of application objects"}, - "count": {"type": "int", "description": "Number of applications returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_update": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "label": {"type": "string", "description": "Updated application label"}, - "settings": {"type": "map", "description": "Updated application settings"} - }, - "outputs": { - "id": {"type": "string", "description": "Application ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_delete": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_activate": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_deactivate": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_user_assign": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "userId": {"type": "string", "description": "Okta user ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "profile": {"type": "map", "description": "App user profile"}, - "scope": {"type": "string", "description": "Assignment scope"} - }, - "outputs": { - "id": {"type": "string", "description": "App user assignment ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_user_get": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "userId": {"type": "string", "description": "Okta user ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "App user assignment ID"}, - "profile": {"type": "map", "description": "App user profile"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_user_list": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "users": {"type": "slice", "description": "List of app user assignment objects"}, - "count": {"type": "int", "description": "Number of assignments returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_user_update": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "userId": {"type": "string", "description": "Okta user ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "profile": {"type": "map", "description": "Updated app user profile"} - }, - "outputs": { - "id": {"type": "string", "description": "App user assignment ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_user_unassign": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "userId": {"type": "string", "description": "Okta user ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_group_assign": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "groupId": {"type": "string", "description": "Okta group ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "profile": {"type": "map", "description": "Group assignment profile"}, - "priority": {"type": "int", "description": "Assignment priority"} - }, - "outputs": { - "id": {"type": "string", "description": "App group assignment ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_group_get": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "groupId": {"type": "string", "description": "Okta group ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "App group assignment ID"}, - "profile": {"type": "map", "description": "Group assignment profile"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_group_list": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "groups": {"type": "slice", "description": "List of app group assignment objects"}, - "count": {"type": "int", "description": "Number of assignments returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_group_update": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "groupId": {"type": "string", "description": "Okta group ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "profile": {"type": "map", "description": "Updated group assignment profile"}, - "priority": {"type": "int", "description": "Updated priority"} - }, - "outputs": { - "id": {"type": "string", "description": "App group assignment ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_app_group_unassign": { - "required_inputs": { - "appId": {"type": "string", "description": "Application ID"}, - "groupId": {"type": "string", "description": "Okta group ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_server_create": { - "required_inputs": { - "name": {"type": "string", "description": "Authorization server name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "description": {"type": "string", "description": "Server description"}, - "audiences": {"type": "slice", "description": "Token audiences"}, - "issuerMode": {"type": "string", "description": "Issuer mode (ORG_URL or CUSTOM_URL)"} - }, - "outputs": { - "id": {"type": "string", "description": "Authorization server ID"}, - "name": {"type": "string", "description": "Authorization server name"}, - "issuer": {"type": "string", "description": "Issuer URL"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_server_get": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Authorization server ID"}, - "name": {"type": "string", "description": "Authorization server name"}, - "issuer": {"type": "string", "description": "Issuer URL"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_server_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "servers": {"type": "slice", "description": "List of authorization server objects"}, - "count": {"type": "int", "description": "Number of servers returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_server_update": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "name": {"type": "string", "description": "Updated server name"}, - "description": {"type": "string", "description": "Updated description"} - }, - "outputs": { - "id": {"type": "string", "description": "Authorization server ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_server_delete": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_server_activate": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_server_deactivate": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_claim_create": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "name": {"type": "string", "description": "Claim name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "valueType": {"type": "string", "description": "Claim value type (EXPRESSION or GROUPS)"}, - "value": {"type": "string", "description": "Claim value expression"}, - "claimType": {"type": "string", "description": "Claim type (RESOURCE or IDENTITY)"}, - "alwaysIncludeInToken": {"type": "bool", "description": "Always include in token"} - }, - "outputs": { - "id": {"type": "string", "description": "Claim ID"}, - "name": {"type": "string", "description": "Claim name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_claim_list": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "claims": {"type": "slice", "description": "List of claim objects"}, - "count": {"type": "int", "description": "Number of claims returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_claim_delete": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "claimId": {"type": "string", "description": "Claim ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_scope_create": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "name": {"type": "string", "description": "Scope name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "description": {"type": "string", "description": "Scope description"}, - "consent": {"type": "string", "description": "Consent requirement (REQUIRED, IMPLICIT, or FLEXIBLE)"}, - "metadataPublish": {"type": "string", "description": "Metadata publish setting"} - }, - "outputs": { - "id": {"type": "string", "description": "Scope ID"}, - "name": {"type": "string", "description": "Scope name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_scope_list": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "scopes": {"type": "slice", "description": "List of scope objects"}, - "count": {"type": "int", "description": "Number of scopes returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_scope_delete": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "scopeId": {"type": "string", "description": "Scope ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_policy_create": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "name": {"type": "string", "description": "Policy name"}, - "type": {"type": "string", "description": "Policy type"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "description": {"type": "string", "description": "Policy description"}, - "conditions": {"type": "map", "description": "Policy conditions object"} - }, - "outputs": { - "id": {"type": "string", "description": "Policy ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_policy_list": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "policies": {"type": "slice", "description": "List of policy objects"}, - "count": {"type": "int", "description": "Number of policies returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_policy_delete": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "policyId": {"type": "string", "description": "Policy ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_policy_rule_create": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "policyId": {"type": "string", "description": "Policy ID"}, - "name": {"type": "string", "description": "Rule name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "type": {"type": "string", "description": "Rule type"}, - "conditions": {"type": "map", "description": "Rule conditions"}, - "actions": {"type": "map", "description": "Rule actions"} - }, - "outputs": { - "id": {"type": "string", "description": "Rule ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_policy_rule_list": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "policyId": {"type": "string", "description": "Policy ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "rules": {"type": "slice", "description": "List of policy rule objects"}, - "count": {"type": "int", "description": "Number of rules returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_policy_rule_delete": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"}, - "policyId": {"type": "string", "description": "Policy ID"}, - "ruleId": {"type": "string", "description": "Rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_key_list": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "keys": {"type": "slice", "description": "List of JSON Web Key objects"}, - "count": {"type": "int", "description": "Number of keys returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authz_key_rotate": { - "required_inputs": { - "authorizationServerId": {"type": "string", "description": "Authorization server ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "use": {"type": "string", "description": "Key use (sig)"} - }, - "outputs": { - "keys": {"type": "slice", "description": "List of rotated JSON Web Key objects"}, - "count": {"type": "int", "description": "Number of keys returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_create": { - "required_inputs": { - "name": {"type": "string", "description": "Policy name"}, - "type": {"type": "string", "description": "Policy type (e.g. OKTA_SIGN_ON, PASSWORD, MFA_ENROLL)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "description": {"type": "string", "description": "Policy description"}, - "conditions": {"type": "map", "description": "Policy conditions object"}, - "status": {"type": "string", "description": "Policy status (ACTIVE or INACTIVE)"} - }, - "outputs": { - "id": {"type": "string", "description": "Policy ID"}, - "name": {"type": "string", "description": "Policy name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_get": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Policy ID"}, - "name": {"type": "string", "description": "Policy name"}, - "type": {"type": "string", "description": "Policy type"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_list": { - "required_inputs": { - "type": {"type": "string", "description": "Policy type to list"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "policies": {"type": "slice", "description": "List of policy objects"}, - "count": {"type": "int", "description": "Number of policies returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_delete": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_activate": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_deactivate": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_rule_create": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"}, - "name": {"type": "string", "description": "Rule name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "type": {"type": "string", "description": "Rule type"}, - "conditions": {"type": "map", "description": "Rule conditions"}, - "actions": {"type": "map", "description": "Rule actions"} - }, - "outputs": { - "id": {"type": "string", "description": "Policy rule ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_rule_list": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "rules": {"type": "slice", "description": "List of policy rule objects"}, - "count": {"type": "int", "description": "Number of rules returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_rule_delete": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"}, - "ruleId": {"type": "string", "description": "Rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_rule_activate": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"}, - "ruleId": {"type": "string", "description": "Rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_policy_rule_deactivate": { - "required_inputs": { - "policyId": {"type": "string", "description": "Policy ID"}, - "ruleId": {"type": "string", "description": "Rule ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authenticator_create": { - "required_inputs": { - "key": {"type": "string", "description": "Authenticator key (e.g. okta_email, google_otp)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "name": {"type": "string", "description": "Authenticator display name"}, - "type": {"type": "string", "description": "Authenticator type"}, - "settings": {"type": "map", "description": "Authenticator settings"} - }, - "outputs": { - "id": {"type": "string", "description": "Authenticator ID"}, - "key": {"type": "string", "description": "Authenticator key"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authenticator_get": { - "required_inputs": { - "authenticatorId": {"type": "string", "description": "Authenticator ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Authenticator ID"}, - "key": {"type": "string", "description": "Authenticator key"}, - "status": {"type": "string", "description": "Authenticator status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authenticator_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "authenticators": {"type": "slice", "description": "List of authenticator objects"}, - "count": {"type": "int", "description": "Number of authenticators returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authenticator_activate": { - "required_inputs": { - "authenticatorId": {"type": "string", "description": "Authenticator ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Authenticator ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_authenticator_deactivate": { - "required_inputs": { - "authenticatorId": {"type": "string", "description": "Authenticator ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Authenticator ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_factor_enroll": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID"}, - "factorType": {"type": "string", "description": "Factor type (e.g. token:software:totp, email)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "provider": {"type": "string", "description": "Factor provider (GOOGLE, OKTA, etc.)"}, - "profile": {"type": "map", "description": "Factor profile data"} - }, - "outputs": { - "id": {"type": "string", "description": "Factor ID"}, - "factorType": {"type": "string", "description": "Factor type"}, - "status": {"type": "string", "description": "Factor enrollment status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_factor_list": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "factors": {"type": "slice", "description": "List of enrolled factor objects"}, - "count": {"type": "int", "description": "Number of factors returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_factor_verify": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID"}, - "factorId": {"type": "string", "description": "Factor ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "passCode": {"type": "string", "description": "OTP pass code for verification"} - }, - "outputs": { - "factorResult": {"type": "string", "description": "Verification result (SUCCESS, CHALLENGE, etc.)"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_factor_unenroll": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID"}, - "factorId": {"type": "string", "description": "Factor ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_factor_activate": { - "required_inputs": { - "userId": {"type": "string", "description": "Okta user ID"}, - "factorId": {"type": "string", "description": "Factor ID"}, - "passCode": {"type": "string", "description": "Activation pass code"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Factor ID"}, - "status": {"type": "string", "description": "Factor status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_idp_create": { - "required_inputs": { - "name": {"type": "string", "description": "Identity provider name"}, - "type": {"type": "string", "description": "IdP type (e.g. SAML2, OIDC, GOOGLE, FACEBOOK)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "protocol": {"type": "map", "description": "Protocol configuration"}, - "policy": {"type": "map", "description": "Policy configuration"} - }, - "outputs": { - "id": {"type": "string", "description": "IdP ID"}, - "name": {"type": "string", "description": "IdP name"}, - "type": {"type": "string", "description": "IdP type"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_idp_get": { - "required_inputs": { - "idpId": {"type": "string", "description": "Identity provider ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "IdP ID"}, - "name": {"type": "string", "description": "IdP name"}, - "type": {"type": "string", "description": "IdP type"}, - "status": {"type": "string", "description": "IdP status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_idp_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "idps": {"type": "slice", "description": "List of identity provider objects"}, - "count": {"type": "int", "description": "Number of IdPs returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_idp_delete": { - "required_inputs": { - "idpId": {"type": "string", "description": "Identity provider ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_idp_activate": { - "required_inputs": { - "idpId": {"type": "string", "description": "Identity provider ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_idp_deactivate": { - "required_inputs": { - "idpId": {"type": "string", "description": "Identity provider ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_session_get": { - "required_inputs": { - "sessionId": {"type": "string", "description": "Okta session ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Session ID"}, - "status": {"type": "string", "description": "Session status"}, - "userId": {"type": "string", "description": "User ID associated with the session"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_session_refresh": { - "required_inputs": { - "sessionId": {"type": "string", "description": "Okta session ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Session ID"}, - "expiresAt": {"type": "string", "description": "Session expiry timestamp"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_session_revoke": { - "required_inputs": { - "sessionId": {"type": "string", "description": "Okta session ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_network_zone_create": { - "required_inputs": { - "name": {"type": "string", "description": "Network zone name"}, - "type": {"type": "string", "description": "Zone type (IP or DYNAMIC)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "gateways": {"type": "slice", "description": "List of gateway IP ranges"}, - "proxies": {"type": "slice", "description": "List of proxy IP ranges"} - }, - "outputs": { - "id": {"type": "string", "description": "Network zone ID"}, - "name": {"type": "string", "description": "Network zone name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_network_zone_get": { - "required_inputs": { - "zoneId": {"type": "string", "description": "Network zone ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Network zone ID"}, - "name": {"type": "string", "description": "Network zone name"}, - "type": {"type": "string", "description": "Network zone type"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_network_zone_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "limit": {"type": "int", "description": "Maximum number of results"} - }, - "outputs": { - "zones": {"type": "slice", "description": "List of network zone objects"}, - "count": {"type": "int", "description": "Number of zones returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_network_zone_delete": { - "required_inputs": { - "zoneId": {"type": "string", "description": "Network zone ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_network_zone_activate": { - "required_inputs": { - "zoneId": {"type": "string", "description": "Network zone ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_network_zone_deactivate": { - "required_inputs": { - "zoneId": {"type": "string", "description": "Network zone ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_log_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "since": {"type": "string", "description": "ISO 8601 timestamp; return logs after this time"}, - "until": {"type": "string", "description": "ISO 8601 timestamp; return logs before this time"}, - "filter": {"type": "string", "description": "SCIM filter expression"}, - "q": {"type": "string", "description": "Keyword search query"}, - "limit": {"type": "int", "description": "Maximum number of results (max 1000)"} - }, - "outputs": { - "logs": {"type": "slice", "description": "List of system log event objects"}, - "count": {"type": "int", "description": "Number of log events returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_event_hook_create": { - "required_inputs": { - "name": {"type": "string", "description": "Event hook name"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "events": {"type": "map", "description": "Events subscription object"}, - "channel": {"type": "map", "description": "Channel configuration object"} - }, - "outputs": { - "id": {"type": "string", "description": "Event hook ID"}, - "name": {"type": "string", "description": "Event hook name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_event_hook_get": { - "required_inputs": { - "eventHookId": {"type": "string", "description": "Event hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Event hook ID"}, - "name": {"type": "string", "description": "Event hook name"}, - "status": {"type": "string", "description": "Event hook status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_event_hook_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "hooks": {"type": "slice", "description": "List of event hook objects"}, - "count": {"type": "int", "description": "Number of hooks returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_event_hook_delete": { - "required_inputs": { - "eventHookId": {"type": "string", "description": "Event hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_event_hook_activate": { - "required_inputs": { - "eventHookId": {"type": "string", "description": "Event hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_event_hook_deactivate": { - "required_inputs": { - "eventHookId": {"type": "string", "description": "Event hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_event_hook_verify": { - "required_inputs": { - "eventHookId": {"type": "string", "description": "Event hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "verificationStatus": {"type": "string", "description": "Verification result"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_inline_hook_create": { - "required_inputs": { - "name": {"type": "string", "description": "Inline hook name"}, - "type": {"type": "string", "description": "Inline hook type (e.g. com.okta.oauth2.tokens.transform)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "version": {"type": "string", "description": "Hook version (e.g. 1.0.0)"}, - "channel": {"type": "map", "description": "Channel configuration object"} - }, - "outputs": { - "id": {"type": "string", "description": "Inline hook ID"}, - "name": {"type": "string", "description": "Inline hook name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_inline_hook_get": { - "required_inputs": { - "inlineHookId": {"type": "string", "description": "Inline hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Inline hook ID"}, - "name": {"type": "string", "description": "Inline hook name"}, - "status": {"type": "string", "description": "Inline hook status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_inline_hook_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "hooks": {"type": "slice", "description": "List of inline hook objects"}, - "count": {"type": "int", "description": "Number of hooks returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_inline_hook_delete": { - "required_inputs": { - "inlineHookId": {"type": "string", "description": "Inline hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_inline_hook_activate": { - "required_inputs": { - "inlineHookId": {"type": "string", "description": "Inline hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_inline_hook_deactivate": { - "required_inputs": { - "inlineHookId": {"type": "string", "description": "Inline hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_inline_hook_execute": { - "required_inputs": { - "inlineHookId": {"type": "string", "description": "Inline hook ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "payload": {"type": "map", "description": "Payload to send to the inline hook"} - }, - "outputs": { - "commands": {"type": "slice", "description": "List of commands returned by the hook"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_domain_create": { - "required_inputs": { - "domain": {"type": "string", "description": "Custom domain name (e.g. login.example.com)"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "certificateSourceType": {"type": "string", "description": "Certificate source type (MANUAL or OKTA_MANAGED)"} - }, - "outputs": { - "id": {"type": "string", "description": "Domain ID"}, - "domain": {"type": "string", "description": "Domain name"}, - "validationStatus": {"type": "string", "description": "Validation status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_domain_get": { - "required_inputs": { - "domainId": {"type": "string", "description": "Domain ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Domain ID"}, - "domain": {"type": "string", "description": "Domain name"}, - "validationStatus": {"type": "string", "description": "Validation status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_domain_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "domains": {"type": "slice", "description": "List of domain objects"}, - "count": {"type": "int", "description": "Number of domains returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_domain_delete": { - "required_inputs": { - "domainId": {"type": "string", "description": "Domain ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_domain_verify": { - "required_inputs": { - "domainId": {"type": "string", "description": "Domain ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Domain ID"}, - "validationStatus": {"type": "string", "description": "Verification status"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_brand_get": { - "required_inputs": { - "brandId": {"type": "string", "description": "Brand ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Brand ID"}, - "customPrivacyPolicyUrl": {"type": "string", "description": "Custom privacy policy URL"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_brand_list": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "brands": {"type": "slice", "description": "List of brand objects"}, - "count": {"type": "int", "description": "Number of brands returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_brand_update": { - "required_inputs": { - "brandId": {"type": "string", "description": "Brand ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "agreeToCustomPrivacyPolicy": {"type": "bool", "description": "Agree to custom privacy policy"}, - "customPrivacyPolicyUrl": {"type": "string", "description": "Custom privacy policy URL"}, - "removePoweredByOkta": {"type": "bool", "description": "Remove Powered by Okta footer"} - }, - "outputs": { - "id": {"type": "string", "description": "Brand ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_theme_get": { - "required_inputs": { - "brandId": {"type": "string", "description": "Brand ID"}, - "themeId": {"type": "string", "description": "Theme ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Theme ID"}, - "primaryColorHex": {"type": "string", "description": "Primary color hex value"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_theme_list": { - "required_inputs": { - "brandId": {"type": "string", "description": "Brand ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "themes": {"type": "slice", "description": "List of theme objects"}, - "count": {"type": "int", "description": "Number of themes returned"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_theme_update": { - "required_inputs": { - "brandId": {"type": "string", "description": "Brand ID"}, - "themeId": {"type": "string", "description": "Theme ID"} - }, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "primaryColorHex": {"type": "string", "description": "Primary color hex value"}, - "secondaryColorHex": {"type": "string", "description": "Secondary color hex value"}, - "signInPageTouchPointVariant": {"type": "string", "description": "Sign-in page touch point variant"}, - "errorPageTouchPointVariant": {"type": "string", "description": "Error page touch point variant"}, - "emailTemplateTouchPointVariant": {"type": "string", "description": "Email template touch point variant"}, - "endUserDashboardTouchPointVariant": {"type": "string", "description": "End-user dashboard touch point variant"} - }, - "outputs": { - "id": {"type": "string", "description": "Theme ID"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_org_get": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"} - }, - "outputs": { - "id": {"type": "string", "description": "Org ID"}, - "companyName": {"type": "string", "description": "Company name"}, - "subdomain": {"type": "string", "description": "Okta subdomain"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - }, - "step.okta_org_update": { - "required_inputs": {}, - "optional_inputs": { - "module": {"type": "string", "description": "okta.provider module instance name"}, - "companyName": {"type": "string", "description": "Updated company name"}, - "website": {"type": "string", "description": "Updated company website"}, - "phoneNumber": {"type": "string", "description": "Updated phone number"}, - "address1": {"type": "string", "description": "Updated street address"}, - "city": {"type": "string", "description": "Updated city"}, - "state": {"type": "string", "description": "Updated state"}, - "country": {"type": "string", "description": "Updated country"} - }, - "outputs": { - "id": {"type": "string", "description": "Org ID"}, - "companyName": {"type": "string", "description": "Updated company name"}, - "error": {"type": "string", "description": "Error message if the step failed"} - } - } - } + ] } From 9a7567d76bc16ba5fcea78bcdd8fcb46ab1a220c Mon Sep 17 00:00:00 2001 From: Jon Langevin Date: Sat, 2 May 2026 19:56:11 -0400 Subject: [PATCH 5/6] Assert wfctl strict flag availability --- .github/workflows/ci.yml | 4 +++- Makefile | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba3646e..b6bb966 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,4 +35,6 @@ jobs: mkdir -p "${PWD}/bin" GOBIN="${PWD}/bin" go install github.com/GoCodeAlone/workflow/cmd/wfctl@v0.20.5 - name: Validate plugin manifest and strict contracts - run: ./bin/wfctl plugin validate --file plugin.json --strict-contracts + run: | + ./bin/wfctl plugin validate -h 2>&1 | grep -q -- strict-contracts + ./bin/wfctl plugin validate --file plugin.json --strict-contracts diff --git a/Makefile b/Makefile index 7360c36..a26c8da 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,7 @@ check-contracts: generate-contracts git diff --exit-code -- plugin.contracts.json validate-contracts: $(WFCTL) + $(WFCTL) plugin validate -h 2>&1 | grep -q -- strict-contracts $(WFCTL) plugin validate --file plugin.json --strict-contracts clean: From 22ba8a21a1a4430a0f57f145ed91766258f85f86 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 3 May 2026 01:23:18 +0000 Subject: [PATCH 6/6] Fix Makefile LDFLAGS target (internal.Version) and deduplicate wfctl version in CI via make validate-contracts Agent-Logs-Url: https://github.com/GoCodeAlone/workflow-plugin-okta/sessions/98e8b1c2-a28e-4686-a22f-e0152eaadc3c Co-authored-by: intel352 <77607+intel352@users.noreply.github.com> --- .github/workflows/ci.yml | 10 ++-------- Makefile | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b6bb966..f74b675 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,11 +30,5 @@ jobs: run: test -f plugin.contracts.json || (echo "plugin.contracts.json not found" && exit 1) - name: Verify strict contract descriptors are generated run: make check-contracts - - name: Install wfctl - run: | - mkdir -p "${PWD}/bin" - GOBIN="${PWD}/bin" go install github.com/GoCodeAlone/workflow/cmd/wfctl@v0.20.5 - - name: Validate plugin manifest and strict contracts - run: | - ./bin/wfctl plugin validate -h 2>&1 | grep -q -- strict-contracts - ./bin/wfctl plugin validate --file plugin.json --strict-contracts + - name: Install wfctl and validate plugin manifest and strict contracts + run: make validate-contracts diff --git a/Makefile b/Makefile index a26c8da..0848e97 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ BINARY_NAME = workflow-plugin-okta VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") -LDFLAGS = -ldflags "-X main.version=$(VERSION)" +LDFLAGS = -ldflags "-X github.com/GoCodeAlone/workflow-plugin-okta/internal.Version=$(VERSION)" INSTALL_DIR ?= data/plugins/$(BINARY_NAME) PLATFORMS = linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 LOCAL_BIN = $(CURDIR)/bin