@may-db/core 0.1.0 → 0.1.2

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 (100) hide show
  1. package/README.md +210 -0
  2. package/dist/IndexRuntime.d.ts +60 -0
  3. package/dist/IndexRuntime.d.ts.map +1 -0
  4. package/dist/IndexRuntime.js +340 -0
  5. package/dist/IndexRuntime.js.map +1 -0
  6. package/dist/MayDb.d.ts +45 -9
  7. package/dist/MayDb.d.ts.map +1 -1
  8. package/dist/MayDb.js +251 -85
  9. package/dist/MayDb.js.map +1 -1
  10. package/dist/Room.d.ts +40 -57
  11. package/dist/Room.d.ts.map +1 -1
  12. package/dist/Room.js +212 -232
  13. package/dist/Room.js.map +1 -1
  14. package/dist/RuntimeIndexHandle.d.ts +29 -0
  15. package/dist/RuntimeIndexHandle.d.ts.map +1 -0
  16. package/dist/RuntimeIndexHandle.js +48 -0
  17. package/dist/RuntimeIndexHandle.js.map +1 -0
  18. package/dist/authStorage.d.ts +7 -7
  19. package/dist/authStorage.d.ts.map +1 -1
  20. package/dist/authStorage.js +8 -8
  21. package/dist/authStorage.js.map +1 -1
  22. package/dist/errors.d.ts +12 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +15 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/index.d.ts +4 -4
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +3 -3
  29. package/dist/index.js.map +1 -1
  30. package/dist/indexing/collaborativeSync.d.ts +25 -0
  31. package/dist/indexing/collaborativeSync.d.ts.map +1 -0
  32. package/dist/indexing/collaborativeSync.js +56 -0
  33. package/dist/indexing/collaborativeSync.js.map +1 -0
  34. package/dist/indexing/descriptor.d.ts +6 -0
  35. package/dist/indexing/descriptor.d.ts.map +1 -0
  36. package/dist/indexing/descriptor.js +2 -0
  37. package/dist/indexing/descriptor.js.map +1 -0
  38. package/dist/indexing/errors.d.ts +9 -0
  39. package/dist/indexing/errors.d.ts.map +1 -0
  40. package/dist/indexing/errors.js +11 -0
  41. package/dist/indexing/errors.js.map +1 -0
  42. package/dist/indexing/handle.d.ts +29 -0
  43. package/dist/indexing/handle.d.ts.map +1 -0
  44. package/dist/indexing/handle.js +48 -0
  45. package/dist/indexing/handle.js.map +1 -0
  46. package/dist/indexing/indexRoomStore.d.ts +18 -0
  47. package/dist/indexing/indexRoomStore.d.ts.map +1 -0
  48. package/dist/indexing/indexRoomStore.js +71 -0
  49. package/dist/indexing/indexRoomStore.js.map +1 -0
  50. package/dist/indexing/roomRegistry.d.ts +26 -0
  51. package/dist/indexing/roomRegistry.d.ts.map +1 -0
  52. package/dist/indexing/roomRegistry.js +125 -0
  53. package/dist/indexing/roomRegistry.js.map +1 -0
  54. package/dist/indexing/rows.d.ts +8 -0
  55. package/dist/indexing/rows.d.ts.map +1 -0
  56. package/dist/indexing/rows.js +86 -0
  57. package/dist/indexing/rows.js.map +1 -0
  58. package/dist/indexing/runtime.d.ts +61 -0
  59. package/dist/indexing/runtime.d.ts.map +1 -0
  60. package/dist/indexing/runtime.js +378 -0
  61. package/dist/indexing/runtime.js.map +1 -0
  62. package/dist/indexing.d.ts +93 -0
  63. package/dist/indexing.d.ts.map +1 -0
  64. package/dist/indexing.js +394 -0
  65. package/dist/indexing.js.map +1 -0
  66. package/dist/indexingErrors.d.ts +9 -0
  67. package/dist/indexingErrors.d.ts.map +1 -0
  68. package/dist/indexingErrors.js +11 -0
  69. package/dist/indexingErrors.js.map +1 -0
  70. package/dist/indexingRoomStore.d.ts +26 -0
  71. package/dist/indexingRoomStore.d.ts.map +1 -0
  72. package/dist/indexingRoomStore.js +125 -0
  73. package/dist/indexingRoomStore.js.map +1 -0
  74. package/dist/indexingRows.d.ts +8 -0
  75. package/dist/indexingRows.d.ts.map +1 -0
  76. package/dist/indexingRows.js +114 -0
  77. package/dist/indexingRows.js.map +1 -0
  78. package/dist/indexingTypes.d.ts +9 -0
  79. package/dist/indexingTypes.d.ts.map +1 -0
  80. package/dist/indexingTypes.js +2 -0
  81. package/dist/indexingTypes.js.map +1 -0
  82. package/dist/loginFlow.d.ts +10 -3
  83. package/dist/loginFlow.d.ts.map +1 -1
  84. package/dist/loginFlow.js +19 -14
  85. package/dist/loginFlow.js.map +1 -1
  86. package/dist/matrix-crdt-shim.d.ts +43 -0
  87. package/dist/matrix-crdt-shim.d.ts.map +1 -0
  88. package/dist/matrix-crdt-shim.js +2 -0
  89. package/dist/matrix-crdt-shim.js.map +1 -0
  90. package/dist/roomMetadata.d.ts +3 -0
  91. package/dist/roomMetadata.d.ts.map +1 -0
  92. package/dist/roomMetadata.js +3 -0
  93. package/dist/roomMetadata.js.map +1 -0
  94. package/dist/singletonRoom.d.ts.map +1 -1
  95. package/dist/singletonRoom.js +5 -36
  96. package/dist/singletonRoom.js.map +1 -1
  97. package/dist/types.d.ts +63 -13
  98. package/dist/types.d.ts.map +1 -1
  99. package/package.json +6 -5
  100. package/patches/matrix-crdt+0.2.1-alpha.1.patch +108 -0
