@ganglion/xacpx-relay 0.10.2 → 0.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/cli.js +70 -7
  2. package/dist/relay-web/assets/{DashboardView-iRsVrnXE.js → DashboardView-Bp6DPuGb.js} +103 -102
  3. package/dist/relay-web/assets/{InviteView-Ck0MnGhg.js → InviteView-B61O3lGC.js} +1 -1
  4. package/dist/relay-web/assets/{LoginView-CLa4gEFc.js → LoginView-BD7LIg1Q.js} +1 -1
  5. package/dist/relay-web/assets/{SettingsView-BgrAILfa.js → SettingsView-1SadoSqF.js} +1 -1
  6. package/dist/relay-web/assets/{abnfDiagram-VRR7QNED-Br24YyDm.js → abnfDiagram-VRR7QNED-DS9bYs3l.js} +1 -1
  7. package/dist/relay-web/assets/{arc-DIRRMvFE.js → arc-gjJ2Xh0U.js} +1 -1
  8. package/dist/relay-web/assets/{architectureDiagram-ZJ3FMSHR-DJHQVNAM.js → architectureDiagram-ZJ3FMSHR-D1uIuPAV.js} +1 -1
  9. package/dist/relay-web/assets/{blockDiagram-677ZJIJ3-ClwAfPf_.js → blockDiagram-677ZJIJ3-z5Pi_EFI.js} +1 -1
  10. package/dist/relay-web/assets/{c4Diagram-LMCZKHZV-DZDRr5ZQ.js → c4Diagram-LMCZKHZV-D3Ghoxay.js} +1 -1
  11. package/dist/relay-web/assets/channel-CuU0LsI6.js +1 -0
  12. package/dist/relay-web/assets/{chunk-2Q5K7J3B-CeC571Uu.js → chunk-2Q5K7J3B-5_zLDhim.js} +1 -1
  13. package/dist/relay-web/assets/{chunk-32BRIVSS-MM72e9WP.js → chunk-32BRIVSS-CaJVymbP.js} +1 -1
  14. package/dist/relay-web/assets/{chunk-5VM5RSS4-C0lvjKpK.js → chunk-5VM5RSS4-DLGRpf1M.js} +1 -1
  15. package/dist/relay-web/assets/{chunk-EX3LRPZG-DgECA8Lp.js → chunk-EX3LRPZG-C5Gq1xt-.js} +1 -1
  16. package/dist/relay-web/assets/{chunk-JWPE2WC7-BFtdJWgc.js → chunk-JWPE2WC7-DHNcemtD.js} +1 -1
  17. package/dist/relay-web/assets/{chunk-MOJQB5TN-DzVQZFml.js → chunk-MOJQB5TN-HSMG_8x1.js} +1 -1
  18. package/dist/relay-web/assets/{chunk-RYQCIY6F-CG--NxHl.js → chunk-RYQCIY6F-12MZgyWU.js} +1 -1
  19. package/dist/relay-web/assets/{chunk-V7JOEXUC-BYSY5_n_.js → chunk-V7JOEXUC-DtsMQy3C.js} +1 -1
  20. package/dist/relay-web/assets/{chunk-VR4S4FIN-DIDH6ODG.js → chunk-VR4S4FIN-DIJP4z_g.js} +1 -1
  21. package/dist/relay-web/assets/{chunk-XXDRQBXY-B3ZtRxzp.js → chunk-XXDRQBXY-C6ANhi0M.js} +1 -1
  22. package/dist/relay-web/assets/classDiagram-OUVF2IWQ-CqtgNVNJ.js +1 -0
  23. package/dist/relay-web/assets/classDiagram-v2-EOCWNBFH-CqtgNVNJ.js +1 -0
  24. package/dist/relay-web/assets/{cose-bilkent-JH36ORCC-CHSuHZJP.js → cose-bilkent-JH36ORCC-DiiLa-bH.js} +1 -1
  25. package/dist/relay-web/assets/{cynefin-VYW2F7L2-D3PgyoBA.js → cynefin-VYW2F7L2-CKZJ9fy0.js} +1 -1
  26. package/dist/relay-web/assets/{cynefinDiagram-TSTJHNR4-CnLpW7oA.js → cynefinDiagram-TSTJHNR4-DFAtLWq0.js} +1 -1
  27. package/dist/relay-web/assets/{dagre-VKFMJZFB-D70OwtTY.js → dagre-VKFMJZFB-CMG5wWva.js} +1 -1
  28. package/dist/relay-web/assets/{diagram-FQU43EPY-DhVhK0JY.js → diagram-FQU43EPY-DBaRnmRK.js} +1 -1
  29. package/dist/relay-web/assets/{diagram-G47NLZAW-CB1GK4Xn.js → diagram-G47NLZAW-DDlvBqvQ.js} +1 -1
  30. package/dist/relay-web/assets/{diagram-NH7WQ7WH-BvEvMUqj.js → diagram-NH7WQ7WH-CkPXAKDT.js} +1 -1
  31. package/dist/relay-web/assets/{diagram-OA4YK3LP-BmIXm5D0.js → diagram-OA4YK3LP-pCe72eL_.js} +1 -1
  32. package/dist/relay-web/assets/{diagram-WEI45ONY-D6-fz9yU.js → diagram-WEI45ONY-BR-td8OS.js} +1 -1
  33. package/dist/relay-web/assets/{ebnfDiagram-CCIWWBDH-CgEBC9WS.js → ebnfDiagram-CCIWWBDH-BEBifale.js} +1 -1
  34. package/dist/relay-web/assets/{erDiagram-Q63AITRT-ATnLORgU.js → erDiagram-Q63AITRT-DlhqksS-.js} +1 -1
  35. package/dist/relay-web/assets/{flowDiagram-23GEKE2U-C1Q00Kgy.js → flowDiagram-23GEKE2U-DP8y_pcv.js} +1 -1
  36. package/dist/relay-web/assets/{ganttDiagram-NO4QXBWP-BxBHCqFF.js → ganttDiagram-NO4QXBWP-D5dgRMTq.js} +1 -1
  37. package/dist/relay-web/assets/{ghostty-web-CYUXfFzu.js → ghostty-web-D01Cjsnx.js} +1 -1
  38. package/dist/relay-web/assets/{gitGraphDiagram-IHSO6WYX-B5UVTBFv.js → gitGraphDiagram-IHSO6WYX-CZ58loEK.js} +1 -1
  39. package/dist/relay-web/assets/{index-C1RP74GA.js → index-Db1mAnox.js} +2 -2
  40. package/dist/relay-web/assets/{index-DHiqLPYx.css → index-PdfviQEl.css} +1 -1
  41. package/dist/relay-web/assets/{infoDiagram-FWYZ7A6U-CCs1X9nt.js → infoDiagram-FWYZ7A6U-_6e2VmD5.js} +1 -1
  42. package/dist/relay-web/assets/{ishikawaDiagram-FXEZZL3T-BBV39MwJ.js → ishikawaDiagram-FXEZZL3T-jpWD5WXM.js} +1 -1
  43. package/dist/relay-web/assets/{journeyDiagram-5HDEW3XC-VN3MWJ8o.js → journeyDiagram-5HDEW3XC-BsU5PN8d.js} +1 -1
  44. package/dist/relay-web/assets/{kanban-definition-HUTT4EX6-D0ndD0oS.js → kanban-definition-HUTT4EX6-DIeXOVEs.js} +1 -1
  45. package/dist/relay-web/assets/{linear-E_wMGu78.js → linear-mevdEDaE.js} +1 -1
  46. package/dist/relay-web/assets/{mermaid.core-ebOLt6VE.js → mermaid.core-DdA6Bw3-.js} +4 -4
  47. package/dist/relay-web/assets/{mindmap-definition-LN4V7U3C-C1aBhaiR.js → mindmap-definition-LN4V7U3C-BaZuxWaq.js} +1 -1
  48. package/dist/relay-web/assets/{pegDiagram-2B236MQR-BN4n0SLV.js → pegDiagram-2B236MQR-BX92_PMw.js} +1 -1
  49. package/dist/relay-web/assets/{pieDiagram-ENE6RG2P-BOIScL1G.js → pieDiagram-ENE6RG2P-BKAQcPIq.js} +1 -1
  50. package/dist/relay-web/assets/{quadrantDiagram-ABIIQ3AL-B436C8UL.js → quadrantDiagram-ABIIQ3AL-DHqqRjwi.js} +1 -1
  51. package/dist/relay-web/assets/{railroadDiagram-RFXS5EU6-D1rdvyw9.js → railroadDiagram-RFXS5EU6-DzkPRzrA.js} +1 -1
  52. package/dist/relay-web/assets/{requirementDiagram-TGXJPOKE-DPw3DhwM.js → requirementDiagram-TGXJPOKE-CFyAO1xx.js} +1 -1
  53. package/dist/relay-web/assets/{sankeyDiagram-HTMAVEWB-r7r8fG1U.js → sankeyDiagram-HTMAVEWB-DM7Zf1HL.js} +1 -1
  54. package/dist/relay-web/assets/{sequenceDiagram-DBY2YBRQ-qW1u0MxR.js → sequenceDiagram-DBY2YBRQ-CMRJNZib.js} +1 -1
  55. package/dist/relay-web/assets/{sizeCapture-X5ZJPWSS-hsaziX5X.js → sizeCapture-X5ZJPWSS-NgGCkPKU.js} +1 -1
  56. package/dist/relay-web/assets/{stateDiagram-2N3HPSRC-De9t_tXu.js → stateDiagram-2N3HPSRC-BUQyGlEc.js} +1 -1
  57. package/dist/relay-web/assets/stateDiagram-v2-6OUMAXLB-DYxfL5sV.js +1 -0
  58. package/dist/relay-web/assets/{swimlanes-5IMT3BWC-BypUrAJu.js → swimlanes-5IMT3BWC-BNKN-PEJ.js} +2 -2
  59. package/dist/relay-web/assets/swimlanesDiagram-G3AALYLV-D9u9FED2.js +8 -0
  60. package/dist/relay-web/assets/{theme-Bo1ZKGJd.js → theme-Tk52qQy4.js} +1 -1
  61. package/dist/relay-web/assets/{timeline-definition-FHXFAJF6-Dp7qIpCc.js → timeline-definition-FHXFAJF6-Y1G6Onqx.js} +1 -1
  62. package/dist/relay-web/assets/{vennDiagram-L72KCM5P-YR-o4U-7.js → vennDiagram-L72KCM5P-KFNhNaAU.js} +1 -1
  63. package/dist/relay-web/assets/{wardleyDiagram-EHGQE667-C4E3fOCx.js → wardleyDiagram-EHGQE667-CTbni3kb.js} +1 -1
  64. package/dist/relay-web/assets/{xychartDiagram-FW5EYKEG-OfLeW8ck.js → xychartDiagram-FW5EYKEG-CGJsYVtz.js} +1 -1
  65. package/dist/relay-web/index.html +2 -2
  66. package/dist/relay-web/sw.js +1 -1
  67. package/package.json +1 -1
  68. package/dist/relay-web/assets/channel-C1zHf7B0.js +0 -1
  69. package/dist/relay-web/assets/classDiagram-OUVF2IWQ-CYF1EKSs.js +0 -1
  70. package/dist/relay-web/assets/classDiagram-v2-EOCWNBFH-CYF1EKSs.js +0 -1
  71. package/dist/relay-web/assets/stateDiagram-v2-6OUMAXLB-CFIBT7ik.js +0 -1
  72. package/dist/relay-web/assets/swimlanesDiagram-G3AALYLV-Bkhs8WZx.js +0 -8
