@pairlobby/server-core 0.32.0 → 0.33.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/README.md +1 -1
- package/dist/admission.d.ts +11 -0
- package/dist/admission.d.ts.map +1 -1
- package/dist/admission.js +18 -12
- package/dist/admission.js.map +1 -1
- package/dist/auto-close-store.d.ts +10 -8
- package/dist/auto-close-store.d.ts.map +1 -1
- package/dist/auto-close-store.js +35 -22
- package/dist/auto-close-store.js.map +1 -1
- package/dist/changes.d.ts +25 -11
- package/dist/changes.d.ts.map +1 -1
- package/dist/changes.js +81 -22
- package/dist/changes.js.map +1 -1
- package/dist/commit.d.ts +12 -0
- package/dist/commit.d.ts.map +1 -0
- package/dist/commit.js +33 -0
- package/dist/commit.js.map +1 -0
- package/dist/export.d.ts +12 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +72 -0
- package/dist/export.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/paging.d.ts +12 -0
- package/dist/paging.d.ts.map +1 -0
- package/dist/paging.js +32 -0
- package/dist/paging.js.map +1 -0
- package/dist/ports.d.ts +12 -5
- package/dist/ports.d.ts.map +1 -1
- package/dist/ports.js +12 -9
- package/dist/ports.js.map +1 -1
- package/dist/relay.d.ts +14 -4
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +79 -39
- package/dist/relay.js.map +1 -1
- package/dist/service.d.ts +53 -3
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +459 -207
- package/dist/service.js.map +1 -1
- package/dist/settings.d.ts +33 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +66 -0
- package/dist/settings.js.map +1 -0
- package/dist/store.d.ts +32 -13
- package/dist/store.d.ts.map +1 -1
- package/dist/turns.d.ts +1 -0
- package/dist/turns.d.ts.map +1 -1
- package/dist/turns.js +150 -117
- package/dist/turns.js.map +1 -1
- package/package.json +4 -3
- package/dist/request-backfill.d.ts +0 -3
- package/dist/request-backfill.d.ts.map +0 -1
- package/dist/request-backfill.js +0 -34
- package/dist/request-backfill.js.map +0 -1
package/dist/changes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,gFAAgF;AAChF,oFAAoF;
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"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"}
|
package/dist/commit.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RoomRecord } from '@pairlobby/protocol';
|
|
2
|
+
import type { Mutation } from '@pairlobby/room-core';
|
|
3
|
+
export type RoomChanges = {
|
|
4
|
+
requests?: boolean;
|
|
5
|
+
snapshot?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/** The next state is based on this exact persisted revision, including changes without events. */
|
|
8
|
+
export declare function committedRoom(current: RoomRecord | null, proposed: RoomRecord, changes?: RoomChanges): RoomRecord;
|
|
9
|
+
export declare function mutationChanges(mutation: Mutation): RoomChanges;
|
|
10
|
+
/** Retries only a rejected optimistic commit. A store must never report a conflict after committing. */
|
|
11
|
+
export declare function retryRoomConflict<T>(action: () => Promise<T>): Promise<T>;
|
|
12
|
+
//# sourceMappingURL=commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../src/commit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC;AAEnE,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAUrH;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAI/D;AAED,wGAAwG;AACxG,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAW/E"}
|
package/dist/commit.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ProtocolError } from '@pairlobby/protocol';
|
|
2
|
+
/** The next state is based on this exact persisted revision, including changes without events. */
|
|
3
|
+
export function committedRoom(current, proposed, changes = {}) {
|
|
4
|
+
if (!current || (current.stateRevision ?? 0) !== (proposed.stateRevision ?? 0)) {
|
|
5
|
+
throw new ProtocolError('turn_conflict', 'the room state changed; retry the operation');
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
...proposed,
|
|
9
|
+
stateRevision: (current.stateRevision ?? 0) + 1,
|
|
10
|
+
requestRevision: (current.requestRevision ?? 0) + (changes.requests ? 1 : 0),
|
|
11
|
+
snapshotRevision: (current.snapshotRevision ?? 0) + (changes.snapshot ? 1 : 0)
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function mutationChanges(mutation) {
|
|
15
|
+
const type = mutation.appendEvent.type;
|
|
16
|
+
const mode = mutation.appendEvent.type === 'conversation.turn_changed' && mutation.appendEvent.payload.action === 'mode';
|
|
17
|
+
return { requests: Boolean(mutation.upsertRequests?.length), snapshot: type.startsWith('room.') || type.startsWith('participant.') || type.startsWith('control.') || mode };
|
|
18
|
+
}
|
|
19
|
+
/** Retries only a rejected optimistic commit. A store must never report a conflict after committing. */
|
|
20
|
+
export async function retryRoomConflict(action) {
|
|
21
|
+
for (let attempt = 0;; attempt++) {
|
|
22
|
+
try {
|
|
23
|
+
return await action();
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (!(error instanceof ProtocolError) || error.code !== 'turn_conflict' || attempt >= 5) {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
await new Promise((resolve) => setTimeout(resolve, Math.ceil(Math.random() * Math.min(2 ** attempt, 25))));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../src/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAMlD,kGAAkG;AAClG,MAAM,UAAU,aAAa,CAAC,OAA0B,EAAE,QAAoB,EAAE,UAAuB,EAAE;IACrG,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,aAAa,CAAC,eAAe,EAAE,6CAA6C,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO;QACH,GAAG,QAAQ;QACX,aAAa,EAAE,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC;QAC/C,eAAe,EAAE,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,gBAAgB,EAAE,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjF,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAkB;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,2BAA2B,IAAI,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;IACzH,OAAO,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,EAAC,CAAC;AAC9K,CAAC;AAED,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAI,MAAwB;IAC/D,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,OAAO,MAAM,MAAM,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACtF,MAAM,KAAK,CAAC;YAChB,CAAC;YACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrH,CAAC;IACL,CAAC;AACL,CAAC"}
|
package/dist/export.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ExportMetadata, RoomEvent } from '@pairlobby/protocol';
|
|
2
|
+
import type { RoomStore } from './store.js';
|
|
3
|
+
export type ExportFormat = 'json' | 'ndjson';
|
|
4
|
+
export type ExportSource = {
|
|
5
|
+
metadata: ExportMetadata;
|
|
6
|
+
events: AsyncIterable<RoomEvent>;
|
|
7
|
+
};
|
|
8
|
+
/** Bind replay to the captured head. A concurrent retention gap fails the stream instead of claiming a complete export. */
|
|
9
|
+
export declare function retainedEvents(store: RoomStore, roomId: string, earliest: number, latest: number): AsyncGenerator<RoomEvent>;
|
|
10
|
+
/** One event per pull; backpressure and cancellation propagate to archived and live event sources alike. */
|
|
11
|
+
export declare function exportResponse(source: ExportSource, format?: ExportFormat): Response;
|
|
12
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;CAAC,CAAC;AAExF,2HAA2H;AAC3H,wBAAuB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAenI;AAED,4GAA4G;AAC5G,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,YAAqB,GAAG,QAAQ,CAkD5F"}
|
package/dist/export.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, ProtocolError } from '@pairlobby/protocol';
|
|
2
|
+
/** Bind replay to the captured head. A concurrent retention gap fails the stream instead of claiming a complete export. */
|
|
3
|
+
export async function* retainedEvents(store, roomId, earliest, latest) {
|
|
4
|
+
let after = earliest - 1;
|
|
5
|
+
while (after < latest) {
|
|
6
|
+
const page = await store.readEvents(roomId, after, 100, latest);
|
|
7
|
+
if (page.events.length === 0) {
|
|
8
|
+
throw new ProtocolError('cursor_gap', 'history changed during export; retry');
|
|
9
|
+
}
|
|
10
|
+
for (const event of page.events) {
|
|
11
|
+
if (event.seq !== after + 1) {
|
|
12
|
+
throw new ProtocolError('cursor_gap', 'history changed during export; retry');
|
|
13
|
+
}
|
|
14
|
+
after = event.seq;
|
|
15
|
+
yield event;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** One event per pull; backpressure and cancellation propagate to archived and live event sources alike. */
|
|
20
|
+
export function exportResponse(source, format = 'json') {
|
|
21
|
+
const encoder = new TextEncoder();
|
|
22
|
+
const events = source.events[Symbol.asyncIterator]();
|
|
23
|
+
let started = false;
|
|
24
|
+
let count = 0;
|
|
25
|
+
let finished = false;
|
|
26
|
+
let timer;
|
|
27
|
+
const stream = new ReadableStream({
|
|
28
|
+
start(controller) {
|
|
29
|
+
timer = setTimeout(() => {
|
|
30
|
+
finished = true;
|
|
31
|
+
controller.error(new Error('Export timed out; retry with a faster connection'));
|
|
32
|
+
void events.return?.().catch(() => { });
|
|
33
|
+
}, 120_000);
|
|
34
|
+
},
|
|
35
|
+
async cancel() {
|
|
36
|
+
finished = true;
|
|
37
|
+
clearTimeout(timer);
|
|
38
|
+
await events.return?.();
|
|
39
|
+
},
|
|
40
|
+
async pull(controller) {
|
|
41
|
+
try {
|
|
42
|
+
if (!started) {
|
|
43
|
+
started = true;
|
|
44
|
+
const header = format === 'ndjson' ? JSON.stringify({ kind: 'metadata', metadata: source.metadata }) + '\n' : JSON.stringify(source.metadata).slice(0, -1) + ',"events":[';
|
|
45
|
+
controller.enqueue(encoder.encode(header));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const next = await events.next();
|
|
49
|
+
if (finished) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (next.done) {
|
|
53
|
+
finished = true;
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
controller.enqueue(encoder.encode(format === 'ndjson' ? JSON.stringify({ kind: 'complete', events: count }) + '\n' : ']}\n'));
|
|
56
|
+
controller.close();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
controller.enqueue(encoder.encode(format === 'ndjson' ? JSON.stringify({ kind: 'event', event: next.value }) + '\n' : (count ? ',' : '') + JSON.stringify(next.value)));
|
|
60
|
+
count++;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
finished = true;
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
controller.error(error);
|
|
66
|
+
await events.return?.();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}, { highWaterMark: 0 });
|
|
70
|
+
return new Response(stream, { headers: { 'content-type': format === 'ndjson' ? 'application/x-ndjson' : 'application/json', 'cache-control': 'private, no-store', [PROTOCOL_VERSION_HEADER]: String(PROTOCOL_VERSION) } });
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,uBAAuB,EAAE,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAQ7F,2HAA2H;AAC3H,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,cAAc,CAAC,KAAgB,EAAE,MAAc,EAAE,QAAgB,EAAE,MAAc;IACpG,IAAI,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;IACzB,OAAO,KAAK,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,aAAa,CAAC,YAAY,EAAE,sCAAsC,CAAC,CAAC;QAClF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,aAAa,CAAC,YAAY,EAAE,sCAAsC,CAAC,CAAC;YAClF,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;YAClB,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;AACL,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,cAAc,CAAC,MAAoB,EAAE,SAAuB,MAAM;IAC9E,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,KAAoC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,cAAc,CAAa;QAC1C,KAAK,CAAC,UAAU;YACZ,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpB,QAAQ,GAAG,IAAI,CAAC;gBAChB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;gBAChF,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3C,CAAC,EAAE,OAAO,CAAC,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,MAAM;YACR,QAAQ,GAAG,IAAI,CAAC;YAChB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAU;YACjB,IAAI,CAAC;gBACD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACX,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,MAAM,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;oBACzK,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3C,OAAO;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,QAAQ,EAAE,CAAC;oBACX,OAAO;gBACX,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,QAAQ,GAAG,IAAI,CAAC;oBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC5H,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO;gBACX,CAAC;gBACD,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtK,KAAK,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxB,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5B,CAAC;QACL,CAAC;KACJ,EAAE,EAAC,aAAa,EAAE,CAAC,EAAC,CAAC,CAAC;IACvB,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAC,OAAO,EAAE,EAAC,cAAc,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAC,EAAC,CAAC,CAAC;AAC3N,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export * from './admission.js';
|
|
2
|
+
export * from './commit.js';
|
|
3
|
+
export * from './export.js';
|
|
4
|
+
export * from './paging.js';
|
|
2
5
|
export * from './ports.js';
|
|
3
6
|
export * from './relay.js';
|
|
4
7
|
export * from './router.js';
|
|
5
8
|
export * from './service.js';
|
|
6
9
|
export * from './stable-json.js';
|
|
7
10
|
export * from './store.js';
|
|
11
|
+
export * from './settings.js';
|
|
8
12
|
export * from './auto-close-store.js';
|
|
9
13
|
export * from './changes.js';
|
|
10
|
-
export * from './request-backfill.js';
|
|
11
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export * from './admission.js';
|
|
2
|
+
export * from './commit.js';
|
|
3
|
+
export * from './export.js';
|
|
4
|
+
export * from './paging.js';
|
|
2
5
|
export * from './ports.js';
|
|
3
6
|
export * from './relay.js';
|
|
4
7
|
export * from './router.js';
|
|
5
8
|
export * from './service.js';
|
|
6
9
|
export * from './stable-json.js';
|
|
7
10
|
export * from './store.js';
|
|
11
|
+
export * from './settings.js';
|
|
8
12
|
export * from './auto-close-store.js';
|
|
9
13
|
export * from './changes.js';
|
|
10
|
-
export * from './request-backfill.js';
|
|
11
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC"}
|
package/dist/paging.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MessageRequest, RequestPage } from '@pairlobby/protocol';
|
|
2
|
+
import type { EventPage } from './store.js';
|
|
3
|
+
export declare const MAX_PAGE_BYTES: number;
|
|
4
|
+
export declare const MAX_PAGE_RECORDS = 500;
|
|
5
|
+
export type JsonRow = {
|
|
6
|
+
body: string;
|
|
7
|
+
receivedAt?: number | null;
|
|
8
|
+
};
|
|
9
|
+
export declare function eventPage(rows: Iterable<JsonRow>, limit: number): EventPage;
|
|
10
|
+
export declare function requestPage(rows: Iterable<JsonRow>, limit: number): RequestPage;
|
|
11
|
+
export declare function receivedRequest(row: JsonRow): MessageRequest;
|
|
12
|
+
//# sourceMappingURL=paging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../src/paging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAE,WAAW,EAAY,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,cAAc,QAAa,CAAC;AACzC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,MAAM,MAAM,OAAO,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAC,CAAC;AAsBjE,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAG3E;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAG/E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAG5D"}
|
package/dist/paging.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const MAX_PAGE_BYTES = 256 * 1024;
|
|
2
|
+
export const MAX_PAGE_RECORDS = 500;
|
|
3
|
+
/** Consume a cursor only through the first record that would exceed the page, including a single large legacy record. */
|
|
4
|
+
function jsonPage(rows, limit, decode) {
|
|
5
|
+
const records = [];
|
|
6
|
+
let bytes = 0;
|
|
7
|
+
const count = Math.max(1, Math.min(limit, MAX_PAGE_RECORDS));
|
|
8
|
+
const encoder = new TextEncoder();
|
|
9
|
+
for (const row of rows) {
|
|
10
|
+
const record = decode(row);
|
|
11
|
+
const size = encoder.encode(JSON.stringify(record)).byteLength;
|
|
12
|
+
if (records.length >= count || (records.length > 0 && bytes + size > MAX_PAGE_BYTES)) {
|
|
13
|
+
return { records, hasMore: true };
|
|
14
|
+
}
|
|
15
|
+
records.push(record);
|
|
16
|
+
bytes += size;
|
|
17
|
+
}
|
|
18
|
+
return { records, hasMore: false };
|
|
19
|
+
}
|
|
20
|
+
export function eventPage(rows, limit) {
|
|
21
|
+
const { records, hasMore } = jsonPage(rows, limit, (row) => JSON.parse(row.body));
|
|
22
|
+
return { events: records, hasMore };
|
|
23
|
+
}
|
|
24
|
+
export function requestPage(rows, limit) {
|
|
25
|
+
const { records, hasMore } = jsonPage(rows, limit, receivedRequest);
|
|
26
|
+
return { requests: records, hasMore };
|
|
27
|
+
}
|
|
28
|
+
export function receivedRequest(row) {
|
|
29
|
+
const request = JSON.parse(row.body);
|
|
30
|
+
return { ...request, receivedAt: request.receivedAt ?? row.receivedAt ?? null };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=paging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paging.js","sourceRoot":"","sources":["../src/paging.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAKpC,yHAAyH;AACzH,SAAS,QAAQ,CAAI,IAAuB,EAAE,KAAa,EAAE,MAAsB;IAC/E,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC;YACnF,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,IAAI,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAuB,EAAE,KAAa;IAC5D,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,QAAQ,CAAY,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAc,CAAC,CAAC;IACxG,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAuB,EAAE,KAAa;IAC9D,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,QAAQ,CAAiB,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAClF,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAY;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAmB,CAAC;IACvD,OAAO,EAAC,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,EAAC,CAAC;AAClF,CAAC"}
|
package/dist/ports.d.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
+
import type { RoomSnapshot } from '@pairlobby/protocol';
|
|
2
|
+
export type ConnectionAuthorization = (participantId: string) => Promise<RoomSnapshot>;
|
|
3
|
+
/** Transport owns tickets and sockets; the kernel supplies authorization again at upgrade. */
|
|
4
|
+
export interface RoomConnections {
|
|
5
|
+
ticket(roomId: string, participantId: string, expiresAt: number, request: Request): Promise<string>;
|
|
6
|
+
connect(roomId: string, request: Request, authorize: ConnectionAuthorization): Promise<Response>;
|
|
7
|
+
}
|
|
1
8
|
/** What the transport knows about a request and no header can claim. */
|
|
2
9
|
export type RequestContext = {
|
|
3
10
|
/** The address of the connection the request arrived on; absent when the platform cannot see it. */
|
|
4
11
|
peerAddress?: string;
|
|
5
12
|
};
|
|
6
13
|
/**
|
|
7
|
-
* Runs a room
|
|
8
|
-
*
|
|
14
|
+
* Runs a short room operation in order. `write` identifies an explicit mutation; reads may still
|
|
15
|
+
* enforce a persisted deadline. Never hold this scope while waiting for a notification or a client.
|
|
9
16
|
*/
|
|
10
17
|
export interface RoomExecutor {
|
|
11
18
|
run<T>(roomId: string | null, write: boolean, action: () => Promise<T>): Promise<T>;
|
|
@@ -14,13 +21,13 @@ export interface RoomExecutor {
|
|
|
14
21
|
}
|
|
15
22
|
/** Wakes the kernel's `tick` at a time; `null` cancels the wake-up. A later call replaces an earlier one. */
|
|
16
23
|
export interface Scheduler {
|
|
17
|
-
plan(at: number | null): void
|
|
24
|
+
plan(at: number | null): void | Promise<void>;
|
|
18
25
|
}
|
|
19
26
|
/** Runs everything as it comes, for a platform that already orders a room's work, such as a Durable Object. */
|
|
20
27
|
export declare function directExecutor(): RoomExecutor;
|
|
21
28
|
/**
|
|
22
|
-
* One queue
|
|
23
|
-
*
|
|
29
|
+
* One queue per room. SQLite transactions remain synchronous, while unrelated rooms may overlap
|
|
30
|
+
* their asynchronous reads and hashing. A null key orders owner-wide maintenance independently.
|
|
24
31
|
*/
|
|
25
32
|
export declare function queueExecutor(): RoomExecutor;
|
|
26
33
|
type TimerSchedulerOptions = {
|
package/dist/ports.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAIA,wEAAwE;AACxE,MAAM,MAAM,cAAc,GAAG;IACzB,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpF,6DAA6D;IAC7D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,6GAA6G;AAC7G,MAAM,WAAW,SAAS;IACtB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,uBAAuB,GAAG,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAEvF,8FAA8F;AAC9F,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACpG;AAED,wEAAwE;AACxE,MAAM,MAAM,cAAc,GAAG;IACzB,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpF,6DAA6D;IAC7D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,6GAA6G;AAC7G,MAAM,WAAW,SAAS;IACtB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,+GAA+G;AAC/G,wBAAgB,cAAc,IAAI,YAAY,CAK7C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAe5C;AAED,KAAK,qBAAqB,GAAG;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAC,CAAC;AAElD,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAC,GAAc,EAAC,GAAE,qBAA0B,GAAG,SAAS,GAAG;IAAC,IAAI,IAAI,IAAI,CAAA;CAAC,CAkBzH"}
|
package/dist/ports.js
CHANGED
|
@@ -9,20 +9,23 @@ export function directExecutor() {
|
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* One queue
|
|
13
|
-
*
|
|
12
|
+
* One queue per room. SQLite transactions remain synchronous, while unrelated rooms may overlap
|
|
13
|
+
* their asynchronous reads and hashing. A null key orders owner-wide maintenance independently.
|
|
14
14
|
*/
|
|
15
15
|
export function queueExecutor() {
|
|
16
|
-
|
|
16
|
+
const queues = new Map();
|
|
17
17
|
return {
|
|
18
|
-
run(
|
|
19
|
-
const result =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
run(roomId, _write, action) {
|
|
19
|
+
const result = (queues.get(roomId) ?? Promise.resolve()).then(action);
|
|
20
|
+
const pending = result.catch(() => { }).finally(() => {
|
|
21
|
+
if (queues.get(roomId) === pending) {
|
|
22
|
+
queues.delete(roomId);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
queues.set(roomId, pending);
|
|
23
26
|
return result;
|
|
24
27
|
},
|
|
25
|
-
idle: () =>
|
|
28
|
+
idle: () => Promise.all([...queues.values()]).then(() => { })
|
|
26
29
|
};
|
|
27
30
|
}
|
|
28
31
|
/** A `setTimeout` per wake-up that never keeps the process alive; `stop` cancels it for good. */
|
package/dist/ports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,sFAAsF;AACtF,6EAA6E;
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,sFAAsF;AACtF,6EAA6E;AAiC7E,+GAA+G;AAC/G,MAAM,UAAU,cAAc;IAC1B,OAAO;QACH,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;QAC1C,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;KAChC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IACzB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC1D,OAAO;QACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM;YACtB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBAChD,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;oBACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;YACL,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;KAC/D,CAAC;AACN,CAAC;AAID,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,EAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAA2B,EAAE;IACzF,IAAI,KAAgD,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO;QACH,IAAI,CAAC,EAAE;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,SAAS,CAAC;YAClB,IAAI,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO;YACX,CAAC;YACD,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACxE,KAA8B,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI;YACA,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;KACJ,CAAC;AACN,CAAC"}
|
package/dist/relay.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { LiveTransport, LocalRoom, ReceiptMode, RelayLimits, ServerDescription } from '@pairlobby/protocol';
|
|
2
2
|
import type { Admission, RelayMember } from './admission.js';
|
|
3
|
-
import type {
|
|
4
|
-
import type { RequestContext, RoomExecutor, Scheduler } from './ports.js';
|
|
5
|
-
import type { RoomService } from './service.js';
|
|
3
|
+
import type { RoomChangeNotifier } from './changes.js';
|
|
4
|
+
import type { RequestContext, RoomConnections, RoomExecutor, Scheduler } from './ports.js';
|
|
5
|
+
import type { CreateRoomInput, RoomService } from './service.js';
|
|
6
6
|
import type { DirectoryStore } from './store.js';
|
|
7
7
|
export interface RelayOptions {
|
|
8
8
|
service: RoomService;
|
|
9
|
+
/** Host account/quota hooks may have their own HTTP errors; protocol errors always retain the kernel's mapping. */
|
|
10
|
+
extensionError?: (error: unknown) => Response | undefined;
|
|
9
11
|
/** Orders each room's work; defaults to running it as it comes, for a platform that orders it already. */
|
|
10
12
|
executor?: RoomExecutor;
|
|
11
13
|
/** Wakes `tick` for the next auto-close. Absent means the platform runs `tick` itself, such as from a Durable Object alarm. */
|
|
@@ -41,12 +43,15 @@ export interface RelayOptions {
|
|
|
41
43
|
* Wakes held reads. Present means the relay offers long-poll: `GET .../events?wait=` waits for a change
|
|
42
44
|
* instead of answering empty. Only a relay whose writes all pass through one process can offer it.
|
|
43
45
|
*/
|
|
44
|
-
changes?:
|
|
46
|
+
changes?: RoomChangeNotifier;
|
|
45
47
|
/**
|
|
46
48
|
* How clients hear about new events, when the relay knows. Defaults to `long-poll` with `changes` and is
|
|
47
49
|
* otherwise left out, so a client keeps its own rule; a relay with a socket hub says `websocket`.
|
|
48
50
|
*/
|
|
49
51
|
transport?: LiveTransport;
|
|
52
|
+
connections?: RoomConnections;
|
|
53
|
+
/** Account/plan policy may prepare a creation; the kernel still validates the wire body and chooses the room ID. */
|
|
54
|
+
prepareCreate?: (context: RoomCreationContext) => Promise<CreateRoomInput>;
|
|
50
55
|
/** Features beyond those the router can see for itself. */
|
|
51
56
|
features?: string[];
|
|
52
57
|
/**
|
|
@@ -84,6 +89,11 @@ export interface RelayOptions {
|
|
|
84
89
|
/** The member with this handle, or null; lets the directory tell an unknown handle from one with nothing shared. */
|
|
85
90
|
memberByHandle?: (handle: string) => RelayMember | null;
|
|
86
91
|
}
|
|
92
|
+
export type RoomCreationContext = {
|
|
93
|
+
input: CreateRoomInput;
|
|
94
|
+
body: Record<string, unknown>;
|
|
95
|
+
request: Request;
|
|
96
|
+
};
|
|
87
97
|
/**
|
|
88
98
|
* Internal claim from `edge` to `inRoom`: the member whose personal token came with a room
|
|
89
99
|
* creation or an invite redemption. `edge` removes any copy a caller sent.
|
package/dist/relay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|