All files / web/src/constants/node types.ts

100% Statements 61/61
100% Branches 0/0
100% Functions 0/0
100% Lines 61/61

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102            1x   1x 1x 1x     1x 1x 1x 1x 1x 1x         1x 1x 1x 1x 1x 1x           1x 1x 1x 1x 1x         1x 1x 1x 1x 1x 1x 1x 1x 1x 1x         1x 1x 1x 1x 1x 1x 1x 1x 1x 1x         1x 1x 1x 1x 1x 1x 1x 1x 1x 1x         1x 1x 1x 1x 1x 1x 1x 1x 1x 1x              
import type { NodeType } from '@/types/generated/NodeType'
 
/**
 * Node type constants
 * Consistent with backend NodeType
 */
export const NODE_TYPE = {
  // Trigger nodes
  WEBHOOK_TRIGGER: 'WebhookTrigger',
  SCHEDULE_TRIGGER: 'ScheduleTrigger',
  MANUAL_TRIGGER: 'ManualTrigger',
 
  // Action nodes
  AGENT: 'Agent',
  HTTP_REQUEST: 'HttpRequest',
  PYTHON: 'Python',
  PRINT: 'Print',
  DATA_TRANSFORM: 'DataTransform',
} as const satisfies Record<string, NodeType>
 
/**
 * Node categories
 */
export const NODE_CATEGORY = {
  TRIGGER: 'trigger',
  ACTION: 'action',
  CONTROL: 'control',
  DATA: 'data',
} as const
 
/**
 * Trigger node type set
 * Used to quickly determine if a node is a trigger
 */
export const TRIGGER_NODE_TYPES = new Set<NodeType>([
  NODE_TYPE.WEBHOOK_TRIGGER,
  NODE_TYPE.SCHEDULE_TRIGGER,
  NODE_TYPE.MANUAL_TRIGGER,
])
 
/**
 * Node type to category mapping
 */
export const NODE_TYPE_CATEGORY_MAP = {
  [NODE_TYPE.WEBHOOK_TRIGGER]: NODE_CATEGORY.TRIGGER,
  [NODE_TYPE.SCHEDULE_TRIGGER]: NODE_CATEGORY.TRIGGER,
  [NODE_TYPE.MANUAL_TRIGGER]: NODE_CATEGORY.TRIGGER,
  [NODE_TYPE.AGENT]: NODE_CATEGORY.ACTION,
  [NODE_TYPE.HTTP_REQUEST]: NODE_CATEGORY.ACTION,
  [NODE_TYPE.PYTHON]: NODE_CATEGORY.ACTION,
  [NODE_TYPE.PRINT]: NODE_CATEGORY.DATA,
  [NODE_TYPE.DATA_TRANSFORM]: NODE_CATEGORY.DATA,
} as const
 
/**
 * Node type to display label mapping
 */
export const NODE_TYPE_LABELS = {
  [NODE_TYPE.WEBHOOK_TRIGGER]: 'Webhook Trigger',
  [NODE_TYPE.SCHEDULE_TRIGGER]: 'Schedule Trigger',
  [NODE_TYPE.MANUAL_TRIGGER]: 'Manual Trigger',
  [NODE_TYPE.AGENT]: 'AI Agent',
  [NODE_TYPE.HTTP_REQUEST]: 'HTTP Request',
  [NODE_TYPE.PYTHON]: 'Python Script',
  [NODE_TYPE.PRINT]: 'Print',
  [NODE_TYPE.DATA_TRANSFORM]: 'Data Transform',
} as const
 
/**
 * Node type to icon mapping
 */
export const NODE_TYPE_ICONS = {
  [NODE_TYPE.WEBHOOK_TRIGGER]: 'webhook',
  [NODE_TYPE.SCHEDULE_TRIGGER]: 'schedule',
  [NODE_TYPE.MANUAL_TRIGGER]: 'play',
  [NODE_TYPE.AGENT]: 'robot',
  [NODE_TYPE.HTTP_REQUEST]: 'http',
  [NODE_TYPE.PYTHON]: 'code',
  [NODE_TYPE.PRINT]: 'print',
  [NODE_TYPE.DATA_TRANSFORM]: 'transform',
} as const
 
/**
 * Node type to color mapping
 */
export const NODE_TYPE_COLORS = {
  [NODE_TYPE.WEBHOOK_TRIGGER]: '#8b5cf6',
  [NODE_TYPE.SCHEDULE_TRIGGER]: '#8b5cf6',
  [NODE_TYPE.MANUAL_TRIGGER]: '#8b5cf6',
  [NODE_TYPE.AGENT]: '#667eea',
  [NODE_TYPE.HTTP_REQUEST]: '#3b82f6',
  [NODE_TYPE.PYTHON]: '#10b981',
  [NODE_TYPE.PRINT]: '#10b981',
  [NODE_TYPE.DATA_TRANSFORM]: '#f59e0b',
} as const
 
// Type exports
export type NodeTypeKey = keyof typeof NODE_TYPE
export type NodeCategoryKey = keyof typeof NODE_CATEGORY
export type NodeTypeValue = typeof NODE_TYPE[NodeTypeKey]
export type NodeCategoryValue = typeof NODE_CATEGORY[NodeCategoryKey]