@uipath/skills 1.201.0-preview.621 → 1.202.0-preview.635
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CODEOWNERS +41 -29
- package/README.md +1 -0
- package/assets/skill-status.json +13 -2
- package/assets/uip-catalog-snapshot.json +95 -46
- package/package.json +2 -1
- package/skills/uipath-admin/SKILL.md +107 -197
- package/skills/uipath-admin/references/audit-commands.md +69 -120
- package/skills/uipath-admin/references/audit-workflow-guide.md +101 -152
- package/skills/uipath-admin/references/authorization/authorization-commands.md +121 -210
- package/skills/uipath-admin/references/authorization/check-access.md +39 -63
- package/skills/uipath-admin/references/authorization/grant-permissions.md +38 -49
- package/skills/uipath-admin/references/authorization/permission-catalog.md +32 -34
- package/skills/uipath-admin/references/authorization/role-assignment-management.md +96 -99
- package/skills/uipath-admin/references/authorization/role-management.md +113 -142
- package/skills/uipath-admin/references/diagnose/CAPABILITY.md +13 -14
- package/skills/uipath-admin/references/diagnose/{references/failure-modes.md → failure-modes.md} +90 -46
- package/skills/uipath-admin/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +21 -14
- package/skills/uipath-admin/references/external-app-management.md +42 -39
- package/skills/uipath-admin/references/identity-commands.md +72 -625
- package/skills/uipath-admin/references/identity-troubleshoot-guide.md +73 -95
- package/skills/uipath-admin/references/ip-restriction/bypass-rule-management.md +25 -54
- package/skills/uipath-admin/references/ip-restriction/enforcement-management.md +19 -31
- package/skills/uipath-admin/references/ip-restriction/ip-range-management.md +48 -45
- package/skills/uipath-admin/references/ip-restriction/ip-restriction-commands.md +89 -146
- package/skills/uipath-admin/references/key-concepts.md +24 -0
- package/skills/uipath-admin/references/organization-management.md +49 -70
- package/skills/uipath-admin/references/organizations-commands.md +39 -74
- package/skills/uipath-admin/references/pat-management.md +25 -38
- package/skills/uipath-admin/references/robot-account-management.md +16 -14
- package/skills/uipath-admin/references/smtp-management.md +19 -14
- package/skills/uipath-admin/references/tenant-management.md +1 -1
- package/skills/uipath-admin/references/tenants-commands.md +82 -148
- package/skills/uipath-admin/references/user-management.md +70 -56
- package/skills/uipath-agents/SKILL.md +4 -3
- package/skills/uipath-agents/references/authentication.md +4 -3
- package/skills/uipath-agents/references/coded/capabilities/datafabric.md +465 -0
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -0
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +2 -0
- package/skills/uipath-agents/references/coded/capabilities/human-in-the-loop.md +12 -6
- package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
- package/skills/uipath-agents/references/coded/frameworks/langgraph-integration.md +48 -16
- package/skills/uipath-agents/references/coded/frameworks/openai-agents-integration.md +1 -1
- package/skills/uipath-agents/references/coded/lifecycle/deployment.md +11 -1
- package/skills/uipath-agents/references/coded/quickstart.md +11 -8
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +3 -3
- package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +19 -2
- package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +2 -2
- package/skills/uipath-agents/references/lowcode/evaluations/orchestrator-eval-run.md +409 -155
- package/skills/uipath-agents/references/lowcode/evaluations/running-evaluations.md +2 -2
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
- package/skills/uipath-aops/SKILL.md +313 -0
- package/skills/uipath-aops/assets/templates/pipeline-dto-template.json +15 -0
- package/skills/uipath-aops/references/discovery-flow.md +312 -0
- package/skills/uipath-aops/references/migration-guide.md +146 -0
- package/skills/uipath-aops/references/pipeline-dto-guide.md +276 -0
- package/skills/uipath-aops/references/save-and-run-guide.md +156 -0
- package/skills/uipath-api-workflow/SKILL.md +48 -6
- package/skills/uipath-api-workflow/assets/templates/file-base64-roundtrip-example.json +154 -0
- package/skills/uipath-api-workflow/assets/templates/nested-control-flow-example.json +0 -1
- package/skills/uipath-api-workflow/references/cli-reference.md +20 -1
- package/skills/uipath-api-workflow/references/expressions-and-context.md +19 -0
- package/skills/uipath-api-workflow/references/files-and-base64.md +153 -0
- package/skills/uipath-api-workflow/references/operating-published-workflows.md +3 -2
- package/skills/uipath-api-workflow/references/task-types.md +89 -3
- package/skills/uipath-api-workflow/references/testing-and-evals.md +224 -0
- package/skills/uipath-api-workflow/references/troubleshooting.md +124 -4
- package/skills/uipath-coded-apps/SKILL.md +4 -2
- package/skills/uipath-coded-apps/assets/scripts/dashboards/build-dashboard.mjs +1 -1
- package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +11 -1
- package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +5 -3
- package/skills/uipath-coded-apps/references/dashboards/plugins/deploy/impl.md +1 -0
- package/skills/uipath-coded-apps/references/oauth-client-setup.md +2 -0
- package/skills/uipath-coded-apps/references/pack-publish-deploy.md +18 -0
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +4 -0
- package/skills/uipath-connector-builder/SKILL.md +7 -5
- package/skills/uipath-connector-builder/references/debugging.md +5 -1
- package/skills/uipath-connector-builder/references/element-json.md +3 -1
- package/skills/uipath-connector-builder/references/standard-resources.md +37 -6
- package/skills/uipath-functions/SKILL.md +134 -222
- package/skills/uipath-functions/references/js/authoring-guide.md +141 -0
- package/skills/uipath-functions/references/js/bindings-guide.md +120 -0
- package/skills/uipath-functions/references/js/calling-uipath-apis-guide.md +112 -0
- package/skills/uipath-functions/references/js/coded-app-wiring-guide.md +103 -0
- package/skills/uipath-functions/references/js/deployment-guide.md +109 -0
- package/skills/uipath-functions/references/js/http-semantics-guide.md +80 -0
- package/skills/uipath-functions/references/js/job-mode-guide.md +114 -0
- package/skills/uipath-functions/references/js/local-dev-guide.md +107 -0
- package/skills/uipath-functions/references/python/workflow-guide.md +224 -0
- package/skills/uipath-governance/SKILL.md +9 -8
- package/skills/uipath-governance/references/compliance-pack/catalog/impl.md +36 -8
- package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +14 -12
- package/skills/uipath-governance/references/compliance-pack/disable/impl.md +5 -3
- package/skills/uipath-governance/references/compliance-pack/full-apply/impl.md +7 -5
- package/skills/uipath-governance/references/compliance-pack/partial-apply/impl.md +14 -7
- package/skills/uipath-governance/references/compliance-pack/partial-apply/planning.md +3 -1
- package/skills/uipath-governance/references/compliance-pack/preview-gate.md +1 -1
- package/skills/uipath-governance/references/compliance-pack/query/impl.md +4 -2
- package/skills/uipath-governance/references/diagnose/CAPABILITY.md +12 -12
- package/skills/uipath-governance/references/diagnose/{references/failure-modes.md → failure-modes.md} +5 -5
- package/skills/uipath-governance/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +2 -2
- package/skills/uipath-governance/references/disambiguation-guide.md +15 -7
- package/skills/uipath-human-in-the-loop/SKILL.md +107 -9
- package/skills/uipath-human-in-the-loop/references/hitl-casetask-action.md +413 -0
- package/skills/uipath-insights/SKILL.md +21 -14
- package/skills/uipath-insights/references/alerts-reads-guide.md +242 -0
- package/skills/uipath-insights/references/filter-discovery-guide.md +1 -1
- package/skills/uipath-insights/references/jobs-commands-guide.md +2 -2
- package/skills/uipath-ixp/references/cli-reference.md +1 -1
- package/skills/uipath-ixp/references/improve-prompts-guide.md +5 -6
- package/skills/uipath-maestro-bpmn/SKILL.md +87 -15
- package/skills/uipath-maestro-bpmn/references/diagnose/CAPABILITY.md +10 -10
- package/skills/uipath-maestro-bpmn/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +1 -1
- package/skills/uipath-maestro-bpmn/references/expression-authoring.md +12 -2
- package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +12 -12
- package/skills/uipath-maestro-bpmn/references/operate/{references/run.md → run.md} +2 -2
- package/skills/uipath-maestro-bpmn/references/operate/{references/ship.md → ship.md} +3 -3
- package/skills/uipath-maestro-bpmn/references/patterns/ai-decision-review-guide.md +138 -0
- package/skills/uipath-maestro-bpmn/references/patterns/approval-chain-guide.md +136 -0
- package/skills/uipath-maestro-bpmn/references/patterns/composing-guide.md +113 -0
- package/skills/uipath-maestro-bpmn/references/patterns/external-wait-guide.md +145 -0
- package/skills/uipath-maestro-bpmn/references/patterns/failure-escalation-guide.md +103 -0
- package/skills/uipath-maestro-bpmn/references/patterns/high-volume-batch-guide.md +107 -0
- package/skills/uipath-maestro-bpmn/references/patterns/queue-distribution-guide.md +129 -0
- package/skills/uipath-maestro-bpmn/references/patterns/smart-triage-guide.md +129 -0
- package/skills/uipath-maestro-bpmn/references/registry-workflow.md +15 -0
- package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +67 -36
- package/skills/uipath-maestro-bpmn/references/shared/project-layout.md +6 -5
- package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +23 -5
- package/skills/uipath-maestro-bpmn/validator/bpmn-spec.json +101 -53
- package/skills/uipath-maestro-case/SKILL.md +23 -24
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +30 -17
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -5
- package/skills/uipath-maestro-case/references/brownfield.md +3 -3
- package/skills/uipath-maestro-case/references/case-commands.md +8 -4
- package/skills/uipath-maestro-case/references/case-editing-operations.md +19 -19
- package/skills/uipath-maestro-case/references/case-schema.md +17 -3
- package/skills/uipath-maestro-case/references/connector-integration.md +25 -16
- package/skills/uipath-maestro-case/references/connector-trigger-impl.md +15 -15
- package/skills/uipath-maestro-case/references/connector-trigger-planning.md +32 -29
- package/skills/uipath-maestro-case/references/entry-points-sync.md +2 -1
- package/skills/uipath-maestro-case/references/evals/evals.json +11 -11
- package/skills/uipath-maestro-case/references/implementation.md +74 -44
- package/skills/uipath-maestro-case/references/phased-execution.md +23 -21
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +28 -23
- package/skills/uipath-maestro-case/references/planning.md +37 -252
- package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +8 -6
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/planning.md +11 -10
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +6 -6
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +12 -12
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +10 -9
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +16 -14
- package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +15 -15
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +20 -21
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +6 -6
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +9 -9
- package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +9 -9
- package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +38 -38
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +24 -20
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +24 -20
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +25 -21
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +30 -22
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +44 -28
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +10 -10
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +27 -23
- package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +25 -22
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +25 -21
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +5 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +9 -9
- package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +30 -19
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/planning.md +8 -7
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +5 -4
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +7 -7
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +21 -17
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +29 -21
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +23 -21
- package/skills/uipath-maestro-case/references/registry-discovery.md +5 -5
- package/skills/uipath-maestro-flow/.maintenance/README.md +35 -28
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +19 -1
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +3 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +2 -2
- package/skills/uipath-maestro-flow/SKILL.md +66 -76
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +75 -72
- package/skills/uipath-maestro-flow/references/author/brownfield.md +90 -0
- package/skills/uipath-maestro-flow/references/author/{references/editing-operations-cli.md → editing-operations-cli.md} +9 -4
- package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +373 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations.md +103 -0
- package/skills/uipath-maestro-flow/references/author/{references/greenfield.md → greenfield.md} +32 -20
- package/skills/uipath-maestro-flow/references/author/planning-arch.md +342 -0
- package/skills/uipath-maestro-flow/references/author/planning-impl.md +283 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +227 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agent/planning.md +2 -2
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/batch-transform/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +449 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector/planning.md +3 -3
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/impl.md +20 -18
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/planning.md +2 -2
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +427 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +185 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/impl.md +5 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +178 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/hitl/planning.md +14 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/impl-connector.md +4 -4
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/planning.md +3 -3
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/impl.md +6 -6
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/impl.md +4 -4
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/impl.md +8 -8
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/impl.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/rpa/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/impl.md +6 -8
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/impl.md +5 -5
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/subflow/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +241 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/transform/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +39 -37
- package/skills/uipath-maestro-flow/references/diagnose/{references/failure-modes.md → failure-modes.md} +22 -22
- package/skills/uipath-maestro-flow/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +60 -1
- package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +27 -25
- package/skills/uipath-maestro-flow/references/evaluate/{references/commands-reference.md → commands-reference.md} +58 -7
- package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
- package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
- package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +21 -21
- package/skills/uipath-maestro-flow/references/operate/{references/manage.md → manage.md} +4 -4
- package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
- package/skills/uipath-maestro-flow/references/operate/{references/ship.md → ship.md} +5 -5
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +30 -22
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +76 -184
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +49 -60
- package/skills/uipath-maestro-flow/references/shared/file-format.md +32 -11
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +49 -104
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +66 -103
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +4 -4
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-planner/assets/templates/case/case-sdd-template.md +5 -3
- package/skills/uipath-planner/references/case/case-design-lane-guide.md +1 -1
- package/skills/uipath-planner/references/case/case-design-layers-guide.md +2 -2
- package/skills/uipath-planner/references/non-pdd-lane-guide.md +2 -1
- package/skills/uipath-planner/references/pdd-driven-lane-guide.md +3 -2
- package/skills/uipath-planner/references/sdd-generation-guide.md +1 -0
- package/skills/uipath-planner/scripts/case/audit_sdd.py +77 -1
- package/skills/uipath-platform/SKILL.md +6 -4
- package/skills/uipath-platform/references/integration-service/activities.md +7 -4
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +28 -0
- package/skills/uipath-platform/references/integration-service/resources.md +11 -0
- package/skills/uipath-platform/references/integration-service/triggers.md +2 -2
- package/skills/uipath-platform/references/licensing/diagnose/CAPABILITY.md +80 -0
- package/skills/uipath-platform/references/licensing/diagnose/references/failure-modes.md +147 -0
- package/skills/uipath-platform/references/licensing/diagnose/references/troubleshooting-guide.md +125 -0
- package/skills/uipath-platform/references/licensing/licensing.md +3 -0
- package/skills/uipath-platform/references/licensing/user-licenses-allocations.md +5 -0
- package/skills/uipath-platform/references/orchestrator/run-jobs.md +11 -2
- package/skills/uipath-platform/references/traces/feedback.md +4 -4
- package/skills/uipath-platform/references/traces/traces.md +1 -1
- package/skills/uipath-process-mining/SKILL.md +6 -6
- package/skills/uipath-process-mining/references/lifecycle-and-rbac.md +10 -8
- package/skills/uipath-process-mining/references/model-editing.md +1 -1
- package/skills/uipath-process-mining/references/querying.md +4 -3
- package/skills/uipath-review/SKILL.md +171 -541
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +73 -92
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +4 -0
- package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +73 -180
- package/skills/uipath-review/references/architecture-assessment-guide.md +93 -105
- package/skills/uipath-review/references/review-workflow-guide.md +1 -1
- package/skills/uipath-review/references/rpa/modern-studio-issues.md +44 -44
- package/skills/uipath-review/references/rpa/rpa-common-issues.md +251 -321
- package/skills/uipath-review/references/rpa/rpa-review-checklist.md +1 -1
- package/skills/uipath-review/references/rule-catalog-workflow.md +25 -45
- package/skills/uipath-review/references/rule-format.md +21 -21
- package/skills/uipath-rpa/.maintenance/pattern-card-maintenance.md +1 -1
- package/skills/uipath-rpa/CLAUDE.md +4 -5
- package/skills/uipath-rpa/SKILL.md +40 -246
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/FindText.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetColorAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetCursorPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetField.md +13 -13
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetFieldAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetScreenArea.md +27 -8
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetText.md +2 -14
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetTextAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursor.md +3 -11
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursorToText.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendControlKey.md +2 -8
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeys.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeysSecure.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetField.md +14 -13
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetFieldAtPosition.md +4 -7
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/_common-options.md +29 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/authoring-paths.md +58 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession.md +197 -11
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitFieldText.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenReady.md +9 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenText.md +2 -14
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitTextAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities.json +271 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/coded/coded-api.md +61 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/overview.md +76 -0
- package/skills/uipath-rpa/references/cli-reference.md +63 -29
- package/skills/uipath-rpa/references/coded/codedworkflow-reference.md +59 -1
- package/skills/uipath-rpa/references/coded/operations-guide.md +2 -1
- package/skills/uipath-rpa/references/debugging.md +29 -12
- package/skills/uipath-rpa/references/environment-setup.md +54 -1
- package/skills/uipath-rpa/references/execution-maps-guide.md +10 -9
- package/skills/uipath-rpa/references/legacy/activity-docs/_INVOKE-CODE.md +1 -1
- package/skills/uipath-rpa/references/uia-starter-guide.md +46 -8
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +3 -4
- package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +7 -8
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +132 -42
- package/skills/uipath-solution/SKILL.md +9 -6
- package/skills/uipath-solution/references/activate-and-manage.md +11 -6
- package/skills/uipath-solution/references/develop-solution.md +39 -28
- package/skills/uipath-solution/references/pack-and-deploy.md +49 -1
- package/skills/uipath-solution/references/scenarios/failure-modes.md +1 -1
- package/skills/uipath-solution/references/scenarios/intra-solution-references.md +3 -3
- package/skills/uipath-solution/references/scenarios/manual-edits.md +1 -1
- package/skills/uipath-solution/references/scenarios.md +2 -2
- package/skills/uipath-solution/references/solution-overview.md +15 -6
- package/skills/uipath-tasks/SKILL.md +11 -6
- package/skills/uipath-tasks/references/task-assignment.md +5 -0
- package/skills/uipath-tasks/references/task-catalogs.md +7 -4
- package/skills/uipath-tasks/references/task-completion.md +3 -1
- package/skills/uipath-tasks/references/task-data.md +3 -3
- package/skills/uipath-tasks/references/task-lifecycle.md +11 -0
- package/skills/uipath-tasks/references/task-metadata.md +4 -3
- package/skills/uipath-test/SKILL.md +13 -28
- package/skills/uipath-test/references/failure-triage-guide.md +90 -0
- package/skills/uipath-test/references/playwright-first-mile-guide.md +2 -2
- package/skills/uipath-test/references/publish-and-link-guide.md +0 -1
- package/skills/uipath-test/references/test-result-report-guide.md +1 -2
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/interpretations/healing-agent-data.md +1 -1
- package/skills/uipath-troubleshoot/references/presenting.md +1 -1
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/folder-not-accessible.md +1 -1
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/generic-error-400.md +4 -4
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/integration-service-400.md +2 -2
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/job-operation-timeout.md +1 -1
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/no-suitable-runtime-machine.md +1 -1
- package/version-manifest.json +2 -2
- package/skills/uipath-maestro-case/scripts/audit_plan.py +0 -231
- package/skills/uipath-maestro-flow/references/author/references/brownfield.md +0 -93
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +0 -545
- package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +0 -131
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -638
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -306
- package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +0 -229
- package/skills/uipath-maestro-flow/references/author/references/plugins/batch-transform/impl.md +0 -174
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +0 -741
- package/skills/uipath-maestro-flow/references/author/references/plugins/delay/impl.md +0 -75
- package/skills/uipath-maestro-flow/references/author/references/plugins/end/impl.md +0 -65
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +0 -204
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +0 -65
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +0 -201
- package/skills/uipath-maestro-flow/references/author/references/plugins/merge/impl.md +0 -43
- package/skills/uipath-maestro-flow/references/author/references/plugins/merge/planning.md +0 -29
- package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +0 -121
- package/skills/uipath-maestro-flow/references/author/references/plugins/subflow/impl.md +0 -230
- package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/impl.md +0 -198
- package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/planning.md +0 -71
- package/skills/uipath-maestro-flow/references/author/references/plugins/switch/planning.md +0 -38
- package/skills/uipath-maestro-flow/references/author/references/plugins/terminate/impl.md +0 -48
- package/skills/uipath-maestro-flow/references/author/references/plugins/transform/impl.md +0 -287
- package/skills/uipath-maestro-flow/references/evaluate/references/eval-sets-guide.md +0 -226
- package/skills/uipath-maestro-flow/references/evaluate/references/upload-safety.md +0 -82
- package/skills/uipath-maestro-flow/references/operate/references/run.md +0 -99
- /package/skills/uipath-maestro-bpmn/references/diagnose/{references/failure-modes.md → failure-modes.md} +0 -0
- /package/skills/uipath-maestro-bpmn/references/operate/{references/manage.md → manage.md} +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/delay/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/end/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/impl.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/switch/impl.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/terminate/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/evaluate/{references/evaluators-guide.md → evaluators-guide.md} +0 -0
- /package/skills/uipath-maestro-flow/references/evaluate/{references/running-guide.md → running-guide.md} +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Bindings and Generated Descriptors
|
|
2
|
+
|
|
3
|
+
How `uip function pack`/`push` generate `entry-points.json` and `bindings_v2.json`, how hand-added resource bindings survive regeneration, and how bound resources reach the SDK at runtime via resource overwrites.
|
|
4
|
+
|
|
5
|
+
## Generated files
|
|
6
|
+
|
|
7
|
+
`uip function pack` and `uip function push` (and `uip solution pack`, which packs in-process) regenerate two descriptors at the project root; pack then copies them into `content/` inside the `.nupkg`:
|
|
8
|
+
|
|
9
|
+
| File | Contents |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `entry-points.json` | One entry per function (the job surface) |
|
|
12
|
+
| `bindings_v2.json` | One `HttpTrigger` resource per HTTP-exposed function + any hand-added resource bindings |
|
|
13
|
+
| `package-descriptor.json` | Pack-time only; maps logical names to package paths — notably `"bindings.json"` → `"content/bindings_v2.json"` |
|
|
14
|
+
|
|
15
|
+
Regeneration reconciles against the existing files instead of rewriting them. Do not delete `entry-points.json` or `bindings_v2.json` between packs: they are the baseline that keeps IDs stable and preserves hand-added resources.
|
|
16
|
+
|
|
17
|
+
## entry-points.json
|
|
18
|
+
|
|
19
|
+
One entry per `defineFunction`:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"$schema": "https://cloud.uipath.com/draft/2024-12/entry-point",
|
|
24
|
+
"$id": "entry-points.json",
|
|
25
|
+
"entryPoints": [
|
|
26
|
+
{
|
|
27
|
+
"filePath": "content/functions/hello.ts",
|
|
28
|
+
"uniqueId": "<STABLE_UUID>",
|
|
29
|
+
"type": "function",
|
|
30
|
+
"input": { "type": "object", "properties": { "name": { "type": "string" } } },
|
|
31
|
+
"output": { "type": "object", "properties": { "message": { "type": "string" } } }
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Reconciliation rules on regeneration:
|
|
38
|
+
|
|
39
|
+
- Function entries are matched by `filePath`: a match keeps its `uniqueId` (stable across re-packs, so Orchestrator updates triggers in place instead of duplicating) and keeps a manually-set `"isTransactionRoot": true`.
|
|
40
|
+
- `input`/`output` are always re-derived from the function's declared schemas.
|
|
41
|
+
- Entries whose function no longer exists are dropped.
|
|
42
|
+
- Entries with `type` other than `"function"` are preserved verbatim (Studio Web or other tooling may write these).
|
|
43
|
+
|
|
44
|
+
## bindings_v2.json — HttpTrigger resources
|
|
45
|
+
|
|
46
|
+
Each function that declares `method` + `path` gets one `HttpTrigger` resource; job-only functions get none.
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"$schema": "https://cloud.uipath.com/draft/2024-12/bindings",
|
|
51
|
+
"version": "2.0",
|
|
52
|
+
"resources": [
|
|
53
|
+
{
|
|
54
|
+
"resource": "HttpTrigger",
|
|
55
|
+
"key": "<STABLE_UUID>",
|
|
56
|
+
"id": "<STABLE_UUID>",
|
|
57
|
+
"value": {
|
|
58
|
+
"EntryPointUniqueId": { "DefaultValue": "<ENTRY_POINT_UNIQUE_ID>", "IsExpression": false }
|
|
59
|
+
},
|
|
60
|
+
"metadata": {
|
|
61
|
+
"BindingsVersion": "2.1",
|
|
62
|
+
"Name": "hello",
|
|
63
|
+
"Method": "POST",
|
|
64
|
+
"Slug": "/hello",
|
|
65
|
+
"CallingMode": "LongPolling",
|
|
66
|
+
"Description": "Returns a greeting."
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
- Trigger identity is `Method` + `Slug`: an existing trigger matching both keeps its `key`/`id` across re-packs. The metadata `Slug` stores the `defineFunction` `path` verbatim — leading `/` included — unlike the invoke-URL segment, which drops it ([http-semantics-guide.md](http-semantics-guide.md)).
|
|
74
|
+
- `CallingMode` is always `LongPolling` — synchronous long-polling; there is no async/fire-and-forget mode. The trigger account is always "Run as HTTP Caller": the request runs with the caller's identity as `ctx.user` (the robot identity is separate — see [calling-uipath-apis-guide.md](calling-uipath-apis-guide.md)).
|
|
75
|
+
- `value.EntryPointUniqueId.DefaultValue` cross-references the function's `entry-points.json` `uniqueId`.
|
|
76
|
+
|
|
77
|
+
### Lifecycle on re-pack + publish
|
|
78
|
+
|
|
79
|
+
Orchestrator syncs triggers from these files after the Function Release is updated (manual step — see [deployment-guide.md](deployment-guide.md)):
|
|
80
|
+
|
|
81
|
+
| Change in code | Effect after release update |
|
|
82
|
+
|---|---|
|
|
83
|
+
| New `defineFunction` | New entry point + binding → new HTTP trigger |
|
|
84
|
+
| Renamed `name` or `path` | Old trigger deleted, new one created — **existing callers' URLs break** |
|
|
85
|
+
| Removed function | Trigger deleted |
|
|
86
|
+
| Changed `input`/`output` schema | Trigger schemas updated in place |
|
|
87
|
+
|
|
88
|
+
Sharp edge: a rename is a delete+create, never an update. Treat `method` + `path` as a published contract.
|
|
89
|
+
|
|
90
|
+
## Declaring resource bindings by hand
|
|
91
|
+
|
|
92
|
+
Any resource whose `resource` field is not `"HttpTrigger"` is preserved **verbatim** across every regeneration — the generator never reads, validates, or rewrites it. That is the mechanism for binding platform resources (storage buckets, queues, assets, processes) to the package: add the entry to `resources[]` in `bindings_v2.json` by hand and it survives all future packs.
|
|
93
|
+
|
|
94
|
+
Entry shape (`value` and `metadata` optional, passed through untouched):
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"resource": "Storage",
|
|
99
|
+
"key": "<UUID_YOU_MINT_ONCE>",
|
|
100
|
+
"id": "<UUID_YOU_MINT_ONCE>",
|
|
101
|
+
"metadata": { "Name": "blobs" }
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The per-resource-type `value`/`metadata` schemas are defined by the platform's binding surface (solution/Orchestrator side), not by this project's tooling — mirror an entry created by the platform for the target resource type rather than inventing fields.
|
|
106
|
+
|
|
107
|
+
## Resource overwrites at runtime
|
|
108
|
+
|
|
109
|
+
Resource bindings pay off at runtime as **resource overwrites**: Orchestrator resolves the bindings for the release and the robot's user into a table `{"<RESOURCE_TYPE>.<RESOURCE_KEY>": { <PROPERTY>: <VALUE> }}` (keys case-sensitive, passed through verbatim — placeholder casing is illustrative) and delivers it per invocation:
|
|
110
|
+
|
|
111
|
+
- **HTTP mode**: request header `X-UiPath-ResourceOverwrites` (base64-encoded UTF-8 JSON), scoped to that one request. Never cached across requests — concurrent requests in one pooled process can belong to different releases/robot users.
|
|
112
|
+
- **Job mode**: the `resourceOverwrites` field of `runtime-context.json` (see [job-mode-guide.md](job-mode-guide.md)).
|
|
113
|
+
|
|
114
|
+
The runtime publishes an accessor at `globalThis[Symbol.for("uipath.resourceOverwrites.v1")]`; `@uipath/uipath-typescript` probes that slot and redirects its resource lookups (asset/queue/bucket/process names) to the bound targets. Nothing is surfaced on `ctx`, and function code needs no change.
|
|
115
|
+
|
|
116
|
+
Behavior to rely on:
|
|
117
|
+
|
|
118
|
+
- **Degrades, never fails**: an absent or corrupt header/table means SDK lookups fall back to the literal names written in code — a bindings problem never faults the invocation. The flip side: a broken binding manifests as "reads the wrong/original resource", not as an error.
|
|
119
|
+
- **Local serve has no overwrites** unless the caller sets the header itself; lookups use literal names.
|
|
120
|
+
- **When to care**: only when a function reads Assets/Buckets/Queues/Processes through `@uipath/uipath-typescript` and the deployment remaps them per environment or folder. Folder-correct redirection requires the whole chain: a hand-added resource entry in `bindings_v2.json` + the platform resolving it into the overwrite table for that release.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Calling UiPath APIs from a Function
|
|
2
|
+
|
|
3
|
+
Calling UiPath platform APIs from inside a function handler: which token to send, where platform coordinates come from, `@uipath/uipath-typescript` patterns for Orchestrator, and the working route to Integration Service connectors.
|
|
4
|
+
|
|
5
|
+
## Token Decision
|
|
6
|
+
|
|
7
|
+
[SKILL.md](../../SKILL.md) JS Rule 8 names the two identities; the decision rule:
|
|
8
|
+
|
|
9
|
+
| Token | Identity | Use for |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `ctx.user.accessToken` | The caller — delegated OAuth token from the request's `Authorization` header; the caller's folder permissions apply | Default: anything done on the caller's behalf |
|
|
12
|
+
| `ctx.robot.accessToken` | The function's own serverless-robot identity — platform-issued RS256 robot JWT, ~24h TTL | Privileged/S2S reads the caller must not be able to do |
|
|
13
|
+
|
|
14
|
+
Under local serve `ctx.robot` is always null ([local-dev-guide.md](local-dev-guide.md)); `ctx.user` is null only when the request carries no decodable Bearer JWT — serve decodes the `Authorization` header locally too. Privileged paths fall back robot-first to the env token:
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
const token = ctx.robot?.accessToken || process.env["UIPATH_ACCESS_TOKEN"] || "";
|
|
18
|
+
if (!token) throw new FunctionError("Robot token unavailable — local dev: set UIPATH_ACCESS_TOKEN", 500);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Delegated paths must require the caller token — never fall through to the robot identity, that silently escalates privileges:
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
if (!ctx.user?.accessToken) throw new FunctionError("User access token not available", 401);
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`ctx.robot.key` is the serverless robot's key — required by Orchestrator's per-robot endpoints, notably `GetRobotAssetByNameForRobotKey`.
|
|
28
|
+
|
|
29
|
+
## Platform Coordinates
|
|
30
|
+
|
|
31
|
+
Read `baseUrl`/`orgId`/`tenantId`/`folderKey` from `ctx.platform`, never from input — caller-forwarded `_baseUrl`/`_orgId`/`_tenantId` fields are deprecated because caller-controlled values redirect the function's platform calls. Env vars (`UIPATH_BASE_URL`/`UIPATH_ORG_ID`/`UIPATH_TENANT_ID`) are the local-only fallback that populates `ctx.platform` under serve ([local-dev-guide](local-dev-guide.md)).
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
if (!ctx.platform) throw new FunctionError("Platform context unavailable — local dev: set UIPATH_BASE_URL/UIPATH_ORG_ID/UIPATH_TENANT_ID", 500);
|
|
35
|
+
const { baseUrl, orgId, tenantId } = ctx.platform;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Using @uipath/uipath-typescript
|
|
39
|
+
|
|
40
|
+
Constructor maps ctx fields by these exact names; `initialize()` is a no-op in secret mode but call it anyway:
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import { UiPath } from "@uipath/uipath-typescript/core";
|
|
44
|
+
import { Assets } from "@uipath/uipath-typescript/assets";
|
|
45
|
+
|
|
46
|
+
const sdk = new UiPath({ baseUrl, orgName: orgId, tenantName: tenantId, secret: token });
|
|
47
|
+
await sdk.initialize();
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- The package goes in `dependencies` (public npm) — the SDK-placement and lockfile rules in [deployment-guide](deployment-guide.md) apply to it like any runtime dep.
|
|
51
|
+
- The SDK auto-probes runtime-published resource overwrites — solution-managed resource names redirect transparently, no code needed ([bindings-guide](bindings-guide.md)).
|
|
52
|
+
|
|
53
|
+
### Reading assets
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
const escaped = input.assetName.replace(/'/g, "''");
|
|
57
|
+
const res = await new Assets(sdk).getAll({ filter: `Name eq '${escaped}'`, folderId: input.folderId });
|
|
58
|
+
return { value: res.items[0]?.value ?? null };
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
1. **`folderId` is required.** Without it `getAll` calls `GetAssetsAcrossFolders` (metadata only) and silently returns `null` for every value field.
|
|
62
|
+
2. **OData string/GUID literals take single quotes**, embedded quotes escaped as `''`. An unquoted GUID → `400 Bad Request`, often surfacing as an empty list.
|
|
63
|
+
3. **Secret-typed asset values are released only by `GetRobotAssetByNameForRobotKey`** (per-robot endpoint, takes `ctx.robot.key`) — `getAll` never returns them.
|
|
64
|
+
4. `AllowDirectApiAccess` is irrelevant for OData endpoints — do not add it to the Orchestrator setup.
|
|
65
|
+
|
|
66
|
+
### Secret Vault pattern (privileged read)
|
|
67
|
+
|
|
68
|
+
For credentials/API keys the caller must never see: create a dedicated folder (e.g. `Restricted-Secrets`), grant the function's runtime service account (Orchestrator → Robots/Machines) **Assets.View** on that folder only, give callers zero access to it, and read with `ctx.robot.accessToken`. Non-sensitive assets: delegated token; the caller needs Assets.View on the folder. Folder RBAC, not the function layer, is the effective security boundary — rationale → [coded-app-wiring-guide.md](coded-app-wiring-guide.md).
|
|
69
|
+
|
|
70
|
+
### Starting jobs
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import { Processes } from "@uipath/uipath-typescript/processes";
|
|
74
|
+
|
|
75
|
+
const results = await new Processes(sdk).start(
|
|
76
|
+
{ processKey: releaseKey, inputArguments: JSON.stringify(args), strategy: "ModernJobsCount", jobsCount: 1 },
|
|
77
|
+
folderId, // numeric folder ID — sets X-UIPATH-OrganizationUnitId
|
|
78
|
+
);
|
|
79
|
+
return { jobId: results?.[0]?.id ?? null };
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`processKey` takes the ReleaseKey UUID from `/odata/Releases`. When later listing jobs that may span folders (`GET /odata/Jobs`), omit `X-UIPATH-OrganizationUnitId` — without the header Orchestrator searches all accessible folders.
|
|
83
|
+
|
|
84
|
+
## Integration Service Connectors
|
|
85
|
+
|
|
86
|
+
Known sharp edge: no published SDK reaches Integration Service from inside a function. `@uipath/integrationservice-sdk` authenticates only from a `uip login` session (it cannot consume a ctx token) and `@uipath/uipath-typescript` has no Integration Service surface. The currently-working approach is the connector HTTP passthrough, called with a ctx token (same token decision as above; verified with the caller's delegated token):
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const res = await fetch(`${baseUrl}/${orgId}/${tenantId}/elements_/v3/element/instances/<CONNECTION_ID>/http-request`, {
|
|
90
|
+
method: "POST",
|
|
91
|
+
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
|
|
92
|
+
body: JSON.stringify({
|
|
93
|
+
authentication: "connector",
|
|
94
|
+
targetConnector: "<CONNECTOR_KEY>", // e.g. "uipath-salesforce-slack"
|
|
95
|
+
method: "GET",
|
|
96
|
+
path: "/api/endpoint",
|
|
97
|
+
url: "/api/endpoint",
|
|
98
|
+
query: { param: "value" },
|
|
99
|
+
}),
|
|
100
|
+
signal: AbortSignal.timeout(8_000),
|
|
101
|
+
});
|
|
102
|
+
const envelope = await res.json();
|
|
103
|
+
const downstream = Number(envelope.code ?? envelope.statusCode ?? res.status);
|
|
104
|
+
if (downstream >= 400) throw new FunctionError(`Connector call failed (${downstream})`, downstream);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
1. **Never trust the 200 wrapper.** The passthrough can answer `200` while the downstream call failed — read the downstream status from the response envelope (`code`/`statusCode`) and surface 4xx/5xx as `FunctionError` carrying that status.
|
|
108
|
+
2. `<CONNECTION_ID>` is the Integration Service connection instance id; `<CONNECTOR_KEY>` is the connector key. Both are deployment configuration — resolve them per environment, do not hardcode tenant-specific ids in shared code.
|
|
109
|
+
|
|
110
|
+
## Timeout Budget
|
|
111
|
+
|
|
112
|
+
Every external call gets an `AbortSignal.timeout(...)` sized to the caller's budget — a browser-invoked function must finish under ~20 s total, so per-call timeouts of ~8 s leave room for retries and the response ([http-semantics-guide](http-semantics-guide.md)). A `403` on the function's own trigger (before the handler runs) usually means the caller's PKCE scope is missing `OR.Default` ([coded-app-wiring-guide](coded-app-wiring-guide.md)).
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Coded App Wiring Guide
|
|
2
|
+
|
|
3
|
+
Architecture and mechanics of the Coded App (frontend) ↔ JS function (backend) pairing: when a function belongs between the app and the platform, token flow, the two-server local loop, deployed calls, timeout budget, and the error contract the frontend codes against. The app side itself (scaffolding, PKCE registration, app deploy) → `uipath-coded-apps`.
|
|
4
|
+
|
|
5
|
+
## When to Put a Function Between the App and the Platform
|
|
6
|
+
|
|
7
|
+
Default: the app calls UiPath APIs directly with `@uipath/uipath-typescript` and the user's PKCE token. Add a function backend when any of these apply:
|
|
8
|
+
|
|
9
|
+
| Reason | Why a function |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Credentials / API keys / secrets | Must exist server-side only — browser code and its network tab are public. Secret Vault pattern → [calling-uipath-apis-guide.md](calling-uipath-apis-guide.md) |
|
|
12
|
+
| S2S calls to third-party systems | Third-party credentials come from the vault via the function's robot identity — never a browser-held key |
|
|
13
|
+
| Audit / tracing of privileged operations | Server-side `logger.*` lands in job logs; browser-side logging is unverifiable |
|
|
14
|
+
| Heavy / multi-call orchestration | One browser round-trip; N platform calls server-side, inside the timeout budget |
|
|
15
|
+
| Hiding internal API shapes | Function exposes a minimal stable contract; OData filters, folder IDs, endpoint quirks stay server-side |
|
|
16
|
+
|
|
17
|
+
**Honest boundary:** a function in front of *delegated* calls is not a security layer. The caller's `OR.Default` PKCE token already grants broad Orchestrator API access — anything the function does with `ctx.user.accessToken`, the browser could do directly with the same token. Folder RBAC, not the function layer, is the effective security boundary for delegated calls. A function only *adds* privilege through its own robot identity (`ctx.robot`, Secret Vault pattern → [calling-uipath-apis-guide.md](calling-uipath-apis-guide.md)).
|
|
18
|
+
|
|
19
|
+
## Token Flow
|
|
20
|
+
|
|
21
|
+
The app sends its PKCE access token on every function call:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Deployed, it arrives as `ctx.user.accessToken` — delegated identity, the caller's folder permissions apply. The app's PKCE scope string MUST include `OR.Default` explicitly; it is auto-granted to any registered External App but is not implicit in the scope string, and omitting it makes the deployed trigger return 403:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
openid profile email offline_access OR.Default
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Local Dev Loop
|
|
34
|
+
|
|
35
|
+
Two terminals, no proxy:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
uip function serve # terminal 1 — functions on :7070, hot reload
|
|
39
|
+
npm run dev # terminal 2 — app dev server (Vite, :5173)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
1. The app fetches `http://localhost:7070/<PATH>` directly — `serve` answers with CORS `Access-Control-Allow-Origin: *`, so the cross-port call works as-is.
|
|
43
|
+
2. Do NOT add `server.proxy` to the app's Vite config to reach the function — it breaks the app's OAuth callback (hard rule in the coded-apps guidance → `uipath-coded-apps`).
|
|
44
|
+
3. `serve` decodes `ctx.user` from a forwarded Bearer JWT when the app sends one (decoded, not verified — dev convenience only); an unauthenticated call (plain curl) gets `ctx.user = null`. `ctx.robot` / `ctx.platform` local values and env fallbacks → [local-dev-guide.md](local-dev-guide.md).
|
|
45
|
+
|
|
46
|
+
## Deployed Calls from the App
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
const FN_BASE = import.meta.env.DEV
|
|
50
|
+
? "http://localhost:7070"
|
|
51
|
+
: "https://api.<HOST>/<ORG_ID>/<TENANT_ID>/orchestrator_/t/<FOLDER_KEY>/<PACKAGE_ID>";
|
|
52
|
+
|
|
53
|
+
async function callFn<T>(path: string, input?: unknown, token?: string): Promise<T> {
|
|
54
|
+
const res = await fetch(`${FN_BASE}${path}`, {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: {
|
|
57
|
+
"Content-Type": "application/json",
|
|
58
|
+
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
59
|
+
},
|
|
60
|
+
// Never an empty body: the deployed gateway rejects it with 400 errorCode 4804.
|
|
61
|
+
body: JSON.stringify(input ?? {}),
|
|
62
|
+
});
|
|
63
|
+
const body = await res.json();
|
|
64
|
+
if (!res.ok) throw new Error(body.error ?? `HTTP ${res.status}`);
|
|
65
|
+
return body as T;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
- Always the `api.<HOST>` subdomain — the portal domain sends no CORS headers ([http-semantics-guide.md](http-semantics-guide.md#cors)). curl doesn't enforce CORS, so a portal-domain URL "working" in a terminal proves nothing about the browser.
|
|
70
|
+
- `<ORG_ID>`/`<TENANT_ID>` as GUIDs (preferred over slugs in browser URLs). `<FOLDER_KEY>` is the folder's Key GUID, shared by every function in the folder — discovery recipe in [deployment-guide.md](deployment-guide.md).
|
|
71
|
+
|
|
72
|
+
## Timeout Budget
|
|
73
|
+
|
|
74
|
+
The gateway's 25 s timeout / `303 See Other` mechanism → [http-semantics-guide.md](http-semantics-guide.md): a browser caller loses the result permanently; server-side callers aren't CORS-blocked, but recovery via the redirect is undocumented. Budget every browser-invoked function to finish under 20 s ([SKILL.md](../../SKILL.md) JS Rule 6). Enforce it in the handler:
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
handler: async (input, ctx) => Promise.race([
|
|
78
|
+
actualHandler(input, ctx),
|
|
79
|
+
new Promise<never>((_, reject) =>
|
|
80
|
+
AbortSignal.timeout(18_000).addEventListener("abort", () =>
|
|
81
|
+
reject(new FunctionError("Function timed out", 504)),
|
|
82
|
+
),
|
|
83
|
+
),
|
|
84
|
+
])
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Put `signal: AbortSignal.timeout(8_000)` on every external `fetch` inside the handler so one slow upstream cannot eat the whole budget. Work that cannot fit under 20 s does not belong behind a browser call: move it to a job-mode function ([job-mode-guide.md](job-mode-guide.md)).
|
|
88
|
+
|
|
89
|
+
## Error Contract for the Frontend
|
|
90
|
+
|
|
91
|
+
Every non-2xx response from the function runtime has the shape `{ "error": "<MESSAGE>", "details"?: ... }`; gateway errors (last row) carry `{ "errorCode": <N>, "message": "..." }` instead:
|
|
92
|
+
|
|
93
|
+
| Source | Status / body | Frontend treatment |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| Thrown `FunctionError(message, status)` | That status, `error` = message | 4xx: user-actionable — surface `error` |
|
|
96
|
+
| Input schema validation failure | `400`, `error` = `"ValidationFailed"`, `details` = per-field errors | Client bug — fix the request shape |
|
|
97
|
+
| Plain `throw` in the handler | `500`, `error` = message, `details` = stack | Generic failure UI; treat as transient |
|
|
98
|
+
| 18 s guard above | `504`, `error` = `"Function timed out"` | Retryable |
|
|
99
|
+
| Gateway (no function reached) | e.g. `403` missing `OR.Default`, `404` errorCode `1623` bad route/folder key, `400` errorCode `4804` empty body | Wiring bug — recheck scope, URL, body |
|
|
100
|
+
|
|
101
|
+
Branch on status class: 4xx is user-actionable (show `error`, let the user correct input or permissions), 5xx is transient/retryable. Full status semantics → [http-semantics-guide.md](http-semantics-guide.md).
|
|
102
|
+
|
|
103
|
+
Response shape discipline: the output schema describes success data only, and errors are thrown — a function never returns an `errors[]` array inside a 200. The frontend can therefore branch on `res.ok` alone: ok → body matches the declared output contract; not ok → body carries `{error, details?}`.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Deployment Guide
|
|
2
|
+
|
|
3
|
+
Pack → publish → release update → live HTTP endpoint. Covers package anatomy, the production cold-start model (the top source of deployed-only failures), publish credentials, invoke URL discovery, Studio Web push, and solution registration.
|
|
4
|
+
|
|
5
|
+
## Pack
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uip function pack # -> .uipath/<PACKAGE>.<VERSION>.nupkg
|
|
9
|
+
uip function pack --nolock # exclude package-lock.json from the package
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`<PACKAGE>`/`<VERSION>` come from `package.json` `name`/`version`. The package ships **raw sources — no bundling, no compilation**:
|
|
13
|
+
|
|
14
|
+
- Entire project tree copied verbatim into `content/`, excluding `node_modules`, `.git`, `.env`, `.deno`, `dist`, `.uipath`, `*.nupkg` (extra excludes via `uipath.json` `packOptions.directoriesExcluded`/`filesExcluded`).
|
|
15
|
+
- `package-lock.json` included by default; `--nolock` or `packOptions.includeLockFile: false` drops it.
|
|
16
|
+
- `.npmrc` ships **sanitized**: `@uipath:*` scope lines and credential lines (`_authToken`, `_auth`, `_password`) are stripped; the file is omitted entirely if only comments remain. Custom scope routes (e.g. `@acme:registry=...`) survive.
|
|
17
|
+
- Generated manifests: `entry-points.json`, `bindings_v2.json`, `operate.json`, `package-descriptor.json` — see [bindings-guide.md](bindings-guide.md).
|
|
18
|
+
|
|
19
|
+
Re-packing the same version **overwrites** the existing `.nupkg`; older version files stay in `.uipath/`, and `publish` picks the most recently modified `.nupkg` by mtime. Bump `version` in `package.json` before packing a release, or you may publish a stale file.
|
|
20
|
+
|
|
21
|
+
## Cold Start — How Production Runs the Package
|
|
22
|
+
|
|
23
|
+
The production worker does at cold start what pack deliberately did not do: it extracts `content/`, runs `npm install --omit=dev` from the shipped `package-lock.json`, then loads the `.ts` sources directly. **The install runs with no credentials** — pack stripped tokens from `.npmrc`, and no GitHub or private-registry token is available at install time. Everything below follows from that:
|
|
24
|
+
|
|
25
|
+
1. **Every runtime dependency must be public npm and listed in `dependencies`.** `--omit=dev` skips `devDependencies` entirely. The SDK (`@uipath/coded-functions-js-sdk`) stays in `devDependencies` — the platform provides the runtime.
|
|
26
|
+
2. **A runtime dep the lockfile resolves to a private registry breaks the install** — the function crashes or hangs with no logs. Routing `@uipath` to GitHub Packages in the project `.npmrc` is safe for pack-time tooling (that line is stripped from the shipped copy), but every `dependencies` entry in `package-lock.json` must show a `resolved` URL on `registry.npmjs.org`. Gate before packing — after adding a dependency, or whenever `.npmrc` carries custom registry routes: `grep '"resolved"' package-lock.json | grep -v registry.npmjs.org` must print nothing.
|
|
27
|
+
3. **Regenerate the lockfile after any `package.json` change** — run `npm install`, then pack. A stale lockfile fails the production install: `errorCode 4801` on every route.
|
|
28
|
+
4. **Extensionless intra-project imports hang cold start silently** — local dev resolves them, production does not ([SKILL.md](../../SKILL.md) JS Rule 4).
|
|
29
|
+
5. **Genuinely private code cannot be installed — vendor it as source.** Copy it into the project (`functions/_helpers.ts`, or any non-excluded directory such as `lib/`) and import it with explicit `.ts` extensions.
|
|
30
|
+
|
|
31
|
+
Failure mode when any of these is violated (known sharp edge — install failures have no error surface yet): all functions in the package hang for up to 15 minutes with no logs — exception: a stale lockfile (item 3) surfaces as `errorCode 4801` instead. A healthy deploy may also 500 once on the first call while cold start runs — retry before diagnosing.
|
|
32
|
+
|
|
33
|
+
## Publish
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
uip function publish --feed-id <FEED_ID> # omit --feed-id for the interactive feed picker
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Uploads the newest `.nupkg` (by mtime) from `.uipath/` to an Orchestrator process feed. Credentials via flags or env vars:
|
|
40
|
+
|
|
41
|
+
| Flag | Env var | Value |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| `--url` | `UIPATH_URL` | platform base URL |
|
|
44
|
+
| `--org` | `UIPATH_ORGANIZATION_NAME` | organization **name** |
|
|
45
|
+
| `--tenant` | `UIPATH_TENANT_NAME` | tenant **name** |
|
|
46
|
+
| `--token` | `UIPATH_ACCESS_TOKEN` | access token |
|
|
47
|
+
|
|
48
|
+
> Names, not GUIDs — distinct from the handler-local `UIPATH_ORG_ID`/`UIPATH_TENANT_ID` fallbacks ([local-dev-guide.md](local-dev-guide.md)).
|
|
49
|
+
|
|
50
|
+
Publish failures: `401`/`403` → re-check the credential env vars above; feed errors → rerun without `--feed-id` for the interactive picker.
|
|
51
|
+
|
|
52
|
+
### Manual step: update the Function Release
|
|
53
|
+
|
|
54
|
+
Publishing uploads the version, but the Function Release stays pinned to the previous one until you update it in Orchestrator → **Automations → Processes** (REST: `/odata/Releases` — the UI says "Processes", the API says "Releases"). Only then does Orchestrator re-read the manifests and sync triggers — full lifecycle table (rename = trigger delete+create) → [bindings-guide.md](bindings-guide.md).
|
|
55
|
+
|
|
56
|
+
## Invoke
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
https://api.<HOST>/<ORG_ID>/<TENANT_ID>/orchestrator_/t/<FOLDER_KEY>/<PACKAGE_ID>/<SLUG>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
| Segment | Value |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `api.<HOST>` | the `api.*` subdomain (e.g. `api.uipath.com`) — browsers must call `api.*` ([http-semantics-guide.md](http-semantics-guide.md#cors)) |
|
|
65
|
+
| `<ORG_ID>` / `<TENANT_ID>` | org/tenant **GUIDs** for browser callers (slugs also work from curl) |
|
|
66
|
+
| `<FOLDER_KEY>` | the **folder's Key GUID** — same for every function in the folder, not per-trigger |
|
|
67
|
+
| `<PACKAGE_ID>` | `package.json` `name` (sanitized) |
|
|
68
|
+
| `<SLUG>` | `defineFunction` `path` without the leading `/` — its own segment after `<PACKAGE_ID>` |
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
curl -s -X POST "https://api.<HOST>/<ORG_ID>/<TENANT_ID>/orchestrator_/t/<FOLDER_KEY>/<PACKAGE_ID>/<SLUG>" \
|
|
72
|
+
-H "Authorization: Bearer <TOKEN>" -H "Content-Type: application/json" -d '{}'
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Always send `Content-Type: application/json` and a JSON body — `'{}'` when the function takes no input ([SKILL.md](../../SKILL.md) JS Rule 7). GET functions take input as query-string parameters instead.
|
|
76
|
+
|
|
77
|
+
### Discovering `<FOLDER_KEY>` and slugs
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
curl -s "https://api.<HOST>/<ORG_ID>/<TENANT_ID>/orchestrator_/odata/HttpTriggers" \
|
|
81
|
+
-H "Authorization: Bearer <TOKEN>" -H "X-UIPATH-OrganizationUnitId: <FOLDER_ID>"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Each row carries `Method`, `Slug`, `Release.Name` (= `<PACKAGE_ID>`), and `ExternalReference` of the form `<METHOD> <PACKAGE_ID>/<SLUG> <FOLDER_KEY>` — the trailing GUID is the `<FOLDER_KEY>` for the URL.
|
|
85
|
+
|
|
86
|
+
| Wrong move | Result |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Trigger's own `Id` as `<FOLDER_KEY>` | `404 errorCode 1623` ("HTTP trigger not found") |
|
|
89
|
+
| Wrong folder key or unmatched slug | `404 errorCode 1623` |
|
|
90
|
+
| `odata/ApiTriggers` with `$filter=ProcessKey ...&$select=Key,Name,Url` | `400 errorCode 1000` — the DTO lacks those fields; use `HttpTriggers` |
|
|
91
|
+
|
|
92
|
+
Deployed status codes and the 25 s timeout / 303 behavior → [http-semantics-guide.md](http-semantics-guide.md); calling from a Coded App frontend → [coded-app-wiring-guide.md](coded-app-wiring-guide.md).
|
|
93
|
+
|
|
94
|
+
## Studio Web push
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
uip function push --project-id <PROJECT_ID>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Diff-by-hash source sync into a Studio Web project (same credential env vars as publish). Updates `.uipath/studio_metadata.json` (project version auto-increments; open editors prompt Reload); never touches `project.uiproj`, `.project`, or `.settings`.
|
|
101
|
+
|
|
102
|
+
## Solution registration
|
|
103
|
+
|
|
104
|
+
JS/TS projects have no `uip function init` (Python-only) and need none — the `uipath.json` marker already identifies the project:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
uip solution projects add <FUNCTION_PROJECT_PATH>
|
|
108
|
+
uip solution pack # packs the function project in-process; no separate uip function pack needed
|
|
109
|
+
```
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# HTTP Semantics Guide
|
|
2
|
+
|
|
3
|
+
The HTTP contract of a coded function — how requests become `input`, how routes match, how returns and throws become responses — both under local `uip function serve` and deployed behind the Orchestrator gateway. Handler authoring → [authoring-guide.md](authoring-guide.md); invoke URL construction → [deployment-guide.md](deployment-guide.md).
|
|
4
|
+
|
|
5
|
+
## Input assembly
|
|
6
|
+
|
|
7
|
+
| Source | Rule |
|
|
8
|
+
|---|---|
|
|
9
|
+
| GET | query-string entries become `input`; body never read |
|
|
10
|
+
| POST/PUT/PATCH/DELETE | JSON body becomes `input`; locally an empty or unparseable body becomes `{}` (deployed, empty body is rejected by the gateway first — see table below) |
|
|
11
|
+
| Path params | merged UNDER input (`{...params, ...rawInput}`) — a body/query key shadows a same-named path param; params stay available uncoerced on `ctx.params` |
|
|
12
|
+
|
|
13
|
+
Query params are independent of path matching and validate through the `input` schema. Use path params for identity, query params for optional filters.
|
|
14
|
+
|
|
15
|
+
## Validation pipeline
|
|
16
|
+
|
|
17
|
+
Runs in the runtime (ajv compiled there — never a project dependency), in order:
|
|
18
|
+
|
|
19
|
+
1. Input is validated against the `input` schema before the handler runs; failure returns `400` with body `{"error":"ValidationFailed","details":{"formErrors":[...],"fieldErrors":{...}}}` and the handler is never called.
|
|
20
|
+
2. GET query values arrive as strings; coercion to schema types (number/boolean) is automatic for schema-first contracts. Only zod contracts need `z.coerce.number()` — the runtime never replaces a Standard Schema validator with the derived JSON Schema (that would drop refinements and coercion).
|
|
21
|
+
3. `@default` values (JSDoc tag on optional props, or schema `default`) are filled into missing fields before the handler sees `input`.
|
|
22
|
+
4. Output is validated against the `output` schema after the handler returns; failure returns `500` with body `{"error":"Handler returned invalid output","details":{...}}`.
|
|
23
|
+
|
|
24
|
+
## Route matching
|
|
25
|
+
|
|
26
|
+
The deployed trigger slug is `path` minus the leading `/`, pattern segments preserved verbatim (the `bindings_v2.json` metadata field `Slug` stores `path` verbatim, leading `/` included — [bindings-guide.md](bindings-guide.md)); resolution is route matching, not string comparison. Local serve and deployed agree.
|
|
27
|
+
|
|
28
|
+
| Pattern | Matches |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `:param` | exactly one segment → `ctx.params.<NAME>` (string) |
|
|
31
|
+
| `:param{regex}` | one segment, regex-constrained |
|
|
32
|
+
| `:param?` | that segment or nothing |
|
|
33
|
+
| trailing `*` | one or more trailing segments; catch-all only — NOT captured as a param |
|
|
34
|
+
|
|
35
|
+
Rules:
|
|
36
|
+
|
|
37
|
+
- Routes are sorted by specificity, mirroring Orchestrator's `HttpTriggerMatcher.CompareSpecificity`: a literal segment beats a param regardless of declaration order — `/users/me` wins over `/users/:id`.
|
|
38
|
+
- Extra segments are not absorbed: `/list/:filter?` does not match `/list/a/b`. Add an explicit `*` route for a catch-all.
|
|
39
|
+
- A deployed request that matches no trigger returns:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{ "message": "HTTP trigger not found for path 'my-functions/invoices/a/b'.", "errorCode": 1623 }
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
as a `404`. The same 1623 appears when the invoke URL carries a wrong folder key — see [deployment-guide.md](deployment-guide.md).
|
|
46
|
+
|
|
47
|
+
## Response mapping
|
|
48
|
+
|
|
49
|
+
| Handler outcome | HTTP result |
|
|
50
|
+
|---|---|
|
|
51
|
+
| plain value / void | `200`, value JSON-serialized (void → body `null`) |
|
|
52
|
+
| `FunctionResponse {status, body?, headers?}` (incl. helpers `ok`/`created`/`noContent`/`badRequest`/...) | status passthrough; `204` or undefined body → empty body |
|
|
53
|
+
| raw `Response` | passed through untouched |
|
|
54
|
+
| thrown `FunctionError(message, status)` | that status (default `500`), body `{"error": <MESSAGE>, "details"?: ...}` |
|
|
55
|
+
| any other throw | `500`, body `{"error": <MESSAGE>, "details": <STACK>}` |
|
|
56
|
+
|
|
57
|
+
- A `FunctionError`'s `errorCode` never appears in an HTTP response body — it maps only onto the job fault surface ([job-mode-guide.md](job-mode-guide.md)). `errorCode` values that DO show up in HTTP bodies (1623, 4804, 4801) come from the gateway, not from your function.
|
|
58
|
+
- The plain-throw `500` carries the real message and stack trace unsanitized — the code is customer-owned, so this holds locally and deployed. Still throw `FunctionError` for anything a caller should read (see [SKILL.md](../../SKILL.md) JS Rule 1; details in [authoring-guide.md](authoring-guide.md#errors)).
|
|
59
|
+
|
|
60
|
+
## CORS
|
|
61
|
+
|
|
62
|
+
- **Local serve:** `origin: '*'`; `allowHeaders` covers `Content-Type`, `Authorization`, and the full `X-UiPath-*` platform-header set. Any local frontend (e.g. a coded app on :5173) fetches `http://localhost:7070/<PATH>` directly — no proxy.
|
|
63
|
+
- **Deployed:** only the `api.<HOST>` subdomain serves CORS headers; the portal domain does not. Browsers MUST call `https://api.<HOST>/...`; `curl` and server-side code can use either domain. URL shape → [deployment-guide.md](deployment-guide.md); browser wiring → [coded-app-wiring-guide.md](coded-app-wiring-guide.md).
|
|
64
|
+
|
|
65
|
+
## Deployed gateway behaviors
|
|
66
|
+
|
|
67
|
+
Sharp edges of the current PublicPreview gateway — observed behavior, not guarantees. None reproduce under local serve, so test deployed too ([local-dev-guide.md](local-dev-guide.md) covers the local loop).
|
|
68
|
+
|
|
69
|
+
| Symptom | Cause | Handling |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| `303 See Other` after 25 s | gateway timeout; redirect target is a portal-domain polling URL WITHOUT CORS | browser callers lose the result permanently — keep the handler under 20 s: `AbortSignal.timeout(...)` on every external call plus an overall guard (`Promise.race` at ~18 s). Server-side callers aren't CORS-blocked from the 303 target, but recovering the result that way is undocumented — apply the same budget everywhere |
|
|
72
|
+
| `400 errorCode 4804` | empty POST body (deployed only) | always send `body: '{}'` |
|
|
73
|
+
| `403` | caller token missing `OR.Default` scope | fix the token's scopes → [coded-app-wiring-guide.md](coded-app-wiring-guide.md) |
|
|
74
|
+
| `404 errorCode 1623` | no trigger matched: wrong slug, wrong folder key, or pattern mismatch | see Route matching + [deployment-guide.md](deployment-guide.md) |
|
|
75
|
+
| single `500` right after deploy | cold start | retry once |
|
|
76
|
+
| `errorCode 4801` on every route | stale `package-lock.json` in the package | regenerate lockfile, re-pack → [deployment-guide.md](deployment-guide.md) |
|
|
77
|
+
|
|
78
|
+
## Path naming
|
|
79
|
+
|
|
80
|
+
The slug is public API surface: it appears in every caller's invoke URL, and renaming `path` is a trigger delete+create — every existing caller breaks ([bindings-guide.md](bindings-guide.md)). Choose short noun slugs and let the method carry the verb: `POST /invoice`, not `POST /create-invoice`; `GET /invoices/:id`, not `GET /get-invoice`.
|