fix: send initial message

This commit is contained in:
Siddharth Gelera
2025-09-15 16:24:28 +05:30
parent 70f8305354
commit 5955a15d18
6 changed files with 33 additions and 6 deletions

View File

@@ -19,7 +19,6 @@ const WsQueryUrl = ({ item, collection, handleRun }) => {
// TODO: repear, better state for connecting
const [isConnecting, setIsConnecting] = useState(false);
const url = getPropertyFromDraftOrRequest(item, 'request.url');
const headers = getPropertyFromDraftOrRequest(item, 'request.headers') || [];
const saveShortcut = isMacOS() ? '⌘S' : 'Ctrl+S';
// Check connection status
@@ -39,6 +38,7 @@ const WsQueryUrl = ({ item, collection, handleRun }) => {
}, [item.uid]);
const onUrlChange = (value) => {
closeWsConnection(item.uid)
dispatch(
requestUrlChanged({
url: value,

View File

@@ -16,6 +16,16 @@ import ResponseLayoutToggle from '../ResponseLayoutToggle';
import Tab from 'components/Tab';
import WSMessagesList from './WSMessagesList';
const WSResult = ({ response }) => {
return response.isError ? (
<div className="text-red-500" style={{ whiteSpace: 'pre-line' }}>
{response.error}
</div>
) : (
<WSMessagesList messages={response.responses || []} />
);
};
const WSResponsePane = ({ item, collection }) => {
const dispatch = useDispatch();
const tabs = useSelector((state) => state.tabs.tabs);
@@ -40,7 +50,7 @@ const WSResponsePane = ({ item, collection }) => {
const getTabPanel = (tab) => {
switch (tab) {
case 'response': {
return <WSMessagesList messages={response.responses || []} />;
return <WSResult response={response} />;
}
case 'headers': {
return <WSResponseHeaders metadata={response.metadata} />;

View File

@@ -2806,7 +2806,12 @@ export const collectionsSlice = createSlice({
// Get current response state or create initial state
const currentResponse = item.response || initiatedWsResponse;
const timestamp = item?.requestSent?.timestamp;
let updatedResponse = { ...currentResponse, duration: Date.now() - (timestamp || Date.now()) };
let updatedResponse = { ...currentResponse,
isError: false,
error: '',
duration: Date.now() - (timestamp || Date.now())
};
// Process based on event type
switch (eventType) {
@@ -2832,6 +2837,8 @@ export const collectionsSlice = createSlice({
case 'close':
const { code, reason } = eventData;
updatedResponse.isError = false
updatedResponse.error = ''
updatedResponse.status = 'CLOSED';
updatedResponse.statusCode = code;
updatedResponse.statusText = wsStatusCodes[code] || 'CLOSED';

View File

@@ -240,7 +240,6 @@ export const sendWsRequest = (item, collection, environment, runtimeVariables) =
// The real response data will be handled by event listeners
resolve({
...initialState,
timeline: []
});
})
.catch((err) => reject(err));

View File

@@ -277,7 +277,7 @@ const registerWsEventHandlers = (window) => {
});
// Start a new WebSocket connection
ipcMain.handle('ws:start-connection', async (event, { request, collection, environment, runtimeVariables,settings }) => {
ipcMain.handle('ws:start-connection', async (event, { request, collection, environment, runtimeVariables, settings }) => {
try {
const requestCopy = cloneDeep(request);
const preparedRequest = await prepareWsRequest(requestCopy, collection, environment, runtimeVariables, {});
@@ -291,7 +291,7 @@ const registerWsEventHandlers = (window) => {
};
// Start WebSocket connection
await wsClient.startConnection({
const connectionInstance = await wsClient.startConnection({
request: preparedRequest,
collection,
options: {
@@ -301,6 +301,16 @@ const registerWsEventHandlers = (window) => {
}
});
// If the body already has messages then send it after connection
connectionInstance.on('open', () => {
const hasMessages = preparedRequest.body.ws.some(msg=>msg.content.length)
if (hasMessages) {
preparedRequest.body.ws.forEach((message) => {
wsClient.sendMessage(preparedRequest.uid, collection.uid, message.content);
});
}
});
sendEvent('ws:request', preparedRequest.uid, collection.uid, requestSent);
// Send OAuth credentials update if available

View File

@@ -131,6 +131,7 @@ class WsClient {
}, keepAliveInterval);
this.connectionKeepAlive.set(requestId, handle);
}
return wsConnection
} catch (error) {
console.error('Error creating WebSocket connection:', error);
this.eventCallback('ws:error', requestId, collectionUid, {