@dittolive/ditto-chat-core 0.1.2 → 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.
- package/dist/index.es.js +522 -499
- package/dist/index.umd.js +9 -5
- package/dist/src/index.d.ts +1 -0
- package/dist/src/slices/useMessages.d.ts +3 -2
- package/dist/src/slices/useRooms.d.ts +2 -1
- package/dist/src/types/Retention.d.ts +24 -0
- package/dist/src/types/Room.d.ts +2 -1
- package/dist/src/useChat.d.ts +2 -1
- package/package.json +2 -2
package/dist/index.es.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
const
|
|
1
|
+
import x, { useMemo as Be } from "react";
|
|
2
|
+
const Fe = {
|
|
3
3
|
canCreateRoom: !0,
|
|
4
4
|
canEditOwnMessage: !0,
|
|
5
5
|
canDeleteOwnMessage: !0,
|
|
@@ -7,7 +7,7 @@ const ze = {
|
|
|
7
7
|
canRemoveOwnReaction: !0,
|
|
8
8
|
canMentionUsers: !0,
|
|
9
9
|
canSubscribeToRoom: !0
|
|
10
|
-
},
|
|
10
|
+
}, ze = (e, t, { rbacConfig: r = {} }) => ({
|
|
11
11
|
rbacConfig: r,
|
|
12
12
|
/**
|
|
13
13
|
* Check if a specific permission action is allowed.
|
|
@@ -24,8 +24,8 @@ const ze = {
|
|
|
24
24
|
* @returns boolean indicating if action is allowed
|
|
25
25
|
*/
|
|
26
26
|
canPerformAction: (s) => {
|
|
27
|
-
const
|
|
28
|
-
return
|
|
27
|
+
const a = t().rbacConfig[s];
|
|
28
|
+
return a !== void 0 ? a : Fe[s];
|
|
29
29
|
},
|
|
30
30
|
/**
|
|
31
31
|
* Update the RBAC permission configuration.
|
|
@@ -49,7 +49,7 @@ const ze = {
|
|
|
49
49
|
}));
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
|
-
var Ae = /* @__PURE__ */ Symbol.for("immer-nothing"),
|
|
52
|
+
var Ae = /* @__PURE__ */ Symbol.for("immer-nothing"), me = /* @__PURE__ */ Symbol.for("immer-draftable"), S = /* @__PURE__ */ Symbol.for("immer-state"), He = process.env.NODE_ENV !== "production" ? [
|
|
53
53
|
// All error codes, starting by 0:
|
|
54
54
|
function(e) {
|
|
55
55
|
return `The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`;
|
|
@@ -80,7 +80,7 @@ var Ae = /* @__PURE__ */ Symbol.for("immer-nothing"), ye = /* @__PURE__ */ Symbo
|
|
|
80
80
|
// Note: if more errors are added, the errorOffset in Patches.ts should be increased
|
|
81
81
|
// See Patches.ts for additional errors
|
|
82
82
|
] : [];
|
|
83
|
-
function
|
|
83
|
+
function p(e, ...t) {
|
|
84
84
|
if (process.env.NODE_ENV !== "production") {
|
|
85
85
|
const r = He[e], n = typeof r == "function" ? r.apply(null, t) : r;
|
|
86
86
|
throw new Error(`[Immer] ${n}`);
|
|
@@ -89,15 +89,15 @@ function T(e, ...t) {
|
|
|
89
89
|
`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`
|
|
90
90
|
);
|
|
91
91
|
}
|
|
92
|
-
var
|
|
93
|
-
function
|
|
94
|
-
return !!e && !!e[
|
|
92
|
+
var k = Object.getPrototypeOf;
|
|
93
|
+
function P(e) {
|
|
94
|
+
return !!e && !!e[S];
|
|
95
95
|
}
|
|
96
|
-
function
|
|
97
|
-
return e ?
|
|
96
|
+
function C(e) {
|
|
97
|
+
return e ? De(e) || Array.isArray(e) || !!e[me] || !!e.constructor?.[me] || z(e) || V(e) : !1;
|
|
98
98
|
}
|
|
99
|
-
var
|
|
100
|
-
function
|
|
99
|
+
var Le = Object.prototype.constructor.toString(), ye = /* @__PURE__ */ new WeakMap();
|
|
100
|
+
function De(e) {
|
|
101
101
|
if (!e || typeof e != "object")
|
|
102
102
|
return !1;
|
|
103
103
|
const t = Object.getPrototypeOf(e);
|
|
@@ -108,95 +108,95 @@ function ve(e) {
|
|
|
108
108
|
return !0;
|
|
109
109
|
if (typeof r != "function")
|
|
110
110
|
return !1;
|
|
111
|
-
let n =
|
|
112
|
-
return n === void 0 && (n = Function.toString.call(r),
|
|
111
|
+
let n = ye.get(r);
|
|
112
|
+
return n === void 0 && (n = Function.toString.call(r), ye.set(r, n)), n === Le;
|
|
113
113
|
}
|
|
114
|
-
function
|
|
115
|
-
|
|
114
|
+
function G(e, t, r = !0) {
|
|
115
|
+
Q(e) === 0 ? (r ? Reflect.ownKeys(e) : Object.keys(e)).forEach((s) => {
|
|
116
116
|
t(s, e[s], e);
|
|
117
117
|
}) : e.forEach((n, s) => t(s, n, e));
|
|
118
118
|
}
|
|
119
|
-
function
|
|
120
|
-
const t = e[
|
|
121
|
-
return t ? t.type_ : Array.isArray(e) ? 1 :
|
|
119
|
+
function Q(e) {
|
|
120
|
+
const t = e[S];
|
|
121
|
+
return t ? t.type_ : Array.isArray(e) ? 1 : z(e) ? 2 : V(e) ? 3 : 0;
|
|
122
122
|
}
|
|
123
|
-
function
|
|
124
|
-
return
|
|
123
|
+
function se(e, t) {
|
|
124
|
+
return Q(e) === 2 ? e.has(t) : Object.prototype.hasOwnProperty.call(e, t);
|
|
125
125
|
}
|
|
126
126
|
function Me(e, t, r) {
|
|
127
|
-
const n =
|
|
127
|
+
const n = Q(e);
|
|
128
128
|
n === 2 ? e.set(t, r) : n === 3 ? e.add(r) : e[t] = r;
|
|
129
129
|
}
|
|
130
|
-
function
|
|
130
|
+
function $e(e, t) {
|
|
131
131
|
return e === t ? e !== 0 || 1 / e === 1 / t : e !== e && t !== t;
|
|
132
132
|
}
|
|
133
|
-
function
|
|
133
|
+
function z(e) {
|
|
134
134
|
return e instanceof Map;
|
|
135
135
|
}
|
|
136
|
-
function
|
|
136
|
+
function V(e) {
|
|
137
137
|
return e instanceof Set;
|
|
138
138
|
}
|
|
139
|
-
function
|
|
139
|
+
function v(e) {
|
|
140
140
|
return e.copy_ || e.base_;
|
|
141
141
|
}
|
|
142
|
-
function
|
|
143
|
-
if (
|
|
142
|
+
function oe(e, t) {
|
|
143
|
+
if (z(e))
|
|
144
144
|
return new Map(e);
|
|
145
|
-
if (
|
|
145
|
+
if (V(e))
|
|
146
146
|
return new Set(e);
|
|
147
147
|
if (Array.isArray(e))
|
|
148
148
|
return Array.prototype.slice.call(e);
|
|
149
|
-
const r =
|
|
149
|
+
const r = De(e);
|
|
150
150
|
if (t === !0 || t === "class_only" && !r) {
|
|
151
151
|
const n = Object.getOwnPropertyDescriptors(e);
|
|
152
|
-
delete n[
|
|
152
|
+
delete n[S];
|
|
153
153
|
let s = Reflect.ownKeys(n);
|
|
154
154
|
for (let o = 0; o < s.length; o++) {
|
|
155
|
-
const
|
|
156
|
-
|
|
155
|
+
const a = s[o], u = n[a];
|
|
156
|
+
u.writable === !1 && (u.writable = !0, u.configurable = !0), (u.get || u.set) && (n[a] = {
|
|
157
157
|
configurable: !0,
|
|
158
158
|
writable: !0,
|
|
159
159
|
// could live with !!desc.set as well here...
|
|
160
|
-
enumerable:
|
|
161
|
-
value: e[
|
|
160
|
+
enumerable: u.enumerable,
|
|
161
|
+
value: e[a]
|
|
162
162
|
});
|
|
163
163
|
}
|
|
164
|
-
return Object.create(
|
|
164
|
+
return Object.create(k(e), n);
|
|
165
165
|
} else {
|
|
166
|
-
const n =
|
|
166
|
+
const n = k(e);
|
|
167
167
|
if (n !== null && r)
|
|
168
168
|
return { ...e };
|
|
169
169
|
const s = Object.create(n);
|
|
170
170
|
return Object.assign(s, e);
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
-
function
|
|
174
|
-
return
|
|
175
|
-
set:
|
|
176
|
-
add:
|
|
177
|
-
clear:
|
|
178
|
-
delete:
|
|
179
|
-
}), Object.freeze(e), t && Object.values(e).forEach((r) =>
|
|
173
|
+
function le(e, t = !1) {
|
|
174
|
+
return X(e) || P(e) || !C(e) || (Q(e) > 1 && Object.defineProperties(e, {
|
|
175
|
+
set: j,
|
|
176
|
+
add: j,
|
|
177
|
+
clear: j,
|
|
178
|
+
delete: j
|
|
179
|
+
}), Object.freeze(e), t && Object.values(e).forEach((r) => le(r, !0))), e;
|
|
180
180
|
}
|
|
181
|
-
function
|
|
182
|
-
|
|
181
|
+
function je() {
|
|
182
|
+
p(2);
|
|
183
183
|
}
|
|
184
|
-
var
|
|
185
|
-
value:
|
|
184
|
+
var j = {
|
|
185
|
+
value: je
|
|
186
186
|
};
|
|
187
|
-
function
|
|
187
|
+
function X(e) {
|
|
188
188
|
return e === null || typeof e != "object" ? !0 : Object.isFrozen(e);
|
|
189
189
|
}
|
|
190
|
-
var
|
|
191
|
-
function
|
|
192
|
-
const t =
|
|
193
|
-
return t ||
|
|
190
|
+
var We = {};
|
|
191
|
+
function U(e) {
|
|
192
|
+
const t = We[e];
|
|
193
|
+
return t || p(0, e), t;
|
|
194
194
|
}
|
|
195
|
-
var
|
|
196
|
-
function
|
|
197
|
-
return
|
|
195
|
+
var B;
|
|
196
|
+
function ve() {
|
|
197
|
+
return B;
|
|
198
198
|
}
|
|
199
|
-
function
|
|
199
|
+
function Ge(e, t) {
|
|
200
200
|
return {
|
|
201
201
|
drafts_: [],
|
|
202
202
|
parent_: e,
|
|
@@ -207,63 +207,63 @@ function qe(e, t) {
|
|
|
207
207
|
unfinalizedDrafts_: 0
|
|
208
208
|
};
|
|
209
209
|
}
|
|
210
|
-
function
|
|
211
|
-
t && (
|
|
210
|
+
function ge(e, t) {
|
|
211
|
+
t && (U("Patches"), e.patches_ = [], e.inversePatches_ = [], e.patchListener_ = t);
|
|
212
212
|
}
|
|
213
|
-
function
|
|
214
|
-
ae(e), e.drafts_.forEach(
|
|
213
|
+
function ie(e) {
|
|
214
|
+
ae(e), e.drafts_.forEach(Ye), e.drafts_ = null;
|
|
215
215
|
}
|
|
216
216
|
function ae(e) {
|
|
217
|
-
e ===
|
|
217
|
+
e === B && (B = e.parent_);
|
|
218
218
|
}
|
|
219
|
-
function
|
|
220
|
-
return
|
|
219
|
+
function he(e) {
|
|
220
|
+
return B = Ge(B, e);
|
|
221
221
|
}
|
|
222
|
-
function
|
|
223
|
-
const t = e[
|
|
222
|
+
function Ye(e) {
|
|
223
|
+
const t = e[S];
|
|
224
224
|
t.type_ === 0 || t.type_ === 1 ? t.revoke_() : t.revoked_ = !0;
|
|
225
225
|
}
|
|
226
|
-
function
|
|
226
|
+
function be(e, t) {
|
|
227
227
|
t.unfinalizedDrafts_ = t.drafts_.length;
|
|
228
228
|
const r = t.drafts_[0];
|
|
229
|
-
return e !== void 0 && e !== r ? (r[
|
|
230
|
-
r[
|
|
229
|
+
return e !== void 0 && e !== r ? (r[S].modified_ && (ie(t), p(4)), C(e) && (e = Y(t, e), t.parent_ || q(t, e)), t.patches_ && U("Patches").generateReplacementPatches_(
|
|
230
|
+
r[S].base_,
|
|
231
231
|
e,
|
|
232
232
|
t.patches_,
|
|
233
233
|
t.inversePatches_
|
|
234
|
-
)) : e =
|
|
234
|
+
)) : e = Y(t, r, []), ie(t), t.patches_ && t.patchListener_(t.patches_, t.inversePatches_), e !== Ae ? e : void 0;
|
|
235
235
|
}
|
|
236
|
-
function
|
|
237
|
-
if (
|
|
236
|
+
function Y(e, t, r) {
|
|
237
|
+
if (X(t))
|
|
238
238
|
return t;
|
|
239
|
-
const n = e.immer_.shouldUseStrictIteration(), s = t[
|
|
239
|
+
const n = e.immer_.shouldUseStrictIteration(), s = t[S];
|
|
240
240
|
if (!s)
|
|
241
|
-
return
|
|
241
|
+
return G(
|
|
242
242
|
t,
|
|
243
|
-
(o,
|
|
243
|
+
(o, a) => _e(e, s, t, o, a, r),
|
|
244
244
|
n
|
|
245
245
|
), t;
|
|
246
246
|
if (s.scope_ !== e)
|
|
247
247
|
return t;
|
|
248
248
|
if (!s.modified_)
|
|
249
|
-
return
|
|
249
|
+
return q(e, s.base_, !0), s.base_;
|
|
250
250
|
if (!s.finalized_) {
|
|
251
251
|
s.finalized_ = !0, s.scope_.unfinalizedDrafts_--;
|
|
252
252
|
const o = s.copy_;
|
|
253
|
-
let
|
|
254
|
-
s.type_ === 3 && (
|
|
255
|
-
|
|
256
|
-
(y, g) =>
|
|
253
|
+
let a = o, u = !1;
|
|
254
|
+
s.type_ === 3 && (a = new Set(o), o.clear(), u = !0), G(
|
|
255
|
+
a,
|
|
256
|
+
(y, g) => _e(
|
|
257
257
|
e,
|
|
258
258
|
s,
|
|
259
259
|
o,
|
|
260
260
|
y,
|
|
261
261
|
g,
|
|
262
262
|
r,
|
|
263
|
-
|
|
263
|
+
u
|
|
264
264
|
),
|
|
265
265
|
n
|
|
266
|
-
),
|
|
266
|
+
), q(e, o, !1), r && e.patches_ && U("Patches").generatePatches_(
|
|
267
267
|
s,
|
|
268
268
|
r,
|
|
269
269
|
e.patches_,
|
|
@@ -272,34 +272,34 @@ function Q(e, t, r) {
|
|
|
272
272
|
}
|
|
273
273
|
return s.copy_;
|
|
274
274
|
}
|
|
275
|
-
function
|
|
276
|
-
if (s == null || typeof s != "object" && !
|
|
275
|
+
function _e(e, t, r, n, s, o, a) {
|
|
276
|
+
if (s == null || typeof s != "object" && !a)
|
|
277
277
|
return;
|
|
278
|
-
const
|
|
279
|
-
if (!(
|
|
280
|
-
if (process.env.NODE_ENV !== "production" && s === r &&
|
|
278
|
+
const u = X(s);
|
|
279
|
+
if (!(u && !a)) {
|
|
280
|
+
if (process.env.NODE_ENV !== "production" && s === r && p(5), P(s)) {
|
|
281
281
|
const y = o && t && t.type_ !== 3 && // Set objects are atomic since they have no keys.
|
|
282
|
-
!
|
|
283
|
-
if (Me(r, n, g),
|
|
282
|
+
!se(t.assigned_, n) ? o.concat(n) : void 0, g = Y(e, s, y);
|
|
283
|
+
if (Me(r, n, g), P(g))
|
|
284
284
|
e.canAutoFreeze_ = !1;
|
|
285
285
|
else
|
|
286
286
|
return;
|
|
287
|
-
} else
|
|
288
|
-
if (
|
|
289
|
-
if (!e.immer_.autoFreeze_ && e.unfinalizedDrafts_ < 1 || t && t.base_ && t.base_[n] === s &&
|
|
287
|
+
} else a && r.add(s);
|
|
288
|
+
if (C(s) && !u) {
|
|
289
|
+
if (!e.immer_.autoFreeze_ && e.unfinalizedDrafts_ < 1 || t && t.base_ && t.base_[n] === s && u)
|
|
290
290
|
return;
|
|
291
|
-
|
|
291
|
+
Y(e, s), (!t || !t.scope_.parent_) && typeof n != "symbol" && (z(r) ? r.has(n) : Object.prototype.propertyIsEnumerable.call(r, n)) && q(e, s);
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
|
-
function
|
|
296
|
-
!e.parent_ && e.immer_.autoFreeze_ && e.canAutoFreeze_ &&
|
|
295
|
+
function q(e, t, r = !1) {
|
|
296
|
+
!e.parent_ && e.immer_.autoFreeze_ && e.canAutoFreeze_ && le(t, r);
|
|
297
297
|
}
|
|
298
|
-
function
|
|
298
|
+
function qe(e, t) {
|
|
299
299
|
const r = Array.isArray(e), n = {
|
|
300
300
|
type_: r ? 1 : 0,
|
|
301
301
|
// Track which produce call this is associated with.
|
|
302
|
-
scope_: t ? t.scope_ :
|
|
302
|
+
scope_: t ? t.scope_ : ve(),
|
|
303
303
|
// True for both shallow and deep changes.
|
|
304
304
|
modified_: !1,
|
|
305
305
|
// Used during finalization.
|
|
@@ -319,50 +319,50 @@ function Ye(e, t) {
|
|
|
319
319
|
revoke_: null,
|
|
320
320
|
isManual_: !1
|
|
321
321
|
};
|
|
322
|
-
let s = n, o =
|
|
323
|
-
r && (s = [n], o =
|
|
324
|
-
const { revoke:
|
|
325
|
-
return n.draft_ =
|
|
322
|
+
let s = n, o = fe;
|
|
323
|
+
r && (s = [n], o = F);
|
|
324
|
+
const { revoke: a, proxy: u } = Proxy.revocable(s, o);
|
|
325
|
+
return n.draft_ = u, n.revoke_ = a, u;
|
|
326
326
|
}
|
|
327
|
-
var
|
|
327
|
+
var fe = {
|
|
328
328
|
get(e, t) {
|
|
329
|
-
if (t ===
|
|
329
|
+
if (t === S)
|
|
330
330
|
return e;
|
|
331
|
-
const r =
|
|
332
|
-
if (!
|
|
333
|
-
return
|
|
331
|
+
const r = v(e);
|
|
332
|
+
if (!se(r, t))
|
|
333
|
+
return Qe(e, r, t);
|
|
334
334
|
const n = r[t];
|
|
335
|
-
return e.finalized_ || !
|
|
335
|
+
return e.finalized_ || !C(n) ? n : n === K(e.base_, t) ? (ee(e), e.copy_[t] = ue(n, e)) : n;
|
|
336
336
|
},
|
|
337
337
|
has(e, t) {
|
|
338
|
-
return t in
|
|
338
|
+
return t in v(e);
|
|
339
339
|
},
|
|
340
340
|
ownKeys(e) {
|
|
341
|
-
return Reflect.ownKeys(
|
|
341
|
+
return Reflect.ownKeys(v(e));
|
|
342
342
|
},
|
|
343
343
|
set(e, t, r) {
|
|
344
|
-
const n =
|
|
344
|
+
const n = Ce(v(e), t);
|
|
345
345
|
if (n?.set)
|
|
346
346
|
return n.set.call(e.draft_, r), !0;
|
|
347
347
|
if (!e.modified_) {
|
|
348
|
-
const s =
|
|
348
|
+
const s = K(v(e), t), o = s?.[S];
|
|
349
349
|
if (o && o.base_ === r)
|
|
350
350
|
return e.copy_[t] = r, e.assigned_[t] = !1, !0;
|
|
351
|
-
if (
|
|
351
|
+
if ($e(r, s) && (r !== void 0 || se(e.base_, t)))
|
|
352
352
|
return !0;
|
|
353
|
-
|
|
353
|
+
ee(e), ce(e);
|
|
354
354
|
}
|
|
355
355
|
return e.copy_[t] === r && // special case: handle new props with value 'undefined'
|
|
356
356
|
(r !== void 0 || t in e.copy_) || // special case: NaN
|
|
357
357
|
Number.isNaN(r) && Number.isNaN(e.copy_[t]) || (e.copy_[t] = r, e.assigned_[t] = !0), !0;
|
|
358
358
|
},
|
|
359
359
|
deleteProperty(e, t) {
|
|
360
|
-
return
|
|
360
|
+
return K(e.base_, t) !== void 0 || t in e.base_ ? (e.assigned_[t] = !1, ee(e), ce(e)) : delete e.assigned_[t], e.copy_ && delete e.copy_[t], !0;
|
|
361
361
|
},
|
|
362
362
|
// Note: We never coerce `desc.value` into an Immer draft, because we can't make
|
|
363
363
|
// the same guarantee in ES5 mode.
|
|
364
364
|
getOwnPropertyDescriptor(e, t) {
|
|
365
|
-
const r =
|
|
365
|
+
const r = v(e), n = Reflect.getOwnPropertyDescriptor(r, t);
|
|
366
366
|
return n && {
|
|
367
367
|
writable: !0,
|
|
368
368
|
configurable: e.type_ !== 1 || t !== "length",
|
|
@@ -371,107 +371,107 @@ var me = {
|
|
|
371
371
|
};
|
|
372
372
|
},
|
|
373
373
|
defineProperty() {
|
|
374
|
-
|
|
374
|
+
p(11);
|
|
375
375
|
},
|
|
376
376
|
getPrototypeOf(e) {
|
|
377
|
-
return
|
|
377
|
+
return k(e.base_);
|
|
378
378
|
},
|
|
379
379
|
setPrototypeOf() {
|
|
380
|
-
|
|
380
|
+
p(12);
|
|
381
381
|
}
|
|
382
|
-
},
|
|
383
|
-
|
|
384
|
-
|
|
382
|
+
}, F = {};
|
|
383
|
+
G(fe, (e, t) => {
|
|
384
|
+
F[e] = function() {
|
|
385
385
|
return arguments[0] = arguments[0][0], t.apply(this, arguments);
|
|
386
386
|
};
|
|
387
387
|
});
|
|
388
|
-
|
|
389
|
-
return process.env.NODE_ENV !== "production" && isNaN(parseInt(t)) &&
|
|
388
|
+
F.deleteProperty = function(e, t) {
|
|
389
|
+
return process.env.NODE_ENV !== "production" && isNaN(parseInt(t)) && p(13), F.set.call(this, e, t, void 0);
|
|
390
390
|
};
|
|
391
|
-
|
|
392
|
-
return process.env.NODE_ENV !== "production" && t !== "length" && isNaN(parseInt(t)) &&
|
|
391
|
+
F.set = function(e, t, r) {
|
|
392
|
+
return process.env.NODE_ENV !== "production" && t !== "length" && isNaN(parseInt(t)) && p(14), fe.set.call(this, e[0], t, r, e[0]);
|
|
393
393
|
};
|
|
394
|
-
function
|
|
395
|
-
const r = e[
|
|
396
|
-
return (r ?
|
|
394
|
+
function K(e, t) {
|
|
395
|
+
const r = e[S];
|
|
396
|
+
return (r ? v(r) : e)[t];
|
|
397
397
|
}
|
|
398
|
-
function
|
|
399
|
-
const n =
|
|
398
|
+
function Qe(e, t, r) {
|
|
399
|
+
const n = Ce(t, r);
|
|
400
400
|
return n ? "value" in n ? n.value : (
|
|
401
401
|
// This is a very special case, if the prop is a getter defined by the
|
|
402
402
|
// prototype, we should invoke it with the draft as context!
|
|
403
403
|
n.get?.call(e.draft_)
|
|
404
404
|
) : void 0;
|
|
405
405
|
}
|
|
406
|
-
function
|
|
406
|
+
function Ce(e, t) {
|
|
407
407
|
if (!(t in e))
|
|
408
408
|
return;
|
|
409
|
-
let r =
|
|
409
|
+
let r = k(e);
|
|
410
410
|
for (; r; ) {
|
|
411
411
|
const n = Object.getOwnPropertyDescriptor(r, t);
|
|
412
412
|
if (n)
|
|
413
413
|
return n;
|
|
414
|
-
r =
|
|
414
|
+
r = k(r);
|
|
415
415
|
}
|
|
416
416
|
}
|
|
417
|
-
function
|
|
418
|
-
e.modified_ || (e.modified_ = !0, e.parent_ &&
|
|
417
|
+
function ce(e) {
|
|
418
|
+
e.modified_ || (e.modified_ = !0, e.parent_ && ce(e.parent_));
|
|
419
419
|
}
|
|
420
|
-
function
|
|
421
|
-
e.copy_ || (e.copy_ =
|
|
420
|
+
function ee(e) {
|
|
421
|
+
e.copy_ || (e.copy_ = oe(
|
|
422
422
|
e.base_,
|
|
423
423
|
e.scope_.immer_.useStrictShallowCopy_
|
|
424
424
|
));
|
|
425
425
|
}
|
|
426
|
-
var
|
|
426
|
+
var Ve = class {
|
|
427
427
|
constructor(e) {
|
|
428
428
|
this.autoFreeze_ = !0, this.useStrictShallowCopy_ = !1, this.useStrictIteration_ = !0, this.produce = (t, r, n) => {
|
|
429
429
|
if (typeof t == "function" && typeof r != "function") {
|
|
430
430
|
const o = r;
|
|
431
431
|
r = t;
|
|
432
|
-
const
|
|
432
|
+
const a = this;
|
|
433
433
|
return function(y = o, ...g) {
|
|
434
|
-
return
|
|
434
|
+
return a.produce(y, (w) => r.call(this, w, ...g));
|
|
435
435
|
};
|
|
436
436
|
}
|
|
437
|
-
typeof r != "function" &&
|
|
437
|
+
typeof r != "function" && p(6), n !== void 0 && typeof n != "function" && p(7);
|
|
438
438
|
let s;
|
|
439
|
-
if (
|
|
440
|
-
const o =
|
|
441
|
-
let
|
|
439
|
+
if (C(t)) {
|
|
440
|
+
const o = he(this), a = ue(t, void 0);
|
|
441
|
+
let u = !0;
|
|
442
442
|
try {
|
|
443
|
-
s = r(
|
|
443
|
+
s = r(a), u = !1;
|
|
444
444
|
} finally {
|
|
445
|
-
|
|
445
|
+
u ? ie(o) : ae(o);
|
|
446
446
|
}
|
|
447
|
-
return
|
|
447
|
+
return ge(o, n), be(s, o);
|
|
448
448
|
} else if (!t || typeof t != "object") {
|
|
449
|
-
if (s = r(t), s === void 0 && (s = t), s === Ae && (s = void 0), this.autoFreeze_ &&
|
|
450
|
-
const o = [],
|
|
451
|
-
|
|
449
|
+
if (s = r(t), s === void 0 && (s = t), s === Ae && (s = void 0), this.autoFreeze_ && le(s, !0), n) {
|
|
450
|
+
const o = [], a = [];
|
|
451
|
+
U("Patches").generateReplacementPatches_(t, s, o, a), n(o, a);
|
|
452
452
|
}
|
|
453
453
|
return s;
|
|
454
454
|
} else
|
|
455
|
-
|
|
455
|
+
p(1, t);
|
|
456
456
|
}, this.produceWithPatches = (t, r) => {
|
|
457
457
|
if (typeof t == "function")
|
|
458
|
-
return (
|
|
458
|
+
return (a, ...u) => this.produceWithPatches(a, (y) => t(y, ...u));
|
|
459
459
|
let n, s;
|
|
460
|
-
return [this.produce(t, r, (
|
|
461
|
-
n =
|
|
460
|
+
return [this.produce(t, r, (a, u) => {
|
|
461
|
+
n = a, s = u;
|
|
462
462
|
}), n, s];
|
|
463
463
|
}, typeof e?.autoFreeze == "boolean" && this.setAutoFreeze(e.autoFreeze), typeof e?.useStrictShallowCopy == "boolean" && this.setUseStrictShallowCopy(e.useStrictShallowCopy), typeof e?.useStrictIteration == "boolean" && this.setUseStrictIteration(e.useStrictIteration);
|
|
464
464
|
}
|
|
465
465
|
createDraft(e) {
|
|
466
|
-
|
|
467
|
-
const t =
|
|
468
|
-
return r[
|
|
466
|
+
C(e) || p(8), P(e) && (e = Xe(e));
|
|
467
|
+
const t = he(this), r = ue(e, void 0);
|
|
468
|
+
return r[S].isManual_ = !0, ae(t), r;
|
|
469
469
|
}
|
|
470
470
|
finishDraft(e, t) {
|
|
471
|
-
const r = e && e[
|
|
472
|
-
(!r || !r.isManual_) &&
|
|
471
|
+
const r = e && e[S];
|
|
472
|
+
(!r || !r.isManual_) && p(9);
|
|
473
473
|
const { scope_: n } = r;
|
|
474
|
-
return
|
|
474
|
+
return ge(n, t), be(void 0, n);
|
|
475
475
|
}
|
|
476
476
|
/**
|
|
477
477
|
* Pass true to automatically freeze all copies created by Immer.
|
|
@@ -511,111 +511,113 @@ var Xe = class {
|
|
|
511
511
|
}
|
|
512
512
|
}
|
|
513
513
|
r > -1 && (t = t.slice(r + 1));
|
|
514
|
-
const n =
|
|
515
|
-
return
|
|
514
|
+
const n = U("Patches").applyPatches_;
|
|
515
|
+
return P(e) ? n(e, t) : this.produce(
|
|
516
516
|
e,
|
|
517
517
|
(s) => n(s, t)
|
|
518
518
|
);
|
|
519
519
|
}
|
|
520
520
|
};
|
|
521
|
-
function
|
|
522
|
-
const r =
|
|
523
|
-
return (t ? t.scope_ :
|
|
521
|
+
function ue(e, t) {
|
|
522
|
+
const r = z(e) ? U("MapSet").proxyMap_(e, t) : V(e) ? U("MapSet").proxySet_(e, t) : qe(e, t);
|
|
523
|
+
return (t ? t.scope_ : ve()).drafts_.push(r), r;
|
|
524
524
|
}
|
|
525
|
-
function
|
|
526
|
-
return
|
|
525
|
+
function Xe(e) {
|
|
526
|
+
return P(e) || p(10, e), Ue(e);
|
|
527
527
|
}
|
|
528
|
-
function
|
|
529
|
-
if (!
|
|
528
|
+
function Ue(e) {
|
|
529
|
+
if (!C(e) || X(e))
|
|
530
530
|
return e;
|
|
531
|
-
const t = e[
|
|
531
|
+
const t = e[S];
|
|
532
532
|
let r, n = !0;
|
|
533
533
|
if (t) {
|
|
534
534
|
if (!t.modified_)
|
|
535
535
|
return t.base_;
|
|
536
|
-
t.finalized_ = !0, r =
|
|
536
|
+
t.finalized_ = !0, r = oe(e, t.scope_.immer_.useStrictShallowCopy_), n = t.scope_.immer_.shouldUseStrictIteration();
|
|
537
537
|
} else
|
|
538
|
-
r =
|
|
539
|
-
return
|
|
538
|
+
r = oe(e, !0);
|
|
539
|
+
return G(
|
|
540
540
|
r,
|
|
541
541
|
(s, o) => {
|
|
542
|
-
Me(r, s,
|
|
542
|
+
Me(r, s, Ue(o));
|
|
543
543
|
},
|
|
544
544
|
n
|
|
545
545
|
), t && (t.finalized_ = !1), r;
|
|
546
546
|
}
|
|
547
|
-
var Ze = new
|
|
547
|
+
var Ze = new Ve(), M = Ze.produce;
|
|
548
548
|
const E = [];
|
|
549
549
|
for (let e = 0; e < 256; ++e)
|
|
550
550
|
E.push((e + 256).toString(16).slice(1));
|
|
551
|
-
function
|
|
551
|
+
function Je(e, t = 0) {
|
|
552
552
|
return (E[e[t + 0]] + E[e[t + 1]] + E[e[t + 2]] + E[e[t + 3]] + "-" + E[e[t + 4]] + E[e[t + 5]] + "-" + E[e[t + 6]] + E[e[t + 7]] + "-" + E[e[t + 8]] + E[e[t + 9]] + "-" + E[e[t + 10]] + E[e[t + 11]] + E[e[t + 12]] + E[e[t + 13]] + E[e[t + 14]] + E[e[t + 15]]).toLowerCase();
|
|
553
553
|
}
|
|
554
|
-
let
|
|
555
|
-
const
|
|
556
|
-
function
|
|
557
|
-
if (!
|
|
554
|
+
let te;
|
|
555
|
+
const Ke = new Uint8Array(16);
|
|
556
|
+
function et() {
|
|
557
|
+
if (!te) {
|
|
558
558
|
if (typeof crypto > "u" || !crypto.getRandomValues)
|
|
559
559
|
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
|
560
|
-
|
|
560
|
+
te = crypto.getRandomValues.bind(crypto);
|
|
561
561
|
}
|
|
562
|
-
return
|
|
562
|
+
return te(Ke);
|
|
563
563
|
}
|
|
564
|
-
const
|
|
565
|
-
function
|
|
564
|
+
const tt = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), Te = { randomUUID: tt };
|
|
565
|
+
function rt(e, t, r) {
|
|
566
566
|
e = e || {};
|
|
567
|
-
const n = e.random ?? e.rng?.() ??
|
|
567
|
+
const n = e.random ?? e.rng?.() ?? et();
|
|
568
568
|
if (n.length < 16)
|
|
569
569
|
throw new Error("Random bytes length must be >= 16");
|
|
570
|
-
return n[6] = n[6] & 15 | 64, n[8] = n[8] & 63 | 128,
|
|
570
|
+
return n[6] = n[6] & 15 | 64, n[8] = n[8] & 63 | 128, Je(n);
|
|
571
571
|
}
|
|
572
|
-
function
|
|
573
|
-
return
|
|
572
|
+
function Pe(e, t, r) {
|
|
573
|
+
return Te.randomUUID && !e ? Te.randomUUID() : rt(e);
|
|
574
574
|
}
|
|
575
|
-
function
|
|
576
|
-
if (r.items.length === 0)
|
|
575
|
+
function we(e, t, r) {
|
|
576
|
+
if (r.items.length === 0) {
|
|
577
|
+
e((s) => M(s, (o) => (o.roomsLoading = !1, o.messagesLoading = !1, o)));
|
|
577
578
|
return;
|
|
579
|
+
}
|
|
578
580
|
const n = r.items.map((s) => {
|
|
579
581
|
const o = t().messagesPublisher;
|
|
580
582
|
return o(s.value), s.value;
|
|
581
583
|
});
|
|
582
|
-
e((s) =>
|
|
583
|
-
const
|
|
584
|
-
(
|
|
584
|
+
e((s) => M(s, (o) => {
|
|
585
|
+
const a = s.rooms.filter(
|
|
586
|
+
(u) => u.collectionId !== n[0].collectionId
|
|
585
587
|
);
|
|
586
|
-
return o.rooms =
|
|
588
|
+
return o.rooms = a.concat(n), o.roomsLoading = !1, o;
|
|
587
589
|
}));
|
|
588
590
|
}
|
|
589
|
-
async function
|
|
591
|
+
async function re({
|
|
590
592
|
ditto: e,
|
|
591
593
|
currentUserId: t,
|
|
592
594
|
name: r,
|
|
593
595
|
collectionId: n,
|
|
594
596
|
messagesId: s,
|
|
595
597
|
participants: o = [],
|
|
596
|
-
|
|
597
|
-
isGenerated:
|
|
598
|
+
retention: a,
|
|
599
|
+
isGenerated: u = !1,
|
|
598
600
|
id: y
|
|
599
601
|
}) {
|
|
600
602
|
if (e)
|
|
601
603
|
try {
|
|
602
|
-
const
|
|
603
|
-
_id: y ||
|
|
604
|
+
const w = {
|
|
605
|
+
_id: y || Pe(),
|
|
604
606
|
name: r,
|
|
605
607
|
messagesId: s,
|
|
606
608
|
collectionId: n,
|
|
607
|
-
isGenerated:
|
|
609
|
+
isGenerated: u,
|
|
608
610
|
createdBy: t,
|
|
609
611
|
createdOn: (/* @__PURE__ */ new Date()).toISOString(),
|
|
610
612
|
participants: o || void 0,
|
|
611
|
-
...
|
|
612
|
-
},
|
|
613
|
-
return await e.store.execute(
|
|
613
|
+
...a !== void 0 && { retention: a }
|
|
614
|
+
}, O = `INSERT INTO \`${n}\` DOCUMENTS (:newDoc) ON ID CONFLICT DO UPDATE`;
|
|
615
|
+
return await e.store.execute(O, { newDoc: w }), w;
|
|
614
616
|
} catch (g) {
|
|
615
617
|
console.error(`Error creating ${n}:`, g);
|
|
616
618
|
}
|
|
617
619
|
}
|
|
618
|
-
const
|
|
620
|
+
const nt = (e, t, { ditto: r, userId: n }) => {
|
|
619
621
|
const s = {
|
|
620
622
|
rooms: [],
|
|
621
623
|
dmRooms: [],
|
|
@@ -645,7 +647,7 @@ const st = (e, t, { ditto: r, userId: n }) => {
|
|
|
645
647
|
* - Delegates to createRoomBase with appropriate parameters
|
|
646
648
|
* - Sets collectionId to "rooms" for regular rooms
|
|
647
649
|
* - Sets messagesId to "messages" collection
|
|
648
|
-
* - Passes through optional
|
|
650
|
+
* - Passes through optional retention configuration
|
|
649
651
|
*
|
|
650
652
|
* This approach ensures:
|
|
651
653
|
* - RBAC integration prevents unauthorized room creation
|
|
@@ -654,22 +656,22 @@ const st = (e, t, { ditto: r, userId: n }) => {
|
|
|
654
656
|
*
|
|
655
657
|
* @param name - Display name for the new room
|
|
656
658
|
* @param options - Optional configuration for the room
|
|
657
|
-
* @param options.
|
|
659
|
+
* @param options.retention - Optional custom message retention configuration (overrides global default)
|
|
658
660
|
* @param options.isGenerated - Optional flag to mark room as generated (hidden from main list)
|
|
659
661
|
* @returns Promise resolving to the created Room object, or undefined if permission denied
|
|
660
662
|
*/
|
|
661
|
-
createRoom(o,
|
|
663
|
+
createRoom(o, a) {
|
|
662
664
|
if (!t().canPerformAction("canCreateRoom"))
|
|
663
665
|
return console.warn("Permission denied: canCreateRoom is false"), Promise.resolve(void 0);
|
|
664
|
-
const
|
|
665
|
-
return
|
|
666
|
+
const u = t().currentUser;
|
|
667
|
+
return re({
|
|
666
668
|
ditto: r,
|
|
667
|
-
currentUserId:
|
|
669
|
+
currentUserId: u?._id || n,
|
|
668
670
|
name: o,
|
|
669
671
|
collectionId: "rooms",
|
|
670
672
|
messagesId: "messages",
|
|
671
|
-
|
|
672
|
-
isGenerated:
|
|
673
|
+
retention: a?.retention,
|
|
674
|
+
isGenerated: a?.isGenerated ?? !1
|
|
673
675
|
});
|
|
674
676
|
},
|
|
675
677
|
/**
|
|
@@ -704,16 +706,16 @@ const st = (e, t, { ditto: r, userId: n }) => {
|
|
|
704
706
|
* @throws Error if either user ID is invalid or missing
|
|
705
707
|
*/
|
|
706
708
|
createDMRoom(o) {
|
|
707
|
-
const
|
|
708
|
-
if (!
|
|
709
|
+
const a = t().currentUser;
|
|
710
|
+
if (!a?._id || !o?._id)
|
|
709
711
|
throw Error("Invalid users");
|
|
710
|
-
return
|
|
712
|
+
return re({
|
|
711
713
|
ditto: r,
|
|
712
|
-
currentUserId:
|
|
713
|
-
name: `${
|
|
714
|
+
currentUserId: a?._id || n,
|
|
715
|
+
name: `${a?.name} & ${o.name}`,
|
|
714
716
|
collectionId: "dm_rooms",
|
|
715
717
|
messagesId: "dm_messages",
|
|
716
|
-
participants: [
|
|
718
|
+
participants: [a?._id, o._id]
|
|
717
719
|
});
|
|
718
720
|
},
|
|
719
721
|
/**
|
|
@@ -727,17 +729,17 @@ const st = (e, t, { ditto: r, userId: n }) => {
|
|
|
727
729
|
* @param name - Display name for the room
|
|
728
730
|
* @returns Promise resolving to the created Room object
|
|
729
731
|
*/
|
|
730
|
-
async createGeneratedRoom(o,
|
|
731
|
-
const
|
|
732
|
+
async createGeneratedRoom(o, a) {
|
|
733
|
+
const u = t().currentUser, y = await re({
|
|
732
734
|
ditto: r,
|
|
733
|
-
currentUserId:
|
|
734
|
-
name:
|
|
735
|
+
currentUserId: u?._id || n,
|
|
736
|
+
name: a,
|
|
735
737
|
collectionId: "rooms",
|
|
736
738
|
messagesId: "messages",
|
|
737
739
|
isGenerated: !0,
|
|
738
740
|
id: o
|
|
739
741
|
});
|
|
740
|
-
return y && e((g) => g.generatedRooms.some((
|
|
742
|
+
return y && e((g) => g.generatedRooms.some((O) => O._id === y._id) ? g : {
|
|
741
743
|
...g,
|
|
742
744
|
generatedRooms: [...g.generatedRooms, y]
|
|
743
745
|
}), y;
|
|
@@ -755,18 +757,18 @@ const st = (e, t, { ditto: r, userId: n }) => {
|
|
|
755
757
|
}
|
|
756
758
|
};
|
|
757
759
|
if (r) {
|
|
758
|
-
const o = "SELECT * from rooms WHERE isGenerated = false OR isGenerated IS NULL",
|
|
759
|
-
s.roomsSubscription = r.sync.registerSubscription(o), s.dmRoomsSubscription = r.sync.registerSubscription(
|
|
760
|
+
const o = "SELECT * from rooms WHERE isGenerated = false OR isGenerated IS NULL", a = "SELECT * from dm_rooms where (array_contains(participants, :userId))";
|
|
761
|
+
s.roomsSubscription = r.sync.registerSubscription(o), s.dmRoomsSubscription = r.sync.registerSubscription(a, {
|
|
760
762
|
userId: n
|
|
761
763
|
}), s.roomsObserver = r.store.registerObserver(
|
|
762
764
|
o,
|
|
763
|
-
(
|
|
764
|
-
|
|
765
|
+
(u) => {
|
|
766
|
+
we(e, t, u);
|
|
765
767
|
}
|
|
766
768
|
), s.dmRoomsObserver = r.store.registerObserver(
|
|
767
|
-
|
|
768
|
-
(
|
|
769
|
-
|
|
769
|
+
a,
|
|
770
|
+
(u) => {
|
|
771
|
+
we(e, t, u);
|
|
770
772
|
},
|
|
771
773
|
{
|
|
772
774
|
userId: n
|
|
@@ -774,26 +776,26 @@ const st = (e, t, { ditto: r, userId: n }) => {
|
|
|
774
776
|
);
|
|
775
777
|
}
|
|
776
778
|
return s;
|
|
777
|
-
},
|
|
779
|
+
}, Ee = (e) => {
|
|
778
780
|
let t;
|
|
779
|
-
const r = /* @__PURE__ */ new Set(), n = (g,
|
|
780
|
-
const
|
|
781
|
-
if (!Object.is(
|
|
782
|
-
const
|
|
783
|
-
t =
|
|
781
|
+
const r = /* @__PURE__ */ new Set(), n = (g, w) => {
|
|
782
|
+
const O = typeof g == "function" ? g(t) : g;
|
|
783
|
+
if (!Object.is(O, t)) {
|
|
784
|
+
const N = t;
|
|
785
|
+
t = w ?? (typeof O != "object" || O === null) ? O : Object.assign({}, t, O), r.forEach((H) => H(t, N));
|
|
784
786
|
}
|
|
785
|
-
}, s = () => t,
|
|
786
|
-
return
|
|
787
|
-
},
|
|
788
|
-
function
|
|
789
|
-
const r =
|
|
787
|
+
}, s = () => t, u = { setState: n, getState: s, getInitialState: () => y, subscribe: (g) => (r.add(g), () => r.delete(g)) }, y = t = e(n, s, u);
|
|
788
|
+
return u;
|
|
789
|
+
}, st = ((e) => e ? Ee(e) : Ee), ot = (e) => e;
|
|
790
|
+
function Ne(e, t = ot) {
|
|
791
|
+
const r = x.useSyncExternalStore(
|
|
790
792
|
e.subscribe,
|
|
791
|
-
|
|
792
|
-
|
|
793
|
+
x.useCallback(() => t(e.getState()), [e, t]),
|
|
794
|
+
x.useCallback(() => t(e.getInitialState()), [e, t])
|
|
793
795
|
);
|
|
794
|
-
return
|
|
796
|
+
return x.useDebugValue(r), r;
|
|
795
797
|
}
|
|
796
|
-
const
|
|
798
|
+
const pe = (e) => Symbol.iterator in e, Oe = (e) => (
|
|
797
799
|
// HACK: avoid checking entries type
|
|
798
800
|
"entries" in e
|
|
799
801
|
), Re = (e, t) => {
|
|
@@ -804,7 +806,7 @@ const Se = (e) => Symbol.iterator in e, Oe = (e) => (
|
|
|
804
806
|
if (!n.has(s) || !Object.is(o, n.get(s)))
|
|
805
807
|
return !1;
|
|
806
808
|
return !0;
|
|
807
|
-
},
|
|
809
|
+
}, it = (e, t) => {
|
|
808
810
|
const r = e[Symbol.iterator](), n = t[Symbol.iterator]();
|
|
809
811
|
let s = r.next(), o = n.next();
|
|
810
812
|
for (; !s.done && !o.done; ) {
|
|
@@ -815,19 +817,19 @@ const Se = (e) => Symbol.iterator in e, Oe = (e) => (
|
|
|
815
817
|
return !!s.done && !!o.done;
|
|
816
818
|
};
|
|
817
819
|
function at(e, t) {
|
|
818
|
-
return Object.is(e, t) ? !0 : typeof e != "object" || e === null || typeof t != "object" || t === null || Object.getPrototypeOf(e) !== Object.getPrototypeOf(t) ? !1 :
|
|
820
|
+
return Object.is(e, t) ? !0 : typeof e != "object" || e === null || typeof t != "object" || t === null || Object.getPrototypeOf(e) !== Object.getPrototypeOf(t) ? !1 : pe(e) && pe(t) ? Oe(e) && Oe(t) ? Re(e, t) : it(e, t) : Re(
|
|
819
821
|
{ entries: () => Object.entries(e) },
|
|
820
822
|
{ entries: () => Object.entries(t) }
|
|
821
823
|
);
|
|
822
824
|
}
|
|
823
|
-
function
|
|
824
|
-
const t =
|
|
825
|
+
function ct(e) {
|
|
826
|
+
const t = x.useRef(void 0);
|
|
825
827
|
return (r) => {
|
|
826
828
|
const n = e(r);
|
|
827
829
|
return at(t.current, n) ? t.current : t.current = n;
|
|
828
830
|
};
|
|
829
831
|
}
|
|
830
|
-
const
|
|
832
|
+
const ut = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
831
833
|
const o = {
|
|
832
834
|
usersLoading: !0,
|
|
833
835
|
currentUser: null,
|
|
@@ -849,15 +851,15 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
849
851
|
*
|
|
850
852
|
* @param user - User object (with optional _id for upsert)
|
|
851
853
|
*/
|
|
852
|
-
async addUser(
|
|
854
|
+
async addUser(a) {
|
|
853
855
|
if (r)
|
|
854
856
|
try {
|
|
855
857
|
await r.store.execute(
|
|
856
858
|
`INSERT INTO ${s} DOCUMENTS (:newUser) ON ID CONFLICT DO UPDATE`,
|
|
857
|
-
{ newUser:
|
|
859
|
+
{ newUser: a }
|
|
858
860
|
);
|
|
859
|
-
} catch (
|
|
860
|
-
console.error("Error in addUser:",
|
|
861
|
+
} catch (u) {
|
|
862
|
+
console.error("Error in addUser:", u);
|
|
861
863
|
}
|
|
862
864
|
},
|
|
863
865
|
/**
|
|
@@ -874,13 +876,13 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
874
876
|
*
|
|
875
877
|
* @param params - Object with _id and fields to update
|
|
876
878
|
*/
|
|
877
|
-
async updateUser({ _id:
|
|
878
|
-
if (r &&
|
|
879
|
+
async updateUser({ _id: a, ...u }) {
|
|
880
|
+
if (r && a)
|
|
879
881
|
try {
|
|
880
|
-
const y = await t().findUserById(
|
|
882
|
+
const y = await t().findUserById(a);
|
|
881
883
|
if (!y)
|
|
882
884
|
return;
|
|
883
|
-
const g = { ...y, ...
|
|
885
|
+
const g = { ...y, ...u };
|
|
884
886
|
await r.store.execute(
|
|
885
887
|
`INSERT INTO ${s} DOCUMENTS (:newUser) ON ID CONFLICT DO UPDATE`,
|
|
886
888
|
{ newUser: g }
|
|
@@ -902,16 +904,16 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
902
904
|
* @param userId - The unique identifier of the user
|
|
903
905
|
* @returns Promise resolving to ChatUser or null
|
|
904
906
|
*/
|
|
905
|
-
async findUserById(
|
|
907
|
+
async findUserById(a) {
|
|
906
908
|
if (!r)
|
|
907
909
|
return null;
|
|
908
910
|
try {
|
|
909
911
|
return (await r.store.execute(
|
|
910
912
|
`SELECT * FROM ${s} WHERE _id = :id`,
|
|
911
|
-
{ id:
|
|
913
|
+
{ id: a }
|
|
912
914
|
)).items?.[0]?.value;
|
|
913
|
-
} catch (
|
|
914
|
-
return console.error("Error in findUserById:",
|
|
915
|
+
} catch (u) {
|
|
916
|
+
return console.error("Error in findUserById:", u), null;
|
|
915
917
|
}
|
|
916
918
|
},
|
|
917
919
|
/**
|
|
@@ -929,21 +931,21 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
929
931
|
*
|
|
930
932
|
* @param roomId - ID of the room to mark as read
|
|
931
933
|
*/
|
|
932
|
-
async markRoomAsRead(
|
|
934
|
+
async markRoomAsRead(a) {
|
|
933
935
|
if (!(!r || !n))
|
|
934
936
|
try {
|
|
935
|
-
let
|
|
937
|
+
let u = !1;
|
|
936
938
|
const y = await t().findUserById(n);
|
|
937
939
|
if (!y)
|
|
938
940
|
return;
|
|
939
|
-
const g = y.subscriptions || {},
|
|
940
|
-
if (g[
|
|
941
|
-
const
|
|
942
|
-
g[
|
|
941
|
+
const g = y.subscriptions || {}, w = y.mentions || {};
|
|
942
|
+
if (g[a]) {
|
|
943
|
+
const O = (/* @__PURE__ */ new Date()).toISOString();
|
|
944
|
+
g[a] = O, u = !0;
|
|
943
945
|
}
|
|
944
|
-
|
|
945
|
-
} catch (
|
|
946
|
-
console.error("Error in markRoomAsRead:",
|
|
946
|
+
w[a] && (w[a] = [], u = !0), u && await t().updateUser({ _id: n, subscriptions: g, mentions: w });
|
|
947
|
+
} catch (u) {
|
|
948
|
+
console.error("Error in markRoomAsRead:", u);
|
|
947
949
|
}
|
|
948
950
|
},
|
|
949
951
|
/**
|
|
@@ -960,120 +962,120 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
960
962
|
*
|
|
961
963
|
* @param roomId - ID of the room to toggle subscription for
|
|
962
964
|
*/
|
|
963
|
-
async toggleRoomSubscription(
|
|
965
|
+
async toggleRoomSubscription(a) {
|
|
964
966
|
if (!(!r || !n)) {
|
|
965
967
|
if (!t().canPerformAction("canSubscribeToRoom")) {
|
|
966
968
|
console.warn("Permission denied: canSubscribeToRoom is false");
|
|
967
969
|
return;
|
|
968
970
|
}
|
|
969
971
|
try {
|
|
970
|
-
const
|
|
971
|
-
if (!
|
|
972
|
+
const u = await t().findUserById(n);
|
|
973
|
+
if (!u)
|
|
972
974
|
return;
|
|
973
|
-
const y = { ...
|
|
974
|
-
if (
|
|
975
|
-
y[
|
|
975
|
+
const y = { ...u.subscriptions };
|
|
976
|
+
if (a in y && y[a] !== null)
|
|
977
|
+
y[a] = null;
|
|
976
978
|
else {
|
|
977
979
|
const g = (/* @__PURE__ */ new Date()).toISOString();
|
|
978
|
-
y[
|
|
980
|
+
y[a] = g;
|
|
979
981
|
}
|
|
980
982
|
await t().updateUser({
|
|
981
983
|
_id: n,
|
|
982
984
|
subscriptions: y
|
|
983
985
|
});
|
|
984
|
-
} catch (
|
|
985
|
-
console.error("Error in toggleRoomSubscription:",
|
|
986
|
+
} catch (u) {
|
|
987
|
+
console.error("Error in toggleRoomSubscription:", u);
|
|
986
988
|
}
|
|
987
989
|
}
|
|
988
990
|
}
|
|
989
991
|
};
|
|
990
992
|
if (r) {
|
|
991
|
-
const
|
|
993
|
+
const a = `SELECT * FROM ${s} WHERE _id = :id`, u = `SELECT * FROM ${s}`, y = { id: n };
|
|
992
994
|
o.userSubscription = r.sync.registerSubscription(
|
|
993
|
-
|
|
995
|
+
a,
|
|
994
996
|
y
|
|
995
997
|
), o.userObserver = r.store.registerObserver(
|
|
996
|
-
|
|
998
|
+
a,
|
|
997
999
|
(g) => {
|
|
998
1000
|
e({ currentUser: g.items?.[0]?.value });
|
|
999
1001
|
},
|
|
1000
1002
|
y
|
|
1001
|
-
), o.allUsersSubscription = r.sync.registerSubscription(
|
|
1002
|
-
|
|
1003
|
+
), o.allUsersSubscription = r.sync.registerSubscription(u), o.allUsersObserver = r.store.registerObserver(
|
|
1004
|
+
u,
|
|
1003
1005
|
(g) => {
|
|
1004
1006
|
e({
|
|
1005
|
-
allUsers: g.items.map((
|
|
1007
|
+
allUsers: g.items.map((w) => w.value),
|
|
1006
1008
|
usersLoading: !1
|
|
1007
1009
|
});
|
|
1008
1010
|
}
|
|
1009
1011
|
);
|
|
1010
1012
|
}
|
|
1011
1013
|
return o;
|
|
1012
|
-
},
|
|
1014
|
+
}, Se = 30, lt = 1e4, W = 282, ft = (e, t, {
|
|
1013
1015
|
ditto: r,
|
|
1014
1016
|
userId: n,
|
|
1015
1017
|
userCollectionKey: s,
|
|
1016
|
-
|
|
1017
|
-
notificationHandler:
|
|
1018
|
+
retention: o,
|
|
1019
|
+
notificationHandler: a
|
|
1018
1020
|
}) => {
|
|
1019
|
-
const
|
|
1021
|
+
const u = async (i) => {
|
|
1020
1022
|
if (!r)
|
|
1021
1023
|
throw new Error("Ditto not initialized");
|
|
1022
|
-
const
|
|
1024
|
+
const c = await r.store.execute(
|
|
1023
1025
|
`SELECT * FROM ${i.collectionId || "rooms"} WHERE _id = :id`,
|
|
1024
1026
|
{ id: i._id }
|
|
1025
1027
|
);
|
|
1026
|
-
if (
|
|
1028
|
+
if (c.items.length === 0)
|
|
1027
1029
|
throw new Error("Room not found");
|
|
1028
|
-
return
|
|
1030
|
+
return c.items[0].value;
|
|
1029
1031
|
}, y = async () => {
|
|
1030
1032
|
if (!r || !n)
|
|
1031
1033
|
throw new Error("Ditto not initialized or user not found");
|
|
1032
|
-
const
|
|
1034
|
+
const c = (await r.store.execute(
|
|
1033
1035
|
`SELECT * FROM ${s} WHERE _id = :id`,
|
|
1034
1036
|
{ id: n }
|
|
1035
1037
|
)).items?.[0]?.value;
|
|
1036
1038
|
return {
|
|
1037
1039
|
id: n,
|
|
1038
|
-
name:
|
|
1040
|
+
name: c?.name ?? n
|
|
1039
1041
|
};
|
|
1040
1042
|
}, g = () => {
|
|
1041
|
-
e((i) =>
|
|
1042
|
-
|
|
1043
|
-
(l) => l._id in
|
|
1043
|
+
e((i) => M(i, (c) => {
|
|
1044
|
+
c.messagesLoading = !c.rooms.every(
|
|
1045
|
+
(l) => l._id in c.messagesByRoom
|
|
1044
1046
|
);
|
|
1045
1047
|
}));
|
|
1046
|
-
},
|
|
1047
|
-
const
|
|
1048
|
+
}, w = (i, c, l, m) => {
|
|
1049
|
+
const f = {
|
|
1048
1050
|
message: l,
|
|
1049
|
-
user:
|
|
1051
|
+
user: m,
|
|
1050
1052
|
id: l._id
|
|
1051
|
-
},
|
|
1052
|
-
...
|
|
1053
|
-
message:
|
|
1054
|
-
user:
|
|
1053
|
+
}, d = {
|
|
1054
|
+
...f,
|
|
1055
|
+
message: f.message,
|
|
1056
|
+
user: f.user
|
|
1055
1057
|
}, b = i.findIndex((h) => h.id === l._id);
|
|
1056
|
-
if (b === -1 && !l.archivedMessage &&
|
|
1057
|
-
const _ =
|
|
1058
|
-
|
|
1058
|
+
if (b === -1 && !l.archivedMessage && O(l, c) && a && t().activeRoomId !== c._id) {
|
|
1059
|
+
const _ = m?.name || "Unknown User", T = c.name, R = c.collectionId === "dm_rooms" ? `New message from ${_}` : `#${T}: ${_}`, D = l.text ? l.text.substring(0, 30) + (l.text.length > 30 ? "..." : "") : "Sent an attachment";
|
|
1060
|
+
a(R, D);
|
|
1059
1061
|
}
|
|
1060
1062
|
if (l.archivedMessage) {
|
|
1061
1063
|
const h = i.findIndex(
|
|
1062
1064
|
(_) => _.id === l.archivedMessage
|
|
1063
1065
|
);
|
|
1064
|
-
h !== -1 ? i[h] =
|
|
1066
|
+
h !== -1 ? i[h] = d : b === -1 ? i.push(d) : i[b] = d;
|
|
1065
1067
|
} else
|
|
1066
|
-
b === -1 ? i.push(
|
|
1067
|
-
},
|
|
1068
|
-
const
|
|
1069
|
-
(
|
|
1070
|
-
), _ =
|
|
1071
|
-
return !
|
|
1072
|
-
},
|
|
1068
|
+
b === -1 ? i.push(d) : i[b] = d;
|
|
1069
|
+
}, O = (i, c) => {
|
|
1070
|
+
const m = t().currentUser, f = i.userId === m?._id, d = new Date(i.createdOn).getTime() > Date.now() - lt, b = m?.subscriptions?.[c._id], h = i.mentions?.some(
|
|
1071
|
+
(T) => T.userId === m?._id
|
|
1072
|
+
), _ = c.collectionId === "dm_rooms";
|
|
1073
|
+
return !f && d && (b || _ || h);
|
|
1074
|
+
}, N = async (i, c, l = "") => {
|
|
1073
1075
|
if (!r || !n)
|
|
1074
1076
|
throw new Error("Ditto not initialized or user not found");
|
|
1075
|
-
const
|
|
1076
|
-
_id:
|
|
1077
|
+
const m = await u(i), f = c._id || Pe(), d = {
|
|
1078
|
+
_id: f,
|
|
1077
1079
|
roomId: i._id,
|
|
1078
1080
|
userId: n,
|
|
1079
1081
|
createdOn: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -1084,76 +1086,76 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1084
1086
|
fileAttachmentToken: null,
|
|
1085
1087
|
isEdited: !1,
|
|
1086
1088
|
isDeleted: !1,
|
|
1087
|
-
...
|
|
1088
|
-
mentions:
|
|
1089
|
-
reactions:
|
|
1090
|
-
}, b = l ? `COLLECTION ${
|
|
1089
|
+
...c,
|
|
1090
|
+
mentions: c.mentions?.map((h) => ({ ...h })) || [],
|
|
1091
|
+
reactions: c.reactions?.map((h) => ({ ...h })) || []
|
|
1092
|
+
}, b = l ? `COLLECTION ${m.messagesId} ${l}` : m.messagesId;
|
|
1091
1093
|
if (await r.store.execute(
|
|
1092
1094
|
`INSERT INTO ${b} DOCUMENTS (:newDoc) ON ID CONFLICT DO UPDATE`,
|
|
1093
|
-
{ newDoc:
|
|
1094
|
-
),
|
|
1095
|
+
{ newDoc: d }
|
|
1096
|
+
), c.mentions && c.mentions.length > 0) {
|
|
1095
1097
|
const h = t().allUsers;
|
|
1096
1098
|
await Promise.all(
|
|
1097
|
-
|
|
1098
|
-
const
|
|
1099
|
-
if (!
|
|
1099
|
+
c.mentions.map((_) => {
|
|
1100
|
+
const T = h.find((R) => R._id === _.userId);
|
|
1101
|
+
if (!T)
|
|
1100
1102
|
return;
|
|
1101
|
-
const
|
|
1102
|
-
...
|
|
1103
|
-
[i._id]: [...
|
|
1103
|
+
const I = {
|
|
1104
|
+
...T.mentions || {},
|
|
1105
|
+
[i._id]: [...T.mentions?.[i._id] || [], f]
|
|
1104
1106
|
};
|
|
1105
1107
|
return r.store.execute(
|
|
1106
1108
|
"UPDATE users SET mentions = :mentions WHERE _id = :id",
|
|
1107
|
-
{ id:
|
|
1109
|
+
{ id: T._id, mentions: I }
|
|
1108
1110
|
);
|
|
1109
1111
|
})
|
|
1110
1112
|
);
|
|
1111
1113
|
}
|
|
1112
|
-
return
|
|
1113
|
-
}, H = async (i,
|
|
1114
|
+
return d;
|
|
1115
|
+
}, H = async (i, c, l) => {
|
|
1114
1116
|
if (!r)
|
|
1115
1117
|
throw new Error("Ditto not initialized");
|
|
1116
1118
|
return await r.store.execute(
|
|
1117
|
-
`UPDATE ${
|
|
1119
|
+
`UPDATE ${c.messagesId} SET isArchived = :isArchived WHERE _id = :id`,
|
|
1118
1120
|
{ id: i._id, isArchived: !0 }
|
|
1119
|
-
),
|
|
1121
|
+
), N(c, {
|
|
1120
1122
|
text: "",
|
|
1121
1123
|
createdOn: i.createdOn,
|
|
1122
1124
|
archivedMessage: i._id,
|
|
1123
1125
|
...l
|
|
1124
1126
|
});
|
|
1125
|
-
}, de = async (i,
|
|
1127
|
+
}, de = async (i, c, l, m) => {
|
|
1126
1128
|
if (!r || !n)
|
|
1127
1129
|
throw new Error("Ditto not initialized or user not found");
|
|
1128
|
-
const
|
|
1130
|
+
const f = await y(), d = {
|
|
1129
1131
|
thumbnailImageToken: null,
|
|
1130
1132
|
largeImageToken: null,
|
|
1131
1133
|
fileAttachmentToken: null
|
|
1132
1134
|
};
|
|
1133
|
-
if (
|
|
1134
|
-
const h = await dt(
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1135
|
+
if (m === "image") {
|
|
1136
|
+
const h = await dt(c), _ = await Ie(h), T = new Uint8Array(await _.arrayBuffer());
|
|
1137
|
+
d.thumbnailImageToken = await r.store.newAttachment(
|
|
1138
|
+
T,
|
|
1139
|
+
ne(f.id, f.name, "thumbnail", c)
|
|
1138
1140
|
);
|
|
1139
|
-
const
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1141
|
+
const I = await Ie(await xe(c)), R = new Uint8Array(await I.arrayBuffer());
|
|
1142
|
+
d.largeImageToken = await r.store.newAttachment(
|
|
1143
|
+
R,
|
|
1144
|
+
ne(f.id, f.name, "large", c)
|
|
1143
1145
|
);
|
|
1144
1146
|
} else {
|
|
1145
|
-
const h = new Uint8Array(await
|
|
1146
|
-
|
|
1147
|
+
const h = new Uint8Array(await c.arrayBuffer());
|
|
1148
|
+
d.fileAttachmentToken = await r.store.newAttachment(
|
|
1147
1149
|
h,
|
|
1148
|
-
|
|
1150
|
+
ne(f.id, f.name, "file", c)
|
|
1149
1151
|
);
|
|
1150
1152
|
}
|
|
1151
|
-
const b =
|
|
1152
|
-
await
|
|
1153
|
+
const b = m === "image" ? "(thumbnailImageToken ATTACHMENT, largeImageToken ATTACHMENT)" : "(fileAttachmentToken ATTACHMENT)";
|
|
1154
|
+
await N(
|
|
1153
1155
|
i,
|
|
1154
1156
|
{
|
|
1155
|
-
text: l || (
|
|
1156
|
-
...
|
|
1157
|
+
text: l || (m === "file" ? c.name : ""),
|
|
1158
|
+
...d
|
|
1157
1159
|
},
|
|
1158
1160
|
b
|
|
1159
1161
|
);
|
|
@@ -1191,50 +1193,61 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1191
1193
|
* 5. Triggers notifications for new messages from other users
|
|
1192
1194
|
*
|
|
1193
1195
|
* @param room - Room to subscribe to messages for
|
|
1194
|
-
* @param
|
|
1196
|
+
* @param retention - Optional override for message retention configuration
|
|
1195
1197
|
*/
|
|
1196
|
-
async messagesPublisher(i,
|
|
1198
|
+
async messagesPublisher(i, c) {
|
|
1197
1199
|
if (!r)
|
|
1198
1200
|
return;
|
|
1199
1201
|
const l = i._id;
|
|
1200
1202
|
if (t().messageSubscriptionsByRoom[l])
|
|
1201
1203
|
return;
|
|
1202
|
-
const
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1204
|
+
const m = c?.retainIndefinitely ?? i.retention?.retainIndefinitely ?? o?.retainIndefinitely ?? !1;
|
|
1205
|
+
let f, d;
|
|
1206
|
+
if (m)
|
|
1207
|
+
f = `SELECT * FROM COLLECTION ${i.messagesId} (thumbnailImageToken ATTACHMENT, largeImageToken ATTACHMENT, fileAttachmentToken ATTACHMENT)
|
|
1208
|
+
WHERE roomId = :roomId AND isArchived = false
|
|
1209
|
+
ORDER BY createdOn ASC`, d = {
|
|
1210
|
+
roomId: i._id
|
|
1211
|
+
};
|
|
1212
|
+
else {
|
|
1213
|
+
const b = c?.days ?? i.retention?.days ?? o?.days ?? Se, h = new Date(
|
|
1214
|
+
Date.now() - b * 24 * 60 * 60 * 1e3
|
|
1215
|
+
);
|
|
1216
|
+
f = `SELECT * FROM COLLECTION ${i.messagesId} (thumbnailImageToken ATTACHMENT, largeImageToken ATTACHMENT, fileAttachmentToken ATTACHMENT)
|
|
1217
|
+
WHERE roomId = :roomId AND createdOn >= :date AND isArchived = false
|
|
1218
|
+
ORDER BY createdOn ASC`, d = {
|
|
1219
|
+
roomId: i._id,
|
|
1220
|
+
date: h.toISOString()
|
|
1221
|
+
};
|
|
1222
|
+
}
|
|
1210
1223
|
try {
|
|
1211
|
-
const
|
|
1212
|
-
|
|
1213
|
-
async (
|
|
1214
|
-
e((
|
|
1215
|
-
if (
|
|
1216
|
-
return
|
|
1217
|
-
for (const
|
|
1218
|
-
const
|
|
1219
|
-
|
|
1224
|
+
const b = r.sync.registerSubscription(f, d), h = t().allUsers, _ = r.store.registerObserver(
|
|
1225
|
+
f,
|
|
1226
|
+
async (T) => {
|
|
1227
|
+
e((I) => M(I, (R) => {
|
|
1228
|
+
if (R.messagesByRoom[i._id] || (R.messagesByRoom[i._id] = []), T.items.length === 0)
|
|
1229
|
+
return R;
|
|
1230
|
+
for (const D of T.items) {
|
|
1231
|
+
const L = D.value, $ = R.messagesByRoom[i._id], Z = h.find((J) => J._id === L.userId);
|
|
1232
|
+
w($, i, L, Z);
|
|
1220
1233
|
}
|
|
1221
|
-
return
|
|
1234
|
+
return R;
|
|
1222
1235
|
})), g();
|
|
1223
1236
|
},
|
|
1224
|
-
|
|
1237
|
+
d
|
|
1225
1238
|
);
|
|
1226
1239
|
e({
|
|
1227
1240
|
messageSubscriptionsByRoom: {
|
|
1228
1241
|
...t().messageSubscriptionsByRoom,
|
|
1229
|
-
[l]:
|
|
1242
|
+
[l]: b
|
|
1230
1243
|
},
|
|
1231
1244
|
messageObserversByRoom: {
|
|
1232
1245
|
...t().messageObserversByRoom,
|
|
1233
|
-
[l]:
|
|
1246
|
+
[l]: _
|
|
1234
1247
|
}
|
|
1235
1248
|
});
|
|
1236
|
-
} catch (
|
|
1237
|
-
console.error("Error in messagesPublisher:",
|
|
1249
|
+
} catch (b) {
|
|
1250
|
+
console.error("Error in messagesPublisher:", b);
|
|
1238
1251
|
}
|
|
1239
1252
|
},
|
|
1240
1253
|
/**
|
|
@@ -1254,56 +1267,67 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1254
1267
|
*
|
|
1255
1268
|
* @param roomId - Room ID to subscribe to
|
|
1256
1269
|
* @param messagesId - Collection ID for messages ("messages" or "dm_messages")
|
|
1257
|
-
* @param
|
|
1270
|
+
* @param retention - Optional message retention configuration override
|
|
1258
1271
|
*/
|
|
1259
|
-
async subscribeToRoomMessages(i,
|
|
1272
|
+
async subscribeToRoomMessages(i, c, l) {
|
|
1260
1273
|
if (!r || t().messageSubscriptionsByRoom[i])
|
|
1261
1274
|
return;
|
|
1262
|
-
const
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1275
|
+
const m = l?.retainIndefinitely ?? o?.retainIndefinitely ?? !1;
|
|
1276
|
+
let f, d;
|
|
1277
|
+
if (m)
|
|
1278
|
+
f = `SELECT * FROM COLLECTION ${c} (thumbnailImageToken ATTACHMENT, largeImageToken ATTACHMENT, fileAttachmentToken ATTACHMENT)
|
|
1279
|
+
WHERE roomId = :roomId AND isArchived = false
|
|
1280
|
+
ORDER BY createdOn ASC`, d = {
|
|
1281
|
+
roomId: i
|
|
1282
|
+
};
|
|
1283
|
+
else {
|
|
1284
|
+
const b = l?.days ?? o?.days ?? Se, h = new Date(
|
|
1285
|
+
Date.now() - b * 24 * 60 * 60 * 1e3
|
|
1286
|
+
);
|
|
1287
|
+
f = `SELECT * FROM COLLECTION ${c} (thumbnailImageToken ATTACHMENT, largeImageToken ATTACHMENT, fileAttachmentToken ATTACHMENT)
|
|
1288
|
+
WHERE roomId = :roomId AND createdOn >= :date AND isArchived = false
|
|
1289
|
+
ORDER BY createdOn ASC`, d = {
|
|
1290
|
+
roomId: i,
|
|
1291
|
+
date: h.toISOString()
|
|
1292
|
+
};
|
|
1293
|
+
}
|
|
1270
1294
|
try {
|
|
1271
|
-
const
|
|
1272
|
-
|
|
1273
|
-
async (
|
|
1274
|
-
const
|
|
1295
|
+
const b = r.sync.registerSubscription(f, d), h = t().allUsers, _ = r.store.registerObserver(
|
|
1296
|
+
f,
|
|
1297
|
+
async (T) => {
|
|
1298
|
+
const I = {
|
|
1275
1299
|
_id: i,
|
|
1276
1300
|
name: "",
|
|
1277
|
-
messagesId:
|
|
1301
|
+
messagesId: c,
|
|
1278
1302
|
collectionId: "rooms",
|
|
1279
1303
|
createdBy: "",
|
|
1280
1304
|
createdOn: "",
|
|
1281
1305
|
isGenerated: !0
|
|
1282
1306
|
};
|
|
1283
|
-
e((
|
|
1284
|
-
if (
|
|
1285
|
-
return
|
|
1286
|
-
for (const
|
|
1287
|
-
const
|
|
1288
|
-
|
|
1307
|
+
e((R) => M(R, (D) => {
|
|
1308
|
+
if (D.messagesByRoom[i] || (D.messagesByRoom[i] = []), T.items.length === 0)
|
|
1309
|
+
return D;
|
|
1310
|
+
for (const L of T.items) {
|
|
1311
|
+
const $ = L.value, Z = D.messagesByRoom[i], J = h.find((ke) => ke._id === $.userId);
|
|
1312
|
+
w(Z, I, $, J);
|
|
1289
1313
|
}
|
|
1290
|
-
return
|
|
1314
|
+
return D;
|
|
1291
1315
|
})), g();
|
|
1292
1316
|
},
|
|
1293
|
-
|
|
1317
|
+
d
|
|
1294
1318
|
);
|
|
1295
1319
|
e({
|
|
1296
1320
|
messageSubscriptionsByRoom: {
|
|
1297
1321
|
...t().messageSubscriptionsByRoom,
|
|
1298
|
-
[i]:
|
|
1322
|
+
[i]: b
|
|
1299
1323
|
},
|
|
1300
1324
|
messageObserversByRoom: {
|
|
1301
1325
|
...t().messageObserversByRoom,
|
|
1302
|
-
[i]:
|
|
1326
|
+
[i]: _
|
|
1303
1327
|
}
|
|
1304
1328
|
});
|
|
1305
|
-
} catch (
|
|
1306
|
-
console.error("Error in subscribeToRoomMessages:",
|
|
1329
|
+
} catch (b) {
|
|
1330
|
+
console.error("Error in subscribeToRoomMessages:", b);
|
|
1307
1331
|
}
|
|
1308
1332
|
},
|
|
1309
1333
|
/**
|
|
@@ -1324,8 +1348,8 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1324
1348
|
* @param roomId - Room ID to unsubscribe from
|
|
1325
1349
|
*/
|
|
1326
1350
|
unsubscribeFromRoomMessages(i) {
|
|
1327
|
-
const
|
|
1328
|
-
|
|
1351
|
+
const c = t().messageSubscriptionsByRoom[i], l = t().messageObserversByRoom[i];
|
|
1352
|
+
c && !c.isCancelled && c.cancel(), l && !l.isCancelled && l.cancel(), e((m) => M(m, (f) => (delete f.messagesByRoom[i], delete f.messageSubscriptionsByRoom[i], delete f.messageObserversByRoom[i], f)));
|
|
1329
1353
|
},
|
|
1330
1354
|
/**
|
|
1331
1355
|
* Create a new text message in a room.
|
|
@@ -1343,18 +1367,18 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1343
1367
|
* @param text - Message text content
|
|
1344
1368
|
* @param mentions - Optional array of user mentions
|
|
1345
1369
|
*/
|
|
1346
|
-
async createMessage(i,
|
|
1370
|
+
async createMessage(i, c, l = []) {
|
|
1347
1371
|
if (!r || !n)
|
|
1348
1372
|
return;
|
|
1349
|
-
const
|
|
1350
|
-
l.length > 0 && !
|
|
1373
|
+
const m = t().canPerformAction("canMentionUsers"), f = l.length > 0 && !m ? [] : l;
|
|
1374
|
+
l.length > 0 && !m && console.warn("Permission denied: canMentionUsers is false");
|
|
1351
1375
|
try {
|
|
1352
|
-
await
|
|
1353
|
-
text:
|
|
1354
|
-
mentions:
|
|
1376
|
+
await N(i, {
|
|
1377
|
+
text: c,
|
|
1378
|
+
mentions: f
|
|
1355
1379
|
});
|
|
1356
|
-
} catch (
|
|
1357
|
-
console.error("Error in createMessage:",
|
|
1380
|
+
} catch (d) {
|
|
1381
|
+
console.error("Error in createMessage:", d);
|
|
1358
1382
|
}
|
|
1359
1383
|
},
|
|
1360
1384
|
/**
|
|
@@ -1372,13 +1396,13 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1372
1396
|
* @param message - Message with updated text content
|
|
1373
1397
|
* @param room - Room containing the message
|
|
1374
1398
|
*/
|
|
1375
|
-
async saveEditedTextMessage(i,
|
|
1399
|
+
async saveEditedTextMessage(i, c) {
|
|
1376
1400
|
if (!t().canPerformAction("canEditOwnMessage")) {
|
|
1377
1401
|
console.warn("Permission denied: canEditOwnMessage is false");
|
|
1378
1402
|
return;
|
|
1379
1403
|
}
|
|
1380
1404
|
try {
|
|
1381
|
-
await H(i,
|
|
1405
|
+
await H(i, c, {
|
|
1382
1406
|
text: i.text,
|
|
1383
1407
|
largeImageToken: i.largeImageToken || null,
|
|
1384
1408
|
thumbnailImageToken: i.thumbnailImageToken || null,
|
|
@@ -1408,19 +1432,19 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1408
1432
|
* @param room - Room containing the message
|
|
1409
1433
|
* @param type - Type of content: 'text', 'image', or 'file'
|
|
1410
1434
|
*/
|
|
1411
|
-
async saveDeletedMessage(i,
|
|
1435
|
+
async saveDeletedMessage(i, c, l = "text") {
|
|
1412
1436
|
if (!t().canPerformAction("canDeleteOwnMessage")) {
|
|
1413
1437
|
console.warn("Permission denied: canDeleteOwnMessage is false");
|
|
1414
1438
|
return;
|
|
1415
1439
|
}
|
|
1416
|
-
const
|
|
1440
|
+
const m = {
|
|
1417
1441
|
text: "[deleted message]",
|
|
1418
1442
|
image: "[deleted image]",
|
|
1419
1443
|
file: "[deleted file]"
|
|
1420
1444
|
}[l];
|
|
1421
1445
|
try {
|
|
1422
|
-
await H(i,
|
|
1423
|
-
text:
|
|
1446
|
+
await H(i, c, {
|
|
1447
|
+
text: m,
|
|
1424
1448
|
createdOn: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1425
1449
|
largeImageToken: null,
|
|
1426
1450
|
thumbnailImageToken: null,
|
|
@@ -1429,8 +1453,8 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1429
1453
|
isDeleted: !0,
|
|
1430
1454
|
mentions: []
|
|
1431
1455
|
});
|
|
1432
|
-
} catch (
|
|
1433
|
-
console.error("Error in saveDeletedMessage:",
|
|
1456
|
+
} catch (f) {
|
|
1457
|
+
console.error("Error in saveDeletedMessage:", f);
|
|
1434
1458
|
}
|
|
1435
1459
|
},
|
|
1436
1460
|
/**
|
|
@@ -1448,11 +1472,11 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1448
1472
|
* @param imageFile - Image file to attach
|
|
1449
1473
|
* @param text - Optional caption text
|
|
1450
1474
|
*/
|
|
1451
|
-
async createImageMessage(i,
|
|
1475
|
+
async createImageMessage(i, c, l) {
|
|
1452
1476
|
try {
|
|
1453
|
-
await de(i,
|
|
1454
|
-
} catch (
|
|
1455
|
-
console.error("Error in createImageMessage:",
|
|
1477
|
+
await de(i, c, l, "image");
|
|
1478
|
+
} catch (m) {
|
|
1479
|
+
console.error("Error in createImageMessage:", m);
|
|
1456
1480
|
}
|
|
1457
1481
|
},
|
|
1458
1482
|
/**
|
|
@@ -1470,11 +1494,11 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1470
1494
|
* @param file - File to attach
|
|
1471
1495
|
* @param text - Optional text (defaults to filename)
|
|
1472
1496
|
*/
|
|
1473
|
-
async createFileMessage(i,
|
|
1497
|
+
async createFileMessage(i, c, l) {
|
|
1474
1498
|
try {
|
|
1475
|
-
await de(i,
|
|
1476
|
-
} catch (
|
|
1477
|
-
console.error("Error in createFileMessage:",
|
|
1499
|
+
await de(i, c, l, "file");
|
|
1500
|
+
} catch (m) {
|
|
1501
|
+
console.error("Error in createFileMessage:", m);
|
|
1478
1502
|
}
|
|
1479
1503
|
},
|
|
1480
1504
|
/**
|
|
@@ -1495,7 +1519,7 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1495
1519
|
* @param onComplete - Callback receiving AttachmentResult
|
|
1496
1520
|
* @returns The fetcher object from the SDK for cleanup
|
|
1497
1521
|
*/
|
|
1498
|
-
fetchAttachment(i,
|
|
1522
|
+
fetchAttachment(i, c, l) {
|
|
1499
1523
|
if (!r) {
|
|
1500
1524
|
l({
|
|
1501
1525
|
success: !1,
|
|
@@ -1511,41 +1535,40 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1511
1535
|
return;
|
|
1512
1536
|
}
|
|
1513
1537
|
try {
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
switch (m.type) {
|
|
1538
|
+
return r.store.fetchAttachment(i, async (f) => {
|
|
1539
|
+
switch (f.type) {
|
|
1517
1540
|
case "Progress": {
|
|
1518
|
-
const
|
|
1519
|
-
|
|
1541
|
+
const d = Number(f.downloadedBytes) / (Number(f.totalBytes) || 1);
|
|
1542
|
+
c(d);
|
|
1520
1543
|
break;
|
|
1521
1544
|
}
|
|
1522
1545
|
case "Completed":
|
|
1523
1546
|
try {
|
|
1524
|
-
const
|
|
1547
|
+
const d = f.attachment.getData(), b = d instanceof Promise ? await d : d;
|
|
1525
1548
|
l({
|
|
1526
1549
|
success: !0,
|
|
1527
|
-
data:
|
|
1528
|
-
metadata:
|
|
1550
|
+
data: b,
|
|
1551
|
+
metadata: f.attachment.metadata || {}
|
|
1529
1552
|
});
|
|
1530
|
-
} catch (
|
|
1553
|
+
} catch (d) {
|
|
1531
1554
|
l({
|
|
1532
1555
|
success: !1,
|
|
1533
|
-
error:
|
|
1556
|
+
error: d instanceof Error ? d : new Error("Unknown error getting attachment data")
|
|
1534
1557
|
});
|
|
1535
1558
|
}
|
|
1536
1559
|
break;
|
|
1537
1560
|
case "Deleted":
|
|
1538
|
-
|
|
1561
|
+
l({
|
|
1539
1562
|
success: !1,
|
|
1540
1563
|
error: new Error("Attachment was deleted")
|
|
1541
1564
|
});
|
|
1542
1565
|
break;
|
|
1543
1566
|
}
|
|
1544
1567
|
});
|
|
1545
|
-
} catch (
|
|
1568
|
+
} catch (m) {
|
|
1546
1569
|
return l({
|
|
1547
1570
|
success: !1,
|
|
1548
|
-
error:
|
|
1571
|
+
error: m instanceof Error ? m : new Error("Failed to fetch attachment")
|
|
1549
1572
|
}), null;
|
|
1550
1573
|
}
|
|
1551
1574
|
},
|
|
@@ -1575,27 +1598,27 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1575
1598
|
* @param room - The room containing the message
|
|
1576
1599
|
* @param reactions - The new array of reactions to apply
|
|
1577
1600
|
*/
|
|
1578
|
-
async updateMessageReactions(i,
|
|
1601
|
+
async updateMessageReactions(i, c, l) {
|
|
1579
1602
|
if (!r || !n)
|
|
1580
1603
|
return;
|
|
1581
|
-
const
|
|
1582
|
-
if (
|
|
1604
|
+
const m = c._id, f = t().messagesByRoom[m] || [], d = f.findIndex((_) => _.id === i._id);
|
|
1605
|
+
if (d === -1)
|
|
1583
1606
|
throw new Error("Message not found");
|
|
1584
|
-
const b = d
|
|
1607
|
+
const b = f[d].message, h = b.reactions || [];
|
|
1585
1608
|
e(
|
|
1586
|
-
(_) =>
|
|
1587
|
-
|
|
1609
|
+
(_) => M(_, (T) => {
|
|
1610
|
+
T.messagesByRoom[m][d].message.reactions = l;
|
|
1588
1611
|
})
|
|
1589
1612
|
), setTimeout(async () => {
|
|
1590
1613
|
try {
|
|
1591
1614
|
await r.store.execute(
|
|
1592
|
-
`UPDATE ${
|
|
1615
|
+
`UPDATE ${c.messagesId} SET reactions = :reactions WHERE _id = :id`,
|
|
1593
1616
|
{ id: b._id, reactions: l }
|
|
1594
1617
|
);
|
|
1595
1618
|
} catch (_) {
|
|
1596
1619
|
console.error("Error updating reactions, rolling back:", _), e(
|
|
1597
|
-
(
|
|
1598
|
-
|
|
1620
|
+
(T) => M(T, (I) => {
|
|
1621
|
+
I.messagesByRoom[m][d].message.reactions = h;
|
|
1599
1622
|
})
|
|
1600
1623
|
);
|
|
1601
1624
|
}
|
|
@@ -1617,18 +1640,18 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1617
1640
|
* @param room - Room containing the message
|
|
1618
1641
|
* @param reaction - Reaction object with emoji and userId
|
|
1619
1642
|
*/
|
|
1620
|
-
async addReactionToMessage(i,
|
|
1643
|
+
async addReactionToMessage(i, c, l) {
|
|
1621
1644
|
if (!r || !n)
|
|
1622
1645
|
return;
|
|
1623
1646
|
if (!t().canPerformAction("canAddReaction")) {
|
|
1624
1647
|
console.warn("Permission denied: canAddReaction is false");
|
|
1625
1648
|
return;
|
|
1626
1649
|
}
|
|
1627
|
-
const
|
|
1628
|
-
if (
|
|
1650
|
+
const m = t().messagesByRoom[c._id], f = m.findIndex((h) => h.id === i._id);
|
|
1651
|
+
if (f === -1)
|
|
1629
1652
|
throw new Error("Message not found");
|
|
1630
|
-
const
|
|
1631
|
-
await t().updateMessageReactions(
|
|
1653
|
+
const d = m[f].message, b = [...d.reactions || [], l];
|
|
1654
|
+
await t().updateMessageReactions(d, c, b);
|
|
1632
1655
|
},
|
|
1633
1656
|
/**
|
|
1634
1657
|
* Remove a reaction from a message.
|
|
@@ -1646,31 +1669,31 @@ const lt = (e, t, { ditto: r, userId: n, userCollectionKey: s }) => {
|
|
|
1646
1669
|
* @param room - Room containing the message
|
|
1647
1670
|
* @param reaction - Reaction to remove (matched by emoji and userId)
|
|
1648
1671
|
*/
|
|
1649
|
-
async removeReactionFromMessage(i,
|
|
1672
|
+
async removeReactionFromMessage(i, c, l) {
|
|
1650
1673
|
if (!r || !n)
|
|
1651
1674
|
return;
|
|
1652
1675
|
if (!t().canPerformAction("canRemoveOwnReaction")) {
|
|
1653
1676
|
console.warn("Permission denied: canRemoveOwnReaction is false");
|
|
1654
1677
|
return;
|
|
1655
1678
|
}
|
|
1656
|
-
const
|
|
1657
|
-
if (
|
|
1679
|
+
const m = t().messagesByRoom[c._id], f = m.findIndex((h) => h.id === i._id);
|
|
1680
|
+
if (f === -1)
|
|
1658
1681
|
throw new Error("Message not found");
|
|
1659
|
-
const
|
|
1682
|
+
const d = m[f].message, b = (d.reactions || []).filter(
|
|
1660
1683
|
(h) => !(h.emoji === l.emoji && h.userId === l.userId)
|
|
1661
1684
|
);
|
|
1662
|
-
await t().updateMessageReactions(
|
|
1685
|
+
await t().updateMessageReactions(d, c, b);
|
|
1663
1686
|
}
|
|
1664
1687
|
};
|
|
1665
1688
|
};
|
|
1666
1689
|
async function dt(e) {
|
|
1667
|
-
const t = await
|
|
1690
|
+
const t = await xe(e), r = document.createElement("canvas"), n = r.getContext("2d");
|
|
1668
1691
|
if (!n)
|
|
1669
1692
|
throw new Error("Failed to get 2D context");
|
|
1670
1693
|
let { width: s, height: o } = t;
|
|
1671
|
-
return s > o ? (o =
|
|
1694
|
+
return s > o ? (o = W / s * o, s = W) : (s = W / o * s, o = W), r.width = s, r.height = o, n.drawImage(t, 0, 0, s, o), r;
|
|
1672
1695
|
}
|
|
1673
|
-
function
|
|
1696
|
+
function xe(e) {
|
|
1674
1697
|
return new Promise((t, r) => {
|
|
1675
1698
|
const n = new FileReader();
|
|
1676
1699
|
n.onload = (s) => {
|
|
@@ -1679,7 +1702,7 @@ function ke(e) {
|
|
|
1679
1702
|
}, n.onerror = r, n.readAsDataURL(e);
|
|
1680
1703
|
});
|
|
1681
1704
|
}
|
|
1682
|
-
async function
|
|
1705
|
+
async function Ie(e) {
|
|
1683
1706
|
return new Promise((t, r) => {
|
|
1684
1707
|
const n = (s) => {
|
|
1685
1708
|
s.toBlob(
|
|
@@ -1702,65 +1725,65 @@ async function De(e) {
|
|
|
1702
1725
|
}
|
|
1703
1726
|
});
|
|
1704
1727
|
}
|
|
1705
|
-
function
|
|
1706
|
-
const s = (/* @__PURE__ */ new Date()).toISOString(), o = t.replace(/\s/g, "-"),
|
|
1728
|
+
function ne(e, t, r, n) {
|
|
1729
|
+
const s = (/* @__PURE__ */ new Date()).toISOString(), o = t.replace(/\s/g, "-"), a = s.replace(/:/g, "-"), u = r === "file" ? n.name.split(".").pop() || "bin" : "jpg";
|
|
1707
1730
|
return {
|
|
1708
|
-
filename: `${o}_${r}_${
|
|
1731
|
+
filename: `${o}_${r}_${a}.${u}`,
|
|
1709
1732
|
userId: e,
|
|
1710
1733
|
username: t,
|
|
1711
|
-
fileformat: `.${
|
|
1734
|
+
fileformat: `.${u}`,
|
|
1712
1735
|
filesize: n.size.toString(),
|
|
1713
1736
|
timestamp: s,
|
|
1714
1737
|
originalName: n.name
|
|
1715
1738
|
};
|
|
1716
1739
|
}
|
|
1717
|
-
function
|
|
1740
|
+
function A(e) {
|
|
1718
1741
|
e && !e.isCancelled && e.cancel();
|
|
1719
1742
|
}
|
|
1720
|
-
function
|
|
1721
|
-
const t =
|
|
1743
|
+
function gt(e) {
|
|
1744
|
+
const t = Be(() => (globalThis.__DITTO_CHAT_STORE__ || (globalThis.__DITTO_CHAT_STORE__ = st()(
|
|
1722
1745
|
(r, n) => ({
|
|
1723
|
-
...
|
|
1724
|
-
...
|
|
1725
|
-
...
|
|
1726
|
-
...
|
|
1746
|
+
...nt(r, n, e),
|
|
1747
|
+
...ut(r, n, e),
|
|
1748
|
+
...ft(r, n, e),
|
|
1749
|
+
...ze(r, n, e),
|
|
1727
1750
|
activeRoomId: null,
|
|
1728
1751
|
setActiveRoomId: (s) => r({ activeRoomId: s }),
|
|
1729
1752
|
chatLogout: () => {
|
|
1730
1753
|
const s = n();
|
|
1731
|
-
|
|
1732
|
-
(o) =>
|
|
1754
|
+
A(s.roomsSubscription), A(s.roomsObserver), A(s.dmRoomsSubscription), A(s.dmRoomsObserver), Object.values(s.messageSubscriptionsByRoom || {}).map(
|
|
1755
|
+
(o) => A(o)
|
|
1733
1756
|
), Object.values(s.messageObserversByRoom || {}).map(
|
|
1734
|
-
(o) =>
|
|
1735
|
-
),
|
|
1757
|
+
(o) => A(o)
|
|
1758
|
+
), A(s.userObserver), A(s.userSubscription), A(s.allUsersObserver), A(s.allUsersSubscription);
|
|
1736
1759
|
}
|
|
1737
1760
|
})
|
|
1738
1761
|
)), globalThis.__DITTO_CHAT_STORE__), [e]);
|
|
1739
|
-
return
|
|
1762
|
+
return Ne(t);
|
|
1740
1763
|
}
|
|
1741
|
-
function
|
|
1764
|
+
function ht(e) {
|
|
1742
1765
|
if (!globalThis.__DITTO_CHAT_STORE__)
|
|
1743
1766
|
throw new Error(
|
|
1744
1767
|
"chatStore must be initialized before useDittoChatStore. use useDittoChat for initialization"
|
|
1745
1768
|
);
|
|
1746
|
-
const t =
|
|
1769
|
+
const t = ct(
|
|
1747
1770
|
e || ((n) => n)
|
|
1748
1771
|
);
|
|
1749
|
-
return
|
|
1772
|
+
return Ne(globalThis.__DITTO_CHAT_STORE__, t);
|
|
1750
1773
|
}
|
|
1751
|
-
function
|
|
1774
|
+
function bt() {
|
|
1752
1775
|
return globalThis.__DITTO_CHAT_STORE__;
|
|
1753
1776
|
}
|
|
1754
|
-
function
|
|
1777
|
+
function _t() {
|
|
1755
1778
|
globalThis.__DITTO_CHAT_STORE__ = void 0;
|
|
1756
1779
|
}
|
|
1757
1780
|
export {
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1781
|
+
Fe as DEFAULT_PERMISSIONS,
|
|
1782
|
+
A as cancelSubscriptionOrObserver,
|
|
1783
|
+
ze as createRBACSlice,
|
|
1784
|
+
nt as createRoomSlice,
|
|
1785
|
+
bt as getChatStore,
|
|
1786
|
+
_t as resetChatStore,
|
|
1787
|
+
gt as useDittoChat,
|
|
1788
|
+
ht as useDittoChatStore
|
|
1766
1789
|
};
|