import { test } from 'node:test'; import assert from 'node:assert/strict'; import { resolveCallPageUrl, resolveDesktopCallPageUrl } from './callPageUrl'; const URL_OK = 'https://call.chat.example.org/public/element-call/index.html'; test('uses an absolute https URL on the web', () => { assert.equal(resolveCallPageUrl(URL_OK, false), URL_OK); }); test('strips a query or hash (the app adds its own parameters)', () => { assert.equal(resolveCallPageUrl(`${URL_OK}?x=1#y`, false), URL_OK); }); test('allows http only on localhost (development)', () => { assert.equal( resolveCallPageUrl('http://127.0.0.1:5174/public/element-call/index.html', false), 'http://127.0.0.1:5174/public/element-call/index.html', ); assert.equal(resolveCallPageUrl('http://call.example.org/index.html', false), undefined); }); test('desktop keeps the bundled page', () => { assert.equal(resolveCallPageUrl(URL_OK, true), undefined); }); test('anything else falls back to the bundled page', () => { [ undefined, null, 42, '', ' ', 'not a url', '/public/element-call/index.html', 'http://call.chat.example.org/index.html', ['javascript', 'alert(1)'].join(':'), 'data:text/html,x', ].forEach((v) => assert.equal(resolveCallPageUrl(v, false), undefined, String(v))); }); const APP = 'http://localhost:44548'; const PAGE = '/public/element-call/index.html'; test('desktop: the bundled page from the loopback origin on the same port', () => { assert.equal( resolveDesktopCallPageUrl('http://127.0.0.1:44548', APP, '/'), `http://127.0.0.1:44548${PAGE}`, ); assert.equal( resolveDesktopCallPageUrl('http://127.0.0.1:44548/', APP, '/app/'), `http://127.0.0.1:44548/app${PAGE}`, ); }); test('desktop: unset or anything but same-port loopback http keeps the same-origin page', () => { [ undefined, '', 'http://127.0.0.1:44549', 'http://127.0.0.1', 'https://127.0.0.1:44548', 'http://localhost:44548', 'http://[::1]:44548', 'http://10.0.0.5:44548', 'https://call.chat.lotusguild.org', 'http://127.0.0.1:44548/evil/', 'http://127.0.0.1:44548/?x=1', 'http://user:pw@127.0.0.1:44548', 'not a url', 42, ].forEach((v) => assert.equal(resolveDesktopCallPageUrl(v, APP, '/'), undefined, String(v))); }); test('desktop: only when the app itself runs on http://localhost (release builds)', () => { const v = 'http://127.0.0.1:44548'; assert.equal(resolveDesktopCallPageUrl(v, 'tauri://localhost', '/'), undefined); assert.equal(resolveDesktopCallPageUrl(v, 'http://tauri.localhost', '/'), undefined); assert.equal(resolveDesktopCallPageUrl(v, 'https://chat.lotusguild.org', '/'), undefined); assert.equal(resolveDesktopCallPageUrl(v, 'http://localhost', '/'), undefined); });