{"version":3,"file":"sse-protocol-BA0Cf6Xs.cjs","names":["timestamp: number","message: PingMessage","sessionId: string","message: WebSocketConnectedMessage","data: string","message: DataMessage","base64Data: string","message: BinaryDataMessage","error: string","message: WebSocketErrorMessage","code: number","reason: string","wasClean: boolean","message: WebSocketClosedMessage","secret: string","message: SessionSecretMessage","msg: SSEMessage"],"sources":["../src/sse-protocol.ts"],"sourcesContent":["/**\n * SSE Protocol for WebSocket-over-SSE communication\n *\n * This file defines the message types and encoding/decoding functions\n * for the Server-Sent Events protocol used between the proxy and SimulatedWebSocket.\n */\n\n// Message type definitions\nexport interface ConnectedMessage {\n  type: 'connected'\n  sessionId: string\n}\n\nexport interface PingMessage {\n  type: 'ping'\n  timestamp: number\n}\n\nexport interface WebSocketConnectedMessage {\n  type: 'websocket-connected'\n  sessionId: string\n  timestamp: number\n}\n\nexport interface DataMessage {\n  type: 'message'\n  data: string // Raw WebSocket data as string\n  timestamp: number\n}\n\nexport interface BinaryDataMessage {\n  type: 'binary-message'\n  data: string // Base64 encoded binary data\n  timestamp: number\n}\n\nexport interface WebSocketErrorMessage {\n  type: 'websocket-error'\n  error: string // Error message\n  timestamp: number\n}\n\nexport interface WebSocketClosedMessage {\n  type: 'websocket-closed'\n  code: number // WebSocket close code\n  reason: string // Close reason\n  wasClean: boolean // Whether the close was clean\n  timestamp: number\n}\n\nexport interface SessionSecretMessage {\n  type: 'session-secret'\n  secret: string // Session secret for authentication\n  timestamp: number\n}\n\n// Union type of all possible SSE messages\nexport type SSEMessage =\n  | ConnectedMessage\n  | PingMessage\n  | WebSocketConnectedMessage\n  | DataMessage\n  | BinaryDataMessage\n  | WebSocketErrorMessage\n  | WebSocketClosedMessage\n  | SessionSecretMessage\n\n// Encoding functions (for proxy to create messages)\nexport function encodePingMessage(timestamp: number): string {\n  const message: PingMessage = {\n    type: 'ping',\n    timestamp,\n  }\n  return JSON.stringify(message)\n}\n\nexport function encodeWebSocketConnectedMessage(sessionId: string, timestamp: number): string {\n  const message: WebSocketConnectedMessage = {\n    type: 'websocket-connected',\n    sessionId,\n    timestamp,\n  }\n  return JSON.stringify(message)\n}\n\nexport function encodeDataMessage(data: string, timestamp: number): string {\n  const message: DataMessage = {\n    type: 'message',\n    data,\n    timestamp,\n  }\n  return JSON.stringify(message)\n}\n\nexport function encodeBinaryDataMessage(base64Data: string, timestamp: number): string {\n  const message: BinaryDataMessage = {\n    type: 'binary-message',\n    data: base64Data,\n    timestamp,\n  }\n  return JSON.stringify(message)\n}\n\nexport function encodeWebSocketErrorMessage(error: string, timestamp: number): string {\n  const message: WebSocketErrorMessage = {\n    type: 'websocket-error',\n    error,\n    timestamp,\n  }\n  return JSON.stringify(message)\n}\n\nexport function encodeWebSocketClosedMessage(code: number, reason: string, wasClean: boolean, timestamp: number): string {\n  const message: WebSocketClosedMessage = {\n    type: 'websocket-closed',\n    code,\n    reason,\n    wasClean,\n    timestamp,\n  }\n  return JSON.stringify(message)\n}\n\nexport function encodeSessionSecretMessage(secret: string, timestamp: number): string {\n  const message: SessionSecretMessage = {\n    type: 'session-secret',\n    secret,\n    timestamp,\n  }\n  return JSON.stringify(message)\n}\n\n// Decoding function (for SimulatedWebSocket to parse messages)\nexport function decodeSSEMessage(data: string): SSEMessage {\n  try {\n    const parsed = JSON.parse(data)\n\n    // Basic validation that it's an SSE message\n    if (!parsed || typeof parsed !== 'object' || typeof parsed.type !== 'string') {\n      throw new Error('Invalid SSE message format')\n    }\n\n    // TODO: Could add more specific validation here if needed\n    return parsed as SSEMessage\n  } catch (error) {\n    throw new Error(`Failed to decode SSE message: ${error instanceof Error ? error.message : 'Unknown error'}`)\n  }\n}\n\n// Type guard functions for runtime type checking\nexport function isConnectedMessage(msg: SSEMessage): msg is ConnectedMessage {\n  return msg.type === 'connected'\n}\n\nexport function isPingMessage(msg: SSEMessage): msg is PingMessage {\n  return msg.type === 'ping'\n}\n\nexport function isWebSocketConnectedMessage(msg: SSEMessage): msg is WebSocketConnectedMessage {\n  return msg.type === 'websocket-connected'\n}\n\nexport function isDataMessage(msg: SSEMessage): msg is DataMessage {\n  return msg.type === 'message'\n}\n\nexport function isBinaryDataMessage(msg: SSEMessage): msg is BinaryDataMessage {\n  return msg.type === 'binary-message'\n}\n\nexport function isWebSocketErrorMessage(msg: SSEMessage): msg is WebSocketErrorMessage {\n  return msg.type === 'websocket-error'\n}\n\nexport function isWebSocketClosedMessage(msg: SSEMessage): msg is WebSocketClosedMessage {\n  return msg.type === 'websocket-closed'\n}\n\nexport function isSessionSecretMessage(msg: SSEMessage): msg is SessionSecretMessage {\n  return msg.type === 'session-secret'\n}\n"],"mappings":";;AAoEA,SAAgB,kBAAkBA,WAA2B;CAC3D,MAAMC,UAAuB;EAC3B,MAAM;EACN;CACD;AACD,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAgB,gCAAgCC,WAAmBF,WAA2B;CAC5F,MAAMG,UAAqC;EACzC,MAAM;EACN;EACA;CACD;AACD,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAgB,kBAAkBC,MAAcJ,WAA2B;CACzE,MAAMK,UAAuB;EAC3B,MAAM;EACN;EACA;CACD;AACD,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAgB,wBAAwBC,YAAoBN,WAA2B;CACrF,MAAMO,UAA6B;EACjC,MAAM;EACN,MAAM;EACN;CACD;AACD,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAgB,4BAA4BC,OAAeR,WAA2B;CACpF,MAAMS,UAAiC;EACrC,MAAM;EACN;EACA;CACD;AACD,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAgB,6BAA6BC,MAAcC,QAAgBC,UAAmBZ,WAA2B;CACvH,MAAMa,UAAkC;EACtC,MAAM;EACN;EACA;EACA;EACA;CACD;AACD,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAgB,2BAA2BC,QAAgBd,WAA2B;CACpF,MAAMe,UAAgC;EACpC,MAAM;EACN;EACA;CACD;AACD,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAGD,SAAgB,iBAAiBX,MAA0B;AACzD,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,KAAK;AAG/B,OAAK,iBAAiB,WAAW,mBAAmB,OAAO,SAAS,SAClE,OAAM,IAAI,MAAM;AAIlB,SAAO;CACR,SAAQ,OAAO;AACd,QAAM,IAAI,OAAO,gCAAgC,iBAAiB,QAAQ,MAAM,UAAU,gBAAgB;CAC3G;AACF;AAGD,SAAgB,mBAAmBY,KAA0C;AAC3E,QAAO,IAAI,SAAS;AACrB;AAED,SAAgB,cAAcA,KAAqC;AACjE,QAAO,IAAI,SAAS;AACrB;AAED,SAAgB,4BAA4BA,KAAmD;AAC7F,QAAO,IAAI,SAAS;AACrB;AAED,SAAgB,cAAcA,KAAqC;AACjE,QAAO,IAAI,SAAS;AACrB;AAED,SAAgB,oBAAoBA,KAA2C;AAC7E,QAAO,IAAI,SAAS;AACrB;AAED,SAAgB,wBAAwBA,KAA+C;AACrF,QAAO,IAAI,SAAS;AACrB;AAED,SAAgB,yBAAyBA,KAAgD;AACvF,QAAO,IAAI,SAAS;AACrB;AAED,SAAgB,uBAAuBA,KAA8C;AACnF,QAAO,IAAI,SAAS;AACrB"}