> For the complete documentation index, see [llms.txt](https://fifo-docs.gitbook.io/colibri/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fifo-docs.gitbook.io/colibri/colibri-core/steps.md).

# Steps

Steps are thin [`convee`](https://jsr.io/@fifo/convee) wrappers around Colibri's raw [processes](/colibri/colibri-core/processes.md).

They exist to keep a clean boundary:

* **Processes** hold the business logic
* **Steps** add stable ids for orchestration
* **Pipelines** compose those steps into reusable flows

## What Steps Provide

Each exported step gives you two things:

* a factory such as `steps.createBuildTransactionStep()`
* a stable id such as `steps.BUILD_TRANSACTION_STEP_ID`

Use the factory when composing your own `convee` pipes. Use the id when targeting a step from a plugin.

```typescript
import { steps } from "@colibri/core";

const BuildTransaction = steps.createBuildTransactionStep();

console.log(steps.BUILD_TRANSACTION_STEP_ID);
// "build-transaction"
```

Factories return fresh step instances, which keeps pipelines and tests isolated from each other.

Step declarations use Convee 2's argument tuples. For a wrapper around a process, the input generic is `Parameters<typeof process>`, not its first element `Parameters<typeof process>[0]`. This preserves union-typed inputs and the exact function signature. It does **not** add an array to the call: a process that takes one input object still runs as `executeStep(input)`, not `executeStep([input])`.

## Available Steps

| Factory                                      | Id                                          | Underlying process                                                                                     |
| -------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| `createBuildTransactionStep()`               | `BUILD_TRANSACTION_STEP_ID`                 | [BuildTransaction](/colibri/colibri-core/processes/build-transaction.md)                               |
| `createSimulateTransactionStep()`            | `SIMULATE_TRANSACTION_STEP_ID`              | [SimulateTransaction](/colibri/colibri-core/processes/simulate-transaction.md)                         |
| `createSignAuthEntriesStep()`                | `SIGN_AUTH_ENTRIES_STEP_ID`                 | [SignAuthEntries](/colibri/colibri-core/processes/sign-auth-entries.md)                                |
| `createAssembleForEnforcementStep()`         | `ASSEMBLE_FOR_ENFORCEMENT_STEP_ID`          | [AssembleForEnforcement](/colibri/colibri-core/processes/assemble-for-enforcement.md)                  |
| `createEnforceSimulationStep()`              | `ENFORCE_SIMULATION_STEP_ID`                | [EnforceSimulation](/colibri/colibri-core/processes/enforce-simulation.md)                             |
| `createAssembleTransactionStep()`            | `ASSEMBLE_TRANSACTION_STEP_ID`              | [AssembleTransaction](/colibri/colibri-core/processes/assemble-transaction.md)                         |
| `createEnvelopeSigningRequirementsStep()`    | `ENVELOPE_SIGNING_REQUIREMENTS_STEP_ID`     | [EnvelopeSigningRequirements](/colibri/colibri-core/processes/envelope-signing-requirements.md)        |
| `createSignEnvelopeStep()`                   | `SIGN_ENVELOPE_STEP_ID`                     | [SignEnvelope](/colibri/colibri-core/processes/sign-envelope.md)                                       |
| `createSendTransactionStep()`                | `SEND_TRANSACTION_STEP_ID`                  | [SendTransaction](/colibri/colibri-core/processes/send-transaction.md)                                 |
| `createParseClassicTransactionOutcomeStep()` | `PARSE_CLASSIC_TRANSACTION_OUTCOME_STEP_ID` | [ParseClassicTransactionOutcome](/colibri/colibri-core/processes/parse-classic-transaction-outcome.md) |
| `createWrapFeeBumpStep()`                    | `WRAP_FEE_BUMP_STEP_ID`                     | [WrapFeeBump](/colibri/colibri-core/processes/wrap-fee-bump.md)                                        |

## When to Use Steps

Reach for steps when you want to:

* build a custom pipeline with `convee`
* target a Colibri step from a plugin
* keep your process layer plain while still exposing orchestration ids

If you just need the underlying behavior, call the raw process function directly.
