agent-comms 9.0.8 → 9.0.10
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bridges/user/web/contract.d.ts +1 -1
- package/dist/bridges/user/web/contract.d.ts.map +1 -1
- package/dist/bridges/user/web/contract.js +3 -2
- package/dist/bridges/user/web/contract.js.map +1 -1
- package/dist/bridges/user/web/dist/bundle.js +1 -1
- package/dist/bridges/user/web/dist/mesh-worker.js +4 -4
- package/dist/bridges/user/web/dist/sw.js +1 -1
- package/dist/bridges/user/web/event-id.d.ts +10 -0
- package/dist/bridges/user/web/event-id.d.ts.map +1 -0
- package/dist/bridges/user/web/event-id.js +14 -0
- package/dist/bridges/user/web/event-id.js.map +1 -0
- package/dist/bridges/user/web/event-publisher.d.ts +13 -3
- package/dist/bridges/user/web/event-publisher.d.ts.map +1 -1
- package/dist/bridges/user/web/event-publisher.js +59 -16
- package/dist/bridges/user/web/event-publisher.js.map +1 -1
- package/dist/bridges/user/web/frontend/event-pump.d.ts +4 -2
- package/dist/bridges/user/web/frontend/event-pump.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/event-pump.js +25 -7
- package/dist/bridges/user/web/frontend/event-pump.js.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-worker.js +4 -3
- package/dist/bridges/user/web/frontend/mesh-worker.js.map +1 -1
- package/dist/bridges/user/web/frontend/project-tree.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/project-tree.js +2 -1
- package/dist/bridges/user/web/frontend/project-tree.js.map +1 -1
- package/dist/bridges/user/web/router.d.ts.map +1 -1
- package/dist/bridges/user/web/router.js +5 -6
- package/dist/bridges/user/web/router.js.map +1 -1
- package/dist/bridges/user/web/test/event-publisher.unit.test.d.ts +2 -0
- package/dist/bridges/user/web/test/event-publisher.unit.test.d.ts.map +1 -0
- package/dist/bridges/user/web/test/event-publisher.unit.test.js +245 -0
- package/dist/bridges/user/web/test/event-publisher.unit.test.js.map +1 -0
- package/dist/bridges/user/web/test/orpc-router.integration.test.js +10 -0
- package/dist/bridges/user/web/test/orpc-router.integration.test.js.map +1 -1
- package/dist/core/machine-list-groups.d.ts.map +1 -1
- package/dist/core/machine-list-groups.js +2 -1
- package/dist/core/machine-list-groups.js.map +1 -1
- package/dist/core/ordering.d.ts +14 -0
- package/dist/core/ordering.d.ts.map +1 -0
- package/dist/core/ordering.js +27 -0
- package/dist/core/ordering.js.map +1 -0
- package/dist/core/relay-selection.d.ts.map +1 -1
- package/dist/core/relay-selection.js +2 -1
- package/dist/core/relay-selection.js.map +1 -1
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js +5 -2
- package/dist/core/store.js.map +1 -1
- package/dist/test/bridge-mesh-data-directory.integration.test.js +2 -1
- package/dist/test/bridge-mesh-data-directory.integration.test.js.map +1 -1
- package/dist/test/conformance-functions.helper.d.ts.map +1 -1
- package/dist/test/conformance-functions.helper.js +3 -0
- package/dist/test/conformance-functions.helper.js.map +1 -1
- package/dist/test/conformance-kept-tests.unit.test.js +1 -0
- package/dist/test/conformance-kept-tests.unit.test.js.map +1 -1
- package/dist/test/filestore.unit.test.js +40 -0
- package/dist/test/filestore.unit.test.js.map +1 -1
- package/package.json +2 -2
- package/src/bridges/user/web/contract.ts +5 -2
- package/src/bridges/user/web/dist/bundle.js +1 -1
- package/src/bridges/user/web/dist/mesh-worker.js +4 -4
- package/src/bridges/user/web/dist/sw.js +1 -1
- package/src/bridges/user/web/event-id.ts +18 -0
- package/src/bridges/user/web/event-publisher.ts +68 -18
- package/src/bridges/user/web/router.ts +5 -7
- package/src/core/machine-list-groups.ts +2 -1
- package/src/core/ordering.ts +27 -0
- package/src/core/relay-selection.ts +2 -1
- package/src/core/store.ts +5 -2
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resume rules of the event publisher: an id is `<instance>.<seq>`, a known id replays exactly the later events, and an id that cannot be resumed from (another instance, or older than the retained events) starts from a snapshot.
|
|
3
|
+
*/
|
|
4
|
+
import { getEventMeta } from "@orpc/client";
|
|
5
|
+
import { afterEach, beforeEach, expect, it, vi } from "vitest";
|
|
6
|
+
import { meshContract } from "../contract.js";
|
|
7
|
+
import { INSTANCE_BYTES, MAX_EVENT_ID_LENGTH } from "../event-id.js";
|
|
8
|
+
import { MeshEventPublisher } from "../event-publisher.js";
|
|
9
|
+
/** Retention short enough to age events out by moving the faked clock. */
|
|
10
|
+
const RETENTION_MS = 1_000;
|
|
11
|
+
/** Hex characters of an instance. */
|
|
12
|
+
const INSTANCE_HEX_LENGTH = 16;
|
|
13
|
+
const EVENT_COUNT = 5;
|
|
14
|
+
const THREE = 3;
|
|
15
|
+
const TWO = 2;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
vi.useFakeTimers();
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
vi.useRealTimers();
|
|
21
|
+
});
|
|
22
|
+
const snapshot = () => ({
|
|
23
|
+
kind: "state_sync",
|
|
24
|
+
state: { agents: {}, rooms: {}, messages: {}, dms: {} },
|
|
25
|
+
});
|
|
26
|
+
function patch(name) {
|
|
27
|
+
return {
|
|
28
|
+
kind: "state_patch",
|
|
29
|
+
patch: { type: "agent_offline", agentId: name },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** What a subscriber sees of an event: the agent id of a patch, or "snapshot". */
|
|
33
|
+
function label(event) {
|
|
34
|
+
if (event.kind === "state_sync")
|
|
35
|
+
return "snapshot";
|
|
36
|
+
if (event.kind === "state_patch" && "agentId" in event.patch) {
|
|
37
|
+
return event.patch.agentId;
|
|
38
|
+
}
|
|
39
|
+
throw new Error("unexpected event");
|
|
40
|
+
}
|
|
41
|
+
/** Takes `count` events of a new subscription (with `lastEventId` when given), then stops it. */
|
|
42
|
+
async function take(publisher, count, lastEventId) {
|
|
43
|
+
const labels = [];
|
|
44
|
+
const ids = [];
|
|
45
|
+
const subscription = publisher.subscribe({
|
|
46
|
+
...(lastEventId === undefined ? {} : { lastEventId }),
|
|
47
|
+
snapshot,
|
|
48
|
+
});
|
|
49
|
+
while (labels.length < count) {
|
|
50
|
+
const next = await subscription.next();
|
|
51
|
+
if (next.done === true)
|
|
52
|
+
break;
|
|
53
|
+
labels.push(label(next.value));
|
|
54
|
+
ids.push(getEventMeta(next.value)?.id);
|
|
55
|
+
}
|
|
56
|
+
await subscription.return(undefined);
|
|
57
|
+
return { labels, ids };
|
|
58
|
+
}
|
|
59
|
+
/** The first event a new subscription yields, with a live event published right after subscribing: a subscriber that was wrongly treated as caught up gets that live event first, so the assertion fails instead of the test waiting for a snapshot that never comes. */
|
|
60
|
+
async function firstEvent(publisher, lastEventId) {
|
|
61
|
+
const subscription = publisher.subscribe({ lastEventId, snapshot });
|
|
62
|
+
const first = subscription.next();
|
|
63
|
+
publisher.publish(patch("live-probe"));
|
|
64
|
+
const next = await first;
|
|
65
|
+
await subscription.return(undefined);
|
|
66
|
+
if (next.done === true)
|
|
67
|
+
throw new Error("the subscription ended");
|
|
68
|
+
return label(next.value);
|
|
69
|
+
}
|
|
70
|
+
/** Publishes `e1` to `eN` and returns the id each was given, as a live subscriber saw them. */
|
|
71
|
+
async function publishNumbered(publisher, count, firstNumber = 1) {
|
|
72
|
+
const live = publisher.subscribe({ snapshot });
|
|
73
|
+
await live.next(); // snapshot
|
|
74
|
+
for (let n = firstNumber; n < firstNumber + count; n++) {
|
|
75
|
+
publisher.publish(patch(`e${String(n)}`));
|
|
76
|
+
}
|
|
77
|
+
const ids = [];
|
|
78
|
+
for (let n = 0; n < count; n++) {
|
|
79
|
+
const next = await live.next();
|
|
80
|
+
const id = next.done === true ? undefined : getEventMeta(next.value)?.id;
|
|
81
|
+
if (id === undefined)
|
|
82
|
+
throw new Error("expected an id");
|
|
83
|
+
ids.push(id);
|
|
84
|
+
}
|
|
85
|
+
await live.return(undefined);
|
|
86
|
+
return ids;
|
|
87
|
+
}
|
|
88
|
+
function idAt(ids, index) {
|
|
89
|
+
const id = ids[index];
|
|
90
|
+
if (id === undefined)
|
|
91
|
+
throw new Error("no such id");
|
|
92
|
+
return id;
|
|
93
|
+
}
|
|
94
|
+
it("numbers events as a 16 hex character instance and a sequence", async () => {
|
|
95
|
+
const ids = await publishNumbered(new MeshEventPublisher(), 2);
|
|
96
|
+
expect(ids[0]).toMatch(new RegExp(`^[0-9a-f]{${String(INSTANCE_HEX_LENGTH)}}\\.1$`, "u"));
|
|
97
|
+
expect(ids[1]?.split(".")[0]).toBe(ids[0]?.split(".")[0]);
|
|
98
|
+
expect(ids[1]?.endsWith(".2")).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
it("gives two publishers different instances", async () => {
|
|
101
|
+
const [first] = await publishNumbered(new MeshEventPublisher(), 1);
|
|
102
|
+
const [second] = await publishNumbered(new MeshEventPublisher(), 1);
|
|
103
|
+
expect(first?.split(".")[0]).not.toBe(second?.split(".")[0]);
|
|
104
|
+
});
|
|
105
|
+
it("starts a subscriber with no id from a snapshot, then live events", async () => {
|
|
106
|
+
const publisher = new MeshEventPublisher();
|
|
107
|
+
await publishNumbered(publisher, 2);
|
|
108
|
+
const live = publisher.subscribe({ snapshot });
|
|
109
|
+
expect(label((await live.next()).value)).toBe("snapshot");
|
|
110
|
+
publisher.publish(patch("later"));
|
|
111
|
+
expect(label((await live.next()).value)).toBe("later");
|
|
112
|
+
await live.return(undefined);
|
|
113
|
+
});
|
|
114
|
+
it("replays exactly the events after a known id, and no snapshot", async () => {
|
|
115
|
+
const publisher = new MeshEventPublisher();
|
|
116
|
+
const ids = await publishNumbered(publisher, EVENT_COUNT);
|
|
117
|
+
const { labels } = await take(publisher, 2, idAt(ids, 2));
|
|
118
|
+
expect(labels).toEqual(["e4", "e5"]);
|
|
119
|
+
});
|
|
120
|
+
it("replays nothing for the latest id, then delivers live events", async () => {
|
|
121
|
+
const publisher = new MeshEventPublisher();
|
|
122
|
+
const ids = await publishNumbered(publisher, TWO);
|
|
123
|
+
const live = publisher.subscribe({ lastEventId: idAt(ids, 1), snapshot });
|
|
124
|
+
const first = live.next();
|
|
125
|
+
publisher.publish(patch("live"));
|
|
126
|
+
expect(label((await first).value)).toBe("live");
|
|
127
|
+
await live.return(undefined);
|
|
128
|
+
});
|
|
129
|
+
it("loses no event published while a replay is being delivered, and repeats none", async () => {
|
|
130
|
+
const publisher = new MeshEventPublisher();
|
|
131
|
+
const ids = await publishNumbered(publisher, THREE);
|
|
132
|
+
const live = publisher.subscribe({ lastEventId: idAt(ids, 0), snapshot });
|
|
133
|
+
const first = await live.next();
|
|
134
|
+
publisher.publish(patch("during"));
|
|
135
|
+
const rest = [await live.next(), await live.next()];
|
|
136
|
+
await live.return(undefined);
|
|
137
|
+
expect([first, ...rest].map((next) => label(next.value))).toEqual(["e2", "e3", "during"]);
|
|
138
|
+
});
|
|
139
|
+
it("starts from a snapshot when the id is from another instance, as after a restart", async () => {
|
|
140
|
+
const before = new MeshEventPublisher();
|
|
141
|
+
const staleIds = await publishNumbered(before, 2);
|
|
142
|
+
const restarted = new MeshEventPublisher();
|
|
143
|
+
await publishNumbered(restarted, 2);
|
|
144
|
+
expect(await firstEvent(restarted, idAt(staleIds, 0))).toBe("snapshot");
|
|
145
|
+
});
|
|
146
|
+
it("starts from a snapshot when the id is older than the oldest retained event", async () => {
|
|
147
|
+
const publisher = new MeshEventPublisher({ retentionMs: RETENTION_MS });
|
|
148
|
+
const ids = await publishNumbered(publisher, THREE);
|
|
149
|
+
vi.advanceTimersByTime(RETENTION_MS + 1);
|
|
150
|
+
await publishNumbered(publisher, TWO, THREE + 1);
|
|
151
|
+
expect(await firstEvent(publisher, idAt(ids, 0))).toBe("snapshot");
|
|
152
|
+
});
|
|
153
|
+
it("replays every retained event for the id just before the oldest one, since nothing is missing", async () => {
|
|
154
|
+
const publisher = new MeshEventPublisher({ retentionMs: RETENTION_MS });
|
|
155
|
+
const ids = await publishNumbered(publisher, THREE);
|
|
156
|
+
vi.advanceTimersByTime(RETENTION_MS + 1);
|
|
157
|
+
await publishNumbered(publisher, TWO, THREE + 1);
|
|
158
|
+
const { labels } = await take(publisher, 2, idAt(ids, 2));
|
|
159
|
+
expect(labels).toEqual(["e4", "e5"]);
|
|
160
|
+
});
|
|
161
|
+
it("starts from a snapshot when nothing is retained and the id is not the latest", async () => {
|
|
162
|
+
const publisher = new MeshEventPublisher({ retentionMs: RETENTION_MS });
|
|
163
|
+
const ids = await publishNumbered(publisher, TWO);
|
|
164
|
+
vi.advanceTimersByTime(RETENTION_MS + 1);
|
|
165
|
+
expect(await firstEvent(publisher, idAt(ids, 0))).toBe("snapshot");
|
|
166
|
+
});
|
|
167
|
+
it("treats the latest id as caught up when nothing is retained", async () => {
|
|
168
|
+
const publisher = new MeshEventPublisher({ retentionMs: RETENTION_MS });
|
|
169
|
+
const ids = await publishNumbered(publisher, TWO);
|
|
170
|
+
vi.advanceTimersByTime(RETENTION_MS + 1);
|
|
171
|
+
const live = publisher.subscribe({ lastEventId: idAt(ids, 1), snapshot });
|
|
172
|
+
const first = live.next();
|
|
173
|
+
publisher.publish(patch("live"));
|
|
174
|
+
expect(label((await first).value)).toBe("live");
|
|
175
|
+
await live.return(undefined);
|
|
176
|
+
});
|
|
177
|
+
it.each([
|
|
178
|
+
["not an id", () => "abc"],
|
|
179
|
+
["an instance with no sequence", (instance) => `${instance}.`],
|
|
180
|
+
["a non-numeric sequence", (instance) => `${instance}.x`],
|
|
181
|
+
["a signed sequence", (instance) => `${instance}.-1`],
|
|
182
|
+
["a fractional sequence", (instance) => `${instance}.1.5`],
|
|
183
|
+
["a bare number, the old format", () => "1"],
|
|
184
|
+
])("starts from a snapshot when the id is %s", async (_label, makeId) => {
|
|
185
|
+
const publisher = new MeshEventPublisher();
|
|
186
|
+
const ids = await publishNumbered(publisher, TWO);
|
|
187
|
+
const [instance] = idAt(ids, 0).split(".");
|
|
188
|
+
expect(await firstEvent(publisher, makeId(instance ?? ""))).toBe("snapshot");
|
|
189
|
+
});
|
|
190
|
+
it("starts from a snapshot when the id's sequence is ahead of anything published", async () => {
|
|
191
|
+
const publisher = new MeshEventPublisher();
|
|
192
|
+
const ids = await publishNumbered(publisher, 1);
|
|
193
|
+
const [instance] = idAt(ids, 0).split(".");
|
|
194
|
+
expect(await firstEvent(publisher, `${instance ?? ""}.99`)).toBe("snapshot");
|
|
195
|
+
});
|
|
196
|
+
it("refuses an id longer than any publisher issues before parsing it, even when its parts are valid", async () => {
|
|
197
|
+
const publisher = new MeshEventPublisher();
|
|
198
|
+
const ids = await publishNumbered(publisher, TWO);
|
|
199
|
+
const [instance] = idAt(ids, 0).split(".");
|
|
200
|
+
// Same instance and a sequence that would resume, padded past the longest id with leading zeros.
|
|
201
|
+
const padded = `${instance ?? ""}.${"0".repeat(MAX_EVENT_ID_LENGTH)}1`;
|
|
202
|
+
expect(padded.length).toBeGreaterThan(MAX_EVENT_ID_LENGTH);
|
|
203
|
+
expect(await firstEvent(publisher, padded)).toBe("snapshot");
|
|
204
|
+
});
|
|
205
|
+
it("accepts an id of the longest length a publisher can issue", () => {
|
|
206
|
+
expect(MAX_EVENT_ID_LENGTH).toBe(INSTANCE_BYTES * 2 + 1 + String(Number.MAX_SAFE_INTEGER).length);
|
|
207
|
+
});
|
|
208
|
+
it("bounds what a client may send back as an id in the contract", async () => {
|
|
209
|
+
const schema = meshContract.subscribeEvents["~orpc"].inputSchemas?.[0];
|
|
210
|
+
if (!schema)
|
|
211
|
+
throw new Error("subscribeEvents has no input schema");
|
|
212
|
+
const atLimit = await schema["~standard"].validate({
|
|
213
|
+
lastEventId: "x".repeat(MAX_EVENT_ID_LENGTH),
|
|
214
|
+
});
|
|
215
|
+
const pastLimit = await schema["~standard"].validate({
|
|
216
|
+
lastEventId: "x".repeat(MAX_EVENT_ID_LENGTH + 1),
|
|
217
|
+
});
|
|
218
|
+
expect(atLimit.issues).toBeUndefined();
|
|
219
|
+
expect(pastLimit.issues).toBeDefined();
|
|
220
|
+
});
|
|
221
|
+
it("keeps at most the configured count of events, judging an id that fell off the end as it judges an aged-out one", async () => {
|
|
222
|
+
const publisher = new MeshEventPublisher({ maxBufferedEvents: THREE });
|
|
223
|
+
const ids = await publishNumbered(publisher, THREE);
|
|
224
|
+
// At the cap nothing is evicted: every event after the first replays.
|
|
225
|
+
expect((await take(publisher, TWO, idAt(ids, 0))).labels).toEqual([
|
|
226
|
+
"e2",
|
|
227
|
+
"e3",
|
|
228
|
+
]);
|
|
229
|
+
// One past it the oldest is gone, but the id just before the oldest retained one is missing nothing.
|
|
230
|
+
await publishNumbered(publisher, 1, THREE + 1);
|
|
231
|
+
expect((await take(publisher, THREE, idAt(ids, 0))).labels).toEqual([
|
|
232
|
+
"e2",
|
|
233
|
+
"e3",
|
|
234
|
+
"e4",
|
|
235
|
+
]);
|
|
236
|
+
// Two past it the first id is older than anything retained: it starts from a snapshot.
|
|
237
|
+
await publishNumbered(publisher, 1, THREE + TWO);
|
|
238
|
+
expect((await take(publisher, THREE, idAt(ids, 1))).labels).toEqual([
|
|
239
|
+
"e3",
|
|
240
|
+
"e4",
|
|
241
|
+
"e5",
|
|
242
|
+
]);
|
|
243
|
+
expect(await firstEvent(publisher, idAt(ids, 0))).toBe("snapshot");
|
|
244
|
+
});
|
|
245
|
+
//# sourceMappingURL=event-publisher.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-publisher.unit.test.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/event-publisher.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,6 +89,8 @@ async function nextMeshEvent(iterator) {
|
|
|
89
89
|
const result = await iterator.next();
|
|
90
90
|
return result.done === true ? undefined : result.value;
|
|
91
91
|
}
|
|
92
|
+
/** An event id of an instance no publisher of this run has. */
|
|
93
|
+
const FOREIGN_EVENT_ID = "0000000000000000.1";
|
|
92
94
|
/** A device-id is a hex-encoded SHA-256 hash: 32 bytes, 64 hex characters. */
|
|
93
95
|
const DEVICE_ID_HEX_LENGTH = 64;
|
|
94
96
|
const DRAIN_IDLE_MS = 300;
|
|
@@ -223,6 +225,14 @@ describe("oRPC router over /ws/mesh", () => {
|
|
|
223
225
|
expect(replayedRoomNames).not.toContain("before-disconnect-room");
|
|
224
226
|
await resumed.return?.(undefined);
|
|
225
227
|
});
|
|
228
|
+
it("starts a subscription whose lastEventId belongs to another instance from a state_sync, not a replay", async () => {
|
|
229
|
+
const { client } = await setup();
|
|
230
|
+
await client.createRoom({ name: "events-before", type: "public" });
|
|
231
|
+
const iterator = toMeshIterator(await client.subscribeEvents({ lastEventId: FOREIGN_EVENT_ID }));
|
|
232
|
+
const first = await nextMeshEvent(iterator);
|
|
233
|
+
expect(first?.kind).toBe("state_sync");
|
|
234
|
+
await iterator.return?.(undefined);
|
|
235
|
+
});
|
|
226
236
|
it("getRoomMessages returns a sent message's structured history, not an ActionResult", async () => {
|
|
227
237
|
const { client } = await setup();
|
|
228
238
|
const created = await client.createRoom({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orpc-router.integration.test.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/orpc-router.integration.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orpc-router.integration.test.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/orpc-router.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-list-groups.d.ts","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"machine-list-groups.d.ts","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,oGAAoG;AACpG,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,+VAA+V;AAC/V,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACjD,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,KAAK,GACX,UAAU,EAAE,CAiCd"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* list_agents' machine grouping (agent-comms#343): the listed agents split into one group per machine, this host first, then every other machine by id, then the agents no machine proof places. Split out of tool.ts to keep that file under the repo's max-lines cap.
|
|
3
3
|
*/
|
|
4
|
+
import { compareCodeUnits } from "./ordering.js";
|
|
4
5
|
/** agents grouped by machine, each group keeping the agents' listed order and each heading naming its machine by the display convention (namer). machines maps device id to machine id (MeshStore.listAgentMachines); undefined on a store with no machine identity, in which case, as when no agent is placed on a machine, the list is one ungrouped run. */
|
|
5
6
|
export function groupAgentsByMachine(agents, machines, ownMachine, namer) {
|
|
6
7
|
if (machines === undefined ||
|
|
@@ -27,7 +28,7 @@ export function groupAgentsByMachine(agents, machines, ownMachine, namer) {
|
|
|
27
28
|
return -1;
|
|
28
29
|
if (b === ownMachine)
|
|
29
30
|
return 1;
|
|
30
|
-
return a
|
|
31
|
+
return compareCodeUnits(a, b);
|
|
31
32
|
})
|
|
32
33
|
.map(([machine, members]) => ({
|
|
33
34
|
heading: `Machine ${namer(machine)}${machine === ownMachine ? " (this machine)" : ""}:`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-list-groups.js","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"machine-list-groups.js","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAQjD,+VAA+V;AAC/V,MAAM,UAAU,oBAAoB,CAClC,MAAgC,EAChC,QAAiD,EACjD,UAA8B,EAC9B,KAAY;IAEZ,IACE,QAAQ,KAAK,SAAS;QACtB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC;QACD,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;YACpD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,MAAM,GAAiB,CAAC,GAAG,SAAS,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,WAAW,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG;QACvF,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC,CAAC;IACN,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orderings that depend on neither a locale nor a runtime's collation data, so every implementation sorts the same names the same way. Strings compare by UTF-16 code unit, the order of JavaScript's `<`.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Compares two strings by UTF-16 code unit.
|
|
6
|
+
* @returns A negative number when `a` sorts first, a positive one when `b` does, 0 when they are equal.
|
|
7
|
+
*/
|
|
8
|
+
export declare function compareCodeUnits(a: string, b: string): number;
|
|
9
|
+
/**
|
|
10
|
+
* Compares two names a person reads: ASCII letters are folded to lower case before comparing by UTF-16 code unit, and names that fold equal are ordered by the names as written, so the order is total and stable.
|
|
11
|
+
* @returns A negative number when `a` sorts first, a positive one when `b` does, 0 when they are equal.
|
|
12
|
+
*/
|
|
13
|
+
export declare function compareDisplayNames(a: string, b: string): number;
|
|
14
|
+
//# sourceMappingURL=ordering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ordering.d.ts","sourceRoot":"","sources":["../../src/core/ordering.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7D;AAOD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orderings that depend on neither a locale nor a runtime's collation data, so every implementation sorts the same names the same way. Strings compare by UTF-16 code unit, the order of JavaScript's `<`.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Compares two strings by UTF-16 code unit.
|
|
6
|
+
* @returns A negative number when `a` sorts first, a positive one when `b` does, 0 when they are equal.
|
|
7
|
+
*/
|
|
8
|
+
export function compareCodeUnits(a, b) {
|
|
9
|
+
if (a < b)
|
|
10
|
+
return -1;
|
|
11
|
+
if (a > b)
|
|
12
|
+
return 1;
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
/** Folds the ASCII letters A to Z to lower case and leaves every other character as it is, so no Unicode case table is involved. */
|
|
16
|
+
function foldAsciiCase(name) {
|
|
17
|
+
return name.replace(/[A-Z]/gu, (letter) => letter.toLowerCase());
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Compares two names a person reads: ASCII letters are folded to lower case before comparing by UTF-16 code unit, and names that fold equal are ordered by the names as written, so the order is total and stable.
|
|
21
|
+
* @returns A negative number when `a` sorts first, a positive one when `b` does, 0 when they are equal.
|
|
22
|
+
*/
|
|
23
|
+
export function compareDisplayNames(a, b) {
|
|
24
|
+
const folded = compareCodeUnits(foldAsciiCase(a), foldAsciiCase(b));
|
|
25
|
+
return folded === 0 ? compareCodeUnits(a, b) : folded;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ordering.js","sourceRoot":"","sources":["../../src/core/ordering.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,CAAS;IACnD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,oIAAoI;AACpI,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS;IACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACxD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-selection.d.ts","sourceRoot":"","sources":["../../src/core/relay-selection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"relay-selection.d.ts","sourceRoot":"","sources":["../../src/core/relay-selection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,yFAAyF;AACzF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,iFAAiF;IACjF,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,iFAAiF;AACjF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,kFAAkF;IAClF,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;CACtB;AA+DD,uKAAuK;AACvK,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACnC,aAAa,CAgBf"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Trust stays deny-by-default: an offer from a device reached only through a hub is considered only when gateway trust admits that device (by id, or through a principal it proves membership of), exactly the check that already decides whether a hub-learned device is reachable at all. A machine-local peer's offer needs no separate trust decision, since that peer is already a full member of this store's local mesh. Relay payloads stay end-to-end encrypted between the two devices using it, so trusting a relay is a decision about availability and metadata, never content. A relay forwards between its own directly connected clients, one hop; nothing here routes through a chain of relays.
|
|
7
7
|
*/
|
|
8
8
|
import { BlockList, isIPv4, isIPv6 } from "node:net";
|
|
9
|
+
import { compareCodeUnits } from "./ordering.js";
|
|
9
10
|
/** The private (RFC 1918), IPv4 link-local (RFC 3927), IPv6 unique-local (RFC 4193) and IPv6 link-local ranges: addresses reachable on the local network and nowhere else. */
|
|
10
11
|
const LOCAL_NETWORK_RANGES = new BlockList();
|
|
11
12
|
LOCAL_NETWORK_RANGES.addRange("10.0.0.0", "10.255.255.255", "ipv4");
|
|
@@ -62,7 +63,7 @@ const OFFER_TIERS = [
|
|
|
62
63
|
export function selectRelay(input) {
|
|
63
64
|
const eligible = input.offers
|
|
64
65
|
.filter((offer) => offer.deviceHex !== input.ownDeviceHex)
|
|
65
|
-
.toSorted((a, b) => a.deviceHex
|
|
66
|
+
.toSorted((a, b) => compareCodeUnits(a.deviceHex, b.deviceHex));
|
|
66
67
|
for (const tier of OFFER_TIERS) {
|
|
67
68
|
for (const offer of eligible) {
|
|
68
69
|
const admitted = tier === "machine"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-selection.js","sourceRoot":"","sources":["../../src/core/relay-selection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"relay-selection.js","sourceRoot":"","sources":["../../src/core/relay-selection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AA+BjD,8KAA8K;AAC9K,MAAM,oBAAoB,GAAG,IAAI,SAAS,EAAE,CAAC;AAC7C,oBAAoB,CAAC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;AACpE,oBAAoB,CAAC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;AACtE,oBAAoB,CAAC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AACxE,oBAAoB,CAAC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AACxE,oBAAoB,CAAC,QAAQ,CAC3B,QAAQ,EACR,yCAAyC,EACzC,MAAM,CACP,CAAC;AACF,oBAAoB,CAAC,QAAQ,CAC3B,QAAQ,EACR,yCAAyC,EACzC,MAAM,CACP,CAAC;AAEF,2FAA2F;AAC3F,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,uLAAuL;AACvL,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0HAA0H;AAC1H,SAAS,SAAS,CAAC,OAAe;IAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,CAAC;QACH,sFAAsF;QACtF,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,iGAAiG;AACjG,SAAS,UAAU,CACjB,KAA2B,EAC3B,IAAe;IAEf,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,IAAI,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC;QAC/D,IAAI,IAAI,KAAK,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC;QAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC;IAClE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,WAAW,GAA4C;IAC3D,SAAS;IACT,KAAK;IACL,SAAS;CACV,CAAC;AAEF,uKAAuK;AACvK,MAAM,UAAU,WAAW,CACzB,KAAoC;IAEpC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM;SAC1B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC;SACzD,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAClE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,GACZ,IAAI,KAAK,SAAS;gBAChB,CAAC,CAAC,KAAK,CAAC,YAAY;gBACpB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACrD,CAAC"}
|
package/dist/core/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"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"}
|
package/dist/core/store.js
CHANGED
|
@@ -15,6 +15,7 @@ function swallow(_error) {
|
|
|
15
15
|
/* intentionally empty — expected failure */
|
|
16
16
|
}
|
|
17
17
|
import { AgentIdentitySchema, DeliveryEventSchema, RoomMessageSchema, RoomSchema, } from "./types.js";
|
|
18
|
+
import { compareCodeUnits } from "./ordering.js";
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
19
20
|
// CommsError
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
@@ -411,7 +412,8 @@ export class FileStore {
|
|
|
411
412
|
messages.push(msg);
|
|
412
413
|
}
|
|
413
414
|
}
|
|
414
|
-
|
|
415
|
+
// Every timestamp this store writes is `new Date().toISOString()`: fixed width, UTC, millisecond precision, so UTF-16 order is chronological order (held by a test at the producer).
|
|
416
|
+
messages.sort((a, b) => compareCodeUnits(a.timestamp, b.timestamp));
|
|
415
417
|
return messages;
|
|
416
418
|
}
|
|
417
419
|
catch {
|
|
@@ -466,6 +468,7 @@ export class FileStore {
|
|
|
466
468
|
events.push(event);
|
|
467
469
|
await fs.unlink(path.join(dir, file));
|
|
468
470
|
}
|
|
471
|
+
// Same fixed timestamp form as readRoomMessages sorts on.
|
|
469
472
|
events.sort((a, b) => {
|
|
470
473
|
const ta = a.type === "room_message" || a.type === "dm"
|
|
471
474
|
? a.message.timestamp
|
|
@@ -473,7 +476,7 @@ export class FileStore {
|
|
|
473
476
|
const tb = b.type === "room_message" || b.type === "dm"
|
|
474
477
|
? b.message.timestamp
|
|
475
478
|
: "";
|
|
476
|
-
return ta
|
|
479
|
+
return compareCodeUnits(ta, tb);
|
|
477
480
|
});
|
|
478
481
|
return events;
|
|
479
482
|
}
|