@may-db/core 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/package.json +2 -2
  2. package/dist/Client.d.ts +0 -20
  3. package/dist/Client.d.ts.map +0 -1
  4. package/dist/Client.js +0 -163
  5. package/dist/Client.js.map +0 -1
  6. package/dist/IndexRuntime.d.ts +0 -60
  7. package/dist/IndexRuntime.d.ts.map +0 -1
  8. package/dist/IndexRuntime.js +0 -340
  9. package/dist/IndexRuntime.js.map +0 -1
  10. package/dist/RuntimeIndexHandle.d.ts +0 -29
  11. package/dist/RuntimeIndexHandle.d.ts.map +0 -1
  12. package/dist/RuntimeIndexHandle.js +0 -48
  13. package/dist/RuntimeIndexHandle.js.map +0 -1
  14. package/dist/errors.d.ts +0 -12
  15. package/dist/errors.d.ts.map +0 -1
  16. package/dist/errors.js +0 -15
  17. package/dist/errors.js.map +0 -1
  18. package/dist/hooks/useAllowedRooms.d.ts +0 -12
  19. package/dist/hooks/useAllowedRooms.d.ts.map +0 -1
  20. package/dist/hooks/useAllowedRooms.js +0 -29
  21. package/dist/hooks/useAllowedRooms.js.map +0 -1
  22. package/dist/hooks/useAsync.d.ts +0 -8
  23. package/dist/hooks/useAsync.d.ts.map +0 -1
  24. package/dist/hooks/useAsync.js +0 -29
  25. package/dist/hooks/useAsync.js.map +0 -1
  26. package/dist/hooks/useAuth.d.ts +0 -11
  27. package/dist/hooks/useAuth.d.ts.map +0 -1
  28. package/dist/hooks/useAuth.js +0 -45
  29. package/dist/hooks/useAuth.js.map +0 -1
  30. package/dist/hooks/usePresence.d.ts +0 -30
  31. package/dist/hooks/usePresence.d.ts.map +0 -1
  32. package/dist/hooks/usePresence.js +0 -95
  33. package/dist/hooks/usePresence.js.map +0 -1
  34. package/dist/hooks/useRoom.d.ts +0 -11
  35. package/dist/hooks/useRoom.d.ts.map +0 -1
  36. package/dist/hooks/useRoom.js +0 -37
  37. package/dist/hooks/useRoom.js.map +0 -1
  38. package/dist/hooks/useRoomMembers.d.ts +0 -12
  39. package/dist/hooks/useRoomMembers.d.ts.map +0 -1
  40. package/dist/hooks/useRoomMembers.js +0 -37
  41. package/dist/hooks/useRoomMembers.js.map +0 -1
  42. package/dist/indexing/roomRegistry.d.ts +0 -26
  43. package/dist/indexing/roomRegistry.d.ts.map +0 -1
  44. package/dist/indexing/roomRegistry.js +0 -125
  45. package/dist/indexing/roomRegistry.js.map +0 -1
  46. package/dist/indexing.d.ts +0 -93
  47. package/dist/indexing.d.ts.map +0 -1
  48. package/dist/indexing.js +0 -394
  49. package/dist/indexing.js.map +0 -1
  50. package/dist/indexingErrors.d.ts +0 -9
  51. package/dist/indexingErrors.d.ts.map +0 -1
  52. package/dist/indexingErrors.js +0 -11
  53. package/dist/indexingErrors.js.map +0 -1
  54. package/dist/indexingRoomStore.d.ts +0 -26
  55. package/dist/indexingRoomStore.d.ts.map +0 -1
  56. package/dist/indexingRoomStore.js +0 -125
  57. package/dist/indexingRoomStore.js.map +0 -1
  58. package/dist/indexingRows.d.ts +0 -8
  59. package/dist/indexingRows.d.ts.map +0 -1
  60. package/dist/indexingRows.js +0 -114
  61. package/dist/indexingRows.js.map +0 -1
  62. package/dist/indexingTypes.d.ts +0 -9
  63. package/dist/indexingTypes.d.ts.map +0 -1
  64. package/dist/indexingTypes.js +0 -2
  65. package/dist/indexingTypes.js.map +0 -1
  66. package/dist/matrix-crdt-shim.d.ts +0 -43
  67. package/dist/matrix-crdt-shim.d.ts.map +0 -1
  68. package/dist/matrix-crdt-shim.js +0 -2
  69. package/dist/matrix-crdt-shim.js.map +0 -1
  70. package/dist/singletonRoom.d.ts +0 -3
  71. package/dist/singletonRoom.d.ts.map +0 -1
  72. package/dist/singletonRoom.js +0 -8
  73. package/dist/singletonRoom.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@may-db/core",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -27,7 +27,7 @@