package/dist/cli.js CHANGED
@@ -1085,14 +1085,17 @@ function boundField(v) {
1085
1085
  }
1086
1086
  function rpcSessionLocks(type, payload) {
1087
1087
  const value = payload;
1088
- if (type === MSG3.prompt || type === MSG3.commandExecute) {
1089
- return typeof value.sessionAlias === "string" && value.sessionAlias ? { alias: value.sessionAlias, lifecycle: false, turn: true } : undefined;
1088
+ if (type === MSG3.prompt) {
1089
+ return typeof value.sessionAlias === "string" && value.sessionAlias ? { alias: value.sessionAlias, lifecycle: false, turn: "shared" } : undefined;
1090
+ }
1091
+ if (type === MSG3.commandExecute) {
1092
+ return typeof value.sessionAlias === "string" && value.sessionAlias ? { alias: value.sessionAlias, lifecycle: false, turn: "exclusive" } : undefined;
1090
1093
  }
1091
1094
  if (type === MSG3.sessionsRename) {
1092
- return typeof value.alias === "string" && value.alias ? { alias: value.alias, lifecycle: true, turn: false } : undefined;
1095
+ return typeof value.alias === "string" && value.alias ? { alias: value.alias, lifecycle: true, turn: "none" } : undefined;
1093
1096
  }
1094
1097
  if (type === MSG3.sessionsCreate || type === MSG3.sessionsRemove || type === MSG3.sessionsArchive || type === MSG3.sessionsUnarchive) {
1095
- return typeof value.alias === "string" && value.alias ? { alias: value.alias, lifecycle: true, turn: true } : undefined;
1098
+ return typeof value.alias === "string" && value.alias ? { alias: value.alias, lifecycle: true, turn: "exclusive" } : undefined;
1096
1099
  }
1097
1100
  return;
1098
1101
  }
@@ -1118,13 +1121,71 @@ function createKeyedRpcLock() {
1118
1121
  };
1119
1122
  };
