autotel
Version:
Write Once, Observe Anywhere
1 lines • 41.7 kB
Source Map (JSON)
{"version":3,"sources":["../src/workflow-distributed.ts"],"names":["createSafeBaggageSchema","trace","SpanKind","context","propagation"],"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 { 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 baseCtx.addEvent('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 baseCtx.addEvent('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 baseCtx.addEvent('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 baseCtx.addEvent('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 baseCtx.addEvent('workflow.step.compensation_registered', {\n 'workflow.step.name': config.name,\n ...(data && {\n 'workflow.step.compensation_data': JSON.stringify(data),\n }),\n });\n },\n };\n\n // Call onStart callback\n config.onStart?.(stepCtx);\n\n // Add start event\n baseCtx.addEvent('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 baseCtx.addEvent('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 baseCtx.addEvent('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"]}