@@ -0,0 +1,114 @@
1
+ import * as Y from "yjs";
2
+ export function buildIndexItem(definition, roomDescriptor, doc) {
3
+ const values = {};
4
+ for (const [columnName, column] of Object.entries(definition.columns)) {
5
+ values[columnName] =
6
+ column.source.kind === "system"
7
+ ? readSystemColumnValue(roomDescriptor, column.source.field)
8
+ : readYTextValue(doc, column.source.path);
9
+ }
10
+ return {
11
+ roomId: roomDescriptor.roomId,
12
+ values,
13
+ };
14
+ }
15
+ export function readQueryRows(rowsMap, where) {
16
+ return Array.from(rowsMap.values())
17
+ .map((value) => parseItem(value))
18
+ .filter((item) => item != null)
19
+ .filter((item) => matchesWhere(item, where));
20
+ }
21
+ export function pageRows(rows, limit, afterRoomId) {
22
+ let startIndex = 0;
23
+ if (afterRoomId) {
24
+ const afterIndex = rows.findIndex((item) => item.roomId === afterRoomId);
25
+ startIndex = afterIndex >= 0 ? afterIndex + 1 : 0;
26
+ }
27
+ const items = rows.slice(startIndex, startIndex + limit);
28
+ const hasMore = startIndex + limit < rows.length;
29
+ return { items, hasMore };
30
+ }
31
+ export function compareIndexItems(left, right, orderBy) {
32
+ const leftValue = left.values[orderBy.column] ?? null;
33
+ const rightValue = right.values[orderBy.column] ?? null;
34
+ const direction = orderBy.direction === "asc" ? 1 : -1;
35
+ const base = comparePrimitive(leftValue, rightValue) * direction;
36
+ if (base !== 0)
37
+ return base;
38
+ return left.roomId.localeCompare(right.roomId);
39
+ }
40
+ function readSystemColumnValue(roomDescriptor, field) {
41
+ switch (field) {
42
+ case "roomId":
43
+ return roomDescriptor.roomId;
44
+ case "roomName":
45
+ return roomDescriptor.roomName;
46
+ case "roomType":
47
+ return roomDescriptor.roomType;
48
+ case "joinedAt":
49
+ return roomDescriptor.joinedAt;
50
+ case "lastActivityAt":
51
+ return roomDescriptor.lastActivityAt;
52
+ }
53
+ }
54
+ function readYTextValue(doc, path) {
55
+ const parts = path.split(".").filter(Boolean);
56
+ if (parts.length === 0)
57
+ return null;
58
+ let current = doc.share.get(parts[0]);
59
+ for (const part of parts.slice(1)) {
60
+ if (current instanceof Y.Map) {
61
+ current = current.get(part);
62
+ continue;
63
+ }
64
+ if (current instanceof Y.Array) {
65
+ const index = Number.parseInt(part, 10);
66
+ if (!Number.isFinite(index))
67
+ return null;
68
+ current = current.get(index);
69
+ continue;
70
+ }
71
+ return null;
72
+ }
73
+ if (current instanceof Y.Text) {
74
+ return current.toString();
75
+ }
76
+ return null;
77
+ }
78
+ function parseItem(encoded) {
79
+ try {
80
+ const parsed = JSON.parse(encoded);
81
+ if (!parsed || typeof parsed.roomId !== "string")
82
+ return null;
83
+ if (!parsed.values || typeof parsed.values !== "object")
84
+ return null;
85
+ return parsed;
86
+ }
87
+ catch {
88
+ return null;
89
+ }
90
+ }
91
+ function matchesWhere(item, where) {
92
+ for (const [column, value] of Object.entries(where)) {
93
+ if (item.values[column] !== value) {
94
+ return false;
95
+ }
96
+ }
97
+ return true;
98
+ }
99
+ function comparePrimitive(left, right) {
100
+ if (left === right)
101
+ return 0;
102
+ if (left === null)
103
+ return -1;
104
+ if (right === null)
105
+ return 1;
106
+ if (typeof left === "number" && typeof right === "number") {
107
+ return left - right;
108
+ }
109
+ if (typeof left === "boolean" && typeof right === "boolean") {
110
+ return Number(left) - Number(right);
111
+ }
112
+ return String(left).localeCompare(String(right));
113
+ }
114
+ //# sourceMappingURL=indexingRows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexingRows.js","sourceRoot":"","sources":["../src/indexingRows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type RoomDescriptor = {
2
+ roomId: string;
3
+ roomName: string;
4
+ roomType: string;
5
+ ownerRoomId: string | null;
6
+ joinedAt: string;
7
+ lastActivityAt: string;
8
+ };
9
+ //# sourceMappingURL=indexingTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexingTypes.d.ts","sourceRoot":"","sources":["../src/indexingTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=indexingTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexingTypes.js","sourceRoot":"","sources":["../src/indexingTypes.ts"],"names":[],"mappings":""}
@@ -1,4 +1,11 @@
1
- import type { AuthData } from "./types";
2
- export declare function startLogin(): void;
3
- export declare function completeLogin(): Promise<AuthData | null>;
1
+ import { getStoredSession, clearStoredSession } from "./authStorage";
2
+ import type { Session } from "./types";
3
+ export declare function startSsoLogin(): void;
4
+ export declare function completeSsoLogin(): Promise<Session | null>;
5
+ export declare const Auth: {
6
+ startSsoLogin: typeof startSsoLogin;
7
+ completeSsoLogin: typeof completeSsoLogin;
8
+ getStoredSession: typeof getStoredSession;
9
+ clearStoredSession: typeof clearStoredSession;
10
+ };
4
11
  //# sourceMappingURL=loginFlow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loginFlow.d.ts","sourceRoot":"","sources":["../src/loginFlow.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQxC,wBAAgB,UAAU,IAAI,IAAI,CASjC;AAgCD,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAoB9D"}
