You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
jitsi-meet reads the meeting URL directly off the value api.http.post() resolves to, but that value is a wrapper, not the response body. So url is always undefined and every click on Add Jitsi Meeting fails with No url in response — even when the sidecar answered correctly with 200 {"url": "..."}.
Where
jitsi-meet/src/index.js (and the built index.js):
constdata=awaitslotApi.http.post("/api/jitsi",{ eventTitle });consturl=data?.url;// <- always undefinedif(!url)thrownewError("No url in response");
The host returns a wrapper, in lib/plugin-sandbox/host-api.ts:
constres=awaitapiFetch(url.pathname+url.search,{method: 'POST', headers,body: requestBody});constdata=awaitres.json().catch(()=>null);return{ok: res.ok,status: res.status, data };// <- the body is at .data
So the URL is at result.data.url, not result.url.
Steps to Reproduce
Run a sidecar at /api/jitsi that returns 200 with {"url": "https://meet.example.com/room"}.
Open a calendar event and click Add Jitsi Meeting.
Expected Behavior
The meeting link is written onto the event.
Actual Behavior
Toast: Could not create Jitsi meeting: No url in response. The sidecar logs a successful 200, so the failure is entirely client-side.
Suggested Fix
Read through the wrapper, tolerating both shapes in case the host contract changes again:
constresult=awaitslotApi.http.post("/api/jitsi",{ eventTitle });constpayload=result&&result.data!==undefined ? result.data : result;consturl=payload?.url;if(!url){conststatus=result?.status ? ` (HTTP ${result.status})` : "";constdetail=payload?.error ? `: ${payload.error}` : "";thrownewError(`the server did not return a meeting link${status}${detail}`);}
Surfacing result.status is worth doing on its own. The current No url in response is indistinguishable between "the sidecar is not deployed" (404), "the credential was rejected" (401) and "the response shape is wrong" — I chased the wrong one of those three for a while because the message hides the status the host already hands the plugin.
Bulwark Version
1.8.1
Additional Context
Verified against a sidecar returning 200 {"url": ...}: the request arrives and is answered correctly, and the plugin still throws. Applying the change above fixes it with no other modification.
Description
jitsi-meetreads the meeting URL directly off the valueapi.http.post()resolves to, but that value is a wrapper, not the response body. Sourlis alwaysundefinedand every click on Add Jitsi Meeting fails withNo url in response— even when the sidecar answered correctly with200 {"url": "..."}.Where
jitsi-meet/src/index.js(and the builtindex.js):The host returns a wrapper, in
lib/plugin-sandbox/host-api.ts:So the URL is at
result.data.url, notresult.url.Steps to Reproduce
/api/jitsithat returns200with{"url": "https://meet.example.com/room"}.jitsi-meet(use themainzip — the marketplace build cannot load at all, see [Bug]: Issues enabling external-recipient-warning, jitsi-meet and calendar-agenda #4).Expected Behavior
The meeting link is written onto the event.
Actual Behavior
Toast:
Could not create Jitsi meeting: No url in response. The sidecar logs a successful200, so the failure is entirely client-side.Suggested Fix
Read through the wrapper, tolerating both shapes in case the host contract changes again:
Surfacing
result.statusis worth doing on its own. The currentNo url in responseis indistinguishable between "the sidecar is not deployed" (404), "the credential was rejected" (401) and "the response shape is wrong" — I chased the wrong one of those three for a while because the message hides the status the host already hands the plugin.Bulwark Version
1.8.1
Additional Context
Verified against a sidecar returning
200 {"url": ...}: the request arrives and is answered correctly, and the plugin still throws. Applying the change above fixes it with no other modification.