@kehto/paja 0.5.1 → 0.6.0

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.
@@ -1079,6 +1079,41 @@ function createEventBuffer(sendToNapplet, sessionRegistry2, enforce, subscriptio
1079
1079
  }
1080
1080
  };
1081
1081
  }
1082
+ function stringList(value) {
1083
+ if (!Array.isArray(value)) return void 0;
1084
+ const out = [...new Set(value.filter((item) => typeof item === "string" && item.length > 0))];
1085
+ return out.length > 0 ? out : void 0;
1086
+ }
1087
+ function sidecarFromUnknown(value) {
1088
+ if (!value || typeof value !== "object") return void 0;
1089
+ const input = value;
1090
+ const sidecar = {};
1091
+ if (Array.isArray(input.resources) && input.resources.length > 0) sidecar.resources = input.resources;
1092
+ const relayHints = stringList(input.relayHints);
1093
+ if (relayHints) sidecar.relayHints = relayHints;
1094
+ return sidecar.resources || sidecar.relayHints ? sidecar : void 0;
1095
+ }
1096
+ function createRelayEventResult(event, sidecar) {
1097
+ const normalized = sidecarFromUnknown(sidecar);
1098
+ return normalized ? { event, sidecar: normalized } : { event };
1099
+ }
1100
+ function createRelayEventResultWithHints(event, relayHints) {
1101
+ return createRelayEventResult(event, relayHints && relayHints.length > 0 ? { relayHints } : void 0);
1102
+ }
1103
+ function relayEventResultFromCarrier(carrier) {
1104
+ if (carrier.result && typeof carrier.result === "object") {
1105
+ const result2 = carrier.result;
1106
+ if (result2.event && typeof result2.event === "object") return createRelayEventResult(result2.event, result2.sidecar);
1107
+ }
1108
+ if (carrier.event && typeof carrier.event === "object") {
1109
+ const sidecar = sidecarFromUnknown(carrier.sidecar) ?? sidecarFromUnknown({ resources: carrier.resources });
1110
+ const relayHints = typeof carrier.relay === "string" && carrier.relay.length > 0 ? [carrier.relay] : void 0;
1111
+ const merged = sidecar ? { ...sidecar } : {};
1112
+ if (relayHints) merged.relayHints = relayHints;
1113
+ return createRelayEventResult(carrier.event, merged);
1114
+ }
1115
+ return null;
1116
+ }
1082
1117
  function notifyServiceWindowDestroyed(windowId, services) {
1083
1118
  for (const handler of Object.values(services)) {
1084
1119
  try {
@@ -1119,6 +1154,15 @@ function relayServiceFrom(context) {
1119
1154
  function isShellKindQuery(filters) {
1120
1155
  return filters.length > 0 && filters.every((filter) => filter.kinds?.every((kind) => kind >= 29e3 && kind < 3e4));
1121
1156
  }
1157
+ function sendRelayEvent(hooks, windowId, subId, result2) {
1158
+ hooks.sendToNapplet(windowId, { type: "relay.event", subId, result: result2 });
1159
+ }
1160
+ function normalizeRelayServiceResponse(resp) {
1161
+ const m = resp;
1162
+ if (m.type !== "relay.event") return resp;
1163
+ const result2 = relayEventResultFromCarrier(m);
1164
+ return result2 ? { type: "relay.event", subId: m.subId, result: result2 } : resp;
1165
+ }
1122
1166
  function handleRelaySubscribe(context, windowId, msg, m) {
1123
1167
  const { eventBuffer, hooks, serviceRegistry, subscriptions } = context;
1124
1168
  const subId = m.subId ?? "";
@@ -1127,11 +1171,11 @@ function handleRelaySubscribe(context, windowId, msg, m) {
1127
1171
  const subKey = `${windowId}:${subId}`;
1128
1172
  subscriptions.set(subKey, { windowId, filters });
1129
1173
  const seenIds = /* @__PURE__ */ new Set();
1130
- function deliver(event) {
1174
+ function deliver(event, relayHints) {
1131
1175
  if (seenIds.has(event.id)) return;
1132
1176
  seenIds.add(event.id);
1133
1177
  if (subscriptions.has(subKey)) {
1134
- hooks.sendToNapplet(windowId, { type: "relay.event", subId, event });
1178
+ sendRelayEvent(hooks, windowId, subId, createRelayEventResultWithHints(event, relayHints));
1135
1179
  }
1136
1180
  }
1137
1181
  for (const bufferedEvent of eventBuffer.getBufferedEvents()) {
@@ -1143,12 +1187,12 @@ function handleRelaySubscribe(context, windowId, msg, m) {
1143
1187
  if (!isShellKind && relayService) {
1144
1188
  relayService.handleMessage(windowId, msg, (resp) => {
1145
1189
  if (!subscriptions.has(subKey)) return;
1146
- hooks.sendToNapplet(windowId, resp);
1190
+ hooks.sendToNapplet(windowId, normalizeRelayServiceResponse(resp));
1147
1191
  });
1148
1192
  if (cacheService) {
1149
1193
  cacheService.handleMessage(windowId, msg, (resp) => {
1150
1194
  if (!subscriptions.has(subKey)) return;
1151
- hooks.sendToNapplet(windowId, resp);
1195
+ hooks.sendToNapplet(windowId, normalizeRelayServiceResponse(resp));
1152
1196
  });
1153
1197
  }
1154
1198
  return;
@@ -1188,10 +1232,11 @@ function deliverFromRuntimeBackends(context, windowId, subId, subKey, filters, i
1188
1232
  }
1189
1233
  return;
1190
1234
  }
1191
- deliver(item);
1235
+ const event = item;
1236
+ deliver(event, relayUrls);
1192
1237
  if (cache2?.isAvailable() && !isShellKind) {
1193
1238
  try {
1194
- cache2.store(item);
1239
+ cache2.store(event);
1195
1240
  } catch {
1196
1241
  return;
1197
1242
  }
@@ -1330,7 +1375,7 @@ function handleRelayQuery(context, windowId, m) {
1330
1375
  for (const event of eventBuffer.getBufferedEvents()) {
1331
1376
  if (matchesAnyFilter(event, filters) && !seenIds.has(event.id)) {
1332
1377
  seenIds.add(event.id);
1333
- events.push(event);
1378
+ events.push(createRelayEventResult(event));
1334
1379
  }
1335
1380
  }
1336
1381
  let settled = false;
@@ -1363,9 +1408,10 @@ function handleRelayQuery(context, windowId, m) {
1363
1408
  }, makeCollector2 = function() {
1364
1409
  return function collector(resp) {
1365
1410
  const r = resp;
1366
- if (r.type === "relay.event" && r.event && !seenIds.has(r.event.id)) {
1367
- seenIds.add(r.event.id);
1368
- events.push(r.event);
1411
+ const result2 = r.type === "relay.event" ? relayEventResultFromCarrier(r) : null;
1412
+ if (result2 && !seenIds.has(result2.event.id)) {
1413
+ seenIds.add(result2.event.id);
1414
+ events.push(result2);
1369
1415
  } else if (r.type === "relay.eose") {
1370
1416
  onBackendEose2();
1371
1417
  }
@@ -1407,7 +1453,7 @@ function handleRelayQuery(context, windowId, m) {
1407
1453
  for (const event of cachedEvents) {
1408
1454
  if (!seenIds.has(event.id)) {
1409
1455
  seenIds.add(event.id);
1410
- events.push(event);
1456
+ events.push(createRelayEventResult(event));
1411
1457
  }
1412
1458
  }
1413
1459
  }).catch(() => {
@@ -1434,7 +1480,7 @@ function handleRelayQuery(context, windowId, m) {
1434
1480
  const event = item;
1435
1481
  if (!seenIds.has(event.id)) {
1436
1482
  seenIds.add(event.id);
1437
- events.push(event);
1483
+ events.push(createRelayEventResultWithHints(event, relayUrls));
1438
1484
  }
1439
1485
  if (cache2?.isAvailable()) {
1440
1486
  try {
@@ -7499,7 +7545,7 @@ function createRelayPoolService(options) {
7499
7545
  }
7500
7546
  return;
7501
7547
  }
7502
- send({ type: "relay.event", subId, event: item });
7548
+ send({ type: "relay.event", subId, result: createRelayEventResultWithHints(item, relayUrls2) });
7503
7549
  }, relayUrls2);
7504
7550
  tracked.set(subKey, { handle, eoseTimer });
7505
7551
  return;
@@ -8878,12 +8924,10 @@ function buildEventQuery(eventId, eventOptions) {
8878
8924
  return { filter, queryOptions };
8879
8925
  }
8880
8926
  function eventResultFromQuery(eventId, result2) {
8881
- const event = result2.events.find((candidate) => candidate.id === eventId);
8882
- const eventResult = {
8883
- relays: event ? result2.relays[eventId] ?? [] : []
8884
- };
8885
- if (event) eventResult.event = event;
8886
- if (!event) eventResult.error = result2.error ?? "not found";
8927
+ const relayResult = result2.events.find((candidate) => candidate.event.id === eventId);
8928
+ const eventResult = {};
8929
+ if (relayResult) eventResult.result = relayResult;
8930
+ if (!relayResult) eventResult.error = result2.error ?? "not found";
8887
8931
  else if (result2.error !== void 0) eventResult.error = result2.error;
8888
8932
  if (result2.incomplete !== void 0) eventResult.incomplete = result2.incomplete;
8889
8933
  return eventResult;
@@ -8893,15 +8937,14 @@ function fallbackGetEvent(router, eventId, eventOptions) {
8893
8937
  return router.query([filter], queryOptions).then((result2) => eventResultFromQuery(eventId, result2));
8894
8938
  }
8895
8939
  function sendEventResult(id, eventId, result2, send) {
8896
- if (result2.event && result2.event.id !== eventId) {
8897
- send({ type: "outbox.getEvent.result", id, relays: [], error: "not found" });
8940
+ if (result2.result && result2.result.event.id !== eventId) {
8941
+ send({ type: "outbox.getEvent.result", id, error: "not found" });
8898
8942
  return;
8899
8943
  }
8900
8944
  send({
8901
8945
  type: "outbox.getEvent.result",
8902
8946
  id,
8903
- ...result2.event === void 0 ? {} : { event: result2.event },
8904
- relays: result2.relays,
8947
+ ...result2.result === void 0 ? {} : { result: result2.result },
8905
8948
  ...result2.incomplete === void 0 ? {} : { incomplete: result2.incomplete },
8906
8949
  ...result2.error === void 0 ? {} : { error: result2.error }
8907
8950
  });
@@ -8910,12 +8953,12 @@ function handleGetEvent(router, msg, send) {
8910
8953
  const m = msg;
8911
8954
  const id = m.id ?? "";
8912
8955
  if (typeof m.eventId !== "string" || m.eventId.length === 0) {
8913
- send({ type: "outbox.getEvent.result", id, relays: [], error: "invalid filter" });
8956
+ send({ type: "outbox.getEvent.result", id, error: "invalid filter" });
8914
8957
  return;
8915
8958
  }
8916
8959
  const getEvent = router.getEvent ?? ((eventId, eventOptions) => fallbackGetEvent(router, eventId, eventOptions));
8917
8960
  void getEvent(m.eventId, m.options).then((result2) => sendEventResult(id, m.eventId, result2, send)).catch(
8918
- (err2) => send({ type: "outbox.getEvent.result", id, relays: [], error: toErrorMessage(err2) })
8961
+ (err2) => send({ type: "outbox.getEvent.result", id, error: toErrorMessage(err2) })
8919
8962
  );
8920
8963
  }
8921
8964
  function createOutboxService(options) {
@@ -8929,7 +8972,7 @@ function createOutboxService(options) {
8929
8972
  const id = m.id ?? "";
8930
8973
  const filters = normalizeFilters(m.filters);
8931
8974
  if (!filters) {
8932
- send({ type: "outbox.query.result", id, events: [], relays: {}, error: "invalid filter" });
8975
+ send({ type: "outbox.query.result", id, events: [], error: "invalid filter" });
8933
8976
  return;
8934
8977
  }
8935
8978
  void router.query(filters, m.options).then(
@@ -8937,12 +8980,11 @@ function createOutboxService(options) {
8937
8980
  type: "outbox.query.result",
8938
8981
  id,
8939
8982
  events: result2.events,
8940
- relays: result2.relays,
8941
8983
  ...result2.incomplete === void 0 ? {} : { incomplete: result2.incomplete },
8942
8984
  ...result2.error === void 0 ? {} : { error: result2.error }
8943
8985
  })
8944
8986
  ).catch(
8945
- (err2) => send({ type: "outbox.query.result", id, events: [], relays: {}, error: toErrorMessage(err2) })
8987
+ (err2) => send({ type: "outbox.query.result", id, events: [], error: toErrorMessage(err2) })
8946
8988
  );
8947
8989
  }
8948
8990
  function handleSubscribe2(windowId, msg, send) {
@@ -8958,8 +9000,7 @@ function createOutboxService(options) {
8958
9000
  return;
8959
9001
  }
8960
9002
  const sink = {
8961
- event: (event, relay) => send({ type: "outbox.event", subId, event, ...relay === void 0 ? {} : { relay } }),
8962
- eose: () => send({ type: "outbox.eose", subId }),
9003
+ event: (result2) => send({ type: "outbox.event", subId, result: result2 }),
8963
9004
  closed: (reason) => {
8964
9005
  subscriptions.delete(subKey);
8965
9006
  send({ type: "outbox.closed", subId, ...reason === void 0 ? {} : { reason } });
@@ -10478,13 +10519,13 @@ function createOutboxRouter(pool, getSimulation, confirmRequest, signerProvider)
10478
10519
  error: () => resolve(out)
10479
10520
  });
10480
10521
  });
10481
- return { events, relays: Object.fromEntries(events.map((event) => [event.id, relayUrls])) };
10522
+ return { events: events.map((event) => createRelayEventResultWithHints(event, relayUrls)) };
10482
10523
  },
10483
10524
  subscribe(filters, _options, sink) {
10484
10525
  const relayUrls = getRelayUrls(getSimulation());
10485
10526
  const sub = pool.subscription(relayUrls, filters).subscribe((item) => {
10486
- if (item === "EOSE") sink.eose();
10487
- else sink.event(item, relayUrls[0]);
10527
+ if (item === "EOSE") return;
10528
+ sink.event(createRelayEventResultWithHints(item, relayUrls[0] ? [relayUrls[0]] : relayUrls));
10488
10529
  });
10489
10530
  return { close: () => sub.unsubscribe() };
10490
10531
  },