@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.
- package/dist/browser-host.js +74 -33
- package/dist/browser-host.js.map +1 -1
- package/package.json +4 -4
package/dist/browser-host.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
1235
|
+
const event = item;
|
|
1236
|
+
deliver(event, relayUrls);
|
|
1192
1237
|
if (cache2?.isAvailable() && !isShellKind) {
|
|
1193
1238
|
try {
|
|
1194
|
-
cache2.store(
|
|
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
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
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,
|
|
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
|
|
8882
|
-
const eventResult = {
|
|
8883
|
-
|
|
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.
|
|
8897
|
-
send({ type: "outbox.getEvent.result", id,
|
|
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.
|
|
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,
|
|
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,
|
|
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: [],
|
|
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: [],
|
|
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: (
|
|
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
|
|
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")
|
|
10487
|
-
|
|
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
|
},
|