27
27
  "typescript": "~5.9.3"
28
28
  },
29
29
  "scripts": {
30
- "build": "tsc -p tsconfig.json",
30
+ "build": "node -e \"const fs = require('node:fs'); fs.rmSync('dist', { recursive: true, force: true }); fs.rmSync('node_modules/.tmp/tsconfig.sdk.tsbuildinfo', { force: true });\" && tsc -p tsconfig.json",
31
31
  "lint": "eslint src",
32
32
  "postinstall": "patch-package"
33
33
  }
package/dist/Client.d.ts DELETED
@@ -1,20 +0,0 @@
1
- import { Room } from "./Room";
2
- import type { AuthData, RoomConfig, MatrixClient, InviteInfo, InviteMonitorOptions } from "./types";
3
- export declare class Client {
4
- readonly auth: AuthData;
5
- readonly userId: string;
6
- readonly config: RoomConfig;
7
- /** @internal */
8
- readonly matrixClient: MatrixClient;
9
- private readonly roomCache;
10
- constructor(auth: AuthData, config: RoomConfig);
11
- getRoom(roomId: string): Room;
12
- createRoom(title: string): Promise<Room>;
13
- createMatrixRoom(title: string): Promise<string>;
14
- fetchPendingInvites(): Promise<InviteInfo[]>;
15
- startInviteMonitor(options: InviteMonitorOptions): () => void;
16
- hasMarkerEvent(roomId: string): Promise<boolean>;
17
- disposeAll(): void;
18
- logout(): Promise<void>;
19
- }
20
- //# sourceMappingURL=Client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EAErB,MAAM,SAAS,CAAC;AAEjB,qBAAa,MAAM;IACjB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,gBAAgB;IAChB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;gBAEzC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAY9C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAcvB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BhD,mBAAmB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAwElD,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAuCvD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAStD,UAAU,IAAI,IAAI;IAOZ,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAY9B"}
package/dist/Client.js DELETED
@@ -1,163 +0,0 @@
1
- import * as sdk from "matrix-js-sdk";
2
- import { Room } from "./Room";
3
- import { removeAuth } from "./authStorage";
4
- export class Client {
5
- auth;
6
- userId;
7
- config;
8
- /** @internal */
9
- matrixClient;
10
- roomCache = new Map();
11
- constructor(auth, config) {
12
- this.auth = auth;
13
- this.userId = auth.userId;
14
- this.config = config;
15
- this.matrixClient = sdk.createClient({
16
- baseUrl: auth.homeserver,
17
- accessToken: auth.accessToken,
18
- userId: auth.userId,
19
- deviceId: auth.deviceId,
20
- });
21
- }
22
- getRoom(roomId) {
23
- let room = this.roomCache.get(roomId);
24
- if (!room) {
25
- const services = {
26
- matrixClient: this.matrixClient,
27
- config: this.config,
28
- removeRoom: (id) => this.roomCache.delete(id),
29
- };
30
- room = new Room(services, roomId);
31
- this.roomCache.set(roomId, room);
32
- }
33
- return room;
34
- }
35
- async createRoom(title) {
36
- const roomId = await this.createMatrixRoom(title);
37
- return this.getRoom(roomId);
38
- }
39
- async createMatrixRoom(title) {
40
- const timestamp = Date.now();
41
- const randomSuffix = Math.random().toString(36).substring(2, 8);
42
- const localAlias = `${this.config.aliasPrefix}-${timestamp}-${randomSuffix}`;
43
- const response = await this.matrixClient.createRoom({
44
- name: title,
45
- room_alias_name: localAlias,
46
- visibility: sdk.Visibility.Private,
47
- preset: sdk.Preset.PrivateChat,
48
- creation_content: { type: "m.space" },
49
- initial_state: [
50
- {
51
- type: "m.room.history_visibility",
52
- content: { history_visibility: "shared" },
53
- },
54
- {
55
- type: this.config.markerEventType,
56
- state_key: "",
57
- content: { version: 1 },
58
- },
59
- ],
60
- });
61
- return response.room_id;
62
- }
63
- async fetchPendingInvites() {
64
- const filter = {
65
- room: {
66
- include_leave: false,
67
- state: {
68
- types: ["m.room.name", "m.room.member", "m.room.canonical_alias"],
69
- lazy_load_members: true,
70
- },
71
- timeline: { limit: 0 },
72
- ephemeral: { types: [] },
73
- account_data: { types: [] },
74
- },
75
- presence: { types: [] },
76
- account_data: { types: [] },
77
- };
78
- const filterParam = encodeURIComponent(JSON.stringify(filter));
79
- const homeserver = this.matrixClient.getHomeserverUrl();
80
- const accessToken = this.matrixClient.getAccessToken();
81
- const response = await fetch(`${homeserver}/_matrix/client/v3/sync?filter=${filterParam}&timeout=0`, {
82
- headers: {
83
- Authorization: `Bearer ${accessToken}`,
84
- },
85
- });
86
- if (!response.ok) {
87
- throw new Error(`Sync request failed: ${response.status}`);
88
- }
89
- const data = await response.json();
90
- const invites = [];
91
- const inviteRooms = data.rooms?.invite || {};
92
- for (const [roomId, roomData] of Object.entries(inviteRooms)) {
93
- const inviteState = roomData.invite_state?.events || [];
94
- const nameEvent = inviteState.find((e) => e.type === "m.room.name");
95
- const roomName = nameEvent?.content?.name || "Untitled";
96
- const aliasEvent = inviteState.find((e) => e.type === "m.room.canonical_alias");
97
- const alias = aliasEvent?.content?.alias || null;
98
- const memberEvent = inviteState.find((e) => e.type === "m.room.member" &&
99
- e.state_key === this.matrixClient.getUserId());
100
- const inviter = memberEvent?.sender || "unknown";
101
- invites.push({ roomId, roomName, inviter, alias });
102
- }
103
- return invites;
104
- }
105
- startInviteMonitor(options) {
106
- const { shouldJoin = (invite) => invite.alias?.startsWith(`#${this.config.aliasPrefix}-`) ?? false, onJoined, pollIntervalMs = 30000, } = options;
107
- let stopped = false;
108
- const checkInvites = async () => {
109
- if (stopped)
110
- return;
111
- try {
112
- const invites = await this.fetchPendingInvites();
113
- for (const invite of invites) {
114
- if (!shouldJoin(invite))
115
- continue;
116
- if (this.matrixClient.getRoom(invite.roomId))
117
- continue;
118
- await this.matrixClient.joinRoom(invite.roomId);
119
- await onJoined(invite);
120
- }
121
- }
122
- catch (err) {
123
- console.error("Invite monitor error:", err);
124
- }
125
- };
126
- checkInvites();
127
- const interval = setInterval(() => {
128
- if (!stopped)
129
- checkInvites();
130
- }, pollIntervalMs);
131
- return () => {
132
- stopped = true;
133
- clearInterval(interval);
134
- };
135
- }
136
- async hasMarkerEvent(roomId) {
137
- try {
138
- const state = await this.matrixClient.roomState(roomId);
139
- return state.some((e) => e.type === this.config.markerEventType);
140
- }
141
- catch {
142
- return false;
143
- }
144
- }
145
- disposeAll() {
146
- for (const room of this.roomCache.values()) {
147
- room.dispose();
148
- }
149
- this.roomCache.clear();
150
- }
151
- async logout() {
152
- this.disposeAll();
153
- try {
154
- await this.matrixClient.logout();
155
- }
156
- catch {
157
- // Ignore logout errors (e.g. network issues during logout)
158
- }
159
- this.matrixClient.stopClient();
160
- removeAuth();
161
- }
162
- }
163
- //# sourceMappingURL=Client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Client.js","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- import { Room } from "./Room";
2
- import { RuntimeIndexHandle } from "./RuntimeIndexHandle";
3
- import type { MayDbIndexHandle, MayDbIndexQueryPageOptions, MayDbIndexQueryPageResult, MayDbSchema, MatrixClient } from "./types";
4
- export declare class IndexRuntime {
5
- private readonly namespace;
6
- private readonly matrixClient;
7
- private readonly schema;
8
- private readonly openRoom;
9
- private readonly roomStore;
10
- private readonly indexEntries;
11
- private readonly roomDescriptors;
12
- private readonly trackedRooms;
13
- private readonly handles;
14
- private readonly activeHandles;
15
- private readonly roomTypesInIndexes;
16
- constructor(options: {
17
- namespace: string;
18
- matrixClient: MatrixClient;
19
- schema: MayDbSchema;
20
- openRoom: (roomId: string) => Room;
21
- });
22
- hasIndexes(): boolean;
23
- isRoomTypeIndexed(roomType: string): boolean;
24
- validateRoomType(roomType: string): void;
25
- openIndex(options: {
26
- indexName: string;
27
- ownerRoomId?: string;
28
- }): MayDbIndexHandle;
29
- dispose(): void;
30
- registerRoom(room: Room): void;
31
- onRoomAcquired(options: {
32
- roomId: string;
33
- roomName: string;
34
- roomType: string;
35
- ownerRoomId?: string | null;
36
- activityAt?: string;
37
- }): Promise<void>;
38
- onHandleActivated(handle: RuntimeIndexHandle): void;
39
- onHandleDeactivated(handle: RuntimeIndexHandle): void;
40
- ensureHandleReady(handle: RuntimeIndexHandle): Promise<void>;
41
- queryHandlePage(handle: RuntimeIndexHandle, options: MayDbIndexQueryPageOptions): Promise<MayDbIndexQueryPageResult>;
42
- private validateSchemaIndexes;
43
- private getIndexDefinition;
44
- private validateIndexScopeOptions;
45
- private getOrCreateHandle;
46
- private initializeHandle;
47
- private maybeAttachRoomActivityListener;
48
- private onRoomActivity;
49
- private upsertRoomAcrossAllRelevantIndexes;
50
- private upsertRoomAcrossActiveIndexes;
51
- private isDescriptorRelevantForHandle;
52
- private upsertRoomToIndex;
53
- private getRoomDescriptor;
54
- private readRoomDescriptorFromState;
55
- private resolveRoomName;
56
- private readRoomNameFromState;
57
- private nowIso;
58
- private handleKey;
59
- }
60
- //# sourceMappingURL=IndexRuntime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IndexRuntime.d.ts","sourceRoot":"","sources":["../src/IndexRuntime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAU9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAEV,gBAAgB,EAChB,0BAA0B,EAC1B,yBAAyB,EACzB,WAAW,EACX,YAAY,EACb,MAAM,SAAS,CAAC;AAWjB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IAErE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;gBAE5C,OAAO,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,YAAY,CAAC;QAC3B,MAAM,EAAE,WAAW,CAAC;QACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACpC;IAgBD,UAAU,IAAI,OAAO;IAIrB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,SAAS,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB;IAQjF,OAAO,IAAI,IAAI;IAiBf,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAcxB,cAAc,CAAC,OAAO,EAAE;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBjB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAWnD,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAK/C,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5D,eAAe,CACnB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IAcrC,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,iBAAiB;YAmBX,gBAAgB;YA0BhB,+BAA+B;YAuB/B,cAAc;YAQd,kCAAkC;YAelC,6BAA6B;IAW3C,OAAO,CAAC,6BAA6B;YASvB,iBAAiB;YAkCjB,iBAAiB;YAUjB,2BAA2B;YA8B3B,eAAe;IAY7B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,SAAS;CAGlB"}
@@ -1,340 +0,0 @@
1
- import * as Y from "yjs";
2
- import { Room } from "./Room";
3
- import { IndexRoomStore } from "./indexingRoomStore";
4
- import { buildIndexItem, compareIndexItems, pageRows, readQueryRows, } from "./indexingRows";
5
- import { IndexCapacityError } from "./indexingErrors";
6
- import { RuntimeIndexHandle } from "./RuntimeIndexHandle";
7
- const INDEX_ROWS_MAP_KEY = "rows";
8
- const DEFAULT_ROOM_NAME = "Untitled";
9
- const ROOM_NAME_EVENT_TYPE = "m.room.name";
10
- export class IndexRuntime {
11
- namespace;
12
- matrixClient;
13
- schema;
14
- openRoom;
15
- roomStore;
16
- indexEntries;
17
- roomDescriptors = new Map();
18
- trackedRooms = new Map();
19
- handles = new Map();
20
- activeHandles = new Set();
21
- roomTypesInIndexes = new Set();
22
- constructor(options) {
23
- this.namespace = options.namespace;
24
- this.matrixClient = options.matrixClient;
25
- this.schema = options.schema;
26
- this.openRoom = options.openRoom;
27
- this.roomStore = new IndexRoomStore({
28
- namespace: this.namespace,
29
- matrixClient: this.matrixClient,
30
- openRoom: this.openRoom,
31
- });
32
- this.indexEntries = Object.entries(this.schema.indexes);
33
- this.validateSchemaIndexes();
34
- }
35
- // Public runtime API (used by MayDb and index handles)
36
- hasIndexes() {
37
- return this.indexEntries.length > 0;
38
- }
39
- isRoomTypeIndexed(roomType) {
40
- return this.roomTypesInIndexes.has(roomType);
41
- }
42
- validateRoomType(roomType) {
43
- if (!(roomType in this.schema.roomTypes)) {
44
- throw new Error(`Unknown roomType "${roomType}"`);
45
- }
46
- }
47
- openIndex(options) {
48
- const indexDefinition = this.getIndexDefinition(options.indexName);
49
- const ownerRoomId = options.ownerRoomId ?? null;
50
- this.validateIndexScopeOptions(options.indexName, indexDefinition, ownerRoomId);
51
- return this.getOrCreateHandle(options.indexName, ownerRoomId);
52
- }
53
- dispose() {
54
- for (const tracked of this.trackedRooms.values()) {
55
- if (tracked.transactionListener) {
56
- tracked.room.doc.off("afterTransaction", tracked.transactionListener);
57
- }
58
- }
59
- this.trackedRooms.clear();
60
- for (const handle of this.handles.values()) {
61
- if (handle.roomObserverCleanup) {
62
- handle.roomObserverCleanup();
63
- }
64
- handle.activeCount = 0;
65
- }
66
- this.activeHandles.clear();
67
- }
68
- registerRoom(room) {
69
- const tracked = this.trackedRooms.get(room.id);
70
- if (tracked)
71
- return;
72
- this.trackedRooms.set(room.id, {
73
- room,
74
- transactionListener: null,
75
- });
76
- if (this.activeHandles.size > 0) {
77
- void this.maybeAttachRoomActivityListener(room.id);
78
- }
79
- }
80
- async onRoomAcquired(options) {
81
- this.validateRoomType(options.roomType);
82
- const now = options.activityAt ?? this.nowIso();
83
- const descriptor = {
84
- roomId: options.roomId,
85
- roomName: options.roomName,
86
- roomType: options.roomType,
87
- ownerRoomId: options.ownerRoomId ?? null,
88
- joinedAt: now,
89
- lastActivityAt: now,
90
- };
91
- this.roomDescriptors.set(options.roomId, descriptor);
92
- this.registerRoom(this.openRoom(options.roomId));
93
- await this.upsertRoomAcrossAllRelevantIndexes(descriptor, now);
94
- }
95
- onHandleActivated(handle) {
96
- this.activeHandles.add(handle);
97
- void handle.ensureReady().catch((error) => {
98
- console.error(`Failed to initialize index "${handle.indexName}"`, error);
99
- });
100
- for (const roomId of this.trackedRooms.keys()) {
101
- void this.maybeAttachRoomActivityListener(roomId);
102
- }
103
- }
104
- onHandleDeactivated(handle) {
105
- if (handle.activeCount > 0)
106
- return;
107
- this.activeHandles.delete(handle);
108
- }
109
- async ensureHandleReady(handle) {
110
- if (handle.rowsMap && handle.indexRoom) {
111
- return;
112
- }
113
- if (handle.readyPromise) {
114
- return handle.readyPromise;
115
- }
116
- handle.readyPromise = this.initializeHandle(handle);
117
- try {
118
- await handle.readyPromise;
119
- }
120
- catch (error) {
121
- handle.readyPromise = null;
122
- throw error;
123
- }
124
- }
125
- async queryHandlePage(handle, options) {
126
- await this.ensureHandleReady(handle);
127
- const rowsMap = handle.rowsMap;
128
- if (!rowsMap) {
129
- return { items: [], hasMore: false };
130
- }
131
- const rows = readQueryRows(rowsMap, options.where);
132
- rows.sort((a, b) => compareIndexItems(a, b, options.orderBy));
133
- return pageRows(rows, options.limit, options.after?.roomId ?? null);
134
- }
135
- // Handle lifecycle and validation helpers
136
- validateSchemaIndexes() {
137
- for (const [indexName, definition] of this.indexEntries) {
138
- if (definition.maxEntries <= 0) {
139
- throw new Error(`Index "${indexName}" maxEntries must be > 0`);
140
- }
141
- if (!(definition.defaultOrderBy.column in definition.columns)) {
142
- throw new Error(`Index "${indexName}" defaultOrderBy column must be in columns`);
143
- }
144
- for (const roomType of definition.roomTypes) {
145
- if (!(roomType in this.schema.roomTypes)) {
146
- throw new Error(`Index "${indexName}" references unknown roomType "${roomType}"`);
147
- }
148
- this.roomTypesInIndexes.add(roomType);
149
- }
150
- }
151
- }
152
- getIndexDefinition(indexName) {
153
- const definition = this.schema.indexes[indexName];
154
- if (!definition) {
155
- throw new Error(`Unknown index "${indexName}"`);
156
- }
157
- return definition;
158
- }
159
- validateIndexScopeOptions(indexName, definition, ownerRoomId) {
160
- if (definition.scope === "collaborative" && !ownerRoomId) {
161
- throw new Error(`Index "${indexName}" requires ownerRoomId`);
162
- }
163
- if (definition.scope === "private" && ownerRoomId) {
164
- throw new Error(`Private index "${indexName}" must not set ownerRoomId`);
165
- }
166
- }
167
- getOrCreateHandle(indexName, ownerRoomId) {
168
- const key = this.handleKey(indexName, ownerRoomId);
169
- let handle = this.handles.get(key);
170
- if (!handle) {
171
- const definition = this.schema.indexes[indexName];
172
- handle = new RuntimeIndexHandle({
173
- runtime: this,
174
- indexName,
175
- ownerRoomId,
176
- definition,
177
- });
178
- this.handles.set(key, handle);
179
- }
180
- return handle;
181
- }
182
- async initializeHandle(handle) {
183
- const roomId = await this.roomStore.resolveIndexRoomId({
184
- indexName: handle.indexName,
185
- scope: handle.definition.scope,
186
- ownerRoomId: handle.ownerRoomId,
187
- });
188
- const room = this.openRoom(roomId);
189
- this.registerRoom(room);
190
- await room.ensureJoined();
191
- await room.connect();
192
- handle.indexRoom = room;
193
- const rowsMap = room.doc.getMap(INDEX_ROWS_MAP_KEY);
194
- handle.rowsMap = rowsMap;
195
- if (handle.roomObserverCleanup) {
196
- handle.roomObserverCleanup();
197
- }
198
- const observer = () => handle.notifyChange();
199
- rowsMap.observe(observer);
200
- handle.roomObserverCleanup = () => rowsMap.unobserve(observer);
201
- handle.notifyChange();
202
- }
203
- // Room activity ingestion and index updates
204
- async maybeAttachRoomActivityListener(roomId) {
205
- const tracked = this.trackedRooms.get(roomId);
206
- if (!tracked || tracked.transactionListener)
207
- return;
208
- const descriptor = await this.getRoomDescriptor(roomId);
209
- if (!descriptor)
210
- return;
211
- const hasActiveRelevantHandle = Array.from(this.activeHandles).some((handle) => this.isDescriptorRelevantForHandle(descriptor, handle));
212
- if (!hasActiveRelevantHandle)
213
- return;
214
- const onTransaction = (tx) => {
215
- if (!tx.local)
216
- return;
217
- const activityAt = this.nowIso();
218
- void this.onRoomActivity(roomId, activityAt);
219
- };
220
- tracked.room.doc.on("afterTransaction", onTransaction);
221
- tracked.transactionListener = onTransaction;
222
- await this.upsertRoomAcrossActiveIndexes(descriptor, this.nowIso());
223
- }
224
- async onRoomActivity(roomId, activityAt) {
225
- const descriptor = await this.getRoomDescriptor(roomId);
226
- if (!descriptor)
227
- return;
228
- descriptor.lastActivityAt = activityAt;
229
- descriptor.roomName = await this.resolveRoomName(roomId, descriptor.roomName);
230
- await this.upsertRoomAcrossActiveIndexes(descriptor, activityAt);
231
- }
232
- async upsertRoomAcrossAllRelevantIndexes(roomDescriptor, activityAt) {
233
- const room = this.openRoom(roomDescriptor.roomId);
234
- for (const [indexName, definition] of this.indexEntries) {
235
- if (!definition.roomTypes.includes(roomDescriptor.roomType))
236
- continue;
237
- const ownerRoomId = definition.scope === "collaborative" ? roomDescriptor.ownerRoomId : null;
238
- if (definition.scope === "collaborative" && !ownerRoomId)
239
- continue;
240
- const handle = this.getOrCreateHandle(indexName, ownerRoomId);
241
- await this.upsertRoomToIndex(handle, roomDescriptor, room, activityAt);
242
- }
243
- }
244
- async upsertRoomAcrossActiveIndexes(roomDescriptor, activityAt) {
245
- const room = this.openRoom(roomDescriptor.roomId);
246
- for (const handle of this.activeHandles) {
247
- if (!this.isDescriptorRelevantForHandle(roomDescriptor, handle))
248
- continue;
249
- await this.upsertRoomToIndex(handle, roomDescriptor, room, activityAt);
250
- }
251
- }
252
- isDescriptorRelevantForHandle(roomDescriptor, indexHandle) {
253
- if (!indexHandle.definition.roomTypes.includes(roomDescriptor.roomType))
254
- return false;
255
- if (indexHandle.definition.scope === "private")
256
- return true;
257
- return indexHandle.ownerRoomId === roomDescriptor.ownerRoomId;
258
- }
259
- async upsertRoomToIndex(indexHandle, roomDescriptor, sourceRoom, activityAt) {
260
- if (indexHandle.paused) {
261
- throw new IndexCapacityError({
262
- indexName: indexHandle.indexName,
263
- ownerRoomId: indexHandle.ownerRoomId,
264
- });
265
- }
266
- await this.ensureHandleReady(indexHandle);
267
- const rowsMap = indexHandle.rowsMap;
268
- if (!rowsMap)
269
- return;
270
- roomDescriptor.lastActivityAt = activityAt;
271
- const item = buildIndexItem(indexHandle.definition, roomDescriptor, sourceRoom.doc);
272
- const encoded = JSON.stringify(item);
273
- const alreadyPresent = rowsMap.has(roomDescriptor.roomId);
274
- if (!alreadyPresent && rowsMap.size >= indexHandle.definition.maxEntries) {
275
- indexHandle.paused = true;
276
- throw new IndexCapacityError({
277
- indexName: indexHandle.indexName,
278
- ownerRoomId: indexHandle.ownerRoomId,
279
- });
280
- }
281
- if (rowsMap.get(roomDescriptor.roomId) !== encoded) {
282
- rowsMap.set(roomDescriptor.roomId, encoded);
283
- }
284
- }
285
- async getRoomDescriptor(roomId) {
286
- const existing = this.roomDescriptors.get(roomId);
287
- if (existing)
288
- return existing;
289
- const descriptor = await this.readRoomDescriptorFromState(roomId);
290
- if (!descriptor)
291
- return null;
292
- this.roomDescriptors.set(roomId, descriptor);
293
- return descriptor;
294
- }
295
- async readRoomDescriptorFromState(roomId) {
296
- try {
297
- const state = await this.matrixClient.roomState(roomId);
298
- const appState = state.find((event) => event.type === this.namespace && event.state_key === "");
299
- const content = (appState?.content ?? {});
300
- const roomType = typeof content.roomType === "string" ? content.roomType : null;
301
- if (!roomType)
302
- return null;
303
- const roomName = this.readRoomNameFromState(state, DEFAULT_ROOM_NAME);
304
- const now = this.nowIso();
305
- return {
306
- roomId,
307
- roomName,
308
- roomType,
309
- ownerRoomId: typeof content.ownerRoomId === "string" ? content.ownerRoomId : null,
310
- joinedAt: now,
311
- lastActivityAt: now,
312
- };
313
- }
314
- catch {
315
- return null;
316
- }
317
- }
318
- async resolveRoomName(roomId, fallback) {
319
- try {
320
- const state = await this.matrixClient.roomState(roomId);
321
- return this.readRoomNameFromState(state, fallback);
322
- }
323
- catch {
324
- return fallback;
325
- }
326
- }
327
- readRoomNameFromState(state, fallback) {
328
- const nameEvent = state.find((event) => event.type === ROOM_NAME_EVENT_TYPE);
329
- return typeof nameEvent?.content?.name === "string"
330
- ? nameEvent.content.name
331
- : fallback;
332
- }
333
- nowIso() {
334
- return new Date().toISOString();
335
- }
336
- handleKey(indexName, ownerRoomId) {
337
- return ownerRoomId ? `${indexName}::${ownerRoomId}` : `${indexName}::private`;
338
- }
339
- }
340
- //# sourceMappingURL=IndexRuntime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IndexRuntime.js","sourceRoot":"","sources":["../src/IndexRuntime.ts"],"names":[],"mappings":"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"}