{"version":3,"file":"index.mjs","names":["createBaseContext"],"sources":["../../../../src/adapters/websocket/native/index.ts"],"sourcesContent":["import type { EventContext } from '../../../context'\nimport type { DirectionalEventa, Eventa } from '../../../eventa'\n\nimport { createContext as createBaseContext } from '../../../context'\nimport { and, defineEventa, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../../eventa'\nimport { generateWebsocketPayload, parseWebsocketPayload } from '../internal'\n\nexport const wsConnectedEvent = defineEventa<{ url: string }>()\nexport const wsDisconnectedEvent = defineEventa<{ url: string }>()\nexport const wsErrorEvent = defineEventa<{ error: unknown }>()\n\nexport function createContext(wsConn: WebSocket) {\n  const ctx = createBaseContext() as EventContext<any, { raw: { message?: any, open?: Event, error?: Event, close?: CloseEvent } }>\n\n  ctx.on(and(\n    matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n    matchBy('*'),\n  ), (event) => {\n    const data = JSON.stringify(generateWebsocketPayload(event.id, { ...defineOutboundEventa(event.type), ...event }))\n    wsConn.send(data)\n  })\n\n  wsConn.onmessage = (event) => {\n    try {\n      const { type, payload } = parseWebsocketPayload<Eventa<any>>(event.data)\n      ctx.emit(defineInboundEventa(type), payload.body, { raw: { message: event } })\n    }\n    catch (error) {\n      console.error('Failed to parse WebSocket message:', error)\n      ctx.emit(wsErrorEvent, { error }, { raw: { message: event } })\n    }\n  }\n\n  wsConn.onopen = (event) => {\n    ctx.emit(wsConnectedEvent, { url: wsConn.url }, { raw: { open: event } })\n  }\n\n  wsConn.onerror = (error) => {\n    // Socket-level error (not a per-message parse failure — those stay\n    // recoverable in `onmessage` above). Abort lifetime so any in-flight\n    // invoke rejects; emit the business event for non-invoke listeners.\n    ctx.abort(new Error('eventa: invoke cancelled, websocket error'))\n    ctx.emit(wsErrorEvent, { error }, { raw: { error } })\n  }\n\n  wsConn.onclose = (close) => {\n    ctx.abort(new Error(`eventa: invoke cancelled, websocket disconnected (${wsConn.url})`))\n    ctx.emit(wsDisconnectedEvent, { url: wsConn.url }, { raw: { close } })\n  }\n\n  return {\n    context: ctx,\n  }\n}\n"],"mappings":";;;AAOA,MAAa,mBAAmB,aAA8B;AAC9D,MAAa,sBAAsB,aAA8B;AACjE,MAAa,eAAe,aAAiC;AAE7D,SAAgB,cAAc,QAAmB;CAC/C,MAAM,MAAMA,gBAAkB;CAE9B,IAAI,GAAG,IACL,SAAS,MAA8B,EAAE,mBAAA,cAAmD,CAAC,EAAE,cAAc,GAC7G,QAAQ,GAAG,CACb,IAAI,UAAU;EACZ,MAAM,OAAO,KAAK,UAAU,yBAAyB,MAAM,IAAI;GAAE,GAAG,qBAAqB,MAAM,IAAI;GAAG,GAAG;EAAM,CAAC,CAAC;EACjH,OAAO,KAAK,IAAI;CAClB,CAAC;CAED,OAAO,aAAa,UAAU;EAC5B,IAAI;GACF,MAAM,EAAE,MAAM,YAAY,sBAAmC,MAAM,IAAI;GACvE,IAAI,KAAK,oBAAoB,IAAI,GAAG,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;EAC/E,SACO,OAAO;GACZ,QAAQ,MAAM,sCAAsC,KAAK;GACzD,IAAI,KAAK,cAAc,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;EAC/D;CACF;CAEA,OAAO,UAAU,UAAU;EACzB,IAAI,KAAK,kBAAkB,EAAE,KAAK,OAAO,IAAI,GAAG,EAAE,KAAK,EAAE,MAAM,MAAM,EAAE,CAAC;CAC1E;CAEA,OAAO,WAAW,UAAU;EAI1B,IAAI,sBAAM,IAAI,MAAM,2CAA2C,CAAC;EAChE,IAAI,KAAK,cAAc,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;CACtD;CAEA,OAAO,WAAW,UAAU;EAC1B,IAAI,sBAAM,IAAI,MAAM,qDAAqD,OAAO,IAAI,EAAE,CAAC;EACvF,IAAI,KAAK,qBAAqB,EAAE,KAAK,OAAO,IAAI,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;CACvE;CAEA,OAAO,EACL,SAAS,IACX;AACF"}