1
+ {"version":3,"file":"loginFlow.d.ts","sourceRoot":"","sources":["../src/loginFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAiCvC,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAoBhE;AAED,eAAO,MAAM,IAAI;;;;;CAKhB,CAAC"}
package/dist/loginFlow.js CHANGED
@@ -1,11 +1,4 @@
1
- import { saveAuth, saveHomeserver, getHomeserver, removeHomeserver, } from "./authStorage";
2
- export function startLogin() {
3
- // For now, just login with matrix.org all the time. Later, findhomeserver.com will make this good.
4
- const homeserver = "https://matrix.org";
5
- saveHomeserver(homeserver);
6
- const redirectUrl = encodeURIComponent(window.location.origin + window.location.pathname);
7
- window.location.href = `${homeserver}/_matrix/client/v3/login/sso/redirect?redirectUrl=${redirectUrl}`;
8
- }
1
+ import { saveStoredSession, saveStoredHomeserver, getStoredHomeserver, clearStoredHomeserver, getStoredSession, clearStoredSession, } from "./authStorage";
9
2
  async function exchangeLoginToken(homeserver, loginToken) {
10
3
  const response = await fetch(`${homeserver}/_matrix/client/v3/login`, {
11
4
  method: "POST",
@@ -29,20 +22,32 @@ async function exchangeLoginToken(homeserver, loginToken) {
29
22
  deviceId: data.device_id,
30
23
  };
31
24
  }
32
- export async function completeLogin() {
25
+ export function startSsoLogin() {
26
+ const homeserver = "https://matrix.org";
27
+ saveStoredHomeserver(homeserver);
28
+ const redirectUrl = encodeURIComponent(window.location.origin + window.location.pathname);
29
+ window.location.href = `${homeserver}/_matrix/client/v3/login/sso/redirect?redirectUrl=${redirectUrl}`;
30
+ }
31
+ export async function completeSsoLogin() {
33
32
  const params = new URLSearchParams(window.location.search);
34
33
  const loginToken = params.get("loginToken");
35
34
  if (!loginToken) {
36
35
  return null;
37
36
  }
38
37
  window.history.replaceState({}, document.title, window.location.pathname);
39
- const homeserver = getHomeserver();
38
+ const homeserver = getStoredHomeserver();
40
39
  if (!homeserver) {
41
40
  throw new Error("No homeserver stored for SSO callback");
42
41
  }
43
- const auth = await exchangeLoginToken(homeserver, loginToken);
44
- saveAuth(auth);
45
- removeHomeserver();
46
- return auth;
42
+ const session = await exchangeLoginToken(homeserver, loginToken);
43
+ saveStoredSession(session);
44
+ clearStoredHomeserver();
45
+ return session;
47
46
  }
47
+ export const Auth = {
48
+ startSsoLogin,
49
+ completeSsoLogin,
50
+ getStoredSession,
51
+ clearStoredSession,
52
+ };
48
53
  //# sourceMappingURL=loginFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loginFlow.js","sourceRoot":"","sources":["../src/loginFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,MAAM,eAAe,CAAC;AASvB,MAAM,UAAU,UAAU;IACxB,mGAAmG;IACnG,MAAM,UAAU,GAAG,oBAAoB,CAAC;IACxC,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3B,MAAM,WAAW,GAAG,kBAAkB,CACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAClD,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,UAAU,qDAAqD,WAAW,EAAE,CAAC;AACzG,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,UAAkB,EAClB,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,0BAA0B,EAAE;QACpE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,UAAU;SAClB,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAkB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAElD,OAAO;QACL,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,YAAY;QAC9B,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1E,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9D,QAAQ,CAAC,IAAI,CAAC,CAAC;IACf,gBAAgB,EAAE,CAAC;IAEnB,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"loginFlow.js","sourceRoot":"","sources":["../src/loginFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,KAAK,UAAU,kBAAkB,CAC/B,UAAkB,EAClB,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,0BAA0B,EAAE;QACpE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,UAAU;SAClB,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GACR,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAExB,OAAO;QACL,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,YAAY;QAC9B,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG,oBAAoB,CAAC;IACxC,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,kBAAkB,CACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAClD,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,UAAU,qDAAqD,WAAW,EAAE,CAAC;AACzG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1E,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACjE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,qBAAqB,EAAE,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,aAAa;IACb,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;CACnB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { MatrixClient } from "matrix-js-sdk";
2
+ import type { Awareness } from "y-protocols/awareness";
3
+ import type { Doc } from "yjs";
4
+ declare module "matrix-crdt" {
5
+ interface MatrixProviderOptions {
6
+ writer?: {
7
+ flushInterval?: number;
8
+ retryIfForbiddenInterval?: number;
9
+ };
10
+ translator?: {
11
+ updatesAsRegularMessages?: boolean;
12
+ updateEventType?: string;
13
+ snapshotEventType?: string;
14
+ };
15
+ reader?: {
16
+ snapshotInterval?: number;
17
+ };
18
+ enableExperimentalWebrtcSync?: boolean;
19
+ }
20
+ type RoomConfig = {
21
+ type: "id";
22
+ id: string;
23
+ } | {
24
+ type: "alias";
25
+ alias: string;
26
+ };
27
+ type Event<T> = (listener: (e: T) => void) => {
28
+ dispose(): void;
29
+ };
30
+ class MatrixProvider {
31
+ constructor(doc: Doc, matrixClient: MatrixClient, room: RoomConfig, awareness?: Awareness, opts?: MatrixProviderOptions);
32
+ initialize(): void;
33
+ dispose(): void;
34
+ readonly canWrite: boolean;
35
+ readonly roomId: string | undefined;
36
+ onDocumentAvailable: Event<void>;
37
+ onDocumentUnavailable: Event<void>;
38
+ onReceivedEvents: Event<void>;
39
+ onCanWriteChanged: Event<void>;
40
+ }
41
+ }
42
+ export {};
43
+ //# sourceMappingURL=matrix-crdt-shim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-crdt-shim.d.ts","sourceRoot":"","sources":["../src/matrix-crdt-shim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAiB,qBAAqB;QACpC,MAAM,CAAC,EAAE;YACP,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;SACnC,CAAC;QACF,UAAU,CAAC,EAAE;YACX,wBAAwB,CAAC,EAAE,OAAO,CAAC;YACnC,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;QACF,MAAM,CAAC,EAAE;YACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,CAAC;QACF,4BAA4B,CAAC,EAAE,OAAO,CAAC;KACxC;IAED,KAAY,UAAU,GAClB;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAC1B;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAErC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK;QAAE,OAAO,IAAI,IAAI,CAAA;KAAE,CAAC;IAElE,MAAa,cAAc;oBAEvB,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE,SAAS,EACrB,IAAI,CAAC,EAAE,qBAAqB;QAG9B,UAAU,IAAI,IAAI;QAClB,OAAO,IAAI,IAAI;QAEf,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAEpC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;KAChC;CACF;AAED,OAAO,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=matrix-crdt-shim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-crdt-shim.js","sourceRoot":"","sources":["../src/matrix-crdt-shim.ts"],"names":[],"mappings":"AAiDA,OAAO,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const ROOM_TYPE_TEXT_KEY = "__maydb.roomType";
2
+ export declare const ROOM_METADATA_TX_ORIGIN = "maydb:metadata";
3
+ //# sourceMappingURL=roomMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roomMetadata.d.ts","sourceRoot":"","sources":["../src/roomMetadata.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AACrD,eAAO,MAAM,uBAAuB,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const ROOM_TYPE_TEXT_KEY = "__maydb.roomType";
2
+ export const ROOM_METADATA_TX_ORIGIN = "maydb:metadata";
3
+ //# sourceMappingURL=roomMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roomMetadata.js","sourceRoot":"","sources":["../src/roomMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"singletonRoom.d.ts","sourceRoot":"","sources":["../src/singletonRoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,KAAK,EACT,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
1
+ {"version":3,"file":"singletonRoom.d.ts","sourceRoot":"","sources":["../src/singletonRoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,KAAK,EACT,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAMjB"}
@@ -1,39 +1,8 @@
1
1
  export async function getOrCreateSingletonRoomId(db, accountDataKey, roomName) {
2
- const { matrixClient, namespace } = db;
3
- const userId = matrixClient.getUserId();
4
- if (!userId)
5
- throw new Error("Not logged in");
6
- let roomId = null;
7
- try {
8
- const accountData = (await matrixClient.getAccountDataFromServer(namespace));
9
- roomId = accountData?.[accountDataKey] ?? null;
10
- }
11
- catch {
12
- // No account data yet
13
- }
14
- if (roomId) {
15
- try {
16
- if (!matrixClient.getRoom(roomId)) {
17
- await matrixClient.joinRoom(roomId);
18
- }
19
- }
20
- catch {
21
- // Room not accessible, create a new one
22
- roomId = null;
23
- }
24
- }
25
- if (!roomId) {
26
- roomId = await db.createMatrixRoom(roomName);
27
- let existingData = {};
28
- try {
29
- existingData =
30
- (await matrixClient.getAccountDataFromServer(namespace)) || {};
31
- }
32
- catch {
33
- // No existing data
34
- }
35
- await matrixClient.setAccountData(namespace, { ...existingData, [accountDataKey]: roomId });
36
- }
37
- return roomId;
2
+ const room = await db.rooms.getOrCreateSingleton({
3
+ key: accountDataKey,
4
+ name: roomName,
5
+ });
6
+ return room.id;
38
7
  }
39
8
  //# sourceMappingURL=singletonRoom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"singletonRoom.js","sourceRoot":"","sources":["../src/singletonRoom.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,EAAS,EACT,cAAsB,EACtB,QAAgB;IAEhB,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAE9C,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,MAAM,YAAY,CAAC,wBAAwB,CAC9D,SAEI,CACL,CAAkC,CAAC;QACpC,MAAM,GAAG,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;YACxC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,YAAY,GAA2B,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,YAAY;gBACT,CAAC,MAAM,YAAY,CAAC,wBAAwB,CAC3C,SAEI,CACL,CAA4B,IAAI,EAAE,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;QAED,MAAM,YAAY,CAAC,cAAc,CAC/B,SAEI,EACJ,EAAE,GAAG,YAAY,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAC9C,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"singletonRoom.js","sourceRoot":"","sources":["../src/singletonRoom.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,EAAS,EACT,cAAsB,EACtB,QAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAC/C,GAAG,EAAE,cAAc;QACnB,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,EAAE,CAAC;AACjB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,35 +1,85 @@
1
1
  import type * as sdk from "matrix-js-sdk";
2
- export interface AuthData {
2
+ import type { Doc } from "yjs";
3
+ export interface Session {
3
4
  homeserver: string;
4
5
  accessToken: string;
5
6
  userId: string;
6
7
  deviceId: string;
7
8
  }
8
- export type AccessLevel = "view" | "edit" | "owner";
9
+ export type AccessLevel = "viewer" | "editor" | "owner";
9
10
  export interface RoomMember {
10
11
  userId: string;
11
12
  displayName: string;
12
13
  accessLevel: AccessLevel;
13
14
  }
14
- export interface InviteInfo {
15
+ export type MayDbIndexScope = "private" | "collaborative";
16
+ export type MayDbIndexPrimitive = string | number | boolean | null;
17
+ export interface MayDbIndexOrderBy {
18
+ column: string;
19
+ direction: "asc" | "desc";
20
+ }
21
+ export interface MayDbIndexColumnSystemSource {
22
+ kind: "system";
23
+ field: "roomId" | "roomName" | "roomType";
24
+ }
25
+ export interface MayDbIndexColumnYTextSource {
26
+ kind: "ytext";
27
+ path: string;
28
+ }
29
+ export type MayDbIndexColumnSource = MayDbIndexColumnSystemSource | MayDbIndexColumnYTextSource;
30
+ export interface MayDbIndexColumnDefinition {
31
+ source: MayDbIndexColumnSource;
32
+ }
33
+ export interface MayDbCollaborativeIndexResolverInput {
15
34
  roomId: string;
16
35
  roomName: string;
17
- inviter: string;
18
- alias: string | null;
36
+ roomType: string;
37
+ doc: Doc;
38
+ }
39
+ export type MayDbCollaborativeIndexResolver = (input: MayDbCollaborativeIndexResolverInput) => string | string[] | null | undefined;
40
+ export interface MayDbIndexDefinition {
41
+ scope: MayDbIndexScope;
42
+ roomTypes: string[];
43
+ columns: Record<string, MayDbIndexColumnDefinition>;
44
+ defaultOrderBy: MayDbIndexOrderBy;
45
+ maxEntries: number;
46
+ resolveIndexRoomIds?: MayDbCollaborativeIndexResolver;
47
+ }
48
+ export interface MayDbSchema {
49
+ roomTypes: Record<string, object>;
50
+ indexes: Record<string, MayDbIndexDefinition>;
51
+ }
52
+ export interface MayDbIndexItem {
53
+ roomId: string;
54
+ values: Record<string, MayDbIndexPrimitive>;
55
+ }
56
+ export interface MayDbIndexQueryPageOptions {
57
+ where: Record<string, MayDbIndexPrimitive>;
58
+ orderBy: MayDbIndexOrderBy;
59
+ limit: number;
60
+ after: MayDbIndexItem | null;
61
+ }
62
+ export interface MayDbIndexQueryPageResult {
63
+ items: MayDbIndexItem[];
64
+ hasMore: boolean;
19
65
  }
20
- export interface InviteMonitorOptions {
21
- shouldJoin?: (invite: InviteInfo) => boolean;
22
- onJoined: (invite: InviteInfo) => void | Promise<void>;
23
- pollIntervalMs?: number;
66
+ export interface MayDbIndexHandle {
67
+ readonly indexName: string;
68
+ readonly indexRoomId: string | null;
69
+ activate(): () => void;
70
+ ensureReady(): Promise<void>;
71
+ queryPage(options: MayDbIndexQueryPageOptions): Promise<MayDbIndexQueryPageResult>;
72
+ subscribe(listener: () => void): () => void;
24
73
  }
25
74
  export type RoomStatus = "disconnected" | "connecting" | "connected" | "error";
26
- export interface RoomMetadata {
27
- title: string;
75
+ export interface RoomState {
76
+ status: RoomStatus;
77
+ canEdit: boolean;
78
+ name: string | null;
28
79
  }
29
80
  export type MatrixClient = sdk.MatrixClient;
30
81
  /**
31
- * Interface for what a Room needs from its host client.
32
- * This allows Room to work with different client implementations.
82
+ * Interface for what a room instance needs from its host client.
33
83
  */
34
84
  export interface RoomServices {
35
85
  matrixClient: MatrixClient;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IAC7C,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@may-db/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -12,17 +12,18 @@
12
12
  }
13
13
  },
14
14
  "files": [
15
- "dist"
15
+ "dist",
16
+ "patches"
16
17
  ],
17
18
  "dependencies": {
18
- "matrix-crdt": "^0.2.1-alpha.1",
19
- "matrix-js-sdk": "^40.2.0-rc.0",
19
+ "matrix-crdt": "0.2.1-alpha.1",
20
+ "matrix-js-sdk": "40.2.0",
21
+ "patch-package": "^8.0.1",
20
22
  "y-protocols": "^1.0.7",
21
23
  "yjs": "^13.6.29"
22
24
  },
23
25
  "devDependencies": {
24
26
  "eslint": "^9.39.1",
25
- "patch-package": "^8.0.1",
26
27
  "typescript": "~5.9.3"
27
28
  },
28
29
  "scripts": {
@@ -0,0 +1,108 @@
1
+ diff --git a/node_modules/matrix-crdt/dist/matrix-crdt.js b/node_modules/matrix-crdt/dist/matrix-crdt.js
2
+ index fa2af44..5572668 100644
3
+ --- a/node_modules/matrix-crdt/dist/matrix-crdt.js
4
+ +++ b/node_modules/matrix-crdt/dist/matrix-crdt.js
5
+ @@ -4,8 +4,36 @@ var c = (e, s, t) => (Pt(e, typeof s != "symbol" ? s + "" : s, t), t);
6
+ import { lifecycle as ae, event as A } from "vscode-lib";
7
+ import * as b from "yjs";
8
+ import Lt from "another-json";
9
+ -import { RoomEvent as Be, MatrixEvent as Dt, Method as jt, Direction as Bt } from "matrix-js-sdk";
10
+ -import Ft from "simple-peer";
11
+ +import { RoomEvent as Be } from "matrix-js-sdk/lib/models/room.js";
12
+ +import { MatrixEvent as Dt } from "matrix-js-sdk/lib/models/event.js";
13
+ +import { Method as jt } from "matrix-js-sdk/lib/http-api/method.js";
14
+ +import { Direction as Bt } from "matrix-js-sdk/lib/models/event-timeline.js";
15
+ +const Ft = typeof globalThis < "u" ? globalThis.SimplePeer : void 0;
16
+ +function LtEncodeBase64(e) {
17
+ + const s = e instanceof Uint8Array ? e : new Uint8Array(e);
18
+ + if (typeof btoa == "function") {
19
+ + let t = "";
20
+ + for (let n = 0; n < s.byteLength; n++)
21
+ + t += String.fromCharCode(s[n]);
22
+ + return btoa(t);
23
+ + }
24
+ + if (typeof Buffer < "u")
25
+ + return Buffer.from(s.buffer, s.byteOffset, s.byteLength).toString("base64");
26
+ + throw new Error("No base64 encoder available in this environment");
27
+ +}
28
+ +function LtDecodeBase64(e) {
29
+ + if (typeof atob == "function") {
30
+ + const s = atob(e), t = new Uint8Array(s.length);
31
+ + for (let n = 0; n < s.length; n++)
32
+ + t[n] = s.charCodeAt(n);
33
+ + return t;
34
+ + }
35
+ + if (typeof Buffer < "u") {
36
+ + const s = Buffer.from(e, "base64");
37
+ + return new Uint8Array(s.buffer, s.byteOffset, s.byteLength);
38
+ + }
39
+ + throw new Error("No base64 decoder available in this environment");
40
+ +}
41
+ async function Nt(e, s, t, n, r) {
42
+ const o = "ed25519:" + n, l = ((s.signatures || {})[t] || {})[o];
43
+ if (!l)
44
+ @@ -16,10 +44,10 @@ async function Nt(e, s, t, n, r) {
45
+ e.verifySignature(r, d, l);
46
+ }
47
+ function be(e) {
48
+ - return Buffer.from(e).toString("base64");
49
+ + return LtEncodeBase64(e);
50
+ }
51
+ function ot(e) {
52
+ - return Buffer.from(e, "base64");
53
+ + return LtDecodeBase64(e);
54
+ }
55
+ async function Wt(e, s) {
56
+ await e.crypto.signObject(s);
57
+ @@ -177,7 +205,6 @@ class Ht extends ae.Disposable {
58
+ if (!this.disposed)
59
+ try {
60
+ this.pendingPollRequest = this.matrixClient.http.authedRequest(
61
+ - void 0,
62
+ jt.Get,
63
+ "/events",
64
+ {
65
+ @@ -185,7 +212,7 @@ class Ht extends ae.Disposable {
66
+ timeout: Fe + "",
67
+ from: this.latestToken
68
+ },
69
+ - void 0,
70
+ + undefined,
71
+ { localTimeoutMs: Fe * 2 }
72
+ );
73
+ const t = await this.pendingPollRequest;
74
+ @@ -380,15 +407,7 @@ const g = () => new ds(), us = (e) => {
75
+ for (let t = 0; t < e.byteLength; t++)
76
+ s += qt(e[t]);
77
+ return btoa(s);
78
+ -}, _s = (e) => Buffer.from(e.buffer, e.byteOffset, e.byteLength).toString("base64"), Ts = (e) => {
79
+ - const s = atob(e), t = vs(s.length);
80
+ - for (let n = 0; n < s.length; n++)
81
+ - t[n] = s.charCodeAt(n);
82
+ - return t;
83
+ -}, Cs = (e) => {
84
+ - const s = Buffer.from(e, "base64");
85
+ - return new Uint8Array(s.buffer, s.byteOffset, s.byteLength);
86
+ -}, gt = ht ? Ss : _s, mt = ht ? Ts : Cs;
87
+ +}, _s = (e) => LtEncodeBase64(new Uint8Array(e.buffer, e.byteOffset, e.byteLength)), Ts = (e) => LtDecodeBase64(e), Cs = (e) => LtDecodeBase64(e), gt = ht ? Ss : _s, mt = ht ? Ts : Cs;
88
+ class Us {
89
+ constructor(s) {
90
+ this.arr = s, this.pos = 0;
91
+ @@ -974,6 +993,8 @@ class Ye {
92
+ c(this, "connected", !1);
93
+ c(this, "synced", !1);
94
+ c(this, "peer");
95
+ + if (!Ft)
96
+ + throw new Error("matrix-crdt: experimental WebRTC sync requires globalThis.SimplePeer");
97
+ this.remotePeerId = n, this.room = r, j("establishing connection to ", T, n), this.peer = new Ft({ initiator: t, ...r.provider.peerOpts }), this.peer.on("signal", (o) => {
98
+ s.publishSignalingMessage(r, {
99
+ to: n,
100
+ @@ -1370,7 +1391,7 @@ function Cr(e, s, t) {
101
+ }
102
+ var Ur = Cr;
103
+ const Ir = {
104
+ - flushInterval: process.env.NODE_ENV === "test" ? 100 : 100 * 5,
105
+ + flushInterval: typeof process < "u" && process.env && process.env.NODE_ENV === "test" ? 100 : 100 * 5,
106
+ retryIfForbiddenInterval: 1e3 * 30
107
+ };
108
+ class xr extends ae.Disposable {