getStepMetadata
Returns metadata available in the current step function.
You may want to use this function when you need to:
- Track retry attempts in error handling
- Access timing information of a step and execution metadata
- Generate idempotency keys for external APIs
This function can only be called inside a step function.
import { getStepMetadata } from "workflow";
async function testWorkflow() {
"use workflow";
await logStepId();
}
async function logStepId() {
"use step";
const ctx = getStepMetadata();
console.log(ctx.stepId); // Grab the current step ID
}Example: Use stepId as an idempotency key
import { getStepMetadata } from "workflow";
async function chargeUser(userId: string, amount: number) {
"use step";
const { stepId } = getStepMetadata();
await stripe.charges.create(
{
amount,
currency: "usd",
customer: userId,
},
{
idempotencyKey: `charge:${stepId}`,
}
);
}Learn more about patterns and caveats in the Idempotency guide.
API Signature
Parameters
This function does not accept any parameters.
Returns
| Name | Type | Description |
|---|---|---|
stepId | string | Unique identifier for the currently executing step. Useful to use as part of an idempotency key for critical operations that must only be executed once (such as charging a customer). |
stepStartedAt | Date | Timestamp when the current step started. |
attempt | number | The number of times the current step has been executed. This will increase with each retry. |