1120
1123
  }
1124
+ function createKeyedRwLock() {
1125
+ const tails = new Map;
1126
+ const openShared = new Map;
1127
+ function setTail(key, tail) {
1128
+ tails.set(key, tail);
1129
+ tail.then(() => {
1130
+ if (tails.get(key) === tail)
1131
+ tails.delete(key);
1132
+ });
1133
+ }
1134
+ return {
1135
+ async acquireExclusive(key) {
1136
+ openShared.delete(key);
1137
+ const previous = tails.get(key) ?? Promise.resolve();
1138
+ let release;
1139
+ const held = new Promise((resolve) => {
1140
+ release = resolve;
1141
+ });
1142
+ setTail(key, previous.then(() => held));
1143
+ await previous;
1144
+ let released = false;
1145
+ return () => {
1146
+ if (released)
1147
+ return;
1148
+ released = true;
1149
+ release();
1150
+ };
1151
+ },
1152
+ async acquireShared(key) {
1153
+ let group = openShared.get(key);
1154
+ if (!group) {
1155
+ const previous = tails.get(key) ?? Promise.resolve();
1156
+ let settle;
1157
+ const settled = new Promise((resolve) => {
1158
+ settle = resolve;
1159
+ });
1160
+ group = { count: 0, settle, start: previous };
1161
+ openShared.set(key, group);
1162
+ setTail(key, previous.then(() => settled));
1163
+ }
1164
+ group.count += 1;
1165
+ const g = group;
1166
+ await g.start;
1167
+ let released = false;
1168
+ return () => {
1169
+ if (released)
1170
+ return;
1171
+ released = true;
1172
+ g.count -= 1;
1173
+ if (g.count === 0) {
1174
+ if (openShared.get(key) === g)
1175
+ openShared.delete(key);
1176
+ g.settle();
1177
+ }
1178
+ };
1179
+ }
1180
+ };
1181
+ }
1121
1182
  function createApp(deps) {
1122
1183
  const sessionTtlMs = deps.sessionTtlMs ?? 7 * 24 * 60 * 60 * 1000;
1123
1184
  const pairingTtlMs = deps.pairingTtlMs ?? 10 * 60 * 1000;
1124
1185
  const trustProxy = deps.trustProxy ?? false;
1125
1186
  const now = deps.now ?? (() => new Date);
1126
1187
  const acquireSessionLifecycleRpcLock = createKeyedRpcLock();
1127
- const acquireSessionTurnRpcLock = createKeyedRpcLock();
1188
+ const sessionTurnRpcLock = createKeyedRwLock();
1128
1189
  const loginFailures = new Map;
1129
1190
  let globalFailures = { count: 0, windowStart: 0 };
1130
1191
  function sweepPerIpLoginFailures(nowMs) {
@@ -1355,8 +1416,10 @@ function createApp(deps) {
1355
1416
  if (sessionLocks.lifecycle) {
1356
1417
  releaseSessionRpcLocks.push(await acquireSessionLifecycleRpcLock(key));
1357
1418
  }
1358
- if (sessionLocks.turn) {
1359
- releaseSessionRpcLocks.push(await acquireSessionTurnRpcLock(key));
1419
+ if (sessionLocks.turn === "shared") {
1420
+ releaseSessionRpcLocks.push(await sessionTurnRpcLock.acquireShared(key));
1421
+ } else if (sessionLocks.turn === "exclusive") {
1422
+ releaseSessionRpcLocks.push(await sessionTurnRpcLock.acquireExclusive(key));
1360
1423
  }
1361
1424
  }
1362
1425
  if (body.type === MSG3.prompt || body.type === MSG3.commandExecute) {