api.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { _converse } from '@converse/headless/core';
  2. import { generateFingerprint } from './utils.js';
  3. export default {
  4. /**
  5. * The "omemo" namespace groups methods relevant to OMEMO
  6. * encryption.
  7. *
  8. * @namespace _converse.api.omemo
  9. * @memberOf _converse.api
  10. */
  11. 'omemo': {
  12. /**
  13. * The "bundle" namespace groups methods relevant to the user's
  14. * OMEMO bundle.
  15. *
  16. * @namespace _converse.api.omemo.bundle
  17. * @memberOf _converse.api.omemo
  18. */
  19. 'bundle': {
  20. /**
  21. * Lets you generate a new OMEMO device bundle
  22. *
  23. * @method _converse.api.omemo.bundle.generate
  24. * @returns {promise} Promise which resolves once we have a result from the server.
  25. */
  26. 'generate': async () => {
  27. // Remove current device
  28. const devicelist = _converse.devicelists.get(_converse.bare_jid);
  29. const device_id = _converse.omemo_store.get('device_id');
  30. if (device_id) {
  31. const device = devicelist.devices.get(device_id);
  32. _converse.omemo_store.unset(device_id);
  33. if (device) {
  34. await new Promise(done => device.destroy({ 'success': done, 'error': done }));
  35. }
  36. devicelist.devices.trigger('remove');
  37. }
  38. // Generate new device bundle and publish
  39. // https://xmpp.org/extensions/attic/xep-0384-0.3.0.html#usecases-announcing
  40. await _converse.omemo_store.generateBundle();
  41. await devicelist.publishDevices();
  42. const device = devicelist.devices.get(_converse.omemo_store.get('device_id'));
  43. const fp = generateFingerprint(device);
  44. await _converse.omemo_store.publishBundle();
  45. return fp;
  46. }
  47. }
  48. }
  49. }