{"version":3,"sources":["../src/workflow-distributed.ts"],"names":["createSafeBaggageSchema","trace","SpanKind","context","propagation","emitCorrelatedEvent"],"mappings":"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","file":"workflow-distributed.cjs","sourcesContent":["/**\n * Distributed workflow tracing with cross-service correlation\n *\n * Enables tracking workflows that span multiple microservices by propagating\n * workflow identity (workflowId, stepName, stepIndex) via baggage in message headers.\n *\n * Unlike local workflow.ts (which uses AsyncLocalStorage), distributed workflows\n * propagate context across network boundaries using W3C baggage.\n *\n * @example Order fulfillment saga across services\n * ```typescript\n * // Service A: Order Service\n * import { traceDistributedWorkflow, WorkflowBaggage } from 'autotel/workflow-distributed';\n * import { traceProducer } from 'autotel/messaging';\n *\n * export const createOrder = traceDistributedWorkflow({\n *   name: 'OrderFulfillment',\n *   workflowIdFrom: (order) => order.id,\n *   version: '1.0.0',\n * })(ctx => async (order: Order) => {\n *   // Workflow baggage is auto-set\n *   await publishToInventory(order);\n * });\n *\n * const publishToInventory = traceProducer({\n *   system: 'kafka',\n *   destination: 'inventory-requests',\n *   propagateBaggage: true,  // Includes workflow.* baggage\n * })(ctx => async (order) => {\n *   await producer.send({ topic: 'inventory-requests', value: order });\n * });\n *\n * // Service B: Inventory Service\n * import { traceDistributedStep, WorkflowBaggage } from 'autotel/workflow-distributed';\n *\n * export const processInventory = traceDistributedStep({\n *   name: 'ReserveInventory',\n *   extractBaggage: true,  // Extracts workflow.* from headers\n * })(ctx => async (message) => {\n *   const workflow = WorkflowBaggage.get(ctx);\n *   // workflow.workflowId === order.id (propagated from Service A)\n *   console.log(`Processing step for workflow ${workflow.workflowId}`);\n *   await reserveItems(message.items);\n * });\n * ```\n *\n * @module\n */\n\nimport { context, propagation, SpanKind } from '@opentelemetry/api';\nimport { createSafeBaggageSchema } from './business-baggage';\nimport { emitCorrelatedEvent } from './correlated-events';\nimport { trace } from './functional';\nimport type { TraceContext } from './trace-context';\n\n// ============================================================================\n// Workflow Baggage Schema\n// ============================================================================\n\n/**\n * Workflow baggage field definitions\n */\nconst workflowBaggageFields = {\n  /** Unique identifier for the workflow instance */\n  workflowId: { type: 'string' as const, maxLength: 128, required: true },\n\n  /** Name/type of the workflow (e.g., \"OrderFulfillment\") */\n  workflowName: { type: 'string' as const, maxLength: 64, required: true },\n\n  /** Version of the workflow definition */\n  workflowVersion: { type: 'string' as const, maxLength: 32 },\n\n  /** Current step name */\n  stepName: { type: 'string' as const, maxLength: 64 },\n\n  /** Current step index (0-based) */\n  stepIndex: { type: 'number' as const },\n\n  /** Total number of steps (if known) */\n  totalSteps: { type: 'number' as const },\n\n  /** Parent workflow ID (for sub-workflows) */\n  parentWorkflowId: { type: 'string' as const, maxLength: 128 },\n\n  /** Correlation ID for external systems */\n  correlationId: { type: 'string' as const, maxLength: 128 },\n\n  /** Workflow priority */\n  priority: {\n    type: 'enum' as const,\n    values: ['low', 'normal', 'high', 'critical'] as const,\n  },\n\n  /** Initiating user/system */\n  initiatedBy: { type: 'string' as const, maxLength: 64 },\n\n  /** Workflow start timestamp (ISO) */\n  startedAt: { type: 'string' as const, maxLength: 30 },\n} as const;\n\n/**\n * Pre-built baggage schema for distributed workflows\n *\n * Use this to read/write workflow context that propagates across services.\n *\n * @example Setting workflow baggage\n * ```typescript\n * WorkflowBaggage.set(ctx, {\n *   workflowId: 'order-12345',\n *   workflowName: 'OrderFulfillment',\n *   stepName: 'ReserveInventory',\n *   stepIndex: 1,\n * });\n * ```\n *\n * @example Reading workflow baggage in downstream service\n * ```typescript\n * const { workflowId, workflowName, stepIndex } = WorkflowBaggage.get(ctx);\n * console.log(`Processing ${workflowName} step ${stepIndex}`);\n * ```\n */\nexport const WorkflowBaggage = createSafeBaggageSchema(workflowBaggageFields, {\n  prefix: 'workflow',\n  hashHighCardinality: false, // Workflow IDs should be traceable\n  redactPII: false, // Workflow fields are internal identifiers\n});\n\n/**\n * Type for workflow baggage values\n */\nexport type WorkflowBaggageValues = {\n  workflowId: string;\n  workflowName: string;\n  workflowVersion?: string;\n  stepName?: string;\n  stepIndex?: number;\n  totalSteps?: number;\n  parentWorkflowId?: string;\n  correlationId?: string;\n  priority?: 'low' | 'normal' | 'high' | 'critical';\n  initiatedBy?: string;\n  startedAt?: string;\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Configuration for distributed workflow tracing\n */\nexport interface DistributedWorkflowConfig {\n  /** Workflow name/type (e.g., \"OrderFulfillment\", \"UserOnboarding\") */\n  name: string;\n\n  /**\n   * Extract workflow ID from function arguments\n   *\n   * Receives all arguments passed to the workflow function, allowing\n   * multi-parameter handlers to derive workflow IDs from any argument.\n   *\n   * @example Single argument\n   * ```typescript\n   * workflowIdFrom: (order) => order.id\n   * ```\n   *\n   * @example Multiple arguments (payload + metadata)\n   * ```typescript\n   * workflowIdFrom: (payload, metadata) => metadata.correlationId ?? payload.id\n   * ```\n   */\n  workflowIdFrom: (...args: unknown[]) => string;\n\n  /** Workflow version (e.g., \"1.0.0\", \"2023-01-15\") */\n  version?: string;\n\n  /** Total number of steps if known */\n  totalSteps?: number;\n\n  /** Parent workflow ID (for sub-workflows) */\n  parentWorkflowId?: string;\n\n  /** Correlation ID for external systems */\n  correlationId?: string;\n\n  /** Workflow priority */\n  priority?: 'low' | 'normal' | 'high' | 'critical';\n\n  /** User/system that initiated the workflow */\n  initiatedBy?: string;\n\n  /** Additional span attributes */\n  attributes?: Record<string, string | number | boolean>;\n\n  /** Callback on workflow start */\n  onStart?: (ctx: DistributedWorkflowContext) => void;\n\n  /** Callback on workflow completion */\n  onComplete?: (ctx: DistributedWorkflowContext, result: unknown) => void;\n\n  /** Callback on workflow error */\n  onError?: (ctx: DistributedWorkflowContext, error: Error) => void;\n}\n\n/**\n * Configuration for distributed workflow step\n */\nexport interface DistributedStepConfig {\n  /** Step name (e.g., \"ReserveInventory\", \"ChargePayment\") */\n  name: string;\n\n  /**\n   * Extract baggage from incoming message/request\n   *\n   * If true, reads workflow baggage from current context (assumes already extracted).\n   * If function, extracts from arguments.\n   *\n   * @default true\n   */\n  extractBaggage?:\n    | boolean\n    | ((args: unknown[]) => WorkflowBaggageValues | null);\n\n  /** Override step index (otherwise uses baggage or auto-increments) */\n  stepIndex?: number;\n\n  /** Additional span attributes */\n  attributes?: Record<string, string | number | boolean>;\n\n  /** Whether this step is idempotent (safe to retry) */\n  idempotent?: boolean;\n\n  /** Whether this step is a compensation/rollback step */\n  isCompensation?: boolean;\n\n  /** Callback on step start */\n  onStart?: (ctx: DistributedStepContext) => void;\n\n  /** Callback on step completion */\n  onComplete?: (ctx: DistributedStepContext, result: unknown) => void;\n\n  /** Callback on step error */\n  onError?: (ctx: DistributedStepContext, error: Error) => void;\n}\n\n/**\n * Extended context for distributed workflow root\n */\nexport interface DistributedWorkflowContext extends TraceContext {\n  /** The workflow ID */\n  workflowId: string;\n\n  /** The workflow name */\n  workflowName: string;\n\n  /** The workflow version */\n  workflowVersion?: string;\n\n  /** Get workflow baggage for propagation to other services */\n  getWorkflowBaggage(): WorkflowBaggageValues;\n\n  /** Set additional workflow baggage fields */\n  setWorkflowBaggage(values: Partial<WorkflowBaggageValues>): void;\n\n  /** Get headers with workflow baggage for outgoing requests */\n  getWorkflowHeaders(): Record<string, string>;\n\n  /** Record workflow step completion (for progress tracking) */\n  recordStepProgress(stepName: string, stepIndex: number): void;\n}\n\n/**\n * Extended context for distributed workflow step\n */\nexport interface DistributedStepContext extends TraceContext {\n  /** The workflow ID (from baggage) */\n  workflowId: string | null;\n\n  /** The workflow name (from baggage) */\n  workflowName: string | null;\n\n  /** The current step name */\n  stepName: string;\n\n  /** The current step index */\n  stepIndex: number | null;\n\n  /** Whether this step is a compensation */\n  isCompensation: boolean;\n\n  /** Get the full workflow baggage */\n  getWorkflowBaggage(): WorkflowBaggageValues | null;\n\n  /** Update workflow baggage (e.g., increment step index) */\n  updateWorkflowBaggage(values: Partial<WorkflowBaggageValues>): void;\n\n  /** Get headers with updated workflow baggage for downstream calls */\n  getWorkflowHeaders(): Record<string, string>;\n\n  /** Mark step as requiring compensation on failure */\n  requiresCompensation(compensationData?: Record<string, unknown>): void;\n}\n\n// ============================================================================\n// Distributed Workflow Tracer\n// ============================================================================\n\n/**\n * Create a traced distributed workflow function\n *\n * Wraps a function as the entry point for a distributed workflow. Automatically:\n * - Generates or extracts workflow ID\n * - Sets workflow baggage for downstream propagation\n * - Creates root span with workflow attributes\n *\n * @param config - Workflow configuration\n * @returns Factory function for the workflow handler\n *\n * @example Basic usage\n * ```typescript\n * export const createOrder = traceDistributedWorkflow({\n *   name: 'OrderFulfillment',\n *   workflowIdFrom: (order) => order.id,\n *   version: '1.0.0',\n * })(ctx => async (order: Order) => {\n *   ctx.recordStepProgress('ValidateOrder', 0);\n *   await validateOrder(order);\n *\n *   ctx.recordStepProgress('ReserveInventory', 1);\n *   await publishToInventoryService(order);\n *\n *   return { workflowId: ctx.workflowId, status: 'started' };\n * });\n * ```\n */\nexport function traceDistributedWorkflow<TArgs extends unknown[], TReturn>(\n  config: DistributedWorkflowConfig,\n) {\n  const spanName = `workflow.${config.name}`;\n\n  return (\n    fnFactory: (\n      ctx: DistributedWorkflowContext,\n    ) => (...args: TArgs) => Promise<TReturn>,\n  ): ((...args: TArgs) => Promise<TReturn>) => {\n    return trace<TArgs, TReturn>(\n      { name: spanName, spanKind: SpanKind.INTERNAL },\n      (baseCtx) => {\n        return async (...args: TArgs) => {\n          // Extract workflow ID from arguments (spread to allow multi-arg access)\n          const workflowId = config.workflowIdFrom(...args);\n          const startedAt = new Date().toISOString();\n\n          // Initialize workflow baggage\n          const baggageValues: WorkflowBaggageValues = {\n            workflowId,\n            workflowName: config.name,\n            workflowVersion: config.version,\n            stepIndex: 0,\n            totalSteps: config.totalSteps,\n            parentWorkflowId: config.parentWorkflowId,\n            correlationId: config.correlationId,\n            priority: config.priority,\n            initiatedBy: config.initiatedBy,\n            startedAt,\n          };\n\n          // Set baggage\n          WorkflowBaggage.set(baseCtx, baggageValues);\n\n          // Set span attributes\n          baseCtx.setAttribute('workflow.id', workflowId);\n          baseCtx.setAttribute('workflow.name', config.name);\n          if (config.version) {\n            baseCtx.setAttribute('workflow.version', config.version);\n          }\n          if (config.totalSteps) {\n            baseCtx.setAttribute('workflow.total_steps', config.totalSteps);\n          }\n          if (config.parentWorkflowId) {\n            baseCtx.setAttribute('workflow.parent_id', config.parentWorkflowId);\n          }\n          if (config.priority) {\n            baseCtx.setAttribute('workflow.priority', config.priority);\n          }\n          if (config.initiatedBy) {\n            baseCtx.setAttribute('workflow.initiated_by', config.initiatedBy);\n          }\n          baseCtx.setAttribute('workflow.started_at', startedAt);\n\n          // Apply custom attributes\n          if (config.attributes) {\n            for (const [key, value] of Object.entries(config.attributes)) {\n              baseCtx.setAttribute(key, value);\n            }\n          }\n\n          // Create extended context\n          const workflowCtx: DistributedWorkflowContext = {\n            ...baseCtx,\n            workflowId,\n            workflowName: config.name,\n            workflowVersion: config.version,\n\n            getWorkflowBaggage(): WorkflowBaggageValues {\n              return { ...baggageValues };\n            },\n\n            setWorkflowBaggage(values: Partial<WorkflowBaggageValues>): void {\n              Object.assign(baggageValues, values);\n              WorkflowBaggage.set(baseCtx, baggageValues);\n            },\n\n            getWorkflowHeaders(): Record<string, string> {\n              const headers: Record<string, string> = {};\n              const ctx = context.active();\n              propagation.inject(ctx, headers);\n              return headers;\n            },\n\n            recordStepProgress(stepName: string, stepIndex: number): void {\n              baggageValues.stepName = stepName;\n              baggageValues.stepIndex = stepIndex;\n              WorkflowBaggage.set(baseCtx, baggageValues);\n\n              emitCorrelatedEvent(baseCtx, 'workflow.step_progress', {\n                'workflow.step.name': stepName,\n                'workflow.step.index': stepIndex,\n              });\n            },\n          };\n\n          // Call onStart callback\n          config.onStart?.(workflowCtx);\n\n          // Add start event\n          emitCorrelatedEvent(baseCtx, 'workflow.started', {\n            'workflow.id': workflowId,\n            'workflow.name': config.name,\n          });\n\n          try {\n            const userFn = fnFactory(workflowCtx);\n            const result = await userFn(...args);\n\n            // Call onComplete callback\n            config.onComplete?.(workflowCtx, result);\n\n            // Add completion event\n            emitCorrelatedEvent(baseCtx, 'workflow.completed', {\n              'workflow.id': workflowId,\n            });\n\n            return result;\n          } catch (error) {\n            // Call onError callback\n            config.onError?.(workflowCtx, error as Error);\n\n            // Add error event\n            emitCorrelatedEvent(baseCtx, 'workflow.failed', {\n              'workflow.id': workflowId,\n              'workflow.error': (error as Error).message,\n            });\n\n            throw error;\n          }\n        };\n      },\n    );\n  };\n}\n\n// ============================================================================\n// Distributed Step Tracer\n// ============================================================================\n\n/**\n * Create a traced distributed workflow step\n *\n * Use in downstream services to trace steps that are part of a distributed workflow.\n * Automatically extracts workflow baggage from the current context.\n *\n * @param config - Step configuration\n * @returns Factory function for the step handler\n *\n * @example Consumer in downstream service\n * ```typescript\n * export const processInventory = traceConsumer({\n *   system: 'kafka',\n *   destination: 'inventory-requests',\n *   extractBaggage: true,  // Extracts workflow.* from headers\n * })(ctx => {\n *   // Wrap inner logic with traceDistributedStep\n *   return traceDistributedStep({\n *     name: 'ReserveInventory',\n *   })(stepCtx => async (message) => {\n *     console.log(`Processing workflow ${stepCtx.workflowId}`);\n *     await reserveItems(message.items);\n *   })(message);\n * });\n * ```\n *\n * @example Standalone step handler\n * ```typescript\n * export const reserveInventory = traceDistributedStep({\n *   name: 'ReserveInventory',\n *   idempotent: true,\n * })(ctx => async (request: InventoryRequest) => {\n *   if (ctx.workflowId) {\n *     console.log(`Part of workflow ${ctx.workflowId}, step ${ctx.stepIndex}`);\n *   }\n *   return await inventoryService.reserve(request.items);\n * });\n * ```\n */\nexport function traceDistributedStep<TArgs extends unknown[], TReturn>(\n  config: DistributedStepConfig,\n) {\n  const spanName = `workflow.step.${config.name}`;\n\n  return (\n    fnFactory: (\n      ctx: DistributedStepContext,\n    ) => (...args: TArgs) => Promise<TReturn>,\n  ): ((...args: TArgs) => Promise<TReturn>) => {\n    return trace<TArgs, TReturn>(\n      { name: spanName, spanKind: SpanKind.INTERNAL },\n      (baseCtx) => {\n        return async (...args: TArgs) => {\n          // Extract workflow baggage\n          let baggageValues: WorkflowBaggageValues | null = null;\n\n          const extractBaggage = config.extractBaggage ?? true;\n          if (typeof extractBaggage === 'function') {\n            baggageValues = extractBaggage(args);\n          } else if (extractBaggage) {\n            // Read from current context\n            const extracted = WorkflowBaggage.get(baseCtx);\n            if (extracted.workflowId && extracted.workflowName) {\n              baggageValues = extracted as WorkflowBaggageValues;\n            }\n          }\n\n          // Determine step index\n          // If explicit stepIndex provided in config, use it\n          // Otherwise, auto-increment from baggage if available\n          let stepIndex: number | null;\n          if (config.stepIndex !== undefined) {\n            stepIndex = config.stepIndex;\n          } else if (baggageValues?.stepIndex === undefined) {\n            stepIndex = null;\n          } else {\n            // Auto-increment from previous step\n            stepIndex = baggageValues.stepIndex + 1;\n          }\n\n          // Update baggage with current step\n          if (baggageValues) {\n            baggageValues.stepName = config.name;\n            if (stepIndex !== null) {\n              baggageValues.stepIndex = stepIndex;\n            }\n            WorkflowBaggage.set(baseCtx, baggageValues);\n          }\n\n          // Set span attributes\n          baseCtx.setAttribute('workflow.step.name', config.name);\n          if (stepIndex !== null) {\n            baseCtx.setAttribute('workflow.step.index', stepIndex);\n          }\n          if (config.idempotent !== undefined) {\n            baseCtx.setAttribute('workflow.step.idempotent', config.idempotent);\n          }\n          if (config.isCompensation) {\n            baseCtx.setAttribute('workflow.step.is_compensation', true);\n          }\n\n          // Add workflow context attributes if available\n          if (baggageValues) {\n            baseCtx.setAttribute('workflow.id', baggageValues.workflowId);\n            baseCtx.setAttribute('workflow.name', baggageValues.workflowName);\n            if (baggageValues.workflowVersion) {\n              baseCtx.setAttribute(\n                'workflow.version',\n                baggageValues.workflowVersion,\n              );\n            }\n            if (baggageValues.totalSteps) {\n              baseCtx.setAttribute(\n                'workflow.total_steps',\n                baggageValues.totalSteps,\n              );\n            }\n          }\n\n          // Apply custom attributes\n          if (config.attributes) {\n            for (const [key, value] of Object.entries(config.attributes)) {\n              baseCtx.setAttribute(key, value);\n            }\n          }\n\n          // Compensation data storage\n          let compensationData: Record<string, unknown> | undefined;\n\n          // Create extended context\n          const stepCtx: DistributedStepContext = {\n            ...baseCtx,\n            workflowId: baggageValues?.workflowId ?? null,\n            workflowName: baggageValues?.workflowName ?? null,\n            stepName: config.name,\n            stepIndex,\n            isCompensation: config.isCompensation ?? false,\n\n            getWorkflowBaggage(): WorkflowBaggageValues | null {\n              return baggageValues ? { ...baggageValues } : null;\n            },\n\n            updateWorkflowBaggage(\n              values: Partial<WorkflowBaggageValues>,\n            ): void {\n              if (baggageValues) {\n                Object.assign(baggageValues, values);\n                WorkflowBaggage.set(baseCtx, baggageValues);\n              }\n            },\n\n            getWorkflowHeaders(): Record<string, string> {\n              const headers: Record<string, string> = {};\n              const ctx = context.active();\n              propagation.inject(ctx, headers);\n              return headers;\n            },\n\n            requiresCompensation(data?: Record<string, unknown>): void {\n              compensationData = data;\n              baseCtx.setAttribute('workflow.step.requires_compensation', true);\n              emitCorrelatedEvent(\n                baseCtx,\n                'workflow.step.compensation_registered',\n                {\n                  'workflow.step.name': config.name,\n                  ...(data && {\n                    'workflow.step.compensation_data': JSON.stringify(data),\n                  }),\n                },\n              );\n            },\n          };\n\n          // Call onStart callback\n          config.onStart?.(stepCtx);\n\n          // Add start event\n          emitCorrelatedEvent(baseCtx, 'workflow.step.started', {\n            'workflow.step.name': config.name,\n            ...(baggageValues && { 'workflow.id': baggageValues.workflowId }),\n          });\n\n          try {\n            const userFn = fnFactory(stepCtx);\n            const result = await userFn(...args);\n\n            // Call onComplete callback\n            config.onComplete?.(stepCtx, result);\n\n            // Add completion event\n            emitCorrelatedEvent(baseCtx, 'workflow.step.completed', {\n              'workflow.step.name': config.name,\n            });\n\n            return result;\n          } catch (error) {\n            // Call onError callback\n            config.onError?.(stepCtx, error as Error);\n\n            // Add error event with compensation info if registered\n            emitCorrelatedEvent(baseCtx, 'workflow.step.failed', {\n              'workflow.step.name': config.name,\n              'workflow.step.error': (error as Error).message,\n              ...(compensationData && {\n                'workflow.step.requires_compensation': true,\n              }),\n            });\n\n            throw error;\n          }\n        };\n      },\n    );\n  };\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Generate a unique workflow ID\n *\n * @param prefix - Optional prefix for the ID\n * @returns A unique workflow ID\n *\n * @example\n * ```typescript\n * const workflowId = generateWorkflowId('order'); // \"order-abc123def456\"\n * ```\n */\nexport function generateWorkflowId(prefix?: string): string {\n  const random = Math.random().toString(36).slice(2, 15);\n  const timestamp = Date.now().toString(36);\n  const id = `${timestamp}-${random}`;\n  return prefix ? `${prefix}-${id}` : id;\n}\n\n/**\n * Check if the current context is part of a distributed workflow\n *\n * @param ctx - The trace context\n * @returns True if workflow baggage is present\n */\nexport function isInDistributedWorkflow(ctx: TraceContext): boolean {\n  const baggage = WorkflowBaggage.get(ctx);\n  return !!(baggage.workflowId && baggage.workflowName);\n}\n\n/**\n * Get workflow progress information\n *\n * @param ctx - The trace context\n * @returns Progress info or null if not in a workflow\n */\nexport function getWorkflowProgress(ctx: TraceContext): {\n  workflowId: string;\n  workflowName: string;\n  currentStep: string | null;\n  currentStepIndex: number | null;\n  totalSteps: number | null;\n  percentComplete: number | null;\n} | null {\n  const baggage = WorkflowBaggage.get(ctx);\n  if (!baggage.workflowId || !baggage.workflowName) {\n    return null;\n  }\n\n  const percentComplete =\n    baggage.totalSteps && baggage.stepIndex !== undefined\n      ? Math.round(((baggage.stepIndex + 1) / baggage.totalSteps) * 100)\n      : null;\n\n  return {\n    workflowId: baggage.workflowId,\n    workflowName: baggage.workflowName,\n    currentStep: baggage.stepName ?? null,\n    currentStepIndex: baggage.stepIndex ?? null,\n    totalSteps: baggage.totalSteps ?? null,\n    percentComplete,\n  };\n}\n\n/**\n * Create workflow correlation headers for manual propagation\n *\n * Use when you need to manually add workflow context to outgoing requests.\n *\n * @param values - Workflow baggage values\n * @returns Headers object with workflow baggage\n *\n * @example\n * ```typescript\n * const headers = createWorkflowHeaders({\n *   workflowId: 'order-123',\n *   workflowName: 'OrderFulfillment',\n *   stepIndex: 2,\n * });\n *\n * await fetch('/api/inventory', { headers });\n * ```\n */\nexport function createWorkflowHeaders(\n  values: Partial<WorkflowBaggageValues>,\n): Record<string, string> {\n  const headers: Record<string, string> = {};\n\n  // Build baggage string\n  const baggageEntries: string[] = [];\n\n  if (values.workflowId) {\n    baggageEntries.push(\n      `workflow.workflowId=${encodeURIComponent(values.workflowId)}`,\n    );\n  }\n  if (values.workflowName) {\n    baggageEntries.push(\n      `workflow.workflowName=${encodeURIComponent(values.workflowName)}`,\n    );\n  }\n  if (values.workflowVersion) {\n    baggageEntries.push(\n      `workflow.workflowVersion=${encodeURIComponent(values.workflowVersion)}`,\n    );\n  }\n  if (values.stepName) {\n    baggageEntries.push(\n      `workflow.stepName=${encodeURIComponent(values.stepName)}`,\n    );\n  }\n  if (values.stepIndex !== undefined) {\n    baggageEntries.push(`workflow.stepIndex=${values.stepIndex}`);\n  }\n  if (values.totalSteps !== undefined) {\n    baggageEntries.push(`workflow.totalSteps=${values.totalSteps}`);\n  }\n  if (values.priority) {\n    baggageEntries.push(`workflow.priority=${values.priority}`);\n  }\n  if (values.correlationId) {\n    baggageEntries.push(\n      `workflow.correlationId=${encodeURIComponent(values.correlationId)}`,\n    );\n  }\n  if (values.parentWorkflowId) {\n    baggageEntries.push(\n      `workflow.parentWorkflowId=${encodeURIComponent(values.parentWorkflowId)}`,\n    );\n  }\n  if (values.initiatedBy) {\n    baggageEntries.push(\n      `workflow.initiatedBy=${encodeURIComponent(values.initiatedBy)}`,\n    );\n  }\n  if (values.startedAt) {\n    baggageEntries.push(\n      `workflow.startedAt=${encodeURIComponent(values.startedAt)}`,\n    );\n  }\n\n  if (baggageEntries.length > 0) {\n    headers['baggage'] = baggageEntries.join(',');\n  }\n\n  return headers;\n}\n\n/**\n * Parse workflow context from baggage header\n *\n * @param baggageHeader - The baggage header value\n * @returns Parsed workflow values or null\n */\nexport function parseWorkflowFromBaggage(\n  baggageHeader: string,\n): Partial<WorkflowBaggageValues> | null {\n  if (!baggageHeader) {\n    return null;\n  }\n\n  const values: Partial<WorkflowBaggageValues> = {};\n  const entries = baggageHeader.split(',');\n\n  for (const entry of entries) {\n    const [key, value] = entry.trim().split('=');\n    if (!key || !value) continue;\n\n    const decodedValue = decodeURIComponent(value);\n\n    switch (key) {\n      case 'workflow.workflowId': {\n        values.workflowId = decodedValue;\n        break;\n      }\n      case 'workflow.workflowName': {\n        values.workflowName = decodedValue;\n        break;\n      }\n      case 'workflow.workflowVersion': {\n        values.workflowVersion = decodedValue;\n        break;\n      }\n      case 'workflow.stepName': {\n        values.stepName = decodedValue;\n        break;\n      }\n      case 'workflow.stepIndex': {\n        values.stepIndex = Number.parseInt(decodedValue, 10);\n        break;\n      }\n      case 'workflow.totalSteps': {\n        values.totalSteps = Number.parseInt(decodedValue, 10);\n        break;\n      }\n      case 'workflow.priority': {\n        values.priority = decodedValue as WorkflowBaggageValues['priority'];\n        break;\n      }\n      case 'workflow.correlationId': {\n        values.correlationId = decodedValue;\n        break;\n      }\n      case 'workflow.parentWorkflowId': {\n        values.parentWorkflowId = decodedValue;\n        break;\n      }\n      case 'workflow.initiatedBy': {\n        values.initiatedBy = decodedValue;\n        break;\n      }\n      case 'workflow.startedAt': {\n        values.startedAt = decodedValue;\n        break;\n      }\n    }\n  }\n\n  return Object.keys(values).length > 0 ? values : null;\n}\n"]}