@stackwright-services/capabilities 0.0.1
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/dist/index.d.mts +750 -0
- package/dist/index.d.ts +750 -0
- package/dist/index.js +1431 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1365 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/registry.ts","../src/transforms/collection-aggregate.ts","../src/transforms/collection-filter.ts","../src/transforms/collection-join.ts","../src/transforms/collection-paginate.ts","../src/transforms/math-compute.ts","../src/transforms/collection-sort.ts","../src/transforms/date-shift.ts","../src/transforms/events-filter.ts","../src/transforms/text-format.ts","../src/transforms/units-convert.ts","../src/transforms/validation-check.ts","../src/transforms/index.ts","../src/effects/service-call.ts","../src/effects/events-publish.ts","../src/effects/notify-user.ts","../src/effects/http-webhook.ts","../src/effects/index.ts"],"sourcesContent":["// @stackwright-services/capabilities\n// Capability registry and library for the Stackwright Services layer.\n\nexport {\n CapabilityRegistry,\n defaultRegistry,\n type CapabilityHandler,\n type CapabilityContext,\n type CapabilityLogger,\n type CapabilityMessageBus,\n type CapabilityNotificationProvider,\n type RegisteredCapability,\n} from './registry';\n\nexport { registerTransforms } from './transforms';\nexport { registerEffects } from './effects';\n\n// Re-export individual transforms for direct use\nexport {\n unitsConvertHandler,\n UnitsConvertInput,\n UnitsConvertOutput,\n} from './transforms/units-convert';\nexport { textFormatHandler, TextFormatInput, TextFormatOutput } from './transforms/text-format';\nexport {\n collectionFilterHandler,\n CollectionFilterInput,\n CollectionFilterOutput,\n evaluatePredicate,\n} from './transforms/collection-filter';\nexport {\n collectionAggregateHandler,\n CollectionAggregateInput,\n CollectionAggregateOutput,\n} from './transforms/collection-aggregate';\nexport {\n collectionJoinHandler,\n CollectionJoinInput,\n CollectionJoinOutput,\n} from './transforms/collection-join';\nexport { dateShiftHandler, DateShiftInput, DateShiftOutput } from './transforms/date-shift';\nexport {\n eventsFilterHandler,\n EventsFilterInput,\n EventsFilterOutput,\n} from './transforms/events-filter';\n\n// Re-export effects\nexport { serviceCallHandler, ServiceCallInput, ServiceCallOutput } from './effects/service-call';\nexport {\n eventsPublishHandler,\n eventsPublishDefinition,\n EventsPublishInput,\n EventsPublishOutput,\n stripBusPrefix,\n} from './effects/events-publish';\nexport {\n notifyUserHandler,\n notifyUserDefinition,\n NotifyUserInput,\n NotifyUserOutput,\n NotificationChannel,\n} from './effects/notify-user';\n\n// Convenience: register everything\nimport type { CapabilityRegistry } from './registry';\nimport { registerEffects } from './effects';\nimport { registerTransforms } from './transforms';\n\n/**\n * Register all built-in capabilities (transforms + effects).\n */\nexport function registerAllCapabilities(registry: CapabilityRegistry): void {\n registerTransforms(registry);\n registerEffects(registry);\n}\n","import type { CapabilityDefinition } from '@stackwright-services/types';\nimport type { z } from 'zod';\n\n/**\n * Runtime capability handler -- the actual implementation function.\n *\n * For transforms: pure function, no side effects.\n * For effects: may perform I/O (HTTP calls, notifications, etc.)\n */\nexport type CapabilityHandler<TInput = unknown, TOutput = unknown> = (\n input: TInput,\n context: CapabilityContext,\n) => Promise<TOutput>;\n\n/**\n * Minimal message bus interface for capability handlers.\n *\n * This is a subset of MessageBusProvider (from @stackwright-services/runtime).\n * Defined inline to avoid circular dependency (capabilities ← runtime).\n * Runtime's MessageBusProvider structurally satisfies this interface.\n */\nexport interface CapabilityMessageBus {\n publish(\n topic: string,\n message: {\n payload: unknown;\n traceContext?: Record<string, string>;\n metadata?: {\n timestamp?: string;\n source?: string;\n correlationId?: string;\n messageId?: string;\n };\n },\n ): Promise<{ messageId: string; topic: string; success: boolean }>;\n}\n\n/**\n * Minimal data source provider interface for capability handlers.\n *\n * This is a subset of DataSourceProvider (from @stackwright-services/runtime).\n * Defined inline to avoid circular dependency (capabilities ← runtime).\n * Runtime's DataSourceProvider structurally satisfies this interface.\n *\n * Used by service.call to delegate to a typed provider when one is installed,\n * falling back to raw HTTP when the source is not known by any provider.\n */\nexport interface CapabilityDataSourceProvider {\n /** Enumerate all sources this provider knows. Used to check resolvability before execute(). */\n listSources(): Array<{ id: string }>;\n /**\n * Execute a named operation against a source.\n * @param source - Source ID (without transport prefix, e.g. \"equipment-api\")\n * @param operation - Operation name (e.g. \"listUnits\")\n * @param params - Operation parameters\n */\n execute(\n source: string,\n operation: string,\n params: unknown,\n ): Promise<{ data: unknown; metadata?: Record<string, unknown> }>;\n}\n\n/**\n * Minimal notification provider interface for capability handlers.\n *\n * This is a subset of NotificationProvider (from @stackwright-services/runtime).\n * Defined inline to avoid circular dependency (capabilities ← runtime).\n * Runtime's NotificationProvider structurally satisfies this interface.\n */\nexport interface CapabilityNotificationProvider {\n send(notification: {\n /** Recipient user identifier — the provider resolves this to a delivery address */\n recipient: string;\n /** Delivery channel */\n channel: 'email' | 'sms' | 'push' | 'in-app';\n /** Template name for the notification content */\n template: string;\n /** Typed payload for template interpolation */\n payload: unknown;\n /** Optional subject line (for email, push) */\n subject?: string;\n /** Trace context for observability */\n traceContext?: Record<string, string>;\n /** Message metadata */\n metadata?: {\n timestamp?: string;\n source?: string;\n correlationId?: string;\n };\n }): Promise<{ notificationId: string; channel: string; success: boolean }>;\n}\n\n/**\n * Runtime context passed to every capability handler.\n * Provides controlled access to runtime services without ambient permissions.\n */\nexport interface CapabilityContext {\n /** Trace ID for observability correlation */\n traceId: string;\n /** Logger scoped to this capability invocation */\n logger: CapabilityLogger;\n /** Message bus for publishing events (injected by runtime, optional) */\n messageBus?: CapabilityMessageBus;\n /** Notification provider for sending user notifications (injected by runtime, optional) */\n notificationProvider?: CapabilityNotificationProvider;\n /**\n * Data source provider for typed, permission-scoped source access (injected by runtime, optional).\n * When present and a source is resolvable, service.call delegates to this instead of raw HTTP.\n */\n dataSourceProvider?: CapabilityDataSourceProvider;\n}\n\nexport interface CapabilityLogger {\n debug(message: string, data?: Record<string, unknown>): void;\n info(message: string, data?: Record<string, unknown>): void;\n warn(message: string, data?: Record<string, unknown>): void;\n error(message: string, data?: Record<string, unknown>): void;\n}\n\n/**\n * A registered capability -- definition + handler + runtime schemas.\n */\nexport interface RegisteredCapability<TInput = unknown, TOutput = unknown> {\n /** The capability definition (from types package) */\n definition: CapabilityDefinition;\n /** The runtime handler function */\n handler: CapabilityHandler<TInput, TOutput>;\n /** Zod schema for runtime input validation */\n inputSchema: z.ZodType<TInput>;\n /** Zod schema for runtime output validation */\n outputSchema: z.ZodType<TOutput>;\n}\n\n/**\n * The capability registry -- the audited library of what the system can do.\n *\n * This is the backend mirror of the frontend content-type registry.\n * Citizen developers compose from it; engineers extend it.\n * Registration is the audit chokepoint.\n */\nexport class CapabilityRegistry {\n private capabilities = new Map<string, RegisteredCapability>();\n\n /**\n * Register a capability. This is a security-relevant operation --\n * every registration should be audited.\n *\n * @throws if a capability with the same name is already registered\n */\n register<TInput, TOutput>(\n definition: CapabilityDefinition,\n handler: CapabilityHandler<TInput, TOutput>,\n inputSchema: z.ZodType<TInput>,\n outputSchema: z.ZodType<TOutput>,\n ): void {\n if (this.capabilities.has(definition.name)) {\n throw new Error(\n `Capability \"${definition.name}\" is already registered. ` +\n `Duplicate registration is not allowed -- this is the audit chokepoint.`,\n );\n }\n this.capabilities.set(definition.name, {\n definition,\n handler: handler as CapabilityHandler,\n inputSchema,\n outputSchema,\n });\n }\n\n /**\n * Look up a capability by name.\n * @returns the registered capability, or undefined if not found\n */\n lookup(name: string): RegisteredCapability | undefined {\n return this.capabilities.get(name);\n }\n\n /**\n * Get a capability by name, throwing if not found.\n * @throws if the capability is not registered\n */\n get(name: string): RegisteredCapability {\n const capability = this.capabilities.get(name);\n if (!capability) {\n throw new Error(\n `Capability \"${name}\" is not registered. ` +\n `Available capabilities: ${this.listNames().join(', ') || '(none)'}`,\n );\n }\n return capability;\n }\n\n /**\n * List all registered capabilities.\n */\n listAll(): RegisteredCapability[] {\n return Array.from(this.capabilities.values());\n }\n\n /**\n * List all registered capability names.\n */\n listNames(): string[] {\n return Array.from(this.capabilities.keys());\n }\n\n /**\n * Filter capabilities by kind (transform or effect).\n */\n filterByKind(kind: 'transform' | 'effect'): RegisteredCapability[] {\n return this.listAll().filter((cap) => cap.definition.kind === kind);\n }\n\n /**\n * Check if a capability is registered.\n */\n has(name: string): boolean {\n return this.capabilities.has(name);\n }\n\n /**\n * Get the count of registered capabilities.\n */\n get size(): number {\n return this.capabilities.size;\n }\n\n /**\n * Clear all registrations. Primarily for testing.\n */\n clear(): void {\n this.capabilities.clear();\n }\n}\n\n/**\n * The global default registry instance.\n * Packages register their capabilities here at import time.\n */\nexport const defaultRegistry = new CapabilityRegistry();\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nconst AggregateOperation = z.enum(['count', 'sum', 'avg', 'min', 'max']);\n\nexport const CollectionAggregateInput = z.object({\n items: z.array(z.unknown()),\n field: z.string().min(1),\n operation: AggregateOperation,\n});\n\nexport const CollectionAggregateOutput = z.object({\n result: z.number(),\n});\n\nexport type CollectionAggregateInput = z.infer<typeof CollectionAggregateInput>;\nexport type CollectionAggregateOutput = z.infer<typeof CollectionAggregateOutput>;\n\n/**\n * Resolve a dot-delimited field path from an object.\n */\nfunction resolveFieldPath(item: unknown, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = item;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Extract numeric field values from items, throwing on non-numeric values.\n */\nfunction extractNumericValues(items: unknown[], field: string): number[] {\n return items.map((item, index) => {\n const value = resolveFieldPath(item, field);\n if (typeof value !== 'number') {\n throw new Error(\n `Field \"${field}\" at index ${index} is not a number (got ${typeof value}). ` +\n `Numeric aggregation requires all values to be numbers.`,\n );\n }\n return value;\n });\n}\n\nexport const collectionAggregateHandler: CapabilityHandler<\n CollectionAggregateInput,\n CollectionAggregateOutput\n> = async (input) => {\n const { items, field, operation } = input;\n\n if (operation === 'count') {\n return { result: items.length };\n }\n\n if (items.length === 0) {\n throw new Error(`Cannot compute ${operation} on an empty collection`);\n }\n\n const values = extractNumericValues(items, field);\n\n let result: number;\n switch (operation) {\n case 'sum':\n result = values.reduce((acc, v) => acc + v, 0);\n break;\n case 'avg':\n result = values.reduce((acc, v) => acc + v, 0) / values.length;\n break;\n case 'min':\n result = Math.min(...values);\n break;\n case 'max':\n result = Math.max(...values);\n break;\n }\n\n return { result };\n};\n\nexport const collectionAggregateDefinition = {\n kind: 'transform' as const,\n name: 'collection.aggregate',\n description: 'Aggregate operations (count, sum, avg, min, max) on a field in an array',\n inputSchema: 'CollectionAggregateInput',\n outputSchema: 'CollectionAggregateOutput',\n};\n","import type { PredicateCondition, PredicateOperator } from '@stackwright-services/types';\nimport { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nexport const CollectionFilterInput = z.object({\n items: z.array(z.unknown()),\n conditions: z.array(\n z.object({\n field: z.string().min(1),\n op: z.string().min(1),\n value: z.unknown().optional(),\n value_field: z.string().min(1).optional(),\n }),\n ),\n});\n\nexport const CollectionFilterOutput = z.object({\n items: z.array(z.unknown()),\n count: z.number(),\n});\n\nexport type CollectionFilterInput = z.infer<typeof CollectionFilterInput>;\nexport type CollectionFilterOutput = z.infer<typeof CollectionFilterOutput>;\n\n/**\n * Resolve a dot-delimited field path from an object.\n * e.g. \"event.severity\" on { event: { severity: \"HIGH\" } } -> \"HIGH\"\n */\nfunction resolveFieldPath(item: unknown, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = item;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Evaluate a single typed predicate condition against an item.\n *\n * This function implements the CLOSED operator set from PredicateOperator.\n * It uses an exhaustive switch -- adding an operator requires updating this function.\n *\n * @security-critical -- only the 13 operators in the closed enum are supported.\n */\nexport function evaluatePredicate(item: unknown, condition: PredicateCondition): boolean {\n const fieldValue = resolveFieldPath(item, condition.field);\n const op: PredicateOperator = condition.op;\n const target = condition.value;\n\n switch (op) {\n case 'equals':\n return fieldValue === target;\n\n case 'not_equals':\n return fieldValue !== target;\n\n case 'in':\n if (!Array.isArray(target)) return false;\n return (target as unknown[]).includes(fieldValue);\n\n case 'not_in':\n if (!Array.isArray(target)) return true;\n return !(target as unknown[]).includes(fieldValue);\n\n case 'less_than':\n return typeof fieldValue === 'number' && typeof target === 'number'\n ? fieldValue < target\n : false;\n\n case 'greater_than':\n return typeof fieldValue === 'number' && typeof target === 'number'\n ? fieldValue > target\n : false;\n\n case 'less_than_or_equal':\n return typeof fieldValue === 'number' && typeof target === 'number'\n ? fieldValue <= target\n : false;\n\n case 'greater_than_or_equal':\n return typeof fieldValue === 'number' && typeof target === 'number'\n ? fieldValue >= target\n : false;\n\n case 'matches_prefix':\n return typeof fieldValue === 'string' && typeof target === 'string'\n ? fieldValue.startsWith(target)\n : false;\n\n case 'contains':\n return typeof fieldValue === 'string' && typeof target === 'string'\n ? fieldValue.includes(target)\n : false;\n\n case 'less_than_field': {\n if (!condition.value_field) return false;\n const otherValue = resolveFieldPath(item, condition.value_field);\n return typeof fieldValue === 'number' && typeof otherValue === 'number'\n ? fieldValue < otherValue\n : false;\n }\n\n case 'greater_than_field': {\n if (!condition.value_field) return false;\n const otherValue = resolveFieldPath(item, condition.value_field);\n return typeof fieldValue === 'number' && typeof otherValue === 'number'\n ? fieldValue > otherValue\n : false;\n }\n\n case 'equals_field': {\n if (!condition.value_field) return false;\n const otherValue = resolveFieldPath(item, condition.value_field);\n return fieldValue === otherValue;\n }\n\n default: {\n // Exhaustive check -- if this triggers, an operator was added to the\n // enum but not to this evaluator. This is a compile-time safety net.\n const _exhaustive: never = op;\n throw new Error(`Unsupported predicate operator: ${_exhaustive}`);\n }\n }\n}\n\nexport const collectionFilterHandler: CapabilityHandler<\n CollectionFilterInput,\n CollectionFilterOutput\n> = async (input) => {\n const { items, conditions } = input;\n\n const filtered = items.filter((item) =>\n conditions.every((condition) => evaluatePredicate(item, condition as PredicateCondition)),\n );\n\n return { items: filtered, count: filtered.length };\n};\n\nexport const collectionFilterDefinition = {\n kind: 'transform' as const,\n name: 'collection.filter',\n description: 'Filter an array of objects using typed predicate conditions',\n inputSchema: 'CollectionFilterInput',\n outputSchema: 'CollectionFilterOutput',\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nexport const CollectionJoinInput = z.object({\n /** Left-side items array */\n leftItems: z.array(z.unknown()),\n /** Right-side items array */\n rightItems: z.array(z.unknown()),\n /** Field path on left items to join on */\n leftField: z.string().min(1),\n /** Field path on right items to join on */\n rightField: z.string().min(1),\n});\n\nexport const CollectionJoinOutput = z.object({\n /** Merged items where left[leftField] === right[rightField] */\n items: z.array(\n z.object({\n left: z.unknown(),\n right: z.unknown(),\n }),\n ),\n /** Count of matched items */\n count: z.number(),\n});\n\nexport type CollectionJoinInput = z.infer<typeof CollectionJoinInput>;\nexport type CollectionJoinOutput = z.infer<typeof CollectionJoinOutput>;\n\n/**\n * Resolve a dot-delimited field path from an object.\n * e.g. \"event.severity\" on { event: { severity: \"HIGH\" } } -> \"HIGH\"\n */\nfunction resolveFieldPath(item: unknown, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = item;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Join two arrays on matching field values for cross-domain data correlation.\n *\n * Pure transform (no I/O, trivially auditable).\n * Uses hash-based lookup for O(n+m) performance instead of O(n*m).\n *\n * @example\n * join(patients, generators, 'currentFacility', 'facilityId')\n * → [{ left: patient, right: generator }, ...]\n */\nexport const collectionJoinHandler: CapabilityHandler<\n CollectionJoinInput,\n CollectionJoinOutput\n> = async (input) => {\n const { leftItems, rightItems, leftField, rightField } = input;\n\n // Build a lookup map from right items for O(n+m) instead of O(n*m)\n const rightIndex = new Map<unknown, unknown[]>();\n for (const rightItem of rightItems) {\n const key = resolveFieldPath(rightItem, rightField);\n if (key !== undefined) {\n const existing = rightIndex.get(key) ?? [];\n existing.push(rightItem);\n rightIndex.set(key, existing);\n }\n }\n\n // Join: for each left item, find matching right items\n const items: Array<{ left: unknown; right: unknown }> = [];\n for (const leftItem of leftItems) {\n const key = resolveFieldPath(leftItem, leftField);\n if (key !== undefined) {\n const matches = rightIndex.get(key);\n if (matches) {\n for (const rightItem of matches) {\n items.push({ left: leftItem, right: rightItem });\n }\n }\n }\n }\n\n return { items, count: items.length };\n};\n\nexport const collectionJoinDefinition = {\n kind: 'transform' as const,\n name: 'collection.join',\n description: 'Join two arrays on matching field values for cross-domain data correlation',\n inputSchema: 'CollectionJoinInput',\n outputSchema: 'CollectionJoinOutput',\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nexport const CollectionPaginateInput = z.object({\n items: z.array(z.unknown()),\n page: z.number().int().min(1),\n pageSize: z.number().int().min(1).max(1000),\n});\n\nexport const CollectionPaginateOutput = z.object({\n items: z.array(z.unknown()),\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n hasNext: z.boolean(),\n hasPrevious: z.boolean(),\n});\n\nexport type CollectionPaginateInput = z.infer<typeof CollectionPaginateInput>;\nexport type CollectionPaginateOutput = z.infer<typeof CollectionPaginateOutput>;\n\n/**\n * Extract a single page from an array with pagination metadata.\n *\n * Pagination is 1-indexed (page 1 is the first page).\n * Requesting a page beyond the last page returns empty items — not an error.\n * Never mutates the input array.\n */\nexport const collectionPaginateHandler: CapabilityHandler<\n CollectionPaginateInput,\n CollectionPaginateOutput\n> = async (input) => {\n const { items, page, pageSize } = input;\n const total = items.length;\n\n const startIndex = (page - 1) * pageSize;\n const pageItems = items.slice(startIndex, startIndex + pageSize);\n\n return {\n items: pageItems,\n total,\n page,\n pageSize,\n hasNext: startIndex + pageSize < total,\n hasPrevious: page > 1,\n };\n};\n\nexport const collectionPaginateDefinition = {\n kind: 'transform' as const,\n name: 'collection.paginate',\n description: 'Extract a page from an array with pagination metadata',\n inputSchema: 'CollectionPaginateInput',\n outputSchema: 'CollectionPaginateOutput',\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nconst MathOperation = z.object({\n op: z.enum(['add', 'subtract', 'multiply', 'divide', 'modulo', 'round', 'ceil', 'floor']),\n fields: z.array(z.string().min(1)).min(1), // field paths to read operands from\n result_field: z.string().min(1), // dot-path where the result is written\n});\n\nexport const MathComputeInput = z.object({\n data: z.record(z.unknown()),\n operations: z.array(MathOperation).min(1),\n});\n\nexport const MathComputeOutput = z.object({\n data: z.record(z.unknown()),\n computed_fields: z.array(z.string()),\n});\n\nexport type MathComputeInput = z.infer<typeof MathComputeInput>;\nexport type MathComputeOutput = z.infer<typeof MathComputeOutput>;\n\n/**\n * Resolve a dot-delimited field path from an object.\n * e.g. \"metrics.count\" on { metrics: { count: 42 } } -> 42\n */\nfunction resolveFieldPath(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Write a value to a dot-delimited field path, creating intermediate objects as needed.\n */\nfunction setFieldPath(obj: Record<string, unknown>, path: string, value: unknown): void {\n const parts = path.split('.');\n // Pop off the leaf key so we can for-of the parent segments safely.\n const lastKey = parts.pop();\n if (lastKey === undefined) return; // schema enforces min(1), so this is a belt-and-suspenders guard\n\n let current: Record<string, unknown> = obj;\n for (const key of parts) {\n if (current[key] === null || current[key] === undefined || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n current[lastKey] = value;\n}\n\n/**\n * Resolve a field and return its value as a number, or null if it is missing or non-numeric.\n */\nfunction resolveNumber(data: Record<string, unknown>, field: string): number | null {\n const value = resolveFieldPath(data, field);\n return typeof value === 'number' ? value : null;\n}\n\n/**\n * Safe arithmetic on typed numeric fields.\n *\n * Operations are applied sequentially — the result of op N is visible to op N+1.\n * Division and modulo by zero → null (no crash).\n * Non-numeric or missing field values → null.\n * Input data is never mutated.\n */\nexport const mathComputeHandler: CapabilityHandler<MathComputeInput, MathComputeOutput> = async (\n input,\n) => {\n const { data, operations } = input;\n\n // structuredClone — never mutate input.\n const result = structuredClone(data) as Record<string, unknown>;\n const computedFields: string[] = [];\n\n for (const { op, fields, result_field } of operations) {\n const [firstField, secondField] = fields;\n const a = firstField !== undefined ? resolveNumber(result, firstField) : null;\n let computed: number | null = null;\n\n if (op === 'round') {\n computed = a !== null ? Math.round(a) : null;\n } else if (op === 'ceil') {\n computed = a !== null ? Math.ceil(a) : null;\n } else if (op === 'floor') {\n computed = a !== null ? Math.floor(a) : null;\n } else {\n // Binary ops: add, subtract, multiply, divide, modulo\n const b = secondField !== undefined ? resolveNumber(result, secondField) : null;\n if (a !== null && b !== null) {\n if (op === 'add') computed = a + b;\n else if (op === 'subtract') computed = a - b;\n else if (op === 'multiply') computed = a * b;\n else if (op === 'divide') computed = b !== 0 ? a / b : null;\n else if (op === 'modulo') computed = b !== 0 ? a % b : null;\n }\n }\n\n setFieldPath(result, result_field, computed);\n computedFields.push(result_field);\n }\n\n return { data: result, computed_fields: computedFields };\n};\n\nexport const mathComputeDefinition = {\n kind: 'transform' as const,\n name: 'math.compute',\n description:\n 'Safe arithmetic operations on typed numeric fields. Operations: add, subtract, multiply, divide, modulo, round, ceil, floor.',\n inputSchema: 'MathComputeInput',\n outputSchema: 'MathComputeOutput',\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nconst SortKey = z.object({\n field: z.string().min(1),\n // Explicit direction required — no silent defaults. Explicit is better than implicit.\n direction: z.enum(['asc', 'desc']),\n});\n\nexport const CollectionSortInput = z.object({\n items: z.array(z.unknown()),\n sortBy: z.array(SortKey).min(1),\n});\n\nexport const CollectionSortOutput = z.object({\n items: z.array(z.unknown()),\n count: z.number(),\n});\n\nexport type CollectionSortInput = z.infer<typeof CollectionSortInput>;\nexport type CollectionSortOutput = z.infer<typeof CollectionSortOutput>;\n\n/**\n * Resolve a dot-delimited field path from an object.\n * e.g. \"address.zipCode\" on { address: { zipCode: \"90210\" } } -> \"90210\"\n */\nfunction resolveFieldPath(item: unknown, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = item;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Compare two non-nil field values for directional sorting.\n *\n * Ordering rules:\n * - two numbers → numeric comparison\n * - two strings → case-sensitive lexicographic comparison\n * - number vs string → number comes first\n * - anything else → String() coercion, lexicographic\n *\n * Callers are responsible for nil-gating BEFORE calling this.\n */\nfunction compareNonNilValues(a: unknown, b: unknown): number {\n if (typeof a === 'number' && typeof b === 'number') {\n return a - b;\n }\n\n if (typeof a === 'string' && typeof b === 'string') {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n\n // Mixed primitive types: numbers sort before strings\n if (typeof a === 'number') return -1;\n if (typeof b === 'number') return 1;\n\n // Fallback: coerce to string\n const sa = String(a);\n const sb = String(b);\n return sa < sb ? -1 : sa > sb ? 1 : 0;\n}\n\n/**\n * Sort an array of items by one or more fields with typed direction.\n *\n * Multi-field sort: primary field first, secondary field breaks ties, etc.\n * Missing/null values always sort LAST, regardless of direction.\n * Returns a NEW array — the input is never mutated.\n */\nexport const collectionSortHandler: CapabilityHandler<\n CollectionSortInput,\n CollectionSortOutput\n> = async (input) => {\n const { items, sortBy } = input;\n\n const sorted = [...items].sort((a, b) => {\n for (const { field, direction } of sortBy) {\n const aVal = resolveFieldPath(a, field);\n const bVal = resolveFieldPath(b, field);\n\n // Nil check BEFORE direction flip — nulls are always last\n const aIsNil = aVal === null || aVal === undefined;\n const bIsNil = bVal === null || bVal === undefined;\n if (aIsNil && bIsNil) continue;\n if (aIsNil) return 1; // a goes to end\n if (bIsNil) return -1; // b goes to end\n\n const cmp = compareNonNilValues(aVal, bVal);\n if (cmp !== 0) {\n return direction === 'desc' ? -cmp : cmp;\n }\n }\n return 0;\n });\n\n return { items: sorted, count: sorted.length };\n};\n\nexport const collectionSortDefinition = {\n kind: 'transform' as const,\n name: 'collection.sort',\n description: 'Sort arrays by one or more fields with typed direction (asc/desc)',\n inputSchema: 'CollectionSortInput',\n outputSchema: 'CollectionSortOutput',\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nexport const DateShiftInput = z.object({\n date: z.string().min(1),\n duration: z\n .string()\n .regex(\n /^P(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+S)?)?$/,\n 'Duration must be ISO 8601 format (e.g. \"P3D\", \"PT1H30M\")',\n ),\n direction: z.enum(['add', 'subtract']),\n});\n\nexport const DateShiftOutput = z.object({\n result: z.string(),\n});\n\nexport type DateShiftInput = z.infer<typeof DateShiftInput>;\nexport type DateShiftOutput = z.infer<typeof DateShiftOutput>;\n\ninterface ParsedDuration {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n}\n\n/**\n * Parse an ISO 8601 duration string into components.\n * Supports: P[n]D, PT[n]H[n]M[n]S, and combinations like P3DT1H30M.\n */\nfunction parseDuration(duration: string): ParsedDuration {\n const result: ParsedDuration = { days: 0, hours: 0, minutes: 0, seconds: 0 };\n\n const dayMatch = duration.match(/(\\d+)D/);\n if (dayMatch?.[1]) result.days = parseInt(dayMatch[1], 10);\n\n const timeSection = duration.match(/T(.+)$/);\n if (timeSection?.[1]) {\n const timePart = timeSection[1];\n const hourMatch = timePart.match(/(\\d+)H/);\n const minMatch = timePart.match(/(\\d+)M/);\n const secMatch = timePart.match(/(\\d+)S/);\n if (hourMatch?.[1]) result.hours = parseInt(hourMatch[1], 10);\n if (minMatch?.[1]) result.minutes = parseInt(minMatch[1], 10);\n if (secMatch?.[1]) result.seconds = parseInt(secMatch[1], 10);\n }\n\n return result;\n}\n\nexport const dateShiftHandler: CapabilityHandler<DateShiftInput, DateShiftOutput> = async (\n input,\n) => {\n const { date, duration, direction } = input;\n\n const parsed = parseDuration(duration);\n const totalMs =\n (parsed.days * 86400 + parsed.hours * 3600 + parsed.minutes * 60 + parsed.seconds) * 1000;\n\n const dateObj = new Date(date);\n if (isNaN(dateObj.getTime())) {\n throw new Error(`Invalid date: \"${date}\" is not a valid ISO 8601 date`);\n }\n\n const shift = direction === 'add' ? totalMs : -totalMs;\n const resultDate = new Date(dateObj.getTime() + shift);\n\n return { result: resultDate.toISOString() };\n};\n\nexport const dateShiftDefinition = {\n kind: 'transform' as const,\n name: 'date.shift',\n description: 'Add or subtract an ISO 8601 duration from a date',\n inputSchema: 'DateShiftInput',\n outputSchema: 'DateShiftOutput',\n};\n","import type { PredicateCondition } from '@stackwright-services/types';\nimport { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\nimport { evaluatePredicate } from './collection-filter';\n\nexport const EventsFilterInput = z.object({\n /** The event payload to evaluate */\n event: z.unknown(),\n /** Typed predicate conditions -- all must pass for the event to pass through */\n conditions: z\n .array(\n z.object({\n field: z.string().min(1),\n op: z.string().min(1),\n value: z.unknown(),\n }),\n )\n .min(1),\n});\n\nexport const EventsFilterOutput = z.object({\n /** The event if it passed all conditions, or null if filtered out */\n event: z.unknown().nullable(),\n /** Whether the event passed all conditions */\n passed: z.boolean(),\n});\n\nexport type EventsFilterInput = z.infer<typeof EventsFilterInput>;\nexport type EventsFilterOutput = z.infer<typeof EventsFilterOutput>;\n\nexport const eventsFilterHandler: CapabilityHandler<EventsFilterInput, EventsFilterOutput> = async (\n input,\n) => {\n const { event, conditions } = input;\n\n const passed = conditions.every((condition) =>\n evaluatePredicate(event, condition as PredicateCondition),\n );\n\n return {\n event: passed ? event : null,\n passed,\n };\n};\n\nexport const eventsFilterDefinition = {\n kind: 'transform' as const,\n name: 'events.filter',\n description:\n 'Filter a single event payload against typed predicate conditions. Returns the event if all conditions pass, null if filtered out.',\n inputSchema: 'EventsFilterInput',\n outputSchema: 'EventsFilterOutput',\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nexport const TextFormatInput = z.object({\n template: z.string(),\n params: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])),\n});\n\nexport const TextFormatOutput = z.object({\n result: z.string(),\n});\n\nexport type TextFormatInput = z.infer<typeof TextFormatInput>;\nexport type TextFormatOutput = z.infer<typeof TextFormatOutput>;\n\nexport const textFormatHandler: CapabilityHandler<TextFormatInput, TextFormatOutput> = async (\n input,\n) => {\n const { template, params } = input;\n\n const result = template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n const value = params[key];\n if (value === undefined) {\n throw new Error(\n `Missing template parameter: \"${key}\" (referenced in template but not provided)`,\n );\n }\n return String(value);\n });\n\n return { result };\n};\n\nexport const textFormatDefinition = {\n kind: 'transform' as const,\n name: 'text.format',\n description: 'Template interpolation: replaces {{key}} placeholders with typed parameter values',\n inputSchema: 'TextFormatInput',\n outputSchema: 'TextFormatOutput',\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nconst UnitCategory = z.enum(['length', 'weight', 'temperature', 'volume']);\n\nexport const UnitsConvertInput = z.object({\n value: z.number(),\n from: z.string().min(1),\n to: z.string().min(1),\n category: UnitCategory,\n});\n\nexport const UnitsConvertOutput = z.object({\n result: z.number(),\n from: z.string(),\n to: z.string(),\n});\n\nexport type UnitsConvertInput = z.infer<typeof UnitsConvertInput>;\nexport type UnitsConvertOutput = z.infer<typeof UnitsConvertOutput>;\n\n// Conversion factors to base unit per category:\n// length: meters, weight: kilograms, volume: liters\nconst CONVERSION_FACTORS: Record<string, Record<string, number>> = {\n length: {\n m: 1,\n km: 1000,\n cm: 0.01,\n mm: 0.001,\n mi: 1609.344,\n yd: 0.9144,\n ft: 0.3048,\n in: 0.0254,\n nm: 1852,\n },\n weight: {\n kg: 1,\n g: 0.001,\n mg: 0.000001,\n lb: 0.453592,\n oz: 0.0283495,\n ton: 1000,\n },\n volume: {\n l: 1,\n ml: 0.001,\n gal: 3.78541,\n qt: 0.946353,\n pt: 0.473176,\n cup: 0.236588,\n floz: 0.0295735,\n },\n};\n\nfunction convertTemperature(value: number, from: string, to: string): number {\n let celsius: number;\n switch (from) {\n case 'C':\n celsius = value;\n break;\n case 'F':\n celsius = ((value - 32) * 5) / 9;\n break;\n case 'K':\n celsius = value - 273.15;\n break;\n default:\n throw new Error(`Unknown temperature unit: ${from}`);\n }\n switch (to) {\n case 'C':\n return celsius;\n case 'F':\n return (celsius * 9) / 5 + 32;\n case 'K':\n return celsius + 273.15;\n default:\n throw new Error(`Unknown temperature unit: ${to}`);\n }\n}\n\nexport const unitsConvertHandler: CapabilityHandler<UnitsConvertInput, UnitsConvertOutput> = async (\n input,\n) => {\n const { value, from, to, category } = input;\n\n let result: number;\n\n if (category === 'temperature') {\n result = convertTemperature(value, from, to);\n } else {\n const factors = CONVERSION_FACTORS[category];\n if (!factors) throw new Error(`Unknown unit category: ${category}`);\n const fromFactor = factors[from];\n const toFactor = factors[to];\n if (fromFactor === undefined) throw new Error(`Unknown ${category} unit: ${from}`);\n if (toFactor === undefined) throw new Error(`Unknown ${category} unit: ${to}`);\n result = (value * fromFactor) / toFactor;\n }\n\n return { result, from, to };\n};\n\nexport const unitsConvertDefinition = {\n kind: 'transform' as const,\n name: 'units.convert',\n description: 'Convert between measurement units (length, weight, temperature, volume)',\n inputSchema: 'UnitsConvertInput',\n outputSchema: 'UnitsConvertOutput',\n};\n","/**\n * @file validation.check transform\n *\n * Runs a set of typed predicates against input data fields and returns\n * a structured validation result. Powers form validation in backend services.\n *\n * Pure transform -- no I/O, no side effects, deterministic.\n * Composes with the existing 13-operator predicate system.\n *\n * Bead: fpi\n */\nimport type { PredicateCondition } from '@stackwright-services/types';\nimport { FIELD_COMPARISON_OPERATORS } from '@stackwright-services/types';\nimport { z } from 'zod';\n\nimport type { CapabilityHandler } from '../registry';\nimport { evaluatePredicate } from './collection-filter';\n\n// ---------------------------------------------------------------------------\n// Schema\n// ---------------------------------------------------------------------------\n\n/**\n * A single validation rule -- a predicate applied to a field with an\n * optional human-readable error message.\n */\nconst ValidationRule = z.object({\n /** The field path to validate (dot notation supported: \"address.zip\") */\n field: z.string().min(1),\n /** Predicate operator to apply */\n op: z.string(),\n /** Expected value for the predicate (literal value or field name for *_field ops) */\n value: z.unknown(),\n /** Optional human-readable error message (defaults to auto-generated) */\n message: z.string().optional(),\n});\n\nexport const ValidationCheckInput = z.object({\n /** Data object to validate */\n data: z.record(z.unknown()),\n /** Validation rules to apply */\n rules: z.array(ValidationRule).min(1),\n});\n\n/** A single validation error */\nconst ValidationError = z.object({\n /** Field that failed validation */\n field: z.string(),\n /** Operator that was applied */\n rule: z.string(),\n /** Human-readable error message */\n message: z.string(),\n /** The actual value found at the field */\n actual: z.unknown().optional(),\n});\n\nexport const ValidationCheckOutput = z.object({\n /** Whether all rules passed */\n valid: z.boolean(),\n /** Number of rules that passed */\n passed_count: z.number().int().min(0),\n /** Number of rules that failed */\n failed_count: z.number().int().min(0),\n /** Detailed errors for each failed rule */\n errors: z.array(ValidationError),\n});\n\nexport type ValidationCheckInputType = z.infer<typeof ValidationCheckInput>;\nexport type ValidationCheckOutputType = z.infer<typeof ValidationCheckOutput>;\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const validationCheckDefinition = {\n kind: 'transform' as const,\n name: 'validation.check',\n description:\n 'Run typed predicates against data fields and return structured validation results. ' +\n 'Pure transform that composes with all 13 predicate operators. Powers form validation.',\n inputSchema: 'ValidationCheckInput',\n outputSchema: 'ValidationCheckOutput',\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve a dot-notation field path on an object.\n * e.g. getNestedField({ a: { b: 1 } }, \"a.b\") -> 1\n */\nfunction getNestedField(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n\n/**\n * Generate a default error message for a failed rule.\n */\nfunction defaultMessage(field: string, op: string, value: unknown): string {\n const valueStr =\n typeof value === 'string'\n ? `\"${value}\"`\n : Array.isArray(value)\n ? `[${value.map((v) => JSON.stringify(v)).join(', ')}]`\n : JSON.stringify(value);\n\n return `Field \"${field}\" failed ${op} check (expected: ${valueStr})`;\n}\n\n/**\n * Convert a validation rule into a PredicateCondition.\n *\n * For field-comparison operators (less_than_field, greater_than_field, equals_field),\n * the rule's `value` is mapped to `value_field` in the condition.\n */\nfunction toPredicateCondition(rule: {\n field: string;\n op: string;\n value?: unknown;\n}): PredicateCondition {\n const isFieldOp = (FIELD_COMPARISON_OPERATORS as readonly string[]).includes(rule.op);\n\n if (isFieldOp) {\n return {\n field: rule.field,\n op: rule.op,\n value_field: String(rule.value),\n } as PredicateCondition;\n }\n\n return {\n field: rule.field,\n op: rule.op,\n value: rule.value,\n } as PredicateCondition;\n}\n\n// ---------------------------------------------------------------------------\n// Handler\n// ---------------------------------------------------------------------------\n\nexport const validationCheckHandler: CapabilityHandler<\n ValidationCheckInputType,\n ValidationCheckOutputType\n> = async (input) => {\n const { data, rules } = ValidationCheckInput.parse(input);\n\n const errors: Array<{\n field: string;\n rule: string;\n message: string;\n actual: unknown;\n }> = [];\n\n for (const rule of rules) {\n const fieldValue = getNestedField(data, rule.field);\n const condition = toPredicateCondition(rule);\n const passed = evaluatePredicate(data, condition);\n\n if (!passed) {\n errors.push({\n field: rule.field,\n rule: rule.op,\n message: rule.message ?? defaultMessage(rule.field, rule.op, rule.value),\n actual: fieldValue,\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n passed_count: rules.length - errors.length,\n failed_count: errors.length,\n errors,\n };\n};\n","import type { CapabilityRegistry } from '../registry';\nimport {\n collectionAggregateDefinition,\n collectionAggregateHandler,\n CollectionAggregateInput,\n CollectionAggregateOutput,\n} from './collection-aggregate';\nimport {\n collectionFilterDefinition,\n collectionFilterHandler,\n CollectionFilterInput,\n CollectionFilterOutput,\n} from './collection-filter';\nimport {\n collectionJoinDefinition,\n collectionJoinHandler,\n CollectionJoinInput,\n CollectionJoinOutput,\n} from './collection-join';\nimport {\n collectionPaginateDefinition,\n collectionPaginateHandler,\n CollectionPaginateInput,\n CollectionPaginateOutput,\n} from './collection-paginate';\nimport {\n mathComputeDefinition,\n mathComputeHandler,\n MathComputeInput,\n MathComputeOutput,\n} from './math-compute';\nimport {\n collectionSortDefinition,\n collectionSortHandler,\n CollectionSortInput,\n CollectionSortOutput,\n} from './collection-sort';\nimport {\n dateShiftDefinition,\n dateShiftHandler,\n DateShiftInput,\n DateShiftOutput,\n} from './date-shift';\nimport {\n eventsFilterDefinition,\n eventsFilterHandler,\n EventsFilterInput,\n EventsFilterOutput,\n} from './events-filter';\nimport {\n textFormatDefinition,\n textFormatHandler,\n TextFormatInput,\n TextFormatOutput,\n} from './text-format';\nimport {\n unitsConvertDefinition,\n unitsConvertHandler,\n UnitsConvertInput,\n UnitsConvertOutput,\n} from './units-convert';\nimport {\n validationCheckDefinition,\n validationCheckHandler,\n ValidationCheckInput,\n ValidationCheckOutput,\n} from './validation-check';\n\n/**\n * Register all built-in transform capabilities with the given registry.\n */\nexport function registerTransforms(registry: CapabilityRegistry): void {\n registry.register(\n unitsConvertDefinition,\n unitsConvertHandler,\n UnitsConvertInput,\n UnitsConvertOutput,\n );\n registry.register(textFormatDefinition, textFormatHandler, TextFormatInput, TextFormatOutput);\n registry.register(\n collectionFilterDefinition,\n collectionFilterHandler,\n CollectionFilterInput,\n CollectionFilterOutput,\n );\n registry.register(\n collectionAggregateDefinition,\n collectionAggregateHandler,\n CollectionAggregateInput,\n CollectionAggregateOutput,\n );\n registry.register(\n collectionJoinDefinition,\n collectionJoinHandler,\n CollectionJoinInput,\n CollectionJoinOutput,\n );\n registry.register(\n collectionPaginateDefinition,\n collectionPaginateHandler,\n CollectionPaginateInput,\n CollectionPaginateOutput,\n );\n registry.register(mathComputeDefinition, mathComputeHandler, MathComputeInput, MathComputeOutput);\n registry.register(\n collectionSortDefinition,\n collectionSortHandler,\n CollectionSortInput,\n CollectionSortOutput,\n );\n registry.register(dateShiftDefinition, dateShiftHandler, DateShiftInput, DateShiftOutput);\n registry.register(\n eventsFilterDefinition,\n eventsFilterHandler,\n EventsFilterInput,\n EventsFilterOutput,\n );\n registry.register(\n validationCheckDefinition,\n validationCheckHandler,\n ValidationCheckInput,\n ValidationCheckOutput,\n );\n}\n\nexport {\n unitsConvertHandler,\n UnitsConvertInput,\n UnitsConvertOutput,\n unitsConvertDefinition,\n} from './units-convert';\nexport {\n textFormatHandler,\n TextFormatInput,\n TextFormatOutput,\n textFormatDefinition,\n} from './text-format';\nexport {\n collectionFilterHandler,\n CollectionFilterInput,\n CollectionFilterOutput,\n collectionFilterDefinition,\n evaluatePredicate,\n} from './collection-filter';\nexport {\n collectionAggregateHandler,\n CollectionAggregateInput,\n CollectionAggregateOutput,\n collectionAggregateDefinition,\n} from './collection-aggregate';\nexport {\n collectionJoinHandler,\n CollectionJoinInput,\n CollectionJoinOutput,\n collectionJoinDefinition,\n} from './collection-join';\nexport {\n collectionPaginateHandler,\n CollectionPaginateInput,\n CollectionPaginateOutput,\n collectionPaginateDefinition,\n} from './collection-paginate';\nexport {\n mathComputeHandler,\n MathComputeInput,\n MathComputeOutput,\n mathComputeDefinition,\n} from './math-compute';\nexport {\n collectionSortHandler,\n CollectionSortInput,\n CollectionSortOutput,\n collectionSortDefinition,\n} from './collection-sort';\nexport {\n dateShiftHandler,\n DateShiftInput,\n DateShiftOutput,\n dateShiftDefinition,\n} from './date-shift';\nexport {\n eventsFilterHandler,\n EventsFilterInput,\n EventsFilterOutput,\n eventsFilterDefinition,\n} from './events-filter';\nexport {\n validationCheckHandler,\n ValidationCheckInput,\n ValidationCheckOutput,\n validationCheckDefinition,\n} from './validation-check';\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nexport const ServiceCallInput = z.object({\n /** The URL to call (raw HTTP fallback — always required so the effect works without a provider) */\n url: z.string().url(),\n /** HTTP method */\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),\n /**\n * Data source ID for provider delegation (e.g. \"equipment-api\").\n * When provided alongside `operation`, and a DataSourceProvider in context can resolve\n * this source, the call is delegated to the provider instead of raw HTTP.\n * Falls back to `url`+`method` when no provider is installed or source is not known.\n */\n source: z.string().optional(),\n /**\n * Operation name for provider delegation (e.g. \"listUnits\").\n * Must be provided together with `source` to trigger provider delegation.\n */\n operation: z.string().optional(),\n /** Request headers */\n headers: z.record(z.string(), z.string()).optional(),\n /** Request body (for POST/PUT/PATCH, or provider operation params when delegating) */\n body: z.unknown().optional(),\n /** Expected response type (defaults to 'json') */\n responseType: z.enum(['json', 'text']).optional(),\n /** Timeout in milliseconds (defaults to 30000) */\n timeout: z.number().positive().optional(),\n});\n\nexport const ServiceCallOutput = z.object({\n /** HTTP status code */\n status: z.number(),\n /** Response headers */\n headers: z.record(z.string(), z.string()),\n /** Response body */\n body: z.unknown(),\n /** Whether the call was successful (2xx status) */\n ok: z.boolean(),\n});\n\nexport type ServiceCallInput = z.infer<typeof ServiceCallInput>;\nexport type ServiceCallOutput = z.infer<typeof ServiceCallOutput>;\n\n/**\n * Service call effect -- invokes an HTTP endpoint.\n *\n * This is the raw-HTTP escape hatch and also the provider-delegation bridge:\n * - When `source` + `operation` are given and a DataSourceProvider in context\n * knows about the source, execution is delegated to the provider (typed, validated).\n * - Otherwise (no provider, or source not resolvable) it falls back to raw Fetch.\n *\n * This is an Effect capability: it touches the outside world.\n * Required permissions are declared in the definition and used\n * for least-privilege derivation at compile time.\n *\n * Uses the standard Fetch API -- works in Node.js 22+, Lambda, and edge.\n */\nexport const serviceCallHandler: CapabilityHandler<ServiceCallInput, ServiceCallOutput> = async (\n input,\n context,\n) => {\n const { url, method, headers, body, source, operation } = input;\n const responseType = input.responseType ?? 'json';\n const timeout = input.timeout ?? 30000;\n\n // --- Provider delegation path ---\n // When source + operation are provided, attempt typed provider delegation.\n // Falls through to raw HTTP if no provider is installed or source is not known.\n if (source !== undefined && operation !== undefined) {\n const provider = context.dataSourceProvider;\n if (provider !== undefined) {\n const knownSources = provider.listSources();\n const canResolve = knownSources.some((s) => s.id === source);\n if (canResolve) {\n context.logger.info(\n `service.call: delegating ${source}/${operation} to DataSourceProvider`,\n { source, operation },\n );\n const result = await provider.execute(source, operation, body);\n return {\n status: 200,\n headers: {},\n body: result.data,\n ok: true,\n };\n }\n // Provider installed but source not known — fall through to raw HTTP\n context.logger.info(\n `service.call: source \"${source}\" not known to provider, falling back to HTTP`,\n { source, operation, url },\n );\n } else {\n // No provider in context — fall through to raw HTTP\n context.logger.info(`service.call: no DataSourceProvider in context, falling back to HTTP`, {\n source,\n operation,\n url,\n });\n }\n }\n\n // --- Raw HTTP fallback path (original behavior) ---\n context.logger.info(`service.call: ${method} ${url}`, { method, url });\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const requestHeaders = new Headers(headers);\n\n // Build fetch options, conditionally including body\n const fetchOptions: RequestInit = {\n method,\n headers: requestHeaders,\n signal: controller.signal,\n };\n\n if (body !== undefined && ['POST', 'PUT', 'PATCH'].includes(method)) {\n fetchOptions.body = JSON.stringify(body);\n if (!requestHeaders.has('Content-Type')) {\n requestHeaders.set('Content-Type', 'application/json');\n }\n }\n\n const response = await fetch(url, fetchOptions);\n\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n let responseBody: unknown;\n if (responseType === 'json') {\n try {\n responseBody = await response.json();\n } catch {\n responseBody = await response.text();\n }\n } else {\n responseBody = await response.text();\n }\n\n context.logger.info(`service.call: ${method} ${url} -> ${response.status}`, {\n status: response.status,\n ok: response.ok,\n });\n\n return {\n status: response.status,\n headers: responseHeaders,\n body: responseBody,\n ok: response.ok,\n };\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n context.logger.error(`service.call: ${method} ${url} timed out after ${timeout}ms`);\n return {\n status: 408,\n headers: {},\n body: { error: `Request timed out after ${timeout}ms` },\n ok: false,\n };\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n};\n\n/**\n * service.call capability definition.\n *\n * This is an Effect -- it declares requiredPermissions.\n * At compile time, the permission derivation system reads these to generate\n * least-privilege IAM policies / RBAC manifests.\n *\n * Provider delegation: when `source` + `operation` are supplied and a\n * DataSourceProvider is installed, the call is routed through the provider\n * (typed, permission-scoped). Falls back to raw HTTP otherwise.\n */\nexport const serviceCallDefinition = {\n kind: 'effect' as const,\n name: 'service.call',\n description:\n 'Invoke an HTTP endpoint, or delegate to a DataSourceProvider when one is installed. ' +\n 'Raw HTTP is the fallback escape hatch when no typed provider can resolve the target.',\n inputSchema: 'ServiceCallInput',\n outputSchema: 'ServiceCallOutput',\n requiredPermissions: [\n {\n resource: 'endpoint:*',\n action: 'invoke',\n },\n ],\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\nexport const EventsPublishInput = z.object({\n /** Topic to publish to (e.g. \"bus:equipment-status\" or \"equipment-status\") */\n topic: z.string().min(1),\n /** Message payload to publish */\n payload: z.unknown(),\n /** Optional metadata to include with the message */\n metadata: z\n .object({\n /** Logical source identifier */\n source: z.string().optional(),\n /** Correlation ID for request-scoped grouping */\n correlationId: z.string().optional(),\n })\n .optional(),\n});\n\nexport const EventsPublishOutput = z.object({\n /** Provider-assigned message ID */\n messageId: z.string(),\n /** Topic the message was published to (without bus: prefix) */\n topic: z.string(),\n /** Whether publishing succeeded */\n success: z.boolean(),\n});\n\nexport type EventsPublishInput = z.infer<typeof EventsPublishInput>;\nexport type EventsPublishOutput = z.infer<typeof EventsPublishOutput>;\n\n/**\n * Strip the \"bus:\" prefix from a topic if present.\n * YAML writes \"bus:equipment-status\"; the provider receives \"equipment-status\".\n */\nexport function stripBusPrefix(topic: string): string {\n return topic.startsWith('bus:') ? topic.slice(4) : topic;\n}\n\n/**\n * events.publish effect — publishes a message to a message bus topic.\n *\n * This is an Effect capability: it touches the outside world.\n * The MessageBusProvider is injected via CapabilityContext.messageBus.\n *\n * Declares required permissions for least-privilege derivation:\n * { resource: 'bus:<topic>', action: 'publish' }\n */\nexport const eventsPublishHandler: CapabilityHandler<\n EventsPublishInput,\n EventsPublishOutput\n> = async (input, context) => {\n const { payload, metadata } = input;\n const topic = stripBusPrefix(input.topic);\n\n if (!context.messageBus) {\n throw new Error(\n 'events.publish: No MessageBusProvider available in context. ' +\n 'Ensure the runtime injects a MessageBusProvider into CapabilityContext.messageBus. ' +\n 'Set MESSAGE_BUS_PROVIDER environment variable or pass a provider at startup.',\n );\n }\n\n context.logger.info(`events.publish: publishing to \"${topic}\"`, { topic });\n\n const result = await context.messageBus.publish(topic, {\n payload,\n traceContext: { traceId: context.traceId },\n metadata: {\n timestamp: new Date().toISOString(),\n ...(metadata?.source !== undefined ? { source: metadata.source } : {}),\n ...(metadata?.correlationId !== undefined ? { correlationId: metadata.correlationId } : {}),\n },\n });\n\n context.logger.info(`events.publish: published to \"${topic}\" -> ${result.messageId}`, {\n topic,\n messageId: result.messageId,\n success: result.success,\n });\n\n return {\n messageId: result.messageId,\n topic: result.topic,\n success: result.success,\n };\n};\n\n/**\n * events.publish capability definition.\n *\n * This is an Effect — it declares requiredPermissions.\n * At compile time, the permission derivation system reads these to generate\n * least-privilege IAM policies / RBAC manifests.\n *\n * Permission: { resource: 'bus:*', action: 'publish' }\n * The compiler can narrow the wildcard to specific topics by inspecting the\n * flow's step parameters (e.g. bus:equipment-status).\n */\nexport const eventsPublishDefinition = {\n kind: 'effect' as const,\n name: 'events.publish',\n description:\n 'Publish a message to a message bus topic. Declares bus publish permissions for least-privilege derivation.',\n inputSchema: 'EventsPublishInput',\n outputSchema: 'EventsPublishOutput',\n requiredPermissions: [\n {\n resource: 'bus:*',\n action: 'publish',\n },\n ],\n};\n","import { z } from 'zod';\nimport type { CapabilityHandler } from '../registry';\n\n/**\n * Supported notification channels.\n * The set is closed — adding a new channel is a deliberate, audited act.\n */\nexport const NotificationChannel = z.enum(['email', 'sms', 'push', 'in-app']);\nexport type NotificationChannel = z.infer<typeof NotificationChannel>;\n\nexport const NotifyUserInput = z.object({\n /** Recipient user identifier — the provider resolves this to a delivery address */\n recipient: z.string().min(1),\n /** Delivery channel */\n channel: NotificationChannel,\n /** Template name for the notification content */\n template: z.string().min(1),\n /** Typed payload for template interpolation */\n payload: z.unknown(),\n /** Optional subject line (for email, push) */\n subject: z.string().optional(),\n /** Optional metadata to include with the notification */\n metadata: z\n .object({\n /** Logical source identifier */\n source: z.string().optional(),\n /** Correlation ID for request-scoped grouping */\n correlationId: z.string().optional(),\n })\n .optional(),\n});\n\nexport const NotifyUserOutput = z.object({\n /** Provider-assigned notification ID */\n notificationId: z.string(),\n /** Channel the notification was sent through */\n channel: z.string(),\n /** Whether sending succeeded */\n success: z.boolean(),\n});\n\nexport type NotifyUserInput = z.infer<typeof NotifyUserInput>;\nexport type NotifyUserOutput = z.infer<typeof NotifyUserOutput>;\n\n/**\n * notify.user effect — sends a notification to a user via a configured channel.\n *\n * This is an Effect capability: it touches the outside world.\n * The NotificationProvider is injected via CapabilityContext.notificationProvider.\n *\n * Multi-channel (email, SMS, push, in-app) via a NotificationProvider adapter.\n * Template-based with typed payload — the provider resolves the template name\n * to actual content and interpolates the payload.\n *\n * Declares required permissions for least-privilege derivation:\n * { resource: 'notification:<channel>', action: 'send' }\n */\nexport const notifyUserHandler: CapabilityHandler<NotifyUserInput, NotifyUserOutput> = async (\n input,\n context,\n) => {\n const { recipient, channel, template, payload, subject, metadata } = input;\n\n if (!context.notificationProvider) {\n throw new Error(\n 'notify.user: No NotificationProvider available in context. ' +\n 'Ensure the runtime injects a NotificationProvider into CapabilityContext.notificationProvider. ' +\n 'Set NOTIFICATION_PROVIDER environment variable or pass a provider at startup.',\n );\n }\n\n context.logger.info(`notify.user: sending \"${template}\" via ${channel} to \"${recipient}\"`, {\n recipient,\n channel,\n template,\n });\n\n const result = await context.notificationProvider.send({\n recipient,\n channel,\n template,\n payload,\n ...(subject !== undefined ? { subject } : {}),\n traceContext: { traceId: context.traceId },\n metadata: {\n timestamp: new Date().toISOString(),\n ...(metadata?.source !== undefined ? { source: metadata.source } : {}),\n ...(metadata?.correlationId !== undefined ? { correlationId: metadata.correlationId } : {}),\n },\n });\n\n context.logger.info(\n `notify.user: sent \"${template}\" via ${channel} to \"${recipient}\" -> ${result.notificationId}`,\n {\n notificationId: result.notificationId,\n channel: result.channel,\n success: result.success,\n },\n );\n\n return {\n notificationId: result.notificationId,\n channel: result.channel,\n success: result.success,\n };\n};\n\n/**\n * notify.user capability definition.\n *\n * This is an Effect — it declares requiredPermissions.\n * At compile time, the permission derivation system reads these to generate\n * least-privilege IAM policies / RBAC manifests.\n *\n * Permission: { resource: 'notification:*', action: 'send' }\n * The compiler can narrow the wildcard to specific channels by inspecting the\n * flow's step parameters (e.g. notification:email).\n */\nexport const notifyUserDefinition = {\n kind: 'effect' as const,\n name: 'notify.user',\n description:\n 'Send a notification to a user via email, SMS, push, or in-app channel. ' +\n 'Template-based with typed payload. Declares notification permissions for least-privilege derivation.',\n inputSchema: 'NotifyUserInput',\n outputSchema: 'NotifyUserOutput',\n requiredPermissions: [\n {\n resource: 'notification:*',\n action: 'send',\n },\n ],\n};\n","/**\n * @file http.webhook effect\n *\n * Outbound webhook invocation with retry, timeout, and HMAC signature.\n * More constrained than service.call -- URL and payload shape are declared\n * at compile time, enabling static permission derivation.\n *\n * Permission: { resource: 'webhook:<url>', action: 'invoke' }\n *\n * @security-critical -- expands the effect surface\n * Bead: 0ay\n */\nimport { z } from 'zod';\n\nimport type { CapabilityHandler } from '../registry';\n\n// ---------------------------------------------------------------------------\n// Schema\n// ---------------------------------------------------------------------------\n\nexport const HttpWebhookInput = z.object({\n /** Target URL -- must be declared statically in flow YAML */\n url: z.string().url(),\n /** HTTP method -- only POST or PUT for webhooks (defaults to POST) */\n method: z.enum(['POST', 'PUT']).optional(),\n /** Payload to send -- shape is flow-defined */\n payload: z.unknown(),\n /** Additional headers to include */\n headers: z.record(z.string()).optional(),\n /** Request timeout in milliseconds (100ms - 30s, defaults to 5000) */\n timeout_ms: z.number().int().min(100).max(30_000).optional(),\n /** Number of retry attempts on failure (0-3, defaults to 1) */\n retry_count: z.number().int().min(0).max(3).optional(),\n /** Optional HMAC-SHA256 secret for request signing */\n signature_secret: z.string().optional(),\n});\n\nexport const HttpWebhookOutput = z.object({\n /** Whether the webhook was delivered successfully */\n success: z.boolean(),\n /** HTTP status code from the target */\n status_code: z.number().int(),\n /** Response body (truncated to 4KB for safety) */\n response_body: z.string().optional(),\n /** Number of attempts made (1 = first try succeeded) */\n attempts: z.number().int().min(1),\n /** Total elapsed time in milliseconds */\n elapsed_ms: z.number(),\n});\n\nexport type HttpWebhookInputType = z.infer<typeof HttpWebhookInput>;\nexport type HttpWebhookOutputType = z.infer<typeof HttpWebhookOutput>;\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const httpWebhookDefinition = {\n kind: 'effect' as const,\n name: 'http.webhook',\n description:\n 'Invoke an outbound webhook with retry, timeout, and optional HMAC signature verification. ' +\n 'More constrained than service.call -- URL is static and declared at compile time.',\n inputSchema: 'HttpWebhookInput',\n outputSchema: 'HttpWebhookOutput',\n requiredPermissions: [{ resource: 'webhook:$url', action: 'invoke' }],\n};\n\n// ---------------------------------------------------------------------------\n// HMAC Signature Generation\n// ---------------------------------------------------------------------------\n\n/**\n * Compute HMAC-SHA256 signature for webhook payload.\n * Uses Web Crypto API (available in Node 22+).\n */\nasync function computeHmacSignature(payload: string, secret: string): Promise<string> {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(payload));\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n// ---------------------------------------------------------------------------\n// Handler\n// ---------------------------------------------------------------------------\n\nexport const httpWebhookHandler: CapabilityHandler<\n HttpWebhookInputType,\n HttpWebhookOutputType\n> = async (input, context) => {\n const parsed = HttpWebhookInput.parse(input);\n const url = parsed.url;\n const method = parsed.method ?? 'POST';\n const payload = parsed.payload;\n const headers = parsed.headers;\n const timeout_ms = parsed.timeout_ms ?? 5_000;\n const retry_count = parsed.retry_count ?? 1;\n const signature_secret = parsed.signature_secret;\n\n const body = typeof payload === 'string' ? payload : JSON.stringify(payload);\n const requestHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'stackwright-services/webhook',\n ...headers,\n };\n\n // Add HMAC signature if secret is provided\n if (signature_secret) {\n const signature = await computeHmacSignature(body, signature_secret);\n requestHeaders['X-Webhook-Signature'] = `sha256=${signature}`;\n }\n\n // Add trace context header\n if (context.traceId) {\n requestHeaders['X-Trace-Id'] = context.traceId;\n }\n\n context.logger.info(`http.webhook: ${method} ${url}`, { method, url });\n\n let lastError: Error | undefined;\n let lastStatusCode = 0;\n let attempts = 0;\n const startTime = Date.now();\n\n // Retry loop\n for (let attempt = 0; attempt <= retry_count; attempt++) {\n attempts = attempt + 1;\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout_ms);\n\n const response = await fetch(url, {\n method,\n headers: requestHeaders,\n body,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const elapsed_ms = Date.now() - startTime;\n\n // Read response body (truncated to 4KB)\n const responseText = await response.text();\n const response_body =\n responseText.length > 4096 ? responseText.slice(0, 4096) + '...[truncated]' : responseText;\n\n if (response.ok) {\n context.logger.info(`http.webhook: delivered successfully`, {\n status: response.status,\n attempts,\n elapsed_ms,\n });\n return {\n success: true,\n status_code: response.status,\n response_body,\n attempts,\n elapsed_ms,\n };\n }\n\n // Non-retryable status codes (4xx except 429)\n if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n context.logger.warn(`http.webhook: non-retryable failure`, {\n status: response.status,\n attempts,\n });\n return {\n success: false,\n status_code: response.status,\n response_body,\n attempts,\n elapsed_ms,\n };\n }\n\n // Retryable failure (5xx or 429)\n lastStatusCode = response.status;\n lastError = new Error(`HTTP ${response.status}: ${response_body}`);\n context.logger.warn(`http.webhook: retryable failure (attempt ${attempts})`, {\n status: response.status,\n });\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // AbortError means timeout -- retryable\n if (lastError.name !== 'AbortError' && lastError.name !== 'TypeError') {\n // Non-network errors are not retryable\n break;\n }\n\n context.logger.warn(`http.webhook: network error (attempt ${attempts})`, {\n error: lastError.message,\n });\n }\n\n // Exponential backoff between retries (100ms, 200ms, 400ms)\n if (attempt < retry_count) {\n await new Promise((resolve) => setTimeout(resolve, 100 * Math.pow(2, attempt)));\n }\n }\n\n // All retries exhausted\n const elapsed_ms = Date.now() - startTime;\n context.logger.error(`http.webhook: all retries exhausted`, {\n attempts,\n elapsed_ms,\n lastError: lastError?.message,\n });\n return {\n success: false,\n status_code: lastStatusCode,\n response_body: lastError?.message ?? 'Unknown error',\n attempts,\n elapsed_ms,\n };\n};\n","import type { CapabilityRegistry } from '../registry';\nimport {\n serviceCallDefinition,\n serviceCallHandler,\n ServiceCallInput,\n ServiceCallOutput,\n} from './service-call';\nimport {\n eventsPublishDefinition,\n eventsPublishHandler,\n EventsPublishInput,\n EventsPublishOutput,\n} from './events-publish';\nimport {\n notifyUserDefinition,\n notifyUserHandler,\n NotifyUserInput,\n NotifyUserOutput,\n} from './notify-user';\nimport {\n httpWebhookDefinition,\n httpWebhookHandler,\n HttpWebhookInput,\n HttpWebhookOutput,\n} from './http-webhook';\n\n/**\n * Register all effect capabilities.\n * Effects touch the outside world and declare required permissions.\n */\nexport function registerEffects(registry: CapabilityRegistry): void {\n registry.register(serviceCallDefinition, serviceCallHandler, ServiceCallInput, ServiceCallOutput);\n registry.register(\n eventsPublishDefinition,\n eventsPublishHandler,\n EventsPublishInput,\n EventsPublishOutput,\n );\n registry.register(notifyUserDefinition, notifyUserHandler, NotifyUserInput, NotifyUserOutput);\n registry.register(httpWebhookDefinition, httpWebhookHandler, HttpWebhookInput, HttpWebhookOutput);\n}\n\nexport {\n serviceCallHandler,\n serviceCallDefinition,\n ServiceCallInput,\n ServiceCallOutput,\n} from './service-call';\n\nexport {\n eventsPublishHandler,\n eventsPublishDefinition,\n EventsPublishInput,\n EventsPublishOutput,\n stripBusPrefix,\n} from './events-publish';\n\nexport {\n notifyUserHandler,\n notifyUserDefinition,\n NotifyUserInput,\n NotifyUserOutput,\n NotificationChannel,\n} from './notify-user';\n\nexport {\n httpWebhookHandler,\n httpWebhookDefinition,\n HttpWebhookInput,\n HttpWebhookOutput,\n} from './http-webhook';\n"],"mappings":"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","names":["import_zod","resolveFieldPath","import_zod","resolveFieldPath","import_zod","import_zod","resolveFieldPath","import_zod","resolveFieldPath","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","elapsed_ms"]}
|