import assert from 'node:assert/strict'; import test from 'node:test'; import {Client, importMessage, attribute, text} from '../dist/browser.mjs'; const client=new Client(); const roundtrip=(kind,xml)=>{ const imported=importMessage(xml,client.stanzas,{}); assert.equal(imported.kind,kind); // The API exposes both a selected body and the full language collection. // For this fixture choose the language collection as the sole export input; // passing both representations concatenates text in Stanza 12.22.1. const output = {...imported.stanza}; if (output.archive?.item?.message) { output.archive = {...output.archive, item: {...output.archive.item, message: {...output.archive.item.message}}}; delete output.archive.item.message.body; } const emitted=client.stanzas.export(kind,output).toString(); const again=importMessage(emitted,client.stanzas,{}).stanza; return {stanza:imported.stanza,again,emitted}; }; for(const [name,kind,xml,check] of [ ['MAM result/forwarded stable IDs','message','synthetic',s=>{assert.equal(s.archive.id,'archive-1');assert.equal(s.archive.item.message.originId,'origin-1');assert.equal(s.archive.item.message.body,'synthetic');}], ['MUC join','presence','',s=>assert.equal(s.muc.type,'join')], ['Jingle signaling','iq','',s=>{assert.equal(s.jingle.action,'session-terminate');assert.equal(s.jingle.sid,'session-1');}], ['HTTP upload slot','iq','',s=>{assert.equal(s.httpUpload.download,'https://upload.example.invalid/get');}], ['legacy opaque OMEMO encoding','message','
AA==AA==
AA==
',s=>{assert.equal(s.omemo.header.sid,1);assert.equal(s.omemo.header.keys[0].rid,2);assert.equal(s.omemo.payload.toString('hex'),'00');}] ]) test(`${name}: real registry import/export`,()=>{const r=roundtrip(kind,xml);check(r.stanza);check(r.again);}); test('public plugin registry supports future opaque extension without vendor patch',()=>{ // Deliberately NOT a claimed OMEMO2 wire implementation or encryption result. client.use(c=>c.stanzas.define({namespace:'urn:luma:selection-spike:opaque',element:'opaque', path:'message.spikeOpaque',fields:{id:attribute('id'),value:text()}})); const r=roundtrip('message','synthetic-data'); assert.deepEqual(r.stanza.spikeOpaque,{id:'fixture-1',value:'synthetic-data'}); assert.deepEqual(r.again.spikeOpaque,r.stanza.spikeOpaque); const wrong=importMessage('ignored',client.stanzas,{}); assert.equal(wrong.stanza.spikeOpaque,undefined); }); test('record raw dual-body export behavior requiring explicit projection',()=>{ const r=importMessage('synthetic',client.stanzas,{}); const raw=client.stanzas.export('message',r.stanza).toString(); assert.equal(importMessage(raw,client.stanzas,{}).stanza.body,'syntheticsynthetic'); });