[{"data":1,"prerenderedAt":3827},["ShallowReactive",2],{"navigation_docs":3,"-docs-reference-go-events":968,"-docs-reference-go-events-surround":3822},[4,27,63,129,287,311,893,902,950,964],{"title":5,"path":6,"stem":7,"children":8,"order":10,"icon":11},"Overview","\u002Fdocs\u002Foverview","docs\u002F1.overview\u002Findex",[9,12,18,24],{"title":5,"path":6,"stem":7,"order":10,"icon":11},1,"i-lucide-info",{"title":13,"path":14,"stem":15,"order":16,"icon":17},"Getting Started","\u002Fdocs\u002Foverview\u002Fgetting-started","docs\u002F1.overview\u002F2.getting-started",2,"i-lucide-rocket",{"title":19,"path":20,"stem":21,"order":22,"icon":23},"Contributing","\u002Fdocs\u002Foverview\u002Fcontributing","docs\u002F1.overview\u002F3.contributing",3,"i-lucide-heart",{"title":5,"path":25,"stem":26,"order":10},"\u002Fdocs\u002Foverview\u002F_dir","docs\u002F1.overview\u002F_dir",{"title":28,"path":29,"stem":30,"children":31,"page":62},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[32,37,42,47,53,59],{"title":33,"path":34,"stem":35,"order":10,"icon":36},"Events","\u002Fdocs\u002Fconcepts\u002Fevents","docs\u002F2.concepts\u002F1.events","i-lucide-zap",{"title":38,"path":39,"stem":40,"order":16,"icon":41},"Transports","\u002Fdocs\u002Fconcepts\u002Ftransports","docs\u002F2.concepts\u002F2.transports","i-lucide-network",{"title":43,"path":44,"stem":45,"order":22,"icon":46},"Module System","\u002Fdocs\u002Fconcepts\u002Fmodules","docs\u002F2.concepts\u002F3.modules","i-lucide-puzzle",{"title":48,"path":49,"stem":50,"order":51,"icon":52},"Flows","\u002Fdocs\u002Fconcepts\u002Fflows","docs\u002F2.concepts\u002F4.flows",4,"i-lucide-workflow",{"title":54,"path":55,"stem":56,"order":57,"icon":58},"Scheduler","\u002Fdocs\u002Fconcepts\u002Fscheduler","docs\u002F2.concepts\u002F5.scheduler",5,"i-lucide-clock",{"title":28,"path":60,"stem":61,"order":16},"\u002Fdocs\u002Fconcepts\u002F_dir","docs\u002F2.concepts\u002F_dir",false,{"title":64,"path":65,"stem":66,"children":67,"page":62},"Guides","\u002Fdocs\u002Fguides","docs\u002F3.guides",[68,73,77,81,85,89,93,98,104,110,116,122,126],{"title":69,"path":70,"stem":71,"order":10,"icon":72},"Creating a Go App","\u002Fdocs\u002Fguides\u002Fcreating-go-app","docs\u002F3.guides\u002F1.creating-go-app","i-lucide-terminal",{"title":74,"path":75,"stem":76},"E2E tests & demo videos","\u002Fdocs\u002Fguides\u002Fe2e-and-demo-videos","docs\u002F3.guides\u002F10.e2e-and-demo-videos",{"title":78,"path":79,"stem":80,"icon":17},"Deploying to production","\u002Fdocs\u002Fguides\u002Fdeploying-to-production","docs\u002F3.guides\u002F11.deploying-to-production",{"title":82,"path":83,"stem":84,"order":16,"icon":46},"Creating a Go Module","\u002Fdocs\u002Fguides\u002Fcreating-go-module","docs\u002F3.guides\u002F2.creating-go-module",{"title":86,"path":87,"stem":88,"order":22,"icon":36},"Adding Events","\u002Fdocs\u002Fguides\u002Fadding-events-to-go-module","docs\u002F3.guides\u002F3.adding-events-to-go-module",{"title":90,"path":91,"stem":92,"order":51,"icon":52},"FlowDSL to Service","\u002Fdocs\u002Fguides\u002Fflowdsl-to-redelay","docs\u002F3.guides\u002F4.flowdsl-to-redelay",{"title":94,"path":95,"stem":96,"order":57,"icon":97},"Choosing a Transport","\u002Fdocs\u002Fguides\u002Fchoosing-a-transport","docs\u002F3.guides\u002F5.choosing-a-transport","i-lucide-git-branch",{"title":99,"path":100,"stem":101,"order":102,"icon":103},"Module Browser (\u002Fmodules)","\u002Fdocs\u002Fguides\u002Fmodules-browser","docs\u002F3.guides\u002F6.modules-browser",6,"i-lucide-layout-dashboard",{"title":105,"path":106,"stem":107,"order":108,"icon":109},"Running Flows","\u002Fdocs\u002Fguides\u002Frunning-flows","docs\u002F3.guides\u002F7.running-flows",7,"i-lucide-play-circle",{"title":111,"path":112,"stem":113,"order":114,"icon":115},"Trace + Live Observability","\u002Fdocs\u002Fguides\u002Fobservability","docs\u002F3.guides\u002F8.observability",8,"i-lucide-activity",{"title":117,"path":118,"stem":119,"order":120,"icon":121},"Project AI Assistant","\u002Fdocs\u002Fguides\u002Fai-assistant","docs\u002F3.guides\u002F9.ai-assistant",9,"i-lucide-sparkles",{"title":123,"path":124,"stem":125},"Debug taps — trace live data through any node","\u002Fdocs\u002Fguides\u002Fdebug-taps","docs\u002F3.guides\u002F9.debug-taps",{"title":64,"path":127,"stem":128,"order":22},"\u002Fdocs\u002Fguides\u002F_dir","docs\u002F3.guides\u002F_dir",{"title":130,"path":131,"stem":132,"children":133,"page":62},"Reference","\u002Fdocs\u002Freference","docs\u002F4.reference",[134,139,143,148,153,158,163,168,172,177,182,187,193,199,205,210,215,219,225,230,236,242,247,253,259,263,267,273,278,284],{"title":135,"path":136,"stem":137,"order":10,"icon":138},"Go Framework","\u002Fdocs\u002Freference\u002Fgo-framework","docs\u002F4.reference\u002F01.go-framework","i-simple-icons-go",{"title":140,"path":141,"stem":142,"order":16,"icon":46},"Built-in Modules","\u002Fdocs\u002Freference\u002Fgo-modules","docs\u002F4.reference\u002F02.go-modules",{"title":144,"path":145,"stem":146,"order":22,"icon":147},"Domain Addon Modules","\u002Fdocs\u002Freference\u002Fgo-modules-addons","docs\u002F4.reference\u002F03.go-modules-addons","i-lucide-blocks",{"title":149,"path":150,"stem":151,"order":51,"icon":152},"Go Events","\u002Fdocs\u002Freference\u002Fgo-events","docs\u002F4.reference\u002F04.go-events","i-lucide-radio",{"title":154,"path":155,"stem":156,"order":57,"icon":157},"Email Module","\u002Fdocs\u002Freference\u002Fgo-module-email","docs\u002F4.reference\u002F05.go-module-email","i-lucide-mail",{"title":159,"path":160,"stem":161,"order":102,"icon":162},"Go Core & IR","\u002Fdocs\u002Freference\u002Fgo-core","docs\u002F4.reference\u002F06.go-core","i-lucide-cpu",{"title":164,"path":165,"stem":166,"order":108,"icon":167},"Module Definition Files","\u002Fdocs\u002Freference\u002Fgo-module-files","docs\u002F4.reference\u002F07.go-module-files","i-lucide-file-code",{"title":169,"path":170,"stem":171,"order":114,"icon":72},"CLI Reference","\u002Fdocs\u002Freference\u002Fgo-cli","docs\u002F4.reference\u002F08.go-cli",{"title":173,"path":174,"stem":175,"order":120,"icon":176},"Go Formats","\u002Fdocs\u002Freference\u002Fgo-formats","docs\u002F4.reference\u002F09.go-formats","i-lucide-file-json",{"title":178,"path":179,"stem":180,"order":181,"icon":152},"AsyncAPI Module","\u002Fdocs\u002Freference\u002Fgo-asyncapi","docs\u002F4.reference\u002F10.go-asyncapi",10,{"title":183,"path":184,"stem":185,"order":186,"icon":52},"Go FlowDSL","\u002Fdocs\u002Freference\u002Fgo-flowdsl","docs\u002F4.reference\u002F11.go-flowdsl",11,{"title":188,"path":189,"stem":190,"order":191,"icon":192},"FlowDSL Examples","\u002Fdocs\u002Freference\u002Fflowdsl-examples","docs\u002F4.reference\u002F12.flowdsl-examples",12,"i-lucide-file-code-2",{"title":194,"path":195,"stem":196,"order":197,"icon":198},"FlowDSL Sync","\u002Fdocs\u002Freference\u002Fflowdsl-sync","docs\u002F4.reference\u002F13.flowdsl-sync",13,"i-lucide-refresh-cw",{"title":200,"path":201,"stem":202,"order":203,"icon":204},"Node.js Framework","\u002Fdocs\u002Freference\u002Fjs-framework","docs\u002F4.reference\u002F14.js-framework",14,"i-simple-icons-nodedotjs",{"title":206,"path":207,"stem":208,"order":203,"icon":209},"Python Framework","\u002Fdocs\u002Freference\u002Fpy-framework","docs\u002F4.reference\u002F14.py-framework","i-simple-icons-python",{"title":211,"path":212,"stem":213,"order":214,"icon":204},"Node.js Events","\u002Fdocs\u002Freference\u002Fjs-events","docs\u002F4.reference\u002F15.js-events",15,{"title":216,"path":217,"stem":218,"order":214,"icon":209},"Python Events","\u002Fdocs\u002Freference\u002Fpy-events","docs\u002F4.reference\u002F15.py-events",{"title":220,"path":221,"stem":222,"order":223,"icon":224},"go-ai — LLM Providers, Guard, Ledger","\u002Fdocs\u002Freference\u002Fgo-ai","docs\u002F4.reference\u002F16.go-ai",16,"i-lucide-brain-circuit",{"title":226,"path":227,"stem":228,"order":229,"icon":41},"Infrastructure Modules","\u002Fdocs\u002Freference\u002Fgeneric-infra-modules","docs\u002F4.reference\u002F17.generic-infra-modules",17,{"title":231,"path":232,"stem":233,"order":234,"icon":235},"Flow Templates","\u002Fdocs\u002Freference\u002Fflow-templates","docs\u002F4.reference\u002F18.flow-templates",18,"i-lucide-library-big",{"title":237,"path":238,"stem":239,"order":240,"icon":241},"Assistant (chat + handoff)","\u002Fdocs\u002Freference\u002Fassistant","docs\u002F4.reference\u002F19.assistant",19,"i-lucide-messages-square",{"title":243,"path":244,"stem":245,"order":246,"icon":41},"Coordination","\u002Fdocs\u002Freference\u002Fcoordination","docs\u002F4.reference\u002F20.coordination",20,{"title":248,"path":249,"stem":250,"order":251,"icon":252},"Search (vector)","\u002Fdocs\u002Freference\u002Fsearch","docs\u002F4.reference\u002F21.search",21,"i-lucide-search",{"title":254,"path":255,"stem":256,"order":257,"icon":258},"Profiles","\u002Fdocs\u002Freference\u002Fprofiles","docs\u002F4.reference\u002F22.profiles",22,"i-lucide-bookmark",{"title":260,"path":261,"stem":262},"Flow-driven HTTP endpoints","\u002Fdocs\u002Freference\u002Fflow-driven-endpoints","docs\u002F4.reference\u002F23.flow-driven-endpoints",{"title":264,"path":265,"stem":266},"Deployments","\u002Fdocs\u002Freference\u002Fdeployments","docs\u002F4.reference\u002F24.deployments",{"title":268,"path":269,"stem":270,"order":271,"icon":272},"i18n (translations)","\u002Fdocs\u002Freference\u002Fi18n","docs\u002F4.reference\u002F25.i18n",25,"i-lucide-languages",{"title":274,"path":275,"stem":276,"order":277,"icon":152},"WebSockets","\u002Fdocs\u002Freference\u002Fwebsockets","docs\u002F4.reference\u002F26.websockets",26,{"title":279,"path":280,"stem":281,"order":282,"icon":283},"Localized content","\u002Fdocs\u002Freference\u002Flocalized-content","docs\u002F4.reference\u002F27.localized-content",27,"i-lucide-file-text",{"title":130,"path":285,"stem":286,"order":51},"\u002Fdocs\u002Freference\u002F_dir","docs\u002F4.reference\u002F_dir",{"title":288,"path":289,"stem":290,"children":291,"page":62},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F5.integrations",[292,296,300,304,308],{"title":293,"path":294,"stem":295,"order":10,"icon":52},"FlowDSL","\u002Fdocs\u002Fintegrations\u002Fflowdsl","docs\u002F5.integrations\u002F1.flowdsl",{"title":297,"path":298,"stem":299,"order":16,"icon":283},"OpenAPI","\u002Fdocs\u002Fintegrations\u002Fopenapi","docs\u002F5.integrations\u002F2.openapi",{"title":301,"path":302,"stem":303,"order":22,"icon":152},"AsyncAPI","\u002Fdocs\u002Fintegrations\u002Fasyncapi","docs\u002F5.integrations\u002F3.asyncapi",{"title":305,"path":306,"stem":307},"MCP Integration","\u002Fdocs\u002Fintegrations\u002Fmcp","docs\u002F5.integrations\u002F4.mcp",{"title":288,"path":309,"stem":310,"order":57},"\u002Fdocs\u002Fintegrations\u002F_dir","docs\u002F5.integrations\u002F_dir",{"title":312,"path":313,"stem":314,"children":315},"FlowDSL Node Catalog","\u002Fdocs\u002Fnodes","docs\u002F5.nodes\u002Findex",[316,317,321,325,329,333,337,341,345,349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417,421,425,429,433,437,441,445,449,453,457,461,465,469,473,477,481,485,489,493,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561,565,569,573,577,581,585,589,593,597,601,605,609,613,617,621,625,629,633,637,641,645,649,653,657,661,665,669,673,677,681,685,689,693,697,701,705,709,713,717,721,725,729,733,737,741,745,749,753,757,761,765,769,773,777,781,785,789,793,797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885,889],{"title":312,"path":313,"stem":314},{"title":318,"path":319,"stem":320,"order":57},"Node Catalog","\u002Fdocs\u002Fnodes\u002F_dir","docs\u002F5.nodes\u002F_dir",{"title":322,"path":323,"stem":324},"Record Alert","\u002Fdocs\u002Fnodes\u002Falerts_record","docs\u002F5.nodes\u002Falerts_record",{"title":326,"path":327,"stem":328},"Log to API Log","\u002Fdocs\u002Fnodes\u002Fapilog_record","docs\u002F5.nodes\u002Fapilog_record",{"title":330,"path":331,"stem":332},"ClickHouse Exec","\u002Fdocs\u002Fnodes\u002Fclickhouse_exec","docs\u002F5.nodes\u002Fclickhouse_exec",{"title":334,"path":335,"stem":336},"ClickHouse Insert","\u002Fdocs\u002Fnodes\u002Fclickhouse_insert","docs\u002F5.nodes\u002Fclickhouse_insert",{"title":338,"path":339,"stem":340},"ClickHouse Query","\u002Fdocs\u002Fnodes\u002Fclickhouse_query","docs\u002F5.nodes\u002Fclickhouse_query",{"title":342,"path":343,"stem":344},"Array Op","\u002Fdocs\u002Fnodes\u002Fcore_array-ops","docs\u002F5.nodes\u002Fcore_array-ops",{"title":346,"path":347,"stem":348},"Assert","\u002Fdocs\u002Fnodes\u002Fcore_assert","docs\u002F5.nodes\u002Fcore_assert",{"title":350,"path":351,"stem":352},"Audit Emit","\u002Fdocs\u002Fnodes\u002Fcore_audit-emit","docs\u002F5.nodes\u002Fcore_audit-emit",{"title":354,"path":355,"stem":356},"Catch","\u002Fdocs\u002Fnodes\u002Fcore_catch","docs\u002F5.nodes\u002Fcore_catch",{"title":358,"path":359,"stem":360},"DateTime","\u002Fdocs\u002Fnodes\u002Fcore_datetime","docs\u002F5.nodes\u002Fcore_datetime",{"title":362,"path":363,"stem":364},"Dead Letter","\u002Fdocs\u002Fnodes\u002Fcore_dead-letter","docs\u002F5.nodes\u002Fcore_dead-letter",{"title":366,"path":367,"stem":368},"Delay","\u002Fdocs\u002Fnodes\u002Fcore_delay","docs\u002F5.nodes\u002Fcore_delay",{"title":370,"path":371,"stem":372},"ForEach","\u002Fdocs\u002Fnodes\u002Fcore_foreach","docs\u002F5.nodes\u002Fcore_foreach",{"title":374,"path":375,"stem":376},"Idempotency Key","\u002Fdocs\u002Fnodes\u002Fcore_idempotency-key","docs\u002F5.nodes\u002Fcore_idempotency-key",{"title":378,"path":379,"stem":380},"If","\u002Fdocs\u002Fnodes\u002Fcore_if","docs\u002F5.nodes\u002Fcore_if",{"title":382,"path":383,"stem":384},"Inspect","\u002Fdocs\u002Fnodes\u002Fcore_inspect","docs\u002F5.nodes\u002Fcore_inspect",{"title":386,"path":387,"stem":388},"JSON Merge","\u002Fdocs\u002Fnodes\u002Fcore_json-merge","docs\u002F5.nodes\u002Fcore_json-merge",{"title":390,"path":391,"stem":392},"JSON Schema Validate","\u002Fdocs\u002Fnodes\u002Fcore_json-schema-validate","docs\u002F5.nodes\u002Fcore_json-schema-validate",{"title":394,"path":395,"stem":396},"JSONPath Extract","\u002Fdocs\u002Fnodes\u002Fcore_jsonpath-extract","docs\u002F5.nodes\u002Fcore_jsonpath-extract",{"title":398,"path":399,"stem":400},"Log","\u002Fdocs\u002Fnodes\u002Fcore_log","docs\u002F5.nodes\u002Fcore_log",{"title":402,"path":403,"stem":404},"Math","\u002Fdocs\u002Fnodes\u002Fcore_math","docs\u002F5.nodes\u002Fcore_math",{"title":406,"path":407,"stem":408},"Merge","\u002Fdocs\u002Fnodes\u002Fcore_merge","docs\u002F5.nodes\u002Fcore_merge",{"title":410,"path":411,"stem":412},"Metric Counter","\u002Fdocs\u002Fnodes\u002Fcore_metric-counter","docs\u002F5.nodes\u002Fcore_metric-counter",{"title":414,"path":415,"stem":416},"Metric Gauge","\u002Fdocs\u002Fnodes\u002Fcore_metric-gauge","docs\u002F5.nodes\u002Fcore_metric-gauge",{"title":418,"path":419,"stem":420},"Mock","\u002Fdocs\u002Fnodes\u002Fcore_mock","docs\u002F5.nodes\u002Fcore_mock",{"title":422,"path":423,"stem":424},"No-op","\u002Fdocs\u002Fnodes\u002Fcore_noop","docs\u002F5.nodes\u002Fcore_noop",{"title":426,"path":427,"stem":428},"Object Omit","\u002Fdocs\u002Fnodes\u002Fcore_object-omit","docs\u002F5.nodes\u002Fcore_object-omit",{"title":430,"path":431,"stem":432},"Object Pick","\u002Fdocs\u002Fnodes\u002Fcore_object-pick","docs\u002F5.nodes\u002Fcore_object-pick",{"title":434,"path":435,"stem":436},"Parallel Fan-Out","\u002Fdocs\u002Fnodes\u002Fcore_parallel","docs\u002F5.nodes\u002Fcore_parallel",{"title":438,"path":439,"stem":440},"Raise","\u002Fdocs\u002Fnodes\u002Fcore_raise","docs\u002F5.nodes\u002Fcore_raise",{"title":442,"path":443,"stem":444},"Rate Limit Check","\u002Fdocs\u002Fnodes\u002Fcore_rate-limit-check","docs\u002F5.nodes\u002Fcore_rate-limit-check",{"title":446,"path":447,"stem":448},"Regex Extract","\u002Fdocs\u002Fnodes\u002Fcore_regex-extract","docs\u002F5.nodes\u002Fcore_regex-extract",{"title":450,"path":451,"stem":452},"Require Fields","\u002Fdocs\u002Fnodes\u002Fcore_require-fields","docs\u002F5.nodes\u002Fcore_require-fields",{"title":454,"path":455,"stem":456},"Rethrow","\u002Fdocs\u002Fnodes\u002Fcore_rethrow","docs\u002F5.nodes\u002Fcore_rethrow",{"title":458,"path":459,"stem":460},"Return","\u002Fdocs\u002Fnodes\u002Fcore_return","docs\u002F5.nodes\u002Fcore_return",{"title":462,"path":463,"stem":464},"HMAC Signature Verify","\u002Fdocs\u002Fnodes\u002Fcore_signature-verify","docs\u002F5.nodes\u002Fcore_signature-verify",{"title":466,"path":467,"stem":468},"String Op","\u002Fdocs\u002Fnodes\u002Fcore_string-ops","docs\u002F5.nodes\u002Fcore_string-ops",{"title":470,"path":471,"stem":472},"Subflow Invoke","\u002Fdocs\u002Fnodes\u002Fcore_subflow-invoke","docs\u002F5.nodes\u002Fcore_subflow-invoke",{"title":474,"path":475,"stem":476},"Switch","\u002Fdocs\u002Fnodes\u002Fcore_switch","docs\u002F5.nodes\u002Fcore_switch",{"title":478,"path":479,"stem":480},"Template Render","\u002Fdocs\u002Fnodes\u002Fcore_template-render","docs\u002F5.nodes\u002Fcore_template-render",{"title":482,"path":483,"stem":484},"Throttle","\u002Fdocs\u002Fnodes\u002Fcore_throttle","docs\u002F5.nodes\u002Fcore_throttle",{"title":486,"path":487,"stem":488},"Timeout","\u002Fdocs\u002Fnodes\u002Fcore_timeout","docs\u002F5.nodes\u002Fcore_timeout",{"title":490,"path":491,"stem":492},"Type Cast","\u002Fdocs\u002Fnodes\u002Fcore_type-cast","docs\u002F5.nodes\u002Fcore_type-cast",{"title":494,"path":495,"stem":496},"Webhook Respond","\u002Fdocs\u002Fnodes\u002Fcore_webhook-respond","docs\u002F5.nodes\u002Fcore_webhook-respond",{"title":498,"path":499,"stem":500},"File Delete","\u002Fdocs\u002Fnodes\u002Ffilesys_delete","docs\u002F5.nodes\u002Ffilesys_delete",{"title":502,"path":503,"stem":504},"Directory List","\u002Fdocs\u002Fnodes\u002Ffilesys_list","docs\u002F5.nodes\u002Ffilesys_list",{"title":506,"path":507,"stem":508},"File Read","\u002Fdocs\u002Fnodes\u002Ffilesys_read","docs\u002F5.nodes\u002Ffilesys_read",{"title":510,"path":511,"stem":512},"File Stat","\u002Fdocs\u002Fnodes\u002Ffilesys_stat","docs\u002F5.nodes\u002Ffilesys_stat",{"title":514,"path":515,"stem":516},"File Write","\u002Fdocs\u002Fnodes\u002Ffilesys_write","docs\u002F5.nodes\u002Ffilesys_write",{"title":518,"path":519,"stem":520},"FTP Delete","\u002Fdocs\u002Fnodes\u002Fftp_delete","docs\u002F5.nodes\u002Fftp_delete",{"title":522,"path":523,"stem":524},"FTP Download","\u002Fdocs\u002Fnodes\u002Fftp_download","docs\u002F5.nodes\u002Fftp_download",{"title":526,"path":527,"stem":528},"FTP List","\u002Fdocs\u002Fnodes\u002Fftp_list","docs\u002F5.nodes\u002Fftp_list",{"title":530,"path":531,"stem":532},"FTP Upload","\u002Fdocs\u002Fnodes\u002Fftp_upload","docs\u002F5.nodes\u002Fftp_upload",{"title":534,"path":535,"stem":536},"HTTP DELETE","\u002Fdocs\u002Fnodes\u002Fhttp_delete","docs\u002F5.nodes\u002Fhttp_delete",{"title":538,"path":539,"stem":540},"HTTP GET","\u002Fdocs\u002Fnodes\u002Fhttp_get","docs\u002F5.nodes\u002Fhttp_get",{"title":542,"path":543,"stem":544},"HTTP POST","\u002Fdocs\u002Fnodes\u002Fhttp_post","docs\u002F5.nodes\u002Fhttp_post",{"title":546,"path":547,"stem":548},"HTTP PUT","\u002Fdocs\u002Fnodes\u002Fhttp_put","docs\u002F5.nodes\u002Fhttp_put",{"title":550,"path":551,"stem":552},"HTTP Request","\u002Fdocs\u002Fnodes\u002Fhttp_request","docs\u002F5.nodes\u002Fhttp_request",{"title":554,"path":555,"stem":556},"Fill Translations","\u002Fdocs\u002Fnodes\u002Fi18n_fill-translations","docs\u002F5.nodes\u002Fi18n_fill-translations",{"title":558,"path":559,"stem":560},"Resolve Locale","\u002Fdocs\u002Fnodes\u002Fi18n_resolve-locale","docs\u002F5.nodes\u002Fi18n_resolve-locale",{"title":562,"path":563,"stem":564},"Translate","\u002Fdocs\u002Fnodes\u002Fi18n_translate","docs\u002F5.nodes\u002Fi18n_translate",{"title":566,"path":567,"stem":568},"Mongo AGGREGATE","\u002Fdocs\u002Fnodes\u002Fmongoops_aggregate","docs\u002F5.nodes\u002Fmongoops_aggregate",{"title":570,"path":571,"stem":572},"Mongo DELETE","\u002Fdocs\u002Fnodes\u002Fmongoops_delete","docs\u002F5.nodes\u002Fmongoops_delete",{"title":574,"path":575,"stem":576},"Mongo FIND","\u002Fdocs\u002Fnodes\u002Fmongoops_find","docs\u002F5.nodes\u002Fmongoops_find",{"title":578,"path":579,"stem":580},"Mongo FIND ONE","\u002Fdocs\u002Fnodes\u002Fmongoops_find-one","docs\u002F5.nodes\u002Fmongoops_find-one",{"title":582,"path":583,"stem":584},"Mongo INSERT","\u002Fdocs\u002Fnodes\u002Fmongoops_insert","docs\u002F5.nodes\u002Fmongoops_insert",{"title":586,"path":587,"stem":588},"Mongo UPDATE","\u002Fdocs\u002Fnodes\u002Fmongoops_update","docs\u002F5.nodes\u002Fmongoops_update",{"title":590,"path":591,"stem":592},"Postgres COPY FROM","\u002Fdocs\u002Fnodes\u002Fpostgres_copy-from","docs\u002F5.nodes\u002Fpostgres_copy-from",{"title":594,"path":595,"stem":596},"Postgres Exec","\u002Fdocs\u002Fnodes\u002Fpostgres_exec","docs\u002F5.nodes\u002Fpostgres_exec",{"title":598,"path":599,"stem":600},"Postgres Query","\u002Fdocs\u002Fnodes\u002Fpostgres_query","docs\u002F5.nodes\u002Fpostgres_query",{"title":602,"path":603,"stem":604},"Postgres Transaction","\u002Fdocs\u002Fnodes\u002Fpostgres_transaction","docs\u002F5.nodes\u002Fpostgres_transaction",{"title":606,"path":607,"stem":608},"RabbitMQ Consume","\u002Fdocs\u002Fnodes\u002Frabbitmq_consume","docs\u002F5.nodes\u002Frabbitmq_consume",{"title":610,"path":611,"stem":612},"RabbitMQ Declare","\u002Fdocs\u002Fnodes\u002Frabbitmq_declare","docs\u002F5.nodes\u002Frabbitmq_declare",{"title":614,"path":615,"stem":616},"RabbitMQ Publish","\u002Fdocs\u002Fnodes\u002Frabbitmq_publish","docs\u002F5.nodes\u002Frabbitmq_publish",{"title":618,"path":619,"stem":620},"Auth Login","\u002Fdocs\u002Fnodes\u002Fredelay_auth-login","docs\u002F5.nodes\u002Fredelay_auth-login",{"title":622,"path":623,"stem":624},"Require Permission","\u002Fdocs\u002Fnodes\u002Fredelay_auth-require-permission","docs\u002F5.nodes\u002Fredelay_auth-require-permission",{"title":626,"path":627,"stem":628},"Validate Token","\u002Fdocs\u002Fnodes\u002Fredelay_auth-validate-token","docs\u002F5.nodes\u002Fredelay_auth-validate-token",{"title":630,"path":631,"stem":632},"Render Email Template","\u002Fdocs\u002Fnodes\u002Fredelay_email-render-template","docs\u002F5.nodes\u002Fredelay_email-render-template",{"title":634,"path":635,"stem":636},"Send Email","\u002Fdocs\u002Fnodes\u002Fredelay_email-send","docs\u002F5.nodes\u002Fredelay_email-send",{"title":638,"path":639,"stem":640},"Send Templated Email","\u002Fdocs\u002Fnodes\u002Fredelay_email-send-templated","docs\u002F5.nodes\u002Fredelay_email-send-templated",{"title":642,"path":643,"stem":644},"Event Source","\u002Fdocs\u002Fnodes\u002Fredelay_event-source","docs\u002F5.nodes\u002Fredelay_event-source",{"title":646,"path":647,"stem":648},"Create Group","\u002Fdocs\u002Fnodes\u002Fredelay_groups-create-group","docs\u002F5.nodes\u002Fredelay_groups-create-group",{"title":650,"path":651,"stem":652},"Delete Group","\u002Fdocs\u002Fnodes\u002Fredelay_groups-delete-group","docs\u002F5.nodes\u002Fredelay_groups-delete-group",{"title":654,"path":655,"stem":656},"Resolve Permissions","\u002Fdocs\u002Fnodes\u002Fredelay_groups-resolve-permissions","docs\u002F5.nodes\u002Fredelay_groups-resolve-permissions",{"title":658,"path":659,"stem":660},"Update Group","\u002Fdocs\u002Fnodes\u002Fredelay_groups-update-group","docs\u002F5.nodes\u002Fredelay_groups-update-group",{"title":662,"path":663,"stem":664},"HTTP Endpoint","\u002Fdocs\u002Fnodes\u002Fredelay_http-endpoint","docs\u002F5.nodes\u002Fredelay_http-endpoint",{"title":666,"path":667,"stem":668},"JSON Stream Source","\u002Fdocs\u002Fnodes\u002Fredelay_json-stream-source","docs\u002F5.nodes\u002Fredelay_json-stream-source",{"title":670,"path":671,"stem":672},"JSON → Event","\u002Fdocs\u002Fnodes\u002Fredelay_json-to-event","docs\u002F5.nodes\u002Fredelay_json-to-event",{"title":674,"path":675,"stem":676},"Kafka Produce","\u002Fdocs\u002Fnodes\u002Fredelay_kafka-produce","docs\u002F5.nodes\u002Fredelay_kafka-produce",{"title":678,"path":679,"stem":680},"Create Short Link","\u002Fdocs\u002Fnodes\u002Fredelay_links-create","docs\u002F5.nodes\u002Fredelay_links-create",{"title":682,"path":683,"stem":684},"Delete Short Link","\u002Fdocs\u002Fnodes\u002Fredelay_links-delete","docs\u002F5.nodes\u002Fredelay_links-delete",{"title":686,"path":687,"stem":688},"Resolve Short Link","\u002Fdocs\u002Fnodes\u002Fredelay_links-resolve","docs\u002F5.nodes\u002Fredelay_links-resolve",{"title":690,"path":691,"stem":692},"LLM Chat","\u002Fdocs\u002Fnodes\u002Fredelay_llm-chat","docs\u002F5.nodes\u002Fredelay_llm-chat",{"title":694,"path":695,"stem":696},"LLM Embed","\u002Fdocs\u002Fnodes\u002Fredelay_llm-embed","docs\u002F5.nodes\u002Fredelay_llm-embed",{"title":698,"path":699,"stem":700},"LLM Guard","\u002Fdocs\u002Fnodes\u002Fredelay_llm-guard","docs\u002F5.nodes\u002Fredelay_llm-guard",{"title":702,"path":703,"stem":704},"LLM Tool Router","\u002Fdocs\u002Fnodes\u002Fredelay_llm-tool-router","docs\u002F5.nodes\u002Fredelay_llm-tool-router",{"title":706,"path":707,"stem":708},"NATS Publish","\u002Fdocs\u002Fnodes\u002Fredelay_nats-publish","docs\u002F5.nodes\u002Fredelay_nats-publish",{"title":710,"path":711,"stem":712},"Mark Notification Read","\u002Fdocs\u002Fnodes\u002Fredelay_notifications-mark-read","docs\u002F5.nodes\u002Fredelay_notifications-mark-read",{"title":714,"path":715,"stem":716},"Send Notification","\u002Fdocs\u002Fnodes\u002Fredelay_notifications-send","docs\u002F5.nodes\u002Fredelay_notifications-send",{"title":718,"path":719,"stem":720},"Redis Stream XADD","\u002Fdocs\u002Fnodes\u002Fredelay_redis-stream-publish","docs\u002F5.nodes\u002Fredelay_redis-stream-publish",{"title":722,"path":723,"stem":724},"S3 Copy Object","\u002Fdocs\u002Fnodes\u002Fredelay_s3-copy-object","docs\u002F5.nodes\u002Fredelay_s3-copy-object",{"title":726,"path":727,"stem":728},"S3 Delete Many","\u002Fdocs\u002Fnodes\u002Fredelay_s3-delete-many","docs\u002F5.nodes\u002Fredelay_s3-delete-many",{"title":730,"path":731,"stem":732},"S3 Head Object","\u002Fdocs\u002Fnodes\u002Fredelay_s3-head-object","docs\u002F5.nodes\u002Fredelay_s3-head-object",{"title":734,"path":735,"stem":736},"S3 List Objects","\u002Fdocs\u002Fnodes\u002Fredelay_s3-list-objects","docs\u002F5.nodes\u002Fredelay_s3-list-objects",{"title":738,"path":739,"stem":740},"Create Schedule","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-create-schedule","docs\u002F5.nodes\u002Fredelay_scheduler-create-schedule",{"title":742,"path":743,"stem":744},"Cron Trigger","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-cron-trigger","docs\u002F5.nodes\u002Fredelay_scheduler-cron-trigger",{"title":746,"path":747,"stem":748},"Delete Schedule","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-delete-schedule","docs\u002F5.nodes\u002Fredelay_scheduler-delete-schedule",{"title":750,"path":751,"stem":752},"Interval Trigger","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-interval-trigger","docs\u002F5.nodes\u002Fredelay_scheduler-interval-trigger",{"title":754,"path":755,"stem":756},"Search Query","\u002Fdocs\u002Fnodes\u002Fredelay_search-query","docs\u002F5.nodes\u002Fredelay_search-query",{"title":758,"path":759,"stem":760},"Search Upsert","\u002Fdocs\u002Fnodes\u002Fredelay_search-upsert","docs\u002F5.nodes\u002Fredelay_search-upsert",{"title":762,"path":763,"stem":764},"Delete Setting","\u002Fdocs\u002Fnodes\u002Fredelay_settings-delete","docs\u002F5.nodes\u002Fredelay_settings-delete",{"title":766,"path":767,"stem":768},"Get Setting","\u002Fdocs\u002Fnodes\u002Fredelay_settings-get","docs\u002F5.nodes\u002Fredelay_settings-get",{"title":770,"path":771,"stem":772},"Set Setting","\u002Fdocs\u002Fnodes\u002Fredelay_settings-set","docs\u002F5.nodes\u002Fredelay_settings-set",{"title":774,"path":775,"stem":776},"Delete File","\u002Fdocs\u002Fnodes\u002Fredelay_storage-delete","docs\u002F5.nodes\u002Fredelay_storage-delete",{"title":778,"path":779,"stem":780},"Download File","\u002Fdocs\u002Fnodes\u002Fredelay_storage-download","docs\u002F5.nodes\u002Fredelay_storage-download",{"title":782,"path":783,"stem":784},"Generate Presigned URL","\u002Fdocs\u002Fnodes\u002Fredelay_storage-presign-url","docs\u002F5.nodes\u002Fredelay_storage-presign-url",{"title":786,"path":787,"stem":788},"Upload File","\u002Fdocs\u002Fnodes\u002Fredelay_storage-upload","docs\u002F5.nodes\u002Fredelay_storage-upload",{"title":790,"path":791,"stem":792},"Subworkflow","\u002Fdocs\u002Fnodes\u002Fredelay_subworkflow","docs\u002F5.nodes\u002Fredelay_subworkflow",{"title":794,"path":795,"stem":796},"Activate User","\u002Fdocs\u002Fnodes\u002Fredelay_users-activate","docs\u002F5.nodes\u002Fredelay_users-activate",{"title":798,"path":799,"stem":800},"Create Pending User","\u002Fdocs\u002Fnodes\u002Fredelay_users-create-pending","docs\u002F5.nodes\u002Fredelay_users-create-pending",{"title":802,"path":803,"stem":804},"Create User","\u002Fdocs\u002Fnodes\u002Fredelay_users-create-user","docs\u002F5.nodes\u002Fredelay_users-create-user",{"title":806,"path":807,"stem":808},"Delete User","\u002Fdocs\u002Fnodes\u002Fredelay_users-delete-user","docs\u002F5.nodes\u002Fredelay_users-delete-user",{"title":810,"path":811,"stem":812},"Find User By Email","\u002Fdocs\u002Fnodes\u002Fredelay_users-find-by-email","docs\u002F5.nodes\u002Fredelay_users-find-by-email",{"title":814,"path":815,"stem":816},"Get User","\u002Fdocs\u002Fnodes\u002Fredelay_users-get-user","docs\u002F5.nodes\u002Fredelay_users-get-user",{"title":818,"path":819,"stem":820},"List Users","\u002Fdocs\u002Fnodes\u002Fredelay_users-list-users","docs\u002F5.nodes\u002Fredelay_users-list-users",{"title":822,"path":823,"stem":824},"Update User","\u002Fdocs\u002Fnodes\u002Fredelay_users-update-user","docs\u002F5.nodes\u002Fredelay_users-update-user",{"title":826,"path":827,"stem":828},"Request Email Verification (legacy)","\u002Fdocs\u002Fnodes\u002Fredelay_verification-request","docs\u002F5.nodes\u002Fredelay_verification-request",{"title":830,"path":831,"stem":832},"Request Email Verification","\u002Fdocs\u002Fnodes\u002Fredelay_verification-request-email","docs\u002F5.nodes\u002Fredelay_verification-request-email",{"title":834,"path":835,"stem":836},"Request SMS Verification","\u002Fdocs\u002Fnodes\u002Fredelay_verification-request-sms","docs\u002F5.nodes\u002Fredelay_verification-request-sms",{"title":838,"path":839,"stem":840},"Verify Token","\u002Fdocs\u002Fnodes\u002Fredelay_verification-verify","docs\u002F5.nodes\u002Fredelay_verification-verify",{"title":842,"path":843,"stem":844},"Redis DEL","\u002Fdocs\u002Fnodes\u002Fredisops_del","docs\u002F5.nodes\u002Fredisops_del",{"title":846,"path":847,"stem":848},"Redis EXPIRE","\u002Fdocs\u002Fnodes\u002Fredisops_expire","docs\u002F5.nodes\u002Fredisops_expire",{"title":850,"path":851,"stem":852},"Redis GET","\u002Fdocs\u002Fnodes\u002Fredisops_get","docs\u002F5.nodes\u002Fredisops_get",{"title":854,"path":855,"stem":856},"Redis HGET","\u002Fdocs\u002Fnodes\u002Fredisops_hget","docs\u002F5.nodes\u002Fredisops_hget",{"title":858,"path":859,"stem":860},"Redis HSET","\u002Fdocs\u002Fnodes\u002Fredisops_hset","docs\u002F5.nodes\u002Fredisops_hset",{"title":862,"path":863,"stem":864},"Redis INCR","\u002Fdocs\u002Fnodes\u002Fredisops_incr","docs\u002F5.nodes\u002Fredisops_incr",{"title":866,"path":867,"stem":868},"Redis LPOP","\u002Fdocs\u002Fnodes\u002Fredisops_lpop","docs\u002F5.nodes\u002Fredisops_lpop",{"title":870,"path":871,"stem":872},"Redis LPUSH","\u002Fdocs\u002Fnodes\u002Fredisops_lpush","docs\u002F5.nodes\u002Fredisops_lpush",{"title":874,"path":875,"stem":876},"Redis PUBLISH","\u002Fdocs\u002Fnodes\u002Fredisops_publish","docs\u002F5.nodes\u002Fredisops_publish",{"title":878,"path":879,"stem":880},"Redis SET","\u002Fdocs\u002Fnodes\u002Fredisops_set","docs\u002F5.nodes\u002Fredisops_set",{"title":882,"path":883,"stem":884},"SFTP Download","\u002Fdocs\u002Fnodes\u002Fsftp_download","docs\u002F5.nodes\u002Fsftp_download",{"title":886,"path":887,"stem":888},"SFTP Upload","\u002Fdocs\u002Fnodes\u002Fsftp_upload","docs\u002F5.nodes\u002Fsftp_upload",{"title":890,"path":891,"stem":892},"Send SMS","\u002Fdocs\u002Fnodes\u002Fsms_send","docs\u002F5.nodes\u002Fsms_send",{"title":894,"path":895,"stem":896,"children":897,"page":62},"Rfcs","\u002Fdocs\u002Frfcs","docs\u002F6.rfcs",[898],{"title":899,"path":900,"stem":901},"RFC 0001 — Worker Assignment for Flow Deployments","\u002Fdocs\u002Frfcs\u002F0001-worker-assignment","docs\u002F6.rfcs\u002F0001-worker-assignment",{"title":903,"path":904,"stem":905,"children":906,"page":62},"Admin","\u002Fdocs\u002Fadmin","docs\u002F7.admin",[907,912,917,922,927,932,937,941,946],{"title":5,"path":908,"stem":909,"order":910,"icon":911},"\u002Fdocs\u002Fadmin\u002Foverview","docs\u002F7.admin\u002F00.overview",0,"i-lucide-compass",{"title":913,"path":914,"stem":915,"order":10,"icon":916},"Getting started","\u002Fdocs\u002Fadmin\u002Fgetting-started","docs\u002F7.admin\u002F01.getting-started","i-lucide-play",{"title":918,"path":919,"stem":920,"order":16,"icon":921},"Layered architecture","\u002Fdocs\u002Fadmin\u002Flayered-architecture","docs\u002F7.admin\u002F02.layered-architecture","i-lucide-layers",{"title":923,"path":924,"stem":925,"order":22,"icon":926},"Building a custom admin project","\u002Fdocs\u002Fadmin\u002Fbuilding-a-custom-admin-project","docs\u002F7.admin\u002F03.building-a-custom-admin-project","i-lucide-folder-plus",{"title":928,"path":929,"stem":930,"order":51,"icon":931},"Building admin modules","\u002Fdocs\u002Fadmin\u002Fbuilding-admin-modules","docs\u002F7.admin\u002F04.building-admin-modules","i-lucide-package-plus",{"title":933,"path":934,"stem":935,"order":57,"icon":936},"Base module reference","\u002Fdocs\u002Fadmin\u002Freference-base-modules","docs\u002F7.admin\u002F05.reference-base-modules","i-lucide-boxes",{"title":938,"path":939,"stem":940,"order":102,"icon":17},"Deployment","\u002Fdocs\u002Fadmin\u002Fdeployment","docs\u002F7.admin\u002F06.deployment",{"title":942,"path":943,"stem":944,"order":108,"icon":945},"Consuming the base layer (versioned)","\u002Fdocs\u002Fadmin\u002Fconsuming-the-base-layer","docs\u002F7.admin\u002F07.consuming-the-base-layer","i-lucide-package",{"title":947,"path":948,"stem":949,"order":108},"Admin UI","\u002Fdocs\u002Fadmin\u002F_dir","docs\u002F7.admin\u002F_dir",{"title":951,"path":952,"stem":953,"children":954,"page":62},"Services","\u002Fdocs\u002Fservices","docs\u002F8.services",[955,960],{"title":956,"path":957,"stem":958,"order":10,"icon":959},"Custom development & support services","\u002Fdocs\u002Fservices\u002Fcustom-development","docs\u002F8.services\u002F1.custom-development","i-lucide-briefcase",{"title":951,"path":961,"stem":962,"icon":959,"order":963},"\u002Fdocs\u002Fservices\u002F_dir","docs\u002F8.services\u002F_dir",80,{"title":965,"path":966,"stem":967,"order":910},"Dir","\u002Fdocs\u002F_dir","docs\u002F_dir",{"id":969,"title":149,"body":970,"description":3815,"extension":3816,"links":3817,"meta":3818,"navigation":3819,"path":150,"seo":3820,"stem":151,"__hash__":3821},"docs\u002Fdocs\u002F4.reference\u002F04.go-events.md",{"type":971,"value":972,"toc":3774},"minimark",[973,981,985,1015,1020,1030,1036,1043,1050,1067,1096,1115,1118,1137,1141,1148,1280,1285,1345,1357,1442,1446,1476,1479,1483,1486,1489,1495,1502,1510,1513,1520,1590,1633,1639,1648,1651,1738,1768,1782,1785,1789,1800,1805,1886,1892,1894,1898,1902,1938,1952,1956,1998,2002,2076,2080,2084,2091,2124,2131,2134,2202,2205,2280,2303,2307,2350,2357,2361,2390,2393,2396,2425,2429,2522,2526,2598,2602,2617,2621,2628,2727,2733,2737,2787,2801,2805,2814,2923,2926,2960,2963,2977,3041,3044,3059,3063,3145,3154,3158,3161,3297,3300,3429,3432,3516,3520,3681,3695,3767,3770],[974,975,976,977],"p",{},"Module: ",[978,979,980],"code",{},"github.com\u002Fredelay\u002Fgo-events",[982,983,5],"h2",{"id":984},"overview",[974,986,987,988,991,992,995,996,999,1000,1002,1003,1006,1007,1010,1011,1014],{},"go-events provides a high-level ",[978,989,990],{},"EventBus"," over pluggable transport backends (Kafka, NATS,\nRedis Streams, in-memory). The canonical event types (",[978,993,994],{},"EventMessage",", ",[978,997,998],{},"ConsumerRegistration",",\n",[978,1001,990],{}," interface) are defined in ",[978,1004,1005],{},"go-framework\u002Fruntime\u002Ftransport"," (stdlib-only, zero\nexternal deps) and re-exported as type aliases from both ",[978,1008,1009],{},"go-events\u002Fcore"," and\n",[978,1012,1013],{},"go-framework\u002Fmodules",". This means all three import paths refer to identical types with no\ncircular module dependency.",[1016,1017,1019],"h3",{"id":1018},"dependency-graph","Dependency graph",[1021,1022,1027],"pre",{"className":1023,"code":1025,"language":1026},[1024],"language-text","go-framework\u002Fruntime\u002Ftransport  ← canonical zero-dep type home (stdlib only)\n        ↑                ↑\ngo-events\u002Fcore      go-framework\u002Fmodules  (type aliases — identical types)\n        ↑\ngo-events\u002Feventbus  ← no mongo\u002Fchi\u002FJWT\u002Fzap\ngo-events\u002Fmodule    ← imports go-framework\u002Fmodules (lifecycle only)\n","text",[978,1028,1025],{"__ignoreMap":1029},"",[974,1031,1032,1033,1035],{},"Lightweight workers (Kafka consumers, scheduled jobs) that only need event types and no HTTP\nserver can import ",[978,1034,1009],{}," without pulling in the full framework stack.",[982,1037,1039,1040],{"id":1038},"flowdsl-integration-go-flowdslnodes","FlowDSL integration — ",[978,1041,1042],{},"go-flowdsl\u002Fnodes",[974,1044,1045,1046,1049],{},"The ",[978,1047,1048],{},"redelay\u002Fevent-source"," node subscribes to any event on the bus. It replaces\nthe per-event source nodes that each module used to emit.",[974,1051,1052,1053,1058,1059,1062,1063,1066],{},"The node ships from ",[1054,1055,1056],"strong",{},[978,1057,1042],{},", not from ",[978,1060,1061],{},"go-events"," (it lived at\n",[978,1064,1065],{},"go-events\u002Fflowdsl"," until the 2026-04-16 flowdsl refactor).",[974,1068,1069,1072,1073,1075,1076,1078,1079,1081,1082,1084,1085,1087,1088,1090,1091,1095],{},[1054,1070,1071],{},"Why it lives there:"," the node pack programs against the ",[978,1074,990],{}," interface\nin ",[978,1077,1005],{}," and imports ",[978,1080,1061],{}," nowhere. Had it\nstayed under ",[978,1083,1061],{},", every flow using ",[978,1086,1048],{}," would have\npulled in the event library — and transitively sarama or nats.go — regardless of\nwhich transport the project actually ran. Keeping it in ",[978,1089,1042],{}," means\nFlowDSL depends on the transport ",[1092,1093,1094],"em",{},"interface"," only, so any implementation\n(kafka, nats, redis, memory) satisfies it.",[974,1097,1098,1099,999,1102,995,1105,995,1108,995,1111,1114],{},"It is packaged with the other transport-entry nodes (",[978,1100,1101],{},"json-stream-source",[978,1103,1104],{},"json-to-event",[978,1106,1107],{},"kafka-produce",[978,1109,1110],{},"nats-publish",[978,1112,1113],{},"redis-stream-publish","), so one\nimport gets the whole entry-node pack.",[974,1116,1117],{},"Enable with a blank import:",[1021,1119,1123],{"className":1120,"code":1121,"language":1122,"meta":1029,"style":1029},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import _ \"github.com\u002Fredelay\u002Fgo-flowdsl\u002Fnodes\"      \u002F\u002F event\u002Fstream sources + publishers\nimport _ \"github.com\u002Fredelay\u002Fgo-flowdsl\u002Fnodes\u002Fcore\" \u002F\u002F stdlib primitives (transforms, control flow)\n","go",[978,1124,1125,1132],{"__ignoreMap":1029},[1126,1127,1129],"span",{"class":1128,"line":10},"line",[1126,1130,1131],{},"import _ \"github.com\u002Fredelay\u002Fgo-flowdsl\u002Fnodes\"      \u002F\u002F event\u002Fstream sources + publishers\n",[1126,1133,1134],{"class":1128,"line":16},[1126,1135,1136],{},"import _ \"github.com\u002Fredelay\u002Fgo-flowdsl\u002Fnodes\u002Fcore\" \u002F\u002F stdlib primitives (transforms, control flow)\n",[1016,1138,1140],{"id":1139},"configurable-event-source-node","Configurable event-source node",[974,1142,1143,1144,1147],{},"One node type serves every event in the system. The specific event is picked\nvia the node's ",[978,1145,1146],{},"eventName"," setting, which Studio renders as a dropdown.",[1021,1149,1153],{"className":1150,"code":1151,"language":1152,"meta":1029,"style":1029},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","on_user_signup:\n  kind: source\n  nodeType: redelay\u002Fevent-source\n  settings:\n    eventName: users.user_created  # chosen from live dropdown\n    groupID:   onboarding-welcome\n    filter:    \"payload.email_verified == true\"  # optional, server-side\n  outputs:\n    - name: Event\n      message:\n        $ref: \"asyncapi:default#\u002Fcomponents\u002Fschemas\u002FEventMessage\"\n","yaml",[978,1154,1155,1165,1177,1187,1194,1208,1218,1237,1244,1257,1264],{"__ignoreMap":1029},[1126,1156,1157,1161],{"class":1128,"line":10},[1126,1158,1160],{"class":1159},"swJcz","on_user_signup",[1126,1162,1164],{"class":1163},"sMK4o",":\n",[1126,1166,1167,1170,1173],{"class":1128,"line":16},[1126,1168,1169],{"class":1159},"  kind",[1126,1171,1172],{"class":1163},":",[1126,1174,1176],{"class":1175},"sfazB"," source\n",[1126,1178,1179,1182,1184],{"class":1128,"line":22},[1126,1180,1181],{"class":1159},"  nodeType",[1126,1183,1172],{"class":1163},[1126,1185,1186],{"class":1175}," redelay\u002Fevent-source\n",[1126,1188,1189,1192],{"class":1128,"line":51},[1126,1190,1191],{"class":1159},"  settings",[1126,1193,1164],{"class":1163},[1126,1195,1196,1199,1201,1204],{"class":1128,"line":57},[1126,1197,1198],{"class":1159},"    eventName",[1126,1200,1172],{"class":1163},[1126,1202,1203],{"class":1175}," users.user_created",[1126,1205,1207],{"class":1206},"sHwdD","  # chosen from live dropdown\n",[1126,1209,1210,1213,1215],{"class":1128,"line":102},[1126,1211,1212],{"class":1159},"    groupID",[1126,1214,1172],{"class":1163},[1126,1216,1217],{"class":1175},"   onboarding-welcome\n",[1126,1219,1220,1223,1225,1228,1231,1234],{"class":1128,"line":108},[1126,1221,1222],{"class":1159},"    filter",[1126,1224,1172],{"class":1163},[1126,1226,1227],{"class":1163},"    \"",[1126,1229,1230],{"class":1175},"payload.email_verified == true",[1126,1232,1233],{"class":1163},"\"",[1126,1235,1236],{"class":1206},"  # optional, server-side\n",[1126,1238,1239,1242],{"class":1128,"line":114},[1126,1240,1241],{"class":1159},"  outputs",[1126,1243,1164],{"class":1163},[1126,1245,1246,1249,1252,1254],{"class":1128,"line":120},[1126,1247,1248],{"class":1163},"    -",[1126,1250,1251],{"class":1159}," name",[1126,1253,1172],{"class":1163},[1126,1255,1256],{"class":1175}," Event\n",[1126,1258,1259,1262],{"class":1128,"line":181},[1126,1260,1261],{"class":1159},"      message",[1126,1263,1164],{"class":1163},[1126,1265,1266,1269,1271,1274,1277],{"class":1128,"line":186},[1126,1267,1268],{"class":1159},"        $ref",[1126,1270,1172],{"class":1163},[1126,1272,1273],{"class":1163}," \"",[1126,1275,1276],{"class":1175},"asyncapi:default#\u002Fcomponents\u002Fschemas\u002FEventMessage",[1126,1278,1279],{"class":1163},"\"\n",[974,1281,1282],{},[1054,1283,1284],{},"Settings:",[1286,1287,1288,1304],"table",{},[1289,1290,1291],"thead",{},[1292,1293,1294,1298,1301],"tr",{},[1295,1296,1297],"th",{},"Setting",[1295,1299,1300],{},"Type",[1295,1302,1303],{},"Description",[1305,1306,1307,1320,1333],"tbody",{},[1292,1308,1309,1314,1317],{},[1310,1311,1312],"td",{},[978,1313,1146],{},[1310,1315,1316],{},"enum (required)",[1310,1318,1319],{},"Event topic to subscribe to — enum populated at runtime from the live module registry",[1292,1321,1322,1327,1330],{},[1310,1323,1324],{},[978,1325,1326],{},"groupID",[1310,1328,1329],{},"string",[1310,1331,1332],{},"Consumer group — defaults to a flow-id-scoped auto-generated value",[1292,1334,1335,1340,1342],{},[1310,1336,1337],{},[978,1338,1339],{},"filter",[1310,1341,1329],{},[1310,1343,1344],{},"Optional expression evaluated by the event bus filter chain before the flow wakes",[974,1346,1347,1350,1351,1353,1354,1172],{},[1054,1348,1349],{},"Output port"," is always the generic ",[978,1352,994],{}," envelope. Payload shape\nvaries per event — refer to the live AsyncAPI document for per-event payload\nschemas. In edge transforms, project payload fields via ",[978,1355,1356],{},"{{.payload.*}}",[1021,1358,1360],{"className":1150,"code":1359,"language":1152,"meta":1029,"style":1029},"edges:\n  - from: on_user_signup\n    to:   send_welcome_email\n    when: \"output.name == 'Event'\"\n    transform:\n      to:   \"{{.payload.email}}\"\n      name: \"{{.payload.name}}\"\n",[978,1361,1362,1369,1382,1392,1406,1413,1428],{"__ignoreMap":1029},[1126,1363,1364,1367],{"class":1128,"line":10},[1126,1365,1366],{"class":1159},"edges",[1126,1368,1164],{"class":1163},[1126,1370,1371,1374,1377,1379],{"class":1128,"line":16},[1126,1372,1373],{"class":1163},"  -",[1126,1375,1376],{"class":1159}," from",[1126,1378,1172],{"class":1163},[1126,1380,1381],{"class":1175}," on_user_signup\n",[1126,1383,1384,1387,1389],{"class":1128,"line":22},[1126,1385,1386],{"class":1159},"    to",[1126,1388,1172],{"class":1163},[1126,1390,1391],{"class":1175},"   send_welcome_email\n",[1126,1393,1394,1397,1399,1401,1404],{"class":1128,"line":51},[1126,1395,1396],{"class":1159},"    when",[1126,1398,1172],{"class":1163},[1126,1400,1273],{"class":1163},[1126,1402,1403],{"class":1175},"output.name == 'Event'",[1126,1405,1279],{"class":1163},[1126,1407,1408,1411],{"class":1128,"line":57},[1126,1409,1410],{"class":1159},"    transform",[1126,1412,1164],{"class":1163},[1126,1414,1415,1418,1420,1423,1426],{"class":1128,"line":102},[1126,1416,1417],{"class":1159},"      to",[1126,1419,1172],{"class":1163},[1126,1421,1422],{"class":1163},"   \"",[1126,1424,1425],{"class":1175},"{{.payload.email}}",[1126,1427,1279],{"class":1163},[1126,1429,1430,1433,1435,1437,1440],{"class":1128,"line":108},[1126,1431,1432],{"class":1159},"      name",[1126,1434,1172],{"class":1163},[1126,1436,1273],{"class":1163},[1126,1438,1439],{"class":1175},"{{.payload.name}}",[1126,1441,1279],{"class":1163},[1016,1443,1445],{"id":1444},"how-the-live-enum-works","How the live enum works",[974,1447,1448,1451,1452,1455,1456,1459,1460,1463,1464,1467,1468,1471,1472,1475],{},[978,1449,1450],{},"go-flowdsl\u002Fnodes\u002Fmodule.go"," overrides ",[978,1453,1454],{},"FlowDSLNodes()"," on its ",[978,1457,1458],{},"Module",". At\nspec-build time it walks ",[978,1461,1462],{},"registry.IRModules()",", collects every declared event\nname across all loaded modules, and injects them as the ",[978,1465,1466],{},"enum"," on\n",[978,1469,1470],{},"settings.eventName"," in the node manifest. The module YAML ships with\n",[978,1473,1474],{},"enum: []"," — the list is always live.",[974,1477,1478],{},"New events show up in Studio automatically as soon as the corresponding module\nis loaded; no manifest regeneration required.",[1016,1480,1482],{"id":1481},"json-stream-ingestion-nodes","JSON stream ingestion nodes",[974,1484,1485],{},"Two companion nodes let a flow ingest arbitrary JSON from external sources\n(webhooks, NDJSON streams, raw message buses) and map the fields into one of\nthe system's declared events.",[974,1487,1488],{},"Typical pipeline:",[1021,1490,1493],{"className":1491,"code":1492,"language":1026},[1024],"redelay\u002Fjson-stream-source ──► redelay\u002Fjson-to-event ──► publish \u002F downstream action\n",[978,1494,1492],{"__ignoreMap":1029},[974,1496,1497,1498,1501],{},"The split lets you either chain both nodes for a full receive-map-publish\nflow, or use ",[978,1499,1500],{},"redelay\u002Fjson-to-event"," alone with JSON from any upstream node.",[1503,1504,1506,1509],"h4",{"id":1505},"redelayjson-stream-source-source",[978,1507,1508],{},"redelay\u002Fjson-stream-source"," (source)",[974,1511,1512],{},"Subscribes to an external JSON message stream and emits each decoded document\nas a packet. Does not interpret the payload.",[974,1514,1515,1516,1519],{},"Supported transports (",[978,1517,1518],{},"transport"," setting):",[1286,1521,1522,1531],{},[1289,1523,1524],{},[1292,1525,1526,1529],{},[1295,1527,1528],{},"Value",[1295,1530,1303],{},[1305,1532,1533,1546,1556,1566,1580],{},[1292,1534,1535,1540],{},[1310,1536,1537],{},[978,1538,1539],{},"http-webhook",[1310,1541,1542,1543],{},"Exposes an HTTP POST endpoint at the configured ",[978,1544,1545],{},"path",[1292,1547,1548,1553],{},[1310,1549,1550],{},[978,1551,1552],{},"ndjson",[1310,1554,1555],{},"Tails an NDJSON file\u002FURL",[1292,1557,1558,1563],{},[1310,1559,1560],{},[978,1561,1562],{},"kafka-raw",[1310,1564,1565],{},"Reads a Kafka topic where the value is raw JSON (no envelope)",[1292,1567,1568,1573],{},[1310,1569,1570],{},[978,1571,1572],{},"nats",[1310,1574,1575,1576,1579],{},"Subscribes to a NATS subject (core or JetStream); optional ",[978,1577,1578],{},"natsQueue"," for queue groups",[1292,1581,1582,1587],{},[1310,1583,1584],{},[978,1585,1586],{},"redis-stream",[1310,1588,1589],{},"Reads entries from a Redis Stream",[974,1591,1592,1593,995,1595,995,1598,995,1601,995,1603,995,1605,999,1608,1611,1612,1615,1616,1619,1620,995,1623,995,1626,995,1629,1632],{},"Common settings: ",[978,1594,1545],{},[978,1596,1597],{},"url",[978,1599,1600],{},"topic",[978,1602,1578],{},[978,1604,1326],{},[978,1606,1607],{},"authHeader",[978,1609,1610],{},"authSecret"," (secret), ",[978,1613,1614],{},"maxBodyBytes",". Emits on the ",[978,1617,1618],{},"message"," output port with\nfields ",[978,1621,1622],{},"raw",[978,1624,1625],{},"received_at",[978,1627,1628],{},"source_transport",[978,1630,1631],{},"headers",".",[1503,1634,1636,1638],{"id":1635},"redelayjson-to-event-transform",[978,1637,1500],{}," (transform)",[974,1640,1641,1642,1644,1645,1647],{},"Consumes a JSON document and transforms it into a typed Redelay event,\noptionally publishing it to the bus. Target event is picked via the\n",[978,1643,1146],{}," dropdown (live enum, same mechanism as ",[978,1646,1048],{},").",[974,1649,1650],{},"Mapping rules are JSONPath-style key\u002Fvalue pairs:",[1021,1652,1656],{"className":1653,"code":1654,"language":1655,"meta":1029,"style":1029},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"entity_id\":      \"$.customer.id\",\n  \"payload.email\":  \"$.customer.email_address\",\n  \"payload.status\": \"$.status || \\\"pending\\\"\"\n}\n","json",[978,1657,1658,1663,1686,1706,1733],{"__ignoreMap":1029},[1126,1659,1660],{"class":1128,"line":10},[1126,1661,1662],{"class":1163},"{\n",[1126,1664,1665,1668,1672,1674,1676,1679,1682,1684],{"class":1128,"line":16},[1126,1666,1667],{"class":1163},"  \"",[1126,1669,1671],{"class":1670},"spNyl","entity_id",[1126,1673,1233],{"class":1163},[1126,1675,1172],{"class":1163},[1126,1677,1678],{"class":1163},"      \"",[1126,1680,1681],{"class":1175},"$.customer.id",[1126,1683,1233],{"class":1163},[1126,1685,999],{"class":1163},[1126,1687,1688,1690,1693,1695,1697,1699,1702,1704],{"class":1128,"line":22},[1126,1689,1667],{"class":1163},[1126,1691,1692],{"class":1670},"payload.email",[1126,1694,1233],{"class":1163},[1126,1696,1172],{"class":1163},[1126,1698,1667],{"class":1163},[1126,1700,1701],{"class":1175},"$.customer.email_address",[1126,1703,1233],{"class":1163},[1126,1705,999],{"class":1163},[1126,1707,1708,1710,1713,1715,1717,1719,1722,1726,1729,1731],{"class":1128,"line":51},[1126,1709,1667],{"class":1163},[1126,1711,1712],{"class":1670},"payload.status",[1126,1714,1233],{"class":1163},[1126,1716,1172],{"class":1163},[1126,1718,1273],{"class":1163},[1126,1720,1721],{"class":1175},"$.status || ",[1126,1723,1725],{"class":1724},"sTEyZ","\\\"",[1126,1727,1728],{"class":1175},"pending",[1126,1730,1725],{"class":1724},[1126,1732,1279],{"class":1163},[1126,1734,1735],{"class":1128,"line":57},[1126,1736,1737],{"class":1163},"}\n",[974,1739,1740,1741,1743,1744,1743,1747,999,1750,995,1753,995,1756,1759,1760,1763,1764,1767],{},"Settings: ",[978,1742,1146],{}," (required), ",[978,1745,1746],{},"mapping",[978,1748,1749],{},"actorType",[978,1751,1752],{},"actorID",[978,1754,1755],{},"publish",[978,1757,1758],{},"strict",". Two outputs: ",[978,1761,1762],{},"event"," (the constructed envelope)\nand ",[978,1765,1766],{},"error"," (emitted when mapping fails — required fields missing, invalid\nJSONPath, etc.).",[974,1769,1770,1771,1774,1775,1778,1779,1781],{},"When ",[978,1772,1773],{},"publish=true",", the transformed event is published to the bus ",[1054,1776,1777],{},"in\naddition"," to being emitted on the ",[978,1780,1762],{}," output port.",[1783,1784],"hr",{},[982,1786,1788],{"id":1787},"consumer-auto-wiring","Consumer auto-wiring",[974,1790,1791,1792,1795,1796,1799],{},"When using the auto-wire pattern (",[978,1793,1794],{},"import _ \"github.com\u002Fredelay\u002Fgo-events\u002Fmodule\"","), the\nframework automatically discovers and registers all consumer subscriptions declared by other\nmodules. No manual ",[978,1797,1798],{},"bus.Register()"," call is needed anywhere in your code.",[974,1801,1802],{},[1054,1803,1804],{},"How it works:",[1806,1807,1808,1859,1877],"ol",{},[1809,1810,1811,1812,1815,1816,1819,1820],"li",{},"Each module that wants to consume events implements ",[978,1813,1814],{},"Consumers()"," from the ",[978,1817,1818],{},"EventsProvider"," interface:\n",[1021,1821,1823],{"className":1120,"code":1822,"language":1122,"meta":1029,"style":1029},"func (m *Module) Consumers() []*modules.ConsumerRegistration {\n    return []*modules.ConsumerRegistration{{\n        Topic:   \"email.send\",\n        GroupID: \"email-sender\",\n        Handler: m.handleEmailSend,\n    }}\n}\n",[978,1824,1825,1830,1835,1840,1845,1850,1855],{"__ignoreMap":1029},[1126,1826,1827],{"class":1128,"line":10},[1126,1828,1829],{},"func (m *Module) Consumers() []*modules.ConsumerRegistration {\n",[1126,1831,1832],{"class":1128,"line":16},[1126,1833,1834],{},"    return []*modules.ConsumerRegistration{{\n",[1126,1836,1837],{"class":1128,"line":22},[1126,1838,1839],{},"        Topic:   \"email.send\",\n",[1126,1841,1842],{"class":1128,"line":51},[1126,1843,1844],{},"        GroupID: \"email-sender\",\n",[1126,1846,1847],{"class":1128,"line":57},[1126,1848,1849],{},"        Handler: m.handleEmailSend,\n",[1126,1851,1852],{"class":1128,"line":102},[1126,1853,1854],{},"    }}\n",[1126,1856,1857],{"class":1128,"line":108},[1126,1858,1737],{},[1809,1860,1861,1862,1865,1866,1869,1870,1872,1873,1876],{},"During the ",[978,1863,1864],{},"Configure"," lifecycle phase (before ",[978,1867,1868],{},"Startup","), the events module iterates all registered modules, finds every ",[978,1871,1818],{},", and calls ",[978,1874,1875],{},"bus.Register(reg)"," for each declared consumer.",[1809,1878,1879,1882,1883,1885],{},[978,1880,1881],{},"bus.Start()"," is called in ",[978,1884,1868],{}," — all consumers are already registered and wired to the transport.",[974,1887,1888,1889,1891],{},"This means adding a new consumer to any module is a one-step change: return it from ",[978,1890,1814],{},". The rest is automatic.",[1783,1893],{},[982,1895,1897],{"id":1896},"bootstrap-patterns","Bootstrap patterns",[1016,1899,1901],{"id":1900},"auto-wire-recommended","Auto-wire (recommended)",[1021,1903,1905],{"className":1120,"code":1904,"language":1122,"meta":1029,"style":1029},"import (\n    _ \"github.com\u002Fredelay\u002Fgo-events\u002Fmodule\"  \u002F\u002F registers factory\n)\n\ninst, _ := app.Bootstrap() \u002F\u002F EventBus auto-created from TRANSPORT env\napp.Run(inst, server.Default(inst))\n",[978,1906,1907,1912,1917,1922,1928,1933],{"__ignoreMap":1029},[1126,1908,1909],{"class":1128,"line":10},[1126,1910,1911],{},"import (\n",[1126,1913,1914],{"class":1128,"line":16},[1126,1915,1916],{},"    _ \"github.com\u002Fredelay\u002Fgo-events\u002Fmodule\"  \u002F\u002F registers factory\n",[1126,1918,1919],{"class":1128,"line":22},[1126,1920,1921],{},")\n",[1126,1923,1924],{"class":1128,"line":51},[1126,1925,1927],{"emptyLinePlaceholder":1926},true,"\n",[1126,1929,1930],{"class":1128,"line":57},[1126,1931,1932],{},"inst, _ := app.Bootstrap() \u002F\u002F EventBus auto-created from TRANSPORT env\n",[1126,1934,1935],{"class":1128,"line":102},[1126,1936,1937],{},"app.Run(inst, server.Default(inst))\n",[974,1939,1045,1940,1943,1944,1947,1948,1951],{},[978,1941,1942],{},"TRANSPORT"," environment variable selects the backend (",[978,1945,1946],{},"kafka"," by default). An explicit\n",[978,1949,1950],{},"app.WithEventBus(bus)"," always takes priority over the auto-wired bus.",[1016,1953,1955],{"id":1954},"manual-wiring","Manual wiring",[1021,1957,1959],{"className":1120,"code":1958,"language":1122,"meta":1029,"style":1029},"import (\n    \"github.com\u002Fredelay\u002Fgo-events\u002Feventbus\"\n    \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fkafka\"\n)\n\nt, err := kafka.NewFromEnv()\nbus := eventbus.New(t)\ninst, _ := app.Bootstrap(app.WithEventBus(bus))\n",[978,1960,1961,1965,1970,1975,1979,1983,1988,1993],{"__ignoreMap":1029},[1126,1962,1963],{"class":1128,"line":10},[1126,1964,1911],{},[1126,1966,1967],{"class":1128,"line":16},[1126,1968,1969],{},"    \"github.com\u002Fredelay\u002Fgo-events\u002Feventbus\"\n",[1126,1971,1972],{"class":1128,"line":22},[1126,1973,1974],{},"    \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fkafka\"\n",[1126,1976,1977],{"class":1128,"line":51},[1126,1978,1921],{},[1126,1980,1981],{"class":1128,"line":57},[1126,1982,1927],{"emptyLinePlaceholder":1926},[1126,1984,1985],{"class":1128,"line":102},[1126,1986,1987],{},"t, err := kafka.NewFromEnv()\n",[1126,1989,1990],{"class":1128,"line":108},[1126,1991,1992],{},"bus := eventbus.New(t)\n",[1126,1994,1995],{"class":1128,"line":114},[1126,1996,1997],{},"inst, _ := app.Bootstrap(app.WithEventBus(bus))\n",[1016,1999,2001],{"id":2000},"standalone-worker-no-full-framework","Standalone worker (no full framework)",[1021,2003,2005],{"className":1120,"code":2004,"language":1122,"meta":1029,"style":1029},"import (\n    \"github.com\u002Fredelay\u002Fgo-events\u002Fcore\"\n    \"github.com\u002Fredelay\u002Fgo-events\u002Feventbus\"\n    \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fkafka\"\n)\n\n\u002F\u002F Only core + eventbus + transport — no mongo-driver, chi, JWT, zap.\nt, _ := kafka.NewFromEnv()\nbus := eventbus.New(t)\nbus.Register(&core.ConsumerRegistration{\n    Topic:   \"user.created\",\n    GroupID: \"my-worker\",\n    Handler: func(ctx context.Context, msg *core.EventMessage) error { ... },\n})\nbus.Start(ctx)\n",[978,2006,2007,2011,2016,2020,2024,2028,2032,2037,2042,2046,2051,2056,2061,2066,2071],{"__ignoreMap":1029},[1126,2008,2009],{"class":1128,"line":10},[1126,2010,1911],{},[1126,2012,2013],{"class":1128,"line":16},[1126,2014,2015],{},"    \"github.com\u002Fredelay\u002Fgo-events\u002Fcore\"\n",[1126,2017,2018],{"class":1128,"line":22},[1126,2019,1969],{},[1126,2021,2022],{"class":1128,"line":51},[1126,2023,1974],{},[1126,2025,2026],{"class":1128,"line":57},[1126,2027,1921],{},[1126,2029,2030],{"class":1128,"line":102},[1126,2031,1927],{"emptyLinePlaceholder":1926},[1126,2033,2034],{"class":1128,"line":108},[1126,2035,2036],{},"\u002F\u002F Only core + eventbus + transport — no mongo-driver, chi, JWT, zap.\n",[1126,2038,2039],{"class":1128,"line":114},[1126,2040,2041],{},"t, _ := kafka.NewFromEnv()\n",[1126,2043,2044],{"class":1128,"line":120},[1126,2045,1992],{},[1126,2047,2048],{"class":1128,"line":181},[1126,2049,2050],{},"bus.Register(&core.ConsumerRegistration{\n",[1126,2052,2053],{"class":1128,"line":186},[1126,2054,2055],{},"    Topic:   \"user.created\",\n",[1126,2057,2058],{"class":1128,"line":191},[1126,2059,2060],{},"    GroupID: \"my-worker\",\n",[1126,2062,2063],{"class":1128,"line":197},[1126,2064,2065],{},"    Handler: func(ctx context.Context, msg *core.EventMessage) error { ... },\n",[1126,2067,2068],{"class":1128,"line":203},[1126,2069,2070],{},"})\n",[1126,2072,2073],{"class":1128,"line":214},[1126,2074,2075],{},"bus.Start(ctx)\n",[982,2077,2079],{"id":2078},"transport-backends","Transport backends",[1016,2081,2083],{"id":2082},"newfromenv-recommended","NewFromEnv() (recommended)",[974,2085,2086,2087,2090],{},"Every transport exposes a ",[978,2088,2089],{},"NewFromEnv()"," constructor that reads all settings from environment variables:",[1021,2092,2094],{"className":1120,"code":2093,"language":1122,"meta":1029,"style":1029},"\u002F\u002F Pick one:\nt, err := kafka.NewFromEnv()  \u002F\u002F reads KAFKA_BOOTSTRAP_SERVERS, KAFKA_SASL_*, ...\nt, err := nats.NewFromEnv()   \u002F\u002F reads NATS_URL, NATS_JETSTREAM, NATS_CREDENTIALS_FILE, ...\nt, err := redis.NewFromEnv()  \u002F\u002F reads REDIS_STREAMS_URL, REDIS_STREAMS_BATCH_SIZE, ...\n\nbus := eventbus.New(t)\n",[978,2095,2096,2101,2106,2111,2116,2120],{"__ignoreMap":1029},[1126,2097,2098],{"class":1128,"line":10},[1126,2099,2100],{},"\u002F\u002F Pick one:\n",[1126,2102,2103],{"class":1128,"line":16},[1126,2104,2105],{},"t, err := kafka.NewFromEnv()  \u002F\u002F reads KAFKA_BOOTSTRAP_SERVERS, KAFKA_SASL_*, ...\n",[1126,2107,2108],{"class":1128,"line":22},[1126,2109,2110],{},"t, err := nats.NewFromEnv()   \u002F\u002F reads NATS_URL, NATS_JETSTREAM, NATS_CREDENTIALS_FILE, ...\n",[1126,2112,2113],{"class":1128,"line":51},[1126,2114,2115],{},"t, err := redis.NewFromEnv()  \u002F\u002F reads REDIS_STREAMS_URL, REDIS_STREAMS_BATCH_SIZE, ...\n",[1126,2117,2118],{"class":1128,"line":57},[1126,2119,1927],{"emptyLinePlaceholder":1926},[1126,2121,2122],{"class":1128,"line":102},[1126,2123,1992],{},[974,2125,2126,2127,2130],{},"See ",[2128,2129,38],"a",{"href":39}," for the full environment variable reference and cluster configuration.",[1016,2132,2133],{"id":1946},"Kafka",[1021,2135,2137],{"className":1120,"code":2136,"language":1122,"meta":1029,"style":1029},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fkafka\"\n\nt, err := kafka.New(kafka.Config{\n    Brokers:  []string{\"kafka:9092\"},\n    GroupID:  \"my-service\",\n    ClientID: \"my-service\",\n    \u002F\u002F SASL for managed Kafka (Confluent Cloud, MSK, Aiven):\n    \u002F\u002F SASL: &kafka.SASLConfig{\n    \u002F\u002F     Mechanism: kafka.SASLMechanismSCRAMSHA256,\n    \u002F\u002F     Username:  \"user\",\n    \u002F\u002F     Password:  \"secret\",\n    \u002F\u002F },\n})\n",[978,2138,2139,2144,2148,2153,2158,2163,2168,2173,2178,2183,2188,2193,2198],{"__ignoreMap":1029},[1126,2140,2141],{"class":1128,"line":10},[1126,2142,2143],{},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fkafka\"\n",[1126,2145,2146],{"class":1128,"line":16},[1126,2147,1927],{"emptyLinePlaceholder":1926},[1126,2149,2150],{"class":1128,"line":22},[1126,2151,2152],{},"t, err := kafka.New(kafka.Config{\n",[1126,2154,2155],{"class":1128,"line":51},[1126,2156,2157],{},"    Brokers:  []string{\"kafka:9092\"},\n",[1126,2159,2160],{"class":1128,"line":57},[1126,2161,2162],{},"    GroupID:  \"my-service\",\n",[1126,2164,2165],{"class":1128,"line":102},[1126,2166,2167],{},"    ClientID: \"my-service\",\n",[1126,2169,2170],{"class":1128,"line":108},[1126,2171,2172],{},"    \u002F\u002F SASL for managed Kafka (Confluent Cloud, MSK, Aiven):\n",[1126,2174,2175],{"class":1128,"line":114},[1126,2176,2177],{},"    \u002F\u002F SASL: &kafka.SASLConfig{\n",[1126,2179,2180],{"class":1128,"line":120},[1126,2181,2182],{},"    \u002F\u002F     Mechanism: kafka.SASLMechanismSCRAMSHA256,\n",[1126,2184,2185],{"class":1128,"line":181},[1126,2186,2187],{},"    \u002F\u002F     Username:  \"user\",\n",[1126,2189,2190],{"class":1128,"line":186},[1126,2191,2192],{},"    \u002F\u002F     Password:  \"secret\",\n",[1126,2194,2195],{"class":1128,"line":191},[1126,2196,2197],{},"    \u002F\u002F },\n",[1126,2199,2200],{"class":1128,"line":197},[1126,2201,2070],{},[1016,2203,2204],{"id":1572},"NATS",[1021,2206,2208],{"className":1120,"code":2207,"language":1122,"meta":1029,"style":1029},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fnats\"\n\n\u002F\u002F Core pub\u002Fsub (ephemeral — no persistence):\nt, err := nats.New(nats.Config{\n    URL:          \"nats:\u002F\u002Flocalhost:4222\",\n    UseJetStream: false,\n})\n\n\u002F\u002F JetStream (durable — persistent, consumer groups, replay):\nt, err := nats.New(nats.Config{\n    URL:          \"nats:\u002F\u002Fnats1:4222,nats:\u002F\u002Fnats2:4222\",  \u002F\u002F cluster\n    UseJetStream: true,\n    AckWait:      30 * time.Second,\n    MaxDeliver:   3,\n})\n",[978,2209,2210,2215,2219,2224,2229,2234,2239,2243,2247,2252,2256,2261,2266,2271,2276],{"__ignoreMap":1029},[1126,2211,2212],{"class":1128,"line":10},[1126,2213,2214],{},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fnats\"\n",[1126,2216,2217],{"class":1128,"line":16},[1126,2218,1927],{"emptyLinePlaceholder":1926},[1126,2220,2221],{"class":1128,"line":22},[1126,2222,2223],{},"\u002F\u002F Core pub\u002Fsub (ephemeral — no persistence):\n",[1126,2225,2226],{"class":1128,"line":51},[1126,2227,2228],{},"t, err := nats.New(nats.Config{\n",[1126,2230,2231],{"class":1128,"line":57},[1126,2232,2233],{},"    URL:          \"nats:\u002F\u002Flocalhost:4222\",\n",[1126,2235,2236],{"class":1128,"line":102},[1126,2237,2238],{},"    UseJetStream: false,\n",[1126,2240,2241],{"class":1128,"line":108},[1126,2242,2070],{},[1126,2244,2245],{"class":1128,"line":114},[1126,2246,1927],{"emptyLinePlaceholder":1926},[1126,2248,2249],{"class":1128,"line":120},[1126,2250,2251],{},"\u002F\u002F JetStream (durable — persistent, consumer groups, replay):\n",[1126,2253,2254],{"class":1128,"line":181},[1126,2255,2228],{},[1126,2257,2258],{"class":1128,"line":186},[1126,2259,2260],{},"    URL:          \"nats:\u002F\u002Fnats1:4222,nats:\u002F\u002Fnats2:4222\",  \u002F\u002F cluster\n",[1126,2262,2263],{"class":1128,"line":191},[1126,2264,2265],{},"    UseJetStream: true,\n",[1126,2267,2268],{"class":1128,"line":197},[1126,2269,2270],{},"    AckWait:      30 * time.Second,\n",[1126,2272,2273],{"class":1128,"line":203},[1126,2274,2275],{},"    MaxDeliver:   3,\n",[1126,2277,2278],{"class":1128,"line":214},[1126,2279,2070],{},[974,2281,2282,2283,2286,2287,2290,2291,2294,2295,2298,2299,2302],{},"JetStream ",[1054,2284,2285],{},"auto-creates streams"," on demand — no manual NATS admin needed. A\nstream is provisioned before the first ",[978,2288,2289],{},"QueueSubscribe"," ",[1054,2292,2293],{},"and"," before the first\n",[978,2296,2297],{},"Publish"," to a subject. The publish-side provisioning matters: without it,\nJetStream rejects a publish to a subject that has no stream, so publishing only\nworked for topics the same process happened to subscribe to first — an event\nconsumed by another service, or by nothing yet, failed with ",[1092,2300,2301],{},"\"no response from\nstream\"",". The stream-existence check is cached per subject, so it costs one\nround-trip per new topic, not one per message.",[1016,2304,2306],{"id":2305},"redis-streams","Redis Streams",[1021,2308,2310],{"className":1120,"code":2309,"language":1122,"meta":1029,"style":1029},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fredis\"\n\nt, err := redis.New(redis.Config{\n    Addr:          \"redis:6379\",\n    BlockDuration: 200 * time.Millisecond,\n    BatchSize:     10,\n    MaxLen:        10_000,\n})\n",[978,2311,2312,2317,2321,2326,2331,2336,2341,2346],{"__ignoreMap":1029},[1126,2313,2314],{"class":1128,"line":10},[1126,2315,2316],{},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fredis\"\n",[1126,2318,2319],{"class":1128,"line":16},[1126,2320,1927],{"emptyLinePlaceholder":1926},[1126,2322,2323],{"class":1128,"line":22},[1126,2324,2325],{},"t, err := redis.New(redis.Config{\n",[1126,2327,2328],{"class":1128,"line":51},[1126,2329,2330],{},"    Addr:          \"redis:6379\",\n",[1126,2332,2333],{"class":1128,"line":57},[1126,2334,2335],{},"    BlockDuration: 200 * time.Millisecond,\n",[1126,2337,2338],{"class":1128,"line":102},[1126,2339,2340],{},"    BatchSize:     10,\n",[1126,2342,2343],{"class":1128,"line":108},[1126,2344,2345],{},"    MaxLen:        10_000,\n",[1126,2347,2348],{"class":1128,"line":114},[1126,2349,2070],{},[974,2351,2352,2353,2356],{},"Uses XADD \u002F XREADGROUP under the hood. Consumer group semantics: each ",[978,2354,2355],{},"GroupID"," receives exactly one delivery across all replicas.",[1016,2358,2360],{"id":2359},"memory-for-tests","Memory (for tests)",[1021,2362,2364],{"className":1120,"code":2363,"language":1122,"meta":1029,"style":1029},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fmemory\"\n\ntr := memory.New()\n\u002F\u002F Full consumer-group semantics: each group gets the message,\n\u002F\u002F round-robin dispatch within a group.\n",[978,2365,2366,2371,2375,2380,2385],{"__ignoreMap":1029},[1126,2367,2368],{"class":1128,"line":10},[1126,2369,2370],{},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftransport\u002Fmemory\"\n",[1126,2372,2373],{"class":1128,"line":16},[1126,2374,1927],{"emptyLinePlaceholder":1926},[1126,2376,2377],{"class":1128,"line":22},[1126,2378,2379],{},"tr := memory.New()\n",[1126,2381,2382],{"class":1128,"line":51},[1126,2383,2384],{},"\u002F\u002F Full consumer-group semantics: each group gets the message,\n",[1126,2386,2387],{"class":1128,"line":57},[1126,2388,2389],{},"\u002F\u002F round-robin dispatch within a group.\n",[974,2391,2392],{},"No infrastructure required. Use for unit tests and fast feedback loops.",[982,2394,990],{"id":2395},"eventbus",[1021,2397,2399],{"className":1120,"code":2398,"language":1122,"meta":1029,"style":1029},"import \"github.com\u002Fredelay\u002Fgo-events\u002Feventbus\"\n\nbus := eventbus.New(t)          \u002F\u002F t is any transport.Transport\nbus.UsePublish(eventbus.LoggingPublishMiddleware)\nbus.UseConsume(eventbus.LoggingConsumeMiddleware)\n",[978,2400,2401,2406,2410,2415,2420],{"__ignoreMap":1029},[1126,2402,2403],{"class":1128,"line":10},[1126,2404,2405],{},"import \"github.com\u002Fredelay\u002Fgo-events\u002Feventbus\"\n",[1126,2407,2408],{"class":1128,"line":16},[1126,2409,1927],{"emptyLinePlaceholder":1926},[1126,2411,2412],{"class":1128,"line":22},[1126,2413,2414],{},"bus := eventbus.New(t)          \u002F\u002F t is any transport.Transport\n",[1126,2416,2417],{"class":1128,"line":51},[1126,2418,2419],{},"bus.UsePublish(eventbus.LoggingPublishMiddleware)\n",[1126,2421,2422],{"class":1128,"line":57},[1126,2423,2424],{},"bus.UseConsume(eventbus.LoggingConsumeMiddleware)\n",[1016,2426,2428],{"id":2427},"key-methods","Key methods",[1286,2430,2431,2440],{},[1289,2432,2433],{},[1292,2434,2435,2438],{},[1295,2436,2437],{},"Method",[1295,2439,1303],{},[1305,2441,2442,2452,2462,2472,2482,2492,2502,2512],{},[1292,2443,2444,2449],{},[1310,2445,2446],{},[978,2447,2448],{},"New(t)",[1310,2450,2451],{},"Create EventBus wrapping transport t",[1292,2453,2454,2459],{},[1310,2455,2456],{},[978,2457,2458],{},"UsePublish(mw...)",[1310,2460,2461],{},"Append publish middleware",[1292,2463,2464,2469],{},[1310,2465,2466],{},[978,2467,2468],{},"UseConsume(mw...)",[1310,2470,2471],{},"Append consume middleware",[1292,2473,2474,2479],{},[1310,2475,2476],{},[978,2477,2478],{},"Register(reg)",[1310,2480,2481],{},"Register a ConsumerRegistration",[1292,2483,2484,2489],{},[1310,2485,2486],{},[978,2487,2488],{},"Start(ctx)",[1310,2490,2491],{},"Wire registrations to transport and start consuming",[1292,2493,2494,2499],{},[1310,2495,2496],{},[978,2497,2498],{},"Stop(ctx)",[1310,2500,2501],{},"Stop consuming",[1292,2503,2504,2509],{},[1310,2505,2506],{},[978,2507,2508],{},"Publish(ctx, msg)",[1310,2510,2511],{},"Publish a modules.EventMessage",[1292,2513,2514,2519],{},[1310,2515,2516],{},[978,2517,2518],{},"Close()",[1310,2520,2521],{},"Close the underlying transport",[1016,2523,2525],{"id":2524},"built-in-middleware","Built-in middleware",[1286,2527,2528,2541],{},[1289,2529,2530],{},[1292,2531,2532,2535,2538],{},[1295,2533,2534],{},"Middleware",[1295,2536,2537],{},"Side",[1295,2539,2540],{},"Effect",[1305,2542,2543,2559,2575,2587],{},[1292,2544,2545,2550,2552],{},[1310,2546,2547],{},[978,2548,2549],{},"CorrelationPublishMiddleware",[1310,2551,2297],{},[1310,2553,2554,2555,2558],{},"Sets ",[978,2556,2557],{},"correlation_id"," header from context (default)",[1292,2560,2561,2566,2569],{},[1310,2562,2563],{},[978,2564,2565],{},"CorrelationConsumeMiddleware",[1310,2567,2568],{},"Consume",[1310,2570,2571,2572,2574],{},"Injects ",[978,2573,2557],{}," from message into context (default)",[1292,2576,2577,2582,2584],{},[1310,2578,2579],{},[978,2580,2581],{},"LoggingPublishMiddleware",[1310,2583,2297],{},[1310,2585,2586],{},"Logs entity_type, action, latency",[1292,2588,2589,2594,2596],{},[1310,2590,2591],{},[978,2592,2593],{},"LoggingConsumeMiddleware",[1310,2595,2568],{},[1310,2597,2586],{},[1016,2599,2601],{"id":2600},"context-helpers","Context helpers",[1021,2603,2605],{"className":1120,"code":2604,"language":1122,"meta":1029,"style":1029},"ctx = eventbus.WithCorrelationID(ctx, \"req-abc\")\ncid := eventbus.CorrelationIDFromContext(ctx) \u002F\u002F \"req-abc\"\n",[978,2606,2607,2612],{"__ignoreMap":1029},[1126,2608,2609],{"class":1128,"line":10},[1126,2610,2611],{},"ctx = eventbus.WithCorrelationID(ctx, \"req-abc\")\n",[1126,2613,2614],{"class":1128,"line":16},[1126,2615,2616],{},"cid := eventbus.CorrelationIDFromContext(ctx) \u002F\u002F \"req-abc\"\n",[982,2618,2620],{"id":2619},"typed-event-definitions","Typed event definitions",[974,2622,2623,2624,2627],{},"Import ",[978,2625,2626],{},"github.com\u002Fredelay\u002Fgo-events\u002Ftyped"," to declare strongly-typed\nevent definitions with JSON-serialised payloads.",[1021,2629,2631],{"className":1120,"code":2630,"language":1122,"meta":1029,"style":1029},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftyped\"\n\ntype UserCreatedPayload struct {\n    ID    string `json:\"id\"`\n    Email string `json:\"email\"`\n}\n\nvar UserCreatedEvent = typed.EventDefinition[UserCreatedPayload]{\n    Name:       \"user.created\",\n    EntityType: \"user\",\n    Action:     \"created\",\n    Topic:      \"user.created\",\n}\n\nmsg, err := UserCreatedEvent.NewMessage(\n    user.ID,\n    typed.Actor{Type: typed.ActorTypeUser, ID: actorID},\n    UserCreatedPayload{ID: user.ID, Email: user.Email},\n)\nbus.Publish(ctx, msg)\n",[978,2632,2633,2638,2642,2647,2652,2657,2661,2665,2670,2675,2680,2685,2690,2694,2698,2703,2708,2713,2718,2722],{"__ignoreMap":1029},[1126,2634,2635],{"class":1128,"line":10},[1126,2636,2637],{},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ftyped\"\n",[1126,2639,2640],{"class":1128,"line":16},[1126,2641,1927],{"emptyLinePlaceholder":1926},[1126,2643,2644],{"class":1128,"line":22},[1126,2645,2646],{},"type UserCreatedPayload struct {\n",[1126,2648,2649],{"class":1128,"line":51},[1126,2650,2651],{},"    ID    string `json:\"id\"`\n",[1126,2653,2654],{"class":1128,"line":57},[1126,2655,2656],{},"    Email string `json:\"email\"`\n",[1126,2658,2659],{"class":1128,"line":102},[1126,2660,1737],{},[1126,2662,2663],{"class":1128,"line":108},[1126,2664,1927],{"emptyLinePlaceholder":1926},[1126,2666,2667],{"class":1128,"line":114},[1126,2668,2669],{},"var UserCreatedEvent = typed.EventDefinition[UserCreatedPayload]{\n",[1126,2671,2672],{"class":1128,"line":120},[1126,2673,2674],{},"    Name:       \"user.created\",\n",[1126,2676,2677],{"class":1128,"line":181},[1126,2678,2679],{},"    EntityType: \"user\",\n",[1126,2681,2682],{"class":1128,"line":186},[1126,2683,2684],{},"    Action:     \"created\",\n",[1126,2686,2687],{"class":1128,"line":191},[1126,2688,2689],{},"    Topic:      \"user.created\",\n",[1126,2691,2692],{"class":1128,"line":197},[1126,2693,1737],{},[1126,2695,2696],{"class":1128,"line":203},[1126,2697,1927],{"emptyLinePlaceholder":1926},[1126,2699,2700],{"class":1128,"line":214},[1126,2701,2702],{},"msg, err := UserCreatedEvent.NewMessage(\n",[1126,2704,2705],{"class":1128,"line":223},[1126,2706,2707],{},"    user.ID,\n",[1126,2709,2710],{"class":1128,"line":229},[1126,2711,2712],{},"    typed.Actor{Type: typed.ActorTypeUser, ID: actorID},\n",[1126,2714,2715],{"class":1128,"line":234},[1126,2716,2717],{},"    UserCreatedPayload{ID: user.ID, Email: user.Email},\n",[1126,2719,2720],{"class":1128,"line":240},[1126,2721,1921],{},[1126,2723,2724],{"class":1128,"line":246},[1126,2725,2726],{},"bus.Publish(ctx, msg)\n",[974,2728,2729,2732],{},[978,2730,2731],{},"MustNewMessage"," panics instead of returning an error — tests only.",[1016,2734,2736],{"id":2735},"where-the-pieces-live","Where the pieces live",[1286,2738,2739,2748],{},[1289,2740,2741],{},[1292,2742,2743,2745],{},[1295,2744,1300],{},[1295,2746,2747],{},"Package",[1305,2749,2750,2771],{},[1292,2751,2752,2766],{},[1310,2753,2754,995,2757,995,2760,995,2763],{},[978,2755,2756],{},"EventDefinition[T]",[978,2758,2759],{},"Actor",[978,2761,2762],{},"ActorType*",[978,2764,2765],{},"SystemActor",[1310,2767,2768],{},[978,2769,2770],{},"go-events\u002Ftyped",[1292,2772,2773,2782],{},[1310,2774,2775,2778,2779],{},[978,2776,2777],{},"EmailSendPayload"," + ",[978,2780,2781],{},"EmailSendEvent",[1310,2783,2784],{},[978,2785,2786],{},"go-module-email\u002Fevents",[974,2788,2789,2790,2793,2794,2797,2798,2800],{},"Implementation sits in ",[978,2791,2792],{},"go-framework\u002Fruntime\u002Fevents"," (stdlib + uuid,\nsibling to ",[978,2795,2796],{},"runtime\u002Ftransport","). ",[978,2799,2770],{}," re-exports from\nthere so neither direction introduces a module cycle.",[982,2802,2804],{"id":2803},"filters","Filters",[1021,2806,2808],{"className":1120,"code":2807,"language":1122,"meta":1029,"style":1029},"import \"github.com\u002Fredelay\u002Fgo-events\u002Ffilter\"\n",[978,2809,2810],{"__ignoreMap":1029},[1126,2811,2812],{"class":1128,"line":10},[1126,2813,2807],{},[1286,2815,2816,2825],{},[1289,2817,2818],{},[1292,2819,2820,2823],{},[1295,2821,2822],{},"Filter",[1295,2824,1303],{},[1305,2826,2827,2841,2851,2863,2873,2883,2893,2903,2913],{},[1292,2828,2829,2834],{},[1310,2830,2831],{},[978,2832,2833],{},"HeaderFilter{Key, Value}",[1310,2835,2836,2837,2840],{},"Match header",[1126,2838,2839],{},"Key"," == Value",[1292,2842,2843,2848],{},[1310,2844,2845],{},[978,2846,2847],{},"ActionFilter{EntityType, Action}",[1310,2849,2850],{},"Match entity_type + action",[1292,2852,2853,2858],{},[1310,2854,2855],{},[978,2856,2857],{},"RegexFilter{Key, Pattern}",[1310,2859,2836,2860,2862],{},[1126,2861,2839],{}," against regexp",[1292,2864,2865,2870],{},[1310,2866,2867],{},[978,2868,2869],{},"CompositeFilter{Filters, Op}",[1310,2871,2872],{},"AND \u002F OR combinator",[1292,2874,2875,2880],{},[1310,2876,2877],{},[978,2878,2879],{},"PrefixFilter{Prefix}",[1310,2881,2882],{},"EntityType starts with prefix",[1292,2884,2885,2890],{},[1310,2886,2887],{},[978,2888,2889],{},"FuncFilter{Fn}",[1310,2891,2892],{},"Custom predicate",[1292,2894,2895,2900],{},[1310,2896,2897],{},[978,2898,2899],{},"All(filters...)",[1310,2901,2902],{},"Shorthand for AND composite",[1292,2904,2905,2910],{},[1310,2906,2907],{},[978,2908,2909],{},"Any(filters...)",[1310,2911,2912],{},"Shorthand for OR composite",[1292,2914,2915,2920],{},[1310,2916,2917],{},[978,2918,2919],{},"Func(fn)",[1310,2921,2922],{},"Shorthand for FuncFilter",[974,2924,2925],{},"Using a filter in a ConsumerRegistration:",[1021,2927,2929],{"className":1120,"code":2928,"language":1122,"meta":1029,"style":1029},"bus.Register(&modules.ConsumerRegistration{\n    Topic:   \"events\",\n    GroupID: \"g\",\n    Filter:  filter.All(&filter.ActionFilter{EntityType: \"user\", Action: \"created\"}).Matches,\n    Handler: ...,\n})\n",[978,2930,2931,2936,2941,2946,2951,2956],{"__ignoreMap":1029},[1126,2932,2933],{"class":1128,"line":10},[1126,2934,2935],{},"bus.Register(&modules.ConsumerRegistration{\n",[1126,2937,2938],{"class":1128,"line":16},[1126,2939,2940],{},"    Topic:   \"events\",\n",[1126,2942,2943],{"class":1128,"line":22},[1126,2944,2945],{},"    GroupID: \"g\",\n",[1126,2947,2948],{"class":1128,"line":51},[1126,2949,2950],{},"    Filter:  filter.All(&filter.ActionFilter{EntityType: \"user\", Action: \"created\"}).Matches,\n",[1126,2952,2953],{"class":1128,"line":57},[1126,2954,2955],{},"    Handler: ...,\n",[1126,2957,2958],{"class":1128,"line":102},[1126,2959,2070],{},[982,2961,994],{"id":2962},"eventmessage",[974,2964,2965,2967,2968,2970,2971,2973,2974,2976],{},[978,2966,994],{}," is defined in ",[978,2969,1005],{}," and aliased in both\n",[978,2972,1009],{}," and ",[978,2975,1013],{}," — all three import paths refer to the same type.",[1021,2978,2980],{"className":1120,"code":2979,"language":1122,"meta":1029,"style":1029},"type EventMessage struct {\n    ID            string            `json:\"event_id\"`\n    CorrelationID string            `json:\"correlation_id,omitempty\"`\n    Timestamp     string            `json:\"timestamp\"`\n    EntityType    string            `json:\"entity_type\"`\n    EntityID      string            `json:\"entity_id\"`\n    Action        string            `json:\"action\"`\n    ActorType     string            `json:\"actor_type,omitempty\"`\n    ActorID       string            `json:\"actor_id,omitempty\"`\n    Payload       []byte            `json:\"payload\"`\n    Headers       map[string]string `json:\"headers,omitempty\"`\n}\n",[978,2981,2982,2987,2992,2997,3002,3007,3012,3017,3022,3027,3032,3037],{"__ignoreMap":1029},[1126,2983,2984],{"class":1128,"line":10},[1126,2985,2986],{},"type EventMessage struct {\n",[1126,2988,2989],{"class":1128,"line":16},[1126,2990,2991],{},"    ID            string            `json:\"event_id\"`\n",[1126,2993,2994],{"class":1128,"line":22},[1126,2995,2996],{},"    CorrelationID string            `json:\"correlation_id,omitempty\"`\n",[1126,2998,2999],{"class":1128,"line":51},[1126,3000,3001],{},"    Timestamp     string            `json:\"timestamp\"`\n",[1126,3003,3004],{"class":1128,"line":57},[1126,3005,3006],{},"    EntityType    string            `json:\"entity_type\"`\n",[1126,3008,3009],{"class":1128,"line":102},[1126,3010,3011],{},"    EntityID      string            `json:\"entity_id\"`\n",[1126,3013,3014],{"class":1128,"line":108},[1126,3015,3016],{},"    Action        string            `json:\"action\"`\n",[1126,3018,3019],{"class":1128,"line":114},[1126,3020,3021],{},"    ActorType     string            `json:\"actor_type,omitempty\"`\n",[1126,3023,3024],{"class":1128,"line":120},[1126,3025,3026],{},"    ActorID       string            `json:\"actor_id,omitempty\"`\n",[1126,3028,3029],{"class":1128,"line":181},[1126,3030,3031],{},"    Payload       []byte            `json:\"payload\"`\n",[1126,3033,3034],{"class":1128,"line":186},[1126,3035,3036],{},"    Headers       map[string]string `json:\"headers,omitempty\"`\n",[1126,3038,3039],{"class":1128,"line":191},[1126,3040,1737],{},[974,3042,3043],{},"Extract a typed payload:",[1021,3045,3047],{"className":1120,"code":3046,"language":1122,"meta":1029,"style":1029},"var p OrderCreatedPayload\njson.Unmarshal(msg.Payload, &p)\n",[978,3048,3049,3054],{"__ignoreMap":1029},[1126,3050,3051],{"class":1128,"line":10},[1126,3052,3053],{},"var p OrderCreatedPayload\n",[1126,3055,3056],{"class":1128,"line":16},[1126,3057,3058],{},"json.Unmarshal(msg.Payload, &p)\n",[982,3060,3062],{"id":3061},"legacy-packages-backward-compat","Legacy packages (backward compat)",[1286,3064,3065,3073],{},[1289,3066,3067],{},[1292,3068,3069,3071],{},[1295,3070,2747],{},[1295,3072,1303],{},[1305,3074,3075,3088,3101,3122,3132],{},[1292,3076,3077,3082],{},[1310,3078,3079],{},[978,3080,3081],{},"consumer\u002F",[1310,3083,3084,3087],{},[978,3085,3086],{},"EventConsumer"," — direct sarama consumer group with handler registry",[1292,3089,3090,3095],{},[1310,3091,3092],{},[978,3093,3094],{},"producer\u002F",[1310,3096,3097,3100],{},[978,3098,3099],{},"EventProducer"," — direct sarama sync producer",[1292,3102,3103,3108],{},[1310,3104,3105],{},[978,3106,3107],{},"messages\u002F",[1310,3109,3110,995,3113,995,3116,995,3119],{},[978,3111,3112],{},"BaseEventMessage",[978,3114,3115],{},"TypedEventMessage[T]",[978,3117,3118],{},"FlexTime",[978,3120,3121],{},"EventDefinition",[1292,3123,3124,3129],{},[1310,3125,3126],{},[978,3127,3128],{},"schema\u002F",[1310,3130,3131],{},"AsyncAPI schema registry + JSON Schema validator",[1292,3133,3134,3139],{},[1310,3135,3136],{},[978,3137,3138],{},"client.go",[1310,3140,3141,3144],{},[978,3142,3143],{},"EventClient"," — legacy top-level API",[974,3146,3147,3148,2973,3151,1632],{},"These remain for backward compatibility. New code should use ",[978,3149,3150],{},"eventbus\u002F",[978,3152,3153],{},"transport\u002F",[982,3155,3157],{"id":3156},"configuration-env-vars","Configuration (env vars)",[1016,3159,2133],{"id":3160},"kafka-1",[1286,3162,3163,3175],{},[1289,3164,3165],{},[1292,3166,3167,3170,3172],{},[1295,3168,3169],{},"Variable",[1295,3171,1303],{},[1295,3173,3174],{},"Default",[1305,3176,3177,3192,3207,3233,3255,3269,3283],{},[1292,3178,3179,3184,3187],{},[1310,3180,3181],{},[978,3182,3183],{},"KAFKA_BOOTSTRAP_SERVERS",[1310,3185,3186],{},"Comma-separated broker list",[1310,3188,3189],{},[978,3190,3191],{},"localhost:9092",[1292,3193,3194,3199,3202],{},[1310,3195,3196],{},[978,3197,3198],{},"KAFKA_GROUP_ID",[1310,3200,3201],{},"Consumer group ID",[1310,3203,3204],{},[978,3205,3206],{},"\"\"",[1292,3208,3209,3214,3229],{},[1310,3210,3211],{},[978,3212,3213],{},"KAFKA_SECURITY_PROTOCOL",[1310,3215,3216,3219,3220,3219,3223,3219,3226],{},[978,3217,3218],{},"plaintext"," | ",[978,3221,3222],{},"sasl_plaintext",[978,3224,3225],{},"sasl_ssl",[978,3227,3228],{},"ssl",[1310,3230,3231],{},[978,3232,3218],{},[1292,3234,3235,3240,3251],{},[1310,3236,3237],{},[978,3238,3239],{},"KAFKA_SASL_MECHANISM",[1310,3241,3242,3219,3245,3219,3248],{},[978,3243,3244],{},"plain",[978,3246,3247],{},"scram-sha-256",[978,3249,3250],{},"scram-sha-512",[1310,3252,3253],{},[978,3254,3206],{},[1292,3256,3257,3262,3265],{},[1310,3258,3259],{},[978,3260,3261],{},"KAFKA_SASL_USERNAME",[1310,3263,3264],{},"SASL username",[1310,3266,3267],{},[978,3268,3206],{},[1292,3270,3271,3276,3279],{},[1310,3272,3273],{},[978,3274,3275],{},"KAFKA_SASL_PASSWORD",[1310,3277,3278],{},"SASL password",[1310,3280,3281],{},[978,3282,3206],{},[1292,3284,3285,3290,3293],{},[1310,3286,3287],{},[978,3288,3289],{},"ASYNCAPI_URL",[1310,3291,3292],{},"AsyncAPI schema endpoint for validation",[1310,3294,3295],{},[978,3296,3206],{},[1016,3298,2204],{"id":3299},"nats-1",[1286,3301,3302,3312],{},[1289,3303,3304],{},[1292,3305,3306,3308,3310],{},[1295,3307,3169],{},[1295,3309,1303],{},[1295,3311,3174],{},[1305,3313,3314,3329,3347,3365,3379,3395,3410],{},[1292,3315,3316,3321,3324],{},[1310,3317,3318],{},[978,3319,3320],{},"NATS_URL",[1310,3322,3323],{},"Server URL or comma-separated cluster URLs",[1310,3325,3326],{},[978,3327,3328],{},"nats:\u002F\u002Flocalhost:4222",[1292,3330,3331,3336,3342],{},[1310,3332,3333],{},[978,3334,3335],{},"NATS_JETSTREAM",[1310,3337,3338,3341],{},[978,3339,3340],{},"true"," to enable durable JetStream delivery",[1310,3343,3344],{},[978,3345,3346],{},"false",[1292,3348,3349,3354,3361],{},[1310,3350,3351],{},[978,3352,3353],{},"NATS_CREDENTIALS_FILE",[1310,3355,3356,3357,3360],{},"Path to ",[978,3358,3359],{},".creds"," file (NGS\u002FSynadia accounts)",[1310,3362,3363],{},[978,3364,3206],{},[1292,3366,3367,3372,3375],{},[1310,3368,3369],{},[978,3370,3371],{},"NATS_NKEY_FILE",[1310,3373,3374],{},"Path to NKey seed file",[1310,3376,3377],{},[978,3378,3206],{},[1292,3380,3381,3386,3391],{},[1310,3382,3383],{},[978,3384,3385],{},"NATS_TLS",[1310,3387,3388,3390],{},[978,3389,3340],{}," to require TLS",[1310,3392,3393],{},[978,3394,3346],{},[1292,3396,3397,3402,3405],{},[1310,3398,3399],{},[978,3400,3401],{},"NATS_ACK_WAIT_SECONDS",[1310,3403,3404],{},"JetStream ack wait before redelivery",[1310,3406,3407],{},[978,3408,3409],{},"30",[1292,3411,3412,3417,3424],{},[1310,3413,3414],{},[978,3415,3416],{},"NATS_MAX_DELIVER",[1310,3418,3419,3420,3423],{},"JetStream max redelivery attempts (",[978,3421,3422],{},"-1"," = unlimited)",[1310,3425,3426],{},[978,3427,3428],{},"3",[1016,3430,2306],{"id":3431},"redis-streams-1",[1286,3433,3434,3444],{},[1289,3435,3436],{},[1292,3437,3438,3440,3442],{},[1295,3439,3169],{},[1295,3441,1303],{},[1295,3443,3174],{},[1305,3445,3446,3468,3483,3498],{},[1292,3447,3448,3453,3463],{},[1310,3449,3450],{},[978,3451,3452],{},"REDIS_STREAMS_URL",[1310,3454,3455,3456,3459,3460],{},"Redis URL (",[978,3457,3458],{},"redis:\u002F\u002Fhost:port","); falls back to ",[978,3461,3462],{},"REDIS_URL",[1310,3464,3465],{},[978,3466,3467],{},"redis:\u002F\u002Flocalhost:6379",[1292,3469,3470,3475,3478],{},[1310,3471,3472],{},[978,3473,3474],{},"REDIS_STREAMS_BLOCK_MS",[1310,3476,3477],{},"XREADGROUP block duration in ms",[1310,3479,3480],{},[978,3481,3482],{},"200",[1292,3484,3485,3490,3493],{},[1310,3486,3487],{},[978,3488,3489],{},"REDIS_STREAMS_BATCH_SIZE",[1310,3491,3492],{},"Messages per XREADGROUP fetch",[1310,3494,3495],{},[978,3496,3497],{},"10",[1292,3499,3500,3505,3511],{},[1310,3501,3502],{},[978,3503,3504],{},"REDIS_STREAMS_MAX_LEN",[1310,3506,3507,3508,3423],{},"Max stream length (",[978,3509,3510],{},"0",[1310,3512,3513],{},[978,3514,3515],{},"10000",[982,3517,3519],{"id":3518},"build-and-test","Build and test",[1021,3521,3525],{"className":3522,"code":3523,"language":3524,"meta":1029,"style":1029},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Build all packages\ncd go-events && go build .\u002F...\n\n# Unit tests (no infrastructure needed)\ncd go-events && go test -count=1 -race .\u002F...\n# or via Makefile:\ncd go-events && make test\n\n# Integration tests (requires Docker — starts real Kafka, NATS, Redis containers)\ncd go-events && go test -tags integration -v -timeout 180s .\u002Ftransport\u002Fintegration\u002F\n# or via Makefile:\ncd go-events && make test-integration\n\n# Both\ncd go-events && make test-all\n","bash",[978,3526,3527,3532,3554,3558,3563,3584,3589,3603,3607,3612,3642,3646,3659,3663,3668],{"__ignoreMap":1029},[1126,3528,3529],{"class":1128,"line":10},[1126,3530,3531],{"class":1206},"# Build all packages\n",[1126,3533,3534,3538,3541,3544,3548,3551],{"class":1128,"line":16},[1126,3535,3537],{"class":3536},"s2Zo4","cd",[1126,3539,3540],{"class":1175}," go-events",[1126,3542,3543],{"class":1163}," &&",[1126,3545,3547],{"class":3546},"sBMFI"," go",[1126,3549,3550],{"class":1175}," build",[1126,3552,3553],{"class":1175}," .\u002F...\n",[1126,3555,3556],{"class":1128,"line":22},[1126,3557,1927],{"emptyLinePlaceholder":1926},[1126,3559,3560],{"class":1128,"line":51},[1126,3561,3562],{"class":1206},"# Unit tests (no infrastructure needed)\n",[1126,3564,3565,3567,3569,3571,3573,3576,3579,3582],{"class":1128,"line":57},[1126,3566,3537],{"class":3536},[1126,3568,3540],{"class":1175},[1126,3570,3543],{"class":1163},[1126,3572,3547],{"class":3546},[1126,3574,3575],{"class":1175}," test",[1126,3577,3578],{"class":1175}," -count=1",[1126,3580,3581],{"class":1175}," -race",[1126,3583,3553],{"class":1175},[1126,3585,3586],{"class":1128,"line":102},[1126,3587,3588],{"class":1206},"# or via Makefile:\n",[1126,3590,3591,3593,3595,3597,3600],{"class":1128,"line":108},[1126,3592,3537],{"class":3536},[1126,3594,3540],{"class":1175},[1126,3596,3543],{"class":1163},[1126,3598,3599],{"class":3546}," make",[1126,3601,3602],{"class":1175}," test\n",[1126,3604,3605],{"class":1128,"line":114},[1126,3606,1927],{"emptyLinePlaceholder":1926},[1126,3608,3609],{"class":1128,"line":120},[1126,3610,3611],{"class":1206},"# Integration tests (requires Docker — starts real Kafka, NATS, Redis containers)\n",[1126,3613,3614,3616,3618,3620,3622,3624,3627,3630,3633,3636,3639],{"class":1128,"line":181},[1126,3615,3537],{"class":3536},[1126,3617,3540],{"class":1175},[1126,3619,3543],{"class":1163},[1126,3621,3547],{"class":3546},[1126,3623,3575],{"class":1175},[1126,3625,3626],{"class":1175}," -tags",[1126,3628,3629],{"class":1175}," integration",[1126,3631,3632],{"class":1175}," -v",[1126,3634,3635],{"class":1175}," -timeout",[1126,3637,3638],{"class":1175}," 180s",[1126,3640,3641],{"class":1175}," .\u002Ftransport\u002Fintegration\u002F\n",[1126,3643,3644],{"class":1128,"line":186},[1126,3645,3588],{"class":1206},[1126,3647,3648,3650,3652,3654,3656],{"class":1128,"line":191},[1126,3649,3537],{"class":3536},[1126,3651,3540],{"class":1175},[1126,3653,3543],{"class":1163},[1126,3655,3599],{"class":3546},[1126,3657,3658],{"class":1175}," test-integration\n",[1126,3660,3661],{"class":1128,"line":197},[1126,3662,1927],{"emptyLinePlaceholder":1926},[1126,3664,3665],{"class":1128,"line":203},[1126,3666,3667],{"class":1206},"# Both\n",[1126,3669,3670,3672,3674,3676,3678],{"class":1128,"line":214},[1126,3671,3537],{"class":3536},[1126,3673,3540],{"class":1175},[1126,3675,3543],{"class":1163},[1126,3677,3599],{"class":3546},[1126,3679,3680],{"class":1175}," test-all\n",[974,3682,3683,3684,3687,3688,3694],{},"The integration test suite (",[978,3685,3686],{},"transport\u002Fintegration\u002F",") uses ",[2128,3689,3693],{"href":3690,"rel":3691},"https:\u002F\u002Fgolang.testcontainers.org",[3692],"nofollow","testcontainers-go"," to spin up:",[1286,3696,3697,3707],{},[1289,3698,3699],{},[1292,3700,3701,3704],{},[1295,3702,3703],{},"Test",[1295,3705,3706],{},"Container",[1305,3708,3709,3719,3731,3743,3755],{},[1292,3710,3711,3716],{},[1310,3712,3713],{},[978,3714,3715],{},"TestMemoryTransport*",[1310,3717,3718],{},"None — in-process",[1292,3720,3721,3726],{},[1310,3722,3723],{},[978,3724,3725],{},"TestNATSCoreTransport*",[1310,3727,3728],{},[978,3729,3730],{},"nats:2-alpine",[1292,3732,3733,3738],{},[1310,3734,3735],{},[978,3736,3737],{},"TestNATSJetStreamTransport*",[1310,3739,3740,3742],{},[978,3741,3730],{}," (JetStream enabled)",[1292,3744,3745,3750],{},[1310,3746,3747],{},[978,3748,3749],{},"TestRedisStreamsTransport*",[1310,3751,3752],{},[978,3753,3754],{},"redis:7-alpine",[1292,3756,3757,3762],{},[1310,3758,3759],{},[978,3760,3761],{},"TestKafkaTransport*",[1310,3763,3764],{},[978,3765,3766],{},"confluentinc\u002Fconfluent-local:7.5.0",[974,3768,3769],{},"Each transport runs the same 5 scenarios: publish\u002Fsubscribe, consumer groups, filtered delivery, correlation ID propagation, graceful shutdown.",[3771,3772,3773],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":1029,"searchDepth":16,"depth":16,"links":3775},[3776,3779,3785,3786,3791,3798,3803,3806,3807,3808,3809,3814],{"id":984,"depth":16,"text":5,"children":3777},[3778],{"id":1018,"depth":22,"text":1019},{"id":1038,"depth":16,"text":3780,"children":3781},"FlowDSL integration — go-flowdsl\u002Fnodes",[3782,3783,3784],{"id":1139,"depth":22,"text":1140},{"id":1444,"depth":22,"text":1445},{"id":1481,"depth":22,"text":1482},{"id":1787,"depth":16,"text":1788},{"id":1896,"depth":16,"text":1897,"children":3787},[3788,3789,3790],{"id":1900,"depth":22,"text":1901},{"id":1954,"depth":22,"text":1955},{"id":2000,"depth":22,"text":2001},{"id":2078,"depth":16,"text":2079,"children":3792},[3793,3794,3795,3796,3797],{"id":2082,"depth":22,"text":2083},{"id":1946,"depth":22,"text":2133},{"id":1572,"depth":22,"text":2204},{"id":2305,"depth":22,"text":2306},{"id":2359,"depth":22,"text":2360},{"id":2395,"depth":16,"text":990,"children":3799},[3800,3801,3802],{"id":2427,"depth":22,"text":2428},{"id":2524,"depth":22,"text":2525},{"id":2600,"depth":22,"text":2601},{"id":2619,"depth":16,"text":2620,"children":3804},[3805],{"id":2735,"depth":22,"text":2736},{"id":2803,"depth":16,"text":2804},{"id":2962,"depth":16,"text":994},{"id":3061,"depth":16,"text":3062},{"id":3156,"depth":16,"text":3157,"children":3810},[3811,3812,3813],{"id":3160,"depth":22,"text":2133},{"id":3299,"depth":22,"text":2204},{"id":3431,"depth":22,"text":2306},{"id":3518,"depth":16,"text":3519},"Full API reference for the go-events library — transports, EventBus, filters, typed messages.","md",null,{},{"order":51,"icon":152},{"title":149,"description":3815},"pbahEd7Zo5oXLWGvDTx4BIGpYX-3zTsjPttz72MFN3Q",[3823,3825],{"title":144,"path":145,"stem":146,"description":3824,"order":22,"icon":147,"children":-1},"Domain addon modules: scheduler, settings, storage, notifications, verification, links, metrics, search, i18n, apilog, content, workers, coordination, websockets, and flowexec.",{"title":154,"path":155,"stem":156,"description":3826,"order":57,"icon":157,"children":-1},"Transactional email delivery for Redelay: SMTP, SendGrid, Mailgun, Mailjet, and SES backends, HTML templating, event-driven delivery.",1790332223783]