_.mjs raw

   1  // Package .
   2  // Generated by MoxieJS — Moxie JavaScript backend
   3  
   4  import * as $rt from './$runtime/index.mjs';
   5  
   6  import * as smesh$lol$web$common$helpers from './smesh_lol_web_common_helpers.mjs';
   7  import * as smesh$lol$web$common$jsbridge$node from './smesh_lol_web_common_jsbridge_node.mjs';
   8  import * as smesh$lol$web$common$jsbridge$schnorr from './smesh_lol_web_common_jsbridge_schnorr.mjs';
   9  import * as smesh$lol$web$common$jsbridge$subtle from './smesh_lol_web_common_jsbridge_subtle.mjs';
  10  import * as smesh$lol$web$common$marmot from './smesh_lol_web_common_marmot.mjs';
  11  import * as smesh$lol$web$common$mls from './smesh_lol_web_common_mls.mjs';
  12  import * as smesh$lol$web$common$nostr from './smesh_lol_web_common_nostr.mjs';
  13  
  14  // Package-level variables
  15  
  16  $rt.types.registerType('..state', {
  17    id: '..state',
  18    kind: 'struct',
  19    methods: new Map(),
  20    fields: [
  21      { name: 'nostrSec', type: '[32]byte', tag: '', embedded: false },
  22      { name: 'nostrPub', type: 'string', tag: '', embedded: false },
  23      { name: 'kpp', type: '*smesh.lol/web/common/mls.KeyPairPackage', tag: '', embedded: false },
  24      { name: 'gs', type: '*smesh.lol/web/common/marmot.GroupState', tag: '', embedded: false },
  25    ],
  26    zero: () => ({ nostrSec: $rt.builtin.makeSlice(32, 32, 0), nostrPub: '', kpp: null, gs: null }),
  27  });
  28  $rt.types.registerType('..response', {
  29    id: '..response',
  30    kind: 'struct',
  31    methods: new Map(),
  32    fields: [
  33      { name: 'ok', type: 'bool', tag: '', embedded: false },
  34      { name: 'err', type: 'string', tag: '', embedded: false },
  35      { name: 'eventJSON', type: 'string', tag: '', embedded: false },
  36      { name: 'rumorJSON', type: 'string', tag: '', embedded: false },
  37      { name: 'pubkey', type: 'string', tag: '', embedded: false },
  38      { name: 'content', type: 'string', tag: '', embedded: false },
  39      { name: 'kind', type: 'uint32', tag: '', embedded: false },
  40      { name: 'mlsGroupIDHex', type: 'string', tag: '', embedded: false },
  41      { name: 'nostrGroupIDHex', type: 'string', tag: '', embedded: false },
  42    ],
  43    zero: () => ({ ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }),
  44  });
  45  export function init() {
  46    return;
  47  }
  48  
  49  export async function main() {
  50    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
  51    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  52    $t1_2 = newState();
  53    $t0_1.$set($t1_2);
  54    $t2_3 = $t0_1.$get();
  55    $t3_4 = { $get() { return $t2_3.$get().nostrPub; }, $set(v) { const obj = $t2_3.$get(); obj.nostrPub = v; $t2_3.$set(obj); } };
  56    $t4_5 = $t3_4.$get();
  57    $t5_6 = smesh$lol$web$common$helpers.JsonString($t4_5);
  58    $t6_7 = ('{"ready":true,"pubkey":' + $t5_6);
  59    $t7_8 = ($t6_7 + '}');
  60    $t8_9 = smesh$lol$web$common$jsbridge$node.WriteLine($t7_8);
  61    $t9_10 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  62    $t10_11 = new $rt.channel.Channel(0);
  63    $t9_10.$set($t10_11);
  64    $t11_12 = main$1.bind(null, $t0_1);
  65    $t12_13 = smesh$lol$web$common$jsbridge$node.OnLine($t11_12);
  66    $t13_14 = main$2.bind(null, $t9_10);
  67    $t14_15 = smesh$lol$web$common$jsbridge$node.OnClose($t13_14);
  68    $t15_16 = $t9_10.$get();
  69    $t16_17 = (await $t15_16.recv()).value;
  70    return;
  71  }
  72  
  73  function main$1(s, line) {
  74    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
  75    let $block = 0;
  76    while (true) {
  77      switch ($block) {
  78        case 0: {
  79          $t0_1 = trimSpace(line);
  80          $t1_2 = $rt.builtin.len($t0_1);
  81          $t2_3 = ($t1_2 === 0);
  82          if ($t2_3) {
  83            $block = 1; break;
  84          }
  85          else {
  86            $block = 2; break;
  87          }
  88          break;
  89        }
  90        case 1: {
  91          return;
  92          break;
  93        }
  94        case 2: {
  95          $t3_4 = s.$get();
  96          $t4_5 = handle($t3_4, $t0_1);
  97          $t5_6 = serializeResponse($t4_5);
  98          $t6_7 = smesh$lol$web$common$jsbridge$node.WriteLine($t5_6);
  99          return;
 100          break;
 101        }
 102      }
 103    }
 104  }
 105  
 106  async function main$2(done) {
 107    let $t0_1;
 108    $t0_1 = done.$get();
 109    await $t0_1.send(true);
 110    return;
 111  }
 112  
 113  export function newState() {
 114    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
 115    let $block = 0;
 116    while (true) {
 117      switch ($block) {
 118        case 0: {
 119          $t0_1 = { $value: { nostrSec: $rt.builtin.makeSlice(32, 32, 0), nostrPub: '', kpp: null, gs: null }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 120          $t1_2 = { $get() { return $t0_1.$get().nostrSec; }, $set(v) { const obj = $t0_1.$get(); obj.nostrSec = v; $t0_1.$set(obj); } };
 121          $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
 122          $t3_4 = smesh$lol$web$common$jsbridge$subtle.RandomBytes($t2_3);
 123          $t4_5 = { $get() { return $t0_1.$get().nostrSec; }, $set(v) { const obj = $t0_1.$get(); obj.nostrSec = v; $t0_1.$set(obj); } };
 124          $t5_6 = $rt.builtin.sliceSlice($t4_5.$get(), undefined, undefined, undefined);
 125          $t6_7 = smesh$lol$web$common$jsbridge$schnorr.PubKeyFromSecKey($t5_6);
 126          $t7_8 = $t6_7[0];
 127          $t8_9 = $t6_7[1];
 128          if ($t8_9) {
 129            $block = 2; break;
 130          }
 131          else {
 132            $block = 1; break;
 133          }
 134          break;
 135        }
 136        case 1: {
 137          $t9_10 = $rt.types.makeInterface('string', 'mlsinterop: failed to derive pubkey');
 138          $rt.runtime.panic($t9_10);
 139          break;
 140        }
 141        case 2: {
 142          $t10_11 = smesh$lol$web$common$helpers.HexEncode($t7_8);
 143          $t11_12 = { $get() { return $t0_1.$get().nostrPub; }, $set(v) { const obj = $t0_1.$get(); obj.nostrPub = v; $t0_1.$set(obj); } };
 144          $t11_12.$set($t10_11);
 145          return $t0_1;
 146          break;
 147        }
 148      }
 149    }
 150  }
 151  
 152  export function handle(s, line) {
 153    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
 154    let $block = 0;
 155    while (true) {
 156      switch ($block) {
 157        case 0: {
 158          $t0_1 = smesh$lol$web$common$helpers.JsonGetString(line, 'cmd');
 159          $t1_2 = $rt.builtin.stringEqual($t0_1, 'generate_key_package');
 160          if ($t1_2) {
 161            $block = 1; break;
 162          }
 163          else {
 164            $block = 3; break;
 165          }
 166          break;
 167        }
 168        case 1: {
 169          $t2_3 = cmdGenerateKeyPackage(s, line);
 170          return $t2_3;
 171          break;
 172        }
 173        case 2: {
 174          $t3_4 = cmdProcessKeyPackage(line);
 175          return $t3_4;
 176          break;
 177        }
 178        case 3: {
 179          $t4_5 = $rt.builtin.stringEqual($t0_1, 'process_key_package');
 180          if ($t4_5) {
 181            $block = 2; break;
 182          }
 183          else {
 184            $block = 5; break;
 185          }
 186          break;
 187        }
 188        case 4: {
 189          $t5_6 = cmdCreateGroup(s, line);
 190          return $t5_6;
 191          break;
 192        }
 193        case 5: {
 194          $t6_7 = $rt.builtin.stringEqual($t0_1, 'create_group');
 195          if ($t6_7) {
 196            $block = 4; break;
 197          }
 198          else {
 199            $block = 7; break;
 200          }
 201          break;
 202        }
 203        case 6: {
 204          $t7_8 = cmdProcessWelcome(s, line);
 205          return $t7_8;
 206          break;
 207        }
 208        case 7: {
 209          $t8_9 = $rt.builtin.stringEqual($t0_1, 'process_welcome');
 210          if ($t8_9) {
 211            $block = 6; break;
 212          }
 213          else {
 214            $block = 9; break;
 215          }
 216          break;
 217        }
 218        case 8: {
 219          $t9_10 = cmdCreateMessage(s, line);
 220          return $t9_10;
 221          break;
 222        }
 223        case 9: {
 224          $t10_11 = $rt.builtin.stringEqual($t0_1, 'create_message');
 225          if ($t10_11) {
 226            $block = 8; break;
 227          }
 228          else {
 229            $block = 11; break;
 230          }
 231          break;
 232        }
 233        case 10: {
 234          $t11_12 = cmdProcessMessage(s, line);
 235          return $t11_12;
 236          break;
 237        }
 238        case 11: {
 239          $t12_13 = $rt.builtin.stringEqual($t0_1, 'process_message');
 240          if ($t12_13) {
 241            $block = 10; break;
 242          }
 243          else {
 244            $block = 13; break;
 245          }
 246          break;
 247        }
 248        case 12: {
 249          $t13_14 = cmdGetGroupInfo(s);
 250          return $t13_14;
 251          break;
 252        }
 253        case 13: {
 254          $t14_15 = $rt.builtin.stringEqual($t0_1, 'get_group_info');
 255          if ($t14_15) {
 256            $block = 12; break;
 257          }
 258          else {
 259            $block = 14; break;
 260          }
 261          break;
 262        }
 263        case 14: {
 264          $t15_16 = ('unknown cmd: ' + $t0_1);
 265          $t16_17 = errResponse($t15_16);
 266          return $t16_17;
 267          break;
 268        }
 269      }
 270    }
 271  }
 272  
 273  export function cmdGenerateKeyPackage(s, line) {
 274    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37;
 275    let $block = 0;
 276    while (true) {
 277      switch ($block) {
 278        case 0: {
 279          $t0_1 = smesh$lol$web$common$helpers.JsonGetString(line, 'relay');
 280          $t1_2 = smesh$lol$web$common$jsbridge$node.NowSeconds();
 281          $t2_3 = { $get() { return s.$get().nostrPub; }, $set(v) { const obj = s.$get(); obj.nostrPub = v; s.$set(obj); } };
 282          $t3_4 = $t2_3.$get();
 283          $t4_5 = smesh$lol$web$common$helpers.HexDecode($t3_4);
 284          $t5_6 = $rt.builtin.stringEqual($t4_5, null);
 285          if ($t5_6) {
 286            $block = 1; break;
 287          }
 288          else {
 289            $block = 2; break;
 290          }
 291          break;
 292        }
 293        case 1: {
 294          $t6_7 = errResponse('decode own pubkey');
 295          return $t6_7;
 296          break;
 297        }
 298        case 2: {
 299          $t7_8 = smesh$lol$web$common$marmot.GenerateKeyPackage($t4_5, $t1_2);
 300          $t8_9 = $t7_8[0];
 301          $t9_10 = $t7_8[1];
 302          $t10_11 = ($t9_10 !== null);
 303          if ($t10_11) {
 304            $block = 3; break;
 305          }
 306          else {
 307            $block = 4; break;
 308          }
 309          break;
 310        }
 311        case 3: {
 312          $t11_12 = $rt.types.methodCall($t9_10, 'Error', []);
 313          $t12_13 = ('generate key package: ' + $t11_12);
 314          $t13_14 = errResponse($t12_13);
 315          return $t13_14;
 316          break;
 317        }
 318        case 4: {
 319          $t14_15 = { $get() { return s.$get().kpp; }, $set(v) { const obj = s.$get(); obj.kpp = v; s.$set(obj); } };
 320          $t14_15.$set($t8_9);
 321          $t15_16 = !$rt.builtin.stringEqual($t0_1, '');
 322          if ($t15_16) {
 323            $block = 5; break;
 324          }
 325          else {
 326            $t19_20 = null;
 327            $block = 6; break;
 328          }
 329          break;
 330        }
 331        case 5: {
 332          $t16_17 = { $value: $rt.builtin.makeSlice(1, 1, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 333          $t17_18 = $t16_17.$get().addr(0);
 334          $t17_18.$set($t0_1);
 335          $t18_19 = $rt.builtin.sliceSlice($t16_17.$get(), undefined, undefined, undefined);
 336          $t19_20 = $t18_19;
 337          $block = 6; break;
 338          break;
 339        }
 340        case 6: {
 341          $t20_21 = { $get() { return s.$get().nostrSec; }, $set(v) { const obj = s.$get(); obj.nostrSec = v; s.$set(obj); } };
 342          $t21_22 = $t20_21.$get();
 343          $t22_23 = smesh$lol$web$common$marmot.KeyPackageToEvent($t8_9, $t21_22, $t1_2, $t19_20);
 344          $t23_24 = $t22_23[0];
 345          $t24_25 = $t22_23[1];
 346          $t25_26 = ($t24_25 !== null);
 347          if ($t25_26) {
 348            $block = 7; break;
 349          }
 350          else {
 351            $block = 8; break;
 352          }
 353          break;
 354        }
 355        case 7: {
 356          $t26_27 = $rt.types.methodCall($t24_25, 'Error', []);
 357          $t27_28 = ('build kind 443 event: ' + $t26_27);
 358          $t28_29 = errResponse($t27_28);
 359          return $t28_29;
 360          break;
 361        }
 362        case 8: {
 363          $t29_30 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 364          $t30_31 = okResponse();
 365          $t29_30.$set($rt.builtin.cloneValue($t30_31));
 366          $t31_32 = smesh$lol$web$common$nostr.Event$ToJSON($t23_24);
 367          $t32_33 = { $get() { return $t29_30.$get().eventJSON; }, $set(v) { const obj = $t29_30.$get(); obj.eventJSON = v; $t29_30.$set(obj); } };
 368          $t32_33.$set($t31_32);
 369          $t33_34 = { $get() { return s.$get().nostrPub; }, $set(v) { const obj = s.$get(); obj.nostrPub = v; s.$set(obj); } };
 370          $t34_35 = $t33_34.$get();
 371          $t35_36 = { $get() { return $t29_30.$get().pubkey; }, $set(v) { const obj = $t29_30.$get(); obj.pubkey = v; $t29_30.$set(obj); } };
 372          $t35_36.$set($t34_35);
 373          $t36_37 = $t29_30.$get();
 374          return $t36_37;
 375          break;
 376        }
 377      }
 378    }
 379  }
 380  
 381  export function cmdProcessKeyPackage(line) {
 382    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
 383    let $block = 0;
 384    while (true) {
 385      switch ($block) {
 386        case 0: {
 387          $t0_1 = smesh$lol$web$common$helpers.JsonGetString(line, 'event_json');
 388          $t1_2 = smesh$lol$web$common$nostr.ParseEvent($t0_1);
 389          $t2_3 = ($t1_2 === null);
 390          if ($t2_3) {
 391            $block = 1; break;
 392          }
 393          else {
 394            $block = 2; break;
 395          }
 396          break;
 397        }
 398        case 1: {
 399          $t3_4 = errResponse('parse kind 443 event JSON');
 400          return $t3_4;
 401          break;
 402        }
 403        case 2: {
 404          $t4_5 = { $get() { return $t1_2.$get().Kind; }, $set(v) { const obj = $t1_2.$get(); obj.Kind = v; $t1_2.$set(obj); } };
 405          $t5_6 = $t4_5.$get();
 406          $t6_7 = ($t5_6 !== 443);
 407          if ($t6_7) {
 408            $block = 3; break;
 409          }
 410          else {
 411            $block = 4; break;
 412          }
 413          break;
 414        }
 415        case 3: {
 416          $t7_8 = errResponse('wrong kind: expected 443');
 417          return $t7_8;
 418          break;
 419        }
 420        case 4: {
 421          $t8_9 = smesh$lol$web$common$marmot.EventToKeyPackage($t1_2);
 422          $t9_10 = $t8_9[0];
 423          $t10_11 = $t8_9[1];
 424          $t11_12 = ($t10_11 !== null);
 425          if ($t11_12) {
 426            $block = 5; break;
 427          }
 428          else {
 429            $block = 6; break;
 430          }
 431          break;
 432        }
 433        case 5: {
 434          $t12_13 = $rt.types.methodCall($t10_11, 'Error', []);
 435          $t13_14 = ('event to key package: ' + $t12_13);
 436          $t14_15 = errResponse($t13_14);
 437          return $t14_15;
 438          break;
 439        }
 440        case 6: {
 441          $t15_16 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 442          $t16_17 = okResponse();
 443          $t15_16.$set($rt.builtin.cloneValue($t16_17));
 444          $t17_18 = { $get() { return $t1_2.$get().PubKey; }, $set(v) { const obj = $t1_2.$get(); obj.PubKey = v; $t1_2.$set(obj); } };
 445          $t18_19 = $t17_18.$get();
 446          $t19_20 = { $get() { return $t15_16.$get().pubkey; }, $set(v) { const obj = $t15_16.$get(); obj.pubkey = v; $t15_16.$set(obj); } };
 447          $t19_20.$set($t18_19);
 448          $t20_21 = $t15_16.$get();
 449          return $t20_21;
 450          break;
 451        }
 452      }
 453    }
 454  }
 455  
 456  export function cmdCreateGroup(s, line) {
 457    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60;
 458    let $block = 0;
 459    while (true) {
 460      switch ($block) {
 461        case 0: {
 462          $t0_1 = { $get() { return s.$get().kpp; }, $set(v) { const obj = s.$get(); obj.kpp = v; s.$set(obj); } };
 463          $t1_2 = $t0_1.$get();
 464          $t2_3 = ($t1_2 === null);
 465          if ($t2_3) {
 466            $block = 1; break;
 467          }
 468          else {
 469            $block = 2; break;
 470          }
 471          break;
 472        }
 473        case 1: {
 474          $t3_4 = errResponse('no local key package — call generate_key_package first');
 475          return $t3_4;
 476          break;
 477        }
 478        case 2: {
 479          $t4_5 = smesh$lol$web$common$helpers.JsonGetString(line, 'member_kp_event_json');
 480          $t5_6 = smesh$lol$web$common$helpers.JsonGetString(line, 'name');
 481          $t6_7 = smesh$lol$web$common$helpers.JsonGetString(line, 'relay');
 482          $t7_8 = smesh$lol$web$common$nostr.ParseEvent($t4_5);
 483          $t8_9 = ($t7_8 === null);
 484          if ($t8_9) {
 485            $block = 3; break;
 486          }
 487          else {
 488            $block = 4; break;
 489          }
 490          break;
 491        }
 492        case 3: {
 493          $t9_10 = errResponse('parse member KP event JSON');
 494          return $t9_10;
 495          break;
 496        }
 497        case 4: {
 498          $t10_11 = smesh$lol$web$common$marmot.EventToKeyPackage($t7_8);
 499          $t11_12 = $t10_11[0];
 500          $t12_13 = $t10_11[1];
 501          $t13_14 = ($t12_13 !== null);
 502          if ($t13_14) {
 503            $block = 5; break;
 504          }
 505          else {
 506            $block = 6; break;
 507          }
 508          break;
 509        }
 510        case 5: {
 511          $t14_15 = $rt.types.methodCall($t12_13, 'Error', []);
 512          $t15_16 = ('member event to key package: ' + $t14_15);
 513          $t16_17 = errResponse($t15_16);
 514          return $t16_17;
 515          break;
 516        }
 517        case 6: {
 518          $t17_18 = { $get() { return $t7_8.$get().PubKey; }, $set(v) { const obj = $t7_8.$get(); obj.PubKey = v; $t7_8.$set(obj); } };
 519          $t18_19 = $t17_18.$get();
 520          $t19_20 = smesh$lol$web$common$helpers.HexDecode($t18_19);
 521          $t20_21 = $rt.builtin.stringEqual($t19_20, null);
 522          if ($t20_21) {
 523            $block = 7; break;
 524          }
 525          else {
 526            $block = 8; break;
 527          }
 528          break;
 529        }
 530        case 7: {
 531          $t21_22 = errResponse('decode peer pubkey');
 532          return $t21_22;
 533          break;
 534        }
 535        case 8: {
 536          $t22_23 = { $get() { return s.$get().nostrPub; }, $set(v) { const obj = s.$get(); obj.nostrPub = v; s.$set(obj); } };
 537          $t23_24 = $t22_23.$get();
 538          $t24_25 = smesh$lol$web$common$helpers.HexDecode($t23_24);
 539          $t25_26 = $rt.builtin.stringEqual($t24_25, null);
 540          if ($t25_26) {
 541            $block = 9; break;
 542          }
 543          else {
 544            $block = 10; break;
 545          }
 546          break;
 547        }
 548        case 9: {
 549          $t26_27 = errResponse('decode self pubkey');
 550          return $t26_27;
 551          break;
 552        }
 553        case 10: {
 554          $t27_28 = !$rt.builtin.stringEqual($t6_7, '');
 555          if ($t27_28) {
 556            $block = 11; break;
 557          }
 558          else {
 559            $t31_32 = null;
 560            $block = 12; break;
 561          }
 562          break;
 563        }
 564        case 11: {
 565          $t28_29 = { $value: $rt.builtin.makeSlice(1, 1, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 566          $t29_30 = $t28_29.$get().addr(0);
 567          $t29_30.$set($t6_7);
 568          $t30_31 = $rt.builtin.sliceSlice($t28_29.$get(), undefined, undefined, undefined);
 569          $t31_32 = $t30_31;
 570          $block = 12; break;
 571          break;
 572        }
 573        case 12: {
 574          $t32_33 = { $get() { return s.$get().kpp; }, $set(v) { const obj = s.$get(); obj.kpp = v; s.$set(obj); } };
 575          $t33_34 = $t32_33.$get();
 576          $t34_35 = smesh$lol$web$common$marmot.CreateDMGroup($t33_34, $t11_12, $t24_25, $t19_20, $t5_6, $t31_32);
 577          $t35_36 = $t34_35[0];
 578          $t36_37 = $t34_35[1];
 579          $t37_38 = $t34_35[2];
 580          $t38_39 = ($t37_38 !== null);
 581          if ($t38_39) {
 582            $block = 13; break;
 583          }
 584          else {
 585            $block = 14; break;
 586          }
 587          break;
 588        }
 589        case 13: {
 590          $t39_40 = $rt.types.methodCall($t37_38, 'Error', []);
 591          $t40_41 = ('create DM group: ' + $t39_40);
 592          $t41_42 = errResponse($t40_41);
 593          return $t41_42;
 594          break;
 595        }
 596        case 14: {
 597          $t42_43 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 598          $t42_43.$set($t35_36);
 599          $t43_44 = smesh$lol$web$common$jsbridge$node.NowSeconds();
 600          $t44_45 = { $get() { return $t7_8.$get().ID; }, $set(v) { const obj = $t7_8.$get(); obj.ID = v; $t7_8.$set(obj); } };
 601          $t45_46 = $t44_45.$get();
 602          $t46_47 = smesh$lol$web$common$marmot.WelcomeToRumor($t36_37, $t24_25, $t43_44, $t45_46, $t31_32);
 603          $t47_48 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 604          $t48_49 = okResponse();
 605          $t47_48.$set($rt.builtin.cloneValue($t48_49));
 606          $t49_50 = smesh$lol$web$common$nostr.Event$ToJSON($t46_47);
 607          $t50_51 = { $get() { return $t47_48.$get().rumorJSON; }, $set(v) { const obj = $t47_48.$get(); obj.rumorJSON = v; $t47_48.$set(obj); } };
 608          $t50_51.$set($t49_50);
 609          $t51_52 = { $get() { return $t35_36.$get().MLSGroupID; }, $set(v) { const obj = $t35_36.$get(); obj.MLSGroupID = v; $t35_36.$set(obj); } };
 610          $t52_53 = $t51_52.$get();
 611          $t53_54 = smesh$lol$web$common$helpers.HexEncode($t52_53);
 612          $t54_55 = { $get() { return $t47_48.$get().mlsGroupIDHex; }, $set(v) { const obj = $t47_48.$get(); obj.mlsGroupIDHex = v; $t47_48.$set(obj); } };
 613          $t54_55.$set($t53_54);
 614          $t55_56 = { $get() { return $t35_36.$get().NostrGroupID; }, $set(v) { const obj = $t35_36.$get(); obj.NostrGroupID = v; $t35_36.$set(obj); } };
 615          $t56_57 = $t55_56.$get();
 616          $t57_58 = smesh$lol$web$common$helpers.HexEncode($t56_57);
 617          $t58_59 = { $get() { return $t47_48.$get().nostrGroupIDHex; }, $set(v) { const obj = $t47_48.$get(); obj.nostrGroupIDHex = v; $t47_48.$set(obj); } };
 618          $t58_59.$set($t57_58);
 619          $t59_60 = $t47_48.$get();
 620          return $t59_60;
 621          break;
 622        }
 623      }
 624    }
 625  }
 626  
 627  export function cmdProcessWelcome(s, line) {
 628    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42;
 629    let $block = 0;
 630    while (true) {
 631      switch ($block) {
 632        case 0: {
 633          $t0_1 = { $get() { return s.$get().kpp; }, $set(v) { const obj = s.$get(); obj.kpp = v; s.$set(obj); } };
 634          $t1_2 = $t0_1.$get();
 635          $t2_3 = ($t1_2 === null);
 636          if ($t2_3) {
 637            $block = 1; break;
 638          }
 639          else {
 640            $block = 2; break;
 641          }
 642          break;
 643        }
 644        case 1: {
 645          $t3_4 = errResponse('no local key package — call generate_key_package first');
 646          return $t3_4;
 647          break;
 648        }
 649        case 2: {
 650          $t4_5 = smesh$lol$web$common$helpers.JsonGetString(line, 'rumor_json');
 651          $t5_6 = smesh$lol$web$common$nostr.ParseEvent($t4_5);
 652          $t6_7 = ($t5_6 === null);
 653          if ($t6_7) {
 654            $block = 3; break;
 655          }
 656          else {
 657            $block = 4; break;
 658          }
 659          break;
 660        }
 661        case 3: {
 662          $t7_8 = errResponse('parse rumor JSON');
 663          return $t7_8;
 664          break;
 665        }
 666        case 4: {
 667          $t8_9 = smesh$lol$web$common$marmot.RumorToWelcome($t5_6);
 668          $t9_10 = $t8_9[0];
 669          $t10_11 = $t8_9[1];
 670          $t11_12 = ($t10_11 !== null);
 671          if ($t11_12) {
 672            $block = 5; break;
 673          }
 674          else {
 675            $block = 6; break;
 676          }
 677          break;
 678        }
 679        case 5: {
 680          $t12_13 = $rt.types.methodCall($t10_11, 'Error', []);
 681          $t13_14 = ('rumor to welcome: ' + $t12_13);
 682          $t14_15 = errResponse($t13_14);
 683          return $t14_15;
 684          break;
 685        }
 686        case 6: {
 687          $t15_16 = { $get() { return $t5_6.$get().PubKey; }, $set(v) { const obj = $t5_6.$get(); obj.PubKey = v; $t5_6.$set(obj); } };
 688          $t16_17 = $t15_16.$get();
 689          $t17_18 = smesh$lol$web$common$helpers.HexDecode($t16_17);
 690          $t18_19 = $rt.builtin.stringEqual($t17_18, null);
 691          if ($t18_19) {
 692            $block = 7; break;
 693          }
 694          else {
 695            $block = 8; break;
 696          }
 697          break;
 698        }
 699        case 7: {
 700          $t19_20 = errResponse('decode rumor sender pubkey');
 701          return $t19_20;
 702          break;
 703        }
 704        case 8: {
 705          $t20_21 = { $get() { return s.$get().kpp; }, $set(v) { const obj = s.$get(); obj.kpp = v; s.$set(obj); } };
 706          $t21_22 = $t20_21.$get();
 707          $t22_23 = smesh$lol$web$common$jsbridge$node.NowSeconds();
 708          $t23_24 = smesh$lol$web$common$marmot.JoinDMGroup($t9_10, $t21_22, $t17_18, $t22_23);
 709          $t24_25 = $t23_24[0];
 710          $t25_26 = $t23_24[1];
 711          $t26_27 = ($t25_26 !== null);
 712          if ($t26_27) {
 713            $block = 9; break;
 714          }
 715          else {
 716            $block = 10; break;
 717          }
 718          break;
 719        }
 720        case 9: {
 721          $t27_28 = $rt.types.methodCall($t25_26, 'Error', []);
 722          $t28_29 = ('join DM group: ' + $t27_28);
 723          $t29_30 = errResponse($t28_29);
 724          return $t29_30;
 725          break;
 726        }
 727        case 10: {
 728          $t30_31 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 729          $t30_31.$set($t24_25);
 730          $t31_32 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 731          $t32_33 = okResponse();
 732          $t31_32.$set($rt.builtin.cloneValue($t32_33));
 733          $t33_34 = { $get() { return $t24_25.$get().MLSGroupID; }, $set(v) { const obj = $t24_25.$get(); obj.MLSGroupID = v; $t24_25.$set(obj); } };
 734          $t34_35 = $t33_34.$get();
 735          $t35_36 = smesh$lol$web$common$helpers.HexEncode($t34_35);
 736          $t36_37 = { $get() { return $t31_32.$get().mlsGroupIDHex; }, $set(v) { const obj = $t31_32.$get(); obj.mlsGroupIDHex = v; $t31_32.$set(obj); } };
 737          $t36_37.$set($t35_36);
 738          $t37_38 = { $get() { return $t24_25.$get().NostrGroupID; }, $set(v) { const obj = $t24_25.$get(); obj.NostrGroupID = v; $t24_25.$set(obj); } };
 739          $t38_39 = $t37_38.$get();
 740          $t39_40 = smesh$lol$web$common$helpers.HexEncode($t38_39);
 741          $t40_41 = { $get() { return $t31_32.$get().nostrGroupIDHex; }, $set(v) { const obj = $t31_32.$get(); obj.nostrGroupIDHex = v; $t31_32.$set(obj); } };
 742          $t40_41.$set($t39_40);
 743          $t41_42 = $t31_32.$get();
 744          return $t41_42;
 745          break;
 746        }
 747      }
 748    }
 749  }
 750  
 751  export function cmdCreateMessage(s, line) {
 752    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56;
 753    let $block = 0;
 754    while (true) {
 755      switch ($block) {
 756        case 0: {
 757          $t0_1 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 758          $t1_2 = $t0_1.$get();
 759          $t2_3 = ($t1_2 === null);
 760          if ($t2_3) {
 761            $block = 1; break;
 762          }
 763          else {
 764            $block = 2; break;
 765          }
 766          break;
 767        }
 768        case 1: {
 769          $t3_4 = errResponse('no group — create or join one first');
 770          return $t3_4;
 771          break;
 772        }
 773        case 2: {
 774          $t4_5 = smesh$lol$web$common$helpers.JsonGetString(line, 'mls_group_id_hex');
 775          $t5_6 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 776          $t6_7 = $t5_6.$get();
 777          $t7_8 = { $get() { return $t6_7.$get().MLSGroupID; }, $set(v) { const obj = $t6_7.$get(); obj.MLSGroupID = v; $t6_7.$set(obj); } };
 778          $t8_9 = $t7_8.$get();
 779          $t9_10 = smesh$lol$web$common$helpers.HexEncode($t8_9);
 780          $t10_11 = !$rt.builtin.stringEqual($t4_5, '');
 781          if ($t10_11) {
 782            $block = 5; break;
 783          }
 784          else {
 785            $block = 4; break;
 786          }
 787          break;
 788        }
 789        case 3: {
 790          $t11_12 = ('mls_group_id_hex mismatch: want ' + $t4_5);
 791          $t12_13 = ($t11_12 + ' have ');
 792          $t13_14 = ($t12_13 + $t9_10);
 793          $t14_15 = errResponse($t13_14);
 794          return $t14_15;
 795          break;
 796        }
 797        case 4: {
 798          $t15_16 = smesh$lol$web$common$helpers.JsonGetString(line, 'content');
 799          $t16_17 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 800          $t17_18 = $t16_17.$get();
 801          $t18_19 = { $get() { return $t17_18.$get().Group; }, $set(v) { const obj = $t17_18.$get(); obj.Group = v; $t17_18.$set(obj); } };
 802          $t19_20 = $t18_19.$get();
 803          $t20_21 = smesh$lol$web$common$mls.Group$CreateApplicationMessage($t19_20, $t15_16);
 804          $t21_22 = $t20_21[0];
 805          $t22_23 = $t20_21[1];
 806          $t23_24 = ($t22_23 !== null);
 807          if ($t23_24) {
 808            $block = 6; break;
 809          }
 810          else {
 811            $block = 7; break;
 812          }
 813          break;
 814        }
 815        case 5: {
 816          $t24_25 = !$rt.builtin.stringEqual($t4_5, $t9_10);
 817          if ($t24_25) {
 818            $block = 3; break;
 819          }
 820          else {
 821            $block = 4; break;
 822          }
 823          break;
 824        }
 825        case 6: {
 826          $t25_26 = $rt.types.methodCall($t22_23, 'Error', []);
 827          $t26_27 = ('create application message: ' + $t25_26);
 828          $t27_28 = errResponse($t26_27);
 829          return $t27_28;
 830          break;
 831        }
 832        case 7: {
 833          $t28_29 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 834          $t29_30 = $t28_29.$get();
 835          $t30_31 = { $get() { return $t29_30.$get().Group; }, $set(v) { const obj = $t29_30.$get(); obj.Group = v; $t29_30.$set(obj); } };
 836          $t31_32 = $t30_31.$get();
 837          $t32_33 = smesh$lol$web$common$marmot.DeriveExporterSecret($t31_32);
 838          $t33_34 = $t32_33[0];
 839          $t34_35 = $t32_33[1];
 840          $t35_36 = ($t34_35 !== null);
 841          if ($t35_36) {
 842            $block = 8; break;
 843          }
 844          else {
 845            $block = 9; break;
 846          }
 847          break;
 848        }
 849        case 8: {
 850          $t36_37 = $rt.types.methodCall($t34_35, 'Error', []);
 851          $t37_38 = ('derive exporter secret: ' + $t36_37);
 852          $t38_39 = errResponse($t37_38);
 853          return $t38_39;
 854          break;
 855        }
 856        case 9: {
 857          $t39_40 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 858          $t40_41 = $t39_40.$get();
 859          $t41_42 = { $get() { return $t40_41.$get().NostrGroupID; }, $set(v) { const obj = $t40_41.$get(); obj.NostrGroupID = v; $t40_41.$set(obj); } };
 860          $t42_43 = $t41_42.$get();
 861          $t43_44 = smesh$lol$web$common$jsbridge$node.NowSeconds();
 862          $t44_45 = smesh$lol$web$common$marmot.MessageToEvent($t42_43, $t21_22, $t33_34, $t43_44);
 863          $t45_46 = $t44_45[0];
 864          $t46_47 = $t44_45[1];
 865          $t47_48 = ($t46_47 !== null);
 866          if ($t47_48) {
 867            $block = 10; break;
 868          }
 869          else {
 870            $block = 11; break;
 871          }
 872          break;
 873        }
 874        case 10: {
 875          $t48_49 = $rt.types.methodCall($t46_47, 'Error', []);
 876          $t49_50 = ('build kind 445 event: ' + $t48_49);
 877          $t50_51 = errResponse($t49_50);
 878          return $t50_51;
 879          break;
 880        }
 881        case 11: {
 882          $t51_52 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 883          $t52_53 = okResponse();
 884          $t51_52.$set($rt.builtin.cloneValue($t52_53));
 885          $t53_54 = smesh$lol$web$common$nostr.Event$ToJSON($t45_46);
 886          $t54_55 = { $get() { return $t51_52.$get().eventJSON; }, $set(v) { const obj = $t51_52.$get(); obj.eventJSON = v; $t51_52.$set(obj); } };
 887          $t54_55.$set($t53_54);
 888          $t55_56 = $t51_52.$get();
 889          return $t55_56;
 890          break;
 891        }
 892      }
 893    }
 894  }
 895  
 896  export function cmdProcessMessage(s, line) {
 897    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47;
 898    let $block = 0;
 899    while (true) {
 900      switch ($block) {
 901        case 0: {
 902          $t0_1 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 903          $t1_2 = $t0_1.$get();
 904          $t2_3 = ($t1_2 === null);
 905          if ($t2_3) {
 906            $block = 1; break;
 907          }
 908          else {
 909            $block = 2; break;
 910          }
 911          break;
 912        }
 913        case 1: {
 914          $t3_4 = errResponse('no group — create or join one first');
 915          return $t3_4;
 916          break;
 917        }
 918        case 2: {
 919          $t4_5 = smesh$lol$web$common$helpers.JsonGetString(line, 'event_json');
 920          $t5_6 = smesh$lol$web$common$nostr.ParseEvent($t4_5);
 921          $t6_7 = ($t5_6 === null);
 922          if ($t6_7) {
 923            $block = 3; break;
 924          }
 925          else {
 926            $block = 4; break;
 927          }
 928          break;
 929        }
 930        case 3: {
 931          $t7_8 = errResponse('parse kind 445 event JSON');
 932          return $t7_8;
 933          break;
 934        }
 935        case 4: {
 936          $t8_9 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 937          $t9_10 = $t8_9.$get();
 938          $t10_11 = { $get() { return $t9_10.$get().Group; }, $set(v) { const obj = $t9_10.$get(); obj.Group = v; $t9_10.$set(obj); } };
 939          $t11_12 = $t10_11.$get();
 940          $t12_13 = smesh$lol$web$common$marmot.DeriveExporterSecret($t11_12);
 941          $t13_14 = $t12_13[0];
 942          $t14_15 = $t12_13[1];
 943          $t15_16 = ($t14_15 !== null);
 944          if ($t15_16) {
 945            $block = 5; break;
 946          }
 947          else {
 948            $block = 6; break;
 949          }
 950          break;
 951        }
 952        case 5: {
 953          $t16_17 = $rt.types.methodCall($t14_15, 'Error', []);
 954          $t17_18 = ('derive exporter secret: ' + $t16_17);
 955          $t18_19 = errResponse($t17_18);
 956          return $t18_19;
 957          break;
 958        }
 959        case 6: {
 960          $t19_20 = smesh$lol$web$common$marmot.EventToMessage($t5_6, $t13_14);
 961          $t20_21 = $t19_20[0];
 962          $t21_22 = $t19_20[1];
 963          $t22_23 = $t19_20[2];
 964          $t23_24 = ($t22_23 !== null);
 965          if ($t23_24) {
 966            $block = 7; break;
 967          }
 968          else {
 969            $block = 8; break;
 970          }
 971          break;
 972        }
 973        case 7: {
 974          $t24_25 = $rt.types.methodCall($t22_23, 'Error', []);
 975          $t25_26 = ('event to message: ' + $t24_25);
 976          $t26_27 = errResponse($t25_26);
 977          return $t26_27;
 978          break;
 979        }
 980        case 8: {
 981          $t27_28 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
 982          $t28_29 = $t27_28.$get();
 983          $t29_30 = { $get() { return $t28_29.$get().Group; }, $set(v) { const obj = $t28_29.$get(); obj.Group = v; $t28_29.$set(obj); } };
 984          $t30_31 = $t29_30.$get();
 985          $t31_32 = smesh$lol$web$common$mls.Group$UnmarshalAndProcessMessage($t30_31, $t21_22);
 986          $t32_33 = $t31_32[0];
 987          $t33_34 = $t31_32[1];
 988          $t34_35 = $t31_32[2];
 989          $t35_36 = ($t34_35 !== null);
 990          if ($t35_36) {
 991            $block = 9; break;
 992          }
 993          else {
 994            $block = 10; break;
 995          }
 996          break;
 997        }
 998        case 9: {
 999          $t36_37 = $rt.types.methodCall($t34_35, 'Error', []);
1000          $t37_38 = ('process MLS message: ' + $t36_37);
1001          $t38_39 = errResponse($t37_38);
1002          return $t38_39;
1003          break;
1004        }
1005        case 10: {
1006          $t39_40 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1007          $t40_41 = okResponse();
1008          $t39_40.$set($rt.builtin.cloneValue($t40_41));
1009          $t41_42 = { $get() { return $t39_40.$get().content; }, $set(v) { const obj = $t39_40.$get(); obj.content = v; $t39_40.$set(obj); } };
1010          $t41_42.$set($t32_33);
1011          $t42_43 = { $get() { return $t39_40.$get().kind; }, $set(v) { const obj = $t39_40.$get(); obj.kind = v; $t39_40.$set(obj); } };
1012          $t42_43.$set(445);
1013          $t43_44 = { $get() { return $t5_6.$get().PubKey; }, $set(v) { const obj = $t5_6.$get(); obj.PubKey = v; $t5_6.$set(obj); } };
1014          $t44_45 = $t43_44.$get();
1015          $t45_46 = { $get() { return $t39_40.$get().pubkey; }, $set(v) { const obj = $t39_40.$get(); obj.pubkey = v; $t39_40.$set(obj); } };
1016          $t45_46.$set($t44_45);
1017          $t46_47 = $t39_40.$get();
1018          return $t46_47;
1019          break;
1020        }
1021      }
1022    }
1023  }
1024  
1025  export function cmdGetGroupInfo(s) {
1026    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
1027    let $block = 0;
1028    while (true) {
1029      switch ($block) {
1030        case 0: {
1031          $t0_1 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
1032          $t1_2 = $t0_1.$get();
1033          $t2_3 = ($t1_2 === null);
1034          if ($t2_3) {
1035            $block = 1; break;
1036          }
1037          else {
1038            $block = 2; break;
1039          }
1040          break;
1041        }
1042        case 1: {
1043          $t3_4 = errResponse('no group');
1044          return $t3_4;
1045          break;
1046        }
1047        case 2: {
1048          $t4_5 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1049          $t5_6 = okResponse();
1050          $t4_5.$set($rt.builtin.cloneValue($t5_6));
1051          $t6_7 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
1052          $t7_8 = $t6_7.$get();
1053          $t8_9 = { $get() { return $t7_8.$get().MLSGroupID; }, $set(v) { const obj = $t7_8.$get(); obj.MLSGroupID = v; $t7_8.$set(obj); } };
1054          $t9_10 = $t8_9.$get();
1055          $t10_11 = smesh$lol$web$common$helpers.HexEncode($t9_10);
1056          $t11_12 = { $get() { return $t4_5.$get().mlsGroupIDHex; }, $set(v) { const obj = $t4_5.$get(); obj.mlsGroupIDHex = v; $t4_5.$set(obj); } };
1057          $t11_12.$set($t10_11);
1058          $t12_13 = { $get() { return s.$get().gs; }, $set(v) { const obj = s.$get(); obj.gs = v; s.$set(obj); } };
1059          $t13_14 = $t12_13.$get();
1060          $t14_15 = { $get() { return $t13_14.$get().NostrGroupID; }, $set(v) { const obj = $t13_14.$get(); obj.NostrGroupID = v; $t13_14.$set(obj); } };
1061          $t15_16 = $t14_15.$get();
1062          $t16_17 = smesh$lol$web$common$helpers.HexEncode($t15_16);
1063          $t17_18 = { $get() { return $t4_5.$get().nostrGroupIDHex; }, $set(v) { const obj = $t4_5.$get(); obj.nostrGroupIDHex = v; $t4_5.$set(obj); } };
1064          $t17_18.$set($t16_17);
1065          $t18_19 = $t4_5.$get();
1066          return $t18_19;
1067          break;
1068        }
1069      }
1070    }
1071  }
1072  
1073  export function okResponse() {
1074    let $t0_1, $t1_2, $t2_3;
1075    $t0_1 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1076    $t1_2 = { $get() { return $t0_1.$get().ok; }, $set(v) { const obj = $t0_1.$get(); obj.ok = v; $t0_1.$set(obj); } };
1077    $t1_2.$set(true);
1078    $t2_3 = $t0_1.$get();
1079    return $t2_3;
1080  }
1081  
1082  export function errResponse(msg) {
1083    let $t0_1, $t1_2, $t2_3, $t3_4;
1084    $t0_1 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1085    $t1_2 = { $get() { return $t0_1.$get().ok; }, $set(v) { const obj = $t0_1.$get(); obj.ok = v; $t0_1.$set(obj); } };
1086    $t2_3 = { $get() { return $t0_1.$get().err; }, $set(v) { const obj = $t0_1.$get(); obj.err = v; $t0_1.$set(obj); } };
1087    $t1_2.$set(false);
1088    $t2_3.$set(msg);
1089    $t3_4 = $t0_1.$get();
1090    return $t3_4;
1091  }
1092  
1093  export function serializeResponse(r) {
1094    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85;
1095    let $block = 0;
1096    while (true) {
1097      switch ($block) {
1098        case 0: {
1099          $t0_1 = { $value: { ok: false, err: '', eventJSON: '', rumorJSON: '', pubkey: '', content: '', kind: 0, mlsGroupIDHex: '', nostrGroupIDHex: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1100          $t0_1.$set($rt.builtin.cloneValue(r));
1101          $t1_2 = { $value: $rt.builtin.makeSlice(256, 256, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1102          $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, 0, undefined);
1103          $t3_4 = { $get() { return $t0_1.$get().ok; }, $set(v) { const obj = $t0_1.$get(); obj.ok = v; $t0_1.$set(obj); } };
1104          $t4_5 = $t3_4.$get();
1105          if ($t4_5) {
1106            $block = 1; break;
1107          }
1108          else {
1109            $block = 3; break;
1110          }
1111          break;
1112        }
1113        case 1: {
1114          $t5_6 = $rt.builtin.appendString($t2_3, '{"ok":true');
1115          $t6_7 = $t5_6;
1116          $block = 2; break;
1117          break;
1118        }
1119        case 2: {
1120          $t7_8 = { $get() { return $t0_1.$get().err; }, $set(v) { const obj = $t0_1.$get(); obj.err = v; $t0_1.$set(obj); } };
1121          $t8_9 = $t7_8.$get();
1122          $t9_10 = !$rt.builtin.stringEqual($t8_9, '');
1123          if ($t9_10) {
1124            $block = 4; break;
1125          }
1126          else {
1127            $t16_17 = $t6_7;
1128            $block = 5; break;
1129          }
1130          break;
1131        }
1132        case 3: {
1133          $t10_11 = $rt.builtin.appendString($t2_3, '{"ok":false');
1134          $t6_7 = $t10_11;
1135          $block = 2; break;
1136          break;
1137        }
1138        case 4: {
1139          $t11_12 = $rt.builtin.appendString($t6_7, ',"error":');
1140          $t12_13 = { $get() { return $t0_1.$get().err; }, $set(v) { const obj = $t0_1.$get(); obj.err = v; $t0_1.$set(obj); } };
1141          $t13_14 = $t12_13.$get();
1142          $t14_15 = smesh$lol$web$common$helpers.JsonString($t13_14);
1143          $t15_16 = $rt.builtin.appendString($t11_12, $t14_15);
1144          $t16_17 = $t15_16;
1145          $block = 5; break;
1146          break;
1147        }
1148        case 5: {
1149          $t17_18 = { $get() { return $t0_1.$get().eventJSON; }, $set(v) { const obj = $t0_1.$get(); obj.eventJSON = v; $t0_1.$set(obj); } };
1150          $t18_19 = $t17_18.$get();
1151          $t19_20 = !$rt.builtin.stringEqual($t18_19, '');
1152          if ($t19_20) {
1153            $block = 6; break;
1154          }
1155          else {
1156            $t25_26 = $t16_17;
1157            $block = 7; break;
1158          }
1159          break;
1160        }
1161        case 6: {
1162          $t20_21 = $rt.builtin.appendString($t16_17, ',"event_json":');
1163          $t21_22 = { $get() { return $t0_1.$get().eventJSON; }, $set(v) { const obj = $t0_1.$get(); obj.eventJSON = v; $t0_1.$set(obj); } };
1164          $t22_23 = $t21_22.$get();
1165          $t23_24 = smesh$lol$web$common$helpers.JsonString($t22_23);
1166          $t24_25 = $rt.builtin.appendString($t20_21, $t23_24);
1167          $t25_26 = $t24_25;
1168          $block = 7; break;
1169          break;
1170        }
1171        case 7: {
1172          $t26_27 = { $get() { return $t0_1.$get().rumorJSON; }, $set(v) { const obj = $t0_1.$get(); obj.rumorJSON = v; $t0_1.$set(obj); } };
1173          $t27_28 = $t26_27.$get();
1174          $t28_29 = !$rt.builtin.stringEqual($t27_28, '');
1175          if ($t28_29) {
1176            $block = 8; break;
1177          }
1178          else {
1179            $t34_35 = $t25_26;
1180            $block = 9; break;
1181          }
1182          break;
1183        }
1184        case 8: {
1185          $t29_30 = $rt.builtin.appendString($t25_26, ',"rumor_json":');
1186          $t30_31 = { $get() { return $t0_1.$get().rumorJSON; }, $set(v) { const obj = $t0_1.$get(); obj.rumorJSON = v; $t0_1.$set(obj); } };
1187          $t31_32 = $t30_31.$get();
1188          $t32_33 = smesh$lol$web$common$helpers.JsonString($t31_32);
1189          $t33_34 = $rt.builtin.appendString($t29_30, $t32_33);
1190          $t34_35 = $t33_34;
1191          $block = 9; break;
1192          break;
1193        }
1194        case 9: {
1195          $t35_36 = { $get() { return $t0_1.$get().pubkey; }, $set(v) { const obj = $t0_1.$get(); obj.pubkey = v; $t0_1.$set(obj); } };
1196          $t36_37 = $t35_36.$get();
1197          $t37_38 = !$rt.builtin.stringEqual($t36_37, '');
1198          if ($t37_38) {
1199            $block = 10; break;
1200          }
1201          else {
1202            $t43_44 = $t34_35;
1203            $block = 11; break;
1204          }
1205          break;
1206        }
1207        case 10: {
1208          $t38_39 = $rt.builtin.appendString($t34_35, ',"pubkey":');
1209          $t39_40 = { $get() { return $t0_1.$get().pubkey; }, $set(v) { const obj = $t0_1.$get(); obj.pubkey = v; $t0_1.$set(obj); } };
1210          $t40_41 = $t39_40.$get();
1211          $t41_42 = smesh$lol$web$common$helpers.JsonString($t40_41);
1212          $t42_43 = $rt.builtin.appendString($t38_39, $t41_42);
1213          $t43_44 = $t42_43;
1214          $block = 11; break;
1215          break;
1216        }
1217        case 11: {
1218          $t44_45 = { $get() { return $t0_1.$get().content; }, $set(v) { const obj = $t0_1.$get(); obj.content = v; $t0_1.$set(obj); } };
1219          $t45_46 = $t44_45.$get();
1220          $t46_47 = !$rt.builtin.stringEqual($t45_46, '');
1221          if ($t46_47) {
1222            $block = 12; break;
1223          }
1224          else {
1225            $t52_53 = $t43_44;
1226            $block = 13; break;
1227          }
1228          break;
1229        }
1230        case 12: {
1231          $t47_48 = $rt.builtin.appendString($t43_44, ',"content":');
1232          $t48_49 = { $get() { return $t0_1.$get().content; }, $set(v) { const obj = $t0_1.$get(); obj.content = v; $t0_1.$set(obj); } };
1233          $t49_50 = $t48_49.$get();
1234          $t50_51 = smesh$lol$web$common$helpers.JsonString($t49_50);
1235          $t51_52 = $rt.builtin.appendString($t47_48, $t50_51);
1236          $t52_53 = $t51_52;
1237          $block = 13; break;
1238          break;
1239        }
1240        case 13: {
1241          $t53_54 = { $get() { return $t0_1.$get().kind; }, $set(v) { const obj = $t0_1.$get(); obj.kind = v; $t0_1.$set(obj); } };
1242          $t54_55 = $t53_54.$get();
1243          $t55_56 = ($t54_55 !== 0);
1244          if ($t55_56) {
1245            $block = 14; break;
1246          }
1247          else {
1248            $t62_63 = $t52_53;
1249            $block = 15; break;
1250          }
1251          break;
1252        }
1253        case 14: {
1254          $t56_57 = $rt.builtin.appendString($t52_53, ',"kind":');
1255          $t57_58 = { $get() { return $t0_1.$get().kind; }, $set(v) { const obj = $t0_1.$get(); obj.kind = v; $t0_1.$set(obj); } };
1256          $t58_59 = $t57_58.$get();
1257          $t59_60 = BigInt($t58_59);
1258          $t60_61 = smesh$lol$web$common$helpers.Itoa($t59_60);
1259          $t61_62 = $rt.builtin.appendString($t56_57, $t60_61);
1260          $t62_63 = $t61_62;
1261          $block = 15; break;
1262          break;
1263        }
1264        case 15: {
1265          $t63_64 = { $get() { return $t0_1.$get().mlsGroupIDHex; }, $set(v) { const obj = $t0_1.$get(); obj.mlsGroupIDHex = v; $t0_1.$set(obj); } };
1266          $t64_65 = $t63_64.$get();
1267          $t65_66 = !$rt.builtin.stringEqual($t64_65, '');
1268          if ($t65_66) {
1269            $block = 16; break;
1270          }
1271          else {
1272            $t71_72 = $t62_63;
1273            $block = 17; break;
1274          }
1275          break;
1276        }
1277        case 16: {
1278          $t66_67 = $rt.builtin.appendString($t62_63, ',"mls_group_id_hex":');
1279          $t67_68 = { $get() { return $t0_1.$get().mlsGroupIDHex; }, $set(v) { const obj = $t0_1.$get(); obj.mlsGroupIDHex = v; $t0_1.$set(obj); } };
1280          $t68_69 = $t67_68.$get();
1281          $t69_70 = smesh$lol$web$common$helpers.JsonString($t68_69);
1282          $t70_71 = $rt.builtin.appendString($t66_67, $t69_70);
1283          $t71_72 = $t70_71;
1284          $block = 17; break;
1285          break;
1286        }
1287        case 17: {
1288          $t72_73 = { $get() { return $t0_1.$get().nostrGroupIDHex; }, $set(v) { const obj = $t0_1.$get(); obj.nostrGroupIDHex = v; $t0_1.$set(obj); } };
1289          $t73_74 = $t72_73.$get();
1290          $t74_75 = !$rt.builtin.stringEqual($t73_74, '');
1291          if ($t74_75) {
1292            $block = 18; break;
1293          }
1294          else {
1295            $t80_81 = $t71_72;
1296            $block = 19; break;
1297          }
1298          break;
1299        }
1300        case 18: {
1301          $t75_76 = $rt.builtin.appendString($t71_72, ',"nostr_group_id_hex":');
1302          $t76_77 = { $get() { return $t0_1.$get().nostrGroupIDHex; }, $set(v) { const obj = $t0_1.$get(); obj.nostrGroupIDHex = v; $t0_1.$set(obj); } };
1303          $t77_78 = $t76_77.$get();
1304          $t78_79 = smesh$lol$web$common$helpers.JsonString($t77_78);
1305          $t79_80 = $rt.builtin.appendString($t75_76, $t78_79);
1306          $t80_81 = $t79_80;
1307          $block = 19; break;
1308          break;
1309        }
1310        case 19: {
1311          $t81_82 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1312          $t82_83 = $t81_82.$get().addr(0);
1313          $t82_83.$set(125);
1314          $t83_84 = $rt.builtin.sliceSlice($t81_82.$get(), undefined, undefined, undefined);
1315          $t84_85 = $rt.builtin.appendSlice($t80_81, $t83_84);
1316          return $t84_85;
1317          break;
1318        }
1319      }
1320    }
1321  }
1322  
1323  export function trimSpace(s) {
1324    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
1325    let $block = 0;
1326    while (true) {
1327      switch ($block) {
1328        case 0: {
1329          $t0_1 = $rt.builtin.len(s);
1330          $t2_3 = 0;
1331          $block = 2; break;
1332          break;
1333        }
1334        case 1: {
1335          $t1_2 = ($t2_3 + 1);
1336          $t2_3 = $t1_2;
1337          $block = 2; break;
1338          break;
1339        }
1340        case 2: {
1341          $t3_4 = ($t2_3 < $t0_1);
1342          if ($t3_4) {
1343            $block = 3; break;
1344          }
1345          else {
1346            $t9_10 = $t0_1;
1347            $block = 6; break;
1348          }
1349          break;
1350        }
1351        case 3: {
1352          $t4_5 = s.addr($t2_3);
1353          $t5_6 = $t4_5.$get();
1354          $t6_7 = isSpace($t5_6);
1355          if ($t6_7) {
1356            $block = 1; break;
1357          }
1358          else {
1359            $t9_10 = $t0_1;
1360            $block = 6; break;
1361          }
1362          break;
1363        }
1364        case 4: {
1365          $t7_8 = ($t9_10 - 1);
1366          $t9_10 = $t7_8;
1367          $block = 6; break;
1368          break;
1369        }
1370        case 5: {
1371          $t8_9 = $rt.builtin.stringSlice(s, $t2_3, $t9_10);
1372          return $t8_9;
1373          break;
1374        }
1375        case 6: {
1376          $t10_11 = ($t9_10 > $t2_3);
1377          if ($t10_11) {
1378            $block = 7; break;
1379          }
1380          else {
1381            $block = 5; break;
1382          }
1383          break;
1384        }
1385        case 7: {
1386          $t11_12 = ($t9_10 - 1);
1387          $t12_13 = s.addr($t11_12);
1388          $t13_14 = $t12_13.$get();
1389          $t14_15 = isSpace($t13_14);
1390          if ($t14_15) {
1391            $block = 4; break;
1392          }
1393          else {
1394            $block = 5; break;
1395          }
1396          break;
1397        }
1398      }
1399    }
1400  }
1401  
1402  export function isSpace(c) {
1403    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
1404    let $block = 0;
1405    while (true) {
1406      switch ($block) {
1407        case 0: {
1408          $t0_1 = (c === 32);
1409          if ($t0_1) {
1410            $t2_3 = true;
1411            $block = 2; break;
1412          }
1413          else {
1414            $block = 4; break;
1415          }
1416          break;
1417        }
1418        case 1: {
1419          $t1_2 = (c === 10);
1420          $t2_3 = $t1_2;
1421          $block = 2; break;
1422          break;
1423        }
1424        case 2: {
1425          return $t2_3;
1426          break;
1427        }
1428        case 3: {
1429          $t3_4 = (c === 13);
1430          if ($t3_4) {
1431            $t2_3 = true;
1432            $block = 2; break;
1433          }
1434          else {
1435            $block = 1; break;
1436          }
1437          break;
1438        }
1439        case 4: {
1440          $t4_5 = (c === 9);
1441          if ($t4_5) {
1442            $t2_3 = true;
1443            $block = 2; break;
1444          }
1445          else {
1446            $block = 3; break;
1447          }
1448          break;
1449        }
1450      }
1451    }
1452  }
1453  
1454