@may-db/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Client.d.ts +20 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +163 -0
- package/dist/Client.js.map +1 -0
- package/dist/MayDb.d.ts +20 -0
- package/dist/MayDb.d.ts.map +1 -0
- package/dist/MayDb.js +162 -0
- package/dist/MayDb.js.map +1 -0
- package/dist/Room.d.ts +81 -0
- package/dist/Room.d.ts.map +1 -0
- package/dist/Room.js +382 -0
- package/dist/Room.js.map +1 -0
- package/dist/authStorage.d.ts +8 -0
- package/dist/authStorage.d.ts.map +1 -0
- package/dist/authStorage.js +29 -0
- package/dist/authStorage.js.map +1 -0
- package/dist/hooks/useAllowedRooms.d.ts +12 -0
- package/dist/hooks/useAllowedRooms.d.ts.map +1 -0
- package/dist/hooks/useAllowedRooms.js +29 -0
- package/dist/hooks/useAllowedRooms.js.map +1 -0
- package/dist/hooks/useAsync.d.ts +8 -0
- package/dist/hooks/useAsync.d.ts.map +1 -0
- package/dist/hooks/useAsync.js +29 -0
- package/dist/hooks/useAsync.js.map +1 -0
- package/dist/hooks/useAuth.d.ts +11 -0
- package/dist/hooks/useAuth.d.ts.map +1 -0
- package/dist/hooks/useAuth.js +45 -0
- package/dist/hooks/useAuth.js.map +1 -0
- package/dist/hooks/usePresence.d.ts +30 -0
- package/dist/hooks/usePresence.d.ts.map +1 -0
- package/dist/hooks/usePresence.js +95 -0
- package/dist/hooks/usePresence.js.map +1 -0
- package/dist/hooks/useRoom.d.ts +11 -0
- package/dist/hooks/useRoom.d.ts.map +1 -0
- package/dist/hooks/useRoom.js +37 -0
- package/dist/hooks/useRoom.js.map +1 -0
- package/dist/hooks/useRoomMembers.d.ts +12 -0
- package/dist/hooks/useRoomMembers.d.ts.map +1 -0
- package/dist/hooks/useRoomMembers.js +37 -0
- package/dist/hooks/useRoomMembers.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/loginFlow.d.ts +4 -0
- package/dist/loginFlow.d.ts.map +1 -0
- package/dist/loginFlow.js +48 -0
- package/dist/loginFlow.js.map +1 -0
- package/dist/matrixId.d.ts +9 -0
- package/dist/matrixId.d.ts.map +1 -0
- package/dist/matrixId.js +14 -0
- package/dist/matrixId.js.map +1 -0
- package/dist/presence.d.ts +36 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +63 -0
- package/dist/presence.js.map +1 -0
- package/dist/singletonRoom.d.ts +3 -0
- package/dist/singletonRoom.d.ts.map +1 -0
- package/dist/singletonRoom.js +39 -0
- package/dist/singletonRoom.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/presenceColors.d.ts +3 -0
- package/dist/utils/presenceColors.d.ts.map +1 -0
- package/dist/utils/presenceColors.js +21 -0
- package/dist/utils/presenceColors.js.map +1 -0
- package/package.json +33 -0
package/dist/Client.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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"}
|
package/dist/MayDb.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Room } from "./Room";
|
|
2
|
+
import type { AuthData, MatrixClient, InviteInfo, InviteMonitorOptions } from "./types";
|
|
3
|
+
export declare class MayDb {
|
|
4
|
+
readonly auth: AuthData;
|
|
5
|
+
readonly userId: string;
|
|
6
|
+
readonly namespace: string;
|
|
7
|
+
/** @internal */
|
|
8
|
+
readonly matrixClient: MatrixClient;
|
|
9
|
+
private readonly roomCache;
|
|
10
|
+
constructor(auth: AuthData, namespace: string);
|
|
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=MayDb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MayDb.d.ts","sourceRoot":"","sources":["../src/MayDb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,oBAAoB,EAErB,MAAM,SAAS,CAAC;AAEjB,qBAAa,KAAK;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gBAAgB;IAChB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;gBAEzC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;IAY7C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAavB,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/MayDb.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import * as sdk from "matrix-js-sdk";
|
|
2
|
+
import { Room } from "./Room";
|
|
3
|
+
import { removeAuth } from "./authStorage";
|
|
4
|
+
export class MayDb {
|
|
5
|
+
auth;
|
|
6
|
+
userId;
|
|
7
|
+
namespace;
|
|
8
|
+
/** @internal */
|
|
9
|
+
matrixClient;
|
|
10
|
+
roomCache = new Map();
|
|
11
|
+
constructor(auth, namespace) {
|
|
12
|
+
this.auth = auth;
|
|
13
|
+
this.userId = auth.userId;
|
|
14
|
+
this.namespace = namespace;
|
|
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
|
+
removeRoom: (id) => this.roomCache.delete(id),
|
|
28
|
+
};
|
|
29
|
+
room = new Room(services, roomId);
|
|
30
|
+
this.roomCache.set(roomId, room);
|
|
31
|
+
}
|
|
32
|
+
return room;
|
|
33
|
+
}
|
|
34
|
+
async createRoom(title) {
|
|
35
|
+
const roomId = await this.createMatrixRoom(title);
|
|
36
|
+
return this.getRoom(roomId);
|
|
37
|
+
}
|
|
38
|
+
async createMatrixRoom(title) {
|
|
39
|
+
const timestamp = Date.now();
|
|
40
|
+
const randomSuffix = Math.random().toString(36).substring(2, 8);
|
|
41
|
+
const localAlias = `${this.namespace}-${timestamp}-${randomSuffix}`;
|
|
42
|
+
const response = await this.matrixClient.createRoom({
|
|
43
|
+
name: title,
|
|
44
|
+
room_alias_name: localAlias,
|
|
45
|
+
visibility: sdk.Visibility.Private,
|
|
46
|
+
preset: sdk.Preset.PrivateChat,
|
|
47
|
+
creation_content: { type: "m.space" },
|
|
48
|
+
initial_state: [
|
|
49
|
+
{
|
|
50
|
+
type: "m.room.history_visibility",
|
|
51
|
+
content: { history_visibility: "shared" },
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: this.namespace,
|
|
55
|
+
state_key: "",
|
|
56
|
+
content: { version: 1 },
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
});
|
|
60
|
+
return response.room_id;
|
|
61
|
+
}
|
|
62
|
+
async fetchPendingInvites() {
|
|
63
|
+
const filter = {
|
|
64
|
+
room: {
|
|
65
|
+
include_leave: false,
|
|
66
|
+
state: {
|
|
67
|
+
types: ["m.room.name", "m.room.member", "m.room.canonical_alias"],
|
|
68
|
+
lazy_load_members: true,
|
|
69
|
+
},
|
|
70
|
+
timeline: { limit: 0 },
|
|
71
|
+
ephemeral: { types: [] },
|
|
72
|
+
account_data: { types: [] },
|
|
73
|
+
},
|
|
74
|
+
presence: { types: [] },
|
|
75
|
+
account_data: { types: [] },
|
|
76
|
+
};
|
|
77
|
+
const filterParam = encodeURIComponent(JSON.stringify(filter));
|
|
78
|
+
const homeserver = this.matrixClient.getHomeserverUrl();
|
|
79
|
+
const accessToken = this.matrixClient.getAccessToken();
|
|
80
|
+
const response = await fetch(`${homeserver}/_matrix/client/v3/sync?filter=${filterParam}&timeout=0`, {
|
|
81
|
+
headers: {
|
|
82
|
+
Authorization: `Bearer ${accessToken}`,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
throw new Error(`Sync request failed: ${response.status}`);
|
|
87
|
+
}
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
const invites = [];
|
|
90
|
+
const inviteRooms = data.rooms?.invite || {};
|
|
91
|
+
for (const [roomId, roomData] of Object.entries(inviteRooms)) {
|
|
92
|
+
const inviteState = roomData.invite_state?.events || [];
|
|
93
|
+
const nameEvent = inviteState.find((e) => e.type === "m.room.name");
|
|
94
|
+
const roomName = nameEvent?.content?.name || "Untitled";
|
|
95
|
+
const aliasEvent = inviteState.find((e) => e.type === "m.room.canonical_alias");
|
|
96
|
+
const alias = aliasEvent?.content?.alias || null;
|
|
97
|
+
const memberEvent = inviteState.find((e) => e.type === "m.room.member" &&
|
|
98
|
+
e.state_key === this.matrixClient.getUserId());
|
|
99
|
+
const inviter = memberEvent?.sender || "unknown";
|
|
100
|
+
invites.push({ roomId, roomName, inviter, alias });
|
|
101
|
+
}
|
|
102
|
+
return invites;
|
|
103
|
+
}
|
|
104
|
+
startInviteMonitor(options) {
|
|
105
|
+
const { shouldJoin = (invite) => invite.alias?.startsWith(`#${this.namespace}-`) ?? false, onJoined, pollIntervalMs = 30000, } = options;
|
|
106
|
+
let stopped = false;
|
|
107
|
+
const checkInvites = async () => {
|
|
108
|
+
if (stopped)
|
|
109
|
+
return;
|
|
110
|
+
try {
|
|
111
|
+
const invites = await this.fetchPendingInvites();
|
|
112
|
+
for (const invite of invites) {
|
|
113
|
+
if (!shouldJoin(invite))
|
|
114
|
+
continue;
|
|
115
|
+
if (this.matrixClient.getRoom(invite.roomId))
|
|
116
|
+
continue;
|
|
117
|
+
await this.matrixClient.joinRoom(invite.roomId);
|
|
118
|
+
await onJoined(invite);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
console.error("Invite monitor error:", err);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
checkInvites();
|
|
126
|
+
const interval = setInterval(() => {
|
|
127
|
+
if (!stopped)
|
|
128
|
+
checkInvites();
|
|
129
|
+
}, pollIntervalMs);
|
|
130
|
+
return () => {
|
|
131
|
+
stopped = true;
|
|
132
|
+
clearInterval(interval);
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
async hasMarkerEvent(roomId) {
|
|
136
|
+
try {
|
|
137
|
+
const state = await this.matrixClient.roomState(roomId);
|
|
138
|
+
return state.some((e) => e.type === this.namespace);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
disposeAll() {
|
|
145
|
+
for (const room of this.roomCache.values()) {
|
|
146
|
+
room.dispose();
|
|
147
|
+
}
|
|
148
|
+
this.roomCache.clear();
|
|
149
|
+
}
|
|
150
|
+
async logout() {
|
|
151
|
+
this.disposeAll();
|
|
152
|
+
try {
|
|
153
|
+
await this.matrixClient.logout();
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Ignore logout errors (e.g. network issues during logout)
|
|
157
|
+
}
|
|
158
|
+
this.matrixClient.stopClient();
|
|
159
|
+
removeAuth();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=MayDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MayDb.js","sourceRoot":"","sources":["../src/MayDb.ts"],"names":[],"mappings":"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"}
|
package/dist/Room.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Doc } from "yjs";
|
|
2
|
+
import type { RoomStatus, RoomMetadata, RoomMember, AccessLevel, RoomServices } from "./types";
|
|
3
|
+
import type { ToDeviceEvent } from "./presence";
|
|
4
|
+
export interface RoomEvents {
|
|
5
|
+
onStatusChange: (status: RoomStatus) => void;
|
|
6
|
+
onMetadataChange: (metadata: RoomMetadata) => void;
|
|
7
|
+
onCanWriteChange: (canWrite: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare class Room {
|
|
10
|
+
readonly roomId: string;
|
|
11
|
+
readonly doc: Doc;
|
|
12
|
+
services: RoomServices;
|
|
13
|
+
private provider;
|
|
14
|
+
private connectPromise;
|
|
15
|
+
private _status;
|
|
16
|
+
private _canWrite;
|
|
17
|
+
private _metadata;
|
|
18
|
+
private listeners;
|
|
19
|
+
constructor(services: RoomServices, roomId: string);
|
|
20
|
+
get status(): RoomStatus;
|
|
21
|
+
get canWrite(): boolean;
|
|
22
|
+
get isConnected(): boolean;
|
|
23
|
+
get metadata(): RoomMetadata | null;
|
|
24
|
+
get userId(): string | null;
|
|
25
|
+
get userDisplayName(): string | null;
|
|
26
|
+
subscribe(listener: Partial<RoomEvents>): () => void;
|
|
27
|
+
getRoomName(roomId?: string): Promise<string>;
|
|
28
|
+
getMembers(): Promise<RoomMember[]>;
|
|
29
|
+
isMember(): Promise<boolean>;
|
|
30
|
+
getRoomMemberIds(): Promise<string[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve delegate rooms currently allowed via restricted join rules.
|
|
33
|
+
*/
|
|
34
|
+
getDelegateRoomIds(): Promise<string[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Poll for to-device events using a minimal Matrix sync.
|
|
37
|
+
* Returns new events and the next sync token for incremental polling.
|
|
38
|
+
*/
|
|
39
|
+
pollToDeviceEvents(sinceToken: string | null): Promise<{
|
|
40
|
+
events: ToDeviceEvent[];
|
|
41
|
+
nextBatch: string;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Connect the Y.js store to Matrix for this room.
|
|
45
|
+
* Safe to call multiple times - will no-op if already connected.
|
|
46
|
+
* Resolves when the Y.js document is available (synced from Matrix).
|
|
47
|
+
*/
|
|
48
|
+
connect(): Promise<void>;
|
|
49
|
+
disconnect(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Fully dispose this room instance (disconnects and removes from cache).
|
|
52
|
+
*/
|
|
53
|
+
dispose(): void;
|
|
54
|
+
refreshMetadata(): Promise<RoomMetadata>;
|
|
55
|
+
setRoomName(title: string): Promise<void>;
|
|
56
|
+
invite(userId: string, access: AccessLevel): Promise<void>;
|
|
57
|
+
setAccess(userId: string, access: AccessLevel): Promise<void>;
|
|
58
|
+
kick(userId: string): Promise<void>;
|
|
59
|
+
join(): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Ensure the current user is a member of this room.
|
|
62
|
+
* No-op if already joined. Attempts to join otherwise.
|
|
63
|
+
* Throws if the join fails.
|
|
64
|
+
*/
|
|
65
|
+
ensureJoined(): Promise<void>;
|
|
66
|
+
addDelegateRoom(delegateRoomId: string): Promise<void>;
|
|
67
|
+
removeDelegateRoom(delegateRoomId: string): Promise<void>;
|
|
68
|
+
sendToDevice(eventType: string, content: unknown): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Internal/private implementation details.
|
|
71
|
+
*/
|
|
72
|
+
private get matrixClient();
|
|
73
|
+
private doConnect;
|
|
74
|
+
private canEdit;
|
|
75
|
+
private accessToPowerLevel;
|
|
76
|
+
private powerLevelToAccess;
|
|
77
|
+
private setUserPowerLevel;
|
|
78
|
+
private emit;
|
|
79
|
+
private setStatus;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=Room.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../src/Room.ts"],"names":[],"mappings":"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"}
|