mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-26 22:25:40 +00:00
fix: send initial message
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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} />;
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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, {
|
||||
|
||||
Reference in New Issue
Block a user