OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli commits / 4b0166a

WIP: keet audit — DEOBFUSCATED notes + 4.14.4-pretty + keet-audit.cjs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4b0166afd908429206ea84b2cbfbc35cdc4ae837
by plankatron <fleeky@gmail.com> · 2026-06-04T02:22:15.000Z

Changed files (153) +89063 -0

DEOBFUSCATED.md +12 -0
……@@ -1,5 +1,17 @@
11# keet-core-hyperdb v1.22.0 — Deobfuscated Reference
22
3> **⚠ Superseded by Keet 4.x architecture (2026-05-11).** `keet-core-hyperdb`
4> was retired upstream and split into `@holepunchto/keet-core` 4.14.4 +
5> `keet-core-api` 2.14.2 + `keet-core-schemas` 2.17.0 (plus 21 sibling
6> private packages). The new ecosystem is captured at
7> `hyper-fleeky/keet-audit-4.x/` — see `MANIFEST.md`, `STRUCTURE.md`,
8> `DIFF-RAW.md`. The new files are merely minified (no obfuscator.io
9> string-array layer), so prettier alone makes them readable —
10> `tools/keet-audit.cjs` automates the freeze + prettify + scaffold +
11> diff pipeline. Use this 1.22.0 document only for historical reference
12> or to read the legacy contract handlers that the new code preserves
13> verbatim in `legacy-keet-core-schemas`.
14
315**Package**: `@holepunchto/keet-core-hyperdb`
416**Version**: 1.22.0
517**Files**: 161 JS files deobfuscated (120 obfuscated + 11 clean + 30 duplicates in lib/contract)
keet-core-4.14.4-pretty/env.json +42 -0
……@@ -0,0 +1,42 @@
1{
2 "nightly": {
3 "bundles": {
4 "key": "yssst9xdnypg7dbbkc3a4hrusnyb8n4n7e3a9yw469fuuf4i4tso",
5 "length": 206
6 },
7 "config": {
8 "key": "5hdn7otebmiachsu4u5d86rp8ejhhmrrm6sstg198fun6rmf41qo",
9 "length": 13
10 }
11 },
12 "internal": {
13 "bundles": {
14 "key": "yssst9xdnypg7dbbkc3a4hrusnyb8n4n7e3a9yw469fuuf4i4tso",
15 "length": 206
16 },
17 "config": {
18 "key": "5hdn7otebmiachsu4u5d86rp8ejhhmrrm6sstg198fun6rmf41qo",
19 "length": 13
20 }
21 },
22 "production": {
23 "bundles": {
24 "key": "eu5e6dieybhbshpzo6nxy8pwycb341qdywkbwqmtjmww174bfnjo",
25 "length": 206
26 },
27 "config": {
28 "key": "w94a4mrokgp4hu757rhipc3isrxstiyupnpabat357hh6jutwrro",
29 "length": 10
30 }
31 },
32 "prerelease": {
33 "bundles": {
34 "key": "yssst9xdnypg7dbbkc3a4hrusnyb8n4n7e3a9yw469fuuf4i4tso",
35 "length": 206
36 },
37 "config": {
38 "key": "3i34itm8zqhweq4oxjw3ebg1kyhywqn9359shn9sr1twmm7jdpuo",
39 "length": 10
40 }
41 }
42}
keet-core-4.14.4-pretty/index.js +2432 -0
……@@ -0,0 +1,2432 @@
1const e = require("keet-identity-key"),
2 t = require("hypercore-storage"),
3 i = require("hypercore-id-encoding"),
4 s = require("ready-resource"),
5 r = require("ready-guard"),
6 o = require("hyperswarm"),
7 a = require("hyperdht"),
8 n = require("corestore"),
9 l = require("hypercore"),
10 c = require("hyperblobs"),
11 h = require("autobase"),
12 d = require("scope-lock"),
13 y = require("rache"),
14 u = require("protomux-wakeup"),
15 p = require("promaphore"),
16 m = require("safety-catch"),
17 g = require("task-backoff"),
18 b = require("hypercore-crypto"),
19 w = require("compact-encoding"),
20 f = require("z32"),
21 v = require("b4a"),
22 k = require("fs"),
23 P = require("path"),
24 _ = require("blind-peering"),
25 K = require("multi-profile-store"),
26 T = require("hyperconf")
27;(l.enable(l.SMALL_WANTS), l.setRecoveryPeers && l.setRecoveryPeers([]))
28const R = require("@holepunchto/keet-push"),
29 L = require("@holepunchto/keet-unread-anchors"),
30 { generateMnemonic: E } = require("bip39-mnemonic"),
31 { HyperDiscoveryClient: C } = require("@holepunchto/hyperdiscovery"),
32 B = require("@holepunchto/keet-indexing"),
33 x = require("./schema/versions"),
34 I = require("./lib/api/v1"),
35 D = require("./lib/api/v2"),
36 S = require("./lib/core/crypto"),
37 A = require("./lib/core/local"),
38 q = require("./lib/core/files"),
39 O = require("./lib/core/tasks"),
40 M = require("./lib/core/sync"),
41 V = require("./lib/core/migrations/3/apply"),
42 { SwarmWorker: U } = require("./lib/core/swarm"),
43 {
44 getWriterKey: N,
45 getInvitationId: F,
46 createInvitation: W,
47 generateRoomCapabilities: $,
48 generateIdentityPairingName: j,
49 generateRoomPairingName: G,
50 } = require("./lib/core/invitations"),
51 { getMemberForDeviceKey: H } = require("./lib/core/contract/query"),
52 { restoreAvatar: J } = require("./lib/core/contract/avatars"),
53 { RoomStatus: Y } = require("./lib/core/contract/identity/private"),
54 { DEBUG_FLAGS: z, DHT_SETTINGS: X } = require("./lib/core/debug/debugging"),
55 { KeetContract: Q } = require("./lib/core/contract"),
56 { KeetContractError: Z } = require("./lib/core/contract/errors.js"),
57 ee = require("./lib/core/log"),
58 {
59 contract: {
60 hyperdispatch: { decode: te, DispatchError: ie },
61 hyperschema: { getEnum: se, getEncoding: re, encode: oe, decode: ae },
62 },
63 local: {
64 hyperschema: { getEnum: ne },
65 },
66 config: { hyperconf: le },
67 } = require("./schema/spec"),
68 ce = re("@keet-private-id/profile-discovery-record"),
69 he = se("@keet/build-type"),
70 de = require("./lib/core/users"),
71 ye = require("protomux-rpc-client"),
72 { KeetErrorManager: ue, KeetErrorV2: pe } = require("./lib/errors"),
73 { Version: me } = require("bare-semver"),
74 { roomMigrationsStats: ge } = require("./lib/core/contract/stats/local"),
75 be = require("./lib/bundle"),
76 we = ne("@local/keet-state"),
77 fe = 2592e6,
78 ve = "keet-swarm-keypair",
79 ke = "keet-core",
80 Pe = "keet-unreads",
81 _e = "keet-bundles",
82 Ke = 1e4,
83 Te = 3e3,
84 Re = 4,
85 Le = 5e3,
86 Ee = v.alloc(32),
87 Ce = 1,
88 Be = 500,
89 xe = 9,
90 Ie = 1728e5,
91 De = 5,
92 Se = 10,
93 Ae = 1711547109544,
94 qe = require("./lib/env"),
95 Oe = 64,
96 Me = 3,
97 Ve = 30,
98 Ue = 4
99class Ne {
100 constructor(e, t) {
101 ;((this.keet = e),
102 (this.roomId = t),
103 (this.batch = null),
104 (this.length = 0),
105 (this.timestamp = 0),
106 (this.pushLength = 0))
107 }
108 get key() {
109 return this.room.base.local.key
110 }
111 _open() {
112 ;((this.room = this.keet.internalOpenExistingRoom(this.roomId)),
113 (this.batch = this.room.base.batch()),
114 (this.timestamp = Date.now()))
115 }
116 _noop() {
117 return (this.close(), this.length)
118 }
119 async dispatch(e, t, { dryRun: i = !0 } = {}) {
120 ;(this.room || this._open(), this.room.opened || (await this.room.ready()))
121 const s = await this.room._internalEncodeOperation(e, t, {
122 view: this.room.view,
123 timestamp: this.timestamp,
124 })
125 return i && !(await this.keet.internalDryRun(this.room, this.room.view, [s]))
126 ? this._noop()
127 : ((this.length = await this.append(s)),
128 !this.pushLength && Ge(e) && (this.pushLength = this.length),
129 this.length)
130 }
131 async append(e) {
132 return this.batch.append(e)
133 }
134 async flush() {
135 try {
136 return (
137 await this.batch.flush(),
138 await this.room._postAppend({
139 encoded: this.batch.blocks,
140 pushLength: this.pushLength,
141 timestamp: this.timestamp,
142 }),
143 { key: this.key, length: this.length }
144 )
145 } finally {
146 this.close()
147 }
148 }
149 close() {
150 ;(this.room && this.keet.internalReleaseRoom(this.room),
151 this.batch && this.batch.close(),
152 (this.batch = null),
153 (this.length = 0),
154 (this.shouldPush = !1))
155 }
156}
157class Fe extends s {
158 constructor(e, t, s, r, o) {
159 ;(super(),
160 (this.keet = e),
161 (this.id = t),
162 (this.key = s),
163 (this.base = o),
164 (this.externalBlobs = null),
165 (this.discoveryKey = r),
166 (this.discoveryId = i.encode(this.discoveryKey)),
167 (this.view = this.base.view),
168 (this.db = this.view.db),
169 (this.core = this.view.core),
170 (this.blobs = this.view.blobs),
171 (this.router = this.view.router),
172 (this.push = null),
173 this.keet.push && (this.push = this.keet.push.room(this.key, this.discoveryKey)),
174 (this.refs = 0),
175 (this.idleTicks = 0),
176 (this._pushLock = new d({ debounce: !0 })),
177 this.ready().catch(Je))
178 }
179 get deviceId() {
180 return i.encode(this.deviceKey)
181 }
182 get deviceKey() {
183 return this.base.local.key
184 }
185 get encryptionKey() {
186 return this.base.encryptionKey
187 }
188 async getStats() {
189 const [e, t, s] = await Promise.all([
190 this.keet.local.get("@local/rooms", { roomKey: this.key }),
191 this.keet.local.get("@local/room-preferences", { roomKey: this.key }),
192 this.keet.local.get("@local/writers-by-room-key", { roomKey: this.key }),
193 ])
194 return {
195 view: {
196 peers: this.view.core.peers.length,
197 length: this.view.core.length,
198 signedLength: this.view.core.signedLength,
199 byteLength: this.view.core.byteLength,
200 },
201 system: {
202 peers: this.base.core.peers.length,
203 length: this.base.length,
204 signedLength: this.base.signedLength,
205 indexedLength: this.base.indexedLength,
206 },
207 base: {
208 opened: this.base.opened,
209 closed: this.base.closed,
210 opening: !!this.base.opening,
211 closing: !!this.base.closing,
212 writable: this.base.writable,
213 indexing: this.base.ackable,
214 interrupted: !!this.base.interrupted,
215 appending: !!this.base.appending,
216 flushing: !!this.base.flushing,
217 advancing: !!this.base._advancing,
218 },
219 writer: {
220 key: s.key ? i.encode(s.key) : null,
221 roomKey: s?.roomKey ? i.encode(s.roomKey) : null,
222 },
223 status: e?.status,
224 preferences: t?.status,
225 }
226 }
227 async _safePushNotify(e) {
228 if (
229 (this._pushLengths || (this._pushLengths = []),
230 this._pushLengths.push(e),
231 !(await this._pushLock.lock()))
232 )
233 return
234 if (this.closing) return
235 const t = this._pushLengths
236 this._pushLengths = null
237 try {
238 await this.push.send(this.base.local, t)
239 } catch (e) {
240 this.keet.onerror(e, { roomKey: this.key })
241 }
242 this._pushLock.unlock()
243 }
244 async _safeBumpDiscovery(e) {
245 try {
246 const t = await this.keet.local.get("@local/rooms", { roomKey: this.key })
247 this.keet.discovery.announce(t.capabilities.discoveryKeyPair, { bump: e })
248 } catch (e) {
249 this.keet.onerror(e, { roomKey: this.key })
250 }
251 }
252 async _open() {
253 ;(await this.base.ready(),
254 this.internalEnsureMirroring(),
255 this.base.on("writer", async (e) => {
256 try {
257 if (await this.keet.local.get("@local/devices", { device: { key: e.core.key } })) return
258 const t = await this.db.get("@keet/devices", { key: e.core.key })
259 t && (await this.db.get("@keet/members", { key: t.memberKey }))
260 } catch (e) {
261 m(e)
262 }
263 }),
264 this.base.local.on("remote-contiguous-length", this._handleSentLengthChanged.bind(this)),
265 this.base.on("rotate-local-writer", () => {
266 this.base.local.on("remote-contiguous-length", this._handleSentLengthChanged.bind(this))
267 }),
268 this.db.get("@keet/room-config").then((e) => {
269 this.keet.logger.debug("opened id: " + this.id + " title: " + e?.title)
270 }, m),
271 (this.externalBlobs = new c(
272 this.keet.store.get({
273 name: this.id + "/blobs",
274 encryptionKey: this.encryptionKey,
275 encrypted: !0,
276 exclusive: !0,
277 active: !1,
278 }),
279 )),
280 await this.externalBlobs.ready(),
281 await this._ensureMetadata(),
282 this.internalEnsureProfileUpdated(),
283 this.internalEnsureUpgraded(),
284 this.internalEnsureRepaired())
285 }
286 async internalCloseBase() {
287 ;(this.keet.internalTime(`internal-close-base-${this.id}`),
288 await this.base.close(),
289 this.keet.internalTimeEnd(`internal-close-base-${this.id}`))
290 }
291 async internalCloseExternalBlobs() {
292 ;(this.keet.internalTime(`internal-close-blobs-${this.id}`),
293 await this.externalBlobs.close(),
294 this.keet.internalTimeEnd(`internal-close-blobs-${this.id}`))
295 }
296 async internalPushDestroy() {
297 this.push &&
298 (this.keet.internalTime(`internal-close-push-${this.id}`),
299 await this.push.destroy(),
300 this.keet.internalTimeEnd(`internal-close-push-${this.id}`))
301 }
302 _close() {
303 return Promise.all([
304 this.internalCloseBase(),
305 this.internalCloseExternalBlobs(),
306 this.internalPushDestroy(),
307 ])
308 }
309 _handleSentLengthChanged() {
310 if (!this.base.writable) return
311 const { length: e, remoteContiguousLength: t } = this.base.local
312 e === t && this.keet.emit("room-sent-message", this.base.id)
313 }
314 async _ensureMetadata() {
315 const e = await this.keet.internalEnterLocalTransaction()
316 try {
317 const [t, i] = await Promise.all([
318 e.get("@local/room-metadata", { roomKey: this.key }),
319 e.get("@local/rooms", { roomKey: this.key }),
320 ])
321 if (t) return
322 const s = i ? 0 : 1
323 ;(await e.insert("@local/room-metadata", { roomKey: this.key, repairs: s }), await e.flush())
324 } finally {
325 await this.keet.internalExitLocalTransaction()
326 }
327 }
328 async internalEnsureMirroring() {
329 this.refs++
330 try {
331 const e = this.base.wakeupCapability && this.base.wakeupCapability.key,
332 t = await this.keet._getMirrorKeys(this.key)
333 if (this.closing) return
334 this.keet.blindPeering.addAutobaseBackground(this.base, { target: e, keys: t })
335 } finally {
336 this.refs--
337 }
338 }
339 async internalEnsureUpgraded({ opening: e = !1 } = {}) {
340 this.refs++
341 try {
342 e || this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
343 const [t, i] = await Promise.all([
344 this.db.get("@keet/system-digest"),
345 H(this.db, this.deviceKey),
346 ])
347 if (!i?.status.isModerator || t?.abi.version >= this.keet.abi.autoupgrade) return
348 await this.keet.internalDispatchUpgrade(this.id, this.keet.abi.autoupgrade)
349 } catch (e) {
350 this.keet.onerror(e, { roomKey: this.key })
351 } finally {
352 this.refs--
353 }
354 }
355 async internalEnsureProfileUpdated() {
356 this.refs++
357 try {
358 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
359 const [e, t] = await Promise.all([
360 this.keet.local.get("@local/identity"),
361 H(this.db, this.deviceKey),
362 ])
363 if (this.closing || !e || !t || v.equals(this.key, e.privateProfileKey)) return
364 const i = await this.keet.local.get("@local/rooms", { roomKey: e.privateProfileKey })
365 if (this.closing) return
366 if (t.profile.timestamp >= i.selfMember.profile.timestamp) return
367 const s = {
368 profile: i.selfMember.profile,
369 attestation: { memberKey: i.selfMember.key, proof: i.selfMember.proofs.profileAttestation },
370 }
371 await this.dispatch("@keet/update-member", { member: s })
372 } catch (e) {
373 this.keet.onerror(e, { roomKey: this.key })
374 } finally {
375 this.refs--
376 }
377 }
378 async internalEnsureRepaired() {
379 this.refs++
380 try {
381 if (
382 (this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
383 this === this.keet.privateProfile)
384 )
385 return
386 const e = await this.keet.local.get("@local/room-metadata", { roomKey: this.key })
387 if (this.closing || e.repairs >= 1) return
388 if (this.base.linearizer.size > Be) return
389 const t = await this.db.get("@keet-private-id/identity")
390 if (this.closing || t) return
391 if (((e.repairs = 1), await this.base.repair(), this.closing)) return
392 const i = await this.keet.internalEnterLocalTransaction()
393 try {
394 ;(await i.insert("@local/room-metadata", e), await i.flush())
395 } finally {
396 await this.keet.internalExitLocalTransaction()
397 }
398 } finally {
399 this.refs--
400 }
401 }
402 async _internalEncodeOperation(e, t, { view: i = this.view, timestamp: s = Date.now() } = {}) {
403 const r = await i.db.get("@keet/system-digest")
404 if (!this.keet.isValidBuildType(r)) throw pe.INVALID_BUILD_TYPE()
405 return (
406 await this.keet.contractBundles.loadBundle(r ? r.abi.version : this.keet.abi.autoupgrade)
407 ).encodeOperation(e, { header: { timestamp: s }, ...t })
408 }
409 async _encodeBatch(e, t = {}) {
410 const i = Array.isArray(e) ? e : [e],
411 s = Date.now(),
412 r = []
413 let o = !1
414 for (const { type: e, op: a } of i)
415 (r.push(this._internalEncodeOperation(e, a, { ...t, timestamp: s })), Ge(e) && (o = !0))
416 return { encoded: await Promise.all(r), timestamp: s, shouldPush: o }
417 }
418 async _postAppend({ encoded: e = [], pushLength: t = 0, timestamp: i = Date.now() }) {
419 ;((this.keet.stats.ops += e.length),
420 this.push && t > 0 && this._safePushNotify(t),
421 this.keet.discovery && this._safeBumpDiscovery(i),
422 this.db.update())
423 }
424 async dispatchBatch(e, { view: t = this.view, dryRun: i = !0, optimistic: s = !1 } = {}) {
425 this.opened || (await this.ready())
426 const { encoded: r, timestamp: o, shouldPush: a } = await this._encodeBatch(e, { view: t })
427 if (i && !(await this.keet.internalDryRun(this, t, r))) return null
428 const n = await this.base.append(r, { optimistic: s }),
429 l = a ? n : 0
430 return (
431 await this._postAppend({ encoded: r, pushLength: l, timestamp: o }),
432 { key: this.base.local.key, length: n }
433 )
434 }
435 dispatch(e, t, i) {
436 return this.dispatchBatch([{ type: e, op: t }], i)
437 }
438}
439module.exports = class extends s {
440 constructor(e, i = {}) {
441 if (
442 (super(),
443 (this.dir = e),
444 (this.opts = i),
445 (this.isMobile = !!i.mobile),
446 (this.isTesting = !!i.testing),
447 (this.appVersion = i.appVersion ? me.parse(i.appVersion) : null),
448 (this.forceBuildType = !!i.forceBuildType),
449 !i.buildType)
450 )
451 throw pe.INVALID_BUILD_TYPE()
452 ;((this.buildType = He(i.buildType)),
453 (this.logger = new ee(i.logger)),
454 this.isTesting && this.logger.mute())
455 const s = qe(i.buildType)
456 ;((this.isNightly = this.buildType === he.Nightly),
457 (this.isExperimental = this.isTesting ? (i.experimental ?? this.isNightly) : this.isNightly),
458 (this.offlineBoot = new r()),
459 (this.onlineBoot = new r()),
460 (this.debug = {}),
461 (this.versions = x),
462 (this.abi = i.testingABI || {
463 max: this.isExperimental ? x.EXPERIMENTAL : x.STABLE,
464 autoupgrade: this.isExperimental ? x.EXPERIMENTAL : x.AUTOUPGRADE,
465 production: x.STABLE,
466 }),
467 (this.logout = i.logout),
468 (this.storage = new t(e, i.storage)),
469 (this.rootCorestore = new n(this.storage, {
470 globalCache: new y({ maxSize: i.maxCacheSize }),
471 manifestVersion: 2,
472 })),
473 (this.store = this.rootCorestore.namespace(ke)),
474 this.rootCorestore.watch(this._handleCoreOpen.bind(this)),
475 (this.local = A.rocks(this.storage.rocks.columnFamily("keet/local-database"))),
476 (this.discovery = null),
477 (this.gatekeepers = i.gatekeepers || []),
478 (this.push = null),
479 (this.protomuxWakeup = new u(this._handleWakeup.bind(this))),
480 (this.backoff = new g()),
481 (this.rooms = new Map()),
482 (this.activeRooms = new Set()),
483 (this._transactionLock = new d()),
484 (this._tx = null),
485 (this.hyperconf = null),
486 (this.config = null),
487 (this.configMinVersion = null),
488 (this.errorManager = new ue(this, this.opts)),
489 (this.swarmWorker = new U(this, this.opts.swarmWorker)),
490 (this.files = new q(this, this.opts)),
491 (this._onerror = i.onerror || m),
492 (this.onerror = this.errorManager
493 ? (e, t = {}) => {
494 const i = this.errorManager.normalize(e, t)
495 ;(this.errorManager.add(i), this.logger.error(i), this._onerror(i))
496 }
497 : this._onerror),
498 (this.apiV1 = new I(this, i)),
499 (this.backendAPI = this.apiV1),
500 (this.api = this.backendAPI.api.core),
501 (this.blindPeeringOpts = i.blindPeeringOpts || {}),
502 (this.contractBundles = null),
503 (this.tasks = null),
504 (this.swarm = null),
505 (this.swarmId = null),
506 (this.blindPeering = null),
507 (this.privateProfile = null),
508 (this.unreads = null),
509 (this.unreadsLoading = null),
510 (this.discoveryCore = null),
511 (this.discoveryCoreSession = null),
512 (this.push = null),
513 (this.state = we.RESUME),
514 (this._bundlesKey = i.bundlesKey || s.bundles.key),
515 (this._bundlesLength = i.bundlesLength || s.bundles.length),
516 (this._hyperconfKey = i.hyperconfKey || s.config.key),
517 (this._hyperconfLength = i.hyperconfLength || s.config.length),
518 (this._disabledRooms = this.isTesting ? new Set() : null),
519 (this._verifiedRooms = this.isTesting ? new Set() : null),
520 (this._relayKeys = this.isTesting ? i.blindRelays || [] : null),
521 (this._blindPeerKeys = this.isTesting ? i.blindMirroring || [] : null),
522 (this._gatekeeperKeys = this.isTesting ? i.gatekeepers || [] : null),
523 (this._discoveryBootstrapKeys = this.isTesting ? i.discoveryBootstrapKeys || [] : null),
524 (this._disableUnreadSync = (this.isTesting && i.disableUnreadSync) || !1),
525 (this._migratedFrom = 0),
526 (this._unreadsLock = new d({ debounce: !0 })),
527 (this._dhtOpts = i.dht),
528 (this._swarmOpts = i.swarm),
529 (this._pendingTasks = []),
530 (this._swarmTasks = []),
531 (this._runningTasks = new Set()),
532 (this._waitingForCompletion = new Map()),
533 (this._completedRequests = new Set()),
534 (this._pendingCandidates = new Map()),
535 (this._swarming = new Map()),
536 (this._pendingTraces = []),
537 (this._cacheLock = new d({ debounce: !0 })),
538 (this._gcEnabled = !1 !== i.gc),
539 (this._gcIdleTicks = i.gcIdleTicks || 4),
540 (this._gcInterval = i.gcInterval || Le),
541 (this._gcTimer = null),
542 (this._gcClosingRooms = new Set()),
543 (this._boundAutobaseTrace = this._autobaseTrace.bind(this)),
544 (this.internalPairingTimeout = i.pairingTimeout || Te),
545 (this._profileDiscoveryTimeout = i.profileDiscoveryTimeout || Ke),
546 (this.migrationStatus = null),
547 (this._roomMigrations = new p(5)),
548 (this._discoveryLock = new d({ debounce: !0 })),
549 (this._discoverySemaphore = new p(Se)),
550 (this._discovering = new Map()),
551 (this.internalFastJoinSemaphore = new p(4)),
552 (this.debugRunningFastJoins = 0),
553 (this.debugMaxRunningFastJoins = 0),
554 (this._rejectAnonymousProfiles = !1 !== i.rejectAnonymousProfiles),
555 (this._registryOpts = this.isTesting ? i.userRegistry : null),
556 (this.rpcClient = null),
557 (this.userRegistry = null),
558 (this.ackThreshold = i.ackThreshold),
559 (this.ackInterval = i.ackInterval),
560 (this.stats = {
561 ops: 0,
562 appends: 0,
563 bytesAppended: 0,
564 uploaded: 0,
565 bytesUploaded: 0,
566 downloaded: 0,
567 bytesDownloaded: 0,
568 }),
569 (this.debugForceMigrationFailure = i.debugForceMigrationFailure || null),
570 (this.debugJoinPeer = i.debugJoinPeer || this._debugJoinPeer.bind(this)),
571 (this.debugLeavePeer = i.debugLeavePeer || this._debugLeavePeer.bind(this)),
572 this.ready().catch(this.onerror))
573 }
574 async backendReady() {
575 this.backendAPI.opened || (await this.backendAPI.ready())
576 }
577 get readOnly() {
578 return this.rootCorestore.storage.readOnly || !1
579 }
580 get suspended() {
581 return this.state === we.SUSPEND
582 }
583 async _openNetworking() {
584 const e = await this.getDHTSettings()
585 ;((this.swarm = new o({
586 deferRandomPunch: !0,
587 dht: new a({ ...e, ...this._swarmOpts, ...this._dhtOpts }),
588 maxPeers: Ve,
589 ...this._swarmOpts,
590 relayThrough: this._relayThrough.bind(this),
591 keyPair: await this.rootCorestore.createKeyPair(ve),
592 })),
593 (this.swarmId = i.encode(this.swarm.keyPair.publicKey)),
594 this.swarm.on("connection", this._handleConnection.bind(this)),
595 (this.discovery = this._discoveryBootstrapKeys.length
596 ? new C(this._discoveryBootstrapKeys[0], { dht: this.swarm.dht })
597 : null),
598 (this.rpcClient = new ye(this.swarm.dht, {
599 suspended: this.state === we.SUSPEND,
600 relayThrough: this._relayThrough.bind(this),
601 })),
602 (this.blindPeering = new _(this.swarm.dht, this.store, {
603 pick: 2,
604 wakeup: this.protomuxWakeup,
605 keys: this.debug.disableMirrors ? [] : this._blindPeerKeys,
606 relayThrough: this._relayThrough.bind(this),
607 ...this.blindPeeringOpts,
608 })),
609 this._gatekeeperKeys.length > 0 &&
610 (this.push = new R(this._gatekeeperKeys, { dht: this.swarm.dht })),
611 await this.swarmWorker.ready(),
612 await this.files.ready(),
613 this.readOnly && (this.blindPeering.suspend(), this.swarm.suspend()))
614 }
615 async _runBootOffline() {
616 if (!this.offlineBoot.enter()) return
617 ;(await this._ensureDebugState(),
618 await this.store.ready(),
619 (this.hyperconf = new T(le, this.store.get(this._hyperconfKey), {
620 minLength: this._hyperconfLength,
621 production: this.buildType === he.Production,
622 })),
623 this.hyperconf.on("update", this._handleConfigUpdated.bind(this)),
624 await this.hyperconf.ready(),
625 await this._handleConfigUpdated(),
626 this.config?.versions.autoupgrade > 0 &&
627 (this.abi.autoupgrade = this.config.versions.autoupgrade))
628 const e = await this.local.get("@local/environment"),
629 t = !!e && e.latestOfflineAbi < this.abi.production
630 ;((this.contractBundles = new be(this, _e, { hydrate: t })),
631 await this.contractBundles.ready(),
632 t && (await this._bumpLocalAbiVersion()),
633 await this._openNetworking(),
634 (this.tasks = new O(this)),
635 await this.tasks.ready(),
636 this._gcEnabled &&
637 (this._gcTimer = setInterval(this._closeIdleRooms.bind(this), this._gcInterval)),
638 this.offlineBoot.exit())
639 }
640 async _runBootOnline() {
641 if (this.onlineBoot.enter()) {
642 ;(await this.offlineBoot.ready(),
643 this.discovery &&
644 (this.discovery.on("announce", ({ publicKey: e }) => {
645 this.scheduleDiscoverySwarming(e)
646 }),
647 this.discovery.on("connect", this._onDiscoveryConnect.bind(this)),
648 this.discovery.connect()),
649 this._refreshDiscoverySwarming(),
650 (this._migratedFrom = await this._ensureMigrated()))
651 try {
652 await this._loadIdentity()
653 } catch (e) {
654 this.onerror(e)
655 }
656 ;(this._migratedFrom > 0 && (await this._maybeRunPostMigrations(this._migratedFrom)),
657 this._registryOpts &&
658 ((this.userRegistry = new de(this, this._registryOpts)), await this.userRegistry.ready()),
659 this.onlineBoot.exit())
660 }
661 }
662 async _open() {
663 !1 !== (await this._ensureBuildType()) &&
664 (this._runBootOffline().catch(this.onerror),
665 this._runBootOnline().catch(this.onerror),
666 await this.offlineBoot.ready())
667 }
668 async _close() {
669 ;(this.internalTime("keet-close"),
670 this.internalVerboseLog("Closing keet core"),
671 this._gcTimer && clearInterval(this._gcTimer),
672 this.backoff.destroy(),
673 this.internalTimeLog("keet-close", "destroyed backoff"),
674 this.state === we.SUSPEND && (await this.store.resume()),
675 this.internalTimeLog("keet-close", "resumed from suspend"),
676 this.internalVerboseLog("Closing active calls"),
677 await this.backendAPI.closeActiveCalls(),
678 this.internalTimeLog("keet-close", "closed active calls"),
679 this.internalVerboseLog("Closing discovery cores"),
680 this.discoveryCore && (await this.discoveryCore.close()),
681 this.discoveryCoreSession && this.discoveryCoreSession.destroy(),
682 this.internalTimeLog("keet-close", "closed discovery cores"),
683 this.internalVerboseLog("Closing tasks"),
684 this.tasks && (await this.tasks.close()),
685 this.internalFastJoinSemaphore.destroy(),
686 this.internalTimeLog("keet-close", "stopped running tasks"))
687 for (const e of this._gcClosingRooms)
688 (this.internalTime(`gc-room-close-${e.id}`),
689 this.internalTimeLog(`gc-room-close-${e.id}`),
690 this.internalVerboseLog("Closing room in gc list", e.id, e.opened),
691 await e.close(),
692 this.internalTimeEnd(`gc-room-close-${e.id}`, "closed"))
693 ;(this.internalTimeLog("keet-close", "closed rooms in gc"),
694 this.internalVerboseLog("Closing user registry"),
695 this.userRegistry && (await this.userRegistry.close()),
696 this.internalTimeLog("keet-close", "closed user registry"),
697 this.internalVerboseLog("Closing rpc client"),
698 this.rpcClient && (await this.rpcClient.close()),
699 this.internalTimeLog("keet-close", "closed rpc client"),
700 this.internalVerboseLog("Closing swarm worker"),
701 await this.swarmWorker.close(),
702 this.internalTimeLog("keet-close", "closed swarm worker"),
703 this.internalVerboseLog("Closing discovery"),
704 this.discovery && (await this.discovery.close()),
705 this.internalTimeLog("keet-close", "closed discovery"),
706 this.internalVerboseLog("Closing push"),
707 this.push && (await this.push.destroy()),
708 this.internalTimeLog("keet-close", "closed push"),
709 this.internalVerboseLog("Closing blind peering"),
710 this.blindPeering && (await this.blindPeering.close()),
711 this.internalTimeLog("keet-close", "closed blind peering"),
712 this.internalVerboseLog("Flushing DHT cache"),
713 this.swarm && (await this._flushDHTCache()),
714 this.internalTimeLog("keet-close", "flushed dht"),
715 this.internalVerboseLog("Closing swarm"),
716 this.swarm && (await this.swarm.destroy()),
717 this.internalTimeLog("keet-close", "destroyed swarm"),
718 this.internalVerboseLog("Closing files"),
719 await this.files.close(),
720 this.internalTimeLog("keet-close", "closed files"),
721 this.internalVerboseLog("Closing all pending rooms and workers"),
722 await Promise.allSettled([
723 ...[...this.rooms.values()].map(async (e) => {
724 ;(this.internalTime(`pending-room-close-${e.id}`),
725 this.internalTimeLog(`pending-room-close-${e.id}`),
726 await e.close(),
727 this.internalTimeEnd(`pending-room-close-${e.id}`))
728 }),
729 ]),
730 this.internalTimeLog("keet-close", "closed all pending rooms and workers"),
731 this.internalVerboseLog("Closing backend"),
732 await this.apiV1.close(),
733 this.internalTimeLog("keet-close", "closed backend"),
734 await this.internalEnterLocalTransaction(),
735 await this.internalExitLocalTransaction(),
736 this.internalVerboseLog("Closing unread anchors"),
737 this.unreadsLoading && (await this.unreadsLoading),
738 this.unreads && (await this.unreads.close()),
739 this.internalTimeLog("keet-close", "closed unreads"),
740 this.internalVerboseLog("Closing wakeup"),
741 this.protomuxWakeup.destroy(),
742 this.internalTimeLog("keet-close", "protomux"),
743 this.internalVerboseLog("Closing hyperconf"),
744 this.hyperconf && (await this.hyperconf.close()),
745 this.internalVerboseLog("Closing error manager"),
746 this.errorManager && (await this.errorManager.close()),
747 this.internalVerboseLog("Closing local db"),
748 await this.local.close(),
749 this.internalVerboseLog("Closing contract bundles"),
750 this.contractBundles && (await this.contractBundles.close()),
751 this.internalVerboseLog("Closing store"),
752 await this.store.close(),
753 this.internalVerboseLog("Closing root corestore"),
754 await this.rootCorestore.close(),
755 this.internalTimeLog("keet-close", "closed cores"),
756 this.internalVerboseLog("Close done"),
757 this.internalTimeEnd("keet-close"))
758 }
759 async _ensureDebugState() {
760 const e = await this.internalEnterLocalTransaction()
761 try {
762 const t = (await e.get("@local/debug")) || {}
763 t.flags || (t.flags = z)
764 const i = new Set(),
765 s = {}
766 for (const e of t.flags) (i.add(e.key), (s[e.key] = e.value))
767 for (const { key: e, value: s, description: r } of z)
768 i.has(e) || t.flags.push({ key: e, value: s, description: r })
769 ;(await e.insert("@local/debug", t), await e.flush(), (this.debug = { ...s }))
770 } finally {
771 await this.internalExitLocalTransaction()
772 }
773 }
774 isValidBuildType(e) {
775 if (!e) return !0
776 if (this.isTesting && !this.forceBuildType) return !0
777 const t = he.Production === this.buildType
778 return !((!t && !e.settings.buildType) || (!t && e.settings.buildType !== this.buildType))
779 }
780 async _ensureBuildType() {
781 if (this.isTesting && !this.forceBuildType) return
782 const e = he.Production === this.buildType,
783 t = await this.internalEnterLocalTransaction()
784 try {
785 const [i, s] = await Promise.all([t.get("@local/identity"), t.get("@local/environment")])
786 if (!e && i && !s?.buildType) throw pe.INVALID_BUILD_TYPE()
787 if (s && s.buildType !== this.buildType) throw pe.INVALID_BUILD_TYPE()
788 if (s) return
789 ;(await t.insert("@local/environment", { buildType: this.buildType }), await t.flush())
790 } catch (e) {
791 return (this.onerror(e), !1)
792 } finally {
793 await this.internalExitLocalTransaction()
794 }
795 }
796 async _bumpLocalAbiVersion() {
797 const e = await this.internalEnterLocalTransaction()
798 try {
799 const t = await e.get("@local/environment")
800 ;((t.latestOfflineAbi = this.abi.production),
801 await e.insert("@local/environment", t),
802 await e.flush())
803 } finally {
804 await this.internalExitLocalTransaction()
805 }
806 }
807 async _onDiscoveryConnect() {
808 const e = await this.local
809 .find("@local/rooms-by-timestamp", { reverse: !0, limit: 256 })
810 .toArray()
811 this.discovery.cork()
812 for (const t of e) {
813 const e = t.capabilities.discoveryKeyPair.publicKey,
814 i = await this.local.get("@local/background-sync", { discoveryPublicKey: e }),
815 s = Math.max(t.timestamps.latestSync, i ? i.lastSynced : 0)
816 this.discovery.subscribe(t.capabilities.discoveryKeyPair.publicKey, { since: s })
817 }
818 this.discovery.uncork()
819 }
820 async internalEnterLocalTransaction() {
821 return (await this._transactionLock.lock(), (this._tx = this.local.transaction()), this._tx)
822 }
823 async internalExitLocalTransaction() {
824 ;(await this._tx.close(), this._transactionLock.unlock())
825 }
826 async _handleConfigUpdated() {
827 if (!this.isTesting || this.opts.hyperconfKey) {
828 if (
829 ((this.config = this.hyperconf.current),
830 this.internalVerboseLog(
831 "OTA config updated, dkey:",
832 i.encode(this.hyperconf.core.discoveryKey),
833 "length:",
834 this.hyperconf.core.length,
835 ),
836 (this._blindPeerKeys = this.config.services.blindPeers),
837 (this._relayKeys = this.config.services.blindRelays),
838 (this._gatekeeperKeys = this.config.services.gatekeepers),
839 (this._discoveryBootstrapKeys = this.config.services.discovery),
840 l.setRecoveryPeers && l.setRecoveryPeers(this.config.services.blindPeers),
841 (this._disabledRooms = new Set(this.config.rooms.disabled.map((e) => i.encode(e)))),
842 (this._verifiedRooms = new Set(this.config.rooms.verified?.map((e) => i.encode(e)))),
843 (this._disableUnreadSync = !0 === this.config.profile?.disableUnreadSync),
844 this._maybeUpgradeOpenRooms().catch(this.onerror),
845 this.config.services.userRegistries?.length &&
846 (this._registryOpts = this.config.services.userRegistries[0]),
847 this.blindPeering && this.blindPeering.setKeys(this._blindPeerKeys),
848 this.config.versions.minVersion)
849 ) {
850 const { major: e, minor: t, patch: i } = this.config.versions.minVersion
851 this.configMinVersion = new me(e, t, i)
852 }
853 ;(this.config.versions.autoupgrade > 0 &&
854 (this.abi.autoupgrade = this.config.versions.autoupgrade),
855 this.emit("force-update"),
856 this.emit("verified-rooms-changed"))
857 }
858 }
859 async _maybeUpgradeOpenRooms() {
860 this.onlineBoot.opened || (await this.onlineBoot.ready())
861 const e = this.abi.autoupgrade,
862 t = this.config?.versions.autoupgrade
863 if (!(e < t)) return
864 const i = [],
865 s = async function (e, t) {
866 const [i, s] = await Promise.all([e.db.get("@keet/system-digest"), H(e.db, e.deviceKey)])
867 !s?.status.isModerator ||
868 i?.abi.version >= t ||
869 (await this.internalDispatchUpgrade(e.id, t))
870 }.bind(this)
871 for (const [e, r] of this.rooms.entries()) i.push(s(r, t))
872 return await Promise.all(i)
873 }
874 shouldForceUpdate() {
875 const e = this.config.versions.forceUpdate > x.FORCE_UPDATE,
876 t =
877 this.configMinVersion && this.appVersion
878 ? this.configMinVersion.compare(this.appVersion)
879 : 0
880 return e || 1 === t
881 }
882 isRoomVerified(e) {
883 return this._verifiedRooms.has(e)
884 }
885 async _bumpRoom(e) {
886 if (this.closing) return
887 if (!(await this.local.get("@local/writers-by-room-key", { roomKey: e }))) return
888 if (this.closing) return
889 const t = this.internalOpenExistingRoom(e)
890 try {
891 await t.ready()
892 } finally {
893 this.internalReleaseRoom(t)
894 }
895 }
896 _handleCoreOpen(e) {
897 const t = new l({ core: e, weak: !0 }),
898 i = new d({ debounce: !0 })
899 ;(t.on("verification-error", (e) => {
900 this.onerror(e, { coreKey: t.key, prefix: "CORE_VERIFICATION_ERROR" })
901 }),
902 t.on("conflict", () => {
903 this.onerror(new Error("Conflict in Hypercore"), {
904 coreKey: t.key,
905 prefix: "CORE_CONFLICT",
906 })
907 }),
908 t.on("invalid-request", (e) => {
909 this.onerror(e, { coreKey: t.key, prefix: "CORE_INVALID_REQUEST" })
910 }),
911 t.on("append", async () => {
912 if (await i.lock())
913 try {
914 const t = e.state.storage.read(),
915 i = [t.getUserData("referrer"), t.getUserData("autobase/view")]
916 t.tryFlush()
917 const [s, r] = await Promise.all(i)
918 if (!s || r) return
919 await this._bumpRoom(s)
920 } catch (e) {
921 this.onerror(e)
922 } finally {
923 i.unlock()
924 }
925 }),
926 t.on("upload", (e, t) => {
927 ;(this.stats.uploaded++, (this.stats.bytesUploaded += t))
928 }),
929 t.on("download", (e, t) => {
930 ;(this.stats.downloaded++, (this.stats.bytesDownloaded += t))
931 }),
932 t.once("ready", () => {
933 if (t.writable) {
934 let e = t.length,
935 i = t.byteLength
936 t.on("append", () => {
937 const s = t.length,
938 r = t.byteLength
939 ;((this.stats.appends += s - e), (this.stats.bytesAppended += r - i), (e = s), (i = r))
940 })
941 }
942 }))
943 }
944 async _handleWakeup(e) {
945 if (!this.discovery)
946 try {
947 const [t, i] = await Promise.all([
948 this.local.get("@local/writers-by-wakeup-topic", { wakeupTopic: e }),
949 this.local.get("@local/rooms-by-wakeup-topic", { capabilities: { wakeupTopic: e } }),
950 ])
951 if (!t && !i) return
952 const s = t?.mailbox || i?.capabilities.mailboxKeyPair.publicKey,
953 r = this.protomuxWakeup.session(s, {
954 active: !1,
955 discoveryKey: e,
956 onpeeractive: (e) => {
957 t && r.announce(e, [{ key: t.key, length: 1 }])
958 },
959 })
960 i && (await this._bumpRoom(i.roomKey))
961 } catch (e) {
962 this.onerror(e)
963 }
964 }
965 async _maybeRunMigrations(e, t) {
966 ;(3 === t && (await require("./lib/core/migrations/3")(this, e)),
967 4 === t && (await require("./lib/core/migrations/4")(this, e)),
968 5 === t && (await require("./lib/core/migrations/4")(this, e)),
969 t < 8 && (await require("./lib/core/migrations/7")(e)),
970 t < 9 && (await require("./lib/core/migrations/8")(e)))
971 }
972 async _maybeRunPostMigrations(e) {
973 ;(4 === e && (await require("./lib/core/migrations/4/post")(this)),
974 5 === e && (await require("./lib/core/migrations/4/post")(this)))
975 }
976 async _ensureMigrated() {
977 let e = 0
978 const t = await this.internalEnterLocalTransaction()
979 try {
980 const i = await t.get("@local/migrations"),
981 s = i ? i.version : 3
982 ;(s < 9 &&
983 ((e = s),
984 await this._maybeRunMigrations(t, s),
985 await t.insert("@local/migrations", { version: 9 })),
986 await t.flush())
987 } finally {
988 await this.internalExitLocalTransaction()
989 }
990 const s = await this.local.find("@local/room-migrations-by-priority").toArray(),
991 r = [],
992 o = [],
993 a = []
994 for (const e of s)
995 this._disabledRooms.has(i.encode(e.roomKey))
996 ? a.push(e)
997 : e.v3?.privateProfile
998 ? r.push(e)
999 : o.push(e)
1000 if (a.length > 0) {
1001 const e = await this.internalEnterLocalTransaction()
1002 try {
1003 for (const t of a) {
1004 const i = await e.get("@local/room-migrations", { roomKey: t.roomKey })
1005 ;(await e.delete("@local/room-migrations", t), await ge(e, null, i))
1006 }
1007 await e.flush()
1008 } finally {
1009 await this.internalExitLocalTransaction()
1010 }
1011 }
1012 await Promise.all(r.map((e) => this._migrateRoom(e, { migratingRooms: o })))
1013 for (const e of o) this._migrateRoom(e).catch(this.onerror)
1014 return e
1015 }
1016 async _migrateRoom(e, { migratingRooms: t } = {}) {
1017 await this._roomMigrations.wait()
1018 try {
1019 const i = e.errored
1020 if (
1021 (i ||
1022 (this.migrationStatus || (this.migrationStatus = { remaining: 0 }),
1023 this.migrationStatus.remaining++,
1024 this.emit("migration-status", this.migrationStatus)),
1025 !e.timestamp)
1026 ) {
1027 const t = await this.internalEnterLocalTransaction()
1028 try {
1029 e.timestamp = Date.now()
1030 const i = await t.get("@local/room-migrations", e)
1031 ;(await t.insert("@local/room-migrations", e), await ge(t, e, i), await t.flush())
1032 } finally {
1033 await this.internalExitLocalTransaction()
1034 }
1035 }
1036 const s = Date.now() - e.timestamp > Ie
1037 let r = !1,
1038 o = !1
1039 try {
1040 e.v3 &&
1041 !s &&
1042 (await require("./lib/core/migrations/3/room")(this, e.roomKey, e.v3, {
1043 migratingRooms: t,
1044 }))
1045 } catch (e) {
1046 ;(this.onerror(e), (o = !0), (r = !!this.closing))
1047 }
1048 const a = await this.internalEnterLocalTransaction()
1049 try {
1050 const t = await a.get("@local/room-migrations", e)
1051 ;(o
1052 ? (i || (e.errored = !r), await a.insert("@local/room-migrations", e), await ge(a, e, t))
1053 : (await a.delete("@local/room-migrations", e), await ge(a, null, t)),
1054 await a.flush())
1055 } finally {
1056 await this.internalExitLocalTransaction()
1057 }
1058 i || (this.migrationStatus.remaining--, this.emit("migration-status", this.migrationStatus))
1059 } finally {
1060 this._roomMigrations.signal()
1061 }
1062 }
1063 async _closeIdleRooms() {
1064 const e = [],
1065 t = []
1066 for (const i of this.rooms.values())
1067 i.refs > 0 ||
1068 this.activeRooms.has(i) ||
1069 ++i.idleTicks < this._gcIdleTicks ||
1070 this.backendAPI.callsByRoomId.get(i.id) ||
1071 (this.rooms.delete(i.id), this._gcClosingRooms.add(i), e.push(i.close()), t.push(i))
1072 await Promise.allSettled(e)
1073 for (const e of t) this._gcClosingRooms.delete(e)
1074 }
1075 internalCloseRoom(e) {
1076 ;(this.rooms.delete(e.id), this._gcClosingRooms.add(e))
1077 }
1078 _debugJoinPeer(e) {
1079 this.logger.info("Call join:", e)
1080 }
1081 _debugLeavePeer(e) {
1082 this.logger.info("Call leave:", e)
1083 }
1084 debugPauseGC() {
1085 this._gcTimer && (clearInterval(this._gcTimer), (this._gcTimer = null))
1086 }
1087 debugResumeGC() {
1088 this._gcTimer ||
1089 (this._gcTimer = setInterval(this._closeIdleRooms.bind(this), this._gcInterval))
1090 }
1091 async internalDiscoveryCompleted(e, t) {
1092 try {
1093 const e = this._discovering.get(t)
1094 if (!e) return
1095 const i = await this.internalEnterLocalTransaction()
1096 try {
1097 const t = e.roomInfo.capabilities.discoveryKeyPair.publicKey
1098 e.room && this.internalReleaseRoom(e.room)
1099 const s = await i.get("@local/background-sync", { discoveryPublicKey: t })
1100 ;(s &&
1101 (await i.insert("@local/background-sync", { ...s, lastSynced: Date.now(), dirty: !1 })),
1102 await i.flush())
1103 } finally {
1104 await this.internalExitLocalTransaction()
1105 }
1106 ;(this._discovering.delete(t), this._discoverySemaphore.signal())
1107 } catch (e) {
1108 this.onerror(e)
1109 }
1110 }
1111 async _startDiscoverySwarming(e, t) {
1112 if (!(await this._discoverySemaphore.wait())) return !1
1113 if (this.closing) return !1
1114 const i = this._discovering.get(t)
1115 return (
1116 !!i &&
1117 (this.swarmWorker.startDiscoverySwarming(e, { roomId: t }),
1118 i.updated && this.swarmWorker.notifyDiscoveryUpdate(e),
1119 !0)
1120 )
1121 }
1122 async _refreshDiscoverySwarming() {
1123 if ((await this._discoveryLock.lock()) && !this.closing)
1124 try {
1125 const e = await this.internalEnterLocalTransaction()
1126 try {
1127 for await (const { discoveryPublicKey: t } of e.find("@local/background-sync-by-dirty", {
1128 reverse: !0,
1129 })) {
1130 const e = await this.local.get("@local/rooms-by-discovery", {
1131 capabilities: { discoveryKeyPair: { publicKey: t } },
1132 })
1133 if (!e) continue
1134 const s = i.encode(e.discoveryKey)
1135 if (this._discovering.has(s)) continue
1136 const r = this.internalOpenExistingRoom(e.roomKey)
1137 ;(this._discovering.set(s, { updated: !1, room: r, roomInfo: e }),
1138 this._startDiscoverySwarming(e.capabilities.swarmTopic, s) ||
1139 this.internalReleaseRoom(r))
1140 }
1141 await e.flush()
1142 } finally {
1143 await this.internalExitLocalTransaction()
1144 }
1145 } catch (e) {
1146 this.onerror(e)
1147 } finally {
1148 this._discoveryLock.unlock()
1149 }
1150 }
1151 async scheduleDiscoverySwarmingFromDiscoveryKey(e) {
1152 const t = await this.local.get("@local/rooms-by-discovery-key", { discoveryKey: e })
1153 if (t) return this.scheduleDiscoverySwarming(t.capabilities.discoveryKeyPair.publicKey)
1154 }
1155 async scheduleDiscoverySwarming(e) {
1156 const t = await this.internalEnterLocalTransaction()
1157 try {
1158 const i = await t.get("@local/background-sync", { discoveryPublicKey: e }),
1159 s = i?.lastSynced || 0
1160 ;(await t.insert("@local/background-sync", {
1161 discoveryPublicKey: e,
1162 timestamp: Date.now(),
1163 lastSynced: s,
1164 dirty: !0,
1165 }),
1166 await t.flush())
1167 } finally {
1168 await this.internalExitLocalTransaction()
1169 }
1170 this._refreshDiscoverySwarming()
1171 }
1172 async internalBlobsActiveInRoom(e) {
1173 const t = i.encode(e),
1174 s = this.rooms.get(t)
1175 if (!s) return
1176 const r = await this.local.get("@local/rooms", { roomKey: e })
1177 if (!r) return
1178 const { capabilities: o } = r
1179 if (!o || !o.mailboxKeyPair) return
1180 try {
1181 await s.ready()
1182 } catch {
1183 return
1184 }
1185 if (!s.externalBlobs) return
1186 const a = await this._getMirrorKeys(e, r)
1187 s.closing ||
1188 this.blindPeering.addCoreBackground(s.externalBlobs.core, {
1189 target: o.mailboxKeyPair.publicKey,
1190 keys: a,
1191 pick: 1,
1192 })
1193 }
1194 async _getMirrorKeys(e, t) {
1195 if (this.debug.disableMirrors) return []
1196 if (!e) return this._blindPeerKeys
1197 const i = t || (await this.local.get("@local/rooms", { roomKey: e }))
1198 return i && i.config.blindPeers?.length ? i.config.blindPeers : this._blindPeerKeys
1199 }
1200 _relayThrough(e) {
1201 return e || this.swarm.dht.randomized ? this._relayKeys : null
1202 }
1203 internalVerboseLog(...e) {
1204 if (this.isNightly || this.isTesting) return
1205 const t = new Date()
1206 this.logger.info(t, ...e)
1207 }
1208 internalTime(...e) {
1209 this.isTesting || console.time(...e)
1210 }
1211 internalTimeLog(...e) {
1212 this.isTesting || console.timeLog(...e)
1213 }
1214 internalTimeEnd(...e) {
1215 this.isTesting || console.timeEnd(...e)
1216 }
1217 _handleConnection(e) {
1218 if (this.closing) return void e.on("error", () => {})
1219 const t = i.encode(e.publicKey),
1220 s = i.encode(e.remotePublicKey),
1221 r = Date.now()
1222 let o = 0
1223 this.internalVerboseLog(
1224 `got ${e.isInitiator ? "client" : "server"} connection from ${t} to ${s}`,
1225 )
1226 let a = null
1227 ;(e.once("error", (e) => {
1228 a = e
1229 }),
1230 e.once("close", () => {
1231 this.internalVerboseLog(
1232 `connection closed to ${s}, with err: ${a} (${Date.now() - r} ms ${o} bytes recv)`,
1233 )
1234 }),
1235 e.on("data", (e) => {
1236 o += e.byteLength
1237 }),
1238 this.protomuxWakeup.addStream(e),
1239 this.rootCorestore.replicate(e))
1240 }
1241 async _createInitialIdentity() {
1242 const t = e.generateMnemonic(),
1243 i = this.tasks.restoreIdentity(Ee, { mnemonic: t, recover: !1 })
1244 await i.run()
1245 }
1246 async _loadIdentity() {
1247 let e = await this.local.get("@local/identity")
1248 if (
1249 (e || (await this._createInitialIdentity()),
1250 (e = await this.local.get("@local/identity")),
1251 this.privateProfile)
1252 )
1253 return
1254 const t = await this.local.get("@local/rooms", { roomKey: e.privateProfileKey })
1255 ;((this.privateProfile = await this.internalOpenPrivateProfile({ opening: !0 })),
1256 this.swarmWorker.startActiveSwarming(t.capabilities.swarmTopic),
1257 await this.internalRefreshUnreads())
1258 }
1259 async internalDispatchUpgrade(e, t) {
1260 if (!e || !t) return
1261 const i = this.internalOpenExistingRoom(e)
1262 try {
1263 const e = this.batch(i.id)
1264 if (0 === (await e.dispatch("@keet/upgrade", { version: t }))) return
1265 if (t >= 14) {
1266 const s = await i.db.get("@keet/system-digest"),
1267 r = "@keet/migrate-abi",
1268 o = {
1269 header: { timestamp: e.timestamp },
1270 from: s?.abi.version,
1271 to: t,
1272 buildType: this.buildType,
1273 },
1274 a = (await this.contractBundles.loadBundle(t)).encodeOperation(r, o)
1275 await e.append(a)
1276 }
1277 await e.flush()
1278 } finally {
1279 this.internalReleaseRoom(i)
1280 }
1281 }
1282 async _bumpCache() {
1283 try {
1284 if (!(await this._cacheLock.lock())) return
1285 try {
1286 await this._processCache()
1287 } finally {
1288 this._cacheLock.unlock()
1289 }
1290 } catch (e) {
1291 this.onerror(e)
1292 }
1293 }
1294 async _processCache() {
1295 const e = []
1296 for (; this._pendingTraces.length > 0; ) {
1297 const t = this._pendingTraces.pop()
1298 e.push(this._updateCache(t))
1299 }
1300 const t = await Promise.all(e),
1301 i = await this.internalEnterLocalTransaction()
1302 try {
1303 for (const e of t) e && (await i.insert(e.collection, e.record))
1304 await i.flush()
1305 } finally {
1306 await this.internalExitLocalTransaction()
1307 }
1308 }
1309 async _updateCache({ roomKey: e, collection: t, record: i }) {
1310 if ("@keet/members" === t) {
1311 if (i?.profile.avatar) {
1312 const t = this.internalOpenExistingRoom(e)
1313 try {
1314 await J(t.blobs, i.profile.avatar)
1315 } finally {
1316 this.internalReleaseRoom(t)
1317 }
1318 }
1319 return { collection: "@local/members", record: i }
1320 }
1321 return "@keet/devices" === t
1322 ? { collection: "@local/devices", record: { roomKey: e, device: i } }
1323 : null
1324 }
1325 _cacheRoomReads(e, t, i) {
1326 ;(this._pendingTraces.push({ roomKey: e, collection: t, record: i }), this._bumpCache())
1327 }
1328 _autobaseOpen(e, t) {
1329 let i = null
1330 t.internal || (i = (e, i) => this._cacheRoomReads(t.key, e, i))
1331 const s = { autoUpdate: !0, extension: !1, trace: i },
1332 r = B.autobaseOpen(e, t),
1333 o = Q.bee(e, { hyperdb: s })
1334 return { ...o, core: o.cores.db, legacy: r, roomKey: t.key }
1335 }
1336 _autobaseClose(e) {
1337 return Promise.all([e.db.close(), e.blobs.close(), e.legacy.close()])
1338 }
1339 async _autobaseUpdate(e, t) {
1340 const s = new M(this, e, t.base, t)
1341 await s.run()
1342 const r = i.encode(t.base.discoveryKey)
1343 s.runPostUpdate()
1344 const o = this._discovering.get(r)
1345 o && ((o.updated = !0), this.swarmWorker.notifyDiscoveryUpdate(r))
1346 }
1347 async _autobaseApply(e, t, i, { dryRun: s = !1 } = {}) {
1348 const { blobs: r, db: o, core: a, legacy: n, roomKey: l } = t,
1349 c = s ? null : this._boundAutobaseTrace
1350 let h = !1,
1351 d = 0
1352 if (!(a.length > 0)) {
1353 if (((d = await V.autobaseApply(e, n, i)), d === e.length)) return !0
1354 h = n.core.length > 0
1355 }
1356 const y = o.transaction(),
1357 u = r.batch()
1358 let p = null,
1359 m = !1,
1360 g = null
1361 try {
1362 if (h) {
1363 const t = e[d]
1364 if (s || t?.optimistic) return !0
1365 ;(i.preferFastForward(), await V.migrate(this.store, i.base, n, y, u, this.contractBundles))
1366 }
1367 const r = await y.get("@keet/system-digest")
1368 if (r && r.abi.version > this.abi.production) {
1369 if (s) return !1
1370 i.interrupt({ unsupportedABI: r.abi.version, digest: r, nodes: e })
1371 }
1372 g = r ? r.abi.version : this.abi.autoupgrade
1373 let o = await this.contractBundles.loadBundle(g),
1374 a = await this.contractBundles.loadRouter(g)
1375 y.setDefinition(o.spec.contract.hyperdb)
1376 for (let r = d; r < e.length; r++) {
1377 const n = e[r]
1378 if (!(w.decode(w.uint, n.value) < 2))
1379 try {
1380 const e = te(n.value),
1381 r = $e(y, u, n, i, t, a, { dryRun: s, trace: c, abi: this.abi })
1382 ;(await a.dispatch(e, r),
1383 e &&
1384 "@keet/upgrade" === e.name &&
1385 ((g = e.value.version),
1386 (o = await this.contractBundles.loadBundle(g)),
1387 (a = await this.contractBundles.loadRouter(g)),
1388 y.setDefinition(o.spec.contract.hyperdb)))
1389 } catch (e) {
1390 if (Z.isContractError(e)) throw e
1391 if (ie.isDispatchError(e)) throw Z.DISPATCH_ERROR(e.message)
1392 throw e
1393 }
1394 }
1395 } catch (t) {
1396 "BUNDLE_NOT_AVAILABLE" === t.code
1397 ? i.interrupt({ unsupportedABI: t.abi, digest: null, nodes: e })
1398 : Z.isContractError(t)
1399 ? ((m = !0), (t.abi = g), (t.roomKey = l), (s && !this.isTesting) || this.onerror(t))
1400 : (p = t)
1401 }
1402 const b = !p && !m && y.updated()
1403 if (
1404 (s || p || m
1405 ? await Promise.all([u.close(), y.close()])
1406 : await Promise.all([u.flush(), y.flush()]),
1407 p)
1408 )
1409 throw p
1410 return b
1411 }
1412 _autobaseTrace({ type: e, value: t }) {
1413 if ("@keet/add-device" !== e) return
1414 const { request: i, response: s, invitation: r } = t,
1415 o = r?.metadata.expiration
1416 if (o > 0 && o < Date.now()) return
1417 const a = i.member.profile.mailbox,
1418 n = i.keyPair
1419 a && n && this._processAutobaseTrace(a, n, s).catch(this.onerror)
1420 }
1421 async _processAutobaseTrace(e, t, i) {
1422 this.onlineBoot.opened || (await this.onlineBoot.ready())
1423 const s = await this.local.get("@local/identity"),
1424 r = await this.local.get("@local/rooms", { roomKey: s.privateProfileKey })
1425 v.equals(e, r.capabilities.mailboxKeyPair.publicKey) ||
1426 this.tasks
1427 .joinRoomResponse(t.publicKey, { mailbox: e, keyPair: t, response: i })
1428 .runBackground()
1429 }
1430 async _backgroundDrain(e) {
1431 let t = await e.next()
1432 for (; !t.done && !this.closing; ) {
1433 const i = await t.value
1434 if (this.closing) return
1435 t = await e.next(i)
1436 }
1437 }
1438 async _safeLoadLegacyUnreads() {
1439 try {
1440 const e = []
1441 for await (const t of this.local.find("@local/rooms")) {
1442 const i = await this.local.get("@local/unreads", { roomKey: t.roomKey })
1443 i && e.push(i)
1444 }
1445 return e
1446 } catch {
1447 return []
1448 }
1449 }
1450 async *_migrateUnreadAnchors() {
1451 const e = yield this._safeLoadLegacyUnreads(),
1452 t = yield this.internalEnterLocalTransaction()
1453 try {
1454 const i = this.unreads.write(),
1455 s = Date.now()
1456 for (const { roomKey: r, count: o } of e)
1457 (i.tryPut(r, { length: o + 1, timestamp: s }),
1458 yield t.delete("@local/unreads", { roomKey: r }))
1459 ;(yield i.flush(), yield t.flush())
1460 } finally {
1461 yield this.internalExitLocalTransaction()
1462 }
1463 }
1464 async *_internalRefreshUnreads() {
1465 if (!this.privateProfile) return
1466 let e = yield this.privateProfile.db.get("@keet/system-digest")
1467 if (
1468 e &&
1469 (yield this.privateProfile.internalEnsureUpgraded({ opening: !0 }),
1470 (e = yield this.privateProfile.db.get("@keet/system-digest")),
1471 x.isFeatureSupported(e.abi.version, x.FEATURES.UNREADS) && (yield this._unreadsLock.lock()))
1472 )
1473 try {
1474 const t = []
1475 let i = !0
1476 const s = x.isFeatureSupported(e.abi.version, x.FEATURES.V2_UNREADS)
1477 ? "@keet-private-id/unreads-v2"
1478 : "@keet-private-id/unreads",
1479 r = yield this.privateProfile.db.find(s).toArray()
1480 for (const { deviceKey: e, key: s } of r)
1481 (v.equals(e, this.privateProfile.base.local.key) && (i = !1), t.push(s))
1482 if (this.unreads && ze(t, this.unreads.keys)) return
1483 this.unreads && (yield this.unreads.close(), (this.unreads = null))
1484 const o = this.privateProfile,
1485 a = o.base.encryptionKey,
1486 n = this.store.namespace(o.key),
1487 l = n.namespace(Pe)
1488 yield n.close()
1489 const c = yield o.base.wakeupCapability && o.base.wakeupCapability.key
1490 ;((this.unreads = new L(l, t, {
1491 blindPeering: this.blindPeering,
1492 encryptionKey: a,
1493 target: c,
1494 })),
1495 this.unreads.on("remote-update", () => this.emit("unread-anchors-changed")),
1496 yield this.unreads.ready(),
1497 i &&
1498 (yield this._backgroundDrain(this._migrateUnreadAnchors()),
1499 yield this.privateProfile.dispatch("@keet-private-id/add-unreads-key", {
1500 key: this.unreads.local.key,
1501 })))
1502 } finally {
1503 this._unreadsLock.unlock()
1504 }
1505 }
1506 internalRefreshUnreads() {
1507 return this._disableUnreadSync
1508 ? Promise.resolve()
1509 : this._backgroundDrain(this._internalRefreshUnreads())
1510 }
1511 async internalLoadDiscoveryCore() {
1512 try {
1513 const e = await this.privateProfile.db.get("@keet-private-id/identity")
1514 if (!e || !e.discoveryCoreKey || this.closing) return
1515 if (this.discoveryCore) return
1516 ;((this.discoveryCore = this.store.get({ key: e.discoveryCoreKey })),
1517 await this.discoveryCore.ready(),
1518 this.blindPeering.addCoreBackground(this.discoveryCore, { pick: 3 }))
1519 } catch (e) {
1520 this.onerror(e)
1521 }
1522 }
1523 async internalCreateDiscoveryCore(e) {
1524 const t = e.getProfileDiscoveryEncryptionKey(),
1525 i = { version: 2, signers: [{ publicKey: e.profileDiscoveryKeyPair.publicKey }] }
1526 return (
1527 this.discoveryCore && (await this.discoveryCore.close()),
1528 (this.discoveryCore = this.store.get({
1529 keyPair: e.profileDiscoveryKeyPair,
1530 valueEncoding: ce,
1531 encryptionKey: t,
1532 manifest: i,
1533 })),
1534 await this.discoveryCore.ready(),
1535 this.blindPeering.addCoreBackground(this.discoveryCore, { pick: 3 }),
1536 (this.discoveryCoreSession = this.swarm.join(this.discoveryCore.discoveryKey, {
1537 server: !1,
1538 client: !0,
1539 })),
1540 !0
1541 )
1542 }
1543 async internalDryRun(e, t, i) {
1544 const s = i.map((t, i) => ({
1545 length: e.base.local.length + 1 + i,
1546 from: e.base.local,
1547 value: t,
1548 heads: [],
1549 }))
1550 return !!(await this._autobaseApply(s, t, e.base, { dryRun: !0 }))
1551 }
1552 internalGetHeads(e, t) {
1553 const i = []
1554 let s = !1
1555 if (t)
1556 for (const r of t.base.heads())
1557 e && v.equals(r.key, e.key)
1558 ? ((s = !0), i.push({ key: r.key, length: Math.max(r.length, e.length) }))
1559 : i.push(r)
1560 return (e && !s && i.push(e), i)
1561 }
1562 async internalGetKeyPair(e) {
1563 const t = await this.local.get("@local/writers-by-room-key", { roomKey: e })
1564 return t ? t.keyPair : null
1565 }
1566 async internalGetMailbox(e) {
1567 const t = await this.local.get("@local/rooms", { roomKey: e })
1568 return t
1569 ? { key: t.capabilities.mailboxKeyPair.publicKey, discoveryKey: t.capabilities.wakeupTopic }
1570 : null
1571 }
1572 async internalGetEncryptionKey(e) {
1573 const t = await this.local.get("@local/rooms", { roomKey: e })
1574 return !t || t.status.isRemoved ? null : t.encryptionKey
1575 }
1576 internalReleaseRoom(e) {
1577 if (0 === e.refs) throw new Error("Cannot release a room that was not previously opened")
1578 e.refs -= 1
1579 }
1580 internalOpenExistingRoom(e, t = {}) {
1581 return this.internalOpenRoom(i.decode(e), null, t)
1582 }
1583 async internalOpenPrivateProfile({ opening: e = !1 } = {}) {
1584 e || this.onlineBoot.opened || (await this.onlineBoot.ready())
1585 const t = await this.local.get("@local/identity"),
1586 i = this.internalOpenExistingRoom(t.privateProfileKey, { bigBatches: !0 })
1587 return (
1588 await i.ready(),
1589 (this.privateProfile && v.equals(i.key, this.privateProfile.key)) ||
1590 (this.privateProfile && this.internalReleaseRoom(this.privateProfile),
1591 (this.privateProfile = this.internalOpenExistingRoom(t.privateProfileKey, {
1592 bigBatches: !0,
1593 })),
1594 (this.unreadsLoading = this.internalRefreshUnreads().catch(() => null))),
1595 this.internalLoadDiscoveryCore(),
1596 i
1597 )
1598 }
1599 async internalSafeSwapPrivateProfiles() {
1600 try {
1601 const e = await this.internalOpenPrivateProfile()
1602 this.internalReleaseRoom(e)
1603 } catch (e) {
1604 this.onerror(e)
1605 }
1606 }
1607 async internalFeatureSupported(e, t) {
1608 const s = i.decode(e),
1609 r = await this.local.get("@local/rooms", { roomKey: s })
1610 return !!r && this.versions.isFeatureSupported(r.digest.abi.version, t)
1611 }
1612 internalOpenRoom(e, t, { fastForwardTo: s, mailbox: r, keyPair: o, bigBatches: a } = {}) {
1613 if (this.closing) throw new Error("Keet is closing")
1614 const n = i.encode(e),
1615 l = this.rooms.get(n)
1616 if (l) return ((l.idleTicks = 0), (l.refs += 1), l)
1617 const c = b.discoveryKey(e),
1618 d = this.store.namespace(c)
1619 let y = null,
1620 u = null,
1621 p = null
1622 ;(r || ((u = this.internalGetMailbox(e)), u.catch(this.onerror)),
1623 o || ((y = this.internalGetKeyPair(e)), y.catch(this.onerror)),
1624 t || ((p = this.internalGetEncryptionKey(e)), p.catch(this.onerror)),
1625 r && (r = { key: r, discoveryKey: b.discoveryKey(r) }))
1626 const m = new h(d, e, {
1627 backoff: this.backoff,
1628 update: this._autobaseUpdate.bind(this),
1629 apply: this._autobaseApply.bind(this),
1630 close: this._autobaseClose.bind(this),
1631 open: this._autobaseOpen.bind(this),
1632 encryptionKey: t || p,
1633 wakeupCapability: r || u,
1634 keyPair: o || y,
1635 fastForward: !this.debug.disableFastForward && s,
1636 ackThreshold: this.ackThreshold,
1637 ackInterval: this.ackInterval,
1638 wakeup: this.protomuxWakeup,
1639 optimistic: !0,
1640 encrypted: !0,
1641 bigBatches: !!a,
1642 })
1643 ;(m.on("interrupt", (e) => {
1644 ;(this.logger.warn("room=", m.id, "got interrupted"), this.emit("room-interrupted", n, e))
1645 }),
1646 m.on("warning", (t) => {
1647 ;(this.logger.warn("[autobase warning] room=", m.id, "error=", t),
1648 this.onerror(t, { roomKey: e, prefix: "AUTOBASE_WARNING" }))
1649 }),
1650 m.on("error", (t) => {
1651 ;(this.logger.warn("[autobase error] room=", m.id, "error=", t),
1652 this.onerror(t, { roomKey: e, prefix: "AUTOBASE_ERROR" }))
1653 }))
1654 const g = new Fe(this, n, e, c, m)
1655 return (this.rooms.set(n, g), (g.refs += 1), g)
1656 }
1657 async updateDevice({ name: e } = {}) {
1658 this.onlineBoot.opened || (await this.onlineBoot.ready())
1659 const t = { swarmKey: this.swarm.keyPair.publicKey, name: e, isMobile: this.isMobile },
1660 i = await this.internalOpenPrivateProfile()
1661 try {
1662 await i.dispatch("@keet/update-device", { profile: t })
1663 } finally {
1664 this.internalReleaseRoom(i)
1665 }
1666 }
1667 async internalUpdateProfile(e, { forceUpdateRegistry: t = !1, opening: i = !1 } = {}) {
1668 const s = await this.internalGetIdentityInfo({ opening: i })
1669 if (this.closing) return
1670 if (this._rejectAnonymousProfiles && !e.displayName && !t)
1671 throw new Error("A member must have a profile name")
1672 const r = this.internalCreateMemberUpdate(s, { profile: e }),
1673 o = await this.internalOpenPrivateProfile({ opening: i })
1674 if (this.closing) return
1675 let a = null
1676 try {
1677 a = await o.dispatch("@keet/update-member", { member: r })
1678 } finally {
1679 this.internalReleaseRoom(o)
1680 }
1681 ;(a || t) && r.profile.username && this.userRegistry?.internalUpdateRegistryMember(r)
1682 }
1683 async updateProfile(e = {}) {
1684 return (
1685 this.onlineBoot.opened || (await this.onlineBoot.ready()),
1686 this.internalUpdateProfile(e)
1687 )
1688 }
1689 async internalVerifyOptimisticCore(e) {
1690 return !(await e.getUserData("referrer"))
1691 }
1692 async internalAppendOptimisticOperation(e, t) {
1693 const i = this.store.get({ key: e, exclusive: !0 })
1694 ;(await i.ready(),
1695 (await this.internalVerifyOptimisticCore(i))
1696 ? (await i.append(t), await i.close())
1697 : await i.close())
1698 }
1699 async internalCreateRoom(e = {}) {
1700 const t = e.seed || b.randomBytes(32),
1701 i = e.keyPair || b.keyPair(),
1702 s = e.encryptionKey || b.randomBytes(32),
1703 r = N(i.publicKey),
1704 o = b.discoveryKey(r),
1705 a = $(r, t),
1706 n = a.mailboxKeyPair.publicKey,
1707 l = await this.internalEnterLocalTransaction()
1708 try {
1709 ;(await l.insert("@local/writers", { mailbox: n, keyPair: i, key: r, roomKey: r }),
1710 await l.flush())
1711 } finally {
1712 await this.internalExitLocalTransaction()
1713 }
1714 const c = {
1715 header: { timestamp: Date.now() },
1716 digest: {
1717 abi: { version: this.isExperimental ? this.abi.production : this.abi.autoupgrade },
1718 creationTime: Date.now(),
1719 settings: {
1720 roomType: 1,
1721 ...e.settings,
1722 isExperimental: this.isExperimental,
1723 buildType: this.buildType,
1724 },
1725 },
1726 capabilities: { seed: t },
1727 config: e.config,
1728 identity: e.identity,
1729 initialMembers: e.initialMembers,
1730 bootstrapDevice: e.bootstrapDevice,
1731 },
1732 h = this.tasks.createRoom(o, {
1733 roomKey: r,
1734 encryptionKey: s,
1735 mailbox: n,
1736 keyPair: i,
1737 genesis: c,
1738 isPrivateProfile: !!e.isPrivateProfile,
1739 })
1740 return (
1741 await h.run(),
1742 this.discovery &&
1743 this.discovery.subscribe(a.discoveryKeyPair.publicKey, { since: Date.now() }),
1744 this.swarmWorker.refresh().catch(Je),
1745 this.internalOpenExistingRoom(r)
1746 )
1747 }
1748 async createRoom(e) {
1749 this.opened || (await this.ready())
1750 const t = await this.internalCreateRoom(e)
1751 return (this.internalReleaseRoom(t), t.key)
1752 }
1753 async leaveRoom(e) {
1754 this.onlineBoot.opened || (await this.onlineBoot.ready())
1755 const t = await this.local.get("@local/identity"),
1756 i = this.internalOpenExistingRoom(e)
1757 await i.ready()
1758 try {
1759 await i.dispatch("@keet/remove-member", { key: t.publicKey })
1760 } catch (e) {
1761 this.onerror(e)
1762 } finally {
1763 this.internalReleaseRoom(i)
1764 }
1765 await this.privateProfile.dispatch("@keet-private-id/update-room-status", {
1766 roomKey: e,
1767 key: Y.IsActive,
1768 status: { isActive: !1 },
1769 })
1770 }
1771 async activateRoom(e) {
1772 if (this.closing) return
1773 const t = await this.local.get("@local/rooms", { roomKey: e })
1774 if (!t || this.closing) return
1775 const i = this.internalOpenExistingRoom(e)
1776 ;(await i.ready(),
1777 this.activeRooms.has(i)
1778 ? this.internalReleaseRoom(i)
1779 : (this.activeRooms.add(i),
1780 this.swarmWorker.startActiveSwarming(t.capabilities.swarmTopic)))
1781 }
1782 async deactivateRoom(e) {
1783 const t = this.internalOpenExistingRoom(e)
1784 if (!this.activeRooms.has(t)) return void this.internalReleaseRoom(t)
1785 const i = await this.local.get("@local/rooms", { roomKey: e })
1786 ;(this.activeRooms.delete(t),
1787 this.swarmWorker.stopActiveSwarming(i.capabilities.swarmTopic),
1788 this.internalReleaseRoom(t),
1789 this.internalReleaseRoom(t))
1790 }
1791 async internalGetIdentityInfo({ opening: e = !1 } = {}) {
1792 e || this.onlineBoot.opened || (await this.onlineBoot.ready())
1793 const t = await this.local.get("@local/identity")
1794 if (!t) throw new Error("Identity does not exist")
1795 const i = await this.local.get("@local/rooms", { roomKey: t.privateProfileKey })
1796 if (!i) throw new Error("Private profile does not exist")
1797 return { identity: t, privateProfile: i }
1798 }
1799 internalGetMemberUpdate(e, { profile: t } = {}) {
1800 const i = e.privateProfile
1801 return i?.selfMember
1802 ? i.selfMember.proofs
1803 ? {
1804 profile: i.selfMember.profile,
1805 attestation: {
1806 memberKey: i.selfMember.key,
1807 proof: i.selfMember.proofs.profileAttestation,
1808 },
1809 }
1810 : this.internalCreateMemberUpdate(e)
1811 : null
1812 }
1813 internalCreateDeviceUpdate(t, i, { isPrivateProfile: s = !1, buildType: r = null } = {}) {
1814 const o = t.identity
1815 let a = null
1816 t.privateProfile?.selfDevice && s && (a = t.privateProfile.selfDevice.profile.name)
1817 const n = t.privateProfile?.digest.settings.buildType,
1818 l = he.Production === n
1819 return {
1820 profile: {
1821 swarmKey: this.swarm.keyPair.publicKey,
1822 name: a,
1823 isMobile: this.isMobile,
1824 buildType: l && null === r ? null : n,
1825 },
1826 attestation: {
1827 memberKey: o.publicKey,
1828 proof: e.attestData(i, o.deviceKeyPair, o.deviceProof),
1829 },
1830 }
1831 }
1832 internalCreateMemberUpdate(t, { profile: i } = {}) {
1833 const s = t.privateProfile?.selfMember?.profile || null,
1834 r = t.privateProfile?.capabilities.mailboxKeyPair.publicKey || i.mailbox,
1835 o = t.identity,
1836 a = { ...s, ...i, mailbox: r, timestamp: Date.now() },
1837 n = oe("@keet/member-profile", a)
1838 return {
1839 profile: a,
1840 attestation: {
1841 memberKey: o.publicKey,
1842 proof: e.attestData(n, o.deviceKeyPair, o.deviceProof),
1843 },
1844 }
1845 }
1846 internalGetLinkInfo(e) {
1847 try {
1848 return this.internalDecodeInvitation(e)
1849 } catch {}
1850 try {
1851 return this.internalDecodeContactInfo(e)
1852 } catch {}
1853 return null
1854 }
1855 internalDecodeInvitation(e) {
1856 try {
1857 const t = "string" == typeof e ? f.decode(e) : e
1858 return ae("@keet/sendable-invitation", t)
1859 } catch {
1860 throw pe.INVALID_INVITE(`Invalid invite: ${e}`)
1861 }
1862 }
1863 internalDecodeContactInfo(e) {
1864 try {
1865 const t = v.isBuffer(e) ? e : v.from(e, "base64")
1866 return ae("@keet/member-contact-info", t)
1867 } catch {
1868 throw pe.INVALID_CONTACT_INFO(`Invalid contact info: ${e}`)
1869 }
1870 }
1871 internalEncodeContactInfo(e) {
1872 return oe("@keet/member-contact-info", e)
1873 }
1874 internalCreateContactInfoStruct(t, i, s = {}) {
1875 const r = { ...i.selfMember.profile, ...s },
1876 o = oe("@keet/member-profile", r),
1877 a = {
1878 profile: r,
1879 attestation: {
1880 memberKey: i.selfMember.key,
1881 proof: e.attestData(o, t.deviceKeyPair, t.deviceProof),
1882 },
1883 }
1884 return this.internalEncodeContactInfo(a)
1885 }
1886 async wakeup() {
1887 ;((this.state = we.WAKEUP), this.opened || (await this.ready()))
1888 const e = [this.resume(), this.swarmWorker.background()]
1889 await Promise.allSettled(e)
1890 }
1891 async presuspend() {
1892 ;((this.state = we.PRESUSPEND),
1893 this.opened || (await this.ready()),
1894 this.swarmWorker.setServerMode(!1))
1895 }
1896 async suspend() {
1897 if ((this.internalVerboseLog("Core, suspend called"), this.state === we.SUSPEND)) return
1898 ;((this.state = we.SUSPEND),
1899 this.opened || (await this.ready()),
1900 this.internalVerboseLog("Core, suspend post ready"))
1901 const e = [this._flushDHTCache()]
1902 ;(this.blindPeering &&
1903 (this.internalVerboseLog("Core, suspend adding blind peering"),
1904 e.push(this.blindPeering.suspend())),
1905 this.push && (this.internalVerboseLog("Core, suspend push"), e.push(this.push.suspend())),
1906 this.discovery &&
1907 (this.internalVerboseLog("Core, suspend discovery"), e.push(this.discovery.suspend())),
1908 await Promise.allSettled(e),
1909 this.internalVerboseLog("Core, all done"),
1910 await this.rpcClient.suspend(),
1911 this.internalVerboseLog("Core, rpc suspended"),
1912 await this.swarm.suspend(),
1913 this.internalVerboseLog("Core, swarm suspend"),
1914 await this.files.server.suspend(),
1915 this.internalVerboseLog("Core, files suspend"),
1916 await this.store.suspend(),
1917 this.internalVerboseLog("Core, store suspended, all done"))
1918 }
1919 async resume() {
1920 if (this.state === we.RESUME) return
1921 ;((this.state = we.RESUME),
1922 this.opened || (await this.ready()),
1923 await this.store.resume(),
1924 await this.files.server.resume(),
1925 this.readOnly || (await this.swarm.resume()),
1926 await this.rpcClient.resume())
1927 const e = []
1928 ;(this.blindPeering && !this.readOnly && e.push(this.blindPeering.resume()),
1929 this.push && e.push(this.push.resume()),
1930 this.discovery && e.push(this.discovery.resume()),
1931 this.swarmWorker.setServerMode(!0),
1932 e.push(this.swarmWorker.unbackground()),
1933 await Promise.allSettled(e))
1934 }
1935 async _createInvitation(e, t) {
1936 let {
1937 expiration: i = 0,
1938 canAdmin: s = !1,
1939 canModerate: r = !1,
1940 identityPublicKey: o = null,
1941 requiresConfirmation: a = !1,
1942 readOnly: n = !1,
1943 } = t
1944 if ("string" == typeof i)
1945 if ("2h" === i) i = Date.now() + 72e5
1946 else if ("2d" === i) i = Date.now() + 1728e5
1947 else {
1948 if ("2w" !== i) throw pe.UNKNOWN_EXPIRATION(`Unknown expiration: ${i}`, { roomKey: e.key })
1949 i = Date.now() + 12096e5
1950 }
1951 await e.ready()
1952 const [{ seed: l }, c, h] = await Promise.all([
1953 e.db.get("@keet/room-capabilities"),
1954 H(e.db, e.deviceKey),
1955 e.db.get("@keet/system-digest"),
1956 ])
1957 if ((r || s) && !c.status.isModerator)
1958 throw pe.MODERATORS_ONLY("Only moderators can create moderator invitations", {
1959 roomKey: e.key,
1960 })
1961 const d = $(e.key, l),
1962 y = this.swarm.dht.toArray({ limit: 3 })
1963 if (n)
1964 return oe("@keet/sendable-invitation", {
1965 readonly: {
1966 roomKey: e.key,
1967 encryptionKey: e.encryptionKey,
1968 fastForwardTo: e.base.getSystemKey(),
1969 seed: l,
1970 },
1971 additionalNodes: y,
1972 })
1973 const u = { key: e.key, encryptionKey: e.encryptionKey, fastForwardTo: e.base.getSystemKey() },
1974 { invitation: p, seed: m } = W(u, {
1975 requiresConfirmation: a,
1976 expiration: i,
1977 canModerate: r,
1978 canAdmin: s,
1979 })
1980 await e.dispatch("@keet/add-invitation", { invitation: p })
1981 const g = (await e.db.get("@keet/invitations", { id: p.id })).anchor,
1982 b = d.mailboxKeyPair.publicKey,
1983 w = {
1984 identity: null,
1985 room: null,
1986 contact: null,
1987 additionalNodes: y,
1988 buildType: h.settings.buildType,
1989 }
1990 return (
1991 o
1992 ? (w.identity = { mailbox: b, invitationSeed: m, anchor: g, identityPublicKey: o })
1993 : (w.room = { mailbox: b, invitationSeed: m, anchor: g }),
1994 oe("@keet/sendable-invitation", w)
1995 )
1996 }
1997 async createRoomInvitation(e, t = {}) {
1998 this.opened || (await this.ready())
1999 const s = i.decode(e),
2000 r = this.internalOpenExistingRoom(s)
2001 try {
2002 const e = await this._createInvitation(r, t)
2003 return f.encode(e)
2004 } finally {
2005 this.internalReleaseRoom(r)
2006 }
2007 }
2008 async createIdentityInvitation() {
2009 this.onlineBoot.opened || (await this.onlineBoot.ready())
2010 const e = await this.local.get("@local/identity"),
2011 t = this.internalOpenExistingRoom(e.privateProfileKey)
2012 this.blindPeering.addAutobaseBackground(t.base)
2013 try {
2014 const i = await this._createInvitation(t, {
2015 expiration: "2h",
2016 canAdmin: !0,
2017 canModerate: !0,
2018 requiresConfirmation: !0,
2019 identityPublicKey: e.publicKey,
2020 })
2021 return f.encode(i)
2022 } finally {
2023 this.internalReleaseRoom(t)
2024 }
2025 }
2026 async _startPairing(e, { deviceKeyPair: t, buildType: s = null } = {}) {
2027 this.onlineBoot.opened || (await this.onlineBoot.ready())
2028 const r = F(e.invitationSeed),
2029 o = e.invitationSeed,
2030 a = e.mailbox,
2031 n = e.anchor,
2032 l = { key: null, seedId: i.encode(o) },
2033 c = await this.local.get("@local/rooms-by-mailbox", {
2034 capabilities: { mailboxKeyPair: { publicKey: a } },
2035 })
2036 let h = null
2037 if (c) {
2038 if (c.selfMember?.status.isRemoved) throw new Error("Removed member cannot rejoin")
2039 h = await this.local.get("@local/room-preferences", { roomKey: c.roomKey })
2040 }
2041 if (h && h.status.isActive && !h.status.isReadOnly) return ((l.key = i.encode(c.roomKey)), l)
2042 const d = b.keyPair(),
2043 y = await this.store.createKeyPair(G(d.publicKey)),
2044 u = this.store.get({ keyPair: y, active: !1 })
2045 await u.ready()
2046 const p = { key: u.key, length: 1 }
2047 await u.close()
2048 let m = null
2049 t && (m = { writerKey: u.key, publicKey: e.identityPublicKey, devicePublicKey: t.publicKey })
2050 const g = {
2051 id: r,
2052 mailbox: a,
2053 inviter: n,
2054 identity: m,
2055 initiator: p,
2056 responseKeyPair: d,
2057 invitationSeed: o,
2058 buildType: s,
2059 },
2060 w = await this.privateProfile.db.find("@keet-private-id/pending-invitations").toArray()
2061 for (const e of w)
2062 v.equals(e.mailbox, g.mailbox) &&
2063 (await this.privateProfile.dispatch("@keet-private-id/remove-pending-invitation", e))
2064 return (
2065 await this.privateProfile.dispatch("@keet-private-id/add-pending-invitation", {
2066 invitation: g,
2067 }),
2068 l
2069 )
2070 }
2071 async _openReadOnlyRoom({ roomKey: e, encryptionKey: t, seed: s, fastForwardTo: r }) {
2072 this.onlineBoot.opened || (await this.onlineBoot.ready())
2073 const { mailboxKeyPair: o, swarmTopic: a } = $(e, s),
2074 n = this.internalOpenRoom(e, t, { mailbox: o.publicKey, fastForwardTo: { key: r } })
2075 return (
2076 await n.ready(),
2077 await this.privateProfile.dispatch("@keet-private-id/add-room", {
2078 roomKey: e,
2079 encryptionKey: t,
2080 mailbox: o.publicKey,
2081 fastForwardTo: r,
2082 isReadOnly: !0,
2083 }),
2084 this.swarmWorker.startDiscoverySwarming(a, { roomId: i.encode(e) }),
2085 { key: i.encode(e), seedId: i.encode(s) }
2086 )
2087 }
2088 async startPairingRoom(e, t) {
2089 this.onlineBoot.opened || (await this.onlineBoot.ready())
2090 const i = this.internalDecodeInvitation(e),
2091 s = await this.local.get("@local/rooms", { roomKey: this.privateProfile.key }),
2092 r = i.buildType,
2093 o = s.digest.settings.buildType || he.Production
2094 if (r && r !== o) throw pe.INVALID_BUILD_TYPE()
2095 if (i.readonly) return this._openReadOnlyRoom(i.readonly)
2096 if (!i.room) throw pe.INVALID_INVITATION_TYPE("Invalid room invitation")
2097 return this._startPairing(i.room, { ...t, buildType: r })
2098 }
2099 async startPairingIdentity(e) {
2100 this.onlineBoot.opened || (await this.onlineBoot.ready())
2101 const t = this.internalDecodeInvitation(e),
2102 i = await this.local.get("@local/rooms", { roomKey: this.privateProfile.key }),
2103 s = t.buildType,
2104 r = i.digest.settings.buildType || he.Production
2105 if (s && s !== r) throw pe.INVALID_BUILD_TYPE()
2106 if (!t.identity) throw pe.INVALID_INVITATION_TYPE("Invalid device sync invitation")
2107 const o = j(t.identity.identityPublicKey),
2108 a = await this.store.createKeyPair(o)
2109 return this._startPairing(t.identity, { deviceKeyPair: a, buildType: s })
2110 }
2111 async stopPairing(e) {
2112 this.opened || (await this.ready())
2113 const t = await this.internalOpenPrivateProfile()
2114 try {
2115 if (!(await t.db.get("@keet-private-id/pending-invitations", { id: e }))) return
2116 await t.dispatch("@keet-private-id/remove-pending-invitation", { id: e })
2117 } finally {
2118 this.internalReleaseRoom(t)
2119 }
2120 }
2121 async rotateWriter(e) {
2122 this.onlineBoot.opened || (await this.onlineBoot.ready())
2123 const [t, i, s] = await Promise.all([
2124 this.local.get("@local/writers-by-room-key", { roomKey: e }),
2125 this.local.get("@local/rooms", { roomKey: e }),
2126 this.privateProfile.db.get("@keet-private-id/rooms", { roomKey: e }),
2127 ])
2128 if (!i || !t || !s) return
2129 const r = await this.internalEnterLocalTransaction()
2130 try {
2131 ;(await r.delete("@local/writers", t), await r.flush())
2132 } finally {
2133 await this.internalExitLocalTransaction()
2134 }
2135 this.tasks.joinRoomKeys(s.mailbox, { keys: s }).runBackground()
2136 }
2137 async getRecoveryPhrase() {
2138 this.onlineBoot.opened || (await this.onlineBoot.ready())
2139 const e = (await this.local.get("@local/identity")).entropy
2140 return e ? E({ entropy: e }) : null
2141 }
2142 async getEncryptedRecoveryPhrase(e) {
2143 if ("string" != typeof e) throw new Error("Password required")
2144 if (0 === e.length) throw new Error("Password should not be empty")
2145 const t = await this.getRecoveryPhrase()
2146 if ("string" != typeof t) throw new Error("Recovery phrase reading failed")
2147 if (0 === t.length) throw new Error("Recovery phrase reading failed")
2148 return S.encryptPhrase(t, e)
2149 }
2150 decryptEncryptedRecoveryPhrase(e, t) {
2151 if (!ArrayBuffer.isView(e)) throw new Error("Encrypted phrase should be an ArrayBuffer view")
2152 if (0 === e.byteLength) throw new Error("Encrypted phrase should not be empty")
2153 if ("string" != typeof t) throw new Error("Password required")
2154 if (0 === t.length) throw new Error("Password should not be empty")
2155 return S.decryptPhrase(e, t)
2156 }
2157 freeRecoveryPhrase(e) {
2158 S.free(e)
2159 }
2160 async storeRecoveryPhrase(t) {
2161 this.onlineBoot.opened || (await this.onlineBoot.ready())
2162 const i = await e.from({ mnemonic: t }),
2163 s = await this.local.get("@local/identity"),
2164 r = await this.local.get("@local/rooms", { roomKey: s.privateProfileKey })
2165 if (!v.equals(s.publicKey, i.identityPublicKey)) throw new Error("Wrong recovery phrase")
2166 if (!r.identity.discoveryCoreKey) {
2167 if ((await this.internalCreateDiscoveryCore(i), this.discoveryCore.length > 0)) {
2168 const e = Math.floor((Date.now() - Ae) / 1e3)
2169 await this.discoveryCore.truncate(this.discoveryCore.length, e)
2170 }
2171 ;(await this.discoveryCore.append({
2172 version: 1,
2173 timestamp: Date.now(),
2174 key: r.roomKey,
2175 mailbox: r.capabilities.mailboxKeyPair.publicKey,
2176 }),
2177 await this.privateProfile.dispatch("@keet-private-id/update-identity", {
2178 identity: { publicKey: i.identityPublicKey, discoveryCoreKey: this.discoveryCore.key },
2179 }))
2180 }
2181 }
2182 async confirmRecoveryPhrase({ persist: e = !1 } = {}) {
2183 this.onlineBoot.opened || (await this.onlineBoot.ready())
2184 const t = await this.local.get("@local/identity")
2185 ;(e || (t.entropy = null), (t.status.isConfirmed = !0))
2186 const i = await this.internalEnterLocalTransaction()
2187 try {
2188 ;(await i.insert("@local/identity", t), await i.flush())
2189 } finally {
2190 await this.internalExitLocalTransaction()
2191 }
2192 this.emit("identity-changed")
2193 }
2194 async restoreIdentity(t, { create: i = !0 } = {}) {
2195 this.onlineBoot.opened || (await this.onlineBoot.ready())
2196 const [s] = await Promise.all([this.local.get("@local/identity"), e.from({ mnemonic: t })]),
2197 r = b.discoveryKey(s.privateProfileKey),
2198 o = this.tasks.restoreIdentity(r, {
2199 mnemonic: t,
2200 recover: !1 === i,
2201 profileDiscoveryTimeout: this._profileDiscoveryTimeout,
2202 buildType: this.buildType,
2203 })
2204 await o.run()
2205 const a = await this.local.get("@local/identity"),
2206 n = await this.local.get("@local/rooms", { roomKey: a.privateProfileKey })
2207 ;((this.privateProfile = await this.internalOpenPrivateProfile()),
2208 this.swarmWorker.startActiveSwarming(n.capabilities.swarmTopic))
2209 }
2210 async acceptJoinRequest(e, t) {
2211 this.onlineBoot.opened || (await this.onlineBoot.ready())
2212 const i = this.internalOpenExistingRoom(e)
2213 try {
2214 const s = await i.db.get("@keet/join-requests", { deviceKey: t })
2215 if (!s) return
2216 const r = s.request
2217 let o = null
2218 if (r.identity) {
2219 const i = await this.local.get("@local/identity")
2220 if (!v.equals(i.privateProfileKey, e))
2221 throw new Error(
2222 "Accepting an identity device join request on a room that is not your private profile",
2223 )
2224 o = je(i, t, r.identity.devicePublicKey)
2225 }
2226 await i.dispatch("@keet/accept-join-request", { deviceKey: t, identity: o })
2227 } finally {
2228 this.internalReleaseRoom(i)
2229 }
2230 }
2231 async rejectJoinRequest(e, t) {
2232 this.opened || (await this.ready())
2233 const i = this.internalOpenExistingRoom(e)
2234 try {
2235 if (!(await i.db.get("@keet/join-requests", { deviceKey: t })))
2236 throw new Error("Join request for that device key does not exist")
2237 await i.dispatch("@keet/reject-join-request", { deviceKey: t })
2238 } finally {
2239 this.internalReleaseRoom(i)
2240 }
2241 }
2242 async _sendContactRequest(e) {
2243 this.onlineBoot.opened || (await this.onlineBoot.ready())
2244 const t = await this.internalOpenPrivateProfile()
2245 try {
2246 this.tasks.sendContactRequest(e.memberKey, e).runBackground()
2247 } finally {
2248 this.internalReleaseRoom(t)
2249 }
2250 }
2251 async sendContactRequestFromContact(e, { message: t }) {
2252 const i = (e = this.internalDecodeContactInfo(e)).attestation.memberKey,
2253 s = e.attestation.memberKey
2254 return this._sendContactRequest({ roomKey: i, memberKey: s, message: t, contactInfo: e })
2255 }
2256 async sendContactRequest(e, t, { message: i }) {
2257 return this._sendContactRequest({ roomKey: e, memberKey: t, message: i })
2258 }
2259 async blockContact(e) {
2260 this.onlineBoot.opened || (await this.onlineBoot.ready())
2261 const [t, i, s] = await Promise.all([
2262 this.privateProfile.db.findOne("@keet-private-id/contact-requests-by-member", {
2263 gte: { memberKey: e },
2264 lte: { memberKey: e },
2265 }),
2266 this.local.get("@local/contacts", { memberKey: e }),
2267 this.local.get("@local/members", { key: e }),
2268 ]),
2269 r = i?.mailbox || s?.profile.mailbox || t?.sender?.mailbox
2270 if (!r) throw new Error("Cannot find contact")
2271 await this.privateProfile.dispatch("@keet-private-id/add-contact", {
2272 contact: { memberKey: e, mailbox: r, status: { isBlocked: !0 } },
2273 })
2274 }
2275 async unblockContact(e) {
2276 this.onlineBoot.opened || (await this.onlineBoot.ready())
2277 const [t, i, s] = await Promise.all([
2278 this.privateProfile.db.findOne("@keet-private-id/contact-requests-by-member", {
2279 gte: { memberKey: e },
2280 lte: { memberKey: e },
2281 }),
2282 this.local.get("@local/contacts", { memberKey: e }),
2283 this.local.get("@local/members", { key: e }),
2284 ]),
2285 r = i?.mailbox || s?.profile.mailbox || t?.sender?.mailbox
2286 if (!r) throw new Error("Cannot find contact")
2287 await this.privateProfile.dispatch("@keet-private-id/add-contact", {
2288 contact: { memberKey: e, mailbox: r, status: { isBlocked: !1 } },
2289 })
2290 }
2291 async _flushDHTCache() {
2292 if (this.readOnly) return
2293 const e = this.swarm.dht.toArray({ limit: Oe })
2294 try {
2295 await this._setCachedDHTNodes(e)
2296 } catch (e) {
2297 this.onerror(e)
2298 }
2299 }
2300 async getDHTSettings() {
2301 const e = (await this.local.get("@local/hyperdht")) || {}
2302 return {
2303 nodes: e.nodes || [],
2304 concurrency: e.concurrency || X.concurrency,
2305 maxWindow: e.maxWindow || X.maxWindow,
2306 randomPunchInterval: e.randomPunchInterval || X.randomPunchInterval,
2307 connectionKeepAlive: e.connectionKeepAlive || X.connectionKeepAlive,
2308 }
2309 }
2310 async _setCachedDHTNodes(e) {
2311 const t = await this.internalEnterLocalTransaction()
2312 try {
2313 const i = { ...(await this.getDHTSettings()), nodes: e }
2314 ;(await t.insert("@local/hyperdht", i), await t.flush())
2315 } finally {
2316 await this.internalExitLocalTransaction()
2317 }
2318 }
2319 batch(e) {
2320 return new Ne(this, e)
2321 }
2322 async dispatch(e, t, i) {
2323 this.opened || (await this.ready())
2324 const s = this.internalOpenExistingRoom(e)
2325 try {
2326 return await s.dispatch(t, i)
2327 } catch (e) {
2328 this.onerror(e)
2329 } finally {
2330 this.internalReleaseRoom(s)
2331 }
2332 }
2333 async dispatchBatch(e, t) {
2334 this.opened || (await this.ready())
2335 const i = this.internalOpenExistingRoom(e)
2336 try {
2337 await i.dispatchBatch(t)
2338 } finally {
2339 this.internalReleaseRoom(i)
2340 }
2341 }
2342 async selfDestruct({ confirm: e } = {}) {
2343 if ("do not go gentle into that good night" !== e)
2344 throw new Error("Must confirm self destruction")
2345 ;(await this.ready(), await this.close())
2346 const t = Math.random().toString(16).slice(2),
2347 i = P.join(this.dir, "gc", t)
2348 try {
2349 await k.promises.mkdir(i, { recursive: !0 })
2350 } catch {}
2351 for (const e of ["cores", "db", "cache", "app-references"])
2352 try {
2353 await k.promises.rename(P.join(this.dir, e), P.join(i, e))
2354 } catch {}
2355 await k.promises.rm(i, { recursive: !0 })
2356 }
2357 static from(e, t) {
2358 const i = K.migrate(e),
2359 s = i.active() || i.create({ name: "default" })
2360 i.gc({ delay: fe })
2361 const r = new this(s.storage, {
2362 ...t,
2363 logout: async () => {
2364 ;(i.remove(s),
2365 await new Promise((e) => setTimeout(e, 1e3)),
2366 await r.close(),
2367 i.gc({ delay: fe }))
2368 },
2369 })
2370 return { profiles: i, keet: r }
2371 }
2372 static registerRPC(e, t, i) {
2373 return new D(e, t, i)
2374 }
2375}
2376const We = {
2377 interrupt: Je,
2378 addWriter: Je,
2379 removeWriter: Je,
2380 ackWriter: Je,
2381 preferFastForward: Je,
2382 removeable: Ye,
2383 createAnchor: (e, t) => ({ key: e, length: t }),
2384}
2385function $e(e, t, i, s, r, o, { abi: a, trace: n, dryRun: l = !1 } = {}) {
2386 return new Q.OpContext(e, t, {
2387 fork: r.core.fork,
2388 writer: { key: i.from.key, seq: i.length - 1 },
2389 genesis: 0 === r.core.length,
2390 bootstrap: s.bootstrap,
2391 router: o,
2392 hostcalls: l ? We : s,
2393 dryRun: l,
2394 abi: a,
2395 trace: n,
2396 })
2397}
2398function je(t, i, s) {
2399 const r = e.attestDevice(s, t.deviceKeyPair, t.deviceProof),
2400 o = e.attestData(i, t.deviceKeyPair, t.deviceProof)
2401 return { privateProfileIdentity: { memberKey: t.publicKey, proof: o }, deviceProof: r }
2402}
2403function Ge(e) {
2404 return (
2405 "@keet/add-chat-message" === e ||
2406 "@keet/start-call" === e ||
2407 "@keet/join-call" === e ||
2408 "@keet/leave-call" === e ||
2409 "@keet/end-call" === e
2410 )
2411}
2412function He(e) {
2413 switch (e) {
2414 case "nightly":
2415 return he.Nightly
2416 case "internal":
2417 return he.Internal
2418 case "production":
2419 return he.Production
2420 default:
2421 throw pe.INVALID_BUILD_TYPE()
2422 }
2423}
2424function Je() {}
2425function Ye() {
2426 return !0
2427}
2428function ze(e, t) {
2429 if (e.length !== t.length) return !1
2430 for (let i = 0; i < e.length; i++) if (!v.equals(e[i], t[i])) return !1
2431 return !0
2432}
keet-core-4.14.4-pretty/lib/api/v1/api.json +893 -0
……@@ -0,0 +1,893 @@
1[
2 {
3 "api": "swarm",
4 "methods": [
5 {
6 "name": "ready"
7 }
8 ]
9 },
10 {
11 "api": "core",
12 "methods": [
13 {
14 "name": "getVersion"
15 },
16 {
17 "name": "subscribeRoomVersion",
18 "subscription": true
19 },
20 {
21 "name": "subscribeForceUpdates",
22 "subscription": true
23 },
24 {
25 "name": "upgradeRoom"
26 },
27 {
28 "name": "updateUserSettings"
29 },
30 {
31 "name": "getIdentity"
32 },
33 {
34 "name": "subscribeIdentity",
35 "subscription": true
36 },
37 {
38 "name": "generateIdentity"
39 },
40 {
41 "name": "restoreIdentity"
42 },
43 {
44 "name": "getRecoveryPhrase"
45 },
46 {
47 "name": "getEncryptedRecoveryPhrase"
48 },
49 {
50 "name": "decryptEncryptedRecoveryPhrase"
51 },
52 {
53 "name": "freeRecoveryPhrase"
54 },
55 {
56 "name": "confirmRecoveryPhrase"
57 },
58 {
59 "name": "storeRecoveryPhrase"
60 },
61 {
62 "name": "confirmIdentity"
63 },
64 {
65 "name": "confirmPairingRequest"
66 },
67 {
68 "name": "subscribeIdentityPairingRequests",
69 "subscription": true,
70 "dedup": false
71 },
72 {
73 "name": "updateIdentityProfile"
74 },
75 {
76 "name": "updateIdentityDevice"
77 },
78 {
79 "name": "removeIdentityDevice"
80 },
81 {
82 "name": "getLinkInfo"
83 },
84 {
85 "name": "startPairingIdentity"
86 },
87 {
88 "name": "pairIdentity"
89 },
90 {
91 "name": "createRoom"
92 },
93 {
94 "name": "pairRoom"
95 },
96 {
97 "name": "leaveRoom"
98 },
99 {
100 "name": "startPairingRoom"
101 },
102 {
103 "name": "stopPairingRoom"
104 },
105 {
106 "name": "subscribePendingRooms",
107 "subscription": true
108 },
109 {
110 "name": "subscribePushNotificationChanges",
111 "subscription": true
112 },
113 {
114 "name": "subscribeActivateRoom",
115 "subscription": true
116 },
117 {
118 "name": "getRoomKeys"
119 },
120 {
121 "name": "resyncPrivateProfile"
122 },
123 {
124 "name": "getTipSize"
125 },
126 {
127 "name": "bookmark"
128 },
129 {
130 "name": "unbookmark"
131 },
132 {
133 "name": "subscribeBookmarks",
134 "subscription": true
135 },
136 {
137 "name": "getRoomInfo"
138 },
139 {
140 "name": "subscribeRoomInfo",
141 "subscription": true
142 },
143 {
144 "name": "searchRooms"
145 },
146 {
147 "name": "getRecentRooms"
148 },
149 {
150 "name": "getLocalRoomMetadata"
151 },
152 {
153 "name": "subscribeRecentRooms",
154 "subscription": true
155 },
156 {
157 "name": "subscribeFavoriteRooms",
158 "subscription": true
159 },
160 {
161 "name": "subscribeUnreadActivity",
162 "subscription": true
163 },
164 {
165 "name": "setRoomUnread"
166 },
167 {
168 "name": "bumpRoomPriority"
169 },
170 {
171 "name": "addDevice"
172 },
173 {
174 "name": "removeDevice"
175 },
176 {
177 "name": "getDevice"
178 },
179 {
180 "name": "getDevices"
181 },
182 {
183 "name": "getDevicesByMemberId"
184 },
185 {
186 "name": "getCurrentDeviceId"
187 },
188 {
189 "name": "moveIndexer"
190 },
191 {
192 "name": "subscribeDevice",
193 "subscription": true
194 },
195 {
196 "name": "subscribeDevices",
197 "subscription": true
198 },
199 {
200 "name": "createIdentityInvitation"
201 },
202 {
203 "name": "createInvitation"
204 },
205 {
206 "name": "updateMember"
207 },
208 {
209 "name": "isMemberMuted"
210 },
211 {
212 "name": "getMember"
213 },
214 {
215 "name": "removeMember"
216 },
217 {
218 "name": "getMembers"
219 },
220 {
221 "name": "getActiveMembers"
222 },
223 {
224 "name": "subscribeActiveMembers",
225 "subscription": true
226 },
227 {
228 "name": "getModerators"
229 },
230 {
231 "name": "getMemberCount"
232 },
233 {
234 "name": "waitUntilJoined"
235 },
236 {
237 "name": "getMemberForDevice"
238 },
239 {
240 "name": "subscribeMemberCount",
241 "subscription": true
242 },
243 {
244 "name": "subscribeMember",
245 "subscription": true
246 },
247 {
248 "name": "subscribeMembers",
249 "subscription": true
250 },
251 {
252 "name": "subscribeModerators",
253 "subscription": true
254 },
255 {
256 "name": "subscribeMemberForDevice",
257 "subscription": true
258 },
259 {
260 "name": "changeMemberRole"
261 },
262 {
263 "name": "muteMember"
264 },
265 {
266 "name": "unmuteMember"
267 },
268 {
269 "name": "getSearchMembers"
270 },
271 {
272 "name": "getPushNotificationMembers"
273 },
274 {
275 "name": "subscribeSearchMembers",
276 "subscription": true
277 },
278 {
279 "name": "subscribePushNotificationMembers",
280 "subscription": true
281 },
282 {
283 "name": "getContactInfo"
284 },
285 {
286 "name": "subscribeContactInfo",
287 "subscription": true
288 },
289 {
290 "name": "getSelfContactInfo"
291 },
292 {
293 "name": "blockMember"
294 },
295 {
296 "name": "unblockMember"
297 },
298 {
299 "name": "getBlockedMembers"
300 },
301 {
302 "name": "subscribeBlockedMembers",
303 "subscription": true
304 },
305 {
306 "name": "getConnectedMembers"
307 },
308 {
309 "name": "subscribeConnectedMembers",
310 "subscription": true
311 },
312 {
313 "name": "updateConfig"
314 },
315 {
316 "name": "getConfig"
317 },
318 {
319 "name": "subscribeConfig",
320 "subscription": true
321 },
322 {
323 "name": "updateRoomSettings"
324 },
325 {
326 "name": "disableMembershipEvents"
327 },
328 {
329 "name": "enableMembershipEvents"
330 },
331 {
332 "name": "addChatMessage"
333 },
334 {
335 "name": "updateChatMessage"
336 },
337 {
338 "name": "removeChatMessage"
339 },
340 {
341 "name": "forwardChatMessage"
342 },
343 {
344 "name": "pinChatMessage"
345 },
346 {
347 "name": "unpinChatMessage"
348 },
349 {
350 "name": "startCall"
351 },
352 {
353 "name": "joinCall"
354 },
355 {
356 "name": "leaveCall"
357 },
358 {
359 "name": "endCall"
360 },
361 {
362 "name": "addCallStream"
363 },
364 {
365 "name": "removeCallStream"
366 },
367 {
368 "name": "getActiveCalls"
369 },
370 {
371 "name": "getCalls"
372 },
373 {
374 "name": "subscribeActiveCalls",
375 "subscription": true
376 },
377 {
378 "name": "subscribeCalls",
379 "subscription": true
380 },
381 {
382 "name": "addCallStartedEvent"
383 },
384 {
385 "name": "addCallHangupEvent"
386 },
387 {
388 "name": "addCallMissedEvent"
389 },
390 {
391 "name": "addLocationSharedEvent"
392 },
393 {
394 "name": "addRoomAvatarChangedEvent"
395 },
396 {
397 "name": "addEvent"
398 },
399 {
400 "name": "removeEvent"
401 },
402 {
403 "name": "getChatMessage"
404 },
405 {
406 "name": "getChatMessageById"
407 },
408 {
409 "name": "getChatMessages"
410 },
411 {
412 "name": "getPinnedChatMessages"
413 },
414 {
415 "name": "getChatLength"
416 },
417 {
418 "name": "subscribeChatMessages",
419 "subscription": true
420 },
421 {
422 "name": "subscribeChatLength",
423 "subscription": true
424 },
425 {
426 "name": "searchChatMessages"
427 },
428 {
429 "name": "createChatSearchStream",
430 "subscription": true
431 },
432 {
433 "name": "sendDMFromContact"
434 },
435 {
436 "name": "sendDMRequest"
437 },
438 {
439 "name": "sendInvitations"
440 },
441 {
442 "name": "updatePrivateMailboxRecord"
443 },
444 {
445 "name": "getPrivateMailboxRecords"
446 },
447 {
448 "name": "subscribePrivateMailbox",
449 "subscription": true
450 },
451 {
452 "name": "getSentPrivateMailboxRecords"
453 },
454 {
455 "name": "subscribeSentPrivateMailbox",
456 "subscription": true
457 },
458 {
459 "name": "getDmByMemberId"
460 },
461 {
462 "name": "getDmRequestsByStatus"
463 },
464 {
465 "name": "subscribeDmRequestsByStatus",
466 "subscription": true
467 },
468 {
469 "name": "acceptDmRequest"
470 },
471 {
472 "name": "rejectDmRequest"
473 },
474 {
475 "name": "addReaction"
476 },
477 {
478 "name": "removeReaction"
479 },
480 {
481 "name": "getLatestReactions"
482 },
483 {
484 "name": "getReactions"
485 },
486 {
487 "name": "subscribeReactions",
488 "subscription": true
489 },
490 {
491 "name": "addChatReport"
492 },
493 {
494 "name": "removeChatReport"
495 },
496 {
497 "name": "reportMember"
498 },
499 {
500 "name": "getReportedMembers"
501 },
502 {
503 "name": "subscribeReportedMembers",
504 "subscription": true
505 },
506 {
507 "name": "getReportedMessages"
508 },
509 {
510 "name": "subscribeReportedMessages",
511 "subscription": true
512 },
513 {
514 "name": "addFileBlob"
515 },
516 {
517 "name": "addFile"
518 },
519 {
520 "name": "saveFileBlob"
521 },
522 {
523 "name": "saveFile"
524 },
525 {
526 "name": "subscribeAddFile",
527 "subscription": true
528 },
529 {
530 "name": "sendFile"
531 },
532 {
533 "name": "removeFile"
534 },
535 {
536 "name": "refreshFileLinks"
537 },
538 {
539 "name": "subscribeFileInfo",
540 "subscription": true
541 },
542 {
543 "name": "clearAllFiles"
544 },
545 {
546 "name": "getFileEntry"
547 },
548 {
549 "name": "getLocalFiles"
550 },
551 {
552 "name": "getFiles"
553 },
554 {
555 "name": "startDownload"
556 },
557 {
558 "name": "cancelDownload"
559 },
560 {
561 "name": "clearFile"
562 },
563 {
564 "name": "unclearFile"
565 },
566 {
567 "name": "getFileCleared"
568 },
569 {
570 "name": "subscribeFileCleared",
571 "subscription": true
572 },
573 {
574 "name": "subscribeFiles",
575 "subscription": true
576 },
577 {
578 "name": "getStats"
579 },
580 {
581 "name": "subscribeProgress",
582 "subscription": true
583 },
584 {
585 "name": "subscribeSystemUpdateRequest",
586 "subscription": true
587 },
588 {
589 "name": "lookupUsername"
590 },
591 {
592 "name": "lookupUserByMemberId"
593 },
594 {
595 "name": "subscribeUsername",
596 "subscription": true
597 },
598 {
599 "name": "registerUsername"
600 },
601 {
602 "name": "updateUsername"
603 },
604 {
605 "name": "searchUsername"
606 },
607 {
608 "name": "getReservationsByKey"
609 },
610 {
611 "name": "checkUsername"
612 },
613 {
614 "name": "updateRoomPreferences"
615 },
616 {
617 "name": "getRoomPreferences"
618 },
619 {
620 "name": "audit"
621 },
622 {
623 "name": "close"
624 },
625 {
626 "name": "suspend"
627 },
628 {
629 "name": "resume"
630 },
631 {
632 "name": "getDebugFlags"
633 },
634 {
635 "name": "updateDebugFlag"
636 },
637 {
638 "name": "repair"
639 },
640 {
641 "name": "rotateWriter"
642 },
643 {
644 "name": "getRoomStats"
645 },
646 {
647 "name": "compact"
648 },
649 {
650 "name": "setUnread"
651 },
652 {
653 "name": "getUnread"
654 },
655 {
656 "name": "getUnreadAnchor"
657 },
658 {
659 "name": "setUnreadAnchor"
660 },
661 {
662 "name": "subscribeUnreadAnchor",
663 "subscription": true
664 },
665 {
666 "name": "subscribeSentLength",
667 "subscription": true
668 },
669 {
670 "name": "createErrorStream",
671 "subscription": true
672 },
673 {
674 "name": "boot"
675 },
676 {
677 "name": "subscribeErrors",
678 "subscription": true
679 },
680 {
681 "name": "setCallRingingId"
682 },
683 {
684 "name": "subscribeNotifications",
685 "subscription": true
686 },
687 {
688 "name": "getDHTSettings"
689 },
690 {
691 "name": "updateDHTSettings"
692 },
693 {
694 "name": "setRoomFavorite"
695 },
696 {
697 "name": "clearOldFiles"
698 }
699 ]
700 },
701 {
702 "api": "preferences",
703 "methods": [
704 {
705 "name": "subscribe",
706 "subscription": true
707 },
708 {
709 "name": "update"
710 },
711 {
712 "name": "query"
713 }
714 ]
715 },
716 {
717 "api": "call",
718 "methods": [
719 {
720 "name": "authorize"
721 },
722 {
723 "name": "deauthorize"
724 },
725 {
726 "name": "joinPeer"
727 },
728 {
729 "name": "leavePeer"
730 },
731 {
732 "name": "requestTrack"
733 },
734 {
735 "name": "unrequestTrack"
736 },
737 {
738 "name": "signalMedia"
739 },
740 {
741 "name": "getRequestedTracks"
742 },
743 {
744 "name": "subscribeRequestedTracks",
745 "subscription": true
746 },
747 {
748 "name": "subscribeMediaSignals",
749 "subscription": true
750 },
751 {
752 "name": "subscribeProxyUpdates",
753 "subscription": true
754 },
755 {
756 "name": "shareTrack"
757 },
758 {
759 "name": "unshareTrack"
760 },
761 {
762 "name": "relayTrack"
763 },
764 {
765 "name": "unrelayTrack"
766 },
767 {
768 "name": "subscribeAvailableTracks",
769 "subscription": true
770 },
771 {
772 "name": "getAvailableTracks"
773 },
774 {
775 "name": "setPresent"
776 },
777 {
778 "name": "setNotPresent"
779 },
780 {
781 "name": "subscribePresence",
782 "subscription": true
783 },
784 {
785 "name": "getPresence"
786 }
787 ]
788 },
789 {
790 "api": "tracing",
791 "methods": [
792 {
793 "name": "start"
794 },
795 {
796 "name": "addFrontendTrace"
797 }
798 ]
799 },
800 {
801 "api": "console",
802 "methods": [
803 {
804 "name": "log"
805 },
806 {
807 "name": "warn"
808 },
809 {
810 "name": "error"
811 }
812 ]
813 },
814 {
815 "api": "network",
816 "methods": [
817 {
818 "name": "subscribe",
819 "subscription": true
820 },
821 {
822 "name": "query"
823 },
824 {
825 "name": "subscribeDebug",
826 "subscription": true
827 },
828 {
829 "name": "debug"
830 }
831 ]
832 },
833 {
834 "api": "error",
835 "methods": [
836 {
837 "name": "subscribe",
838 "subscription": true
839 }
840 ]
841 },
842 {
843 "api": "debug",
844 "methods": [
845 {
846 "name": "getCurrentRoomStats"
847 },
848 {
849 "name": "enableInspector"
850 },
851 {
852 "name": "disableInspector"
853 },
854 {
855 "name": "getInspectorKey"
856 },
857 {
858 "name": "processTop"
859 },
860 {
861 "name": "heapSnapshot"
862 },
863 {
864 "name": "hash"
865 },
866 {
867 "name": "generateSyntheticError"
868 },
869 {
870 "name": "resetUnreads"
871 }
872 ]
873 },
874 {
875 "api": "pear",
876 "methods": [
877 {
878 "name": "teardown"
879 },
880 {
881 "name": "selfDestruct"
882 }
883 ]
884 },
885 {
886 "api": "feedback",
887 "methods": [
888 {
889 "name": "send"
890 }
891 ]
892 }
893]
keet-core-4.14.4-pretty/lib/api/v1/calls.js +72 -0
……@@ -0,0 +1,72 @@
1const e = require("hypercore-id-encoding")
2module.exports = class {
3 constructor(i, { call: t, prev: n, deviceKey: o, debug: h }) {
4 ;((this.call = t),
5 (this.isOldEngine = 1 === t?.version || 1 === n?.version),
6 (this.connections = this.isOldEngine ? new s(i, n, h) : null),
7 (this.deviceId = o ? e.encode(o) : null))
8 }
9 get joined() {
10 return this.connections ? this.connections.joined : new Set()
11 }
12 get callId() {
13 return this.call ? this.call.callId : null
14 }
15 get version() {
16 return this.call ? this.call.version : 0
17 }
18 get ended() {
19 return !this.call || !this.deviceId
20 }
21 _close() {
22 this.connections && this.connections.close()
23 }
24 refresh() {
25 if (this.connections) {
26 if (this.ended) return this._close()
27 for (const e of this.call.members)
28 for (const s of e.devices) this.connections.shouldJoin(s.swarmId)
29 this.connections.refresh()
30 }
31 }
32}
33class s {
34 constructor(e, s, i) {
35 ;((this.swarm = e),
36 (this.debug = i),
37 (this._prevJoined = s ? s.joined : new Set()),
38 (this.joined = new Set(this._prevJoined)),
39 (this._shouldJoin = new Set()),
40 (this._shouldLeave = new Set(this._prevJoined)))
41 }
42 get swarmId() {
43 return e.encode(this.swarmKey)
44 }
45 get swarmKey() {
46 return this.swarm.keyPair.publicKey
47 }
48 shouldJoin(e) {
49 e !== this.swarmId && (this._shouldJoin.add(e), this._shouldLeave.delete(e))
50 }
51 refresh() {
52 ;(this._joinPeers(), this._leavePeers())
53 }
54 close() {
55 this._leavePeers()
56 }
57 _joinPeers() {
58 for (const s of this._shouldJoin)
59 this._prevJoined.has(s) ||
60 (this.swarm.joinPeer(e.decode(s)),
61 this.joined.add(s),
62 this.debug.joinPeer && this.debug.joinPeer(s))
63 this._shouldJoin = new Set()
64 }
65 _leavePeers() {
66 for (const s of this._shouldLeave)
67 (this.swarm.leavePeer(e.decode(s)),
68 this.joined.delete(s),
69 this.debug.leavePeer && this.debug.leavePeer(s))
70 this._shouldLeave = new Set()
71 }
72}
keet-core-4.14.4-pretty/lib/api/v1/decode.js +152 -0
……@@ -0,0 +1,152 @@
1const e = require("hypercore-id-encoding"),
2 t = require("b4a")
3function n({ start: e, length: t, content: n, preview: r }) {
4 return (r?.file && (r.file = d(r.file)), { range: { start: e, length: t }, url: n, preview: r })
5}
6function r(t) {
7 if (!t) return null
8 const { id: n, key: r, blob: i } = t
9 return { id: n, key: n ? e.decode(n) : r, blob: i }
10}
11function i(t) {
12 if (!t) return null
13 const { id: n, key: r, path: i, version: l, size: d } = t
14 return { id: n, key: n ? e.decode(n) : r, path: i, version: l, size: d }
15}
16function l(e) {
17 return e
18 ? {
19 ...e,
20 inlined: e.inlined ? t.from(e.inlined, "base64") : null,
21 externalBlob: r(e.externalBlob),
22 externalDrive: i(e.externalDrive),
23 }
24 : {}
25}
26function d(e) {
27 return e && (e.pointer || e.preview)
28 ? (e.metadata?.userdata && (e.metadata.userdata = t.from(e.metadata.userdata, "base64")),
29 { ...e, pointer: l(e.pointer), preview: a(e.preview) })
30 : null
31}
32function a(e) {
33 return e ? { small: d(e.small), medium: d(e.medium), large: d(e.large) } : null
34}
35function o(t, r) {
36 const i =
37 r.mentions?.map((t) => ({
38 range: { start: t.start, length: t.length },
39 memberKey: e.decode(t.memberId),
40 })) || null,
41 l =
42 r.translations?.map((e) => ({
43 range: { start: e.start, length: e.length },
44 language: e.language,
45 text: e.text,
46 })) || null,
47 a = {
48 httpLink: r?.httpLinks?.map(n),
49 pearLink: r?.pearLinks?.map(n),
50 mention: i,
51 translation: l,
52 bold: r.bold || [],
53 italic: r.italic || [],
54 code: r.code || [],
55 emoji: r?.emoji?.map(({ start: e, length: t, content: n }) => ({
56 range: { start: e, length: t },
57 content: n,
58 })),
59 codeBlock: r.codeBlock || [],
60 strike: r.strike || [],
61 },
62 o = {
63 callStarted: !0 === r?.callStarted,
64 callHangup: !0 === r?.callHangup,
65 callMissed: !0 === r?.callMissed,
66 locationShared: r?.locationShared,
67 }
68 let s = null
69 r.replyTo && (s = g(r.replyTo))
70 const c = !0 === r.forwarded,
71 u = []
72 for (const e of r?.files || []) {
73 const t = d(e)
74 t && u.push(t)
75 }
76 return { text: t, replyTo: s, forwarded: c, display: a, files: u, event: o }
77}
78function s({ gt: t, gte: n, lt: r, lte: i, limit: l, reverse: d } = {}) {
79 return {
80 limit: l,
81 reverse: d,
82 gt: t ? { key: e.decode(t) } : null,
83 gte: n ? { key: e.decode(n) } : null,
84 lt: r ? { key: e.decode(r) } : null,
85 lte: i ? { key: e.decode(i) } : null,
86 }
87}
88function c(e, t) {
89 const n = { ...t },
90 r = n.prefix || 0
91 return (
92 Number.isInteger(n.gt) && (n.gt = { id: { thread: r, index: t.gt } }),
93 Number.isInteger(n.gte) && (n.gte = { id: { thread: r, index: t.gte } }),
94 Number.isInteger(n.lt) && (n.lt = { id: { thread: r, index: t.lt } }),
95 Number.isInteger(n.lte) && (n.lte = { id: { thread: r, index: t.lte } }),
96 n.gt || n.gte || (n.gte = { id: { thread: r } }),
97 n.lt || n.lte || (n.lte = { id: { thread: r } }),
98 n
99 )
100}
101function u(
102 { reverse: e = !0, limit: t = 50, gt: n, gte: r, lt: i, lte: l, type: d } = {
103 reverse: !0,
104 limit: 50,
105 },
106) {
107 const a = { reverse: e, limit: t }
108 return (
109 Number.isInteger(n) && (a.gt = d ? { id: n, type: d } : { id: n }),
110 Number.isInteger(r) && (a.gte = d ? { id: r, type: d } : { id: r }),
111 Number.isInteger(i) && (a.lt = d ? { id: i, type: d } : { id: i }),
112 Number.isInteger(l) && (a.lte = d ? { id: l, type: d } : { id: l }),
113 d &&
114 (e && !a.lte && (a.lte = { type: d }),
115 e || a.gte || (a.gte = { type: d }),
116 a.lte && !a.gte && (a.gte = { type: d }),
117 a.gte && !a.lte && (a.lte = { type: d })),
118 a
119 )
120}
121function g(t) {
122 return { key: e.decode(t.deviceId), seq: t.seq }
123}
124function p(e) {
125 return e ? { ...e, avatar: a(e.avatar), blindPeers: y(e.blindPeers) } : null
126}
127function m(e) {
128 return e ? { disableReadReceipts: !0 === e.disableReadReceipts } : null
129}
130function y(t) {
131 return t && Array.isArray(t) ? t.map((t) => e.decode(t)) : []
132}
133function b({ memberId: t, blindWriters: n, displayName: r, avatar: i }) {
134 return { memberKey: e.decode(t), blindWriters: f(n), displayName: r, avatar: a(i) }
135}
136function f(t) {
137 return t && Array.isArray(t)
138 ? t.map((t) => ({ publicKey: e.decode(t.publicKey), blindingKey: e.decode(t.blindingKey) }))
139 : []
140}
141module.exports = {
142 decodeContactInfo: b,
143 decodeChatRangeOptions: c,
144 decodeKeyRangeOptions: s,
145 decodeChatMessage: o,
146 decodeImageFile: a,
147 decodeFile: d,
148 decodeMessageId: g,
149 decodeConfig: p,
150 decodeUserSettings: m,
151 decodeFileRangeOptions: u,
152}
keet-core-4.14.4-pretty/lib/api/v1/encode.js +513 -0
……@@ -0,0 +1,513 @@
1const e = require("hypercore-id-encoding"),
2 {
3 getCapabilitiesForRole: t,
4 MemberRoles: n,
5 DISPLAY_TYPES: a,
6 GENERIC_EVENTS: s,
7 } = require("@holepunchto/keet-core-api"),
8 r = require("b4a"),
9 {
10 contract: {
11 hyperschema: { getEnum: i },
12 },
13 } = require("../../../schema/spec"),
14 o = i("@keet/room-type")
15function d({ key: t, seq: n }) {
16 return { deviceId: e.encode(t), seq: n }
17}
18function l(t) {
19 return {
20 id: e.encode(t.key),
21 deviceId: e.encode(t.key),
22 swarmId: e.encode(t.profile.swarmKey),
23 isMobile: t.profile.isMobile,
24 name: t.profile.name,
25 status: t.status,
26 }
27}
28function c(t) {
29 if (!t) return null
30 const { key: n, blob: a } = t
31 return { id: e.encode(n), blob: a }
32}
33function m(t) {
34 if (!t) return null
35 const { key: n, path: a, version: s, size: r } = t
36 return { id: e.encode(n), path: a, version: s, size: r }
37}
38function u(e) {
39 if (!e) return null
40 const { inlined: t, blob: n, externalBlob: a, externalDrive: s } = e
41 return {
42 blob: n,
43 inlined: t ? r.toString(t, "base64") : null,
44 externalBlob: c(a),
45 externalDrive: m(s),
46 }
47}
48function p(e) {
49 return e
50 ? (e.metadata?.userdata && (e.metadata.userdata = r.toString(e.metadata.userdata, "base64")),
51 {
52 hash: e.hash,
53 entry: e.entry,
54 metadata: e.metadata,
55 pointer: u(e.pointer),
56 preview: g(e.preview),
57 })
58 : null
59}
60function y(t) {
61 return t
62 ? t.cleared
63 ? { cleared: !0 }
64 : {
65 roomId: e.encode(t.roomKey),
66 httpLink: t.httpLink,
67 cleared: !1,
68 preview: t.preview
69 ? { small: y(t.preview.small), medium: y(t.preview.medium), large: y(t.preview.large) }
70 : null,
71 }
72 : null
73}
74function g(e) {
75 return e ? { small: p(e.small), medium: p(e.medium), large: p(e.large) } : null
76}
77function f(t) {
78 if (!t) return null
79 const { memberJoined: n, memberLeft: a, memberRemoved: s } = t,
80 r = n?.memberKey || a?.memberKey || s?.memberKey,
81 i = r ? { memberId: e.encode(r) } : null
82 return { ...t, memberJoined: n && i, memberLeft: a && i, memberRemoved: s && i }
83}
84function b({ record: t, member: n, memberId: r, localRoom: i }) {
85 const { event: o, message: l, reactions: c = {}, labels: m = {} } = t,
86 u = f(o)
87 l && l.replyTo && (l.replyTo = d(l.replyTo))
88 let y = null
89 ;(u && u.memberJoined && (y = { type: s.MEMBER_JOINED, value: u.memberJoined.memberId }),
90 u && u.memberLeft && (y = { type: s.MEMBER_LEFT, value: u.memberLeft.memberId }),
91 u && u.titleChanged && (y = { type: s.ROOM_TITLE_CHANGED, value: u.titleChanged }),
92 u && u.callStarted && (y = { type: s.CALL_STARTED, value: null }),
93 u && u.callHangup && (y = { type: s.CALL_HANGUP, value: null }),
94 u && u.callMissed && (y = { type: s.CALL_MISSED, value: null }))
95 const g = j(t)
96 return (
97 l && l.files && (l.files = l.files.map(p)),
98 {
99 timestamp: t.timestamp,
100 editedAt: t.editedAt,
101 memberId: r || e.encode(n?.key || t.oplog.key),
102 member: n ? M(n, i?.selfMember?.key) : null,
103 id: d(t.oplog),
104 deleted: t.status.isDeleted,
105 thread: t.id.thread,
106 clock: t.id.index,
107 message: { ...l, generic: u },
108 reactions: c,
109 labels: m,
110 read: t.read,
111 seq: t.id.index,
112 event: y,
113 replyTo: l && l.replyTo ? l.replyTo : null,
114 forwarded: !0 === l?.forwarded,
115 chat: {
116 text: l ? l.text : null,
117 edited: t.status.isEdited,
118 display: g,
119 mentions: g.filter((e) => e.type === a.MENTION),
120 },
121 files: l && l.files ? l.files : [],
122 file: l && l.files ? l.files[0] : null,
123 }
124 )
125}
126function v(e) {
127 return e
128 ? {
129 total: e.total,
130 reactions: e.reactions.map((e) => ({ text: e.text, count: e.count, latest: [] })),
131 editedAt: e.editedAt,
132 }
133 : { total: 0, reactions: [] }
134}
135function I(e) {
136 return e.map((e) => e.reaction)
137}
138function k(t) {
139 return { sender: e.encode(t.sender), clock: t.clock, reaction: t.reaction }
140}
141function K(t) {
142 return {
143 roomId: e.encode(t.roomKey),
144 discoveryId: e.encode(t.discoveryKey),
145 dmMemberId: t.dm ? e.encode(t.dm) : null,
146 recipient: t.dm ? e.encode(t.dm) : null,
147 }
148}
149function h({ roomInfo: t, preferences: n, lastMessageMember: a, storageInfo: s, fileStats: r }) {
150 const i = t.dm?.length ? e.encode(t.dm[0]) : null
151 let o = null
152 return (
153 t.lastMessage && (o = { chat: b({ record: t.lastMessage, memberId: a?.memberId }), member: a }),
154 {
155 roomId: e.encode(t.roomKey),
156 discoveryId: e.encode(t.discoveryKey),
157 status: t.status,
158 stats: t.stats,
159 fork: t.fork,
160 self: {
161 sentLength: s ? s.hints.remoteContiguousLength : 0,
162 deviceId: t.selfDevice ? e.encode(t.selfDevice.key) : null,
163 member: t.selfMember ? M(t.selfMember, t.selfMember.key) : null,
164 },
165 digest: T(t.digest),
166 config: C(t.config, t.digest),
167 preferences: n,
168 lastMessage: o,
169 dmMemberId: i,
170 fileStats: r ? { total: r.total } : null,
171 activeCall: A(t.activeCall),
172 }
173 )
174}
175function A(t) {
176 return t
177 ? {
178 callId: e.encode(t.callKey),
179 selfDeviceId: t.selfDeviceKey ? e.encode(t.selfDeviceKey) : null,
180 }
181 : null
182}
183function M(t, n) {
184 return t
185 ? {
186 memberId: e.encode(t.key),
187 anonymous: !1,
188 name: t.profile.displayName ? t.profile.displayName.toLowerCase() : null,
189 status: t.status,
190 displayName: t.profile.displayName,
191 inactive: !t.status.isActive,
192 capabilities: Y(t.status),
193 avatar: g(t.profile.avatar),
194 local: !!n && r.equals(t.key, n),
195 pushNotifications: !0,
196 username: t.profile.username,
197 canDM: !!t.profile.mailbox,
198 }
199 : null
200}
201function R(t) {
202 return {
203 id: { memberId: e.encode(t.memberKey), roomId: e.encode(t.keys.key) },
204 roomId: e.encode(t.keys.key),
205 senderContactInfo: {
206 displayName: t.sender.displayName,
207 avatar: t.sender.avatar ? g(t.sender.avatar) : null,
208 memberId: e.encode(t.memberKey),
209 },
210 clock: t.clock,
211 message: t.message,
212 status: t.status,
213 sentAt: t.sentAt,
214 }
215}
216function D(t) {
217 const n = e.encode(t.id)
218 return {
219 id: n,
220 seedId: e.encode(t.invitationSeed),
221 discoveryId: n,
222 identityDeviceId: t.identity ? e.encode(t.identity.devicePublicKey) : null,
223 expires: -1,
224 }
225}
226function E(t) {
227 if (!t) return null
228 const n = t.request,
229 a = n.deviceKey,
230 s = n.device.profile.name,
231 r = n.identity.devicePublicKey
232 return { deviceName: s, deviceId: e.encode(a), identityDeviceId: e.encode(r) }
233}
234function T(e) {
235 return { ...e }
236}
237function L(t) {
238 return t ? t.map(e.encode) : null
239}
240function N(e) {
241 return { disableReadReceipts: e?.disableReadReceipts || !1 }
242}
243function w(e) {
244 return {
245 concurrency: e.concurrency,
246 maxWindow: e.maxWindow,
247 randomPunchInterval: e.randomPunchInterval,
248 connectionKeepAlive: e.connectionKeepAlive,
249 }
250}
251function C(e, t, n = []) {
252 return e
253 ? {
254 ...e,
255 avatar: g(e.avatar),
256 roomType: V(t.settings.roomType),
257 experimental: t.settings.isExperimental,
258 locked: t.settings.isJoiningDisabled,
259 frozen: t.settings.isAppendingDisabled,
260 isMembershipEventsDisabled: t.settings.isMembershipEventsDisabled,
261 pinnedMessages: n,
262 canCall: String(!t.settings.isCallingDisabled),
263 blindPeers: L(e.blindPeers),
264 }
265 : {}
266}
267function x(t) {
268 return t
269 ? {
270 memberId: e.encode(t.attestation.memberKey),
271 displayName: t.profile.displayName,
272 username: t.profile.username,
273 avatar: g(t.profile.avatar),
274 contactInfo: r.toString(t.contactInfo, "base64"),
275 count: t.count,
276 }
277 : null
278}
279function S(t) {
280 return t ? { username: t.username, memberId: t.memberKey ? e.encode(t.memberKey) : null } : null
281}
282function B(t, n, a, s) {
283 let r = null
284 return (
285 a &&
286 (r = {
287 id: e.encode(a.roomKey),
288 status: {
289 isAccepted: !!a && 0 === a.stats.members.pending,
290 isWritable: !!a && a.status.isWritable,
291 },
292 }),
293 {
294 memberId: t,
295 activeRoom: r,
296 pendingRequest: s ? R(s) : null,
297 contactStatus: { isBlocked: !!n?.status?.isBlocked },
298 }
299 )
300}
301function O(t) {
302 return t ? { roomId: t.roomKey ? e.encode(t.roomKey) : null } : {}
303}
304function P(t) {
305 return {
306 code: t.code,
307 message: t.message,
308 stack: t.stack,
309 timestamp: t.timestamp,
310 isContractError: !0 === t.isContractError,
311 isKeetError: !0 === t.isKeetError,
312 roomId: t.roomKey ? e.encode(t.roomKey) : null,
313 details: O(t.details),
314 }
315}
316function _(e, t, n) {
317 const a = n?.displayName || ""
318 return {
319 id: e.messageId,
320 roomId: e.roomId,
321 avatar: e.avatar ?? "",
322 sender: { name: a },
323 config: { title: t.title, roomType: t.roomType },
324 message: {
325 type: e.messageType,
326 chatText: e.messageText,
327 fileType: e.fileType,
328 location: e.location,
329 },
330 userInfo: {
331 roomKey: e.roomId,
332 messageType: e.messageType,
333 isDmRoom: Q(t.roomType) === o.DirectMessage,
334 isBroadcast: Q(t.roomType) === o.Broadcast,
335 profileName: a,
336 },
337 }
338}
339function q(t) {
340 if (!t) return null
341 const n = 1 === t.version
342 return {
343 version: t.version,
344 callId: e.encode(t.callKey),
345 discoveryId: n ? e.encode(t.discoveryKey) : null,
346 createdAt: t.createdAt,
347 endedAt: t.endedAt,
348 members: t.members ? t.members.map(H) : [],
349 }
350}
351function H(t) {
352 return {
353 callId: e.encode(t.callKey),
354 memberId: e.encode(t.memberKey),
355 createdAt: t.createdAt,
356 devices: t.devices ? t.devices.map(J) : [],
357 }
358}
359function J(t) {
360 return {
361 callId: e.encode(t.callKey),
362 memberId: e.encode(t.memberKey),
363 deviceId: e.encode(t.deviceKey),
364 swarmId: e.encode(t.swarmKey),
365 createdAt: t.createdAt,
366 streams: t.streams ? t.streams.map(F) : [],
367 }
368}
369function F(t) {
370 return {
371 callId: e.encode(t.callKey),
372 streamId: e.encode(t.streamKey),
373 deviceId: e.encode(t.deviceKey),
374 createdAt: t.createdAt,
375 }
376}
377function j(e) {
378 if (!e?.message?.display) return []
379 let t = []
380 return (
381 e.message.display.mention &&
382 ((e.message.display.mention = G(e.message.display.mention)),
383 (t = t.concat(e.message.display.mention))),
384 e.message.display.translation &&
385 ((e.message.display.translation = U(e.message.display.translation)),
386 (t = t.concat(e.message.display.translation))),
387 e.message.display.httpLink &&
388 ((e.message.display.httpLink = e.message.display.httpLink.map(z)),
389 (t = t.concat(e.message.display.httpLink))),
390 e.message.display.pearLink &&
391 ((e.message.display.pearLink = e.message.display.pearLink.map(W)),
392 (t = t.concat(e.message.display.pearLink))),
393 e.message.display.bold &&
394 ((e.message.display.bold = e.message.display.bold.map((e) => ({ ...e, type: a.BOLD }))),
395 (t = t.concat(e.message.display.bold))),
396 e.message.display.italic &&
397 ((e.message.display.italic = e.message.display.italic.map((e) => ({ ...e, type: a.ITALIC }))),
398 (t = t.concat(e.message.display.italic))),
399 e.message.display.code &&
400 ((e.message.display.code = e.message.display.code.map((e) => ({ ...e, type: a.CODE }))),
401 (t = t.concat(e.message.display.code))),
402 e.message.display.emoji &&
403 ((e.message.display.emoji = e.message.display.emoji.map((e) => ({
404 ...e.range,
405 content: e.content,
406 type: a.EMOJI,
407 }))),
408 (t = t.concat(e.message.display.emoji))),
409 e.message.display.codeBlock &&
410 ((e.message.display.codeBlock = e.message.display.codeBlock.map((e) => ({
411 ...e,
412 type: a.CODE_BLOCK,
413 }))),
414 (t = t.concat(e.message.display.codeBlock))),
415 e.message.display.strike &&
416 ((e.message.display.strike = e.message.display.strike.map((e) => ({
417 ...e,
418 type: a.STRIKE_THROUGH,
419 }))),
420 (t = t.concat(e.message.display.strike))),
421 t
422 )
423}
424function G(t) {
425 return Array.isArray(t)
426 ? t.map((t) => ({
427 type: a.MENTION,
428 start: t.range.start,
429 length: t.range.length,
430 memberId: e.encode(t.memberKey),
431 }))
432 : []
433}
434function U(e) {
435 return Array.isArray(e)
436 ? e.map((e) => ({
437 type: a.TRANSLATION,
438 start: e.range.start,
439 length: e.range.length,
440 language: e.language,
441 text: e.text,
442 }))
443 : []
444}
445function W(e) {
446 return { ...z(e), type: a.PEAR_LINK }
447}
448function z(e) {
449 return (
450 e?.preview?.file && (e.preview.file = p(e.preview.file)),
451 {
452 content: e.url,
453 start: e.range.start,
454 length: e.range.length,
455 type: a.HTTP_LINK,
456 preview: e.preview,
457 }
458 )
459}
460function Y(e) {
461 const a = e.isAdmin ? n.ADMIN : e.isModerator ? n.MODERATOR : n.PEER
462 return t(a)
463}
464function V(e) {
465 switch (e) {
466 case o.Default:
467 return "0"
468 case o.Broadcast:
469 return "1"
470 case o.DirectMessage:
471 return "2"
472 default:
473 throw new Error("Incompatible legacy room type:", e)
474 }
475}
476function Q(e) {
477 switch (e) {
478 case "0":
479 default:
480 return o.Default
481 case "1":
482 return o.Broadcast
483 case "2":
484 return o.DirectMessage
485 }
486}
487module.exports = {
488 encodeReaction: k,
489 encodeIdentityPairingRequest: E,
490 encodePrivateRoomRecord: K,
491 encodeDmRequest: R,
492 encodeRoomRecord: h,
493 encodeMemberRecord: M,
494 encodeInvitationRecord: D,
495 encodeChatMessage: b,
496 encodeImageFile: g,
497 encodeFile: p,
498 encodeFileEntry: y,
499 encodeReactionsDigest: v,
500 encodeMyReactions: I,
501 encodeDigest: T,
502 encodeConfig: C,
503 encodeUserSettings: N,
504 encodeMessageId: d,
505 encodeDevice: l,
506 encodeUser: x,
507 encodeContactInfo: B,
508 encodeReservation: S,
509 encodeErrorRecord: P,
510 encodeNotification: _,
511 encodeHyperDHTSettings: w,
512 encodeCallRecord: q,
513}
keet-core-4.14.4-pretty/lib/api/v1/helpers.js +157 -0
……@@ -0,0 +1,157 @@
1const {
2 encodeChatMessage: e,
3 encodeReactionsDigest: t,
4 encodeMyReactions: s,
5 encodeCallRecord: n,
6 } = require("./encode"),
7 { getMemberForDeviceKey: a } = require("../../core/contract/query"),
8 l = require("b4a"),
9 {
10 contract: {
11 hyperschema: { getEnum: o },
12 },
13 } = require("../../../schema/spec"),
14 i = o("@keet/label-type")
15async function r(e, t, s, n, a, l) {
16 const [o, i] = await Promise.all([s.get("@local/rooms", { roomKey: t }), e()])
17 if (!i || !o) return []
18 const r = Array.isArray(i) ? i : [i],
19 c = []
20 for (const e of r) c.push(f(t, n, a, o, l, e))
21 return Promise.all(c)
22}
23async function c({ roomKey: e, local: n, snapshot: a, room: l, oplog: o, msgId: i }) {
24 const [r, c] = await Promise.all([
25 i ? { id: i } : a.get("@keet/chat-by-message-id", { oplog: o }),
26 l || n.get("@local/rooms", { roomKey: e }),
27 ])
28 if (!r || !c) return null
29 const { selfMember: d } = c,
30 [m, f] = await Promise.all([
31 a.get("@keet/reaction-digests", { id: r.id }),
32 d
33 ? a
34 .find("@keet/reactions", {
35 gte: { id: r.id, sender: d.key },
36 lte: { id: r.id, sender: d.key },
37 })
38 .toArray()
39 : [],
40 ])
41 return { digest: t(m), mine: s(f) }
42}
43async function d({ snapshot: e, msgId: t, localRoom: s }) {
44 if (!t || !s) return null
45 const { selfMember: n } = s,
46 [a, l] = await Promise.all([
47 e.get("@keet/chat-label-digests", { id: t }),
48 !!n &&
49 e.findOne("@keet/chat-labels", {
50 gte: { id: t, sender: n.key, label: i.Flag },
51 lte: { id: t, sender: n.key, label: i.Flag },
52 }),
53 ])
54 return {
55 flags: a?.labels.find((e) => e.label === i.Flag)?.count ?? 0,
56 flagged: !!l,
57 flagsClock: a?.flagsClock ?? 0,
58 editedAt: a?.editedAt ?? 0,
59 }
60}
61function m({ dm: e, readLengths: t, selfMember: s }, n) {
62 return (
63 !!(e?.length && n && t?.length && s) &&
64 !!t.find((e) => !l.equals(e.memberKey, s.key) && n.index < e.length)
65 )
66}
67async function f(t, s, n, l, o, i) {
68 const r = a(s, i.oplog.key),
69 { filePromises: f, linkFilePromises: y } = g(t, s, n, o, i),
70 [u, h, b, k] = await Promise.all([
71 r,
72 Promise.all(f),
73 c({ snapshot: s, room: l, msgId: i.id }),
74 d({ snapshot: s, localRoom: l, msgId: i.id }),
75 Promise.all(y),
76 ])
77 return (
78 (i.reactions = b),
79 (i.labels = k),
80 h.length && (i.message.files = h),
81 (i.read = m(l, i.id)),
82 e({ record: i, member: u, localRoom: l })
83 )
84}
85async function y(e, t, s, n, a) {
86 const l = await s.get("@keet/files", { id: a })
87 if (!l) return null
88 const o = await t.getFileEntryWithPreview(e, l.file, { loadBlob: (e) => n.get(e) })
89 return { ...l.file, entry: o }
90}
91function g(e, t, s, n, a) {
92 const l = [],
93 o = []
94 if (a.message?.files?.length > 0) for (const o of a.message.files) l.push(y(e, n, t, s, o))
95 const i = a.message?.display?.httpLink || []
96 for (const e of i) c(e)
97 const r = a.message?.display?.pearLink || []
98 for (const e of r) c(e)
99 return { filePromises: l, linkFilePromises: o }
100 function c(a) {
101 if ((a?.preview?.files || []).length) {
102 const l = a.preview.files.map(async (l) => {
103 a.preview.file = await y(e, n, t, s, l)
104 })
105 o.push(...l)
106 }
107 }
108}
109async function u(e, t) {
110 const s = b(e),
111 n = await e.findOne(t)
112 return n ? s(n) : null
113}
114async function h(e, t, s = !0) {
115 const n = b(e, s)
116 return k(e.find(t), n)
117}
118function b(e, t) {
119 return async function (e) {
120 const a = { ...e, members: await s(e) }
121 return t ? n(a) : a
122 }
123 async function s({ callKey: t }) {
124 return k(
125 e.find("@keet/call-members", { gte: { callKey: t }, lte: { callKey: t } }),
126 async (e) => ({ ...e, devices: await a(e) }),
127 )
128 }
129 async function a({ callKey: t, memberKey: s }) {
130 const n = { gte: { callKey: t, memberKey: s }, lte: { callKey: t, memberKey: s } }
131 return k(e.find("@keet/call-devices-by-member-key", n), async (e) => ({
132 ...e,
133 streams: await l(e),
134 }))
135 }
136 async function l({ callKey: t, deviceKey: s }) {
137 const n = { gte: { callKey: t, deviceKey: s }, lte: { callKey: t, deviceKey: s } },
138 a = e.find("@keet/call-streams-by-device-key", n),
139 l = []
140 for await (const e of a) l.push(e)
141 return l
142 }
143}
144async function k(e, t) {
145 const s = []
146 for await (const n of e) s.push(t(n))
147 return Promise.all(s)
148}
149module.exports = {
150 getChatMessages: r,
151 getReactions: c,
152 getChatLabels: d,
153 getChatMessage: f,
154 getCalls: h,
155 getCall: u,
156 isDMRead: m,
157}
keet-core-4.14.4-pretty/lib/api/v1/index.js +2591 -0
……@@ -0,0 +1,2591 @@
1const e = require("path"),
2 t = require("ready-resource"),
3 s = require("hypercore-id-encoding"),
4 i = require("hypercore-crypto"),
5 o = require("debounceify"),
6 r = require("safety-catch"),
7 n = require("b4a"),
8 a = require("uncaughts"),
9 { Readable: c, Transform: h, pipeline: d } = require("streamx"),
10 { Session: l, HeapSnapshot: u } = require("bare-inspector"),
11 m = require("bare-fs"),
12 p = require("process-top")(),
13 b = require("tiny-preferences"),
14 g = require("@holepunchto/keet-call/server"),
15 {
16 contract: {
17 hyperschema: { getEnum: y },
18 },
19 local: {
20 hyperschema: { getEnum: f },
21 },
22 } = require("../../../schema/spec"),
23 {
24 encodeRoomRecord: k,
25 encodeConfig: _,
26 encodeDevice: w,
27 encodeMemberRecord: v,
28 encodeInvitationRecord: R,
29 encodeFile: S,
30 encodeIdentityPairingRequest: M,
31 encodeDmRequest: I,
32 encodeReaction: C,
33 encodeUser: E,
34 encodeContactInfo: K,
35 encodeImageFile: D,
36 encodeReservation: q,
37 encodeFileEntry: P,
38 encodeUserSettings: F,
39 encodeErrorRecord: x,
40 encodeNotification: A,
41 encodeHyperDHTSettings: B,
42 encodeCallRecord: L,
43 } = require("./encode.js"),
44 {
45 decodeChatRangeOptions: U,
46 decodeChatMessage: T,
47 decodeMessageId: N,
48 decodeKeyRangeOptions: O,
49 decodeFile: j,
50 decodeConfig: H,
51 decodeImageFile: V,
52 decodeFileRangeOptions: G,
53 decodeUserSettings: z,
54 } = require("./decode.js"),
55 J = y("@keet/build-type"),
56 W = y("@keet/room-type"),
57 Y = y("@keet/display-type"),
58 X = y("@keet/label-type"),
59 $ = y("@keet/member-label-type"),
60 Q = y("@keet/system-settings-keys"),
61 { ContactRequestStatus: Z, RoomStatus: ee } = require("../../core/contract/identity/private.js"),
62 { Config: te, CONFIG_INDEX_TO_KEY: se } = require("../../core/contract/config"),
63 { Settings: ie } = require("../../core/contract/internal"),
64 {
65 getChatMessages: oe,
66 getChatMessage: re,
67 getReactions: ne,
68 isDMRead: ae,
69 getCalls: ce,
70 } = require("./helpers.js"),
71 { MemberStatus: he } = require("../../core/contract/members/index.js"),
72 {
73 MemberRoles: de,
74 DM_STATUSES: le,
75 isValidPreferenceKey: ue,
76 getPreferenceKeyName: me,
77 CHAT_MESSAGE_REPORT_COUNT: pe,
78 PREFERENCES: be,
79 GENERIC_EVENTS: ge,
80 } = require("@holepunchto/keet-core-api"),
81 { restoreAvatar: ye } = require("../../core/contract/avatars.js"),
82 { getMemberForDeviceKey: fe } = require("../../core/contract/query.js"),
83 ke = require("compact-encoding"),
84 { DEBUG_FLAG_INDEX_BY_KEY: _e, DHT_SETTINGS: we } = require("../../core/debug/debugging.js"),
85 ve = require("./inspector.js"),
86 { FEATURES: Re } = require("../../../schema/versions"),
87 Se = require("./calls.js"),
88 Me = f("@local/keet-state"),
89 Ie = 6e5,
90 Ce = 2e4,
91 Ee = "preferences_v1.json",
92 Ke = "keet",
93 De = "recent-rooms",
94 qe = "favorite-rooms",
95 Pe = "dm-rooms",
96 Fe = "chat-changed",
97 xe = "identity",
98 Ae = "private-profile",
99 Be = "identity-pairing-requests",
100 Le = "migration-status",
101 Ue = "room-preferences",
102 Te = "unreads",
103 Ne = "errors",
104 Oe = "force-updates",
105 je = {
106 "keet-core": require("../../../package.json").version,
107 autobase: require("autobase/package.json").version,
108 hypercore: require("hypercore/package.json").version,
109 hyperbee: require("hyperbee/package.json").version,
110 hyperbee2: require("hyperbee2/package.json").version,
111 "keet-identity-key": require("keet-identity-key/package.json").version,
112 "keet-push": require("@holepunchto/keet-push/package.json").version,
113 corestore: require("corestore/package.json").version,
114 }
115class He {
116 constructor(e, t) {
117 ;((this.api = e), (this.id = t), (this.subscriptions = []))
118 }
119 destroy() {
120 for (const { stream: e } of this.subscriptions) e.destroy()
121 }
122 refresh(e) {
123 for (const t of this.subscriptions) (e && e.name && e.name !== t.name) || (t.query && t.query())
124 }
125 push(e, t) {
126 for (const s of this.subscriptions)
127 (t && t.name && t.name !== s.name) || (s.map && s.stream.push(s.map(e)))
128 }
129 _onDestroy(e, t) {
130 const s = this.subscriptions.pop()
131 ;(s !== e && ((this.subscriptions[e.idx] = s), (s.idx = e.idx)),
132 0 === this.subscriptions.length &&
133 this.api._subscriptions.get(this.id) === this &&
134 this.api._subscriptions.delete(this.id),
135 t(null))
136 }
137 _create(e) {
138 const t = { name: e || null, stream: null, query: null, map: null, idx: 0 }
139 return (
140 (t.stream = new c({ destroy: (e) => this._onDestroy(t, e) })),
141 (t.idx = this.subscriptions.push(t) - 1),
142 t
143 )
144 }
145 add({ query: e, map: t, name: s }) {
146 if (!e && !t) throw new Error("Must have either a query or a map")
147 const i = this._create(s)
148 return (
149 e &&
150 ((i.query = o(async () => {
151 try {
152 const t = await e()
153 null !== t && i.stream.push(t)
154 } catch (e) {
155 i.stream.destroy(e)
156 }
157 })),
158 i.query()),
159 (i.map = t),
160 i.stream
161 )
162 }
163}
164class Ve {
165 constructor(e) {
166 this.keet = e
167 }
168 create(e, t) {
169 return async (s, ...i) => {
170 if (this.keet.closing) return null
171 const o = ["files", "base", "drive", "db", "snapshot", "blobs", "blobsSnapshot"],
172 r = !!t.find((e) => o.includes(e))
173 if (r && !s) throw new Error("Room ID is required for methods that require room resources")
174 ;(("object" == typeof s && null !== s) || !r) && ((i = [s, ...i]), (s = null))
175 const n = s ? this.keet.internalOpenExistingRoom(s) : null
176 if ((n && (await n.ready(), await n.base.flush()), this.keet.closing)) return null
177 const a = { roomId: s, roomKey: n?.key || null, discoveryKey: n?.discoveryKey || null }
178 let c = null
179 try {
180 for (const e of t)
181 (n && "db" === e && (a.db = n.db),
182 n && "snapshot" === e && (a.snapshot = n.db.snapshot()),
183 n && "base" === e && (a.base = n.base),
184 n && "drive" === e && (a.drive = n.drive),
185 n && "blobs" === e && (a.blobs = n.blobs),
186 n && "blobsSnapshot" === e && (a.blobsSnapshot = n.blobs.snapshot()),
187 "local" === e && (a.local = this.keet.local),
188 "localSnapshot" === e && (a.localSnapshot = this.keet.local.snapshot()),
189 "files" === e && (a.files = this.keet.files),
190 "myKey" === e &&
191 (this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
192 a.localSnapshot || (a.localSnapshot = this.keet.local.snapshot()),
193 (a.id = await a.localSnapshot.get("@local/identity")),
194 (a.profileInfo = await a.localSnapshot.get("@local/rooms", {
195 roomKey: a.id.privateProfileKey,
196 })),
197 (a.myKey = a.profileInfo?.selfMember?.key || null)),
198 "profile" === e &&
199 (this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
200 a.localSnapshot || (a.localSnapshot = this.keet.local.snapshot()),
201 a.id || (a.id = await a.localSnapshot.get("@local/identity")),
202 a.profileInfo ||
203 (a.profileInfo = await a.localSnapshot.get("@local/rooms", {
204 roomKey: a.id.privateProfileKey,
205 })),
206 (a.profile = this.keet.internalOpenExistingRoom(a.id.privateProfileKey)),
207 await a.profile.ready()),
208 a.profile && "profileDb" === e && (a.profileDb = a.profile.db),
209 a.profile && "profileSnapshot" === e && (a.profileSnapshot = a.profile.db.snapshot()),
210 a.profile && "profileBlobs" === e && (a.profileBlobs = a.profile.profileBlobs),
211 a.profile &&
212 "profileBlobsSnapshot" === e &&
213 (a.profileBlobsSnapshot = a.profile.blobs.snapshot()))
214 const s = Date.now()
215 return (
216 (c = await e(a, ...i)),
217 this.keet.logger.debug("[Keet API]", e.name, "duration:", Date.now() - s, "args:", i),
218 c
219 )
220 } catch (e) {
221 if (this.keet.closing) return null
222 if (n?.base.getLastError())
223 throw (this.keet.onerror(n?.base.getLastError()), n.base.getLastError())
224 throw (this.keet.onerror(e), e)
225 } finally {
226 ;(a.snapshot && (await a.snapshot.close()),
227 a.blobsSnapshot && (await a.blobsSnapshot.close()),
228 a.localSnapshot && (await a.localSnapshot.close()),
229 a.profileSnapshot && (await a.profileSnapshot.close()),
230 a.profileBlobsSnapshot && (await a.profileBlobsSnapshot.close()),
231 a.profile && (await this.keet.internalReleaseRoom(a.profile)),
232 n && (await this.keet.internalReleaseRoom(n)))
233 }
234 }
235 }
236}
237class Ge {
238 constructor(e, { onerror: t = r } = {}) {
239 ;((this.keet = e),
240 (this.context = new Ve(this.keet)),
241 (this._onerror = t),
242 (this._subscriptions = new Map()),
243 (this._profileSubscriptions = new He(this, null, { isProfileSub: !0 })),
244 this.keet.on("room-interrupted", this._handleRoomInterrupted.bind(this)),
245 this.keet.on("room-changed", this._handleRoomChanged.bind(this)),
246 this.keet.on("identity-changed", this._handleIdentityChanged.bind(this)),
247 this.keet.on("recent-rooms-changed", this._handleRecentRoomsChanged.bind(this)),
248 this.keet.on("dm-rooms-changed", this._handleDmRoomsChanged.bind(this)),
249 this.keet.on("chat-changed", this._handleChatChanged.bind(this)),
250 this.keet.on("identity-pairing-request", this._handleIdentityPairingRequest.bind(this)),
251 this.keet.on("migration-status", this._handleMigrationStatus.bind(this)),
252 this.keet.on("room-preferences-changed", this._handleRoomPreferencesChanged.bind(this)),
253 this.keet.on("unread-anchors-changed", this._handleUnreadAnchorsChanged.bind(this)),
254 this.keet.on("room-sent-message", this._handleRoomSentMessageLengthChanged.bind(this)),
255 this.keet.on("caught-error", this._handleKeetError.bind(this)),
256 this.keet.on("force-update", this._handleForceUpdate.bind(this)),
257 this.keet.on("verified-rooms-changed", this._handleVerifiedRoomsChanged.bind(this)),
258 this.keet.on("local-files-changed", this._handleLocalFilesChanged.bind(this)),
259 this.keet.on("favorite-rooms-changed", this._handleFavoriteRoomsChanged.bind(this)),
260 (this.boot = this._timed(this._boot.bind(this))),
261 (this.createInvitation = this._timed(this._createInvitation.bind(this))),
262 (this.confirmPairingRequest = this._timed(this._confirmPairingRequest.bind(this))),
263 (this.startPairingRoom = this._timed(this._startPairingRoom.bind(this))),
264 (this.stopPairingRoom = this.context.create(this._stopPairingRoom.bind(this), ["profile"])),
265 (this.searchRooms = this.context.create(this._searchRooms.bind(this), ["local"])),
266 (this.getRoomInfo = this.context.create(this._getRoomInfo.bind(this), ["localSnapshot"])),
267 (this.getRecentRooms = this.context.create(this._getRecentRooms.bind(this), ["local"])),
268 (this.getPendingRooms = this.context.create(this._getPendingRooms.bind(this), ["profile"])),
269 (this.getLocalRoomMetadata = this.context.create(this._getLocalRoomMetadata.bind(this), [
270 "local",
271 ])),
272 (this.getConfig = this.context.create(this._getConfig.bind(this), ["snapshot", "local"])),
273 (this.updateRoomSettings = this._updateRoomSettings.bind(this)),
274 (this.getChatMessage = this.context.create(this._getChatMessage.bind(this), [
275 "snapshot",
276 "blobsSnapshot",
277 "files",
278 "local",
279 ])),
280 (this.getChatMessageById = this.context.create(this._getChatMessageById.bind(this), [
281 "snapshot",
282 "blobsSnapshot",
283 "files",
284 "local",
285 ])),
286 (this.getChatMessages = this.context.create(this._getChatMessages.bind(this), [
287 "snapshot",
288 "blobsSnapshot",
289 "files",
290 "local",
291 ])),
292 (this.getChatLength = this.context.create(this._getChatLength.bind(this), ["db"])),
293 (this.removeChatMessage = this.context.create(this._removeChatMessage.bind(this), [
294 "snapshot",
295 "blobsSnapshot",
296 "files",
297 "local",
298 ])),
299 (this.searchChatMessages = this.context.create(this._searchChatMessages.bind(this), [
300 "local",
301 "snapshot",
302 "blobsSnapshot",
303 "files",
304 ])),
305 (this.addChatMessage = this._timed(this._addChatMessage.bind(this))),
306 (this.updateChatMessage = this._timed(this._updateChatMessage.bind(this))),
307 (this.forwardChatMessage = this.context.create(this._forwardChatMessage.bind(this), [
308 "snapshot",
309 "blobsSnapshot",
310 "files",
311 "local",
312 ])),
313 (this.pinChatMessage = this._timed(this._pinChatMessage.bind(this))),
314 (this.unpinChatMessage = this._timed(this._unpinChatMessage.bind(this))),
315 (this.addCallStartedEvent = this._timed(this._addCallStartedEvent.bind(this))),
316 (this.addCallHangupEvent = this._timed(this._addCallHangupEvent.bind(this))),
317 (this.addCallMissedEvent = this._timed(this._addCallMissedEvent.bind(this))),
318 (this.addLocationSharedEvent = this._timed(this._addLocationSharedEvent.bind(this))),
319 (this.getActiveCalls = this.context.create(this._getActiveCalls.bind(this), ["snapshot"])),
320 (this.getCalls = this.context.create(this._getCalls.bind(this), ["snapshot"])),
321 (this.getReactions = this.context.create(this._getReactions.bind(this), [
322 "snapshot",
323 "local",
324 ])),
325 (this.getLatestReactions = this.context.create(this._getLatestReactions.bind(this), [
326 "snapshot",
327 ])),
328 (this.addReaction = this._timed(this._addReaction.bind(this))),
329 (this.removeReaction = this._timed(this._removeReaction.bind(this))),
330 (this.getReportedMembers = this.context.create(this._getReportedMembers.bind(this), [
331 "snapshot",
332 "blobsSnapshot",
333 ])),
334 (this.addChatReport = this._timed(this._addChatReport.bind(this))),
335 (this.removeChatReport = this._timed(this._removeChatReport.bind(this))),
336 (this.getReportedMessages = this.context.create(this._getReportedMessages.bind(this), [
337 "roomKey",
338 "local",
339 "snapshot",
340 "blobsSnapshot",
341 "files",
342 ])),
343 (this.getPinnedChatMessages = this.context.create(this._getPinnedChatMessages.bind(this), [
344 "local",
345 "snapshot",
346 "blobsSnapshot",
347 "files",
348 ])),
349 (this.getActiveMember = this.context.create(this._getActiveMember.bind(this), [
350 "snapshot",
351 "blobsSnapshot",
352 "myKey",
353 ])),
354 (this.getActiveMembers = this.context.create(this._getActiveMembers.bind(this), [
355 "snapshot",
356 "blobsSnapshot",
357 "myKey",
358 ])),
359 (this.getMembers = this.context.create(this._getMembers.bind(this), [
360 "snapshot",
361 "blobsSnapshot",
362 "myKey",
363 ])),
364 (this.getMember = this.context.create(this._getMember.bind(this), [
365 "snapshot",
366 "blobsSnapshot",
367 "myKey",
368 ])),
369 (this.getMemberCount = this.context.create(this._getMemberCount.bind(this), ["db"])),
370 (this.getMemberBySwarmId = this.context.create(this._getMemberBySwarmId.bind(this), [
371 "snapshot",
372 "blobsSnapshot",
373 "myKey",
374 ])),
375 (this.getMemberByDeviceId = this.context.create(this._getMemberByDeviceId.bind(this), [
376 "snapshot",
377 "blobsSnapshot",
378 "myKey",
379 ])),
380 (this.waitUntilJoined = this.context.create(this._waitUntilJoined.bind(this), ["local"])),
381 (this.isMemberMuted = this.context.create(this._isMemberMuted.bind(this), ["db"])),
382 (this.getSearchMembers = this.context.create(this._getSearchMembers.bind(this), [
383 "db",
384 "blobsSnapshot",
385 "myKey",
386 ])),
387 (this.updateMember = this._timed(this._updateMember.bind(this))),
388 (this.removeMember = this._timed(this._removeMember.bind(this))),
389 (this.changeMemberRole = this._timed(this._changeMemberRole.bind(this))),
390 (this.muteMember = this._timed(this._muteMember.bind(this))),
391 (this.unmuteMember = this._timed(this._unmuteMember.bind(this))),
392 (this.blockMember = this._timed(this._blockMember.bind(this))),
393 (this.unblockMember = this._timed(this._unblockMember.bind(this))),
394 (this.getDevices = this.context.create(this._getDevices.bind(this), ["db"])),
395 (this.getDevice = this.context.create(this._getDevice.bind(this), ["db"])),
396 (this.getDevicesByMemberId = this.context.create(this._getDevicesByMemberId.bind(this), [
397 "db",
398 ])),
399 (this.getModerators = this.context.create(this._getModerators.bind(this), [
400 "snapshot",
401 "blobsSnapshot",
402 "myKey",
403 ])),
404 (this.saveFile = this.context.create(this._saveFile.bind(this), ["files"])),
405 (this.saveFileBlob = this.context.create(this._saveFileBlob.bind(this), ["files"])),
406 (this.getFileEntry = this.context.create(this._getFileEntry.bind(this), ["files"])),
407 (this.getFileCleared = this.context.create(this._getFileCleared.bind(this), ["files"])),
408 (this.clearFile = this.context.create(this._clearFile.bind(this), ["files"])),
409 (this.unclearFile = this.context.create(this._unclearFile.bind(this), ["files"])),
410 (this.clearAllFiles = this.context.create(this._clearAllFiles.bind(this), ["files"])),
411 (this.clearOldFiles = this._timed(this._clearOldFiles.bind(this))),
412 (this.getLocalFiles = this.context.create(this._getLocalFiles.bind(this), [
413 "files",
414 "snapshot",
415 "blobsSnapshot",
416 ])),
417 (this.getFiles = this.context.create(this._getFiles.bind(this), [
418 "files",
419 "snapshot",
420 "blobsSnapshot",
421 ])),
422 (this.startDownload = this.context.create(this._startDownload.bind(this), ["files"])),
423 (this.cancelDownload = this.context.create(this._cancelDownload.bind(this), ["files"])),
424 (this.sendFile = this._timed(this._sendFile.bind(this))),
425 (this.sendFiles = this._timed(this._sendFiles.bind(this))),
426 (this.refreshFileLinks = this._timed(this._refreshFileLinks.bind(this))),
427 (this.createRoom = this._timed(this._createRoom.bind(this))),
428 (this.leaveRoom = this._timed(this._leaveRoom.bind(this))),
429 (this.getSystemDigest = this.context.create(this._getSystemDigest.bind(this), ["db"])),
430 (this.getTipSize = this.context.create(this._getTipSize.bind(this), ["base"])),
431 (this.getRoomKeys = this._timed(this._getRoomKeys.bind(this))),
432 (this.resyncPrivateProfile = this._timed(this._resyncPrivateProfile.bind(this))),
433 (this.restoreIdentity = this._timed(this._restoreIdentity.bind(this))),
434 (this.getRecoveryPhrase = this._timed(this._getRecoveryPhrase.bind(this))),
435 (this.getEncryptedRecoveryPhrase = this._timed(this._getEncryptedRecoveryPhrase.bind(this))),
436 (this.decryptEncryptedRecoveryPhrase = this._timed(
437 this._decryptEncryptedRecoveryPhrase.bind(this),
438 )),
439 (this.freeRecoveryPhrase = this._timed(this._freeRecoveryPhrase.bind(this))),
440 (this.confirmRecoveryPhrase = this._timed(this._confirmRecoveryPhrase.bind(this))),
441 (this.storeRecoveryPhrase = this._timed(this._storeRecoveryPhrase.bind(this))),
442 (this.getIdentity = this.context.create(this._getIdentity.bind(this), [
443 "local",
444 "profile",
445 "profileSnapshot",
446 ])),
447 (this.getSelfContactInfo = this.context.create(this._getSelfContactInfo.bind(this), [
448 "local",
449 "profile",
450 ])),
451 (this.removeIdentityDevice = this.context.create(this._removeIdentityDevice.bind(this), [
452 "profile",
453 ])),
454 (this.createIdentityInvitation = this._timed(this._createIdentityInvitation.bind(this))),
455 (this.startPairingIdentity = this._timed(this._startPairingIdentity.bind(this))),
456 (this.updateIdentityProfile = this._timed(this._updateIdentityProfile.bind(this))),
457 (this.updateIdentityDevice = this._timed(this._updateIdentityDevice.bind(this))),
458 (this.getIdentityPairingRequest = this._timed(this._getIdentityPairingRequest.bind(this))),
459 (this.updateUserSettings = this._timed(this._updateUserSettings.bind(this))),
460 (this.updateDHTSettings = this._timed(this._updateDHTSettings.bind(this))),
461 (this.getDHTSettings = this._timed(this._getDHTSettings.bind(this))),
462 (this.getContactInfo = this.context.create(this._getContactInfo.bind(this), [
463 "local",
464 "profile",
465 ])),
466 (this.getBlockedMembers = this.context.create(this._getBlockedMembers.bind(this), ["local"])),
467 (this.getDmRequestsByStatus = this.context.create(this._getDmRequestsByStatus.bind(this), [
468 "profile",
469 "profileDb",
470 "profileBlobsSnapshot",
471 ])),
472 (this.sendDMFromContact = this._timed(this._sendDMFromContact.bind(this))),
473 (this.sendDMRequest = this._timed(this._sendDMRequest.bind(this))),
474 (this.sendInvitations = this._timed(this._sendInvitations.bind(this))),
475 (this.updatePrivateMailboxRecord = this._timed(this._updatePrivateMailboxRecord.bind(this))),
476 (this.acceptDmRequest = this._timed(this._acceptDmRequest.bind(this))),
477 (this.rejectDmRequest = this._timed(this._rejectDmRequest.bind(this))),
478 (this.getRoomPreferences = this.context.create(this._getRoomPreferences.bind(this), [
479 "local",
480 ])),
481 (this.updateRoomPreferences = this.context.create(this._updateRoomPreferences.bind(this), [
482 "profile",
483 ])),
484 (this.getBlockedMembers = this.context.create(this._getBlockedMembers.bind(this), ["local"])),
485 (this.updateConfig = this._timed(this._updateConfig.bind(this))),
486 (this.disableMembershipEvents = this._timed(this._disableMembershipEvents.bind(this))),
487 (this.enableMembershipEvents = this._timed(this._enableMembershipEvents.bind(this))),
488 (this.getLinkInfo = this._timed(this._getLinkInfo.bind(this))),
489 (this.lookupUsername = this._timed(this._lookupUsername.bind(this))),
490 (this.lookupUserByMemberId = this._timed(this._lookupUserByMemberId.bind(this))),
491 (this.registerUsername = this._timed(this._registerUsername.bind(this))),
492 (this.updateUsername = this._timed(this._updateUsername.bind(this))),
493 (this.searchUsername = this._timed(this._searchUsername.bind(this))),
494 (this.getReservationsByKey = this._timed(this._getReservationsByKey.bind(this))),
495 (this.checkUsername = this._timed(this._checkUsername.bind(this))),
496 (this.repair = this._timed(this._repair.bind(this))),
497 (this.rotateWriter = this._timed(this._rotateWriter.bind(this))),
498 (this.audit = this._timed(this._audit.bind(this))),
499 (this.setUnread = this._setUnread.bind(this)),
500 (this.getUnread = this._getUnread.bind(this)),
501 (this.setUnreadAnchor = this._setUnreadAnchor.bind(this)),
502 (this.getUnreadAnchor = this._getUnreadAnchor.bind(this)),
503 (this.subscribeUnreadAnchor = this._subscribeUnreadAnchor.bind(this)),
504 (this.setRoomFavorite = this._setRoomFavorite.bind(this)))
505 }
506 _timed(e) {
507 return async function (...t) {
508 const s = Date.now()
509 try {
510 const i = await e(...t)
511 return (
512 this.keet.logger.debug("[Keet API]", e.name, "duration:", Date.now() - s, "args:", t),
513 i
514 )
515 } catch (e) {
516 throw (this.keet.onerror(e), e)
517 }
518 }
519 }
520 _boot() {
521 return this.keet.backendReady()
522 }
523 _disableMembershipEvents(e) {
524 return this.keet.dispatch(e, "@keet/update-system-settings", {
525 key: ie.IsMembershipEventsDisabled,
526 settings: { isMembershipEventsDisabled: !0 },
527 })
528 }
529 _enableMembershipEvents(e) {
530 return this.keet.dispatch(e, "@keet/update-system-settings", {
531 key: ie.IsMembershipEventsDisabled,
532 settings: { isMembershipEventsDisabled: !1 },
533 })
534 }
535 _addKeetSubscription(e = Ke, t) {
536 return this._addRoomSubscription(e, t)
537 }
538 _addRoomSubscription(e, t, { isProfileSub: s = !1, _isRoomSub: i = !0 } = {}) {
539 if (null === e && s) return this._profileSubscriptions.add(t)
540 let o = this._subscriptions.get(e)
541 return (o || ((o = new He(this, e)), this._subscriptions.set(e, o)), o.add(t))
542 }
543 _refreshSubscriptionsById(e) {
544 const t =
545 e === this.keet.privateProfile?.id ? this._subscriptions.get(Ae) : this._subscriptions.get(e)
546 t && t.refresh()
547 }
548 _handleIdentityPairingRequest(e) {
549 ;(this._identityPairingRequestsByDeviceId.set(s.encode(e.deviceKey), e),
550 this._refreshSubscriptionsById(Be))
551 }
552 _handleRoomInterrupted(e, { unsupportedABI: t, digest: s }) {
553 const i = this._subscriptions.get(e)
554 if (i)
555 for (const e of i.subscriptions)
556 "room-version" === e.name &&
557 e.stream.push({ version: t, experimental: s && s.settings.isExperimental })
558 }
559 async _handleRoomChanged(e) {
560 try {
561 ;(this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
562 this._refreshSubscriptionsById(e))
563 } catch (e) {
564 this.keet.onerror(e)
565 }
566 }
567 _handleRecentRoomsChanged(...e) {
568 const t = this._subscriptions.get(De)
569 t && t.push(e)
570 }
571 _handleDmRoomsChanged() {
572 const e = this._subscriptions.get(Pe)
573 e && e.refresh()
574 }
575 _handleRoomPreferencesChanged(...e) {
576 const t = this._subscriptions.get(Ue)
577 t && t.push(e)
578 }
579 _handleUnreadAnchorsChanged() {
580 const e = this._subscriptions.get(Te)
581 e && e.refresh()
582 }
583 _handleRoomSentMessageLengthChanged(e) {
584 const t = this._subscriptions.get(e)
585 t && t.refresh({ name: "room-info" })
586 }
587 _handleIdentityChanged() {
588 this._refreshSubscriptionsById(xe)
589 }
590 async _handleChatChanged(...e) {
591 try {
592 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
593 const t = this._subscriptions.get(Fe)
594 if (!t) return
595 const [s, i] = e
596 if (s === this.keet.privateProfile.id) return
597 t.push({ roomId: s, index: i })
598 } catch (e) {
599 this.keet.onerror(e)
600 }
601 }
602 _handleMigrationStatus(e) {
603 const t = this._subscriptions.get(Le)
604 t && t.push(e)
605 }
606 _handleKeetError(e) {
607 const t = this._subscriptions.get(Ne)
608 t && t.push(e)
609 }
610 _handleForceUpdate() {
611 const e = this._subscriptions.get(Oe)
612 e && e.refresh()
613 }
614 _handleVerifiedRoomsChanged() {
615 for (const e of this._subscriptions.values()) e.refresh({ name: "room-info" })
616 }
617 _handleLocalFilesChanged(e) {
618 const t = this._subscriptions.get(e)
619 t && t.refresh({ name: "room-info" })
620 }
621 _handleFavoriteRoomsChanged(...e) {
622 const t = this._subscriptions.get(qe)
623 t && t.push(e)
624 }
625 getVersion() {
626 return { buildType: this.keet.buildType, abi: this.keet.abi, modules: je }
627 }
628 async _getSystemDigest({ db: e }) {
629 return await e.get("@keet/system-digest")
630 }
631 subscribeSentLength(e) {
632 return this._addRoomSubscription(e, {
633 query: async () => {
634 const t = this.keet.internalOpenExistingRoom(e)
635 await t.ready()
636 const s = { deviceId: t.base.local.id, length: t.base.local.remoteContiguousLength }
637 return (this.keet.internalReleaseRoom(t), s)
638 },
639 name: "room-sent-message",
640 })
641 }
642 subscribeRoomVersion(e) {
643 return this._addRoomSubscription(e, {
644 query: async () => {
645 const t = await this.getSystemDigest(e)
646 return { version: t.abi.version, experimental: t.settings.isExperimental }
647 },
648 name: "room-version",
649 })
650 }
651 subscribeForceUpdates() {
652 return this._addKeetSubscription(Oe, {
653 query: () => ({ showBanner: this.keet.shouldForceUpdate() }),
654 })
655 }
656 async upgradeRoom(e) {
657 this.keet.opened || (await this.keet.ready())
658 const t = this.keet.isNightly ? this.keet.abi.max : this.keet.abi.production
659 await this.keet.internalDispatchUpgrade(e, t)
660 }
661 async _getLinkInfo(e) {
662 const t = this.keet.internalGetLinkInfo(e)
663 if (!t) return null
664 if (t.identity)
665 return {
666 isIdentityInvitation: !0,
667 memberId: s.encode(t.identity.identityPublicKey),
668 invitationSeed: s.encode(t.identity.invitationSeed),
669 additionalNodes: t.additionalNodes,
670 }
671 if (t.room) {
672 const e = { capabilities: { mailboxKeyPair: { publicKey: t.room.mailbox } } },
673 i = await this.keet.local.get("@local/rooms-by-mailbox", e)
674 return {
675 isRoomInvitation: !0,
676 roomId: i ? s.encode(i.roomKey) : null,
677 title: i ? i.config.title : null,
678 description: i ? i.config.description : null,
679 avatar: i ? D(i.config.avatar) : null,
680 invitationSeed: s.encode(t.room.invitationSeed),
681 additionalNodes: t.additionalNodes,
682 }
683 }
684 return t.profile
685 ? {
686 isContactInfo: !0,
687 memberId: s.encode(t.attestation.memberKey),
688 displayName: t.profile.displayName,
689 username: t.profile.username,
690 additionalNodes: t.additionalNodes,
691 }
692 : t.readonly
693 ? { isReadOnly: !0, additionalNodes: t.additionalNodes }
694 : void 0
695 }
696 async _getSelfContactInfo({ id: e, profileInfo: t }) {
697 const s = this.keet.internalCreateContactInfoStruct(e, t, { avatar: null, timestamp: 0 })
698 return n.toString(s, "base64")
699 }
700 async _getIdentity({ id: e, profile: t, profileSnapshot: i, profileInfo: o }) {
701 const [r, n] = await Promise.all([
702 i.find("@keet/devices").toArray(),
703 i.get("@keet-private-id/settings"),
704 ]),
705 a = []
706 for (const e of r) e.status.isActive && a.push({ ...w(e), confirmed: !0 })
707 const c = v(o.selfMember, o.selfMember.key)
708 return (
709 (c.hasDiscoveryKey = !!o.identity.discoveryCoreKey),
710 (c.anonymous = !1),
711 (c.confirmed = e.status.isConfirmed),
712 (c.devices = a),
713 (c.profileId = t.id),
714 (c.profileDiscoveryId = t.discoveryId),
715 (c.local = { deviceId: s.encode(t.deviceKey) }),
716 (c.settings = F(n)),
717 (c.isLoggedOut = o.selfDevice && !o.selfDevice.status.isActive),
718 c
719 )
720 }
721 _removeIdentityDevice({ profile: e }, t) {
722 return e.dispatch("@keet/remove-device", { key: s.decode(t) })
723 }
724 subscribeIdentity() {
725 return this._addKeetSubscription(xe, { query: () => this.getIdentity() })
726 }
727 async _restoreIdentity(e, t = {}) {
728 await this.keet.restoreIdentity(e, t)
729 }
730 _getRecoveryPhrase() {
731 return this.keet.getRecoveryPhrase()
732 }
733 _getEncryptedRecoveryPhrase(e) {
734 return this.keet.getEncryptedRecoveryPhrase(e)
735 }
736 _decryptEncryptedRecoveryPhrase(e, t) {
737 return this.keet.decryptEncryptedRecoveryPhrase(e, t)
738 }
739 _freeRecoveryPhrase(e) {
740 return this.keet.freeRecoveryPhrase(e)
741 }
742 _confirmRecoveryPhrase(e) {
743 return this.keet.confirmRecoveryPhrase(e)
744 }
745 _storeRecoveryPhrase(e) {
746 return this.keet.storeRecoveryPhrase(e)
747 }
748 confirmIdentity(...e) {
749 throw (
750 console.log("confirmIdentity", ...e),
751 new Error("Missing required method: confirmIdentity")
752 )
753 }
754 async _confirmPairingRequest({ deviceId: e }, t = !0) {
755 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
756 const i = this.keet.privateProfile.key,
757 o = s.decode(e)
758 return t ? this.keet.acceptJoinRequest(i, o) : this.keet.rejectJoinRequest(i, o)
759 }
760 async _getIdentityPairingRequest() {
761 const e = await this.keet.internalOpenPrivateProfile(),
762 t = await e.db.find("@keet/join-requests").toArray()
763 return (this.keet.internalReleaseRoom(e), 0 === t.length ? null : M(t[0]))
764 }
765 subscribeIdentityPairingRequests(...e) {
766 return this._addKeetSubscription(xe, { query: () => this.getIdentityPairingRequest() })
767 }
768 async _updateIdentityProfile({ displayName: e, avatar: t }) {
769 await this.updateMember(e, t)
770 }
771 _updateIdentityDevice(e) {
772 return this.keet.updateDevice(e)
773 }
774 _startPairingIdentity(e) {
775 return this.keet.startPairingIdentity(e)
776 }
777 pairIdentity(...e) {
778 throw (console.log("pairIdentity", ...e), new Error("Missing required method: pairIdentity"))
779 }
780 async _updateUserSettings(e, t) {
781 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
782 const s = { [e]: t }
783 return this.keet.privateProfile.dispatch("@keet-private-id/update-settings", {
784 key: e,
785 settings: z(s),
786 })
787 }
788 async _getDHTSettings() {
789 const e = await this.keet.getDHTSettings()
790 return B(e)
791 }
792 async _updateDHTSettings(e, t) {
793 if (!(e in we)) return
794 const s = await this.keet.internalEnterLocalTransaction()
795 try {
796 const i = await this.keet.getDHTSettings()
797 ;((i[e] = t), await s.insert("@local/hyperdht", i), await s.flush())
798 } finally {
799 await this.keet.internalExitLocalTransaction()
800 }
801 }
802 async _createRoom(e = {}) {
803 const t = await this.keet.createRoom(tt(e))
804 return s.encode(t)
805 }
806 _pairRoom(...e) {
807 throw (console.log("pairRoom", ...e), new Error("Missing required method: pairRoom"))
808 }
809 _leaveRoom(e, t = {}) {
810 return this.keet.leaveRoom(s.decode(e))
811 }
812 async _startPairingRoom(e, t = {}) {
813 return await this.keet.startPairingRoom(e, t)
814 }
815 async _stopPairingRoom({ profile: e }, t) {
816 const i = s.decode(t),
817 o = await e.db.find("@keet-private-id/pending-invitations").toArray()
818 for (const e of o)
819 if (n.equals(e.invitationSeed, i)) {
820 await this.keet.stopPairing(e.id)
821 break
822 }
823 }
824 subscribePendingRooms() {
825 return this._addKeetSubscription(xe, { query: () => this.getPendingRooms() })
826 }
827 subscribePushNotificationChanges() {
828 return this._addKeetSubscription(Ue, {
829 map: function (e) {
830 const [t, o, r] = e,
831 n = r || i.discoveryKey(o)
832 return { type: t, roomId: s.encode(o), discoveryId: s.encode(n) }
833 },
834 })
835 }
836 subscribeActivateRoom(e) {
837 const t = s.decode(e)
838 return new c({
839 eagerOpen: !0,
840 open: async (e) => {
841 let s = null
842 try {
843 await this.keet.activateRoom(t)
844 } catch (e) {
845 s = e
846 }
847 e(s)
848 },
849 destroy: async (e) => {
850 let s = null
851 try {
852 await this.keet.deactivateRoom(t)
853 } catch (e) {
854 s = e
855 }
856 e(s)
857 },
858 })
859 }
860 _getRoomKeys(e) {
861 try {
862 const t = s.decode(e)
863 return { discoveryKey: n.toString(i.discoveryKey(t), "hex") }
864 } catch {
865 return { discoveryKey: "" }
866 }
867 }
868 _getTipSize({ base: e }) {
869 return e.linearizer.size
870 }
871 async _resyncPrivateProfile() {
872 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
873 const e = []
874 for await (const t of this.keet.privateProfile.db.find("@keet-private-id/rooms"))
875 (await this.keet.local.get("@local/rooms", { roomKey: t.roomKey })) || e.push(t)
876 for (const t of e) this.keet.tasks.joinRoomKeys(t.roomKey, { keys: t }).runBackground()
877 }
878 bookmark(...e) {
879 throw (console.log("bookmark", ...e), new Error("Missing required method: bookmark"))
880 }
881 unbookmark(...e) {
882 throw (console.log("unbookmark", ...e), new Error("Missing required method: unbookmark"))
883 }
884 subscribeBookmarks(...e) {
885 return (console.log("subscribeBookmarks", ...e), new c())
886 }
887 async _loadRecents(e, t = {}) {
888 const { index: s, range: i } = (function (e) {
889 return e.favorites
890 ? { index: "@local/rooms-by-favorite-and-timestamp", range: {} }
891 : e.default || e.dms || e.broadcast
892 ? {
893 index: "@local/rooms-by-type-and-timestamp",
894 range: { lte: { type: n(e) }, gte: { type: n(e) } },
895 }
896 : { index: "@local/rooms-by-timestamp", range: {} }
897 })(t),
898 o = await e.find(s, { ...t, ...i, reverse: !0 }).toArray(),
899 r = await Promise.all(o.map((t) => e.get("@local/room-preferences", { roomKey: t.roomKey })))
900 for (let e = 0; e < r.length; e++) {
901 const t = r[e]
902 t && !t.status.isActive && (o[e] = null)
903 }
904 return o
905 function n(e) {
906 return e.default ? W.Default : e.dms ? W.DirectMessage : e.broadcast ? W.Broadcast : void 0
907 }
908 }
909 async _getRoomInfo({ localSnapshot: e }, t) {
910 const o = s.decode(t),
911 r = await e.get("@local/rooms", { roomKey: o })
912 if (!r) return null
913 let n = v(r.lastMember)
914 const [a, c, h] = await Promise.all([
915 e.get("@local/room-preferences", { roomKey: r.roomKey }),
916 r.lastMessage && !n
917 ? e.get("@local/devices", { device: { key: r.lastMessage.oplog.key } })
918 : null,
919 e.get("@local/file-stats", { roomKey: r.roomKey }),
920 ])
921 if (c) {
922 const t = await e.get("@local/members", { key: c.device.memberKey })
923 t &&
924 (n = { id: s.encode(t.key), memberId: s.encode(t.key), displayName: t.profile.displayName })
925 }
926 if (r.lastMessage) {
927 const e = ae(r, r.lastMessage.id)
928 r.lastMessage.read = e
929 }
930 const d = r.selfDevice ? i.discoveryKey(r.selfDevice.key) : null,
931 l = d ? await this.keet.storage.getInfo(d, { hints: !0, auth: !1, head: !1 }) : null,
932 u = k({ roomInfo: r, preferences: a, lastMessageMember: n, storageInfo: l, fileStats: h })
933 return ((u.isVerified = this.keet.isRoomVerified(t)), u)
934 }
935 async _searchRooms({ local: e }) {
936 const t = await this._loadRecents(e),
937 i = []
938 for (const e of t) e && i.push({ title: e.config.title, roomId: s.encode(e.roomKey) })
939 return i
940 }
941 async _getRecentRooms({ local: e }, t) {
942 const [i, o] = await Promise.all([this._loadRecents(e, t), e.get("@local/stats")]),
943 r = []
944 for (const e of i)
945 e &&
946 r.push({
947 timestamp: e.timestamps.latestChatMessage || e.timestamps.latestSync,
948 roomId: s.encode(e.roomKey),
949 })
950 return { type: "all", total: o ? o.activeRooms : 0, rooms: r }
951 }
952 async _getPendingRooms({ profile: e }) {
953 return (await e.db.find("@keet-private-id/pending-invitations").toArray()).map(R)
954 }
955 _getLocalRoomMetadata({ local: e }, t) {
956 return e.get("@local/rooms", { discoveryKey: s.decode(t) })
957 }
958 subscribeRecentRooms(e) {
959 return this._addKeetSubscription(De, {
960 map: function (e) {
961 const [t, s, i] = e
962 return { type: t, timestamp: s, roomId: i }
963 },
964 query: () => this.getRecentRooms(e),
965 })
966 }
967 subscribeFavoriteRooms() {
968 return this._addKeetSubscription(qe, {
969 map: function (e) {
970 const [t, s, i] = e
971 return { type: t, timestamp: s, roomId: i }
972 },
973 query: () => this.getRecentRooms({ favorites: !0 }),
974 })
975 }
976 subscribeRoomInfo(e, t) {
977 return this._addRoomSubscription(e, { query: () => this.getRoomInfo(e, t), name: "room-info" })
978 }
979 subscribeUnreadActivity(e = {}) {
980 return this._addKeetSubscription(Fe, {
981 map: ({ roomId: t, index: s }) =>
982 t ? (e.includeLength || e.includeIndex ? { roomId: t, index: s } : { roomId: t }) : null,
983 })
984 }
985 subscribeErrors() {
986 return this._addKeetSubscription(Ne, { map: (e) => x(e) })
987 }
988 subscribeNotifications() {
989 const e = this.subscribeUnreadActivity({ includeIndex: !0 }),
990 t = c.from(this._subscribeNotifications(e))
991 return (
992 t.once("close", () => {
993 e.destroy()
994 }),
995 t
996 )
997 }
998 setCallRingingId(e) {
999 this._callRingingRoomId = e
1000 }
1001 setProcessingNotifications(e) {
1002 this._processingNotifications = e
1003 }
1004 async *_subscribeNotifications(e) {
1005 for await (const { roomId: i, index: o } of e) {
1006 if (this.keet.closing) return
1007 if (this._callRingingRoomId) {
1008 if (i !== this._callRingingRoomId) continue
1009 const e = await this.getChatMessage(i, o)
1010 if (this.keet.closing) return
1011 e?.event?.type === ge.CALL_HANGUP && (yield { type: ge.CALL_HANGUP })
1012 }
1013 if (this._processingNotifications) continue
1014 if (this.keet.backendAPI.api.call.callIsActive) continue
1015 const e = await this.getRoomPreferences(i, be.IS_FULLY_MUTED)
1016 if (this.keet.closing) return
1017 if (e || this._processingNotifications) continue
1018 const [r, n, a] = await Promise.all([
1019 this.getConfig(i),
1020 this.getChatMessage(i, o),
1021 this.keet.local.get("@local/identity"),
1022 ])
1023 if (this.keet.closing) return
1024 if (!n || Math.abs(Date.now() - n.timestamp) > Ie) continue
1025 const c = await this.getBlockedMembers()
1026 if (this.keet.closing) return
1027 if (c.some((e) => e.memberId === n.memberId) || this._processingNotifications) continue
1028 if (a && s.encode(a.publicKey) === n.memberId) continue
1029 const h = `${n.id.deviceId}/b${n.id.seq}`,
1030 d = t(n),
1031 l = (n.files.length > 0 && n.files[0].metadata?.mimetype) || "",
1032 u = await this.getMember(i, n.memberId)
1033 if (this.keet.closing) return
1034 const m = n.chat?.text || "",
1035 p = et(r.roomType) === W.DirectMessage
1036 if (!this._processingNotifications && (m || d)) {
1037 if (p && "call" === d) {
1038 if (Math.abs(Date.now() - n.timestamp) > Ce) continue
1039 if (!(await this.getActiveCalls(i)).length) continue
1040 yield { type: ge.CALL_STARTED }
1041 }
1042 const e = await this.getRoomInfo(i)
1043 if (this.keet.closing) return
1044 const t = e?.config?.avatar?.small?.pointer?.inlined ?? "",
1045 s = n.message?.generic?.locationShared
1046 yield A(
1047 {
1048 messageId: h,
1049 roomId: i,
1050 avatar: t,
1051 location: s,
1052 messageText: m,
1053 messageType: d,
1054 fileType: l,
1055 },
1056 r,
1057 u,
1058 )
1059 }
1060 }
1061 function t(e) {
1062 return e.event?.type === ge.CALL_STARTED
1063 ? "call"
1064 : e.files?.length > 0
1065 ? "file"
1066 : e.message?.generic?.locationShared
1067 ? "location"
1068 : ""
1069 }
1070 }
1071 setRoomUnread(...e) {
1072 throw (console.log("setRoomUnread", ...e), new Error("Missing required method: setRoomUnread"))
1073 }
1074 bumpRoomPriority(...e) {
1075 throw (
1076 console.log("bumpRoomPriority", ...e),
1077 new Error("Missing required method: bumpRoomPriority")
1078 )
1079 }
1080 addDevice(...e) {
1081 throw (console.log("addDevice", ...e), new Error("Missing required method: addDevice"))
1082 }
1083 removeDevice(...e) {
1084 throw (console.log("removeDevice", ...e), new Error("Missing required method: removeDevice"))
1085 }
1086 async _getDevice({ db: e }, t) {
1087 const s = await e.findOne("@keet/devices", O({ gte: t, lte: t }))
1088 return s ? w(s) : null
1089 }
1090 async _getDevices({ db: e }, t) {
1091 return (await e.find("@keet/devices", O(t)).toArray()).map((e) => w(e))
1092 }
1093 async moveIndexer(e, t, i) {
1094 if (!(await this.keet.internalFeatureSupported(e, Re.MOVE_INDEXER)))
1095 throw new Error("Move indexer not supported")
1096 const o = s.decode(t),
1097 r = s.decode(i)
1098 return this.keet.dispatch(e, "@keet/move-indexer", { deviceKey: o, fromDeviceKey: r })
1099 }
1100 subscribeDevice(e, ...t) {
1101 return this._addRoomSubscription(e, { query: () => this.getDevice(e, ...t) })
1102 }
1103 subscribeDevices(e, ...t) {
1104 return this._addRoomSubscription(e, { query: () => this.getDevices(e, ...t) })
1105 }
1106 async _createIdentityInvitation() {
1107 return this.keet.createIdentityInvitation()
1108 }
1109 _createInvitation(e, t = {}) {
1110 return (!0 === t.canIndex && (t.canAdmin = !0), this.keet.createRoomInvitation(s.decode(e), t))
1111 }
1112 async _updateMember(e, t) {
1113 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
1114 const i = await this.keet.local.get("@local/identity")
1115 if (i && s.encode(i.privateProfileKey))
1116 return ((t = V(t)), this.keet.updateProfile({ displayName: e, avatar: t }))
1117 }
1118 async _muteMember(e, t) {
1119 const i = s.decode(t)
1120 return this.keet.dispatch(e, "@keet/change-member-status", {
1121 memberKey: i,
1122 key: he.IsMuted,
1123 status: { isMuted: !0 },
1124 })
1125 }
1126 async _unmuteMember(e, t) {
1127 const i = s.decode(t)
1128 return this.keet.dispatch(e, "@keet/change-member-status", {
1129 memberKey: i,
1130 key: he.IsMuted,
1131 status: { isMuted: !1 },
1132 })
1133 }
1134 async _isMemberMuted({ db: e }, t) {
1135 const i = s.decode(t)
1136 return !!(await e.get("@keet/muted-members", { key: i }))
1137 }
1138 async _getMemberByDeviceId({ myKey: e, snapshot: t, blobsSnapshot: i }, o) {
1139 const r = await fe(t, s.decode(o))
1140 return r ? (await ye(i, r.profile.avatar), v(r, e)) : null
1141 }
1142 async _getMemberBySwarmId({ myKey: e, snapshot: t, blobsSnapshot: i }, o) {
1143 const r = s.decode(o),
1144 n = await t.get("@keet/devices-by-swarm-key", { profile: { swarmKey: r } })
1145 if (!n) return null
1146 const a = await fe(t, n.key)
1147 return a ? (await ye(i, a.profile.avatar), v(a, e)) : null
1148 }
1149 async _getMemberCount({ db: e }) {
1150 const t = await e.get("@keet/threads", { id: 0 })
1151 return t ? t.stats.members.active : 0
1152 }
1153 async _getDevicesByMemberId({ db: e }, t) {
1154 const i = [],
1155 o = s.decode(t),
1156 r = { gte: { memberKey: o }, lte: { memberKey: o } }
1157 for await (const t of e.find("@keet/devices-by-member-key", r)) i.push(w(t))
1158 return i
1159 }
1160 getCurrentDeviceId(e) {
1161 const t = this.keet.internalOpenExistingRoom(e)
1162 try {
1163 return t.deviceId
1164 } finally {
1165 this.keet.internalReleaseRoom(t)
1166 }
1167 }
1168 async _getMember({ roomId: e, myKey: t, base: i, snapshot: o, blobsSnapshot: r }, n, a = {}) {
1169 const c = s.decode(n)
1170 if (!0 === a.swarmId) return this.getMemberBySwarmId(e, n)
1171 const h = await o.get("@keet/members", { key: c })
1172 return h ? (await ye(r, h.profile.avatar), v(h, t)) : null
1173 }
1174 async _getActiveMember({ myKey: e, snapshot: t, blobsSnapshot: i }, o) {
1175 const r = await t.get("@keet/active-members", { key: s.decode(o) })
1176 return r ? (await ye(i, r.profile.avatar), v(r, e)) : null
1177 }
1178 async _removeMember(e, t) {
1179 const i = s.decode(e),
1180 o = await this.keet.local.get("@local/rooms", { roomKey: i })
1181 if (!o) return
1182 const { isFeatureSupported: r, FEATURES: n } = this.keet.versions
1183 return r(o.digest.abi.version, n.REMOVE_MEMBER_V2)
1184 ? this.keet.dispatch(e, "@keet/remove-member", { key: s.decode(t) })
1185 : void 0
1186 }
1187 async _getMembers({ myKey: e, snapshot: t, blobsSnapshot: s }, i = {}) {
1188 const o = await t.find("@keet/members", O(i)).toArray()
1189 return Promise.all(o.map(async (t) => (await ye(s, t.profile.avatar), v(t, e))))
1190 }
1191 async _getActiveMembers({ myKey: e, snapshot: t, blobsSnapshot: s }, i = {}) {
1192 const o = await t.find("@keet/active-members", O(i)).toArray()
1193 return Promise.all(o.map(async (t) => (await ye(s, t.profile.avatar), v(t, e))))
1194 }
1195 async _getModerators({ myKey: e, snapshot: t, blobsSnapshot: s }, i = {}) {
1196 const o = await t.find("@keet/moderators", O(i)).toArray()
1197 return Promise.all(o.map(async (t) => (await ye(s, t.profile.avatar), v(t, e))))
1198 }
1199 async _waitUntilJoined({ roomKey: e, local: t }) {
1200 const s = await t.get("@local/rooms", { roomKey: e })
1201 return s ? v(s.selfMember) : null
1202 }
1203 getMemberForDevice(...e) {
1204 throw (
1205 console.log("getMemberForDevice", ...e),
1206 new Error("Missing required method: getMemberForDevice")
1207 )
1208 }
1209 subscribeMemberCount(e, ...t) {
1210 return this._addRoomSubscription(e, { query: () => this.getMemberCount(e, ...t) })
1211 }
1212 subscribeMember(e, ...t) {
1213 return this._addRoomSubscription(e, { query: () => this.getMember(e, ...t) })
1214 }
1215 subscribeActiveMember(e, ...t) {
1216 return this._addRoomSubscription(e, { query: () => this.getActiveMember(e, ...t) })
1217 }
1218 subscribeActiveMembers(e, ...t) {
1219 return this._addRoomSubscription(e, { query: () => this.getActiveMembers(e, ...t) })
1220 }
1221 subscribeMembers(e, ...t) {
1222 return this._addRoomSubscription(e, { query: () => this.getMembers(e, ...t) })
1223 }
1224 subscribeModerators(e, ...t) {
1225 return this._addRoomSubscription(e, { query: () => this.getModerators(e, ...t) })
1226 }
1227 subscribeMemberForDevice(e, ...t) {
1228 return this._addRoomSubscription(e, { query: () => this.getMemberByDeviceId(e, ...t) })
1229 }
1230 _changeMemberRole(e, { memberId: t, role: i }) {
1231 return this.keet.dispatch(e, "@keet/change-member-role", {
1232 key: s.decode(t),
1233 isAdmin: i === de.ADMIN,
1234 isModerator: i === de.ADMIN || i === de.MODERATOR,
1235 })
1236 }
1237 async _getSearchMembers({ myKey: e, db: t, blobsSnapshot: s }, i, { limit: o = 50 } = {}) {
1238 i = i.toLowerCase()
1239 const r = await t.find("@keet/members-by-member-name", { gte: { name: i }, limit: o }).toArray()
1240 return (await Promise.all(r.map(async (t) => (await ye(s, t.profile.avatar), v(t, e))))).filter(
1241 (e) => e.name.startsWith(i),
1242 )
1243 }
1244 getPushNotificationMembers(...e) {
1245 throw (
1246 console.log("getPushNotificationMembers", ...e),
1247 new Error("Missing required method: getPushNotificationMembers")
1248 )
1249 }
1250 subscribeSearchMembers(...e) {
1251 return (console.log("subscribeSearchMembers", ...e), new c())
1252 }
1253 subscribePushNotificationMembers(...e) {
1254 return (console.log("subscribePushNotificationMembers", ...e), new c())
1255 }
1256 async _getContactInfo({ local: e, profile: t }, i) {
1257 const o = s.decode(i),
1258 [r, n, a] = await Promise.all([
1259 e.get("@local/contacts", { memberKey: o }),
1260 e.findOne("@local/rooms-by-contact", { gte: { contact: o }, lte: { contact: o } }),
1261 t.db.findOne("@keet-private-id/pending-contact-requests-by-member", {
1262 gte: { memberKey: o },
1263 lte: { memberKey: o },
1264 }),
1265 ])
1266 return K(i, r, n, a)
1267 }
1268 subscribeContactInfo(e) {
1269 return this._addRoomSubscription(Pe, {
1270 query: async () => {
1271 const t = this.keet.local.snapshot()
1272 try {
1273 const i = s.decode(e),
1274 [o, r] = await Promise.all([
1275 t.get("@local/contacts", { memberKey: i }),
1276 t.findOne("@local/rooms-by-contact", { gte: { contact: i }, lte: { contact: i } }),
1277 ])
1278 return K(e, o, r, null)
1279 } finally {
1280 await t.close()
1281 }
1282 },
1283 })
1284 }
1285 async _blockMember(e, t) {
1286 const i = s.decode(t)
1287 return this.keet.blockContact(i)
1288 }
1289 async _unblockMember(e, t) {
1290 const i = s.decode(t)
1291 return this.keet.unblockContact(i)
1292 }
1293 async _getBlockedMembers({ local: e }) {
1294 return (await e.find("@local/blocked-contacts").toArray()).map(({ memberKey: e }) => ({
1295 memberId: s.encode(e),
1296 }))
1297 }
1298 subscribeBlockedMembers() {
1299 return this._addRoomSubscription(Ae, { query: () => this.getBlockedMembers() })
1300 }
1301 getConnectedMembers(...e) {
1302 throw (
1303 console.log("getConnectedMembers", ...e),
1304 new Error("Missing required method: getConnectedMembers")
1305 )
1306 }
1307 subscribeConnectedMembers(...e) {
1308 return (console.log("subscribeConnectedMembers", ...e), new c())
1309 }
1310 async _updateConfig(e, t, s) {
1311 const i = Ze(t)
1312 if (0 !== i) {
1313 const t = { [se[i - 1]]: s }
1314 await this.keet.dispatch(e, "@keet/update-room-config", { key: i, config: H(t) })
1315 } else if ("roomType" === t) {
1316 const t = et(s)
1317 if (0 === t) throw new Error("Invalid room type")
1318 await this.keet.dispatch(e, "@keet/update-system-settings", {
1319 key: ie.RoomType,
1320 settings: { roomType: t },
1321 })
1322 } else {
1323 if ("canCall" !== t) throw new Error("Invalid config key")
1324 await this.keet.dispatch(e, "@keet/update-system-settings", {
1325 key: ie.IsCallingDisabled,
1326 settings: { isCallingDisabled: "false" === s },
1327 })
1328 }
1329 }
1330 async _updateRoomPreferences({ profile: e }, t, i, o) {
1331 if (!ue(i)) throw new Error(`invalid preference key: ${i}`)
1332 const r = s.decode(t)
1333 await this.keet.dispatch(e.id, "@keet-private-id/update-room-status", {
1334 roomKey: r,
1335 key: Qe(i),
1336 status: { [me(i)]: o },
1337 })
1338 }
1339 async _updateRoomSettings(e, t, i) {
1340 if (
1341 t === Q.IsAttachmentsDisabled &&
1342 !(await this.keet.internalFeatureSupported(e, Re.DISABLE_FILE_ATTACHMENTS))
1343 )
1344 throw new Error("Disabling file attachments not supported")
1345 if (t === Q.IsLinksDisabled && !(await this.keet.internalFeatureSupported(e, Re.DISABLE_LINKS)))
1346 throw new Error("Disabling links not supported")
1347 const o = s.decode(e)
1348 return this.keet.dispatch(o, "@keet/update-system-settings", { key: t, settings: i })
1349 }
1350 async _getRoomSettings(e) {
1351 const t = s.decode(e),
1352 i = this.keet.internalOpenExistingRoom(t)
1353 try {
1354 return (await i.db.get("@keet/system-digest")).settings
1355 } finally {
1356 this.keet.internalReleaseRoom(i)
1357 }
1358 }
1359 async _getRoomPreferences({ local: e }, t, i) {
1360 const o = s.decode(t),
1361 r = await e.get("@local/room-preferences", { roomKey: o })
1362 if (!r) return null
1363 const { status: n } = r
1364 return ue(i) ? (i ? n[me(i)] : n) : null
1365 }
1366 async _getConfig({ roomKey: e, local: t }, s) {
1367 const i = await t.get("@local/rooms", { roomKey: e })
1368 if (!i) return null
1369 const { config: o, digest: r } = i,
1370 n = _(o, r) || {}
1371 return s ? n[s] : n
1372 }
1373 subscribeConfig(e) {
1374 return this._addRoomSubscription(e, { query: () => this.getConfig(e) })
1375 }
1376 async _addChatMessage(e, t, i = {}) {
1377 const o = s.decode(e),
1378 r = await this.keet.local.get("@local/rooms", { roomKey: o })
1379 if (!r) return
1380 const n = T(t, i),
1381 a = st(n),
1382 { isFeatureSupported: c, FEATURES: h } = this.keet.versions,
1383 d = c(r.digest.abi.version, h.MULTI_FILES)
1384 if (n.files.length && !d) throw new Error("multi files not supported")
1385 const l = this.keet.batch(e)
1386 return 0 !== (await l.dispatch("@keet/add-chat-message", { timestamp: Date.now(), message: n }))
1387 ? ((a.files.length || a.pearLink.length || a.httpLink.length) && (await it(l, a)),
1388 await l.flush())
1389 : void 0
1390 }
1391 async _updateChatMessage(e, t, i, o = {}) {
1392 const r = s.decode(e),
1393 n = await this.keet.local.get("@local/rooms", { roomKey: r })
1394 if (!n) return
1395 const a = N(t),
1396 c = T(i, o),
1397 h = st(c),
1398 { isFeatureSupported: d, FEATURES: l } = this.keet.versions,
1399 u = d(n.digest.abi.version, l.MULTI_FILES)
1400 if (c.files.length && !u) throw new Error("multi files not supported")
1401 const m = this.keet.batch(e)
1402 0 !== (await m.dispatch("@keet/update-chat-message", { oplog: a, message: c })) &&
1403 ((h.files.length || h.pearLink.length || h.httpLink.length) && (await it(m, h, a)),
1404 await m.flush())
1405 }
1406 async _removeChatMessage(
1407 { roomKey: e, local: t, roomId: s, snapshot: i, blobsSnapshot: o, files: r },
1408 n,
1409 ) {
1410 const a = await this._getChatMessageById(
1411 { roomKey: e, local: t, snapshot: i, blobsSnapshot: o, files: r },
1412 n,
1413 )
1414 if (!a) return null
1415 if (a.files.length) {
1416 const t = []
1417 for (const s of a.files) t.push(this._clearFile({ roomKey: e, files: r }, s))
1418 await Promise.all(t)
1419 }
1420 return this.keet.dispatch(s, "@keet/remove-chat-message", { oplog: N(n) })
1421 }
1422 async _forwardChatMessage(
1423 { roomKey: e, local: t, roomId: i, snapshot: o, blobsSnapshot: r, files: n },
1424 a,
1425 c,
1426 ) {
1427 const [h, d] = await Promise.all([
1428 this.keet.local.get("@local/rooms", { roomKey: e }),
1429 this.keet.local.get("@local/rooms", { roomKey: s.decode(c) }),
1430 ])
1431 if (!h || !d) return
1432 const { isFeatureSupported: l, FEATURES: u } = this.keet.versions
1433 if (!l(h.digest.abi.version, u.FORWARDED_MESSAGE))
1434 throw new Error("Message forwarding not supported")
1435 if (!l(d.digest.abi.version, u.FORWARDED_MESSAGE))
1436 throw new Error("Message forwarding not supported")
1437 const m = await o.get("@keet/chat-by-message-id", { oplog: N(a) })
1438 if (!m) throw new Error("Source message not found")
1439 if (!m.message.text) throw new Error("Source message has no text")
1440 const p = m.message.display || {}
1441 for (const e of p.httpLink || []) e.preview = null
1442 for (const e of p.pearLink || []) e.preview = null
1443 const b = {
1444 text: m.message.text,
1445 forwarded: !0,
1446 files: [],
1447 display: p,
1448 replyTo: null,
1449 event: null,
1450 }
1451 return this.keet.dispatch(c, "@keet/add-chat-message", { timestamp: Date.now(), message: b })
1452 }
1453 _pinChatMessage(e, t) {
1454 return this.keet.dispatch(e, "@keet/pin-chat-message", { oplog: N(t), isPinned: !0 })
1455 }
1456 _unpinChatMessage(e, t) {
1457 return this.keet.dispatch(e, "@keet/pin-chat-message", { oplog: N(t), isPinned: !1 })
1458 }
1459 async startCall(e, t = {}) {
1460 const o = await this.keet.internalFeatureSupported(e, Re.CALLS_V2)
1461 if ((this.keet.backendAPI.call.setSkipJoinLeave(o), !o)) return this.addCallStartedEvent(e)
1462 const r = s.decode(e),
1463 { version: n, callId: a, encryptionId: c } = t
1464 if (!n) throw new Error("Call version required")
1465 if (2 === n && !a) throw new Error("Calls v2 requires callId")
1466 const h = await this.keet.local.get("@local/rooms", { roomKey: r }),
1467 d = 2 === n ? s.decode(a) : i.randomBytes(32),
1468 l = c ? s.decode(c) : h.encryptionKey,
1469 u = 1 === n ? h.discoveryKey : null,
1470 m = Array.isArray(t?.streams) ? t.streams : []
1471 return this.keet.dispatch(e, "@keet/start-call", {
1472 version: n,
1473 callKey: d,
1474 encryptionKey: l,
1475 discoveryKey: u,
1476 streams: m.map((e) => s.decode(e)),
1477 })
1478 }
1479 async joinCall(e, t, i = []) {
1480 const o = await this.keet.internalFeatureSupported(e, Re.CALLS_V2)
1481 if ((this.keet.backendAPI.call.setSkipJoinLeave(o), o))
1482 return this.keet.dispatch(e, "@keet/join-call", {
1483 callKey: s.decode(t),
1484 streams: i.map((e) => s.decode(e)),
1485 })
1486 }
1487 async leaveCall(e, t) {
1488 if (await this.keet.internalFeatureSupported(e, Re.CALLS_V2))
1489 return this.keet.dispatch(e, "@keet/leave-call", { callKey: s.decode(t) })
1490 }
1491 async endCall(e, t) {
1492 if (!(await this.keet.internalFeatureSupported(e, Re.CALLS_V2))) {
1493 const t = s.decode(e)
1494 if (!(await this.keet.local.get("@local/rooms", { roomKey: t })).dm) return
1495 return this.addCallHangupEvent(e)
1496 }
1497 return this.keet.dispatch(e, "@keet/end-call", { callKey: s.decode(t) })
1498 }
1499 async addCallStream(e, t, i) {
1500 if (!(await this.keet.internalFeatureSupported(e, Re.CALLS_V2)))
1501 throw new Error("Calls v2 is not supported")
1502 return this.keet.dispatch(e, "@keet/add-call-stream", {
1503 callKey: s.decode(t),
1504 streamKey: s.decode(i),
1505 })
1506 }
1507 async removeCallStream(e, t, i) {
1508 if (!(await this.keet.internalFeatureSupported(e, Re.CALLS_V2)))
1509 throw new Error("Calls v2 is not supported")
1510 return this.keet.dispatch(e, "@keet/remove-call-stream", {
1511 callKey: s.decode(t),
1512 streamKey: s.decode(i),
1513 })
1514 }
1515 async _getActiveCalls({ snapshot: e }) {
1516 return ce(e, "@keet/active-calls-by-timestamp")
1517 }
1518 async _getCalls({ snapshot: e }) {
1519 return ce(e, "@keet/calls-by-timestamp")
1520 }
1521 subscribeActiveCalls(e, ...t) {
1522 return this._addRoomSubscription(e, { query: () => this.getActiveCalls(e, ...t) })
1523 }
1524 subscribeCalls(e, ...t) {
1525 return this._addRoomSubscription(e, { query: () => this.getCalls(e, ...t) })
1526 }
1527 _addCallStartedEvent(e) {
1528 return this.addChatMessage(e, null, { callStarted: !0 })
1529 }
1530 _addCallHangupEvent(e) {
1531 return this.addChatMessage(e, null, { callHangup: !0 })
1532 }
1533 _addCallMissedEvent(e) {
1534 return this.addChatMessage(e, null, { callMissed: !0 })
1535 }
1536 async _addLocationSharedEvent(e, t, { locationShared: { latitude: i, longitude: o } }) {
1537 const r = s.decode(e),
1538 n = await this.keet.local.get("@local/rooms", { roomKey: r })
1539 if (!n) return
1540 const { isFeatureSupported: a, FEATURES: c } = this.keet.versions
1541 if (!a(n.digest.abi.version, c.LOCATION_SHARED_EVENT))
1542 throw new Error("Location sharing not supported")
1543 return this.addChatMessage(e, t, { locationShared: { latitude: i, longitude: o } })
1544 }
1545 addRoomAvatarChangedEvent(...e) {
1546 ;(console.log("addRoomAvatarChangedEvent", ...e),
1547 console.warn("Missing required method: addRoomAvatarChangedEvent"))
1548 }
1549 addEvent(...e) {
1550 ;(console.log("addEvent", ...e), console.warn("Missing required method: addEvent"))
1551 }
1552 removeEvent(...e) {
1553 ;(console.log("removeEvent", ...e), console.warn("Missing required method: removeEvent"))
1554 }
1555 async _getChatMessage({ roomKey: e, local: t, snapshot: s, blobsSnapshot: i, files: o }, r) {
1556 return (
1557 await oe(
1558 async function () {
1559 const t = U(e, { gte: r, lte: r })
1560 return await s.findOne("@keet/chat", t)
1561 },
1562 e,
1563 t,
1564 s,
1565 i,
1566 o,
1567 )
1568 )[0]
1569 }
1570 async _getChatMessageById({ roomKey: e, local: t, snapshot: s, blobsSnapshot: i, files: o }, r) {
1571 return (
1572 await oe(
1573 async function () {
1574 return await s.get("@keet/chat-by-message-id", { oplog: N(r) })
1575 },
1576 e,
1577 t,
1578 s,
1579 i,
1580 o,
1581 )
1582 )[0]
1583 }
1584 async _getChatMessages({ roomKey: e, local: t, snapshot: s, blobsSnapshot: i, files: o }, r) {
1585 return await oe(
1586 async function () {
1587 const t = U(e, r)
1588 return await s.find("@keet/chat", t).toArray()
1589 },
1590 e,
1591 t,
1592 s,
1593 i,
1594 o,
1595 )
1596 }
1597 async _getPinnedChatMessages(
1598 { roomKey: e, local: t, snapshot: s, blobsSnapshot: i, files: o },
1599 r,
1600 ) {
1601 return await oe(
1602 async function () {
1603 return await s.find("@keet/pinned-chat-messages", r).toArray()
1604 },
1605 e,
1606 t,
1607 s,
1608 i,
1609 o,
1610 )
1611 }
1612 async _getChatLength({ db: e }) {
1613 const t = await e.get("@keet/threads", { id: 0 })
1614 return { length: t ? t.count : 0 }
1615 }
1616 subscribeChatMessages(e, ...t) {
1617 return this._addRoomSubscription(e, { query: () => this.getChatMessages(e, ...t) })
1618 }
1619 subscribeChatLength(e, t) {
1620 let s = 0
1621 return this._addRoomSubscription(e, {
1622 query: async () => {
1623 if (!t || !t.reorders) return this.getChatLength(e)
1624 if (this.keet.closing) return null
1625 const i = this.keet.internalOpenExistingRoom(e)
1626 try {
1627 const { length: t } = await this.getChatLength(e),
1628 o = i.base.view.core.fork !== s
1629 return ((s = i.base.view.core.fork), { length: t, reordered: o })
1630 } finally {
1631 this.keet.internalReleaseRoom(i)
1632 }
1633 },
1634 })
1635 }
1636 async _searchChatMessages(
1637 { snapshot: e, roomKey: t, local: s, blobsSnapshot: i, files: o },
1638 n,
1639 { limit: a = 1e3, reverse: c = !0 } = {},
1640 ) {
1641 if (!n || !n.length) return []
1642 const h = await s.get("@local/rooms", { roomKey: t })
1643 if (!h) return []
1644 if (!(n = n.map((e) => e.replace(/\s/g, "").toLowerCase()).filter((e) => e)).length) return []
1645 const d = []
1646 for await (const s of e.find("@keet/chat", { limit: a, reverse: c })) {
1647 if (!s.message?.text) continue
1648 const a = s.message.text.replace(/\s/g, "").toLowerCase()
1649 if (n.every((e) => a.indexOf(e) > -1)) {
1650 const n = re(t, e, i, h, o, s)
1651 ;(n.catch(r), d.push(n))
1652 }
1653 }
1654 return Promise.all(d)
1655 }
1656 createChatSearchStream(e, t, s) {
1657 return c.from(this._createChatSearchGenerator(e, t, s))
1658 }
1659 async *_createChatSearchGenerator(e, t, { limit: i = 1e3, reverse: o = !0 } = {}) {
1660 if (!t || !t.length) return
1661 if (!(t = t.map((e) => e.replace(/\s/g, "").toLowerCase()).filter((e) => e)).length) return
1662 const r = s.decode(e),
1663 n = await this.keet.local.get("@local/rooms", { roomKey: r })
1664 if (!n) return
1665 const a = this.keet.internalOpenExistingRoom(r)
1666 await a.ready()
1667 const c = a.db.snapshot(),
1668 h = a.blobs.snapshot(),
1669 d = this.keet.local.snapshot(),
1670 l = this.keet.files,
1671 u = c.find("@keet/chat", { limit: i, reverse: o })
1672 try {
1673 for await (const e of u) {
1674 const t = await m(e)
1675 t && (yield t)
1676 }
1677 } catch (e) {
1678 this.keet.onerror(e)
1679 } finally {
1680 ;(await d.close(), await c.close(), await h.close(), this.keet.internalReleaseRoom(a))
1681 }
1682 async function m(e) {
1683 if (!e.message?.text) return
1684 const i = e.message.text.replace(/\s/g, "").toLowerCase()
1685 if (!t.every((e) => i.indexOf(e) > -1)) return
1686 const o = await re(r, c, h, n, l, e)
1687 if (o.labels.flagged || o.labels.flags >= pe) return
1688 const a = s.decode(o.memberId)
1689 return (await d.get("@local/blocked-contacts", { memberKey: a })) ||
1690 (await c.get("@keet/muted-members", { key: a })) ||
1691 o.reactions.digest.reactions.find((e) => "⚠️" === e.text)
1692 ? void 0
1693 : o
1694 }
1695 }
1696 _sendDMFromContact(e, { message: t = null } = {}) {
1697 return this.keet.sendContactRequestFromContact(e, { message: t })
1698 }
1699 _sendDMRequest(e, t, { message: s = null } = {}) {
1700 return this.sendInvitations(e, { receivers: [t], message: s })
1701 }
1702 async _sendInvitations(e, { receivers: t, message: i }) {
1703 const o = s.decode(e),
1704 r = Array.isArray(t) ? t[0] : t,
1705 n = s.decode(r)
1706 await this.keet.sendContactRequest(o, n, { message: i })
1707 }
1708 async _updatePrivateMailboxRecord({ memberId: e, roomId: t }, i = {}) {
1709 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
1710 const o = i.isSeen || 1 === i.seen
1711 return this.keet.privateProfile.dispatch("@keet-private-id/update-contact-request-status", {
1712 memberKey: s.decode(e),
1713 roomKey: s.decode(t),
1714 key: Z.IsSeen,
1715 status: { isSeen: o },
1716 })
1717 }
1718 async _getDmRequestsByStatus({ profileDb: e }, t, { reverse: s = !0 } = {}) {
1719 if (!e) return []
1720 const i =
1721 {
1722 [le.ACCEPTED]: "@keet-private-id/accepted-contact-requests-v2",
1723 [le.REJECTED]: "@keet-private-id/rejected-contact-requests-v2",
1724 [le.PENDING]: "@keet-private-id/pending-contact-requests-v2",
1725 [le.DISCARDED]: "@keet-private-id/discarded-contact-requests-v2",
1726 }[t] || "@keet-private-id/pending-contact-requests-v2"
1727 return (await e.find(i, { reverse: s }).toArray()).map(I)
1728 }
1729 subscribeDmRequestsByStatus(e, t = {}) {
1730 return this._addRoomSubscription(Ae, { query: () => this.getDmRequestsByStatus(e, t) })
1731 }
1732 async _getPrivateMailboxRecords({ profile: e }, t = {}) {
1733 console.warn("Deprecated: getPrivateMailboxRecords")
1734 }
1735 subscribePrivateMailbox() {
1736 return (console.warn("Deprecated: subscribePrivateMailbox"), new c())
1737 }
1738 getSentPrivateMailboxRecords(...e) {
1739 console.warn("Deprecated: getSentPrivateMailboxRecords")
1740 }
1741 subscribeSentPrivateMailbox(...e) {
1742 return (console.warn("Deprecated: subscribeSentPrivateMailbox"), new c())
1743 }
1744 async _getDmByMemberId({ profileSnapshot: e }, t) {
1745 const o = s.decode(t),
1746 [r, n] = await Promise.all([
1747 e.get("@keet-private-id/contacts", { memberKey: o }),
1748 e.get("@keet-private-id/contact-requests", { memberKey: o }),
1749 ])
1750 let a = null
1751 return (
1752 r && r.roomKey ? (a = r.roomKey) : n && (a = n.keys.key),
1753 {
1754 roomId: a ? s.encode(a) : null,
1755 discoveryId: a ? s.encode(i.discoveryKey(a)) : null,
1756 dmMemberId: t,
1757 recipient: t,
1758 }
1759 )
1760 }
1761 async updateRoomInvitationSeenStatus({ discoveryId: e, invitationId: t }, i) {
1762 return this.keet.updateRoomInvitationSeenStatus(s.decode(e), s.decode(t), i)
1763 }
1764 async _acceptDmRequest({ memberId: e, roomId: t }) {
1765 return (
1766 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
1767 this.keet.privateProfile.dispatch("@keet-private-id/update-contact-request-status", {
1768 memberKey: s.decode(e),
1769 roomKey: s.decode(t),
1770 key: Z.IsAccepted,
1771 status: { isAccepted: !0 },
1772 })
1773 )
1774 }
1775 async _rejectDmRequest({ memberId: e, roomId: t }) {
1776 return (
1777 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
1778 this.keet.privateProfile.dispatch("@keet-private-id/update-contact-request-status", {
1779 memberKey: s.decode(e),
1780 roomKey: s.decode(t),
1781 key: Z.IsRejected,
1782 status: { isRejected: !0 },
1783 })
1784 )
1785 }
1786 async discardDmRequest({ memberId: e, roomId: t }) {
1787 return (
1788 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
1789 this.keet.privateProfile.dispatch("@keet-private-id/update-contact-request-status", {
1790 memberKey: s.decode(e),
1791 roomKey: s.decode(t),
1792 key: Z.IsDiscarded,
1793 status: { isDiscarded: !0 },
1794 })
1795 )
1796 }
1797 _addReaction(e, t, i) {
1798 return this.keet.dispatch(e, "@keet/add-reaction", {
1799 oplog: { key: s.decode(t.deviceId), seq: t.seq },
1800 reaction: i,
1801 })
1802 }
1803 _removeReaction(e, t, i) {
1804 return this.keet.dispatch(e, "@keet/remove-reaction", {
1805 oplog: { key: s.decode(t.deviceId), seq: t.seq },
1806 reaction: i,
1807 })
1808 }
1809 async _getLatestReactions({ snapshot: e }, t, s, { limit: i } = {}) {
1810 const { id: o } = await e.get("@keet/chat-by-message-id", { oplog: N(t) })
1811 return (
1812 await e
1813 .find("@keet/reactions-by-clock", {
1814 gte: { id: o, reaction: s },
1815 lte: { id: o, reaction: s },
1816 limit: i,
1817 reverse: !0,
1818 })
1819 .toArray()
1820 ).map((e) => C(e))
1821 }
1822 async _getReactions({ roomKey: e, snapshot: t, local: s }, i) {
1823 const o = N(i)
1824 return ne({ roomKey: e, snapshot: t, local: s, oplog: o })
1825 }
1826 subscribeReactions(e, t) {
1827 return this._addRoomSubscription(e, { query: () => this.getReactions(e, t) })
1828 }
1829 subscribeReportedMessages(e, ...t) {
1830 return this._addRoomSubscription(e, { query: () => this.getReportedMessages(e, ...t) })
1831 }
1832 subscribeReportedMembers(e, ...t) {
1833 return this._addRoomSubscription(e, { query: () => this.getReportedMembers(e, ...t) })
1834 }
1835 async _getReportedMembers({ snapshot: e, blobsSnapshot: t }, { clock: i, limit: o = 50 } = {}) {
1836 const r = await e.find("@keet/member-label-digests-by-clock", {
1837 gte: { label: $.Flag },
1838 lte: { label: $.Flag, clock: i },
1839 limit: o <= 50 ? o : 50,
1840 reverse: !0,
1841 }),
1842 n = []
1843 for await (const e of r) {
1844 const t = a.bind(this)
1845 n.push(t(e))
1846 }
1847 return await Promise.all(n)
1848 async function a(i) {
1849 const { key: o, total: r, flagsClock: n } = i,
1850 a = await this._getMember({ snapshot: e, blobsSnapshot: t }, s.encode(o))
1851 return ((a.labels = { total: r, flagsClock: n }), a)
1852 }
1853 }
1854 reportMember(e, t) {
1855 return this.keet.dispatch(e, "@keet/add-member-label", { key: s.decode(t), label: $.Flag })
1856 }
1857 async _getReportedMessages(
1858 { roomKey: e, local: t, snapshot: s, blobsSnapshot: i, files: o },
1859 { clock: r, limit: n = 50 } = {},
1860 ) {
1861 const a = await t.get("@local/rooms", { roomKey: e })
1862 if (!a) return
1863 const c = await s.find("@keet/chat-label-digests-by-clock", {
1864 gte: { label: X.Flag },
1865 lte: { label: X.Flag, clock: r },
1866 limit: n <= 50 ? n : 50,
1867 reverse: !0,
1868 }),
1869 h = []
1870 for await (const { id: e } of c) h.push(d(e))
1871 return await Promise.all(h)
1872 async function d(t) {
1873 const r = await s.findOne("@keet/chat", { gte: { id: t }, lte: { id: t } })
1874 return re(e, s, i, a, o, r)
1875 }
1876 }
1877 _addChatReport(e, t) {
1878 const s = N(t)
1879 return this.keet.dispatch(e, "@keet/add-chat-label", { oplog: s, label: X.Flag })
1880 }
1881 _removeChatReport(e, t) {
1882 const s = N(t)
1883 return this.keet.dispatch(e, "@keet/remove-chat-label", { oplog: s, label: X.Flag })
1884 }
1885 addFileBlob(...e) {
1886 throw (console.log("addFileBlob", ...e), new Error("Missing required method: addFileBlob"))
1887 }
1888 addFile(...e) {
1889 throw (console.log("addFile", ...e), new Error("Missing required method: addFile"))
1890 }
1891 async _saveFileBlob({ roomKey: e, files: t }, s, i) {
1892 const o = await t.saveFileBlob(e, s, i)
1893 return S(o)
1894 }
1895 async _saveFile({ roomKey: e, files: t }, s, i) {
1896 const o = await t.saveFile(e, s, i)
1897 return S(o)
1898 }
1899 subscribeAddFile(e, t, i) {
1900 const o = s.decode(e)
1901 return d(
1902 this.keet.files.subscribeAddFile(o, t, i),
1903 new h({
1904 transform(e, t) {
1905 t(null, { ...e, result: S(e.result) })
1906 },
1907 }),
1908 )
1909 }
1910 async _sendFile(e, t) {
1911 const s = t.preview
1912 t.preview = null
1913 const i = this.keet.batch(e),
1914 o = await i.dispatch("@keet/add-chat-message", {
1915 timestamp: Date.now(),
1916 message: T(null, { files: [t] }),
1917 })
1918 0 !== o &&
1919 (s &&
1920 (await i.dispatch(
1921 "@keet/add-file-preview",
1922 { oplog: { key: i.key, seq: o - 1 }, index: 0, preview: V(s) },
1923 { dryRun: !1 },
1924 )),
1925 await i.flush())
1926 }
1927 async _sendFiles(e, t = []) {
1928 const s = []
1929 for (const e of t) (s.push(e.preview), (e.preview = null))
1930 const i = this.keet.batch(e),
1931 o = await i.dispatch("@keet/add-chat-message", {
1932 timestamp: Date.now(),
1933 message: T(null, { files: t }),
1934 })
1935 if (0 === o) return
1936 const r = { key: i.key, seq: o - 1 }
1937 for (let e = 0; e < s.length; e++) {
1938 const t = s[e]
1939 t &&
1940 (await i.dispatch(
1941 "@keet/add-file-preview",
1942 { oplog: r, index: e, preview: V(t) },
1943 { dryRun: !1 },
1944 ))
1945 }
1946 await i.flush()
1947 }
1948 removeFile(...e) {
1949 throw (console.log("removeFile", ...e), new Error("Missing required method: removeFile"))
1950 }
1951 subscribeFileInfo(e, t) {
1952 const i = s.decode(e),
1953 o = this
1954 let r = null
1955 return new c({
1956 async open(e) {
1957 let s = null
1958 try {
1959 ;((r = await o.keet.files.monitor(i, j(t))),
1960 r.on("update", (e) => {
1961 this.push(r.stats)
1962 }))
1963 } catch (e) {
1964 s = e
1965 }
1966 e(s)
1967 },
1968 async destroy(e) {
1969 ;(r && r.close(), e(null))
1970 },
1971 })
1972 }
1973 async _clearAllFiles({ roomId: e, roomKey: t, files: s }, i) {
1974 const o = await s.clearAllFiles(t, i)
1975 return (this.keet.emit("local-files-changed", e), o)
1976 }
1977 async _clearOldFiles() {
1978 return this.keet.files.clearOldFiles()
1979 }
1980 async _getFileEntry({ roomKey: e, files: t }, s) {
1981 const i = await t.getFileEntry(e, j(s))
1982 return P(i)
1983 }
1984 async _getLocalFiles({ roomKey: e, files: t, blobsSnapshot: s }) {
1985 const i = await t.getLocalFiles(e)
1986 return Promise.all(
1987 i.map(async (i) => {
1988 const o = await t.getFileEntryWithPreview(e, i.file, { loadBlob: (e) => s.get(e) })
1989 return { ...S(o.file), entry: P(o) }
1990 }),
1991 )
1992 }
1993 async _getFiles({ roomKey: e, files: t, snapshot: i, blobsSnapshot: o }, r = {}) {
1994 const n = G(r),
1995 a = await i.find(r.type ? "@keet/files-by-major-type" : "@keet/active-files", n).toArray()
1996 return Promise.all(
1997 a.map(async (i) => {
1998 const r = await t.getFileEntryWithPreview(e, i.file, { loadBlob: (e) => o.get(e) })
1999 return {
2000 ...S(r.file),
2001 id: i.id,
2002 messageId: { deviceId: s.encode(i.oplog.key), seq: i.oplog.seq },
2003 entry: P(r),
2004 }
2005 }),
2006 )
2007 }
2008 _startDownload({ roomKey: e, files: t }, s) {
2009 return t.startDownload(e, j(s))
2010 }
2011 _cancelDownload({ roomKey: e, files: t }, s) {
2012 return t.cancelDownload(e, s)
2013 }
2014 async _clearFile({ roomId: e, roomKey: t, files: s }, i) {
2015 ;(i.preview?.large?.pointer?.externalBlob && (await s.clearFile(t, j(i.preview.large))),
2016 await s.clearFile(t, j(i)),
2017 this.keet.emit("local-files-changed", e))
2018 }
2019 async _unclearFile({ roomId: e, roomKey: t, files: s }, i) {
2020 ;(i.preview?.large?.pointer?.externalBlob && (await s.unclearFile(t, j(i.preview.large))),
2021 await s.unclearFile(t, j(i)),
2022 this.keet.emit("local-files-changed", e))
2023 }
2024 _getFileCleared({ roomKey: e, files: t }, s) {
2025 return t.getFileCleared(e, j(s))
2026 }
2027 _refreshFileLinks(e) {
2028 return this.keet.files.refreshLinks(e)
2029 }
2030 subscribeFileCleared(e, t) {
2031 return this._addRoomSubscription(e, { query: () => this.getFileCleared(e, t) })
2032 }
2033 subscribeFiles(e, ...t) {
2034 return this._addRoomSubscription(e, { query: async () => this.getFiles(e, ...t) })
2035 }
2036 getStats() {
2037 return {
2038 suspended: this.keet.state === Me.SUSPEND,
2039 connections: this.keet.swarm.connections.size,
2040 openRooms: this.keet.rooms.size,
2041 openCores: this.keet.store.cores.size,
2042 activeRooms: this.keet.activeRooms.size,
2043 roomSubscriptions: [...this._subscriptions.values()].filter((e) => e.isRoomSub).size,
2044 backgroundSwarmingRooms: [...this.keet.swarmWorker.sessions.keys()],
2045 dht: this.keet.swarm.dht.stats,
2046 swarm: this.keet.swarm.stats,
2047 ops: this.keet.stats.ops,
2048 uploaded: this.keet.stats.uploaded,
2049 bytesUploaded: this.keet.stats.bytesUploaded,
2050 downloaded: this.keet.stats.downloaded,
2051 bytesDownloaded: this.keet.stats.bytesDownloaded,
2052 appends: this.keet.stats.appends,
2053 bytesAppended: this.keet.stats.bytesAppended,
2054 ipc: { sent: 0, recv: 0 },
2055 threads: [],
2056 }
2057 }
2058 async getRoomStats(e) {
2059 const t = this.keet.internalOpenExistingRoom(s.decode(e))
2060 try {
2061 return await t.getStats()
2062 } finally {
2063 this.keet.internalReleaseRoom(t)
2064 }
2065 }
2066 async _lookupUsername(e) {
2067 if (!e) return
2068 const t = await this.keet.userRegistry.lookup(e)
2069 return E(t)
2070 }
2071 async _lookupUserByMemberId(e) {
2072 if (!e) return
2073 const t = s.decode(e),
2074 i = await this.keet.userRegistry.lookupByKey(t)
2075 return E(i)
2076 }
2077 async _searchUsername(e) {
2078 return (await this.keet.userRegistry.search(e)).map(E)
2079 }
2080 _registerUsername(e) {
2081 return this.keet.userRegistry.update(e)
2082 }
2083 _updateUsername(e) {
2084 return this.keet.userRegistry.update(e)
2085 }
2086 async _getReservationsByKey(e) {
2087 if (!e) return
2088 const t = s.decode(e),
2089 i = await this.keet.userRegistry.getReservationsByKey(t)
2090 if (!i || !i.length) return null
2091 const o = i[0]
2092 return q(o)
2093 }
2094 subscribeUsername() {
2095 const e = this.keet.userRegistry.subscribeUsername()
2096 return d(
2097 e,
2098 new h({
2099 transform(e, t) {
2100 if (!e) return t(null)
2101 t(null, {
2102 status: e.status,
2103 reservation: q(e.reservation),
2104 record: E(e.record),
2105 error: e.error,
2106 })
2107 },
2108 }),
2109 )
2110 }
2111 _checkUsername(e) {
2112 return this.keet.userRegistry.isAvailable(e)
2113 }
2114 subscribeSystemUpdateRequest() {
2115 return this._addKeetSubscription(Le, {
2116 query: () => this.keet.migrationStatus || { remaining: 0 },
2117 })
2118 }
2119 close() {
2120 return this.keet.close()
2121 }
2122 suspend() {
2123 return this.keet.suspend()
2124 }
2125 resume() {
2126 return this.keet.resume()
2127 }
2128 async getDebugFlags() {
2129 const e = await this.keet.local.get("@local/debug")
2130 return e?.flags || []
2131 }
2132 async updateDebugFlag(e, t) {
2133 const s = _e.get(e)
2134 if (!(s >= 0)) return
2135 const i = await this.keet.internalEnterLocalTransaction()
2136 try {
2137 const e = await i.get("@local/debug")
2138 ;((e.flags[s].value = !0 === t), await i.insert("@local/debug", e), await i.flush())
2139 } finally {
2140 await this.keet.internalExitLocalTransaction()
2141 }
2142 }
2143 createErrorStream() {
2144 return d(
2145 this.keet.local.find("@local/errors"),
2146 new h({
2147 transform(e, t) {
2148 t(null, x(e))
2149 },
2150 }),
2151 )
2152 }
2153 async _repair(e) {
2154 const t = this.keet.internalOpenExistingRoom(s.decode(e))
2155 try {
2156 ;(await t.ready(), await t.base.repair())
2157 } finally {
2158 this.keet.internalReleaseRoom(t)
2159 }
2160 }
2161 async _audit(e) {
2162 const t = this.keet.rootCorestore.audit(e),
2163 s = []
2164 for await (const e of t) s.push(e)
2165 return s
2166 }
2167 async _rotateWriter(e) {
2168 return this.keet.rotateWriter(s.decode(e))
2169 }
2170 compact() {
2171 return this.keet.storage.compact()
2172 }
2173 async _setUnread(e, t) {
2174 const i = s.decode(e),
2175 o = await this.keet.internalEnterLocalTransaction()
2176 try {
2177 ;(await o.insert("@local/unreads", { roomKey: i, count: t }), await o.flush())
2178 } finally {
2179 await this.keet.internalExitLocalTransaction()
2180 }
2181 }
2182 async _getUnread(e) {
2183 const t = s.decode(e),
2184 i = await this.keet.local.get("@local/unreads", { roomKey: t })
2185 return i ? i.count : 0
2186 }
2187 async _setUnreadAnchor(e, t) {
2188 const i = s.decode(e)
2189 ;(this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
2190 this.keet.unreads && (await this.keet.unreads.put(i, { timestamp: Date.now(), length: t })))
2191 const o = await this.keet.local.get("@local/rooms", { roomKey: i })
2192 if (!o?.dm?.length) return
2193 const { isFeatureSupported: r, FEATURES: n } = this.keet.versions
2194 if (!r(o.digest.abi.version, n.READ_LENGTH)) return
2195 const a = await this.keet.internalOpenPrivateProfile()
2196 try {
2197 const s = await a.db.get("@keet-private-id/settings")
2198 if (s?.disableReadReceipts) return
2199 await this.keet.dispatch(e, "@keet/update-read-length", { length: t })
2200 } finally {
2201 this.keet.internalReleaseRoom(a)
2202 }
2203 }
2204 async _getUnreadAnchor(e) {
2205 if ((this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()), !this.keet.unreads))
2206 return null
2207 const t = s.decode(e)
2208 return this.keet.unreads.get(t)
2209 }
2210 _subscribeUnreadAnchor(e) {
2211 return this._addKeetSubscription(Te, { query: () => this.getUnreadAnchor(e) })
2212 }
2213 async _setRoomFavorite(e, t = !0) {
2214 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
2215 const { privateProfileKey: i } = await this.keet.local.get("@local/identity"),
2216 o = await this.keet.local.get("@local/rooms", { roomKey: i })
2217 if (!o) return
2218 const { isFeatureSupported: r, FEATURES: n } = this.keet.versions
2219 if (!r(o.digest.abi.version, n.FAVORITE_ROOMS))
2220 throw new Error("Favorite rooms is not supported")
2221 await this.keet.privateProfile.dispatch("@keet-private-id/update-room-status", {
2222 roomKey: s.decode(e),
2223 key: ee.IsFavorite,
2224 status: { isFavorite: t },
2225 })
2226 }
2227}
2228class ze {
2229 constructor(e) {
2230 this.keet = e
2231 }
2232 async ready() {
2233 return (await this.keet.ready(), s.encode(this.keet.swarm.keyPair.publicKey))
2234 }
2235}
2236class Je {
2237 constructor(t) {
2238 ;((this.keet = t), (this.preferences = new b(e.join(t.dir, Ee))), (this._subs = []))
2239 }
2240 async _bump() {
2241 const e = await this.preferences.list()
2242 for (const t of this._subs) t.push(e)
2243 }
2244 async update(e, t) {
2245 ;(await this.preferences.set(e, t), await this._bump())
2246 }
2247 query() {
2248 return this.preferences.list()
2249 }
2250 subscribe() {
2251 const e = this,
2252 t = new c({
2253 async open(e) {
2254 let t = null
2255 try {
2256 await this._bump()
2257 } catch (e) {
2258 t = e
2259 }
2260 e(t)
2261 },
2262 destroy(t) {
2263 const s = e._subs.indexOf(this)
2264 ;(-1 !== s && e._subs.splice(s, 1), t(null))
2265 },
2266 })
2267 return (this._subs.push(t), t)
2268 }
2269}
2270class We {
2271 constructor(e, { onerror: t = r } = {}) {
2272 ;((this.keet = e),
2273 (this._status = null),
2274 (this._subs = []),
2275 this.keet.swarm.on("update", this._handleUpdate.bind(this)),
2276 this.keet.swarm.dht.on("network-update", this._handleUpdate.bind(this)))
2277 }
2278 _handleUpdate() {
2279 this._status = this.query()
2280 for (const e of this._subs) e.push(this._status)
2281 }
2282 query() {
2283 const e = []
2284 for (const [t, i] of this.keet.swarm.peers) e.push(s.encode(i.publicKey))
2285 return {
2286 host: this.keet.swarm.dht.host,
2287 port: this.keet.swarm.dht.port,
2288 online: this.keet.swarm.dht.online,
2289 degraded: this.keet.swarm.dht.degraded,
2290 connections: this.keet.swarm.connections.size,
2291 peers: e,
2292 }
2293 }
2294 subscribe() {
2295 const e = this,
2296 t = new c({
2297 open(t) {
2298 ;(e._status && this.push(e._status), t(null))
2299 },
2300 destroy(t) {
2301 const s = e._subs.indexOf(this)
2302 ;(-1 !== s && e._subs.splice(s, 1), t(null))
2303 },
2304 })
2305 return (this._subs.push(t), t)
2306 }
2307 subscribeDebug(e = 5e3, t = 0) {
2308 const s = this
2309 let i = null,
2310 o = 0
2311 const r = new c({
2312 open(t) {
2313 ;(n(),
2314 (i = setInterval(() => {
2315 n()
2316 }, e)),
2317 t(null))
2318 },
2319 destroy(e) {
2320 ;(i && (clearInterval(i), (i = null)), e(null))
2321 },
2322 })
2323 return r
2324 async function n() {
2325 const e = await s.debug()
2326 ;(r.push(e), (o += 1), t && o >= t && r.push(null))
2327 }
2328 }
2329 async debug() {
2330 return {
2331 tick: this.keet.swarm.dht._tick,
2332 localAddress: this.keet.swarm.dht.localAddress(),
2333 remoteAddress: this.keet.swarm.dht.remoteAddress(),
2334 connection: this.query(),
2335 stats: this.keet.swarm.dht.stats,
2336 health: this.keet.swarm.dht.health.stats,
2337 nodes: this.keet.swarm.dht.nodes.length,
2338 config: this.keet.swarm.dht.config,
2339 rttStats: await this.keet.swarm.dht.rttStats(),
2340 }
2341 }
2342}
2343class Ye {
2344 constructor() {
2345 ;((this.subscriptions = []),
2346 (this._handleError = this._handleError.bind(this)),
2347 (this._listenersAttached = !1))
2348 }
2349 _handleError(e) {
2350 console.error("uncaught on worker", e)
2351 for (const t of this.subscriptions) t.push({ message: e.message, stack: e.stack + "" })
2352 }
2353 subscribe(e) {
2354 const t = this
2355 this._listenersAttached || (a.on(this._handleError), (this._listenersAttached = !0))
2356 const s = new c({
2357 ...e,
2358 destroy(e) {
2359 const s = t.subscriptions.indexOf(this)
2360 ;(-1 !== s && t.subscriptions.splice(s, 1), e(null))
2361 },
2362 })
2363 return (this.subscriptions.push(s), s)
2364 }
2365}
2366class Xe {
2367 constructor(e) {
2368 ;((this.keet = e), (this.inspector = new ve()))
2369 }
2370 _getCurrentRoom() {
2371 let e = null
2372 for (const t of this.keet.rooms.values()) (!e || t.refs > e.refs) && (e = t)
2373 return e
2374 }
2375 async getCurrentRoomStats() {
2376 const e = this._getCurrentRoom()
2377 return { hash: (await e?.base.core.treeHash()).toString("hex"), length: e?.base.length }
2378 }
2379 enableInspector() {
2380 return this.inspector?.enable()
2381 }
2382 disableInspector() {
2383 return this.inspector?.disable()
2384 }
2385 getInspectorKey() {
2386 return this.inspector?.key
2387 }
2388 processTop() {
2389 return p.toJSON()
2390 }
2391 hash(e) {
2392 return i.hash(e)
2393 }
2394 generateSyntheticError(e) {
2395 if (!e) throw new Error("KEET_CORE_ERROR_UNHANDLED")
2396 this.keet.onerror(new Error("KEET_CORE_ERROR_HANDLED"))
2397 }
2398 async heapSnapshot(
2399 e = "/tmp/keet-heapsnapshot-" + Bare.pid + "." + Date.now() + ".heapsnapshot",
2400 ) {
2401 const t = new l()
2402 t.connect()
2403 const s = new u(t),
2404 i = m.createWriteStream(e)
2405 return (s.pipe(i), await new Promise((e) => i.once("close", e)), t.destroy(), e)
2406 }
2407 async resetUnreads() {
2408 if ((this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()), !this.keet.unreads))
2409 return null
2410 await this.keet.unreads.reset()
2411 }
2412}
2413class $e {
2414 constructor(e) {
2415 ;((this._rpcClient = e.rpcClient), (this.keet = e))
2416 }
2417 send(e) {
2418 if (this.keet.buildType === J.Production)
2419 return this._rpcClient.makeRequest(this.keet.config.services.feedback, "send", e, {
2420 requestEncoding: ke.json,
2421 })
2422 }
2423}
2424function Qe(e) {
2425 switch (e) {
2426 case 1:
2427 return ee.IsFullyMuted
2428 case 2:
2429 return ee.IsMentionsOnlyMuted
2430 default:
2431 return 0
2432 }
2433}
2434function Ze(e) {
2435 switch (e) {
2436 case "title":
2437 return te.Title
2438 case "avatar":
2439 return te.Avatar
2440 case "description":
2441 return te.Description
2442 case "supportedLanguages":
2443 return te.SupportedLanguages
2444 case "blindPeers":
2445 return te.BlindPeers
2446 default:
2447 return 0
2448 }
2449}
2450function et(e) {
2451 switch (e) {
2452 case "0":
2453 default:
2454 return W.Default
2455 case "1":
2456 return W.Broadcast
2457 case "2":
2458 return W.DirectMessage
2459 }
2460}
2461function tt(e = {}) {
2462 return {
2463 config: { title: e.config?.title, description: e.config?.description },
2464 settings: {
2465 roomType: et(e.config?.roomType),
2466 isCallingDisabled: "false" === e.config?.canCall,
2467 },
2468 }
2469}
2470function st(e) {
2471 const t = { files: [], httpLink: [], pearLink: [] },
2472 s = e.files || []
2473 for (let e = 0; e < s.length; e++) {
2474 const i = s[e].preview
2475 i && ((s[e].preview = null), t.files.push({ index: e, preview: i }))
2476 }
2477 const i = e.display?.httpLink || []
2478 for (let e = 0; e < i.length; e++) {
2479 const s = r(i[e])
2480 s && t.httpLink.push({ index: e, preview: s })
2481 }
2482 const o = e.display?.pearLink || []
2483 for (let e = 0; e < o.length; e++) {
2484 const s = r(o[e])
2485 s && t.pearLink.push({ index: e, preview: s })
2486 }
2487 return t
2488 function r(e) {
2489 if (!e.preview?.file?.preview) return null
2490 const t = e.preview.file.preview
2491 return ((e.preview.file.preview = null), t)
2492 }
2493}
2494async function it(e, { files: t, httpLink: s, pearLink: i }, o = null) {
2495 const r = o || { key: e.key, seq: e.length - 1 }
2496 if (t.length)
2497 for (const { index: s, preview: i } of t)
2498 await e.dispatch(
2499 "@keet/add-file-preview",
2500 { oplog: r, index: s, preview: V(i) },
2501 { dryRun: !1 },
2502 )
2503 if (s.length)
2504 for (const { index: t, preview: i } of s)
2505 await e.dispatch(
2506 "@keet/add-file-preview",
2507 { oplog: r, index: t, preview: V(i), displayType: Y.HttpLink },
2508 { dryRun: !1 },
2509 )
2510 if (i.length)
2511 for (const { index: t, preview: s } of i)
2512 await e.dispatch(
2513 "@keet/add-file-preview",
2514 { oplog: r, index: t, preview: V(s), displayType: Y.PearLink },
2515 { dryRun: !1 },
2516 )
2517}
2518module.exports = class extends t {
2519 constructor(e, t) {
2520 ;(super(),
2521 (this.keet = e),
2522 (this.opts = t),
2523 (this.api = {
2524 core: new Ge(e, t),
2525 swarm: null,
2526 preferences: null,
2527 network: null,
2528 error: null,
2529 debug: null,
2530 console: null,
2531 call: null,
2532 pear: {
2533 teardown: () => {
2534 console.log("[api] teardown initiated")
2535 const t = this.keet.close()
2536 return (t.catch(e.onerror), t)
2537 },
2538 selfDestruct: (e) => this.keet.selfDestruct(e),
2539 },
2540 }),
2541 (this._callBootstraps = null),
2542 (this.callsByRoomId = new Map()),
2543 this.ready().catch(t?.onerror || r))
2544 }
2545 async _open() {
2546 ;(await this.keet.ready(),
2547 (this.api.swarm = new ze(this.keet, this.opts)),
2548 (this.api.preferences = new Je(this.keet, this.opts)),
2549 (this.api.network = new We(this.keet, this.opts)),
2550 (this.api.error = new Ye(this.keet, this.opts)),
2551 (this.api.debug = new Xe(this.keet, this.opts)),
2552 (this.api.feedback = new $e(this.keet)))
2553 const { isFeatureSupported: e, FEATURES: t } = this.keet.versions
2554 ;((this.call = this.api.call =
2555 new g(this.keet.swarm, { skipJoinLeave: e(this.keet.abi.autoupgrade, t.CALLS_V2) })),
2556 this.keet.on("call-changed", this._handleCallChanged.bind(this)))
2557 }
2558 async _close() {
2559 ;(this.call && this.call.close(), await this.api.debug.disableInspector())
2560 }
2561 async closeActiveCalls() {
2562 if (this.callsByRoomId.size)
2563 for (const [e, t] of this.callsByRoomId) {
2564 const i = s.decode(e),
2565 o = await this.keet.local.get("@local/rooms", { roomKey: i })
2566 if (!o) continue
2567 const r = this.keet.rooms.get(e)
2568 if (!r) continue
2569 const { isFeatureSupported: n, FEATURES: a } = this.keet.versions
2570 if (!n(o.digest.abi.version, a.CALLS_V2)) return
2571 const c = o.dm ? "@keet/end-call" : "@keet/leave-call"
2572 await r.dispatch(c, { callKey: s.decode(t.callId) })
2573 }
2574 }
2575 _handleCallChanged(e, t, s) {
2576 const i = L(t),
2577 o = this.callsByRoomId.get(e),
2578 r = s?.deviceKey || null
2579 if (!s && !o) return
2580 const n = { joinPeer: this.keet.debugJoinPeer, leavePeer: this.keet.debugLeavePeer },
2581 a = new Se(this.keet.swarm, { call: i, prev: o, deviceKey: r, debug: n })
2582 if ((a.refresh(), a.ended)) return this.callsByRoomId.delete(e)
2583 this.callsByRoomId.set(e, a)
2584 }
2585 async suspend() {
2586 await this.keet.suspend()
2587 }
2588 async resume() {
2589 await this.keet.resume()
2590 }
2591}
keet-core-4.14.4-pretty/lib/api/v1/inspector.js +52 -0
……@@ -0,0 +1,52 @@
1const { Console: s, Server: e } = require("bare-inspector"),
2 { once: o } = require("bare-events")
3class l {
4 constructor({ port: s = 0, host: e = "localhost" } = {}) {
5 ;((this.port = s),
6 (this.host = e),
7 (this._server = null),
8 (this._url = null),
9 (this._bareConsole = null),
10 (this._oldConsole = global.console))
11 }
12 get key() {
13 return this._url
14 }
15 _overrideConsole() {
16 this._bareConsole || (this._bareConsole = new s())
17 const e = {}
18 for (const s of Object.keys(this._bareConsole))
19 e[s] = (...e) => {
20 ;(this._bareConsole[s](...e), this._oldConsole[s](...e))
21 }
22 global.console = e
23 }
24 _resetConsole() {
25 global.console = this._oldConsole
26 }
27 async enable() {
28 ;((this._server = new e(this.port, this.host)),
29 this._server.on("close", () => {
30 this._resetConsole()
31 }),
32 await o(this._server, "listening"),
33 this._overrideConsole())
34 const { port: s } = this._server.address()
35 return (
36 (this._url = `devtools://devtools/bundled/js_app.html?ws=localhost:${s}`),
37 console.log(`Keet core inspector url: ${this._url}`),
38 this._url
39 )
40 }
41 async disable() {
42 this._server &&
43 (await new Promise((s) => {
44 this._server.close(s)
45 }),
46 (this._server = null),
47 this._resetConsole(),
48 (this._bareConsole = null),
49 (this._url = null))
50 }
51}
52module.exports = l
keet-core-4.14.4-pretty/lib/api/v2/base.js +58 -0
……@@ -0,0 +1,58 @@
1const t = require("ready-resource")
2class s extends t {
3 constructor(t) {
4 ;(super(),
5 (this.keet = t),
6 (this.room = null),
7 (this.dbSnapshot = null),
8 (this.blobSnapshot = null),
9 (this.localSnapshot = null))
10 }
11 async _close() {
12 ;(await Promise.all([
13 this.dbSnapshot ? this.dbSnapshot.close() : null,
14 this.blobSnapshot ? this.blobSnapshot.close() : null,
15 this.localSnapshot ? this.localSnapshot.close() : null,
16 ]),
17 this.room && this.keet.internalReleaseRoom(this.room))
18 }
19 setRoom(t) {
20 return ((this.room = this.keet.internalOpenExistingRoom(t)), this.room)
21 }
22 snapshot() {
23 if (!this.room) throw new Error("Must set a room before taking a db snapshot")
24 return (this.dbSnapshot || (this.dbSnapshot = this.room.db.snapshot()), this.dbSnapshot)
25 }
26 blobSnapshot() {
27 if (!this.room) throw new Error("Must set a room before taking a db snapshot")
28 return this.blobSnapshot
29 ? this.dbSnapshot
30 : ((this.blobSnapshot = this.room.blobs.snapshot()), this.blobSnapshot)
31 }
32 localSnapshot() {
33 return (
34 this.localSnapshot || (this.localSnapshot = this.keet.local.snapshot()),
35 this.localSnapshot
36 )
37 }
38}
39class o {
40 constructor(t, o) {
41 ;((this.backend = t), (this.keet = t.keet), (this.req = o), (this.ctx = new s(this.keet)))
42 }
43 async _run() {}
44 async run() {
45 this.backend.opened || (await this.backend.ready())
46 try {
47 const t = Date.now(),
48 s = await this._run()
49 return { header: { duration: Date.now() - t }, ...s }
50 } finally {
51 await this.ctx.close()
52 }
53 }
54 static run(t, s) {
55 return new this(t, s).run()
56 }
57}
58module.exports = { KeetMethod: o }
keet-core-4.14.4-pretty/lib/api/v2/call/index.js +2 -0
……@@ -0,0 +1,2 @@
1const e = require("ready-resource")
2module.exports = class extends e {}
keet-core-4.14.4-pretty/lib/api/v2/core/index.js +790 -0
……@@ -0,0 +1,790 @@
1const e = require("scope-lock"),
2 t = require("ready-resource"),
3 s = require("b4a"),
4 { KeetMethod: i } = require("../base"),
5 o = {
6 RoomChanged: 1,
7 RoomChatChanged: 2,
8 RoomDigestChanged: 3,
9 RoomConfigChanged: 4,
10 RoomMemberChanged: 5,
11 RoomDeviceChanged: 6,
12 RoomReactionsChanged: 7,
13 RoomStatsChanged: 8,
14 RoomJoinRequestsChanged: 9,
15 PairingChanged: 10,
16 },
17 n = { Identity: 100, Pairing: 101, Lobby: 102, Chat: 103, Reactions: 104, Members: 105 },
18 a = { Identity: 200, Pairing: 201, Lobby: 202, Chat: 203, Reactions: 204, Members: 205 }
19class r {
20 constructor(t) {
21 ;((this.coreAPI = t),
22 (this.keet = t.keet),
23 (this.view = t.view),
24 (this.rpc = t.rpc),
25 (this.active = !1),
26 (this._queue = []),
27 (this._lock = new e({ debounce: !0 })))
28 }
29 _isTracking(e, t) {
30 return !1
31 }
32 async _process(e, t) {}
33 async _bump() {
34 if (await this._lock.lock())
35 try {
36 const e = [...this._queue]
37 this._queue = []
38 for (const { type: t, event: s } of e) await this._process(t, s)
39 } finally {
40 this._lock.unlock()
41 }
42 }
43 async bump() {
44 try {
45 await this._bump()
46 } catch (e) {
47 this.keet.onerror(e)
48 }
49 }
50 dispatch(e, t) {
51 this._isTracking(e, t) && (this._queue.push({ type: e, event: t }), this.bump())
52 }
53}
54class h extends r {
55 _isTracking(e, t) {
56 switch (e) {
57 case n.Identity:
58 case a.Identity:
59 return !0
60 case o.RoomMemberChanged:
61 case o.RoomDeviceChanged:
62 return this.active && t.roomInfo.status.isPrivateProfile
63 default:
64 return !1
65 }
66 }
67 async _process(e, t) {
68 switch (e) {
69 case n.Identity:
70 return ((this.active = !0), this._onReset(t))
71 case a.Identity:
72 return ((this.active = !1), null)
73 case o.RoomMemberChanged:
74 return this._onRoomMemberChanged(t.value)
75 case o.RoomDeviceChanged:
76 return this._onRoomDeviceChanged(t.value)
77 default:
78 return null
79 }
80 }
81 async _onReset({ clock: e } = {}) {
82 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
83 const [t, s, i] = await Promise.all([
84 this.keet.local.get("@local/identity"),
85 this.keet.privateProfile.db.findOne("@keet/members"),
86 this.keet.privateProfile.db.find("@keet/devices").toArray(),
87 ]),
88 o = t.status,
89 n = s.key
90 this.view.members.add(s)
91 const a = []
92 for (const e of i) (a.push(e.key), this.view.devices.add(e))
93 ;(this.view.identity.onReset({ memberKey: n, deviceKeys: a, status: o }),
94 e > 0 && this.rpc.coreHaveIdentity({ clock: e }))
95 }
96 _onRoomMemberChanged(e) {
97 ;(this.view.members.add(e), this.rpc.coreIdentityMember({ memberKey: e.key }))
98 }
99 _onRoomDeviceChanged(e) {
100 ;(this.view.devices.add(e), this.rpc.coreIdentityDevice({ deviceKey: e.key }))
101 }
102}
103class c extends r {
104 _isTracking(e, t) {
105 switch (e) {
106 case n.Pairing:
107 case a.Pairing:
108 return !0
109 case o.RoomChanged:
110 case o.RoomJoinRequestsChanged:
111 return this.active && t.roomId === this.keet.privateProfile.id
112 default:
113 return !1
114 }
115 }
116 _process(e, t) {
117 switch (e) {
118 case n.Pairing:
119 return ((this.active = !0), this._onReset(t))
120 case a.Pairing:
121 return ((this.active = !1), null)
122 case o.RoomChanged:
123 case o.RoomJoinRequestsChanged:
124 return this._onPrivateProfileChanged(t)
125 default:
126 return null
127 }
128 }
129 _onPrivateProfileChanged(e) {
130 return this._onReset({ clock: 0 })
131 }
132 async _onReset({ clock: e }) {
133 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
134 const [t, s] = await Promise.all([
135 this.keet.privateProfile.db.find("@keet-private-id/pending-invitations").toArray(),
136 this.keet.privateProfile.db.find("@keet/join-requests").toArray(),
137 ])
138 ;(this.rpc.corePairingReset({ pendingInvitations: t, identityJoinRequests: s }),
139 e > 0 && this.rpc.coreHavePairing({ clock: e }))
140 }
141}
142class d extends r {
143 constructor(e) {
144 ;(super(e),
145 (this._end = 0),
146 (this._start = 0),
147 (this._total = 0),
148 (this._rooms = []),
149 (this._roomMap = new Map()))
150 }
151 _isTracking(e, t) {
152 switch (e) {
153 case n.Lobby:
154 return !0
155 case o.RoomChanged:
156 return this.active && !t.roomInfo.status.isPrivateProfile
157 case o.RoomDigestChanged:
158 case o.RoomConfigChanged:
159 case o.RoomChatChanged:
160 return this.active && this._roomMap.has(s.toString(t.roomKey, "hex"))
161 default:
162 return !1
163 }
164 }
165 _process(e, t) {
166 switch (e) {
167 case n.Lobby:
168 return ((this.active = !0), this._onReset(t))
169 case a.Lobby:
170 return ((this.active = !1), null)
171 case o.RoomChanged:
172 return this._onRoomActivity(t)
173 case o.RoomDigestChanged:
174 return this._onRoomDigestChanged(t)
175 case o.RoomConfigChanged:
176 return this._onRoomConfigChanged(t)
177 case o.RoomChatChanged:
178 return this._onRoomLastMessageChanged(t)
179 default:
180 return null
181 }
182 }
183 _addRoom(e, t) {
184 A(this.view, e, t)
185 }
186 _mapInfo(e, t) {
187 return {
188 visible: !(
189 !1 === t?.status?.isActive ||
190 e.status.isRemoved ||
191 e.identity ||
192 (e.dm && !e.config.title)
193 ),
194 timestamp: e.timestamps.latestChatMessage || e.timestamps.latestSync,
195 }
196 }
197 async _resize(e) {
198 if (this._rooms.length >= e) return
199 let t = this._rooms.length || 1
200 for (; t < e; ) t *= 2
201 const i = this.keet.local.snapshot(),
202 [o, n] = await Promise.all([
203 i.find("@local/rooms-by-timestamp", { reverse: !0, limit: t }).toArray(),
204 i.get("@local/stats"),
205 ])
206 ;(await i.close(), (this._total = n.activeRooms), (this._rooms = []), this._roomMap.clear())
207 for (let e = 0; e < o.length; e++) {
208 const t = o[e],
209 i = s.toString(t.roomKey, "hex"),
210 { timestamp: n } = this._mapInfo(t),
211 a = { id: i, record: t, position: e, timestamp: n }
212 ;(this._rooms.push(a), this._roomMap.set(i, a))
213 }
214 }
215 _pushViewport() {
216 const e = []
217 for (let t = this._start; t < Math.min(this._end, this._rooms.length); t++) {
218 const { id: s, record: i } = this._rooms[t]
219 ;(this._addRoom(s, i), e.push(i.roomKey))
220 }
221 this.rpc.coreLobbyReset({ keys: e, start: this._start, end: this._end, total: this._total })
222 }
223 async _onReset({ clock: e, start: t, end: s }) {
224 ;((this._start = t),
225 (this._end = s),
226 await this._resize(s),
227 this._pushViewport(),
228 e > 0 && this.rpc.coreHaveLobby({ clock: e }))
229 }
230 async _onRoomActivity({ roomKey: e, roomInfo: t }) {
231 const i = s.toString(e, "hex"),
232 o = this.keet.local.snapshot(),
233 [n, a] = await Promise.all([
234 o.get("@local/stats"),
235 o.get("@local/room-preferences", { roomKey: e }),
236 ])
237 ;(await o.close(), (this._total = n.activeRooms))
238 const { visible: r, timestamp: h } = this._mapInfo(t, a),
239 c = t,
240 d = this._roomMap.get(i)
241 if (!d && !r) return
242 if (d && r && h <= d.timestamp) return
243 const m = d?.position ?? -1
244 let g = -1
245 if (r) {
246 let e = 0,
247 t = this._rooms.length
248 for (; e < t; ) {
249 const s = (e + t) >>> 1
250 this._rooms[s].timestamp > h ? (e = s + 1) : (t = s)
251 }
252 ;((g = e), d && g > m && g--)
253 }
254 if (m !== g) {
255 if (g < 0) {
256 for (let e = m, t = this._rooms.length - 1; e < t; e++)
257 ((this._rooms[e] = this._rooms[e + 1]), (this._rooms[e].position = e))
258 ;(this._rooms.pop(), this._roomMap.delete(i))
259 } else if (m < 0) {
260 this._rooms.push(null)
261 for (let e = this._rooms.length - 1; e > g; e--)
262 ((this._rooms[e] = this._rooms[e - 1]), (this._rooms[e].position = e))
263 const e = { id: i, record: c, position: g, timestamp: h }
264 ;((this._rooms[g] = e), this._roomMap.set(i, e))
265 } else if (m > g) {
266 for (let e = m; e > g; e--)
267 ((this._rooms[e] = this._rooms[e - 1]), (this._rooms[e].position = e))
268 ;((this._rooms[g] = d), (d.position = g), (d.record = c), (d.timestamp = h))
269 } else {
270 for (let e = m; e < g; e++)
271 ((this._rooms[e] = this._rooms[e + 1]), (this._rooms[e].position = e))
272 ;((this._rooms[g] = d), (d.position = g), (d.record = c), (d.timestamp = h))
273 }
274 ;((m >= 0 && m < this._end) || (g >= 0 && g < this._end)) && this._pushViewport()
275 } else d && ((d.record = c), (d.timestamp = h))
276 }
277 _onRoomDigestChanged({ roomKey: e, value: t }) {
278 const i = s.toString(e, "hex")
279 this.view.roomInfo.onDigestChanged({ id: i, digest: t })
280 }
281 _onRoomConfigChanged({ roomKey: e, value: t }) {
282 const i = s.toString(e, "hex")
283 this.view.roomInfo.onConfigChanged({ id: i, config: t })
284 }
285 _onRoomLastMessageChanged({ roomKey: e, roomInfo: t }) {
286 const i = s.toString(e, "hex")
287 U(this.view, i, t)
288 }
289}
290class m extends r {
291 constructor(e) {
292 ;(super(e),
293 (this.roomKey = null),
294 (this._roomId = null),
295 (this.start = 0),
296 (this.size = 0),
297 (this.isBottom = !1),
298 (this._chatLength = -1),
299 (this._viewportIds = []),
300 (this._memberMessages = new Map()))
301 }
302 _isTracking(e, t) {
303 let i = !1
304 switch (e) {
305 case n.Chat:
306 case a.Chat:
307 i = !0
308 break
309 case o.RoomDigestChanged:
310 case o.RoomConfigChanged:
311 i = this.active && this.roomKey && s.equals(t.roomKey, this.roomKey)
312 break
313 case o.RoomChatChanged:
314 case o.RoomReactionsChanged:
315 case o.RoomMemberChanged:
316 i = this.roomKey && s.equals(t.roomKey, this.roomKey)
317 break
318 default:
319 i = !1
320 }
321 return i
322 }
323 _process(e, t) {
324 switch (e) {
325 case n.Chat:
326 return ((this._chatLength = -1), this._onActivate(t))
327 case a.Chat:
328 return this._onDeactivate(t)
329 case o.RoomDigestChanged:
330 return this._onRoomDigestChanged(t)
331 case o.RoomConfigChanged:
332 return this._onRoomConfigChanged(t)
333 case o.RoomChatChanged:
334 return this._onRoomChatChanged(t)
335 case o.RoomReactionsChanged:
336 return this._onRoomReactionsChanged(t)
337 case o.RoomMemberChanged:
338 return this._onRoomMemberChanged(t)
339 default:
340 return null
341 }
342 }
343 async _pushMessage(e, t) {
344 const [s, i] = await Promise.all([
345 e.get("@keet/reaction-digests", { id: t.id }),
346 e.get("@keet/devices", { key: t.oplog.key }),
347 ]),
348 o = await e.get("@keet/members", { key: i.memberKey })
349 return this._pushMessageDirect(t, s, i, o)
350 }
351 _pushMessageDirect(e, t, i, o) {
352 const n = s.toString(o.key, "hex"),
353 a = `${s.toString(e.oplog.key, "hex")}-${e.oplog.seq}`
354 ;(this._memberMessages.has(n) || this._memberMessages.set(n, []),
355 this._memberMessages.get(n).push(e.oplog),
356 t && this.view.reactions.add(t, { cacheId: a }),
357 this.view.members.add(o))
358 const r = { chat: L(e), memberKey: o.key, role: o.status }
359 return (this.view.messageInfo.onAdd(r, { cacheId: a }), e.oplog)
360 }
361 async _pushMessages(e, t, s) {
362 this._memberMessages.clear()
363 const i = []
364 for await (const s of e.find("@keet/chat", t)) i.push(this._pushMessage(e, s))
365 const o = await Promise.all(i)
366 ;((this._viewportIds = o), this._emitReset(s))
367 }
368 _emitReset(e) {
369 this.view.chat.onReset({
370 ids: this._viewportIds,
371 roomKey: this.roomKey,
372 start: this.start,
373 size: this.size,
374 total: e,
375 isBottom: this.isBottom,
376 })
377 }
378 async _pushViewport() {
379 const e = this.keet.internalOpenExistingRoom(this.roomKey),
380 t = e.db.snapshot()
381 try {
382 const e = await t.get("@keet/threads", { id: 0 })
383 this._chatLength = e.count
384 const s = Math.max(this.isBottom ? this._chatLength - this.size : this.start, 0),
385 i = Math.min(this.isBottom ? this._chatLength : this.start + this.size, this._chatLength)
386 await this._pushMessages(
387 t,
388 { gte: { id: { thread: 0, index: s } }, lt: { id: { thread: 0, index: i } } },
389 this._chatLength,
390 )
391 } finally {
392 ;(t && (await t.close()), this.keet.internalReleaseRoom(e))
393 }
394 }
395 async _onActivate({ clock: e, roomKey: t, start: i, size: o, isBottom: n }) {
396 ;(this.roomKey &&
397 !s.equals(this.roomKey, t) &&
398 (await this.keet.deactivateRoom(this.roomKey), this.view.rooms.unref(this._roomId)),
399 (this.roomKey = t),
400 (this._roomId = s.toString(t, "hex")),
401 (this.start = i),
402 (this.size = o),
403 (this.isBottom = n),
404 this.view.rooms.ref(this._roomId),
405 await this.keet.activateRoom(t),
406 (this.active = !0))
407 const a = await this.keet.local.get("@local/rooms", { roomKey: t })
408 ;(A(this.view, this._roomId, a),
409 await this._pushViewport(),
410 e > 0 && this.rpc.coreHaveChat({ clock: e }))
411 }
412 async _onDeactivate() {
413 ;(this.roomKey &&
414 (await this.keet.deactivateRoom(this.roomKey), this.view.rooms.unref(this._roomId)),
415 (this.roomKey = null),
416 (this._roomId = null),
417 (this.active = !1))
418 }
419 _onRoomDigestChanged({ value: e }) {
420 this.view.roomInfo.onDigestChanged({ id: this._roomId, digest: e })
421 }
422 _onRoomConfigChanged({ value: e }) {
423 this.view.roomInfo.onConfigChanged({ id: this._roomId, config: e })
424 }
425 _isInViewport(e) {
426 const t = this.isBottom ? this._chatLength - this.size : this.start,
427 s = this.isBottom ? this._chatLength : this.start + this.size
428 return e >= t && e < s
429 }
430 _onRoomChatChanged(e) {
431 const { message: t, reactions: s, device: i, member: o } = e.value,
432 n = t.id.index
433 if (n >= this._chatLength) {
434 if (this.isBottom) {
435 const e = this._pushMessageDirect(t, s, i, o)
436 for (
437 this._viewportIds.push(e), this._chatLength = n + 1;
438 this._viewportIds.length > this.size;
439 )
440 this._viewportIds.shift()
441 this._emitReset(this._chatLength)
442 }
443 } else this._isInViewport(n) && this.view.messageInfo.onChatChanged({ chat: L(t) })
444 }
445 _onRoomReactionsChanged({ value: { id: e, reactions: t } }) {
446 this._isInViewport(t.id.index) &&
447 this.view.messageInfo.onReactionsChanged({ id: e, reactions: t })
448 }
449 _onRoomMemberChanged({ value: e }) {
450 const t = s.toString(e.key, "hex"),
451 i = this._memberMessages.get(t)
452 i &&
453 0 !== i.length &&
454 (this.view.members.add(e),
455 this.view.messageInfo.onRoleChanged({ ids: i, role: e.status }),
456 this.view.messageInfo.onMemberChanged({ ids: i, memberKey: e.key }))
457 }
458}
459class g extends r {}
460class u extends i {
461 async _run() {
462 return { roomKey: await this.keet.createRoom(this.req) }
463 }
464}
465class l extends i {
466 _run() {
467 return this.keet.leaveRoom(this.req.roomKey)
468 }
469}
470class p extends i {
471 _run() {
472 return this.keet.activateRoom(this.req.roomKey)
473 }
474}
475class C extends i {
476 _run() {
477 return this.keet.deactivateRoom(this.req.roomKey)
478 }
479}
480class _ extends i {
481 async _run() {
482 const e = this.req.permissions
483 return {
484 invitation: await this.keet.createRoomInvitation(this.req.roomKey, {
485 requiresConfirmation: !!e?.requiresConfirmation,
486 canModerate: !!e?.canModerate,
487 canAdmin: !!e?.canAdmin,
488 readOnly: !!e?.isReadOnly,
489 expiration: this.req.expiration,
490 }),
491 }
492 }
493}
494class R extends i {
495 async _run() {
496 return { invitation: await this.keet.createIdentityInvitation() }
497 }
498}
499class b extends i {
500 _run() {
501 return this.keet.updateProfile(this.req)
502 }
503}
504class y extends i {
505 _run() {
506 return this.req.isIdentity
507 ? this.keet.startPairingIdentity(this.req.invitation)
508 : this.keet.startPairingRoom(this.req.invitation)
509 }
510}
511class k extends i {
512 _run() {
513 return this.keet.acceptJoinRequest(this.req.roomKey, this.req.request.deviceKey)
514 }
515}
516class v extends i {
517 _run() {
518 return this.keet.rejectJoinRequest(this.req.roomKey, this.req.request.deviceKey)
519 }
520}
521class f extends i {
522 _run() {
523 return this.keet.stopPairing(this.req.id)
524 }
525}
526class w extends i {
527 _run() {
528 return this.keet.dispatch(this.req.roomKey, "@keet/update-room-config", this.req)
529 }
530}
531class I extends i {
532 _run() {}
533}
534class M extends i {
535 _run() {}
536}
537class q extends i {
538 async _run() {
539 await this.keet.dispatch(this.req.roomKey, "@keet/add-chat-message", {
540 message: this.req.message,
541 })
542 }
543}
544class K extends i {
545 _run() {
546 return this.keet.dispatch(this.req.roomKey, "@keet/update-chat-message", {
547 oplog: this.req.id,
548 message: this.req.message,
549 })
550 }
551}
552class P extends i {
553 _run() {
554 return this.keet.dispatch(this.req.roomKey, "@keet/remove-chat-message", { oplog: this.req.id })
555 }
556}
557class x extends i {
558 _run() {
559 return this.keet.dispatch(this.req.roomKey, "@keet/add-reaction", {
560 oplog: this.req.id,
561 reaction: this.req.reaction,
562 })
563 }
564}
565class T extends i {
566 _run() {
567 return this.keet.dispatch(this.req.roomKey, "@keet/remove-reaction", {
568 oplog: this.req.id,
569 reaction: this.req.reaction,
570 })
571 }
572}
573function L(e) {
574 return {
575 id: e.oplog,
576 clock: e.clock,
577 timestamps: { sent: e.timestamp, edited: e.editedAt },
578 status: e.status,
579 message: e.message,
580 event: e.event,
581 }
582}
583function D(e) {
584 return { member: e.selfMember?.status, device: e.status }
585}
586function A(e, t, s) {
587 let i = null
588 s.lastMessage &&
589 (e.members.add(s.lastMember),
590 (i = e.messageInfo.onAdd({
591 chat: L(s.lastMessage),
592 memberKey: s.lastMember.key,
593 role: s.lastMember.status,
594 })))
595 const o = { id: s.roomKey, digest: s.digest, config: s.config, messageId: i?.id, role: D(s) }
596 e.roomInfo.onAdd(o, { cacheId: t })
597}
598function U(e, t, s) {
599 if (!s.lastMessage) return
600 e.members.add(s.lastMember)
601 const i = e.messageInfo.onAdd({
602 chat: L(s.lastMessage),
603 memberKey: s.lastMember.key,
604 role: s.lastMember.status,
605 })
606 e.roomInfo.onLastMessageChanged({ id: t, messageId: i.id })
607}
608module.exports = class extends t {
609 constructor(e) {
610 ;(super(),
611 (this.backend = e),
612 (this.keet = this.backend.keet),
613 (this.rpc = this.backend.rpc),
614 (this.view = this.backend.view),
615 (this.identityTracker = new h(this)),
616 (this.pairingTracker = new c(this)),
617 (this.lobbyTracker = new d(this)),
618 (this.chatTracker = new m(this)),
619 (this.memberTracker = new g(this)),
620 (this.trackers = [
621 this.identityTracker,
622 this.pairingTracker,
623 this.lobbyTracker,
624 this.chatTracker,
625 this.memberTracker,
626 ]),
627 this.rpc.onCoreCreateRoom(this.onCreateRoom.bind(this)),
628 this.rpc.onCoreActivateRoom(this.onActivateRoom.bind(this)),
629 this.rpc.onCoreDeactivateRoom(this.onDeactivateRoom.bind(this)),
630 this.rpc.onCoreLeaveRoom(this.onLeaveRoom.bind(this)),
631 this.rpc.onCoreUpdateRoomConfig(this.onUpdateRoomConfig.bind(this)),
632 this.rpc.onCoreUpdateRoomSettings(this.onUpdateRoomSettings.bind(this)),
633 this.rpc.onCoreUpdateRoomStatus(this.onUpdateRoomStatus.bind(this)),
634 this.rpc.onCoreUpdateProfile(this.onUpdateProfile.bind(this)),
635 this.rpc.onCoreStartPairing(this.onStartPairing.bind(this)),
636 this.rpc.onCoreCreateRoomInvitation(this.onCreateRoomInvitation.bind(this)),
637 this.rpc.onCoreCreateIdentityInvitation(this.onCreateIdentityInvitation.bind(this)),
638 this.rpc.onCoreAcceptJoinRequest(this.onAcceptJoinRequest.bind(this)),
639 this.rpc.onCoreRejectJoinRequest(this.onRejectJoinRequest.bind(this)),
640 this.rpc.onCoreStopPairing(this.onStopPairing.bind(this)),
641 this.rpc.onCoreAddChatMessage(this.onAddChatMessage.bind(this)),
642 this.rpc.onCoreEditChatMessage(this.onEditChatMessage.bind(this)),
643 this.rpc.onCoreRemoveChatMessage(this.onRemoveChatMessage.bind(this)),
644 this.rpc.onCoreAddChatReaction(this.onAddChatReaction.bind(this)),
645 this.rpc.onCoreRemoveChatReaction(this.onRemoveChatReaction.bind(this)),
646 this.rpc.onCoreWantLobby(this.onWantLobby.bind(this)),
647 this.rpc.onCoreUnwantLobby(this.onUnwantLobby.bind(this)),
648 this.rpc.onCoreWantIdentity(this.onWantIdentity.bind(this)),
649 this.rpc.onCoreUnwantIdentity(this.onUnwantIdentity.bind(this)),
650 this.rpc.onCoreWantPairing(this.onWantPairing.bind(this)),
651 this.rpc.onCoreUnwantPairing(this.onUnwantPairing.bind(this)),
652 this.rpc.onCoreWantChat(this.onWantChat.bind(this)),
653 this.rpc.onCoreUnwantChat(this.onUnwantChat.bind(this)),
654 this.rpc.onCoreWantMembers(this.onWantMembers.bind(this)),
655 this.rpc.onCoreUnwantMembers(this.onUnwantMembers.bind(this)))
656 }
657 async boot() {
658 return {}
659 }
660 onPairingChanged() {
661 this._dispatch(o.PairingChanged, null)
662 }
663 onRoomChanged(e) {
664 ;(this.identityTracker.dispatch(o.RoomChanged, e),
665 this.pairingTracker.dispatch(o.RoomChanged, e),
666 this.lobbyTracker.dispatch(o.RoomChanged, e),
667 this.chatTracker.dispatch(o.RoomChanged, e))
668 }
669 onRoomChatChanged(e) {
670 ;(this.chatTracker.dispatch(o.RoomChatChanged, e),
671 this.lobbyTracker.dispatch(o.RoomChatChanged, e))
672 }
673 onRoomDigestChanged(e) {
674 ;(this.lobbyTracker.dispatch(o.RoomDigestChanged, e),
675 this.chatTracker.dispatch(o.RoomDigestChanged, e))
676 }
677 onRoomMemberChanged(e) {
678 ;(this.identityTracker.dispatch(o.RoomMemberChanged, e),
679 this.chatTracker.dispatch(o.RoomMemberChanged, e))
680 }
681 onRoomDeviceChanged(e) {
682 this.identityTracker.dispatch(o.RoomDeviceChanged, e)
683 }
684 onRoomConfigChanged(e) {
685 ;(this.lobbyTracker.dispatch(o.RoomConfigChanged, e),
686 this.chatTracker.dispatch(o.RoomConfigChanged, e))
687 }
688 onRoomReactionsChanged(e) {
689 this.chatTracker.dispatch(o.RoomReactionsChanged, e)
690 }
691 onRoomStatsChanged(e) {
692 this.chatTracker.dispatch(o.RoomStatsChanged, e)
693 }
694 onRoomJoinRequestsChanged(e) {
695 this.pairingTracker.dispatch(o.RoomJoinRequestsChanged, e)
696 }
697 onWantIdentity(e) {
698 this.identityTracker.dispatch(n.Identity, e)
699 }
700 onUnwantIdentity(e) {
701 this.identityTracker.dispatch(a.Identity, e)
702 }
703 onWantPairing(e) {
704 this.pairingTracker.dispatch(n.Pairing, e)
705 }
706 onUnwantPairing(e) {
707 this.pairingTracker.dispatch(a.Pairing, e)
708 }
709 onWantLobby(e) {
710 this.lobbyTracker.dispatch(n.Lobby, e)
711 }
712 onUnwantLobby(e) {
713 this.lobbyTracker.dispatch(a.Lobby, e)
714 }
715 onWantChat(e) {
716 this.chatTracker.dispatch(n.Chat, e)
717 }
718 onUnwantChat(e) {
719 this.chatTracker.dispatch(a.Chat, e)
720 }
721 onWantReactions(e) {
722 this.reactionTracker.dispatch(n.Reactions, e)
723 }
724 onUnwantReactions(e) {
725 this.reactionTracker.dispatch(a.Reactions, e)
726 }
727 onWantMembers(e) {
728 this.memberTracker.dispatch(n.Members, e)
729 }
730 onUnwantMembers(e) {
731 this.memberTracker.dispatch(a.Members, e)
732 }
733 onCreateRoom(e) {
734 return u.run(this.backend, e)
735 }
736 onLeaveRoom(e) {
737 return l.run(this.backend, e)
738 }
739 onActivateRoom(e) {
740 return p.run(this.backend, e)
741 }
742 onDeactivateRoom(e) {
743 return C.run(this.backend, e)
744 }
745 onUpdateRoomConfig(e) {
746 return w.run(this.backend, e)
747 }
748 onUpdateRoomSettings(e) {
749 return I.run(this.backend, e)
750 }
751 onUpdateRoomStatus(e) {
752 return M.run(this.backend, e)
753 }
754 onUpdateProfile(e) {
755 return b.run(this.backend, e)
756 }
757 onStartPairing(e) {
758 return y.run(this.backend, e)
759 }
760 onCreateRoomInvitation(e) {
761 return _.run(this.backend, e)
762 }
763 onCreateIdentityInvitation(e) {
764 return R.run(this.backend, e)
765 }
766 onAcceptJoinRequest(e) {
767 return k.run(this.backend, e)
768 }
769 onRejectJoinRequest(e) {
770 return v.run(this.backend, e)
771 }
772 onStopPairing(e) {
773 return f.run(this.backend, e)
774 }
775 onAddChatMessage(e) {
776 return q.run(this.backend, e)
777 }
778 onEditChatMessage(e) {
779 return K.run(this.backend, e)
780 }
781 onRemoveChatMessage(e) {
782 return P.run(this.backend, e)
783 }
784 onAddChatReaction(e) {
785 return x.run(this.backend, e)
786 }
787 onRemoveChatReaction(e) {
788 return T.run(this.backend, e)
789 }
790}
keet-core-4.14.4-pretty/lib/api/v2/debug/index.js +79 -0
……@@ -0,0 +1,79 @@
1const e = require("hypercore-id-encoding"),
2 s = require("ready-resource"),
3 o = require("bare-inspector"),
4 t = require("safety-catch"),
5 r = require("b4a"),
6 { hashDebugPassword: i } = require("../../../core/debug"),
7 n = global.console
8class c extends s {
9 constructor() {
10 ;(super(),
11 (this.url = null),
12 (this._server = null),
13 (this._console = null),
14 this.ready().catch(t))
15 }
16 async _open() {
17 ;(console.log(0),
18 (this._server = new o.Server(0, "localhost")),
19 console.log(1),
20 await new Promise((e) => this._server.once("listening", e)),
21 console.log(2))
22 const { port: e } = this._server.address()
23 ;(console.log(5),
24 (this.url = `devtools://devtools/bundled/js_app.html?ws=localhost:${e}`),
25 console.log(`Keet core inspector url: ${this.url}`),
26 console.log(6))
27 }
28 async _close() {
29 ;((global.console = n),
30 await new Promise((e, s) =>
31 this._server.close((o) => {
32 o ? s(o) : e(o)
33 }),
34 ))
35 }
36}
37module.exports = class extends s {
38 constructor(e) {
39 ;(super(),
40 (this.backend = e),
41 (this.keet = this.backend.keet),
42 (this.rpc = this.backend.rpc),
43 (this._inspector = null),
44 (this._onupdate = this._onConfigUpdated.bind(this)),
45 this.keet.on("force-update", this._onupdate),
46 this.rpc.onDebugEnable(this.onEnable.bind(this)),
47 this.rpc.onDebugDisable(this.onDisable.bind(this)))
48 }
49 _close() {
50 this.keet.removeListener("force-update", this._onupdate)
51 }
52 async _onConfigUpdated() {
53 try {
54 await this.onDisable()
55 } catch (e) {
56 t(e)
57 }
58 }
59 _respond(e) {
60 return { header: { duration: 0 }, ...e }
61 }
62 async onEnable({ password: s }) {
63 if ((this.keet.opened || (await this.keet.ready()), this.keet.isProduction)) {
64 const o = this.keet.config.debug.unlockHash,
65 t = i(e.decode(s))
66 if (!r.equals(o, t)) throw new Error("Invalid password")
67 }
68 return (
69 this._inspector || (this._inspector = new c()),
70 console.log("pre inspector ready"),
71 await this._inspector.ready(),
72 console.log("post inspector ready"),
73 this._respond({ inspector: this._inspector.url })
74 )
75 }
76 async onDisable() {
77 if (this.inspector) return (await this.inspector.close(), this._respond(null))
78 }
79}
keet-core-4.14.4-pretty/lib/api/v2/error/index.js +2 -0
……@@ -0,0 +1,2 @@
1const e = require("ready-resource")
2module.exports = class extends e {}
keet-core-4.14.4-pretty/lib/api/v2/index.js +159 -0
……@@ -0,0 +1,159 @@
1const e = require("ready-resource"),
2 o = require("safety-catch"),
3 s = require("../../client/index.js"),
4 {
5 api: { hrpc: t },
6 } = require("../../../schema/spec"),
7 { KeetMethod: i } = require("./base"),
8 n = require("./core"),
9 h = require("./call"),
10 r = require("./debug"),
11 a = require("./error"),
12 c = require("./network")
13class d extends i {
14 _run() {
15 return this.backend.coreAPI.boot()
16 }
17}
18class u extends i {
19 async _run() {}
20}
21module.exports = class extends e {
22 constructor(e, i, n = {}) {
23 if (
24 (super(),
25 (this.keet = e),
26 (this.stream = i),
27 (this.opts = n),
28 (this.view = new s.View()),
29 (this.rpc = new t(i)),
30 (this._apis = null),
31 this.rpc.onBoot(this.onBoot.bind(this)),
32 this.rpc.onSelfDestruct(this.onSelfDestruct.bind(this)),
33 this.stream.on("close", this.close.bind(this)),
34 !this.keet.opened)
35 )
36 throw new Error("Keet must be opened before starting RPC")
37 this.ready().catch(n.onerror || o)
38 }
39 async _open() {
40 ;((this.coreAPI = new n(this)),
41 (this.callAPI = new h(this)),
42 (this.debugAPI = new r(this)),
43 (this.errorAPI = new a(this)),
44 (this.networkAPI = new c(this)),
45 (this.apis = [this.coreAPI, this.callAPI, this.debugAPI, this.errorAPI, this.networkAPI]),
46 this.keet.on("v2:room-changed", this._onRoomChanged.bind(this)),
47 this.keet.on("v2:room-chat-changed", this._onRoomChatChanged.bind(this)),
48 this.keet.on("v2:room-stats-changed", this._onRoomStatsChanged.bind(this)),
49 this.keet.on("v2:room-digest-changed", this._onRoomDigestChanged.bind(this)),
50 this.keet.on("v2:room-member-changed", this._onRoomMemberChanged.bind(this)),
51 this.keet.on("v2:room-device-changed", this._onRoomDeviceChanged.bind(this)),
52 this.keet.on("v2:room-config-changed", this._onRoomConfigChanged.bind(this)),
53 this.keet.on("v2:room-reactions-changed", this._onRoomReactionsChanged.bind(this)),
54 this.keet.on("v2:room-join-requests-changed", this._onRoomJoinRequestsChanged.bind(this)),
55 this.view.members.on("update", this._pushMember.bind(this)),
56 this.view.devices.on("update", this._pushDevice.bind(this)),
57 this.view.lobby.on("reset", this._pushLobby.bind(this)),
58 this.view.identity.on("reset", this._pushIdentity.bind(this)),
59 this.view.roomInfo.on("update:reset", this._pushRoomInfo.bind(this)),
60 this.view.roomInfo.on("update:role", this._pushRoomInfoRole.bind(this)),
61 this.view.roomInfo.on("update:digest", this._pushRoomInfoDigest.bind(this)),
62 this.view.roomInfo.on("update:config", this._pushRoomInfoConfig.bind(this)),
63 this.view.roomInfo.on("update:message", this._pushRoomInfoMessage.bind(this)),
64 this.view.chat.on("reset", this._pushChat.bind(this)),
65 this.view.messageInfo.on("update:reset", this._pushMessageInfo.bind(this)),
66 this.view.messageInfo.on("update:role", this._pushMessageInfoRole.bind(this)),
67 this.view.messageInfo.on("update:member", this._pushMessageInfoMember.bind(this)),
68 this.view.messageInfo.on("update:chat", this._pushMessageInfoChat.bind(this)),
69 this.view.messageInfo.on("update:reactions", this._pushMessageInfoReactions.bind(this)),
70 await Promise.all(this.apis.map((e) => e.ready())))
71 }
72 async _close() {
73 this.apis && (await Promise.all(this.apis.map((e) => e.close())))
74 }
75 _onPairingChanged(e) {
76 this.coreAPI.onPairingChanged(e)
77 }
78 _onRoomChanged(e) {
79 this.coreAPI.onRoomChanged(e)
80 }
81 _onRoomStatsChanged(e) {
82 this.coreAPI.onRoomStatsChanged(e)
83 }
84 _onRoomChatChanged(e) {
85 this.coreAPI.onRoomChatChanged(e)
86 }
87 _onRoomDigestChanged(e) {
88 this.coreAPI.onRoomDigestChanged(e)
89 }
90 _onRoomMemberChanged(e) {
91 this.coreAPI.onRoomMemberChanged(e)
92 }
93 _onRoomDeviceChanged(e) {
94 this.coreAPI.onRoomDeviceChanged(e)
95 }
96 _onRoomConfigChanged(e) {
97 this.coreAPI.onRoomConfigChanged(e)
98 }
99 _onRoomReactionsChanged(e) {
100 this.coreAPI.onRoomReactionsChanged(e)
101 }
102 _onRoomJoinRequestsChanged(e) {
103 this.coreAPI.onRoomJoinRequestsChanged(e)
104 }
105 _pushMember(e, o) {
106 return this.rpc.coreMember(o)
107 }
108 _pushDevice(e, o) {
109 return this.rpc.coreDevice(o)
110 }
111 _pushMessage(e, o) {
112 return this.rpc.coreMessage(o)
113 }
114 _pushIdentity() {
115 return this.rpc.coreIdentityReset(this.view.identity)
116 }
117 _pushLobby() {
118 return this.rpc.coreLobbyReset(this.view.lobby)
119 }
120 _pushRoomInfoMessage(e) {
121 return this.rpc.coreRoomInfoLastMessage({ id: e.id, lastMessage: e.messageId })
122 }
123 _pushRoomInfoDigest(e) {
124 return this.rpc.coreRoomInfoDigest(e)
125 }
126 _pushRoomInfoConfig(e) {
127 return this.rpc.coreRoomInfoConfig(e)
128 }
129 _pushRoomInfoRole(e) {
130 return this.rpc.coreRoomInfoRole(e)
131 }
132 _pushRoomInfo(e) {
133 return this.rpc.coreRoomInfo(e)
134 }
135 _pushChat() {
136 return this.rpc.coreChatReset(this.view.chat)
137 }
138 _pushMessageInfo(e) {
139 return this.rpc.coreMessageInfo(e)
140 }
141 _pushMessageInfoChat(e) {
142 return this.rpc.coreMessageInfoChat(e)
143 }
144 _pushMessageInfoMember(e) {
145 return this.rpc.coreMessageInfoMember(e)
146 }
147 _pushMessageInfoRole(e) {
148 return this.rpc.coreMessageInfoRole(e)
149 }
150 _pushMessageInfoReactions(e) {
151 return this.rpc.coreMessageInfoReactions(e)
152 }
153 onBoot() {
154 return d.run(this)
155 }
156 onSelfDestruct() {
157 return u.run(this)
158 }
159}
keet-core-4.14.4-pretty/lib/api/v2/network/index.js +2 -0
……@@ -0,0 +1,2 @@
1const e = require("ready-resource")
2module.exports = class extends e {}
keet-core-4.14.4-pretty/lib/bundle/index.js +78 -0
……@@ -0,0 +1,78 @@
1const e = require("ready-resource"),
2 r = require("bundlebee"),
3 t = require("hypercore"),
4 s = require("b4a"),
5 i = require("hypercore/messages"),
6 o = require("bare-zlib"),
7 { EXPERIMENTAL: n } = require("../../schema/versions"),
8 { KeetContractError: u } = require("../core/contract/errors"),
9 a = require("../core/contract/index.js"),
10 c = require("compact-encoding"),
11 h = c.array(i.wire.data),
12 d = 12,
13 l = 25,
14 _ = "/lib/contract/index.js",
15 b = "/lib/core/contract/index.js"
16function y(e) {
17 return new Promise((r, t) => {
18 o.gunzip(e, (e, s) => {
19 if (e) return t(e)
20 r(s)
21 })
22 })
23}
24module.exports = class extends e {
25 constructor(e, t, { hydrate: s = !1 } = {}) {
26 if ((super(), (this.keet = e), (this._ownsBee = !e.opts.bundlebee), e.opts.bundlebee))
27 this._bee = e.opts.bundlebee
28 else {
29 const s = e.opts.bundlesStore || e.rootCorestore.namespace(t)
30 this._bee = new r(s, { key: e._bundlesKey, length: e._bundlesLength })
31 }
32 ;((this._bundles = {}), (this._routers = {}), (this._hydrate = s))
33 }
34 get core() {
35 return this._bee.core
36 }
37 async _open() {
38 if (!this._hydrate) return this._bee.ready()
39 let e = []
40 try {
41 const r = require("./latest-bundle.trace.js")
42 e = c.decode(h, await y(r))
43 } catch (e) {
44 this.keet.onerror(e, { prefix: "TRACE_LOAD_ERROR" })
45 }
46 for (const r of e)
47 try {
48 await this._bee.core.applyProof(r)
49 } catch (e) {
50 if (r.manifest) {
51 const e = t.key(r.manifest)
52 if (!s.equals(e, this._bee.core.key)) continue
53 }
54 this.keet.onerror(e, { prefix: "TRACE_APPLY_ERROR" })
55 }
56 await this._bee.ready()
57 }
58 _close() {
59 if (this._ownsBee) return this._bee.close()
60 }
61 async loadBundle(e) {
62 if (this._bundles[e]) return this._bundles[e]
63 if (e >= n) return ((this._bundles[e] = a), a)
64 const r = e < d ? d : e,
65 t = r >= l ? b : _,
66 s = await this._bee.findABI(r)
67 if (!s) throw u.BUNDLE_NOT_AVAILABLE(r)
68 const i = await this._bee.load(new URL("../..", module.url), t, s)
69 return ((this._bundles[e] = i.exports), this._bundles[e])
70 }
71 async loadRouter(e) {
72 return (
73 this._routers[e] ||
74 (await this.loadBundle(e), (this._routers[e] = this._bundles[e].createRouter())),
75 this._routers[e]
76 )
77 }
78}
keet-core-4.14.4-pretty/lib/bundle/latest-bundle.trace.js +6 -0
……@@ -0,0 +1,6 @@
1const b4a = require("b4a")
2
3module.exports = b4a.from(
4 "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e7p+WPKDbqnc2txbulia3Q1m128tX51aWF/uro/POuXq5j1nOli9m+su+FFuNghya7udmdajoBgf1bbubjlb93buNqe3qzeWL90u1HfvFK4UDw/j3Xubd1YOlxc373rX7qzfLN+5VPDXK3e7N1fcWxd2j655R43abDBTvbG6t3Vre/3a3sLe6uHewvTt9s3W+t0re3e7xfJMt3S7trt2/ShcKYVbs3utpdyuX3Ve3bvbulC/dKMd1bt3Lu6O701fXF1efdRZ23p1dq2+FKxULx3drrv3xndvTM/4hyuPbpR222s3rxbudeKlrcL48u745uK99YJXW3x0L56Jy6vX713e9vaOZsej4MJDZ7vVXuxcdu+FuavlnWjh3q2rW4eRt7zdvR4WLoxfOVpYPVwKne3y2sxK9dr16Wt3tovTC8sz5aMlIPk+qM50gsNoJ6wFtbY3vZvLBZ1OeerS1OXK1oWVxaPb7fH2nUvX1ldnw72tS49WvMW4fHdvam+vufZoq9WtLN/aGS+WjraaW5ur8cbheHl7+079erQ3E21dL25fvn1rtdU4ai0tNoLCbqNbaBRbue3DYG91Krh9u/OwGxytTrtrtzadq9HV6wuNGxevzR560zcLO0f1S8WH/l5r72599mjv6u3K2mp15kFpZ/PexqV2adqplTa6nbvRxWJ3oXI9atSurRbuTTuF8JK/52+Xty87wdHt1Si4EjdyYWsmuH2z0l2KvMLN602vMlsa3+5ciR7ONOLLe9Pl6dkHW1dWOqtbD+5eql67EF+dKec2px6UussLj7q3g+vXbq893FqvPbiz3Anv3li6svzQubH2aA8wnMgvPbx1O9yMrjp7dspKQUvMSxdS4GBfGo7TdgCnLSmc9lpV4rS3q7uOW2i2tyo7a8tbu5XLCxuV8m5up1Penp2+FR7dW9+7OL1281Ln8Mq1Kw9Kdx7enF04dO4uNu5U9h607+7V62vt1ZmVK2v3rnu5+NZi48KrmzcelV99OHN5x90q5x5di4pT4fVHd8pT7sKV+pVrlzer08GFB87F+G5pcS0obF5zrux2bkxv1Gcbu11nunlhdrt556hYu9CcqtWul/2p1fVcfHd8YWZx4VbtaHH9aiHo7NTq7WDt6vajw1zh0eqD1sP4zs2txuruwhV/urR3/dqm36gc3okv7swE3uY64MxX7j14ePfy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",
5 "base64",
6)
keet-core-4.14.4-pretty/lib/client/constants.js +2 -0
……@@ -0,0 +1,2 @@
1const e = { Title: 1, Description: 2, Avatar: 3, SupportedLanguages: 4, BlindPeers: 5 }
2module.exports = { ConfigKey: e }
keet-core-4.14.4-pretty/lib/client/index.js +281 -0
……@@ -0,0 +1,281 @@
1const e = require("ready-resource"),
2 t = require("safety-catch"),
3 i = require("b4a"),
4 o = require("./view"),
5 { ConfigKey: s } = require("./constants"),
6 n = require("../../schema/spec"),
7 a = n.api.hrpc
8module.exports = class extends e {
9 static View = o
10 static ConfigKey = s
11 static Schemas = {
12 Contract: n.contract.hyperschema,
13 Local: n.local.hyperschema,
14 Api: n.api.hyperschema,
15 Config: n.config.hyperschema,
16 }
17 constructor(e, i) {
18 ;(super(),
19 (this.rpc = new a(e)),
20 (this.view = new o()),
21 (this.opts = i),
22 (this._wantClock = 0),
23 (this._haveClock = 0),
24 (this._unwants = new Map()),
25 (this._gcInterval = setInterval(() => this._gc(), 1e3)),
26 this.rpc.onCoreHaveIdentity(this._handleHaveIdentity.bind(this)),
27 this.rpc.onCoreHavePairing(this._handleHavePairing.bind(this)),
28 this.rpc.onCoreHaveLobby(this._handleHaveLobby.bind(this)),
29 this.rpc.onCoreHaveChat(this._handleHaveChat.bind(this)),
30 this.rpc.onCoreHaveMembers(this._handleHaveMembers.bind(this)),
31 this.rpc.onCoreHaveRoomInfo(this._handleHaveRoomInfo.bind(this)),
32 this.rpc.onCoreIdentityReset(this._handleIdentityReset.bind(this)),
33 this.rpc.onCoreIdentityMember(this._handleIdentityMember.bind(this)),
34 this.rpc.onCoreIdentityDevice(this._handleIdentityDevice.bind(this)),
35 this.rpc.onCorePairingReset(this._handlePairingReset.bind(this)),
36 this.rpc.onCoreLobbyReset(this._handleLobbyReset.bind(this)),
37 this.rpc.onCoreLobbyRoom(this._handleLobbyRoom.bind(this)),
38 this.rpc.onCoreChatReset(this._handleChatReset.bind(this)),
39 this.rpc.onCoreRoomInfo(this._handleRoomInfo.bind(this)),
40 this.rpc.onCoreRoomInfoRole(this._handleRoomInfoRole.bind(this)),
41 this.rpc.onCoreRoomInfoDigest(this._handleRoomInfoDigest.bind(this)),
42 this.rpc.onCoreRoomInfoConfig(this._handleRoomInfoConfig.bind(this)),
43 this.rpc.onCoreRoomInfoLastMessage(this._handleRoomInfoLastMessage.bind(this)),
44 this.rpc.onCoreMessageInfo(this._handleMessageInfo.bind(this)),
45 this.rpc.onCoreMessageInfoChat(this._handleMessageInfoChat.bind(this)),
46 this.rpc.onCoreMessageInfoRole(this._handleMessageInfoRole.bind(this)),
47 this.rpc.onCoreMessageInfoMember(this._handleMessageInfoMember.bind(this)),
48 this.rpc.onCoreMessageInfoReactions(this._handleMessageInfoReactions.bind(this)),
49 this.rpc.onCoreMemberListAdd(this._handleMemberListAdd.bind(this)),
50 this.rpc.onCoreMemberListRemove(this._handleMemberListRemove.bind(this)),
51 this.rpc.onCoreMember(this._handleMember.bind(this)),
52 this.rpc.onCoreDevice(this._handleDevice.bind(this)),
53 this.ready().catch(t))
54 }
55 _makeRequest(e) {
56 return { header: { timestamp: Date.now() }, ...e }
57 }
58 _makeWant(e) {
59 const t = { clock: ++this._wantClock, ...e }
60 return { want: t, unwant: { clock: t.clock } }
61 }
62 _awaitHave(e, t) {
63 return new Promise((i) => {
64 const o = (s) => {
65 s === t && (e.off("have", o), i(t))
66 }
67 e.on("have", o)
68 })
69 }
70 _open() {}
71 _close() {
72 clearInterval(this._gcInterval)
73 }
74 _gc() {
75 this._haveClock < this._wantClock ||
76 (this.view.members.maybeGC(),
77 this.view.devices.maybeGC(),
78 this.view.reactions.maybeGC(),
79 this.view.messages.maybeGC(),
80 this.view.rooms.maybeGC())
81 }
82 _handleIdentityReset(e) {
83 this.view.identity.onReset(e)
84 }
85 _handleIdentityMember(e) {
86 this.view.identity.onMemberChanged(e)
87 }
88 _handleIdentityDevice(e) {
89 this.view.identity.onDeviceChanged(e)
90 }
91 _handlePairingReset(e) {
92 this.view.pairing.onReset(e)
93 }
94 _handleLobbyReset(e) {
95 this.view.lobby.onReset(e)
96 }
97 _handleLobbyRoom(e) {
98 this.view.lobby.onRoom(e)
99 }
100 _handleRoomInfo(e) {
101 this.view.roomInfo.onAdd(e)
102 }
103 _handleRoomInfoRole(e) {
104 const t = i.toString(e.id, "hex")
105 this.view.roomInfo.onRoleChanged({ id: t, role: e.role })
106 }
107 _handleRoomInfoDigest(e) {
108 const t = i.toString(e.id, "hex")
109 this.view.roomInfo.onDigestChanged({ id: t, digest: e.digest })
110 }
111 _handleRoomInfoConfig(e) {
112 const t = i.toString(e.id, "hex")
113 this.view.roomInfo.onConfigChanged({ id: t, config: e.config })
114 }
115 _handleRoomInfoLastMessage(e) {
116 const t = i.toString(e.id, "hex")
117 this.view.roomInfo.onLastMessageChanged({ id: t, messageId: e.lastMessage })
118 }
119 _handleMessageInfo(e) {
120 this.view.messageInfo.onAdd(e)
121 }
122 _handleMessageInfoChat(e) {
123 this.view.messageInfo.onChatChanged(e)
124 }
125 _handleMessageInfoRole(e) {
126 this.view.messageInfo.onRoleChanged(e)
127 }
128 _handleMessageInfoMember(e) {
129 this.view.messageInfo.onMemberChanged(e)
130 }
131 _handleMessageInfoReactions(e) {
132 this.view.messageInfo.onReactionsChanged(e)
133 }
134 _handleChatReset(e) {
135 this.view.chat.onReset(e)
136 }
137 _handleMemberListAdd() {}
138 _handleMemberListRemove() {}
139 _handlePairingChanged() {}
140 _handleMessage(e) {
141 this.view.messages.add(e)
142 }
143 _handleReactions(e) {
144 this.view.reactions.add(e)
145 }
146 _handleMember(e) {
147 this.view.members.add(e)
148 }
149 _handleDevice(e) {
150 this.view.devices.add(e)
151 }
152 _handleHaveIdentity({ clock: e }) {
153 ;((this._haveClock = Math.max(this._haveClock, e)), this.view.identity.onHave(e))
154 }
155 _handleHavePairing({ clock: e }) {
156 ;((this._haveClock = Math.max(this._haveClock, e)), this.view.pairing.onHave(e))
157 }
158 _handleHaveLobby({ clock: e }) {
159 ;((this._haveClock = Math.max(this._haveClock, e)), this.view.lobby.onHave(e))
160 }
161 _handleHaveRoomInfo({ clock: e }) {
162 ;((this._haveClock = Math.max(this._haveClock, e)), this.view.rooms.onHave(e))
163 }
164 _handleHaveChat({ clock: e }) {
165 ;((this._haveClock = Math.max(this._haveClock, e)), this.view.chat.onHave(e))
166 }
167 _handleHaveMembers({ clock: e }) {
168 ;((this._haveClock = Math.max(this._haveClock, e)), this.view.members.onHave(e))
169 }
170 viewIdentity() {
171 const { want: e, unwant: t } = this._makeWant()
172 return (
173 this.view.identity.onWant(e.clock),
174 this.rpc.coreWantIdentity(e),
175 this._unwants.set(e.clock, () => {
176 ;(this.view.identity.onCancel(e.clock), this.rpc.coreUnwantIdentity(t))
177 }),
178 this._awaitHave(this.view.identity, e.clock)
179 )
180 }
181 viewPairing() {
182 const { want: e, unwant: t } = this._makeWant()
183 return (
184 this.view.pairing.onWant(e.clock),
185 this.rpc.coreWantPairing(e),
186 this._unwants.set(e.clock, () => {
187 ;(this.view.pairing.onCancel(e.clock), this.rpc.coreUnwantPairing(t))
188 }),
189 this._awaitHave(this.view.pairing, e.clock)
190 )
191 }
192 viewLobby({ start: e = 0, end: t = 0 } = {}) {
193 const { want: i, unwant: o } = this._makeWant({ start: e, end: t })
194 return (
195 this.view.lobby.onWant(i.clock, e, t),
196 this.rpc.coreWantLobby(i),
197 this._unwants.set(i.clock, () => {
198 ;(this.view.lobby.onCancel(i.clock), this.rpc.coreUnwantLobby(o))
199 }),
200 this._awaitHave(this.view.lobby, i.clock)
201 )
202 }
203 viewChat({ roomKey: e, start: t = 0, size: i = 0, isBottom: o = !1 } = {}) {
204 const { want: s, unwant: n } = this._makeWant({ roomKey: e, start: t, size: i, isBottom: o })
205 return (
206 this.view.chat.onWant(s.clock, e, t, i, o),
207 this.rpc.coreWantChat(s),
208 this._unwants.set(s.clock, () => {
209 ;(this.view.chat.onCancel(s.clock), this.rpc.coreUnwantChat(n))
210 }),
211 this._awaitHave(this.view.chat, s.clock)
212 )
213 }
214 viewMembers(e, t, i) {
215 this.rpc.coreWantMembers(this._makeWant({ roomKey: e, offset: t, count: i }))
216 }
217 viewReactions(e, t, i, o) {
218 this.rpc.coreWantReactions(this._makeWant({ roomKey: e, messageId: t, offset: i, count: o }))
219 }
220 cancel(e) {}
221 async boot() {
222 await this.rpc.boot(this._makeRequest(this.opts))
223 }
224 async createRoom(e = {}) {
225 const t = await this.rpc.coreCreateRoom(this._makeRequest(e))
226 return { roomKey: t.roomKey, roomId: i.toString(t.roomKey, "hex") }
227 }
228 leaveRoom(e) {
229 return this.rpc.coreLeaveRoom(this._makeRequest({ roomKey: e }))
230 }
231 activateRoom(e) {
232 return this.rpc.coreActivateRoom(this._makeRequest({ roomKey: e }))
233 }
234 deactivateRoom(e) {
235 return this.rpc.coreDeactivateRoom(this._makeRequest({ roomKey: e }))
236 }
237 updateRoomConfig(e, t, i) {
238 return this.rpc.coreUpdateRoomConfig(this._makeRequest({ roomKey: e, key: t, config: i }))
239 }
240 async startPairingRoom(e) {
241 return this.rpc.coreStartPairing(this._makeRequest({ invitation: e, isIdentity: !1 }))
242 }
243 async startPairingIdentity(e) {
244 return this.rpc.coreStartPairing(this._makeRequest({ invitation: e, isIdentity: !0 }))
245 }
246 createRoomInvitation(e, t = {}) {
247 return this.rpc.coreCreateRoomInvitation(
248 this._makeRequest({ roomKey: e, permissions: t, expiration: t.expiration }),
249 )
250 }
251 createIdentityInvitation() {
252 return this.rpc.coreCreateIdentityInvitation(this._makeRequest())
253 }
254 acceptJoinRequest(e, t) {
255 return this.rpc.coreAcceptJoinRequest(this._makeRequest({ roomKey: e, request: t }))
256 }
257 rejectJoinRequest(e, t) {
258 return this.rpc.coreRejectJoinRequest(this._makeRequest({ roomKey: e, request: t }))
259 }
260 stopPairing(e) {
261 return this.rpc.coreStopPairing(this._makeRequest({ id: e }))
262 }
263 addChatMessage(e, t) {
264 return this.rpc.coreAddChatMessage(this._makeRequest({ roomKey: e, message: t }))
265 }
266 editChatMessage(e, t, i) {
267 return this.rpc.coreEditChatMessage(this._makeRequest({ roomKey: e, id: t, message: i }))
268 }
269 removeChatMessage(e, t) {
270 return this.rpc.coreRemoveChatMessage(this._makeRequest({ roomKey: e, id: t }))
271 }
272 addChatReaction(e, t, i) {
273 return this.rpc.coreAddChatReaction(this._makeRequest({ roomKey: e, id: t, reaction: i }))
274 }
275 removeChatReaction(e, t, i) {
276 return this.rpc.coreRemoveChatReaction(this._makeRequest({ roomKey: e, id: t, reaction: i }))
277 }
278 updateProfile(e) {
279 return this.rpc.coreUpdateProfile(this._makeRequest(e))
280 }
281}
keet-core-4.14.4-pretty/lib/client/view.js +623 -0
……@@ -0,0 +1,623 @@
1const e = require("bare-events"),
2 s = require("b4a"),
3 t = 200
4class i {
5 constructor(e) {
6 ;((this.value = e), (this.prev = null), (this.next = null))
7 }
8}
9class h {
10 constructor(e) {
11 ;((this.value = e), (this.refs = 0), (this.gc = null))
12 }
13}
14class n {
15 constructor() {
16 ;((this.head = null), (this.tail = null), (this.size = 0))
17 }
18 add(e) {
19 const s = new i(e)
20 return (
21 this.tail ? ((this.tail.next = s), (s.prev = this.tail)) : (this.head = s),
22 (this.tail = s),
23 this.size++,
24 s
25 )
26 }
27 remove(e) {
28 ;(e.prev ? (e.prev.next = e.next) : (this.head = e.next),
29 e.next ? (e.next.prev = e.prev) : (this.tail = e.prev),
30 this.size--)
31 }
32 shift() {
33 const e = this.head
34 return e ? (this.remove(e), e.value) : null
35 }
36}
37class o {
38 constructor(e) {
39 ;((this._maxSize = e), (this._m = new Map()), (this._gc = new n()))
40 }
41 get size() {
42 return this._m.size
43 }
44 maybeEvict() {
45 for (; this._m.size > this._maxSize && this._gc.size > 0; ) {
46 const e = this._gc.shift()
47 this._m.delete(e)
48 }
49 }
50 set(e, s) {
51 const t = this._m.get(e)
52 if (t) return void (t.value = s)
53 const i = new h(s)
54 ;((i.gc = this._gc.add(e)), this._m.set(e, i))
55 }
56 get(e) {
57 return this._m.get(e)?.value
58 }
59 ref(e) {
60 const s = this._m.get(e)
61 s && (s.refs++ > 0 || (this._gc.remove(s.gc), (s.gc = null)))
62 }
63 unref(e) {
64 const s = this._m.get(e)
65 s && 0 !== s.refs && (--s.refs > 0 || (s.gc = this._gc.add(e)))
66 }
67 forceGC(e) {
68 const s = this._maxSize
69 ;((this._maxSize = e), this.maybeEvict(), (this._maxSize = s))
70 }
71}
72class a extends e {
73 constructor({ size: e = 200 } = {}) {
74 ;(super(), (this._cache = new o(e)))
75 }
76 get size() {
77 return this._cache.size
78 }
79 id(e) {}
80 cacheId(e) {}
81 diff(e, s) {
82 return !0
83 }
84 ref(e) {
85 this._cache.ref(e)
86 }
87 unref(e) {
88 this._cache.unref(e)
89 }
90 maybeGC() {
91 this._cache.maybeEvict()
92 }
93 getRaw(e) {
94 return this._cache.get(this.constructor.cacheId(e))
95 }
96 get(e) {
97 return this._cache.get(e)
98 }
99 add(e, s) {
100 const t = s?.cacheId || this.constructor.cacheId(this.id(e)),
101 i = this._cache.get(t)
102 return ((i && !this.diff(i, e)) || (this._cache.set(t, e), this.emit("update", t, e)), t)
103 }
104}
105class c extends a {
106 static cacheId(e) {
107 return s.toString(e, "hex")
108 }
109 id(e) {
110 return e.key
111 }
112 diff(e, s) {
113 return e.profile.timestamp !== s.profile.timestamp
114 }
115}
116class r extends a {
117 static cacheId(e) {
118 return s.toString(e, "hex")
119 }
120 id(e) {
121 return e.key
122 }
123 diff(e, s) {
124 return (
125 e.status.isActive !== s.status.isActive ||
126 e.status.isIndexing !== s.status.isIndexing ||
127 e.profile.name !== s.profile.name
128 )
129 }
130}
131class d extends a {
132 static cacheId(e) {
133 return s.toString(e, "hex")
134 }
135 id(e) {
136 return e.roomKey
137 }
138 diff(e, s) {
139 return !0
140 }
141}
142class m extends a {
143 static cacheId({ key: e, seq: t }) {
144 return `${s.toString(e, "hex")}-${t}`
145 }
146 id(e) {
147 return e.id
148 }
149 diff(e, s) {
150 return !0
151 }
152}
153class g extends a {
154 static cacheId({ key: e, seq: t }) {
155 return `${s.toString(e, "hex")}-${t}`
156 }
157 id(e) {
158 return e.id
159 }
160 diff(e, s) {
161 return !0
162 }
163}
164class u extends e {
165 constructor(e) {
166 ;(super(),
167 (this.view = e),
168 (this.status = null),
169 (this.member = null),
170 (this.devices = []),
171 (this.memberKey = null),
172 (this.deviceKeys = []),
173 (this._clock = 0),
174 (this._memberId = null),
175 (this._deviceIds = []))
176 }
177 _unref() {
178 this._memberId && this.view.members.unref(this._memberId)
179 for (const e of this._deviceIds) this.view.devices.unref(e)
180 }
181 _ref() {
182 this._memberId && this.view.members.ref(this._memberId)
183 for (const e of this._deviceIds) this.view.devices.ref(e)
184 }
185 _inflate() {
186 ;((this.member = this.view.members.get(this._memberId)),
187 (this.devices = this._deviceIds.map((e) => this.view.devices.get(e))))
188 }
189 onMemberChanged() {
190 ;(this._inflate(), this.emit("update:member"), this.emit("update"))
191 }
192 onDeviceChanged() {
193 ;(this._inflate(), this.emit("update:device"), this.emit("update"))
194 }
195 onReset({ memberKey: e, deviceKeys: s, status: t }) {
196 ;(this._unref(),
197 (this.status = t),
198 (this.memberKey = e),
199 (this.deviceKeys = s),
200 (this._memberId = c.cacheId(this.memberKey)),
201 (this._deviceIds = s.map((e) => r.cacheId(e))),
202 this._ref(),
203 this._inflate(),
204 this.emit("reset"))
205 }
206 onWant(e) {
207 this._clock = e
208 }
209 onHave(e) {
210 e === this._clock && (this.emit("have", e), this.emit("update"))
211 }
212 onCancel(e) {
213 e === this._clock && (this._clock = 0)
214 }
215}
216class l {
217 constructor(e, s, t) {
218 ;((this.id = e),
219 (this.cacheId = s),
220 (this.role = t.role),
221 (this.digest = t.digest),
222 (this.config = t.config),
223 (this.message = t.message),
224 (this.messageId = t.messageId),
225 (this.messageCacheId = m.cacheId(this.messageId)))
226 }
227 with(e) {
228 return new l(this.id, this.cacheId, { ...this, ...e })
229 }
230}
231class f extends e {
232 constructor(e) {
233 ;(super(), (this.view = e))
234 }
235 ref(e) {
236 ;(this.view.rooms.ref(e.cacheId), e.messageCacheId && this.view.messages.ref(e.messageCacheId))
237 }
238 unref(e) {
239 ;(this.view.rooms.unref(e.cacheId),
240 e.messageCacheId && this.view.messages.unref(e.messageCacheId))
241 }
242 onRoleChanged({ id: e, role: s }) {
243 const t = this.view.rooms.get(e)
244 if (!t) return
245 const i = t.with({ role: s })
246 ;(this.view.rooms.add(i, { cacheId: e }), this.emit("update:role", i))
247 }
248 onDigestChanged({ id: e, digest: s }) {
249 const t = this.view.rooms.get(e)
250 if (!t) return
251 const i = t.with({ digest: s })
252 ;(this.view.rooms.add(i, { cacheId: e }), this.emit("update:digest", i))
253 }
254 onConfigChanged({ id: e, config: s }) {
255 const t = this.view.rooms.get(e)
256 if (!t) return
257 const i = t.with({ config: s })
258 ;(this.view.rooms.add(i, { cacheId: e }), this.emit("update:config", i))
259 }
260 onLastMessageChanged({ id: e, messageId: s }) {
261 const t = this.view.rooms.get(e)
262 if (!t) return
263 const i = m.cacheId(s),
264 h = this.view.messages.get(i),
265 n = t.with({ messageId: s, messageCacheId: i, message: h })
266 ;(this.view.rooms.add(n, { cacheId: e }), this.emit("update:message", n))
267 }
268 onAdd(e, { cacheId: t = null } = {}) {
269 t || (t = s.toString(e.id, "hex"))
270 const i = m.cacheId(e.messageId),
271 h =
272 (this.view.messages.get(i),
273 {
274 role: e.role,
275 digest: e.digest,
276 config: e.config,
277 messageId: e.messageId,
278 messageCacheId: i,
279 message: this.view.messages.get(i),
280 })
281 let n = this.view.rooms.get(t)
282 return (
283 (n = n ? n.with(h) : new l(e.id, t, h)),
284 this.view.rooms.add(n, { cacheId: t }),
285 this.emit("update:reset", n),
286 n
287 )
288 }
289}
290class I {
291 constructor(e, s, t) {
292 ;((this.id = e),
293 (this.cacheId = s),
294 (this.role = t.role),
295 (this.chat = t.chat),
296 (this.member = t.member),
297 (this.reactions = t.reactions),
298 (this.memberKey = t.memberKey),
299 (this.memberId = t.memberId))
300 }
301 with(e) {
302 return new I(this.id, this.cacheId, { ...this, ...e })
303 }
304}
305class _ extends e {
306 constructor(e) {
307 ;(super(), (this.view = e))
308 }
309 ref(e) {
310 ;(this.view.messages.ref(e.cacheId), e.memberId && this.view.members.ref(e.memberId))
311 }
312 unref(e) {
313 ;(this.view.messages.unref(e.cacheId), e.memberId && this.view.members.unref(e.memberId))
314 }
315 onChatChanged({ chat: e }) {
316 const s = m.cacheId(e.id),
317 t = this.view.messages.get(s)
318 if (!t) return
319 const i = t.with({ chat: e })
320 ;(this.view.messages.add(i, { cacheId: s }),
321 this.emit("update:chat", { chat: e, messages: [i] }))
322 }
323 onRoleChanged({ ids: e, role: s }) {
324 const t = []
325 for (const i of e) {
326 const e = m.cacheId(i),
327 h = this.view.messages.get(e)
328 if (!h) continue
329 const n = h.with({ role: s })
330 ;(this.view.messages.add(n, { cacheId: e }), t.push(n))
331 }
332 t.length > 0 && this.emit("update:role", { ids: e, role: s, messages: t })
333 }
334 onMemberChanged({ ids: e, memberKey: s }) {
335 const t = this.view.members.get(c.cacheId(s))
336 if (!t) return
337 const i = []
338 for (const s of e) {
339 const e = m.cacheId(s),
340 h = this.view.messages.get(e)
341 if (!h) continue
342 const n = h.with({ member: t })
343 ;(this.view.messages.add(n, { cacheId: e }), i.push(n))
344 }
345 i.length > 0 && this.emit("update:member", { ids: e, memberKey: s, messages: i })
346 }
347 onReactionsChanged({ id: e, reactions: s }) {
348 const t = m.cacheId(e),
349 i = this.view.messages.get(t)
350 if (!i) return
351 const h = i.with({ reactions: s })
352 ;(this.view.messages.add(h, { cacheId: t }),
353 this.emit("update:reactions", { id: e, reactions: s, messages: [h] }))
354 }
355 onAdd(e, { cacheId: s = null } = {}) {
356 s || (s = m.cacheId(e.chat.id))
357 const t = c.cacheId(e.memberKey),
358 i = e.memberKey
359 let h = this.view.messages.get(s)
360 if (!h) {
361 const n = {
362 reactions: this.view.reactions.get(s),
363 member: this.view.members.get(t),
364 chat: e.chat,
365 role: e.role,
366 memberKey: i,
367 memberId: t,
368 }
369 ;((h = new I(e.chat.id, s, n)), this.view.messages.add(h, { cacheId: s }))
370 }
371 return (this.emit("update:reset", h), h)
372 }
373}
374class v extends e {
375 constructor(e) {
376 ;(super(),
377 (this.view = e),
378 (this.pendingInvitations = []),
379 (this.identityJoinRequests = []),
380 (this.clock = 0),
381 (this._pending = !0),
382 (this._invitationIds = new Set()),
383 (this._joinRequestIds = new Set()))
384 }
385 onWant(e) {
386 ;((this.clock = e), (this._pending = !0))
387 }
388 onHave(e) {
389 e === this.clock && ((this._pending = !1), this.emit("have", e), this.emit("update"))
390 }
391 onCancel(e) {
392 e === this.clock && ((this.clock = 0), (this._pending = !0))
393 }
394 onReset({ pendingInvitations: e, identityJoinRequests: t }) {
395 const i = new Set(e.map((e) => s.toString(e.id, "hex"))),
396 h = new Set(t.map((e) => s.toString(e.deviceKey, "hex"))),
397 n = !b(this._invitationIds, i),
398 o = !b(this._joinRequestIds, h)
399 ;(n || o) &&
400 ((this.pendingInvitations = e),
401 (this.identityJoinRequests = t),
402 (this._invitationIds = i),
403 (this._joinRequestIds = h),
404 this.emit("reset"),
405 this._pending || this.emit("update"))
406 }
407}
408class w extends e {
409 constructor(e) {
410 ;(super(),
411 (this.view = e),
412 (this.rooms = null),
413 (this.keys = null),
414 (this.start = 0),
415 (this.end = 0),
416 (this.total = 0),
417 (this.clock = 0),
418 (this._pending = !0),
419 (this._ids = null),
420 (this._cacheIdSet = null))
421 }
422 _unref() {
423 if (this.rooms) for (const e of this.rooms) e && this.view.roomInfo.unref(e)
424 }
425 _ref() {
426 if (this._ids)
427 for (const e of this._ids) {
428 this.view.rooms.ref(e)
429 const s = this.view.rooms.get(e)
430 s?.messageCacheId && this.view.messages.ref(s.messageCacheId)
431 }
432 }
433 _refreshRooms() {
434 this.rooms = this._ids.map((e) => this.view.rooms.get(e))
435 }
436 onRoomChanged(e, s) {
437 this._cacheIdSet &&
438 this._cacheIdSet.has(e.cacheId) &&
439 (this._unref(),
440 this._refreshRooms(),
441 this._ref(),
442 this.emit("update:" + s, e),
443 this._pending || this.emit("update"))
444 }
445 onWant(e, s, t) {
446 ;((this.clock = e), (this.start = s), (this.end = t), (this._pending = !0))
447 }
448 onHave(e) {
449 e === this.clock && ((this._pending = !1), this.emit("have", e), this.emit("update"))
450 }
451 onCancel(e) {
452 e === this.clock &&
453 ((this.start = 0), (this.end = 0), (this._pending = !0), (this._cacheIdSet = null))
454 }
455 onReset({ keys: e, start: t, end: i, total: h }) {
456 const n = this._ids
457 if (
458 ((this.keys = e),
459 (this.start = t),
460 (this.end = i),
461 (this.total = h),
462 (this._ids = e.map((e) => s.toString(e, "hex"))),
463 (this._cacheIdSet = new Set(this._ids)),
464 this._ref(),
465 n)
466 )
467 for (const e of n) {
468 const s = this.view.rooms.get(e)
469 s && this.view.roomInfo.unref(s)
470 }
471 ;(this._refreshRooms(), this.emit("reset"), this._pending || this.emit("update"))
472 }
473}
474class p extends e {
475 constructor(e) {
476 ;(super(),
477 (this.view = e),
478 (this.messages = null),
479 (this.ids = null),
480 (this.room = null),
481 (this.roomKey = null),
482 (this.start = 0),
483 (this.end = 0),
484 (this.total = 0),
485 (this.isBottom = !1),
486 (this.clock = 0),
487 (this._pending = !0),
488 (this._ids = null),
489 (this._cacheIdSet = null),
490 (this._roomCacheId = null))
491 }
492 _unref() {
493 if (this._cacheIds)
494 for (const e of this._cacheIds) {
495 const s = this.view.messages.get(e)
496 s && this.view.messageInfo.unref(s)
497 }
498 }
499 _ref() {
500 if (this._cacheIds)
501 for (const e of this._cacheIds) {
502 this.view.messages.ref(e)
503 const s = this.view.messages.get(e)
504 s?.memberId && this.view.members.ref(s.memberId)
505 }
506 }
507 _refreshMessages() {
508 this.messages = this._cacheIds.map((e) => this.view.messages.get(e))
509 }
510 _refreshRoom() {
511 this.room = this._roomCacheId ? this.view.rooms.get(this._roomCacheId) : null
512 }
513 onRoomChanged(e, s) {
514 this._roomCacheId &&
515 this._roomCacheId === e.cacheId &&
516 (this._refreshRoom(),
517 this.emit("update:room:" + s, this.room),
518 this.emit("update:room", this.room),
519 this._pending || this.emit("update"))
520 }
521 onMessagesChanged(e, s) {
522 const t = e.filter((e) => this._cacheIdSet?.has(e.cacheId))
523 0 !== t.length &&
524 (this._unref(),
525 this._refreshMessages(),
526 this._ref(),
527 this.emit("update:" + s, t),
528 this._pending || this.emit("update"))
529 }
530 onWant(e, s, t, i, h) {
531 ;((this.clock = e),
532 (this.roomKey = s),
533 (this._roomCacheId = d.cacheId(s)),
534 (this.start = t),
535 (this.size = i),
536 (this.isBottom = h),
537 (this._pending = !0))
538 }
539 onHave(e) {
540 e === this.clock && ((this._pending = !1), this.emit("have", e), this.emit("update"))
541 }
542 onCancel(e) {
543 e === this.clock &&
544 ((this.room = null),
545 (this.roomKey = null),
546 (this.start = 0),
547 (this.end = 0),
548 (this._pending = !0),
549 (this._roomCacheId = null),
550 (this._cacheIdSet = null))
551 }
552 onReset({ ids: e, roomKey: s, start: t, size: i, total: h, isBottom: n }) {
553 const o = this._cacheIds
554 if (
555 ((this.ids = e),
556 (this.roomKey = s),
557 (this.start = t),
558 (this.size = i),
559 (this.total = h),
560 (this.isBottom = n),
561 (this._roomCacheId = d.cacheId(s)),
562 (this._cacheIds = e.map((e) => m.cacheId(e))),
563 (this._cacheIdSet = new Set(this._cacheIds)),
564 this._ref(),
565 o)
566 )
567 for (const e of o) {
568 const s = this.view.messages.get(e)
569 s && this.view.messageInfo.unref(s)
570 }
571 ;(this._refreshMessages(),
572 this._refreshRoom(),
573 this.emit("reset"),
574 this._pending || this.emit("update"))
575 }
576}
577function b(e, s) {
578 if (e.size !== s.size) return !1
579 for (const t of e) if (!s.has(t)) return !1
580 return !0
581}
582module.exports = class {
583 constructor() {
584 ;((this.members = new c()),
585 (this.devices = new r()),
586 (this.reactions = new g()),
587 (this.messages = new m()),
588 (this.rooms = new d()),
589 (this.identity = new u(this)),
590 (this.pairing = new v(this)),
591 (this.lobby = new w(this)),
592 (this.chat = new p(this)),
593 (this.roomInfo = new f(this)),
594 (this.messageInfo = new _(this)),
595 this.roomInfo.on("update:reset", (e) => {
596 this.chat.onRoomChanged(e, "reset")
597 }),
598 this.roomInfo.on("update:role", (e) => {
599 ;(this.lobby.onRoomChanged(e, "role"), this.chat.onRoomChanged(e, "role"))
600 }),
601 this.roomInfo.on("update:digest", (e) => {
602 ;(this.lobby.onRoomChanged(e, "digest"), this.chat.onRoomChanged(e, "digest"))
603 }),
604 this.roomInfo.on("update:config", (e) => {
605 ;(this.lobby.onRoomChanged(e, "config"), this.chat.onRoomChanged(e, "config"))
606 }),
607 this.roomInfo.on("update:message", (e) => {
608 this.lobby.onRoomChanged(e, "message")
609 }),
610 this.messageInfo.on("update:chat", ({ messages: e }) =>
611 this.chat.onMessagesChanged(e, "chat"),
612 ),
613 this.messageInfo.on("update:role", ({ messages: e }) =>
614 this.chat.onMessagesChanged(e, "role"),
615 ),
616 this.messageInfo.on("update:member", ({ messages: e }) =>
617 this.chat.onMessagesChanged(e, "member"),
618 ),
619 this.messageInfo.on("update:reactions", ({ messages: e }) =>
620 this.chat.onMessagesChanged(e, "reactions"),
621 ))
622 }
623}
keet-core-4.14.4-pretty/lib/core/contract/avatars.js +152 -0
……@@ -0,0 +1,152 @@
1const e = require("b4a"),
2 { KeetContractError: i } = require("./errors"),
3 { fileStats: r } = require("./stats"),
4 n = 524288
5async function t(r, t, l) {
6 if (!t && !l) return
7 if (!g(l)) return
8 if (
9 (l.preview && (l.preview = null),
10 !l.pointer.inlined && l.pointer.blob && (l.pointer.blob = null),
11 !l || !l.pointer.inlined)
12 )
13 return t || l
14 if (t && t.hash && l.hash && e.equals(t.hash, l.hash)) return { ...l, pointer: t.pointer }
15 if (l.pointer.inlined.byteLength > n)
16 throw i.INLINED_FILESIZE_TOO_LARGE("Cannot inline a blob that is larger than 512 KB")
17 const a = await r.put(l.pointer.inlined)
18 return { ...l, pointer: { blob: a } }
19}
20async function l(e, i, r) {
21 return {
22 small: await t(e, i?.small, r?.small),
23 medium: await t(e, i?.medium, r?.medium),
24 large: await t(e, i?.large, r?.large),
25 }
26}
27async function a(e, i, r) {
28 return await l(e, i, r)
29}
30async function s(e, i) {
31 return o(e, i)
32}
33async function o(e, i) {
34 i && (await Promise.all([p(e, i.small), p(e, i.medium), p(e, i.large)]))
35}
36async function p(e, i) {
37 if (!i) return
38 if (!i.pointer.blob) return
39 const r = await e.get(i.pointer.blob)
40 i.pointer = { inlined: r }
41}
42async function f({ primaryThread: e, id: i, blobs: n, db: t, oplog: a, file: s }) {
43 ;(s.preview && (s.preview = await l(n, null, s.preview)),
44 s.pointer.inlined && (s.pointer.inlined = null),
45 s.pointer.blob && (s.pointer.blob = null))
46 const o = { id: i, oplog: a, status: { isDeleted: !1 }, file: s }
47 return (await t.insert("@keet/files", o), await r(t, e, o), i)
48}
49async function u({ primaryThread: e, files: r, id: n, blobs: t, db: l, oplog: a }) {
50 if (!r || r.length < 1) return []
51 if (!v(r)) throw i.FILE_RECORD_INVALID()
52 const s = []
53 for (const i of r)
54 s.push(await f({ primaryThread: e, id: n++, blobs: t, db: l, oplog: a, file: i }))
55 return s
56}
57async function d({ primaryThread: e, clock: i, message: r, blobs: n, db: t, oplog: l }) {
58 const a = r.files || [],
59 s = await u({ primaryThread: e, files: a, id: i, blobs: n, db: t, oplog: l })
60 return (
61 await b({ primaryThread: e, clock: i + a.length, message: r, blobs: n, db: t, oplog: l }),
62 s
63 )
64}
65async function b({ primaryThread: e, clock: i, message: r, blobs: n, db: t, oplog: l }) {
66 let a = 0
67 const s = r?.display?.httpLink || []
68 for (const r of s)
69 (r.preview?.files && (r.preview.files = []),
70 r.preview?.file &&
71 ((r.preview.files = await u({
72 primaryThread: e,
73 id: i + a,
74 files: [r.preview.file],
75 blobs: n,
76 db: t,
77 oplog: l,
78 })),
79 (a += r.preview.files.length)))
80 const o = r?.display?.pearLink || []
81 for (const r of o)
82 (r.preview?.files && (r.preview.files = []),
83 r.preview?.file &&
84 ((r.preview.files = await u({
85 primaryThread: e,
86 id: i + a,
87 files: [r.preview.file],
88 blobs: n,
89 db: t,
90 oplog: l,
91 })),
92 (a += r.preview.files.length)))
93}
94async function c({ primaryThread: e, message: i, db: r, blobs: n }) {
95 const t = i.message?.files || [],
96 l = i.message?.display?.httpLink || []
97 for (const { preview: e } of l) e && e.files && e.files.length && t.push(...e.files)
98 const a = i.message?.display?.pearLink || []
99 for (const { preview: e } of a) e && e.files && e.files.length && t.push(...e.files)
100 await w({ primaryThread: e, files: t, db: r, blobs: n })
101}
102async function w({ primaryThread: e, files: i, db: n, blobs: t }) {
103 if (!i || !i.length) return
104 const l = await Promise.all(i.map((e) => n.get("@keet/files", { id: e }))),
105 a = []
106 for (const i of l)
107 ((i.status.isDeleted = !0), a.push(n.insert("@keet/files", i)), a.push(r(n, e, i, i)))
108 await Promise.all(a)
109}
110function m(i, r) {
111 return (
112 (!i && !r) ||
113 (!(!i && r) &&
114 !(i && !r) &&
115 (i.hash && r.hash
116 ? e.equals(i.hash, r.hash)
117 : e.equals(i.pointer.inlined, r.pointer.inlined)))
118 )
119}
120function h(e, i) {
121 const r = m(e?.small, i?.small),
122 n = m(e?.medium, i?.medium),
123 t = m(e?.large, i?.large)
124 return r && n && t
125}
126function g(e) {
127 return (
128 e.preview &&
129 (e.preview?.small?.preview && (e.preview.small.preview = null),
130 e.preview?.medium?.preview && (e.preview.medium.preview = null),
131 e.preview?.large?.preview && (e.preview.large.preview = null)),
132 !(
133 (e.pointer.externalDrive && !e.pointer.externalDrive.path) ||
134 (e.pointer.externalDrive && e.pointer.externalBlob)
135 )
136 )
137}
138function v(e) {
139 const i = Array.isArray(e) ? e : [e]
140 for (const e of i) if (!g(e)) return !1
141 return !0
142}
143module.exports = {
144 isSameAvatar: h,
145 updateAvatar: a,
146 updateImageFile: l,
147 restoreAvatar: s,
148 restoreFile: o,
149 insertMessageFiles: d,
150 deleteMessageFiles: c,
151 MAX_INLINED_FILE_SIZE: n,
152}
keet-core-4.14.4-pretty/lib/core/contract/calls.js +199 -0
……@@ -0,0 +1,199 @@
1const e = require("./registration"),
2 { isMemberActive: t, getMemberForDeviceKey: a } = require("./query"),
3 { KeetContractError: l } = require("./errors"),
4 { addEvent: r } = require("./chat"),
5 {
6 contract: {
7 hyperschema: { getEnum: c },
8 },
9 } = require("../../../schema/spec"),
10 i = c("@keet/room-type")
11async function s(e, { db: c, writer: i }) {
12 const s = i.key,
13 [y, m, o, d] = await Promise.all([
14 a(c, s),
15 c.get("@keet/calls", { callKey: e.callKey }),
16 c.get("@keet/devices", { key: s }),
17 c.findOne("@keet/active-calls-by-timestamp"),
18 ])
19 if (!t(y)) throw l.INACTIVE_MEMBER()
20 if (m) throw l.CALL_KEY_EXISTS()
21 if (d) throw l.ACTIVE_CALL_EXISTS()
22 if (!o) throw l.ABORT()
23 if (
24 (await c.insert("@keet/calls", {
25 version: e.version,
26 callKey: e.callKey,
27 encryptionKey: e.encryptionKey,
28 discoveryKey: e.discoveryKey,
29 createdAt: e.header.timestamp,
30 }),
31 await c.insert("@keet/call-members", {
32 callKey: e.callKey,
33 memberKey: y.key,
34 createdAt: e.header.timestamp,
35 }),
36 await c.insert("@keet/call-devices", {
37 callKey: e.callKey,
38 deviceKey: o.key,
39 swarmKey: o.profile.swarmKey,
40 memberKey: y.key,
41 createdAt: e.header.timestamp,
42 }),
43 e.streams?.length)
44 )
45 for await (const t of e.streams)
46 await c.insert("@keet/call-streams", {
47 callKey: e.callKey,
48 deviceKey: o.key,
49 streamKey: t,
50 createdAt: e.header.timestamp,
51 })
52 await r(c, i, { callStarted: !0 }, e.header.timestamp)
53}
54async function y(e, { db: r, writer: c }) {
55 const i = e.callKey,
56 s = c.key,
57 [y, m, o] = await Promise.all([
58 a(r, s),
59 r.get("@keet/calls", { callKey: i }),
60 r.get("@keet/devices", { key: s }),
61 ])
62 if (!t(y)) throw l.INACTIVE_MEMBER()
63 if (!m) throw l.CALL_NOT_FOUND()
64 if (m.endedAt) throw l.CALL_ENDED()
65 if (!o) throw l.ABORT()
66 const [d, K] = await Promise.all([
67 r.get("@keet/call-members", { callKey: e.callKey, memberKey: y.key }),
68 r.get("@keet/call-devices", { callKey: e.callKey, deviceKey: s }),
69 ])
70 if (K) throw l.CALL_DEVICE_EXISTS()
71 if (
72 (await r.insert("@keet/call-devices", {
73 callKey: e.callKey,
74 deviceKey: o.key,
75 swarmKey: o.profile.swarmKey,
76 memberKey: y.key,
77 createdAt: e.header.timestamp,
78 }),
79 e.streams?.length)
80 )
81 for await (const t of e.streams)
82 await r.insert("@keet/call-streams", {
83 callKey: e.callKey,
84 deviceKey: o.key,
85 streamKey: t,
86 createdAt: e.header.timestamp,
87 })
88 d ||
89 (await r.insert("@keet/call-members", {
90 callKey: e.callKey,
91 memberKey: y.key,
92 createdAt: e.header.timestamp,
93 }))
94}
95async function m({ header: e, callKey: r }, { db: c, writer: s }) {
96 const y = s.key,
97 m = { gte: { callKey: r }, lte: { callKey: r } },
98 [o, d, K, n] = await Promise.all([
99 a(c, y),
100 c.get("@keet/calls", { callKey: r }),
101 c.find("@keet/call-members", m).toArray(),
102 c.get("@keet/system-digest"),
103 ])
104 if (n.settings.roomType === i.DirectMessage) throw l.CALL_LEAVE_NOT_ALLOWED()
105 if (!t(o)) throw l.INACTIVE_MEMBER()
106 if (!d) throw l.CALL_NOT_FOUND()
107 const k = o.key,
108 w = { gte: { callKey: r, memberKey: k }, lte: { callKey: r, memberKey: k } },
109 f = { gte: { callKey: r, deviceKey: y }, lte: { callKey: r, deviceKey: y } },
110 [h, A, E, _] = await Promise.all([
111 c.get("@keet/call-members", { callKey: r, memberKey: k }),
112 c.get("@keet/call-devices", { callKey: r, deviceKey: y }),
113 c.find("@keet/call-devices-by-member-key", w).toArray(),
114 c.find("@keet/call-streams-by-device-key", f).toArray(),
115 ])
116 if (!h) throw l.CALL_MEMBER_NOT_FOUND()
117 if (!A) throw l.CALL_DEVICE_NOT_FOUND()
118 const L = []
119 L.push(c.delete("@keet/call-devices", A))
120 for (const e of _) L.push(c.delete("@keet/call-streams", e))
121 return (
122 E.length > 1 ||
123 (L.push(c.delete("@keet/call-members", h)),
124 1 === K.length && ((d.endedAt = e.timestamp), L.push(c.insert("@keet/calls", d)))),
125 Promise.all(L)
126 )
127}
128async function o({ header: e, callKey: c }, { db: s, writer: y }) {
129 const m = y.key,
130 [o, d, K, n] = await Promise.all([
131 a(s, m),
132 s.get("@keet/calls", { callKey: c }),
133 s.get("@keet/call-devices", { callKey: c, deviceKey: m }),
134 s.get("@keet/system-digest"),
135 ])
136 if (!t(o)) throw l.INACTIVE_MEMBER()
137 if (!d) throw l.CALL_NOT_FOUND()
138 if (d.endedAt) throw l.CALL_ENDED()
139 if (!K) throw l.CALL_DEVICE_NOT_FOUND()
140 ;((d.endedAt = e.timestamp), await s.insert("@keet/calls", d))
141 const k = { gte: { callKey: c }, lte: { callKey: c } },
142 [w, f, h] = await Promise.all([
143 s.find("@keet/call-members", k).toArray(),
144 s.find("@keet/call-devices", k).toArray(),
145 s.find("@keet/call-streams", k).toArray(),
146 ]),
147 A = []
148 for (const e of w) A.push(s.delete("@keet/call-members", e))
149 for (const e of f) A.push(s.delete("@keet/call-devices", e))
150 for (const e of h) A.push(s.delete("@keet/call-streams", e))
151 if ((await Promise.all(A), n.settings.roomType === i.DirectMessage))
152 return w.length > 1
153 ? await r(s, y, { callHangup: !0 }, e.timestamp)
154 : void (await r(s, y, { callMissed: !0 }, e.timestamp))
155}
156async function d({ header: e, callKey: r, streamKey: c }, { db: i, writer: s }) {
157 const y = s.key,
158 [m, o, d, K] = await Promise.all([
159 a(i, y),
160 i.get("@keet/calls", { callKey: r }),
161 i.get("@keet/call-devices", { callKey: r, deviceKey: y }),
162 i.get("@keet/call-streams", { callKey: r, streamKey: c }),
163 ])
164 if (!t(m)) throw l.INACTIVE_MEMBER()
165 if (!o) throw l.CALL_NOT_FOUND()
166 if (o.endedAt) throw l.CALL_ENDED()
167 if (!d) throw l.CALL_DEVICE_NOT_FOUND()
168 if (K) throw l.CALL_STREAM_EXISTS()
169 await i.insert("@keet/call-streams", {
170 callKey: r,
171 deviceKey: d.deviceKey,
172 streamKey: c,
173 createdAt: e.timestamp,
174 })
175}
176async function K({ callKey: e, streamKey: r }, { db: c, writer: i }) {
177 const s = i.key,
178 [y, m, o, d] = await Promise.all([
179 a(c, s),
180 c.get("@keet/calls", { callKey: e }),
181 c.get("@keet/call-devices", { callKey: e, deviceKey: s }),
182 c.get("@keet/call-streams", { callKey: e, streamKey: r }),
183 ])
184 if (!t(y)) throw l.INACTIVE_MEMBER()
185 if (!m) throw l.CALL_NOT_FOUND()
186 if (m.endedAt) throw l.CALL_ENDED()
187 if (!o) throw l.CALL_DEVICE_NOT_FOUND()
188 if (!d) throw l.CALL_STREAM_NOT_FOUND()
189 await c.delete("@keet/call-streams", d)
190}
191function n(e) {
192 ;(e.add("@keet/start-call", s),
193 e.add("@keet/join-call", y),
194 e.add("@keet/leave-call", m),
195 e.add("@keet/end-call", o),
196 e.add("@keet/add-call-stream", d),
197 e.add("@keet/remove-call-stream", K))
198}
199module.exports = { [e]: n }
keet-core-4.14.4-pretty/lib/core/contract/chat.js +171 -0
……@@ -0,0 +1,171 @@
1const e = require("b4a"),
2 t = require("./registration"),
3 { getMemberForDeviceKey: s, isMemberActive: i } = require("./query"),
4 { KeetContractError: a } = require("./errors"),
5 { insertMessageFiles: r, deleteMessageFiles: o, updateImageFile: n } = require("./avatars"),
6 {
7 contract: {
8 hyperschema: { getEnum: l },
9 },
10 } = require("../../../schema/spec"),
11 { chatStats: d, fileStats: c } = require("./stats"),
12 g = l("@keet/room-type")
13async function h(e, t, s, i) {
14 const a = await e.get("@keet/threads", { id: 0 }),
15 r = {
16 id: { thread: 0, index: a.count },
17 oplog: t,
18 clock: a.stats.chat.clock,
19 timestamp: i,
20 event: s,
21 status: { isEdited: !1, isPinned: !1, isDeleted: !1 },
22 }
23 ;(await e.insert("@keet/chat", r), await d(e, a, r))
24}
25async function p({ message: e, header: t }, { db: o, blobs: n, writer: l }) {
26 let [c, h, p, w, k, m] = await Promise.all([
27 s(o, l.key),
28 o.get("@keet/threads", { id: 0 }),
29 e.parent ? o.get("@keet/threads-by-parent", { oplog: e.parent }) : null,
30 e.parent ? o.get("@keet/chat-by-message-id", { oplog: e.parent }) : null,
31 e.replyTo ? o.get("@keet/chat-by-message-id", { oplog: e.replyTo }) : null,
32 o.get("@keet/system-digest"),
33 ])
34 if (!i(c)) throw a.INACTIVE_MEMBER()
35 if (c.status.isMuted) throw a.WRITER_IS_MUTED()
36 const y = m.settings.roomType === g.Broadcast || m.settings.isAppendingDisabled
37 if (!c.status.isModerator && y) throw a.MODERATORS_ONLY()
38 if (e.parent && !w) throw a.PARENT_MSG_INVALID()
39 if (e.replyTo && !k) throw a.REPLYTO_MSG_INVALID()
40 if ((e.parent || (p = h), e.event?.callMissed)) {
41 const e = await o.get("@keet/chat", { id: { thread: p.id, index: p.count - 1 } })
42 if (e && e.event.callMissed) throw a.NO_DUPLICATE_CALL_EVENTS()
43 }
44 if (m.settings.isAttachmentsDisabled && T(e)) throw a.FILE_ATTACHMENTS_DISABLED()
45 if (m.settings.isLinksDisabled && _(e)) throw a.LINKS_DISABLED()
46 const E = h.stats.files.clock
47 e.files = await r({ primaryThread: h, clock: E, message: e, blobs: n, db: o, oplog: l })
48 const f = {
49 id: { thread: p.id, index: p.count },
50 oplog: l,
51 clock: h.stats.chat.clock,
52 timestamp: t.timestamp,
53 message: e,
54 status: { isEdited: !1, isPinned: !1, isDeleted: !1 },
55 event: e.event,
56 }
57 ;(await o.insert("@keet/chat", f), await d(o, h, f))
58}
59async function w({ header: t, oplog: n, message: l }, { db: c, blobs: g, writer: h }) {
60 const [p, w, k, m, y, E] = await Promise.all([
61 s(c, h.key),
62 s(c, n.key),
63 c.get("@keet/chat-by-message-id", { oplog: n }),
64 c.get("@keet/threads", { id: 0 }),
65 l.replyTo ? c.get("@keet/chat-by-message-id", { oplog: l.replyTo }) : null,
66 c.get("@keet/system-digest"),
67 ])
68 if (!i(p)) throw a.INACTIVE_MEMBER()
69 if (!k) throw a.TARGET_MSG_INVALID()
70 if (!w) throw a.TARGET_MEMBER_NOT_FOUND()
71 if (!e.equals(p.key, w.key)) throw a.SELF_ONLY()
72 if (k.status.isDeleted) throw a.TARGET_MSG_IS_DELETED()
73 if (l.replyTo && !y) throw a.REPLYTO_MSG_INVALID()
74 if (E.settings.isAttachmentsDisabled && T(l)) throw a.FILE_ATTACHMENTS_DISABLED()
75 if (E.settings.isLinksDisabled && _(l)) throw a.LINKS_DISABLED()
76 const f = []
77 ;(k.message?.files?.length && (f.push(...k.message.files), (k.message.files = [])),
78 (l.files = []),
79 await o({ primaryThread: m, message: k, db: c, blobs: g }))
80 const u = m.stats.files.clock
81 await r({ primaryThread: m, clock: u, message: l, blobs: g, db: c, oplog: h })
82 const b = {
83 ...k,
84 message: { ...k.message, text: l.text, files: f, display: l.display },
85 status: { ...k.status, isEdited: !0 },
86 editedAt: t.timestamp,
87 }
88 ;(await c.insert("@keet/chat", b), await d(c, m, b, k))
89}
90async function k({ oplog: t }, { db: r, blobs: n, writer: l }) {
91 const [c, g, h, p] = await Promise.all([
92 s(r, l.key),
93 s(r, t.key),
94 r.get("@keet/chat-by-message-id", { oplog: t }),
95 r.get("@keet/threads", { id: 0 }),
96 ])
97 if (!i(c)) throw a.INACTIVE_MEMBER()
98 if (!h) throw a.TARGET_MSG_INVALID()
99 if (!c.status.isModerator && !e.equals(c.key, g.key)) throw a.MODERATORS_OR_SELF_ONLY()
100 await o({ primaryThread: p, message: h, db: r, blobs: n })
101 const w = { ...h, message: null, status: { ...h.status, isDeleted: !0, isPinned: !1 } }
102 ;(await r.insert("@keet/chat", w), await d(r, p, w, h))
103 const k = await r.get("@keet/chat-label-digests", { id: h.id })
104 k && (await r.insert("@keet/chat-label-digests", { ...k, isDeleted: !0 }))
105}
106async function m({ oplog: e, isPinned: t }, { db: r, writer: o }) {
107 const [n, l, c] = await Promise.all([
108 s(r, o.key),
109 r.get("@keet/chat-by-message-id", { oplog: e }),
110 r.get("@keet/threads", { id: 0 }),
111 ])
112 if (!i(n)) throw a.INACTIVE_MEMBER()
113 if (!l) throw a.TARGET_MSG_INVALID()
114 if (!n.status.isModerator) throw a.MODERATORS_ONLY()
115 const g = { ...l, status: { ...l.status, isPinned: t } }
116 ;(await r.insert("@keet/chat", g), await d(r, c, g, l))
117}
118async function y(
119 { oplog: t, index: r, preview: o, displayType: l },
120 { db: d, blobs: g, writer: h },
121) {
122 const [p, w, k, m] = await Promise.all([
123 s(d, h.key),
124 s(d, t.key),
125 d.get("@keet/chat-by-message-id", { oplog: t }),
126 d.get("@keet/threads", { id: 0 }),
127 ])
128 if (!i(p)) throw a.INACTIVE_MEMBER()
129 if (!k) throw a.TARGET_MSG_INVALID()
130 if (!e.equals(p.key, w.key)) throw a.SELF_ONLY()
131 const y = l ? u(k, l, r) : k.message?.files,
132 E = l ? 0 : r
133 if (!y || y.length <= E) throw a.FILE_REFERENCE_INVALID("files is falsy or invalid index")
134 const f = await d.get("@keet/files", { id: y[E] })
135 if (!f) throw a.FILE_RECORD_INVALID("record is falsy")
136 ;((f.file.preview = await n(g, null, o)), await d.insert("@keet/files", f), await c(d, m, f, f))
137}
138async function E({ length: e }, { db: t, writer: a }) {
139 const [r, o] = await Promise.all([t.get("@keet/system-digest"), s(t, a.key)])
140 i(o) &&
141 !o.status.isMuted &&
142 r.settings.roomType === g.DirectMessage &&
143 (await t.insert("@keet/read-lengths", { memberKey: o.key, length: e }))
144}
145function f(e) {
146 ;(e.add("@keet/add-chat-message", p),
147 e.add("@keet/update-chat-message", w),
148 e.add("@keet/remove-chat-message", k),
149 e.add("@keet/pin-chat-message", m),
150 e.add("@keet/add-file-preview", y),
151 e.add("@keet/update-read-length", E))
152}
153function u(e, t, s) {
154 switch (t) {
155 case 1:
156 return e.message.display.httpLink[s].preview.files
157 case 2:
158 return e.message.display.pearLink[s].preview.files
159 }
160}
161function T(e) {
162 return (
163 e?.files?.length > 0 ||
164 e?.display?.httpLink?.some((e) => e.preview) ||
165 e?.display?.pearLink?.some((e) => e.preview)
166 )
167}
168function _(e) {
169 return e.display?.httpLink?.length > 0 || e?.display?.pearLink?.length > 0
170}
171module.exports = { addEvent: h, [t]: f }
keet-core-4.14.4-pretty/lib/core/contract/config.js +32 -0
……@@ -0,0 +1,32 @@
1const e = require("./registration"),
2 { addEvent: t } = require("./chat"),
3 { isMemberActive: r, getMemberForDeviceKey: i } = require("./query"),
4 { updateAvatar: a } = require("./avatars"),
5 { KeetContractError: o } = require("./errors"),
6 n = 10,
7 s = ["title", "description", "avatar", "supportedLanguages", "blindPeers"],
8 l = { Title: 1, Description: 2, Avatar: 3, SupportedLanguages: 4, BlindPeers: 5 }
9async function u({ header: e, key: u, config: c }, { db: d, writer: g, blobs: f }) {
10 const [m, p] = await Promise.all([i(d, g.key), d.get("@keet/room-config")])
11 if (!r(m) || !m.status.isModerator) return
12 if (0 === u || u > s.length) return
13 const v = s[u - 1],
14 b = { ...p, [v]: c[v] }
15 if (u === l.Avatar) {
16 const e = p && p[v],
17 t = c[v]
18 if (null !== t.small && !t.small?.pointer?.inlined) throw o.ABORT()
19 const r = null !== t.small ? await a(f, e, t) : null
20 b[v] = r
21 }
22 if (u === l.Title) {
23 const r = p && p[v],
24 i = c[v]
25 r && r !== i && (await t(d, g, { titleChanged: { from: r, to: i } }, e.timestamp))
26 }
27 ;(u === l.BlindPeers && (b[v] = c[v].slice(0, n)), await d.insert("@keet/room-config", b))
28}
29function c(e) {
30 e.add("@keet/update-room-config", u)
31}
32module.exports = { [e]: c, CONFIG_INDEX_TO_KEY: s, Config: l }
keet-core-4.14.4-pretty/lib/core/contract/errors.js +157 -0
……@@ -0,0 +1,157 @@
1const _ = {
2 CORRUPT: "KEET_CONTRACT_CORRUPT",
3 ABORT: "KEET_CONTRACT_ABORT",
4 BUNDLE_NOT_AVAILABLE: "BUNDLE_NOT_AVAILABLE",
5 ADMINS_ONLY: "ADMINS_ONLY",
6 MODERATORS_ONLY: "MODERATORS_ONLY",
7 SELF_ONLY: "SELF_ONLY",
8 MODERATORS_OR_SELF_ONLY: "MODERATORS_OR_SELF_ONLY",
9 WRITER_IS_MUTED: "WRITER_IS_MUTED",
10 PARENT_MSG_INVALID: "PARENT_MSG_INVALID",
11 REPLYTO_MSG_INVALID: "REPLYTO_MSG_INVALID",
12 TARGET_MSG_INVALID: "TARGET_MSG_INVALID",
13 TARGET_MSG_IS_DELETED: "TARGET_MSG_IS_DELETED",
14 FILE_REFERENCE_INVALID: "FILE_REFERENCE_INVALID",
15 FILE_RECORD_INVALID: "FILE_RECORD_INVALID",
16 INLINED_FILESIZE_TOO_LARGE: "INLINED_FILESIZE_TOO_LARGE",
17 FILE_ATTACHMENTS_DISABLED: "FILE_ATTACHMENTS_DISABLED",
18 LINKS_DISABLED: "LINKS_DISABLED",
19 INACTIVE_MEMBER: "INACTIVE_MEMBER",
20 TARGET_MEMBER_NOT_FOUND: "TARGET_MEMBER_NOT_FOUND",
21 INVALID_MEMBER_STATUS: "INVALID_MEMBER_STATUS",
22 NO_DUPLICATE_CALL_EVENTS: "NO_DUPLICATE_CALL_EVENTS",
23 GENESIS_NOT_FIRST: "GENESIS_NOT_FIRST",
24 INVALID_SYSTEM_SETTING: "INVALID_SYSTEM_SETTING",
25 ACTIVE_CALL_EXISTS: "ACTIVE_CALL_EXISTS",
26 CALL_KEY_EXISTS: "CALL_KEY_EXISTS",
27 CALL_NOT_FOUND: "CALL_NOT_FOUND",
28 CALL_ENDED: "CALL_ENDED",
29 CALL_DEVICE_EXISTS: "CALL_DEVICE_EXISTS",
30 CALL_DEVICE_NOT_FOUND: "CALL_DEVICE_NOT_FOUND",
31 CALL_MEMBER_NOT_FOUND: "CALL_MEMBER_NOT_FOUND",
32 CALL_STREAM_EXISTS: "CALL_STREAM_EXISTS",
33 CALL_STREAM_NOT_FOUND: "CALL_STREAM_NOT_FOUND",
34 CALL_LEAVE_NOT_ALLOWED: "CALL_LEAVE_NOT_ALLOWED",
35 INVALID_BUILD_TYPE: "INVALID_BUILD_TYPE",
36 DISPATCH_ERROR: "DISPATCH_ERROR",
37}
38class E extends Error {
39 constructor(_, L, T = E) {
40 ;(super(_ ? `${L}: ${_}` : L),
41 (this.code = L),
42 (this.isContractError = !0),
43 (this.abi = null),
44 (this.roomKey = null),
45 Error.captureStackTrace && Error.captureStackTrace(this, T))
46 }
47 static isContractError(_) {
48 return !!_.isContractError || "KEET_CONTRACT_ABORT" === _.code
49 }
50 static CORRUPT(L = "") {
51 return new E(L, _.CORRUPT, E.CORRUPT)
52 }
53 static ABORT(L = "") {
54 return new E(L, _.ABORT, E.ABORT)
55 }
56 static BUNDLE_NOT_AVAILABLE(L) {
57 const T = new E("ABI " + L, _.BUNDLE_NOT_AVAILABLE, E.BUNDLE_NOT_AVAILABLE)
58 return ((T.abi = L), T)
59 }
60 static ADMINS_ONLY(L = "") {
61 return new E(L, _.ADMINS_ONLY, E.ADMINS_ONLY)
62 }
63 static MODERATORS_ONLY(L = "") {
64 return new E(L, _.MODERATORS_ONLY, E.MODERATORS_ONLY)
65 }
66 static SELF_ONLY(L = "") {
67 return new E(L, _.SELF_ONLY, E.SELF_ONLY)
68 }
69 static MODERATORS_OR_SELF_ONLY(L = "") {
70 return new E(L, _.MODERATORS_OR_SELF_ONLY, E.MODERATORS_OR_SELF_ONLY)
71 }
72 static WRITER_IS_MUTED(L = "") {
73 return new E(L, _.WRITER_IS_MUTED, E.WRITER_IS_MUTED)
74 }
75 static PARENT_MSG_INVALID(L = "") {
76 return new E(L, _.PARENT_MSG_INVALID, E.PARENT_MSG_INVALID)
77 }
78 static REPLYTO_MSG_INVALID(L = "") {
79 return new E(L, _.REPLYTO_MSG_INVALID, E.REPLYTO_MSG_INVALID)
80 }
81 static TARGET_MSG_INVALID(L = "") {
82 return new E(L, _.TARGET_MSG_INVALID, E.TARGET_MSG_INVALID)
83 }
84 static TARGET_MSG_IS_DELETED(L = "") {
85 return new E(L, _.TARGET_MSG_IS_DELETED, E.TARGET_MSG_IS_DELETED)
86 }
87 static FILE_REFERENCE_INVALID(L = "") {
88 return new E(L, _.FILE_REFERENCE_INVALID, E.FILE_REFERENCE_INVALID)
89 }
90 static FILE_RECORD_INVALID(L = "") {
91 return new E(L, _.FILE_RECORD_INVALID, E.FILE_RECORD_INVALID)
92 }
93 static INLINED_FILESIZE_TOO_LARGE(L = "") {
94 return new E(L, _.INLINED_FILESIZE_TOO_LARGE, E.INLINED_FILESIZE_TOO_LARGE)
95 }
96 static FILE_ATTACHMENTS_DISABLED(L = "") {
97 return new E(L, _.FILE_ATTACHMENTS_DISABLED, E.FILE_ATTACHMENTS_DISABLED)
98 }
99 static LINKS_DISABLED(L = "") {
100 return new E(L, _.LINKS_DISABLED, E.LINKS_DISABLED)
101 }
102 static INACTIVE_MEMBER(L = "") {
103 return new E(L, _.INACTIVE_MEMBER, E.INACTIVE_MEMBER)
104 }
105 static TARGET_MEMBER_NOT_FOUND(L = "") {
106 return new E(L, _.TARGET_MEMBER_NOT_FOUND, E.TARGET_MEMBER_NOT_FOUND)
107 }
108 static INVALID_MEMBER_STATUS(L = "") {
109 return new E(L, _.INVALID_MEMBER_STATUS, E.INVALID_MEMBER_STATUS)
110 }
111 static NO_DUPLICATE_CALL_EVENTS(L = "") {
112 return new E(L, _.NO_DUPLICATE_CALL_EVENTS, E.NO_DUPLICATE_CALL_EVENTS)
113 }
114 static GENESIS_NOT_FIRST(L = "") {
115 return new E(L, _.GENESIS_NOT_FIRST, E.GENESIS_NOT_FIRST)
116 }
117 static INVALID_SYSTEM_SETTING(L = "") {
118 return new E(L, _.INVALID_SYSTEM_SETTING, E.INVALID_SYSTEM_SETTING)
119 }
120 static ACTIVE_CALL_EXISTS(L = "") {
121 return new E(L, _.ACTIVE_CALL_EXISTS, E.ACTIVE_CALL_EXISTS)
122 }
123 static CALL_KEY_EXISTS(L = "") {
124 return new E(L, _.CALL_KEY_EXISTS, E.CALL_KEY_EXISTS)
125 }
126 static CALL_NOT_FOUND(L = "") {
127 return new E(L, _.CALL_NOT_FOUND, E.CALL_NOT_FOUND)
128 }
129 static CALL_ENDED(L = "") {
130 return new E(L, _.CALL_ENDED, E.CALL_ENDED)
131 }
132 static CALL_DEVICE_EXISTS(L = "") {
133 return new E(L, _.CALL_DEVICE_EXISTS, E.CALL_DEVICE_EXISTS)
134 }
135 static CALL_DEVICE_NOT_FOUND(L = "") {
136 return new E(L, _.CALL_DEVICE_NOT_FOUND, E.CALL_DEVICE_NOT_FOUND)
137 }
138 static CALL_MEMBER_NOT_FOUND(L = "") {
139 return new E(L, _.CALL_MEMBER_NOT_FOUND, E.CALL_MEMBER_NOT_FOUND)
140 }
141 static CALL_STREAM_EXISTS(L = "") {
142 return new E(L, _.CALL_STREAM_EXISTS, E.CALL_STREAM_EXISTS)
143 }
144 static CALL_STREAM_NOT_FOUND(L = "") {
145 return new E(L, _.CALL_STREAM_NOT_FOUND, E.CALL_STREAM_NOT_FOUND)
146 }
147 static CALL_LEAVE_NOT_ALLOWED(L = "") {
148 return new E(L, _.CALL_LEAVE_NOT_ALLOWED, E.CALL_LEAVE_NOT_ALLOWED)
149 }
150 static INVALID_BUILD_TYPE(L = "") {
151 return new E(L, _.INVALID_BUILD_TYPE, E.INVALID_BUILD_TYPE)
152 }
153 static DISPATCH_ERROR(L = "") {
154 return new E(L, _.DISPATCH_ERROR, E.DISPATCH_ERROR)
155 }
156}
157module.exports = { CONTRACT_ERRORS: _, KeetContractError: E }
keet-core-4.14.4-pretty/lib/core/contract/helpers.js +10 -0
……@@ -0,0 +1,10 @@
1const {
2 contract: {
3 hyperschema: { getEnum: e },
4 },
5 } = require("../../../schema/spec"),
6 t = e("@keet/build-type")
7function c(e, c) {
8 return !(e !== t.Production || c) || e === c
9}
10module.exports = { isValidBuildType: c }
keet-core-4.14.4-pretty/lib/core/contract/identity/index.js +6 -0
……@@ -0,0 +1,6 @@
1const e = require("../registration"),
2 r = require("./private.js")
3function i(i) {
4 r[e](i)
5}
6module.exports = { [e]: i, private: r }
keet-core-4.14.4-pretty/lib/core/contract/identity/private.js +354 -0
……@@ -0,0 +1,354 @@
1const e = require("b4a"),
2 {
3 contract: {
4 hyperschema: { encode: t },
5 },
6 } = require("../../../../schema/spec"),
7 {
8 verifyAttestation: i,
9 verifyDeviceResponse: a,
10 decryptContactRequest: s,
11 generateMailboxKeyPair: r,
12 generateRoomCapabilities: o,
13 } = require("../../invitations"),
14 n = require("../registration"),
15 { KeetContractError: c } = require("../errors"),
16 { isMemberActive: d, getMemberForDeviceKey: y } = require("../query"),
17 {
18 profileRoomStats: l,
19 profileContactStats: u,
20 profileContactRequestStats: m,
21 } = require("../stats/profile"),
22 { isValidBuildType: k } = require("../helpers"),
23 p = ["isActive", "isFullyMuted", "isMentionsOnlyMuted", "isFavorite"],
24 v = { IsActive: 1, IsFullyMuted: 2, IsMentionsOnlyMuted: 3, IsFavorite: 4 },
25 w = ["isBlocked"],
26 f = { IsBlocked: 1 },
27 b = ["isPending", "isAccepted", "isRejected", "isDiscarded", "isSeen"],
28 g = { IsPending: 1, IsAccepted: 2, IsRejected: 3, IsDiscarded: 4, IsSeen: 5 }
29async function K({ sharedRooms: e, blockedContacts: t }, { db: i, writer: a }) {
30 const [s, r] = await Promise.all([y(i, a.key), i.get("@keet-private-id/counters")])
31 if (!d(s)) throw c.ABORT()
32 for (let t = 0; t < e.length; t++) {
33 const { roomKey: a, initiator: s, fastForwardTo: r, encryptionKey: n, seed: c } = e[t],
34 d = {
35 roomKey: a,
36 encryptionKey: n,
37 mailbox: o(a, c).mailboxKeyPair.publicKey,
38 clock: t + 1,
39 status: { isActive: !0, isFullyMuted: !1, isMentionsOnlyMuted: !1 },
40 initiator: s,
41 fastForwardTo: r,
42 identitySwap: null,
43 }
44 await i.insert("@keet-private-id/rooms", d)
45 }
46 for (let e = 0; e < t.length; e++) {
47 const a = r ? r.contacts + 1 : 0,
48 s = { memberKey: t[e], clock: a, status: { isBlocked: !0 }, mailbox: null, roomKey: null }
49 await i.insert("@keet-private-id/contacts", s)
50 }
51}
52async function A({ identity: t }, { db: i, writer: a }) {
53 const [s, r] = await Promise.all([y(i, a.key), i.get("@keet-private-id/identity")])
54 if (!d(s) || !r || !e.equals(t.publicKey, r.publicKey)) throw c.ABORT()
55 ;(t.discoveryCoreKey && (r.discoveryCoreKey = t.discoveryCoreKey),
56 await i.insert("@keet-private-id/identity", r))
57}
58async function R({ key: e, settings: t }, { db: i, writer: a }) {
59 const [s, r] = await Promise.all([y(i, a.key), i.get("@keet-private-id/settings")])
60 if (!d(s)) throw c.ABORT()
61 const o = { ...r, [e]: t[e] }
62 await i.insert("@keet-private-id/settings", o)
63}
64async function h({ invitation: e }, { db: t, writer: i }) {
65 const [a, s] = await Promise.all([y(t, i.key), t.get("@keet/system-digest")])
66 if (!d(a)) throw c.ABORT()
67 const r = s.settings.buildType,
68 o = e.buildType
69 if (!k(r, o)) throw c.INVALID_BUILD_TYPE()
70 await t.insert("@keet-private-id/pending-invitations", e)
71}
72async function O({ id: e }, { db: t, writer: i }) {
73 const a = await y(t, i.key)
74 if (!d(a)) throw c.ABORT()
75 await t.delete("@keet-private-id/pending-invitations", { id: e })
76}
77async function T({ blindResponse: t }, { db: i, writer: s, hostcalls: o }) {
78 const n = await i.get("@keet/room-capabilities")
79 if (!n) throw c.ABORT()
80 let d = null
81 try {
82 const e = r(o.key, n.seed)
83 d = a(e, t)
84 } catch (e) {
85 throw c.ABORT()
86 }
87 if (!d) throw c.ABORT()
88 const { id: y, response: u } = d,
89 { roomKeys: m } = u
90 if (!m.key || !m.encryptionKey) throw c.ABORT()
91 const [k, p, v, w] = await Promise.all([
92 i.get("@keet-private-id/pending-invitations", { id: y }),
93 i.get("@keet-private-id/rooms", { roomKey: m.key }),
94 i.get("@keet-private-id/counters"),
95 i.get("@keet/system-digest"),
96 ])
97 if (!k) throw c.ABORT()
98 const f = v ? v.rooms + 1 : 0,
99 b = p
100 let g = p
101 if (
102 (g
103 ? (!g.status.isActive || w.abi.version >= 12) &&
104 ((g.clock = f), (g.status.isActive = !0), (g.status.isReadOnly = !1))
105 : (g = {
106 clock: f,
107 roomKey: m.key,
108 encryptionKey: m.encryptionKey,
109 fastForwardTo: m.fastForwardTo,
110 status: { isActive: !0, isReadOnly: !1 },
111 initiator: k.initiator,
112 mailbox: k.mailbox,
113 identitySwapV2: k.identity,
114 }),
115 await i.insert("@keet-private-id/rooms", g),
116 await l(i, g, b),
117 w.abi.version < 11)
118 )
119 await i.delete("@keet-private-id/pending-invitations", { id: y })
120 else
121 for await (const t of i.find("@keet-private-id/pending-invitations"))
122 e.equals(t.mailbox, g.mailbox) && (await i.delete("@keet-private-id/pending-invitations", t))
123 await o.ackWriter(s.key)
124}
125async function B({ header: e, ...t }, { db: i, writer: a }) {
126 const [s, r, o, n, u] = await Promise.all([
127 y(i, a.key),
128 i.get("@keet-private-id/rooms", { roomKey: t.roomKey }),
129 i.get("@keet-private-id/stats"),
130 i.get("@keet-private-id/counters"),
131 i.get("@keet/system-digest"),
132 ])
133 if (!u || !d(s)) throw c.ABORT()
134 const m = r
135 let k = 0
136 u.abi.version < 10 ? (r ? (k = r.clock) : o && (k = o.rooms + 1)) : n && (k = n.rooms + 1)
137 let p = r?.status.isReadOnly
138 !p && t.isReadOnly && (p = !0)
139 const v = { ...t, clock: k, status: { isActive: !0, isReadOnly: p }, contact: t.dm }
140 ;(await i.insert("@keet-private-id/rooms", v), await l(i, v, m))
141}
142async function q({ roomKey: e }, { db: t, writer: i }) {
143 const a = await y(t, i.key)
144 if (d(a)) return t.delete("@keet-private-id/rooms", { roomKey: e })
145}
146async function P({ header: t, roomKey: i, key: a, status: s }, { db: r, writer: o }) {
147 const [n, u, m, k] = await Promise.all([
148 y(r, o.key),
149 r.get("@keet-private-id/rooms", { roomKey: i }),
150 r.get("@keet-private-id/counters"),
151 r.get("@keet/system-digest"),
152 ])
153 if (!d(n) || !u) throw c.ABORT()
154 if (!L(a)) throw c.ABORT()
155 const p = u,
156 v = E(a),
157 w = m.rooms + 1
158 if (
159 ((u.status = { ...u.status, [v]: s[v] }),
160 (u.clock = w),
161 !u.status.isActive && k.abi.version >= 12)
162 )
163 for await (const t of r.find("@keet-private-id/pending-invitations"))
164 e.equals(t.mailbox, u.mailbox) && (await r.delete("@keet-private-id/pending-invitations", t))
165 ;(await r.insert("@keet-private-id/rooms", u), await l(r, u, p))
166}
167async function x(
168 { contact: { memberKey: e, mailbox: t, roomKey: i, status: a } },
169 { db: s, writer: r },
170) {
171 const [o, n, l] = await Promise.all([
172 y(s, r.key),
173 s.get("@keet-private-id/contacts", { memberKey: e }),
174 s.get("@keet-private-id/counters"),
175 ])
176 if (!d(o)) throw c.ABORT()
177 const m = n,
178 k = l ? l.contacts + 1 : 0
179 let p = n
180 ;(p
181 ? ((p.mailbox = t), (p.status = a), (p.clock = k))
182 : (p = { memberKey: e, mailbox: t, status: a, clock: k }),
183 await s.insert("@keet-private-id/contacts", p),
184 await u(s, p, m))
185}
186async function I({ memberKey: e, key: t, status: i }, { db: a, writer: s }) {
187 const [r, o, n] = await Promise.all([
188 y(a, s.key),
189 a.get("@keet-private-id/contacts", { memberKey: e }),
190 a.get("@keet-private-id/counters"),
191 ])
192 if (!d(r) || !o) throw c.ABORT()
193 if (!_(t)) throw c.ABORT()
194 const l = o,
195 m = W(t)
196 ;((o.status = { ...o.status, [m]: i[m] }),
197 (o.clock = n ? n.contacts + 1 : 0),
198 await a.insert("@keet-private-id/contacts", o),
199 await u(a, o, l))
200}
201async function S({ memberKey: e }, { db: t, writer: i }) {
202 const [a, s] = await Promise.all([
203 y(t, i.key),
204 t.get("@keet-private-id/contacts", { memberKey: e }),
205 ])
206 if (!d(a) || !s) throw c.ABORT
207 await t.delete("@keet-private-id/contacts", s)
208}
209async function M({ blindRequest: e, header: a }, { db: o, hostcalls: n, writer: d }) {
210 const y = await o.get("@keet/room-capabilities")
211 if (!y) throw c.ABORT()
212 let l = null
213 try {
214 const t = r(n.key, y.seed)
215 l = s(t, e)
216 } catch (e) {
217 throw c.ABORT()
218 }
219 if (!l) throw c.ABORT()
220 const { body: u, attestation: k } = l,
221 { sender: p, keys: v, mailbox: w, message: f } = u,
222 [b, g, K] = await Promise.all([
223 o.get("@keet-private-id/contacts", { memberKey: p.attestation.memberKey }),
224 o.get("@keet-private-id/stats"),
225 o.get("@keet/system-digest"),
226 ])
227 if (b && b.status.isBlocked) throw c.ABORT()
228 if (b && b.roomKey && K.abi.version < 12) throw c.ABORT()
229 const A = t("@keet-private-id/contact-request-body", u),
230 R = t("@keet/member-profile", p.profile)
231 if (!i(k, A)) throw c.ABORT()
232 if (!i(p.attestation, R)) throw c.ABORT()
233 let h = !0
234 const O = a.timestamp,
235 T = o.find("@keet-private-id/pending-contact-requests-by-member", {
236 gte: { memberKey: p.attestation.memberKey },
237 lte: { memberKey: p.attestation.memberKey },
238 })
239 for await (const e of T)
240 e.sentAt > O
241 ? (h = !1)
242 : ((e.status.isPending = !1),
243 (e.status.isDiscarded = !0),
244 await o.insert("@keet-private-id/contact-requests-v2", e))
245 if (!h) return
246 const B = g?.contactRequests || 0,
247 q = {
248 memberKey: p.attestation.memberKey,
249 sender: p.profile,
250 status: { isPending: !0 },
251 clock: B,
252 keys: v,
253 mailbox: w,
254 message: f,
255 sentAt: O,
256 }
257 ;(await o.insert("@keet-private-id/contact-requests-v2", q),
258 await m(o, q, null),
259 await n.ackWriter(d.key))
260}
261async function C({ memberKey: e, roomKey: t, key: i, status: a }, { db: s, writer: r }) {
262 if (!t) throw c.ABORT()
263 const [o, n, m] = await Promise.all([
264 y(s, r.key),
265 s.get("@keet-private-id/contact-requests-v2", { memberKey: e, keys: { key: t } }),
266 s.get("@keet-private-id/counters"),
267 ])
268 if (!d(o) || !n) throw c.ABORT()
269 if (!U(i)) throw c.ABORT()
270 const k = N(i),
271 p = n.sender,
272 v = !n.status.isAccepted && i === g.IsAccepted,
273 w = i === g.IsSeen
274 if (!w && n.status.isAccepted) throw c.ABORT()
275 const f = {
276 isPending: !1,
277 isAccepted: !1,
278 isRejected: !1,
279 isDiscarded: !1,
280 isSeen: n.status.isSeen,
281 },
282 b = w ? n.status : f
283 if (
284 ((n.status = { ...b, [k]: a[k] }),
285 (n.status.isAccepted || n.status.isRejected || n.status.isDiscarded) &&
286 (n.status.isPending = !1),
287 await s.insert("@keet-private-id/contact-requests-v2", n),
288 !v)
289 )
290 return
291 const K = (m?.rooms || 0) + 1,
292 A = (m?.contacts || 0) + 1,
293 R = {
294 clock: K,
295 roomKey: n.keys.key,
296 encryptionKey: n.keys.encryptionKey,
297 mailbox: n.mailbox,
298 status: { isActive: !0 },
299 },
300 h = { memberKey: n.memberKey, mailbox: p.mailbox, clock: A, status: { isBlocked: !1 } }
301 ;(await s.insert("@keet-private-id/rooms", R),
302 await l(s, R, null),
303 await s.insert("@keet-private-id/contacts", h),
304 await u(s, h, null))
305}
306async function F({ memberKey: e }, { db: t, writer: i }) {}
307async function D({ key: e }, { db: t, writer: i }) {
308 const a = await y(t, i.key)
309 if (!d(a)) throw c.ABORT()
310 await t.insert("@keet-private-id/unreads-v2", { deviceKey: i.key, key: e })
311}
312async function j({ key: e }, { db: t, writer: i }) {
313 const a = await y(t, i.key)
314 if (!d(a)) throw c.ABORT()
315 await t.delete("@keet-private-id/unreads-v2", { deviceKey: i.key, key: e })
316}
317function V(e) {
318 ;(e.add("@keet-private-id/run-v3-migration", K),
319 e.add("@keet-private-id/update-identity", A),
320 e.add("@keet-private-id/update-settings", R),
321 e.add("@keet-private-id/add-room", B),
322 e.add("@keet-private-id/remove-room", q),
323 e.add("@keet-private-id/update-room-status", P),
324 e.add("@keet-private-id/add-pending-invitation", h),
325 e.add("@keet-private-id/remove-pending-invitation", O),
326 e.add("@keet-private-id/resolve-pending-invitation", T),
327 e.add("@keet-private-id/add-contact", x),
328 e.add("@keet-private-id/update-contact-status", I),
329 e.add("@keet-private-id/remove-contact", S),
330 e.add("@keet-private-id/add-contact-request", M),
331 e.add("@keet-private-id/update-contact-request-status", C),
332 e.add("@keet-private-id/activate-contact-room", F),
333 e.add("@keet-private-id/add-unreads-key", D),
334 e.add("@keet-private-id/remove-unreads-key", j))
335}
336function E(e) {
337 return p[e - 1]
338}
339function L(e) {
340 return e >= 1 && e <= p.length
341}
342function W(e) {
343 return w[e - 1]
344}
345function _(e) {
346 return e >= 1 && e <= w.length
347}
348function N(e) {
349 return b[e - 1]
350}
351function U(e) {
352 return e >= 1 && e <= b.length
353}
354module.exports = { [n]: V, RoomStatus: v, ContactStatus: f, ContactRequestStatus: g }
keet-core-4.14.4-pretty/lib/core/contract/index.js +93 -0
……@@ -0,0 +1,93 @@
1const e = require("path"),
2 r = require("rocksdb-blobs"),
3 t = require("hyperblobs"),
4 o = require("hyperdb"),
5 s = require("../../../schema/spec"),
6 {
7 contract: {
8 hyperdispatch: { Router: i, encode: c },
9 hyperdb: n,
10 },
11 } = s,
12 a = require("./identity"),
13 b = require("./internal"),
14 h = require("./members"),
15 u = require("./members/labels"),
16 l = require("./chat"),
17 d = require("./reactions"),
18 p = require("./config"),
19 q = require("./labels"),
20 m = require("./calls"),
21 w = require("./testing"),
22 E = require("./registration")
23class v {
24 constructor(
25 e,
26 r,
27 {
28 abi: t,
29 bootstrap: o,
30 router: s,
31 hostcalls: i,
32 writer: c,
33 genesis: n,
34 dryRun: a,
35 trace: b,
36 fork: h,
37 },
38 ) {
39 if (
40 ((this.db = e),
41 (this.blobs = r),
42 (this.writer = c),
43 (this.genesis = !!n),
44 (this.bootstrap = o),
45 (this.router = s),
46 (this.hostcalls = i),
47 (this.dryRun = a),
48 (this.trace = b),
49 (this.fork = h),
50 (this.abi = t),
51 !i.addWriter)
52 )
53 throw new Error("An addWriter hostcall must be provided as context")
54 if (!i.removeWriter) throw new Error("A removeWriter hostcall must be provided as context")
55 if (!i.removeable) throw new Error("A removeable hostcall must be provided as context")
56 if (!i.interrupt) throw new Error("An interrupt hostcall must be provided as context")
57 if (!i.createAnchor) throw new Error("A createAnchor hostcall must be provided as context")
58 }
59}
60class A {
61 static OpContext = v
62 static bee(e, r = {}) {
63 const s = e.get(A.DB_VIEW_NAME),
64 i = e.get(A.BLOB_VIEW_NAME),
65 c = o.bee(s, n, r.hyperdb)
66 return { blobs: new t(i), db: c, cores: { db: s, blobs: i } }
67 }
68 static rocks(t, s = {}) {
69 const i = e.join(t, "db"),
70 c = e.join(t, "blobs"),
71 a = o.rocks(i, n, s.hyperdb)
72 return { blobs: new r(c), db: a }
73 }
74 static DB_VIEW_NAME = "keet/v3/db"
75 static BLOB_VIEW_NAME = "keet/v3/blobs"
76}
77function f() {
78 const e = new i()
79 return (
80 a[E](e),
81 b[E](e),
82 h[E](e),
83 u[E](e),
84 l[E](e),
85 d[E](e),
86 p[E](e),
87 q[E](e),
88 m[E](e),
89 w[E](e),
90 e
91 )
92}
93module.exports = { KeetContract: A, createRouter: f, encodeOperation: c, spec: s }
keet-core-4.14.4-pretty/lib/core/contract/internal.js +164 -0
……@@ -0,0 +1,164 @@
1const e = require("b4a"),
2 t = require("./registration"),
3 { KeetContractError: i } = require("./errors"),
4 { isMemberActive: s, getMemberForDeviceKey: a } = require("./query"),
5 { addDevice: r, addMember: n } = require("./members"),
6 {
7 contract: {
8 hyperschema: { getEnum: o },
9 },
10 } = require("../../../schema/spec"),
11 d = o("@keet/room-type"),
12 c = o("@keet/build-type"),
13 m = [
14 "roomType",
15 "isExperimental",
16 "isJoiningDisabled",
17 "isAppendingDisabled",
18 "isCallingDisabled",
19 "isMembershipEventsDisabled",
20 "isAttachmentsDisabled",
21 "isLinksDisabled",
22 ],
23 u = {
24 RoomType: 1,
25 IsExperimental: 2,
26 IsJoiningDisabled: 3,
27 IsAppendingDisabled: 4,
28 IsCallingDisabled: 5,
29 IsMembershipEventsDisabled: 6,
30 IsAttachmentsDisabled: 7,
31 IsLinksDisabled: 8,
32 }
33async function l(
34 {
35 header: t,
36 digest: s,
37 config: o,
38 capabilities: c,
39 identity: m,
40 bootstrapDevice: u,
41 initialMembers: l,
42 },
43 p,
44) {
45 const { genesis: y, db: g, writer: b } = p
46 if (!y) throw i.GENESIS_NOT_FIRST()
47 const k = { id: 0, count: 0, parent: null, stats: I() }
48 if (
49 (await g.insert("@keet/threads", k),
50 s.settings.roomType === d.Broadcast && (s.settings.isCallingDisabled = !0),
51 await g.insert("@keet/system-digest", s),
52 c && (await g.insert("@keet/room-capabilities", c)),
53 m && (await g.insert("@keet-private-id/identity", m)),
54 o && (await g.insert("@keet/room-config", o)),
55 l)
56 )
57 for (const i of l) {
58 const s = e.equals(i.attestation.memberKey, u.attestation.memberKey)
59 ? { isAdmin: !0, isModerator: !0 }
60 : { isAdmin: !1, isModerator: !0 }
61 await n(t, i.profile, i.attestation, s, p)
62 }
63 await r(t, b.key, u.profile, u.attestation, { isActive: !0, isIndexing: !0 }, p)
64 const w = await a(g, b.key)
65 if (!u || !w) throw i.ABORT()
66}
67async function p({ version: e }, { db: t, writer: r, abi: n, hostcalls: o }) {
68 const [d, c] = await Promise.all([a(t, r.key), t.get("@keet/system-digest")])
69 if (!(9 !== e || (s(d) && d.status.isModerator))) return
70 if (!s(d) || !d.status.isModerator) throw i.ABORT()
71 if (c.abi.version >= e) return
72 e > (c.settings.isExperimental ? n.max : n.production) &&
73 o.interrupt({ unsupportedABI: e, digest: c })
74 const m = c.abi.version
75 ;((c.abi.version = e), await A(t, m, e), await t.insert("@keet/system-digest", c))
76}
77async function y({ key: e, settings: t }, { db: r, writer: n }) {
78 const [o, d] = await Promise.all([a(r, n.key), r.get("@keet/system-digest")])
79 if (!s(o)) throw i.INACTIVE_MEMBER()
80 if (!o.status.isModerator) throw i.MODERATORS_ONLY()
81 if (0 === e || e > m.length) throw i.INVALID_SYSTEM_SETTING()
82 const c = d?.settings,
83 u = m[e - 1],
84 l = { ...c, [u]: t[u] }
85 await r.insert("@keet/system-digest", { ...d, settings: l })
86}
87async function g({ peer: e }, { db: t, writer: i }) {
88 const r = await a(t, i.key)
89 s(r) && r.status.isModerator && (await t.insert("@keet/blind-peers", e))
90}
91async function b({ key: e }, { db: t, writer: i }) {
92 const r = await a(t, i.key)
93 s(r) && r.status.isModerator && (await t.delete("@keet/blind-peers", { key: e }))
94}
95async function k({ from: e, to: t, buildType: i }, { db: r, writer: n }) {
96 const o = await a(r, n.key)
97 s(o) &&
98 o.status.isModerator &&
99 (e < 14 && t >= 14 && (await v(r), await h(r)),
100 e < 20 && t >= 20 && (await D(r)),
101 e < 24 && t >= 24 && (await f(r)),
102 e < 25 && t >= 25 && (await w(r, i)))
103}
104async function w(e, t) {
105 const i = await e.get("@keet/system-digest")
106 c[i.settings.buildType] ||
107 (c[t] && ((i.settings.buildType = c[t]), await e.insert("@keet/system-digest", i)))
108}
109async function f(e) {
110 if ((await e.get("@keet/system-digest")).settings.roomType === d.DirectMessage)
111 for await (const t of e.find("@keet/members"))
112 t.status.isModerator || ((t.status.isModerator = !0), await e.insert("@keet/members", t))
113}
114async function h(e) {
115 if (!(await e.get("@keet-private-id/identity"))) return
116 const t = { isPending: !1, isAccepted: !1, isRejected: !1, isDiscarded: !1, isSeen: !1 },
117 i = []
118 for (const s of await e.find("@keet-private-id/contact-requests").toArray()) {
119 const { isSeen: a, isAccepted: r, isRejected: n, isDiscarded: o } = s.status
120 ;(s.status.isAccepted && (s.status = { ...t, isAccepted: r, isSeen: a }),
121 s.status.isRejected && (s.status = { ...t, isRejected: n, isSeen: a }),
122 s.status.isDiscarded && (s.status = { ...t, isDiscarded: o, isSeen: a }),
123 i.push(e.insert("@keet-private-id/contact-requests-v2", s)))
124 }
125 await Promise.all(i)
126}
127async function v(e) {
128 if (!(await e.get("@keet-private-id/identity"))) return
129 const t = []
130 for (const { memberKey: i, roomKey: s } of await e.find("@keet-private-id/contacts").toArray()) {
131 if (!s || !i) continue
132 const a = await e.get("@keet-private-id/rooms", { roomKey: s })
133 a && ((a.contact = i), t.push(e.insert("@keet-private-id/rooms", a)))
134 }
135 await Promise.all(t)
136}
137async function D(e) {
138 const [t, i, s] = await Promise.all([
139 e.get("@keet-private-id/identity"),
140 e.get("@keet/threads", { id: 0 }),
141 e.find("@keet/pinned-chat-messages").toArray(),
142 ])
143 !t && i && ((i.stats.chat.pinned = s.length), await e.insert("@keet/threads", i))
144}
145function A(e, t, i) {
146 return Promise.resolve()
147}
148function M(e) {
149 ;(e.add("@keet/genesis", l),
150 e.add("@keet/upgrade", p),
151 e.add("@keet/add-blind-peer", g),
152 e.add("@keet/remove-blind-peer", b),
153 e.add("@keet/update-system-settings", y),
154 e.add("@keet/migrate-abi", k))
155}
156function I() {
157 return {
158 devices: { total: 0, active: 0 },
159 members: { total: 0, active: 0, pending: 0 },
160 chat: { clock: 0, pinned: 0, threads: 0, timestamp: 0 },
161 files: { clock: 0 },
162 }
163}
164module.exports = { [t]: M, Settings: u }
keet-core-4.14.4-pretty/lib/core/contract/labels.js +33 -0
……@@ -0,0 +1,33 @@
1const e = require("./registration"),
2 { isMemberActive: t, getMemberForDeviceKey: a } = require("./query"),
3 s = require("b4a"),
4 { KeetContractError: i } = require("./errors"),
5 { chatLabelStats: r } = require("./stats")
6async function l({ header: e, oplog: l, label: d }, { db: o, writer: c }) {
7 const [k, n, u, b] = await Promise.all([
8 a(o, c.key),
9 a(o, l.key),
10 o.get("@keet/chat-by-message-id", { oplog: l }),
11 o.get("@keet/threads", { id: 0 }),
12 ])
13 if (!t(k) || !u || u.status.isDeleted || k.status.isMuted || s.equals(k.key, n.key)) return
14 if (await o.get("@keet/chat-labels", { id: u.id, sender: k.key, label: d })) throw i.ABORT()
15 const y = { id: u.id, sender: k.key, clock: b.stats.chat.clock, label: d }
16 ;(await o.insert("@keet/chat-labels", y), await r(o, b, y, null, e.timestamp))
17}
18async function d({ header: e, oplog: l, label: d }, { db: o, writer: c }) {
19 const [k, n, u, b] = await Promise.all([
20 a(o, c.key),
21 a(o, l.key),
22 o.get("@keet/chat-by-message-id", { oplog: l }),
23 o.get("@keet/threads", { id: 0 }),
24 ])
25 if (!t(k) || !u || u.status.isDeleted || k.status.isMuted || s.equals(k.key, n.key)) return
26 const y = await o.get("@keet/chat-labels", { id: u.id, sender: k.key, label: d })
27 if (!y) throw i.ABORT()
28 ;(await o.delete("@keet/chat-labels", y), await r(o, b, null, y, e.timestamp))
29}
30function o(e) {
31 ;(e.add("@keet/add-chat-label", l), e.add("@keet/remove-chat-label", d))
32}
33module.exports = { [e]: o }
keet-core-4.14.4-pretty/lib/core/contract/members/index.js +413 -0
……@@ -0,0 +1,413 @@
1const e = require("autobase"),
2 t = require("b4a"),
3 {
4 contract: {
5 hyperschema: { getEnum: i, encode: a },
6 hyperdispatch: { encode: s },
7 },
8 } = require("../../../../schema/spec"),
9 {
10 createDeviceResponse: r,
11 decryptDeviceRequest: n,
12 verifyAttestation: o,
13 verifyInvitationDeviceRequest: d,
14 generateMailboxKeyPair: c,
15 } = require("../../invitations"),
16 m = i("@keet/room-type"),
17 { deviceStats: y, memberStats: k } = require("../stats"),
18 { isMemberActive: l, getMemberForDeviceKey: u } = require("../query"),
19 { addEvent: w } = require("../chat"),
20 { updateAvatar: v } = require("../avatars"),
21 { KeetContractError: f } = require("../errors"),
22 b = require("../registration"),
23 { isValidBuildType: p } = require("../helpers"),
24 A = ["isMuted", "isBanned", "isShadowBanned"],
25 h = { IsMuted: 1, IsBanned: 2, IsShadowBanned: 3 }
26async function g(e, t, i) {
27 const { db: a, hostcalls: s } = i,
28 [r, n] = await Promise.all([
29 a.get("@keet-private-id/identity"),
30 a.get("@keet/threads", { id: 0 }),
31 ]),
32 o = await a.get("@keet/members", { key: r.publicKey }),
33 d = { ...o, status: { ...o.status } },
34 c = { key: e, memberKey: r.publicKey, profile: t, status: { isActive: !0, isIndexing: !0 } }
35 return (
36 (o.status.isPending = !1),
37 await s.addWriter(e, { indexer: !0 }),
38 await a.insert("@keet/members", o),
39 await k(a, n, o, d),
40 await a.insert("@keet/devices", c),
41 await y(a, n, c, null),
42 { added: !0, device: c }
43 )
44}
45async function R(e, t, i, a, s, { db: r, writer: n, hostcalls: d, genesis: c }) {
46 const [l, u, v, b, p] = await Promise.all([
47 r.get("@keet/devices", { key: t }),
48 r.get("@keet/members", { key: a.memberKey }),
49 r.get("@keet/member-proofs", { key: a.memberKey }),
50 r.get("@keet/system-digest"),
51 r.get("@keet/threads", { id: 0 }),
52 ])
53 if (!u || !v) throw f.ABORT()
54 if (l) return { added: !1, device: l }
55 const A = { ...u, status: { ...u.status } },
56 h = u.status.isPending,
57 g = o(a, t, v.latestReceipt)
58 v.latestReceipt = g
59 const R = { isActive: !0, isIndexing: !!s?.isIndexing }
60 ;((u.status.isActive = !0),
61 (u.status.isPending = !1),
62 h && !u.status.isModerator && s?.isModerator && (u.status.isModerator = !0),
63 R.isIndexing && !u.status.isAdmin && (u.status.isAdmin = !0))
64 const T = { key: t, memberKey: u.key, status: R, profile: i }
65 if (
66 (await r.insert("@keet/members", u),
67 await k(r, p, u, A),
68 await r.insert("@keet/devices", T),
69 await y(r, p, T, null),
70 await r.insert("@keet/member-proofs", v),
71 c || (await d.addWriter(t, { indexer: R.isIndexing })),
72 !h || b.settings.roomType === m.Broadcast)
73 )
74 return { added: !0, device: T }
75 if (b.abi.version >= 11 && b.settings.isMembershipEventsDisabled) return { added: !0, device: T }
76 const M = { memberJoined: { memberKey: u.key } }
77 return (await w(r, n, M, e.timestamp), { added: !0, device: T })
78}
79async function T(e, t, i, s, { db: r, blobs: n, writer: d, genesis: c }) {
80 const [m, y, l] = await Promise.all([
81 r.get("@keet/members", { key: i.memberKey }),
82 r.get("@keet/member-proofs", { key: i.memberKey }),
83 r.get("@keet/threads", { id: 0 }),
84 ])
85 if (m) throw f.ABORT()
86 const u = a("@keet/member-profile", t),
87 w = o(i, u, y?.latestReceipt)
88 let b = y
89 ;(b
90 ? ((b.latestReceipt = w), (b.profileAttestation = i.proof))
91 : (b = { key: i.memberKey, latestReceipt: w, profileAttestation: i.proof }),
92 t.avatar ? (t.avatar = await v(n, m?.profile.avatar, t.avatar)) : (t.avatar = null))
93 const p = {
94 isAdmin: !!s.isAdmin,
95 isModerator: !!s.isModerator,
96 isPending: !0,
97 isActive: !0,
98 isMuted: !1,
99 isBanned: !1,
100 isShadowBanned: !1,
101 },
102 A = { key: i.memberKey, devices: [], status: p, profile: t }
103 return (
104 await r.insert("@keet/members", A),
105 await k(r, l, A),
106 await r.insert("@keet/member-proofs", b),
107 A
108 )
109}
110async function M(e, t, i, { db: s, blobs: r }) {
111 const [n, d] = await Promise.all([
112 s.get("@keet/members", { key: i.memberKey }),
113 s.get("@keet/member-proofs", { key: i.memberKey }),
114 ])
115 if (!n) throw f.ABORT()
116 const c = a("@keet/member-profile", t),
117 m = o(i, c, d?.latestReceipt)
118 let y = d
119 ;(y
120 ? ((y.latestReceipt = m), (y.profileAttestation = i.proof))
121 : (y = { key: i.memberKey, latestReceipt: m, profileAttestation: i.proof }),
122 n.profile.timestamp >= t.timestamp ||
123 ((n.profile = t),
124 t.avatar
125 ? (n.profile.avatar = await v(r, n.profile.avatar, t.avatar))
126 : (n.profile.avatar = null),
127 await s.insert("@keet/members", n),
128 await s.insert("@keet/member-proofs", y)))
129}
130async function B(t, i, a, n, o, d) {
131 const { db: c, trace: m, hostcalls: y, dryRun: k } = d,
132 l = await c.get("@keet/room-capabilities"),
133 u = y.discoveryKey,
134 w = y.key,
135 v = n.metadata,
136 b = { isAdmin: v.canAdmin, isModerator: v.canModerate || v.canAdmin },
137 p = { isIndexing: v.canAdmin, isModerator: v.canModerate }
138 let A = null
139 if (o)
140 ((A = await g(i, a.device.profile, d)),
141 await c.insert("@keet-private-id/device-identities", {
142 deviceKey: i,
143 privateProfileIdentity: o.privateProfileIdentity,
144 deviceProof: o.deviceProof,
145 }))
146 else {
147 const e = await c.get("@keet/members", { key: a.device.attestation.memberKey })
148 if (e) {
149 if (e.status.isRemoved) throw new f.ABORT()
150 await M(t, a.member.profile, a.member.attestation, d)
151 } else await T(t, a.member.profile, a.member.attestation, b, d)
152 A = await R(t, i, a.device.profile, a.device.attestation, p, d)
153 }
154 const { device: h, added: B } = A,
155 O = a.member.profile.mailbox,
156 K = l.seed,
157 { blindResponse: q } = r(O, K, n),
158 I = s("@keet-private-id/resolve-pending-invitation", {
159 header: { timestamp: 0 },
160 blindResponse: q,
161 }),
162 P = e.encodeValue(I, { optimistic: !0, encrypted: !0 })
163 if (
164 (B &&
165 ((n.metadata.canAdmin = !1),
166 (n.metadata.canModerate = !1),
167 (h.invitation = { id: n.id, response: P }),
168 await c.insert("@keet/devices", h),
169 await c.insert("@keet/invitations", n)),
170 m && !k)
171 ) {
172 const e = { roomKey: w, discoveryKey: u, request: a, response: P, invitation: n }
173 await m({ type: "@keet/add-device", value: e })
174 }
175}
176async function O({ device: e, member: t }, i, a) {
177 const { db: s, hostcalls: r, writer: n } = a,
178 [o, d, c] = await Promise.all([
179 s.get("@keet/members", { key: e.attestation.memberKey }),
180 s.get("@keet/member-proofs", { key: e.attestation.memberKey }),
181 s.get("@keet/system-digest"),
182 ])
183 if (!o || !d) throw f.ABORT()
184 const y = c.settings.roomType === m.DirectMessage
185 if (c.abi.version >= 12 && !o.status.isActive && !y) throw f.ABORT()
186 ;(await R(i, n.key, e.profile, e.attestation, { isActive: !0, isIndexing: !1 }, a),
187 await r.ackWriter(n.key),
188 t && (await M(i, t.profile, t.attestation, a)))
189}
190async function K(e, i, a) {
191 const { db: s, hostcalls: r, writer: n } = a
192 let o = null
193 try {
194 o = d(e)
195 } catch (e) {
196 throw f.ABORT()
197 }
198 if (!o) throw f.ABORT()
199 const { id: c, request: m } = o
200 if (!t.equals(m.deviceKey, n.key)) throw f.ABORT()
201 const [y, k, l] = await Promise.all([
202 s.get("@keet/join-requests", { deviceKey: n.key }),
203 s.get("@keet/invitations", { id: c }),
204 s.get("@keet-private-id/identity"),
205 ])
206 if (!k || y) throw f.ABORT()
207 const u = k.metadata.buildType,
208 w = m.device.profile.buildType
209 if (!p(w, u)) throw f.INVALID_BUILD_TYPE()
210 ;(await r.ackWriter(n.key),
211 k.requiresConfirmation || l
212 ? await s.insert("@keet/join-requests", { deviceKey: n.key, id: c, request: m })
213 : await B(i, n.key, m, k, null, a))
214}
215async function q({ header: e, deviceKey: t, identity: i }, a) {
216 const { db: s, writer: r } = a,
217 [n, o] = await Promise.all([u(s, r.key), s.get("@keet/join-requests", { deviceKey: t })])
218 if (!l(n) || !o) throw f.ABORT()
219 const { id: d, request: c } = o,
220 m = await s.get("@keet/invitations", { id: d })
221 if (!m) throw f.ABORT()
222 ;(await B(e, t, c, m, i, a), await s.delete("@keet/join-requests", { deviceKey: t }))
223}
224async function I({ header: e, deviceKey: t }, i) {
225 const { db: a, writer: s } = i,
226 [r, n] = await Promise.all([u(a, s.key), a.get("@keet/join-requests", { deviceKey: t })])
227 if (!l(r) || !n) throw f.ABORT()
228 await a.delete("@keet/join-requests", { deviceKey: t })
229}
230async function P({ invitation: e }, { db: t, writer: i, hostcalls: a }) {
231 const [s, r, n] = await Promise.all([
232 u(t, i.key),
233 t.get("@keet/invitations", { id: e.id }),
234 t.get("@keet/system-digest"),
235 ])
236 if (!l(s)) throw f.ABORT()
237 if (s.status.isMuted) return
238 const o = e.metadata
239 if (r || n.settings.roomType === m.DirectMessage) throw f.ABORT()
240 return (
241 (o.buildType = n.settings.buildType),
242 o.canModerate && !s.status.isModerator && (o.canModerate = !1),
243 o.canAdmin && !s.status.isAdmin && (o.canAdmin = !1),
244 (e.isActive = !0),
245 (e.anchor = await a.createAnchor(i.key, i.seq + 1)),
246 t.insert("@keet/invitations", e)
247 )
248}
249async function x({ id: e }, { db: t, writer: i }) {
250 const [a, s] = await Promise.all([u(t, i.key), t.get("@keet/invitations", { id: e })])
251 if (!l(a) || !a.status.isModerator || !s) throw f.ABORT()
252 ;((s.isActive = !1), await t.insert("@keet/invitations", s))
253}
254async function E({ deviceKey: e, fromDeviceKey: i }, { db: a, writer: s, hostcalls: r }) {
255 const [n, o, d] = await Promise.all([u(a, s.key), u(a, e), u(a, i)])
256 if (!l(n)) throw f.ABORT()
257 if (!t.equals(n.key, o.key)) throw f.ABORT()
258 if (!t.equals(n.key, d.key)) throw f.ABORT()
259 const [c, m] = await Promise.all([
260 a.get("@keet/devices", { key: i }),
261 a.get("@keet/devices", { key: e }),
262 ])
263 if (!c || !m) throw f.ABORT()
264 if (!c.status.isActive) throw f.ABORT()
265 if (!m.status.isActive) throw f.ABORT()
266 if (!c.status.isIndexing) throw f.ABORT()
267 if (m.status.isIndexing) throw f.ABORT()
268 if (t.equals(c.key, m.key)) throw f.ABORT()
269 ;(await r.addWriter(m.key, { isIndexer: !0 }),
270 await r.addWriter(c.key, { isIndexer: !1 }),
271 (m.status.isIndexing = !0),
272 (c.status.isIndexing = !1),
273 await a.insert("@keet/devices", c),
274 await a.insert("@keet/devices", m))
275}
276async function D(e, { db: t, writer: i, hostcalls: a }) {
277 const [s, r] = await Promise.all([t.get("@keet/devices", { key: i.key }), u(t, i.key)])
278 if (!s.status.isActive || !l(r) || !r.status.canAdmin) throw f.ABORT()
279 ;(await a.addWriter(i.key, { indexer: !0 }),
280 (s.status.isIndexing = !0),
281 await t.insert("@keet/devices", s))
282}
283async function _(e, { db: t, writer: i, hostcalls: a }) {
284 const [s, r] = await Promise.all([t.get("@keet/devices", { key: i.key }), u(t, i.key)])
285 if (!s.status.isActive || !l(r) || !r.status.canAdmin) throw f.ABORT()
286 ;(await a.addWriter(i.key, { indexer: !1 }),
287 (s.status.isIndexing = !1),
288 await t.insert("@keet/devices", s))
289}
290async function N({ header: e, blindRequest: t }, i) {
291 const { db: a } = i,
292 s = await a.get("@keet/room-capabilities")
293 if (!s) throw f.ABORT()
294 let r = null
295 try {
296 const e = c(i.hostcalls.key, s.seed)
297 r = n(e, t)
298 } catch (e) {
299 throw f.ABORT()
300 }
301 if (!r) throw f.ABORT()
302 const { withInvitation: o, withMemberProof: d } = r
303 return o ? K(o, e, i) : d ? O(d, e, i) : void 0
304}
305async function S({ header: e, member: { profile: t, attestation: i } }, a) {
306 return M(e, t, i, a)
307}
308async function W({ profile: e }, { db: i, writer: a }) {
309 const [s, r] = await Promise.all([u(i, a.key), i.get("@keet/devices", { key: a.key })])
310 if (!(r.status.isActive && l(s) && r && t.equals(r.key, a.key))) throw f.ABORT()
311 ;((r.profile = e), await i.insert("@keet/devices", r))
312}
313async function j({ key: e }, { db: i, writer: a, hostcalls: s }) {
314 const [r, n, o] = await Promise.all([
315 u(i, a.key),
316 i.get("@keet/devices", { key: e }),
317 i.get("@keet/threads", { id: 0 }),
318 ])
319 if (!n || !l(r) || !t.equals(n.memberKey, r.key)) throw f.ABORT()
320 const d = { ...n, status: { ...n.status } }
321 ;((n.status.isActive = !1),
322 (n.status.isIndexing = !1),
323 s.removeable(n.key) && (await s.removeWriter(n.key)),
324 await i.insert("@keet/devices", n),
325 await y(i, o, n, d))
326}
327async function L({ memberKey: e, key: t, status: i }, { db: a, writer: s }) {
328 const [r, n] = await Promise.all([u(a, s.key), a.get("@keet/members", { key: e })])
329 if (!l(r)) throw f.INACTIVE_MEMBER()
330 if (!n) throw f.TARGET_MEMBER_NOT_FOUND()
331 if (!r.status.isModerator) throw f.MODERATORS_ONLY()
332 if (0 === t || t > A.length) throw f.INVALID_MEMBER_STATUS()
333 const o = A[t - 1]
334 ;((n.status[o] = i[o]), await a.insert("@keet/members", n))
335}
336async function V({ key: e, isModerator: t, isAdmin: i }, { db: a, writer: s, hostcalls: r }) {
337 const [n, o, d] = await Promise.all([
338 u(a, s.key),
339 a.get("@keet/members", { key: e }),
340 a
341 .find("@keet/active-devices-by-member-key", { gte: { memberKey: e }, lte: { memberKey: e } })
342 .toArray(),
343 ])
344 if (!l(n)) throw f.INACTIVE_MEMBER()
345 if (!o) throw f.TARGET_MEMBER_NOT_FOUND()
346 const c = n.status.isAdmin,
347 m = n.status.isModerator,
348 y = o.status.isAdmin
349 if (!c && (y || i)) throw f.ADMINS_ONLY()
350 if (!m) throw f.MODERATORS_ONLY()
351 let k = !1
352 if (y && !i)
353 for (const e of d) r.removeable(e.key) ? await r.addWriter(e.key, { indexer: !1 }) : (k = !0)
354 ;(k || (o.status.isAdmin = i),
355 (o.status.isModerator = t || i),
356 await a.insert("@keet/members", o))
357}
358async function C({ header: e, key: i }, { db: a, writer: s, hostcalls: r }) {
359 const [n, o, d, c, v] = await Promise.all([
360 u(a, s.key),
361 a.get("@keet/members", { key: i }),
362 a.get("@keet/system-digest"),
363 a
364 .find("@keet/active-devices-by-member-key", { gte: { memberKey: i }, lte: { memberKey: i } })
365 .toArray(),
366 a.get("@keet/threads", { id: 0 }),
367 ])
368 if (!l(n)) throw f.INACTIVE_MEMBER()
369 if (!o) throw f.TARGET_MEMBER_NOT_FOUND()
370 const b = { ...o, status: { ...o.status } },
371 p = t.equals(n.key, o.key),
372 A = n.status.isModerator,
373 h = o.status.isAdmin
374 if (!p && h) throw f.ABORT()
375 if (!p && !A) throw f.MODERATORS_ONLY()
376 ;((o.status.isActive = !1),
377 (o.status.isModerator = !1),
378 (o.status.isAdmin = !1),
379 (o.status.isPending = !!p),
380 p || ((o.status.isRemoved = !0), await a.insert("@keet/tmp-removed-members", { key: o.key })))
381 for (const e of c) {
382 const t = { ...e, status: { ...e.status } }
383 ;(r.removeable(e.key) &&
384 (await r.removeWriter(e.key, { indexer: !1 }), (e.status.isIndexing = !1)),
385 (e.status.isActive = !1),
386 await a.insert("@keet/devices", e),
387 await y(a, v, e, t))
388 }
389 if (
390 (await a.insert("@keet/members", o), await k(a, v, o, b), d.settings.roomType === m.Broadcast)
391 )
392 return
393 if (d.abi.version >= 11 && d.settings.isMembershipEventsDisabled) return
394 const g = p ? { memberLeft: { memberKey: o.key } } : { memberRemoved: { memberKey: o.key } }
395 await w(a, s, g, e.timestamp)
396}
397function U(e) {
398 ;(e.add("@keet/add-device", N),
399 e.add("@keet/update-device", W),
400 e.add("@keet/remove-device", j),
401 e.add("@keet/start-indexing", D),
402 e.add("@keet/stop-indexing", _),
403 e.add("@keet/accept-join-request", q),
404 e.add("@keet/reject-join-request", I),
405 e.add("@keet/update-member", S),
406 e.add("@keet/change-member-role", V),
407 e.add("@keet/change-member-status", L),
408 e.add("@keet/remove-member", C),
409 e.add("@keet/add-invitation", P),
410 e.add("@keet/remove-invitation", x),
411 e.add("@keet/move-indexer", E))
412}
413module.exports = { [b]: U, MemberStatus: h, addDevice: R, addMember: T }
keet-core-4.14.4-pretty/lib/core/contract/members/labels.js +48 -0
……@@ -0,0 +1,48 @@
1const e = require("../registration"),
2 { isMemberActive: t, getMemberForDeviceKey: l } = require("../query"),
3 a = require("b4a"),
4 { KeetContractError: s } = require("../errors")
5async function r({ header: e, key: r, label: c }, { db: o, writer: n }) {
6 const [b, k, d] = await Promise.all([
7 l(o, n.key),
8 o.get("@keet/members", { key: r }),
9 o.get("@keet/threads", { id: 0 }),
10 ])
11 if (!t(b) || !k || a.equals(b.key, k.key)) throw s.ABORT()
12 if (await o.get("@keet/member-labels", { key: k.key, sender: b.key, label: c })) throw s.ABORT()
13 const u = { key: k.key, sender: b.key, clock: d.stats.chat.clock, label: c }
14 ;(await o.insert("@keet/member-labels", u), await i(o, d, u, null, e.timestamp))
15}
16function c(e) {
17 e.add("@keet/add-member-label", r)
18}
19async function i(e, t, l, a, s) {
20 if ((l && a) || (!l && !a)) return
21 const r = l ? l.key : a.key,
22 c = (await e.get("@keet/member-label-digests", { key: r })) || {
23 key: r,
24 total: 0,
25 labels: [],
26 editedAt: 0,
27 flagsClock: 0,
28 }
29 ;(1 === (l || a).label &&
30 !a &&
31 ((t.stats.chat.flagsClock += 1), (c.flagsClock = t.stats.chat.flagsClock)),
32 (c.editedAt = s),
33 l
34 ? (o(c, l.label), (t.stats.chat.clock += 1), (c.total += 1))
35 : (n(c, a.label), (t.stats.chat.clock -= 1), (c.total -= 1)),
36 await Promise.all([e.insert("@keet/threads", t), e.insert("@keet/member-label-digests", c)]))
37}
38function o(e, t) {
39 const l = e.labels.findIndex((e) => e.label === t)
40 ;-1 === l ? e.labels.push({ label: t, count: 1 }) : (e.labels[l].count += 1)
41}
42function n(e, t) {
43 const l = e.labels.findIndex((e) => e.label === t)
44 if (-1 === l) return
45 const a = e.labels[l]
46 ;((a.count -= 1), a.count > 0 || e.labels.splice(l, 1))
47}
48module.exports = { [e]: c }
keet-core-4.14.4-pretty/lib/core/contract/members/legacy.js +67 -0
……@@ -0,0 +1,67 @@
1const e = require("compact-encoding"),
2 i = {
3 preencode(i, d) {
4 ;(e.fixed32.preencode(i, d.deviceKey),
5 e.fixed32.preencode(i, d.noisePublicKey),
6 d.attestation
7 ? e.buffer.preencode(i, d.attestation)
8 : (d.deviceName || d.identityDevicePublicKey) && e.buffer.preencode(i, null))
9 let c = 0
10 ;(d.deviceName && (c |= 1),
11 d.identityDevicePublicKey && (c |= 2),
12 e.uint.preencode(i, c),
13 d.deviceName && e.string.preencode(i, d.deviceName),
14 d.identityDevicePublicKey && e.fixed32.preencode(i, d.identityDevicePublicKey))
15 },
16 encode(i, d) {
17 ;(e.fixed32.encode(i, d.deviceKey),
18 e.fixed32.encode(i, d.noisePublicKey),
19 d.attestation
20 ? e.buffer.encode(i, d.attestation)
21 : (d.deviceName || d.identityDevicePublicKey) && e.buffer.encode(i, null))
22 let c = 0
23 ;(d.deviceName && (c |= 1),
24 d.identityDevicePublicKey && (c |= 2),
25 e.uint.encode(i, c),
26 d.deviceName && e.string.encode(i, d.deviceName),
27 d.identityDevicePublicKey && e.fixed32.encode(i, d.identityDevicePublicKey))
28 },
29 decode(i) {
30 const d = {
31 deviceKey: e.fixed32.decode(i),
32 noisePublicKey: e.fixed32.decode(i),
33 attestation: i.start < i.end ? e.buffer.decode(i) : null,
34 deviceName: null,
35 identityDevicePublicKey: null,
36 }
37 if (i.start < i.end) {
38 const c = e.uint.decode(i)
39 ;((d.deviceName = 1 & c ? e.string.decode(i) : null),
40 (d.identityDevicePublicKey = 2 & c ? e.fixed32.decode(i) : null))
41 }
42 return d
43 },
44 },
45 d = {
46 preencode(i, d) {
47 if ((e.fixed32.preencode(i, d.fastForwardTo), d.deviceProof)) {
48 const c = 1
49 ;(e.uint.preencode(i, c), e.buffer.preencode(i, d.deviceProof))
50 }
51 },
52 encode(i, d) {
53 if ((e.fixed32.encode(i, d.fastForwardTo), d.deviceProof)) {
54 const c = 1
55 ;(e.uint.encode(i, c), e.buffer.encode(i, d.deviceProof))
56 }
57 },
58 decode(i) {
59 const d = { fastForwardTo: null, deviceProof: null }
60 return (
61 (d.fastForwardTo = e.fixed32.decode(i)),
62 i.start < i.end && 1 & e.uint.decode(i) && (d.deviceProof = e.buffer.decode(i)),
63 d
64 )
65 },
66 }
67module.exports = { InvitationAdditionalData: d, InvitationUserData: i }
keet-core-4.14.4-pretty/lib/core/contract/query.js +8 -0
……@@ -0,0 +1,8 @@
1async function e(e, t) {
2 const r = await e.get("@keet/devices", { key: t })
3 return r ? e.get("@keet/members", { key: r.memberKey }) : null
4}
5function t(e) {
6 return e && e.status.isActive
7}
8module.exports = { getMemberForDeviceKey: e, isMemberActive: t }
keet-core-4.14.4-pretty/lib/core/contract/reactions.js +30 -0
……@@ -0,0 +1,30 @@
1const e = require("./registration"),
2 { isMemberActive: t, getMemberForDeviceKey: i } = require("./query"),
3 { reactionStats: r } = require("./stats"),
4 { KeetContractError: a } = require("./errors")
5async function o({ header: e, oplog: o, reaction: s }, { db: n, writer: c }) {
6 const [d, k, u] = await Promise.all([
7 i(n, c.key),
8 n.get("@keet/chat-by-message-id", { oplog: o }),
9 n.get("@keet/threads", { id: 0 }),
10 ])
11 if (!t(d) || !k || d.status.isMuted || !s) return
12 if (await n.get("@keet/reactions", { id: k.id, sender: d.key, reaction: s })) throw a.ABORT()
13 const l = { id: k.id, sender: d.key, clock: u.stats.chat.clock, reaction: s }
14 ;(await n.insert("@keet/reactions", l), await r(n, u, l, null, e.timestamp))
15}
16async function s({ header: e, oplog: o, reaction: s }, { db: n, writer: c }) {
17 const [d, k, u] = await Promise.all([
18 i(n, c.key),
19 n.get("@keet/chat-by-message-id", { oplog: o }),
20 n.get("@keet/threads", { id: 0 }),
21 ])
22 if (!t(d) || !k || d.status.isMuted) return
23 const l = await n.get("@keet/reactions", { id: k.id, sender: d.key, reaction: s })
24 if (!l) throw a.ABORT()
25 ;(await n.delete("@keet/reactions", l), await r(n, u, null, l, e.timestamp))
26}
27function n(e) {
28 ;(e.add("@keet/add-reaction", o), e.add("@keet/remove-reaction", s))
29}
30module.exports = { [e]: n }
keet-core-4.14.4-pretty/lib/core/contract/registration.js +1 -0
……@@ -0,0 +1 @@
1module.exports = Symbol("register-routes")
keet-core-4.14.4-pretty/lib/core/contract/stats/chat.js +32 -0
……@@ -0,0 +1,32 @@
1const t = require("b4a")
2module.exports = async function (e, s, n, a) {
3 const i = s,
4 m = n.message?.display?.mention || [],
5 o = a?.message?.display?.mention || [],
6 c = o.length ? new Set(o.map(({ memberKey: e }) => t.toString(e, "hex"))) : null,
7 r = c ? m.filter(({ memberKey: e }) => !c.has(t.toString(e, "hex"))) : m,
8 h = []
9 for (const { memberKey: t } of r) h.push(e.get("@keet/member-activity", { key: t }))
10 const l = await Promise.all(h)
11 if (n && !a) {
12 const t = Math.max(i.stats.chat.timestamp, n.timestamp)
13 ;((i.stats.chat.clock += 1), (i.stats.chat.timestamp = t), (i.count += 1))
14 }
15 const p = !!a && a.status.isPinned,
16 y = !!n && n.status.isPinned
17 ;(y && !p && (i.stats.chat.pinned += 1), !y && p && (i.stats.chat.pinned -= 1))
18 const u = []
19 if (r.length)
20 for (let t = 0; t < r.length; t++) {
21 const s = r[t],
22 n = l[t]
23 u.push(
24 e.insert("@keet/member-activity", {
25 ...n,
26 key: s.memberKey,
27 mentions: n ? n.mentions + 1 : 1,
28 }),
29 )
30 }
31 ;(u.push(e.insert("@keet/threads", i)), await Promise.all(u))
32}
keet-core-4.14.4-pretty/lib/core/contract/stats/devices.js +9 -0
……@@ -0,0 +1,9 @@
1module.exports = async function (t, s, e, a) {
2 const i = !!a && a.status.isActive,
3 c = !!e && e.status.isActive
4 ;(e && !a && (s.stats.devices.total += 1),
5 !e && a && (s.stats.devices.total -= 1),
6 !i && c && (s.stats.devices.active += 1),
7 i && !c && (s.stats.devices.active -= 1),
8 await t.insert("@keet/threads", s))
9}
keet-core-4.14.4-pretty/lib/core/contract/stats/files.js +3 -0
……@@ -0,0 +1,3 @@
1module.exports = async function (t, e, s, a) {
2 ;(s && !a && (e.stats.files.clock += 1), await t.insert("@keet/threads", e))
3}
keet-core-4.14.4-pretty/lib/core/contract/stats/index.js +14 -0
……@@ -0,0 +1,14 @@
1const e = require("./chat.js"),
2 t = require("./labels.js"),
3 r = require("./files.js"),
4 s = require("./reactions.js"),
5 a = require("./devices"),
6 i = require("./members")
7module.exports = {
8 chatStats: e,
9 chatLabelStats: t,
10 fileStats: r,
11 reactionStats: s,
12 deviceStats: a,
13 memberStats: i,
14}
keet-core-4.14.4-pretty/lib/core/contract/stats/labels.js +29 -0
……@@ -0,0 +1,29 @@
1function t(t, l) {
2 const a = t.labels.findIndex((t) => t.label === l)
3 ;-1 === a ? t.labels.push({ label: l, count: 1 }) : (t.labels[a].count += 1)
4}
5function l(t, l) {
6 const a = t.labels.findIndex((t) => t.label === l)
7 if (-1 === a) return
8 const e = t.labels[a]
9 ;((e.count -= 1), e.count > 0 || t.labels.splice(a, 1))
10}
11module.exports = async function (a, e, s, c, n) {
12 if ((s && c) || (!s && !c)) return
13 const o = s ? s.id : c.id,
14 i = (await a.get("@keet/chat-label-digests", { id: o })) || {
15 id: o,
16 total: 0,
17 labels: [],
18 editedAt: 0,
19 flagsClock: 0,
20 }
21 ;(1 === (s || c).label &&
22 !c &&
23 ((e.stats.chat.flagsClock += 1), (i.flagsClock = e.stats.chat.flagsClock)),
24 (i.editedAt = n),
25 s
26 ? (t(i, s.label), (e.stats.chat.clock += 1), (i.total += 1))
27 : (l(i, c.label), (e.stats.chat.clock -= 1), (i.total -= 1)),
28 await Promise.all([a.insert("@keet/threads", e), a.insert("@keet/chat-label-digests", i)]))
29}
keet-core-4.14.4-pretty/lib/core/contract/stats/local/index.js +3 -0
……@@ -0,0 +1,3 @@
1const o = require("./room.js"),
2 r = require("./room-migrations.js")
3module.exports = { roomsStats: o, roomMigrationsStats: r }
keet-core-4.14.4-pretty/lib/core/contract/stats/local/room-migrations.js +8 -0
……@@ -0,0 +1,8 @@
1module.exports = async function (t, o, a) {
2 if ((o && a) || (!o && !a)) return
3 let n = await t.get("@local/room-migration-stats")
4 ;(n || (n = { count: 0 }),
5 o && !a && (n.count += 1),
6 !o && a && (n.count -= 1),
7 await t.insert("@local/room-migration-stats", n))
8}
keet-core-4.14.4-pretty/lib/core/contract/stats/local/room.js +17 -0
……@@ -0,0 +1,17 @@
1function t(t) {
2 return t.status.isRemoved || t.identity || (t.dm && !t.config.title)
3 ? 0
4 : t.timestamps.latestChatMessage || t.timestamps.latestSync
5}
6module.exports = async function (s, o, e) {
7 if (!o && !e) return
8 let a = await s.get("@local/stats")
9 a || (a = { rooms: 0, activeRooms: 0 })
10 const i = !!e && 0 !== t(e),
11 m = !!o && 0 !== t(o)
12 ;(o && !e && (a.rooms += 1),
13 !o && e && (a.rooms -= 1),
14 !i && m && (a.activeRooms += 1),
15 i && !m && (a.activeRooms -= 1),
16 await s.insert("@local/stats", a))
17}
keet-core-4.14.4-pretty/lib/core/contract/stats/members.js +13 -0
……@@ -0,0 +1,13 @@
1module.exports = async function (s, t, e, a) {
2 const i = !!a && a.status.isActive,
3 m = !!e && e.status.isActive,
4 n = !!a && a.status.isPending,
5 r = !!e && e.status.isPending
6 ;(e && !a && (t.stats.members.total += 1),
7 !e && a && (t.stats.members.total -= 1),
8 !i && m && (t.stats.members.active += 1),
9 i && !m && (t.stats.members.active -= 1),
10 !n && r && (t.stats.members.pending += 1),
11 n && !r && (t.stats.members.pending -= 1),
12 await s.insert("@keet/threads", t))
13}
keet-core-4.14.4-pretty/lib/core/contract/stats/profile/contact-requests.js +6 -0
……@@ -0,0 +1,6 @@
1module.exports = async function (t, e, s) {
2 let a = await t.get("@keet-private-id/stats")
3 ;(a || (a = { rooms: 0, contactRequests: 0 }),
4 e && !s && (a.contactRequests += 1),
5 await t.insert("@keet-private-id/stats", a))
6}
keet-core-4.14.4-pretty/lib/core/contract/stats/profile/contacts.js +6 -0
……@@ -0,0 +1,6 @@
1module.exports = async function (t, e, a) {
2 let o = await t.get("@keet-private-id/counters")
3 ;(o || (o = { rooms: 0, contacts: 0 }),
4 (o.contacts += 1),
5 await t.insert("@keet-private-id/counters", o))
6}
keet-core-4.14.4-pretty/lib/core/contract/stats/profile/index.js +4 -0
……@@ -0,0 +1,4 @@
1const t = require("./rooms.js"),
2 e = require("./contacts.js"),
3 o = require("./contact-requests.js")
4module.exports = { profileRoomStats: t, profileContactStats: e, profileContactRequestStats: o }
keet-core-4.14.4-pretty/lib/core/contract/stats/profile/rooms.js +15 -0
……@@ -0,0 +1,15 @@
1module.exports = async function (t, e, s) {
2 let [o, r] = await Promise.all([
3 t.get("@keet-private-id/stats"),
4 t.get("@keet-private-id/counters"),
5 ])
6 ;(o || (o = { rooms: 0, contactRequests: 0 }),
7 r || (r = { rooms: 0, contacts: 0 }),
8 e && !s && (o.rooms += 1),
9 !e && s && (o.rooms -= 1),
10 (r.rooms += 1),
11 await Promise.all([
12 t.insert("@keet-private-id/counters", r),
13 t.insert("@keet-private-id/stats", o),
14 ]))
15}
keet-core-4.14.4-pretty/lib/core/contract/stats/reactions.js +27 -0
……@@ -0,0 +1,27 @@
1const t = 32
2function e(e, n, i) {
3 const o = e.reactions.findIndex((t) => t.text === i)
4 ;(-1 === o ? e.reactions.push({ text: i, count: 1, latest: [n] }) : (e.reactions[o].count += 1),
5 e.reactions.length > t && e.reactions.pop())
6}
7function n(t, e, n) {
8 const i = t.reactions.findIndex((t) => t.text === n)
9 if (-1 === i) return
10 const o = t.reactions[i]
11 ;((o.count -= 1), o.count > 0 || t.reactions.splice(i, 1))
12}
13module.exports = async function (t, i, o, c, s) {
14 if ((o && c) || (!o && !c)) return
15 const a = o ? o.id : c.id,
16 r = (await t.get("@keet/reaction-digests", { id: a })) || {
17 id: a,
18 total: 0,
19 reactions: [],
20 editedAt: 0,
21 }
22 ;((r.editedAt = s),
23 o
24 ? (e(r, o.sender, o.reaction), (i.stats.chat.clock += 1), (r.total += 1))
25 : (n(r, c.sender, c.reaction), (i.stats.chat.clock -= 1), (r.total -= 1)),
26 await Promise.all([t.insert("@keet/threads", i), t.insert("@keet/reaction-digests", r)]))
27}
keet-core-4.14.4-pretty/lib/core/contract/testing.js +27 -0
……@@ -0,0 +1,27 @@
1const e = require("./registration"),
2 { isMemberActive: t, getMemberForDeviceKey: r } = require("./query"),
3 { KeetContractError: c } = require("./errors"),
4 {
5 contract: {
6 hyperdispatch: { DispatchError: i },
7 },
8 } = require("../../../schema/spec")
9async function o({ value: e }, { db: i, writer: o }) {
10 const a = await r(i, o.key)
11 if (!t(a)) throw c.ABORT()
12 const s = await i.get("@keet/test-collection-1", { key: e }),
13 n = s ? s.value + 2 : 1
14 await i.insert("@keet/test-collection-1", { key: e, value: n })
15}
16async function a() {
17 throw new Error("test crash")
18}
19async function s() {
20 throw i.HANDLER_NOT_FOUND_BY_ID()
21}
22function n(e) {
23 ;(e.add("@keet/test-increment", o),
24 e.add("@keet/test-crash", a),
25 e.add("@keet/test-dispatch-error", s))
26}
27module.exports = { [e]: n }
keet-core-4.14.4-pretty/lib/core/crypto.js +67 -0
……@@ -0,0 +1,67 @@
1const r = require("sodium-native"),
2 o = 1,
3 t = 1
4function e(o, t) {
5 const e = r.sodium_malloc(r.crypto_secretbox_KEYBYTES),
6 s = r.sodium_malloc(Buffer.byteLength(t, "utf-8")),
7 c = r.sodium_malloc(Buffer.byteLength(o, "utf-8"))
8 if ((s.write(t, "utf-8"), c.write(o, "utf-8"), c.byteLength < 32))
9 throw (r.sodium_memzero(s), r.sodium_memzero(c), new Error("Phrase is too small"))
10 const a = r.crypto_pwhash_SALTBYTES,
11 y = r.crypto_secretbox_NONCEBYTES,
12 u = r.crypto_secretbox_MACBYTES,
13 p = Buffer.alloc(1 + a + y + c.length + u)
14 p[0] = 1
15 const h = p.subarray(1, 1 + a),
16 n = p.subarray(1 + a, 1 + a + y),
17 f = p.subarray(1 + a + y)
18 ;(r.randombytes_buf(h), r.randombytes_buf(n))
19 try {
20 ;(r.crypto_pwhash(
21 e,
22 s,
23 h,
24 r.crypto_pwhash_OPSLIMIT_INTERACTIVE,
25 r.crypto_pwhash_MEMLIMIT_INTERACTIVE,
26 r.crypto_pwhash_ALG_ARGON2ID13,
27 ),
28 r.crypto_secretbox_easy(f, c, n, e))
29 } finally {
30 ;(_(e), _(s), _(c))
31 }
32 return p
33}
34function s(o, t) {
35 const e = r.sodium_malloc(r.crypto_secretbox_KEYBYTES),
36 s = r.sodium_malloc(Buffer.byteLength(t), "utf-8")
37 s.write(t, "utf-8")
38 const c = r.crypto_pwhash_SALTBYTES,
39 a = r.crypto_secretbox_NONCEBYTES,
40 y = r.crypto_secretbox_MACBYTES
41 if (1 !== o[0]) throw new Error("Version mismatch")
42 const u = o.subarray(1, 1 + c),
43 p = o.subarray(1 + c, 1 + c + a),
44 h = o.subarray(1 + c + a),
45 n = Buffer.alloc(h.length - y)
46 try {
47 if (
48 (r.crypto_pwhash(
49 e,
50 s,
51 u,
52 r.crypto_pwhash_OPSLIMIT_INTERACTIVE,
53 r.crypto_pwhash_MEMLIMIT_INTERACTIVE,
54 r.crypto_pwhash_ALG_ARGON2ID13,
55 ),
56 !r.crypto_secretbox_open_easy(n, h, p, e))
57 )
58 throw new Error("Decryption failed – bad password or corrupted data")
59 } finally {
60 ;(_(e), _(s))
61 }
62 return n
63}
64function _(o) {
65 ;(r.sodium_memzero(o), r.sodium_free(o))
66}
67module.exports = { encryptPhrase: e, decryptPhrase: s, free: _ }
keet-core-4.14.4-pretty/lib/core/debug/debugging.js +9 -0
……@@ -0,0 +1,9 @@
1const e = [
2 { key: "disableSwarming", value: !1, description: "Disable swarming" },
3 { key: "disableMirrors", value: !1, description: "Disable all mirrors" },
4 { key: "disableFastForward", value: !1, description: "Disable fast forward" },
5 ],
6 r = { concurrency: 10, maxWindow: 80, randomPunchInterval: 2e4, connectionKeepAlive: 5e3 },
7 a = new Map()
8for (let r = 0; r < e.length; r++) a.set(e[r].key, r)
9module.exports = { DEBUG_FLAGS: e, DEBUG_FLAG_INDEX_BY_KEY: a, DHT_SETTINGS: r }
keet-core-4.14.4-pretty/lib/core/debug/index.js +6 -0
……@@ -0,0 +1,6 @@
1const e = require("hypercore-crypto"),
2 r = require("b4a"),
3 a = r.from("9ddc90e82a1ebb1e20826ad12d75bca6f8c3caa9d92aa9bcffe7619e42310c0e", "hex")
4module.exports.hashDebugPassword = function (r) {
5 return e.hash([r, a])
6}
keet-core-4.14.4-pretty/lib/core/files/index.js +369 -0
……@@ -0,0 +1,369 @@
1const e = require("path"),
2 t = require("fs"),
3 a = require("hypercore-blob-server"),
4 i = require("ready-resource"),
5 r = require("safety-catch"),
6 l = require("hypercore-id-encoding"),
7 { pipelinePromise: o, Readable: n } = require("streamx"),
8 s = require("b4a"),
9 c = 6048e5
10module.exports = class extends i {
11 constructor(e, t = {}) {
12 ;(super(),
13 (this.keet = e),
14 (this.local = e.local),
15 (this.store = e.store),
16 (this.server = new a(this.store.session(), {
17 resolve: this._resolveEncryptionKey.bind(this),
18 })),
19 (this._activeDownloads = new Map()),
20 (this._onerror = t.onerror || r),
21 this.ready().catch(this._onerror))
22 }
23 _open() {
24 return this.server.listen()
25 }
26 _close() {
27 return this.server.close()
28 }
29 async _resolveEncryptionKey(e, { blob: t, filename: a, drive: i, version: r }) {
30 const l = i ? "@local/drive-files" : "@local/blob-files",
31 o = {
32 pointer: {
33 externalDrive: { key: i, path: a && a.startsWith("/") ? a.slice(1) : a, version: r },
34 externalBlob: { key: e, blob: t },
35 },
36 },
37 n = await this.local.get(l, { file: o })
38 return (
39 n && (await this.keet.internalBlobsActiveInRoom(n.roomKey)),
40 n ? { key: e, encryptionKey: n.encryptionKey } : null
41 )
42 }
43 _getLinkOptions(e) {
44 if (!e.pointer.externalBlob && !e.pointer.externalDrive) throw new Error("Invalid file pointer")
45 return e.pointer.externalBlob
46 ? {
47 collection: "@local/blob-files",
48 key: e.pointer.externalBlob.key,
49 opts: { blob: e.pointer.externalBlob.blob, type: e.metadata?.mimetype },
50 }
51 : {
52 collection: "@local/drive-files",
53 key: e.pointer.externalDrive.key,
54 opts: {
55 filename: e.pointer.externalDrive.path,
56 version: e.pointer.externalDrive.version,
57 },
58 }
59 }
60 async _clearAllFiles(e, t, a, { leaving: i = !1 } = {}) {
61 const l = t ? "@local/blob-files" : "@local/drive-files",
62 o = t ? "@local/blob-files-by-room" : "@local/drive-files-by-room",
63 n = []
64 for await (const t of e.find(o, { gte: { roomKey: a }, lte: { roomKey: a } })) {
65 if (t.cleared) continue
66 const { key: a, opts: o } = this._getLinkOptions(t.file),
67 s = this.server.clear(a, o)
68 ;(s.catch(r), n.push(s), i ? await e.delete(l, t) : await e.insert(l, { ...t, cleared: !0 }))
69 }
70 return (await Promise.allSettled(n))
71 .filter((e) => "fulfilled" === e.status)
72 .reduce((e, t) => e + t.value, 0)
73 }
74 async _findAndClearOldFiles(e, t) {
75 const a = []
76 for await (const i of this.local.find(e, { lte: { lastAccessed: t } })) i.cleared || a.push(i)
77 const i = []
78 for (const e of a) {
79 const { key: t, opts: a } = this._getLinkOptions(e.file),
80 l = this.server.clear(t, a)
81 ;(l.catch(r), i.push(l))
82 }
83 return {
84 recordsToClear: a,
85 bytesCleared: (await Promise.allSettled(i))
86 .filter((e) => "fulfilled" === e.status)
87 .reduce((e, t) => e + t.value, 0),
88 }
89 }
90 async _createFile(e, t, a) {
91 const i = { metadata: a, pointer: { externalBlob: { key: e.externalBlobs.key, blob: t } } }
92 i.metadata?.userdata && (i.metadata.userdata = s.from(i.metadata.userdata, "base64"))
93 const r = await this.keet.internalEnterLocalTransaction()
94 try {
95 const t = {
96 file: i,
97 roomKey: e.key,
98 encryptionKey: e.encryptionKey,
99 cleared: !1,
100 own: !0,
101 lastAccessed: Date.now(),
102 }
103 ;(await r.insert("@local/blob-files", t), await this._updateFileStats(r, t), await r.flush())
104 } finally {
105 await this.keet.internalExitLocalTransaction()
106 }
107 return i
108 }
109 async saveFile(a, i, r) {
110 this.opened || (await this.ready())
111 const l = e.basename(i),
112 n = this.keet.internalOpenExistingRoom(a)
113 try {
114 await this.keet.internalBlobsActiveInRoom(a)
115 const e = t.createReadStream(i),
116 s = n.externalBlobs.createWriteStream(r)
117 return (await o(e, s), this._createFile(n, s.id, { name: l, ...r }))
118 } finally {
119 this.keet.internalReleaseRoom(n)
120 }
121 }
122 subscribeAddFile(a, i, l = {}) {
123 const o = e.basename(i),
124 s = this,
125 c = new n()
126 return (
127 t.stat(i, (e, n) => {
128 if (c.destroyed) return
129 if (e) return c.destroy(e)
130 let d = 0
131 const y = n.size,
132 h = t.createReadStream(i),
133 w = s.keet.internalOpenExistingRoom(a),
134 p = w.externalBlobs.createWriteStream(l)
135 this.keet.internalBlobsActiveInRoom(a).catch(r)
136 let f = setInterval(() => {
137 c.destroyed || (d < y && c.push({ bytesAdded: d, byteLength: y, result: null }))
138 }, l?.debounceTime ?? 500)
139 ;(h.pipe(p),
140 h.on("data", (e) => {
141 d += e.byteLength
142 }),
143 h.on("error", (e) => c.destroy(e)),
144 p.on("close", async () => {
145 if ((f && clearInterval(f), (f = null), !c.destroyed))
146 try {
147 const e = await s._createFile(w, p.id, { name: o, ...l })
148 ;(c.push({ bytesAdded: d, byteLength: y, result: e }), c.push(null))
149 } catch (e) {
150 c.destroy(e)
151 }
152 }),
153 c.on("error", (e) => {
154 h.destroy(e)
155 }),
156 c.on("close", () => {
157 ;(f && clearInterval(f),
158 (f = null),
159 h.destroy(),
160 p.destroy(),
161 s.keet.internalReleaseRoom(w))
162 }),
163 l.onFileStat && l.onFileStat())
164 }),
165 c
166 )
167 }
168 async saveFileBlob(e, t, a) {
169 this.opened || (await this.ready())
170 const i = this.keet.internalOpenExistingRoom(e)
171 try {
172 await this.keet.internalBlobsActiveInRoom(e)
173 const r = await i.externalBlobs.put(t)
174 return this._createFile(i, r, a)
175 } finally {
176 this.keet.internalReleaseRoom(i)
177 }
178 }
179 async clearAllFiles(e, t) {
180 let a = 0,
181 i = 0
182 const r = await this.keet.internalEnterLocalTransaction()
183 try {
184 ;((a = await this._clearAllFiles(r, !0, e, t)),
185 (i = await this._clearAllFiles(r, !1, e, t)),
186 await r.insert("@local/file-stats", { roomKey: e, total: 0 }),
187 await r.flush())
188 } finally {
189 await this.keet.internalExitLocalTransaction()
190 }
191 return { bytesCleared: a + i }
192 }
193 async clearOldFiles() {
194 const e = Date.now() - c,
195 t = new Set(),
196 a = await this._findAndClearOldFiles("@local/blob-files-by-last-accessed", e),
197 i = await this._findAndClearOldFiles("@local/drive-files-by-last-accessed", e),
198 r = await this.keet.internalEnterLocalTransaction()
199 try {
200 for (const e of a.recordsToClear)
201 (await r.insert("@local/blob-files", { ...e, cleared: !0 }),
202 await this._updateFileStats(r, { ...e, cleared: !0 }),
203 t.add(l.encode(e.roomKey)))
204 for (const e of i.recordsToClear)
205 (await r.insert("@local/drive-files", { ...e, cleared: !0 }),
206 await this._updateFileStats(r, { ...e, cleared: !0 }),
207 t.add(l.encode(e.roomKey)))
208 ;(await r.insert("@local/file-gc-info", { lastCleared: Date.now() }), await r.flush())
209 } finally {
210 await this.keet.internalExitLocalTransaction()
211 }
212 for (const e of t) this.keet.emit("local-files-changed", e)
213 return { bytesCleared: a.bytesCleared + i.bytesCleared }
214 }
215 async _ensureLocalFile(e, t, a) {
216 const i = await this.keet.internalEnterLocalTransaction()
217 try {
218 await this.keet.internalBlobsActiveInRoom(t)
219 const r = await i.get(e, { roomKey: t, file: a })
220 let o = r?.encryptionKey
221 if (!o) {
222 const e = await i.get("@local/rooms", { roomKey: t })
223 o = e?.encryptionKey
224 }
225 const n = {
226 ...r,
227 cleared: r?.cleared ?? !1,
228 roomKey: t,
229 encryptionKey: o,
230 file: a,
231 lastAccessed: Date.now(),
232 }
233 return (
234 await i.insert(e, n),
235 r || (await this._updateFileStats(i, n)),
236 await i.flush(),
237 r || this.keet.emit("local-files-changed", l.encode(t)),
238 n
239 )
240 } finally {
241 await this.keet.internalExitLocalTransaction()
242 }
243 }
244 async _loadBlob(e, t) {
245 const a = this.keet.internalOpenExistingRoom(e)
246 try {
247 return (await a.ready(), await a.blobs.get(t))
248 } finally {
249 this.keet.internalReleaseRoom(a)
250 }
251 }
252 async getFileLink(e, t) {
253 if ((this.opened || (await this.ready()), t.pointer.blob)) {
254 const a = await this._loadBlob(e, t.pointer.blob)
255 return this.server.getBlobLink(a, { type: t.metadata?.mimetype })
256 }
257 const { collection: a, key: i, opts: r } = this._getLinkOptions(t)
258 return (await this._ensureLocalFile(a, e, t), this.server.getLink(i, r))
259 }
260 async getFileEntry(e, t, a = {}) {
261 if (!t) return null
262 this.opened || (await this.ready())
263 const i = { roomKey: e, encryptionKey: null, cleared: !1, httpLink: null }
264 if (!t.pointer.externalBlob && !t.pointer.externalDrive && !t.pointer.blob) return i
265 if (t.pointer.blob) {
266 const r = a.loadBlob
267 ? await a.loadBlob(t.pointer.blob)
268 : await this._loadBlob(e, t.pointer.blob)
269 return ((i.httpLink = this.server.getBlobLink(r, { type: t.metadata?.mimetype })), i)
270 }
271 const { collection: r, key: l, opts: o } = this._getLinkOptions(t)
272 return { ...(await this._ensureLocalFile(r, e, t)), httpLink: this.server.getLink(l, o) }
273 }
274 async getFileEntryWithPreview(e, t, a = {}) {
275 this.opened || (await this.ready())
276 const i = await this.getFileEntry(e, t, a)
277 if (!t.preview) return i
278 const [r, l, o] = await Promise.all([
279 this.getFileEntry(e, t.preview.small, a),
280 this.getFileEntry(e, t.preview.medium, a),
281 this.getFileEntry(e, t.preview.large, a),
282 ])
283 return ((i.preview = { small: r, medium: l, large: o }), i)
284 }
285 async getFileCleared(e, t) {
286 const { collection: a } = this._getLinkOptions(t),
287 i = await this.local.get(a, { file: t })
288 return !!i && i.cleared
289 }
290 async getLocalFiles(e) {
291 return (
292 await Promise.all([
293 this.local
294 .find("@local/blob-files-by-room", { gte: { roomKey: e }, lte: { roomKey: e } })
295 .toArray(),
296 this.local
297 .find("@local/drive-files-by-room", { gte: { roomKey: e }, lte: { roomKey: e } })
298 .toArray(),
299 ])
300 ).flat()
301 }
302 async clearFile(e, t) {
303 if (!t?.pointer?.externalBlob && !t?.pointer?.externalDrive) return
304 const { collection: a, key: i, opts: r } = this._getLinkOptions(t),
305 l = await this.keet.internalEnterLocalTransaction()
306 try {
307 const o = await l.get(a, { roomKey: e, file: t })
308 if (!o || o.cleared) return
309 await this.server.clear(i, r)
310 const n = { roomKey: e, file: t, lastAccessed: o.lastAccessed ?? Date.now(), cleared: !0 }
311 ;(await l.insert(a, n), await this._updateFileStats(l, n), await l.flush())
312 } finally {
313 await this.keet.internalExitLocalTransaction()
314 }
315 }
316 async unclearFile(e, t) {
317 const { collection: a } = this._getLinkOptions(t),
318 i = await this.keet.internalEnterLocalTransaction()
319 try {
320 const r = await i.get(a, { roomKey: e, file: t })
321 if (!r || !r.cleared) return
322 const l = { roomKey: e, file: t, lastAccessed: Date.now(), cleared: !1 }
323 ;(await i.insert(a, l), await this._updateFileStats(i, l), await i.flush())
324 } finally {
325 await this.keet.internalExitLocalTransaction()
326 }
327 }
328 async startDownload(e, t) {
329 this.opened || (await this.ready())
330 const { key: a, opts: i } = this._getLinkOptions(t),
331 r = this.server.getLink(a, { ...i, url: !1 }),
332 l = this.server.download(a, i)
333 return (
334 this._activeDownloads.set(r, l),
335 l.done().then(() => {
336 this._activeDownloads.get(r) === l && this._activeDownloads.delete(r)
337 }),
338 r
339 )
340 }
341 async cancelDownload(e, t) {
342 this.opened || (await this.ready())
343 const a = this._activeDownloads.get(t)
344 t &&
345 a &&
346 (await a.close().finally(() => {
347 this._activeDownloads.get(t) === a && this._activeDownloads.delete(t)
348 }))
349 }
350 async refreshLinks(e) {
351 this.opened || (await this.ready())
352 const t = []
353 for (const a of e) t.push(this.server.refreshLink(a))
354 return t
355 }
356 async monitor(e, t) {
357 this.opened || (await this.ready())
358 const { key: a, opts: i } = this._getLinkOptions(t)
359 return this.server.monitor(a, i)
360 }
361 async _updateFileStats(e, { roomKey: t, file: a, cleared: i }) {
362 const r = a.pointer.externalBlob?.blob.byteLength
363 if (!r) return
364 let l = await e.get("@local/file-stats", { roomKey: t })
365 l || (l = { roomKey: t, total: 0 })
366 const o = i ? -r : r
367 ;((l.total = Math.max(l.total + o, 0)), await e.insert("@local/file-stats", l))
368 }
369}
keet-core-4.14.4-pretty/lib/core/hyperdb/contract/keet-private-id.js +21 -0
……@@ -0,0 +1,21 @@
1;((module.exports.roomsTrigger = async function (t, e, c) {}),
2 (module.exports.contactsTrigger = async function (t, e, c) {}),
3 (module.exports.contactRequestsTrigger = async function (t, e, c) {}),
4 (module.exports.pendingContactRequestsMap = function (t) {
5 return t.status.isPending ? [{ clock: t.clock }] : []
6 }),
7 (module.exports.pendingContactRequestsByMemberMap = function (t) {
8 return t.status.isPending ? [{ memberKey: t.memberKey }] : []
9 }),
10 (module.exports.acceptedContactRequestsMap = function (t) {
11 return t.status.isAccepted ? [{ clock: t.clock }] : []
12 }),
13 (module.exports.rejectedContactRequestsMap = function (t) {
14 return t.status.isRejected ? [{ clock: t.clock }] : []
15 }),
16 (module.exports.discardedContactRequestsMap = function (t) {
17 return t.status.isDiscarded ? [{ clock: t.clock }] : []
18 }),
19 (module.exports.roomsByContactMap = function (t) {
20 return t.contact && t.status.isActive ? [{ contact: t.contact }] : []
21 }))
keet-core-4.14.4-pretty/lib/core/hyperdb/contract/keet.js +79 -0
……@@ -0,0 +1,79 @@
1;((module.exports.devicesTrigger = async function (e, t, s) {}),
2 (module.exports.membersTrigger = async function (e, t, s) {}),
3 (module.exports.moderatorsMap = function (e) {
4 return e.status.isModerator && e.status.isActive ? [{ key: e.key }] : []
5 }),
6 (module.exports.adminsMap = function (e) {
7 return e.status.isAdmin && e.status.isActive ? [{ key: e.key }] : []
8 }),
9 (module.exports.activeMembersMap = function (e) {
10 return e.status.isActive ? [{ key: e.key }] : []
11 }),
12 (module.exports.activeDevicesMap = function (e) {
13 return e.status.isActive ? [{ key: e.key }] : []
14 }),
15 (module.exports.activeDevicesByMemberKeyMap = function (e) {
16 return e.status.isActive ? [{ memberKey: e.memberKey }] : []
17 }),
18 (module.exports.mutedMembersMap = function (e) {
19 return e.status.isMuted && e.status.isActive ? [{ key: e.key }] : []
20 }),
21 (module.exports.membersByMemberNameMap = function (e) {
22 return e.profile.displayName && e.status.isActive
23 ? [{ name: e.profile.displayName.toLowerCase() }]
24 : []
25 }),
26 (module.exports.threadsByParentMap = function (e) {
27 return e.parent ? [{ thread: e.parent.key, index: e.parent.seq }] : []
28 }),
29 (module.exports.chatTrigger = async function (e, t, s) {}),
30 (module.exports.chatByMessageIdMap = function (e) {
31 return [{ key: e.id.key, seq: e.id.seq }]
32 }),
33 (module.exports.chatMentionsByMemberIdMap = function (e) {
34 const t = e.message?.display?.mention
35 if (!t) return []
36 const s = []
37 for (const i of t) s.push({ key: i.memberKey, clock: e.clock })
38 return s
39 }),
40 (module.exports.pinnedChatMessagesMap = function (e) {
41 return !e.status.isPinned || e.status.isDeleted
42 ? []
43 : [{ thread: e.id.thread, index: e.id.index }]
44 }),
45 (module.exports.filesTrigger = async function (e, t, s) {}),
46 (module.exports.filesByTypeMap = function (e) {
47 const { file: t } = e
48 return t.metadata && t.metadata.mimetype && !t.metadata.isPreview
49 ? [{ type: t.metadata.mimetype.split("/")[0], id: e.id }]
50 : []
51 }),
52 (module.exports.filesByMajorTypeMap = function (e) {
53 const { file: t, status: s } = e
54 if (t.metadata?.isPreview) return []
55 if (s.isDeleted) return []
56 const i = t.metadata?.mimetype && t.metadata.mimetype.split("/")[0]
57 return "image" === i || "video" === i || "audio" === i
58 ? [{ type: i, id: e.id }]
59 : [{ type: "other", id: e.id }]
60 }),
61 (module.exports.deletedFilesMap = function (e) {
62 return e.status.isDeleted ? [{ id: e.id }] : []
63 }),
64 (module.exports.activeFilesMap = function (e) {
65 return e.status.isDeleted ? [] : [{ id: e.id }]
66 }),
67 (module.exports.reactionsTrigger = async function (e, t, s) {}),
68 (module.exports.chatLabelTrigger = async function (e, t, s) {}),
69 (module.exports.chatLabelDigestFlagMap = function (e) {
70 const t = e.labels.find(({ label: e }) => 1 === e)
71 return !t || e.isDeleted ? [] : [{ label: t.label, clock: e.flagsClock }]
72 }),
73 (module.exports.memberLabelDigestFlagMap = function (e) {
74 const t = e.labels.find(({ label: e }) => 1 === e)
75 return t ? [{ label: t.label, clock: e.flagsClock }] : []
76 }),
77 (module.exports.activeCallsMap = function (e) {
78 return e.endedAt ? [] : [{ createdAt: e.createdAt }]
79 }))
keet-core-4.14.4-pretty/lib/core/hyperdb/local/local.js +47 -0
……@@ -0,0 +1,47 @@
1const e = require("hypercore-crypto")
2function t(e) {
3 return e.status.isRemoved || e.identity || (e.dm && !e.config.title)
4 ? 0
5 : e.timestamps.latestChatMessage || e.timestamps.latestSync
6}
7function o(t) {
8 return e.discoveryKey(t)
9}
10;((module.exports.roomMigrationsTrigger = async function (e, t, o) {}),
11 (module.exports.roomsTrigger = async function (e, t, o) {}),
12 (module.exports.writersByRoomKeyMap = function (e) {
13 return e.roomKey ? [{ roomKey: e.roomKey }] : []
14 }),
15 (module.exports.writersByWakeupTopicMap = function (e) {
16 return [{ wakeupTopic: o(e.mailbox) }]
17 }),
18 (module.exports.roomsByTimestampMap = function (e) {
19 const o = t(e)
20 return 0 === o ? [] : [{ timestamp: o }]
21 }),
22 (module.exports.roomsByTypeAndTimestampMap = function (e) {
23 const o = t(e)
24 return 0 === o ? [] : [{ type: e.digest.settings.roomType, timestamp: o }]
25 }),
26 (module.exports.roomsByMailboxMap = function (e) {
27 return e.mailbox ? [{ mailbox: e.mailbox }] : []
28 }),
29 (module.exports.roomsByWakeupMap = function (t) {
30 return [{ discoveryKey: e.discoveryKey(t.mailbox) }]
31 }),
32 (module.exports.membersByDeviceKeyMap = function (e) {
33 return e.devices.map((e) => ({ key: e }))
34 }),
35 (module.exports.blockedContactsMap = function (e) {
36 return e.status.isBlocked ? [{ memberKey: e.memberKey }] : []
37 }),
38 (module.exports.dirtyByTimestampMap = function (e) {
39 return e.dirty ? [{ timestamp: e.timestamp }] : []
40 }),
41 (module.exports.roomsByContactMap = function (e) {
42 return t(e) ? (!e.dm || e.dm.length > 1 ? [] : [{ contact: e.dm[0] }]) : []
43 }),
44 (module.exports.roomsByFavoriteAndTimestampMap = function (e) {
45 const o = t(e)
46 return 0 === o ? [] : e.preferences?.isFavorite ? [{ timestamp: o }] : []
47 }))
keet-core-4.14.4-pretty/lib/core/invitations/index.js +202 -0
……@@ -0,0 +1,202 @@
1const e = require("autobase"),
2 t = require("hypercore"),
3 r = require("deterministic-sealed-box"),
4 n = require("keet-identity-key"),
5 i = require("hypercore-crypto"),
6 {
7 contract: {
8 hyperschema: { encode: o, decode: c },
9 hyperdispatch: { encode: a },
10 },
11 } = require("../../../schema/spec"),
12 { KeetContractError: u } = require("./../contract/errors"),
13 s = require("@holepunchto/keet-registry"),
14 [d, y, p, v, f, l, m] = i.namespace("@holepunchto/keet-core/invitations", 7)
15function h(e, t, r) {
16 let i = null
17 try {
18 i = n.verify(e.proof, t, { expectedIdentity: e.memberKey })
19 } catch {
20 throw u.ABORT()
21 }
22 if (!i) throw u.ABORT()
23 return i.receipt
24}
25function K(e, t = {}) {
26 const { canModerate: r = !1, canAdmin: n = !1, expiration: c = 0 } = t,
27 a = i.randomBytes(32),
28 u = J(a),
29 s = u.publicKey,
30 d = o("@keet/room-keys", e)
31 return {
32 invitation: {
33 id: s,
34 metadata: { canModerate: r, canAdmin: n, expiration: c },
35 anchor: null,
36 response: { id: s, data: d, signature: i.sign(i.hash([p, d]), u.secretKey) },
37 },
38 seed: a,
39 }
40}
41function b(e, t, r) {
42 const c = o("@keet-private-id/contact-request-body", r),
43 a = n.attestData(c, t.deviceKeyPair, t.deviceProof),
44 u = { memberKey: t.publicKey, proof: a },
45 s = o("@keet-private-id/contact-request", { body: r, attestation: u })
46 return i.encrypt(s, e)
47}
48function q(t, r, n) {
49 const i = b(t, r, n),
50 o = a("@keet-private-id/add-contact-request", {
51 header: { timestamp: Date.now() },
52 blindRequest: i,
53 })
54 return e.encodeValue(o, { optimistic: !0, encrypted: !0 })
55}
56function k(t, { heads: r } = {}) {
57 const n = a("@keet/add-device", { header: { timestamp: Date.now() }, blindRequest: t })
58 return e.encodeValue(n, { optimistic: !0, encrypted: !0, heads: r })
59}
60function P(e, t, r, n, i, o) {
61 const { blindRequest: c } = w(e, t, r, n, i, o)
62 return k(c, o)
63}
64function g(e, t, r) {
65 const { blindRequest: n } = R(e, t)
66 return k(n, r)
67}
68function R(e, { device: t, member: r }) {
69 const n = o("@keet/device-request", { withMemberProof: { device: t, member: r } })
70 return { blindRequest: i.encrypt(n, e) }
71}
72function w(e, t, r, n, { device: c, member: a }, u) {
73 const s = J(n),
74 d = s.publicKey,
75 p = { deviceKey: e, identity: u?.identity, keyPair: r, device: c, member: a },
76 v = o("@keet/device-request-with-invitation", p),
77 f = i.sign(i.hash([y, v]), s.secretKey),
78 l = o("@keet/device-request", { withInvitation: { id: d, request: p, signature: f } })
79 return { blindRequest: i.encrypt(l, t) }
80}
81function I(e, t, n) {
82 const c = o("@keet/device-response", { signedKeys: n.response }),
83 a = i.hash([f, t])
84 return { blindResponse: r.encrypt(c, e, a) }
85}
86function x(e, { publicKey: t, deviceKeyPair: r, deviceProof: i }) {
87 const o = s.encodeReservation({ username: e })
88 return { username: e, attestation: { memberKey: t, proof: n.attestData(o, r, i) } }
89}
90function D({ id: e, request: t, signature: r }) {
91 const n = o("@keet/device-request-with-invitation", t)
92 return i.verify(i.hash([y, n]), r, e) ? { id: e, request: t } : null
93}
94function T(e, t) {
95 const n = r.decrypt(t, e)
96 return n ? c("@keet/device-request", n) : null
97}
98function M(e, t) {
99 const r = i.decrypt(t, e)
100 return r ? c("@keet-private-id/contact-request", r) : null
101}
102function C(e, t) {
103 const r = i.decrypt(t, e)
104 if (!r) return null
105 const n = c("@keet/device-response", r),
106 {
107 signedKeys: { id: o, data: a, signature: u },
108 identity: s,
109 } = n
110 return i.verify(i.hash([p, a]), u, o)
111 ? { id: o, response: { roomKeys: c("@keet/room-keys", a), identity: s } }
112 : null
113}
114function A(e, t) {
115 const r = t?.deviceProof,
116 i = t?.privateProfileIdentity,
117 o = e.writerKey,
118 c = e.publicKey,
119 a = e.devicePublicKey
120 if (!r || !i) return null
121 if (!i.memberKey || !i.proof) return null
122 const u = n.verify(r, null, { expectedIdentity: c, expectedDevice: a }),
123 s = n.verify(i.proof, o, { expectedIdentity: c })
124 return u && s
125}
126function O() {
127 return i.encryptionKeyPair()
128}
129function B() {
130 return i.keyPair()
131}
132function J(e) {
133 return i.keyPair(i.hash([d, e]))
134}
135function W(e) {
136 return J(e).publicKey
137}
138function N(e) {
139 return t.key({ version: 2, signers: [{ publicKey: e }] })
140}
141function V(e) {
142 return { key: e, discoveryKey: i.discoveryKey(e) }
143}
144function E(e, t) {
145 return i.encryptionKeyPair(i.hash([v, e, t]))
146}
147function S(e) {
148 return i.keyPair(e)
149}
150function U(e) {
151 return i.discoveryKey(e)
152}
153function j(e) {
154 return i.discoveryKey(e)
155}
156function z(e, t) {
157 const r = E(e, t),
158 n = S(r.publicKey),
159 i = U(r.publicKey)
160 return { mailboxKeyPair: r, discoveryKeyPair: n, swarmTopic: j(n.publicKey), wakeupTopic: i }
161}
162function F(e) {
163 const t = S(e),
164 r = U(e)
165 return { discoveryKeyPair: t, swarmTopic: j(t.publicKey), wakeupTopic: r }
166}
167function G(e) {
168 return i.hash([l, e])
169}
170function H(e) {
171 return i.hash([m, e])
172}
173module.exports = {
174 generateIdentityPairingName: G,
175 generateRoomPairingName: H,
176 generateSwarmTopic: j,
177 generateWakeupTopic: U,
178 generateMailboxKeyPair: E,
179 generateDiscoveryKeyPair: S,
180 generateRoomCapabilities: z,
181 generatePairingCapabilities: F,
182 getWakeup: V,
183 getWriterKey: N,
184 getInvitationId: W,
185 createInvitation: K,
186 createDeviceResponse: I,
187 decryptDeviceRequest: T,
188 decryptContactRequest: M,
189 verifyAttestation: h,
190 verifyDeviceResponse: C,
191 verifyIdentityProofs: A,
192 verifyInvitationDeviceRequest: D,
193 createMailboxKeyPair: O,
194 createDiscoveryKeyPair: B,
195 createInvitationJoinRequest: w,
196 createInvitationJoinOperation: P,
197 createMemberProofJoinRequest: R,
198 createMemberProofJoinOperation: g,
199 createBlindContactRequest: b,
200 createContactRequestOperation: q,
201 createUsernameReservationRequest: x,
202}
keet-core-4.14.4-pretty/lib/core/local/index.js +12 -0
……@@ -0,0 +1,12 @@
1const e = require("hyperdb"),
2 {
3 local: { hyperdb: r },
4 } = require("../../../schema/spec")
5module.exports = class {
6 static bee(s, c = {}) {
7 return e.bee(s, r, c.hyperdb)
8 }
9 static rocks(s, c = {}) {
10 return e.rocks(s, r, c.hyperdb)
11 }
12}
keet-core-4.14.4-pretty/lib/core/log.js +51 -0
……@@ -0,0 +1,51 @@
1const e = require("bare-file-logger"),
2 i = require("bare-system-logger"),
3 t = { debug: 0, info: 1, warn: 2, error: 3 }
4class s {
5 constructor({
6 dev: s = !1,
7 verbose: r = !1,
8 logFile: o,
9 logLevel: l = "info",
10 logFileMaxSize: h,
11 } = {}) {
12 ;((this._muted = !1),
13 (this._dev = s),
14 (this.verbose = r),
15 (this.level = t[l] ?? t.info),
16 (this._system = new i()),
17 (this._file = o ? new e(o, { maxSize: h || 1e8 }) : null))
18 }
19 mute() {
20 this._muted = !0
21 }
22 unmute() {
23 this._muted = !1
24 }
25 debug(...e) {
26 this._write("debug", ...e)
27 }
28 verboseDebug(...e) {
29 this.verbose && this._write("debug", ...e)
30 }
31 verboseInfo(...e) {
32 this.verbose && this._write("info", ...e)
33 }
34 info(...e) {
35 this._write("info", ...e)
36 }
37 warn(...e) {
38 this._write("warn", ...e)
39 }
40 error(...e) {
41 this._write("error", ...e)
42 }
43 _write(e, ...i) {
44 this._muted ||
45 t[e] < this.level ||
46 (this._dev && this.level === t.debug && (console[e] || console.log)(...i),
47 this._system[e](...i),
48 this._file && this._file[e](...i))
49 }
50}
51module.exports = s
keet-core-4.14.4-pretty/lib/core/migrations/3/apply.js +485 -0
……@@ -0,0 +1,485 @@
1const e = require("hypercore-id-encoding"),
2 t = require("hypercore-crypto"),
3 i = require("compact-encoding"),
4 a = require("@holepunchto/keet-indexing"),
5 {
6 InternalSchema: n,
7 KeetSchema: s,
8 ConfigSchema: r,
9 } = require("@holepunchto/legacy-keet-core-schemas"),
10 { CONFIG: o } = require("@holepunchto/keet-core-api"),
11 { InternalOperation: c, UpgradeOperation: l } = n.Operations,
12 {
13 contract: {
14 hyperschema: { getEnum: u },
15 },
16 } = require("../../../../schema/spec"),
17 m = u("@keet/room-type"),
18 d = 7,
19 p = 9,
20 [f] = t.namespace("@holepunchto/keet-core/v3-migrations", 1),
21 v = 19
22function y(e) {
23 if (!e) throw new Error("Encryption key is required")
24 return t.hash([f, e])
25}
26async function h(e, t, i) {
27 const a = e.get({ key: t, active: !1 }),
28 n = await a.getUserData(i)
29 return (await a.close(), n)
30}
31async function g(e, t) {
32 return (await h(e, t, "autobase/local")) || t
33}
34async function b(e, t, n) {
35 const r = []
36 for (const t of e) {
37 if (i.decode(i.uint, t.value) > 1) break
38 ;((t.value = i.decode(s.Messages.KeetOplogMessage, t.value)), r.push(t))
39 }
40 let o = await O(t.bee)
41 for (const e of r) {
42 o = Math.max(o, e.value.abi)
43 for (const t of e.value.ops)
44 t.type === c.TYPE && t.value.subtype === l.SUBTYPE && (o = Math.max(o, t.value.value.version))
45 }
46 return o > 7
47 ? n.interrupt({ unsupportedABI: o, digest: null })
48 : (r.length && (await a.autobaseApply(r, t)), r.length)
49}
50async function k(e, t, i, a, n, s) {
51 const {
52 isPrivateProfile: r,
53 digest: o,
54 config: c,
55 capabilities: l,
56 identity: u,
57 primaryThread: m,
58 devices: d,
59 members: p,
60 avatars: f,
61 files: y,
62 messages: h,
63 reactions: g,
64 dmRooms: b,
65 } = await w(t, i),
66 k = Math.min(o.abi.version, v)
67 ;(a.setDefinition((await s.loadBundle(k)).spec.contract.hyperdb),
68 await a.insert("@keet/system-digest", o),
69 await a.insert("@keet/room-config", c),
70 await a.insert("@keet/threads", m),
71 await a.insert("@keet/room-capabilities", l),
72 r && (await a.insert("@keet-private-id/identity", u)))
73 for (const e of d.values()) e.memberKey && (await a.insert("@keet/devices", e))
74 for (const [e, t] of f) {
75 if (!p.has(e)) continue
76 const i = await n.put(t),
77 { member: a } = p.get(e)
78 a.profile.avatar = { small: { pointer: { blob: i } } }
79 }
80 for (const { member: e } of p.values()) await a.insert("@keet/members", e)
81 for (const e of y) await a.insert("@keet/files", e)
82 for (const e of h) await a.insert("@keet/chat", e)
83 for (const e of g) await a.insert("@keet/reactions", e)
84 if (r) {
85 await a.insert("@keet-private-id/identity", u)
86 for (let e = 0; e < b.length; e++) {
87 const { memberKey: t, roomKey: i } = b[e],
88 n = { memberKey: t, clock: e + 1, status: { isBlocked: !1 }, mailbox: null, roomKey: i }
89 await a.insert("@keet-private-id/contacts", n)
90 }
91 }
92}
93async function w(t, i) {
94 const a = i.core.download(),
95 [
96 {
97 isPrivateProfile: n,
98 digest: s,
99 config: r,
100 identity: o,
101 primaryThread: c,
102 pinnedMessages: l,
103 },
104 { files: u, messages: m, messagesByOplogId: d },
105 p,
106 f,
107 v,
108 h,
109 ] = await Promise.all([D(i), S(i), M(i), K(i), T(i), x(i)])
110 a.destroy()
111 const g = { seed: y(t.encryptionKey) },
112 b = await E(i, f)
113 if (l) for (const e of l) d.get(e).status.isPinned = !0
114 for (const { member: t, activeDevices: i, inactiveDevices: a } of f.values()) {
115 if (i)
116 for (const a of i) {
117 const i = e.encode(a),
118 n = p.get(i)
119 n ? (n.memberKey = t.key) : p.delete(i)
120 }
121 if (a)
122 for (const i of a) {
123 const a = {
124 key: i,
125 memberKey: t.key,
126 profile: { swarmKey: null, name: null, isMobile: !1 },
127 status: { isIndexing: !1, isActive: !1 },
128 }
129 p.set(e.encode(i), a)
130 }
131 }
132 return (
133 (s.creationTime = m.length > 0 ? m[0].timestamp : 0),
134 {
135 isPrivateProfile: n,
136 digest: s,
137 config: r,
138 capabilities: g,
139 identity: o,
140 primaryThread: c,
141 devices: p,
142 members: f,
143 avatars: b,
144 files: u,
145 messages: m,
146 reactions: v,
147 dmRooms: h,
148 }
149 )
150}
151async function D(t) {
152 const i = {
153 abi: { version: 9 },
154 settings: {
155 roomType: m.Default,
156 isExperimental: !1,
157 isJoiningDisabled: !1,
158 isAppendingDisabled: !1,
159 isCallingDisabled: !1,
160 isMembershipEventsDisabled: !1,
161 },
162 },
163 a = { title: null, avatar: null, description: null },
164 s = { publicKey: null, discoveryCoreKey: null, userRegistry: null },
165 c = { id: 0, count: 0, parent: null, stats: C() }
166 let l = null
167 const u = await t.bee.get(n.ExperimentalModeKey, n.UpgraderEncoding)
168 i.settings.isExperimental = !!u
169 for await (const n of t.bee.createReadStream(r.Encoding)) {
170 const t = r.getValue(n)
171 switch (n.key) {
172 case o.ROOM_TITLE:
173 a.title = t
174 break
175 case o.ROOM_DESCRIPTION:
176 a.description = t
177 break
178 case o.ROOM_CAN_CALL:
179 i.settings.isCallingDisabled = "false" === t
180 break
181 case o.ID_PUBLIC_KEY:
182 s.publicKey = e.decode(t)
183 break
184 case o.PINNED_MESSAGES:
185 l = t.map((t) => e.encode(t.key) + ":" + t.seq)
186 break
187 case o.ROOM_TYPE:
188 i.settings.roomType = N(Number.parseInt(t))
189 break
190 case o.DISABLE_MEMBERSHIP_EVENTS:
191 i.settings.isMembershipEventsDisabled = !0
192 break
193 default:
194 continue
195 }
196 }
197 return {
198 isPrivateProfile: !!s.publicKey,
199 digest: i,
200 config: a,
201 identity: s,
202 primaryThread: c,
203 pinnedMessages: l,
204 }
205}
206async function M(t) {
207 const i = new Map()
208 for await (const { value: a } of t.devices.devices.createReadStream()) {
209 const t = {
210 key: a.key,
211 memberKey: null,
212 profile: { swarmKey: a.noisePublicKey, name: a.name, isMobile: a.isMobile },
213 status: q(a),
214 }
215 i.set(e.encode(t.key), t)
216 }
217 return i
218}
219async function K(t) {
220 const i = new Map()
221 for await (const { value: a } of t.members.members.createReadStream()) {
222 const { member: t, activeDevices: n, inactiveDevices: s } = A(a)
223 i.set(e.encode(t.key), {
224 member: t,
225 activeDevices: n,
226 inactiveDevices: s,
227 hasAvatar: a.hasAvatar,
228 })
229 }
230 for await (const { value: a } of t.members.inactiveMembers.createReadStream()) {
231 const { member: t, activeDevices: n, inactiveDevices: s } = A(a)
232 i.set(e.encode(t.key), {
233 member: t,
234 activeDevices: n,
235 inactiveDevices: s,
236 hasAvatar: a.hasAvatar,
237 })
238 }
239 for await (const { _id: a } of t.members.mutedMembers.createReadStream()) {
240 const t = e.encode(a),
241 n = i.get(t)
242 n && (n.member.status.isMuted = !0)
243 }
244 return i
245}
246async function E(e, t) {
247 const i = []
248 for (const [a, { member: n, hasAvatar: s }] of t) s && i.push(P(e, a, n.key))
249 const a = await Promise.all(i)
250 return new Map(a)
251}
252async function P(e, t, i) {
253 return [t, (await e.members.avatars.get(i)).value]
254}
255async function S(t) {
256 const i = new Map(),
257 a = [],
258 n = []
259 let s = 0,
260 r = 0
261 for await (const { value: o } of t.chat.chat.createReadStream()) {
262 const t = s++,
263 c = e.encode(o.id.key) + ":" + o.id.seq,
264 l = {
265 id: { thread: 0, index: t },
266 oplog: o.id,
267 clock: t,
268 timestamp: o.timestamp,
269 status: { isEdited: !!o.chat?.edited, isDeleted: !!o.deleted, isPinned: !1 },
270 message: null,
271 event: null,
272 }
273 if (o.chat)
274 l.message = {
275 text: o.chat.text,
276 files: null,
277 display: o.display ? B(o.display) : null,
278 replyTo: o.replyTo,
279 parent: null,
280 }
281 else if (o.file) {
282 const e = I(o.file),
283 t = r++
284 ;(n.push({ id: t, oplog: o.id, status: { isDeleted: !1 }, file: e }),
285 (l.message = { text: null, files: [t], display: null, replyTo: null, parent: null }))
286 } else o.event && (l.event = R(o.event))
287 ;(i.set(c, l), a.push(l))
288 }
289 return { files: n, messages: a, messagesByOplogId: i }
290}
291async function T(e) {
292 const t = []
293 let i = 0
294 for await (const {
295 _id: [a, n, s, r],
296 } of e.reactions.reactions.createReadStream())
297 t.push({ id: { thread: a, index: n }, sender: s, clock: i++, reaction: r })
298 return t
299}
300async function x(e) {
301 const t = []
302 for await (const {
303 key: i,
304 value: { roomKey: a },
305 } of e.indexes.dmByMember.createReadStream())
306 t.push({ memberKey: i, roomKey: a })
307 return t
308}
309function A(e) {
310 const t = e.devices,
311 i = e.inactive
312 return {
313 member: {
314 key: e.key,
315 profile: { timestamp: 0, mailbox: null, displayName: e.displayName, avatar: null },
316 status: _(e),
317 },
318 activeDevices: t,
319 inactiveDevices: i,
320 }
321}
322function I(e) {
323 return {
324 pointer: { externalDrive: { key: e.key, path: e.path, version: e.version, size: 0 } },
325 metadata: { name: e.path, mimetype: e.type, dimensions: e.dimensions },
326 preview: e.previewPointer
327 ? {
328 medium: {
329 metadata: { isPreview: !0 },
330 pointer: {
331 externalDrive: {
332 key: e.previewPointer.key,
333 path: e.previewPointer.path,
334 version: e.previewPointer.version,
335 size: 0,
336 },
337 },
338 },
339 }
340 : null,
341 }
342}
343function R(e) {
344 switch (e.type) {
345 case 1:
346 return { memberJoined: { memberKey: null } }
347 case 2:
348 return { callStarted: !0 }
349 case 3:
350 return { roomAvatarChanged: !0 }
351 case 4:
352 return { invitationCreated: !0 }
353 case 5:
354 return { memberLeft: { memberKey: null } }
355 case 6:
356 return { titleChanged: { from: e.value.from, to: e.value.to } }
357 case 7:
358 return { memberRemoved: { memberKey: null } }
359 case 8:
360 return { callHangup: !0 }
361 case 9:
362 return { callMissed: !0 }
363 default:
364 return null
365 }
366}
367function B(e) {
368 const t = {
369 mention: null,
370 httpLink: null,
371 pearLink: null,
372 bold: null,
373 italic: null,
374 strikeThrough: null,
375 code: null,
376 codeBlock: null,
377 emoji: null,
378 }
379 for (const { type: i, value: a } of e)
380 switch (i) {
381 case 1:
382 ;(t.mention || (t.mention = []),
383 t.mention.push({ range: { start: a.start, length: a.length }, memberKey: a.memberId }))
384 break
385 case 2:
386 ;(t.httpLink || (t.httpLink = []), t.httpLink.push(L(a)))
387 break
388 case 3:
389 ;(t.pearLink || (t.pearLink = []), t.pearLink.push(L(a)))
390 break
391 case 4:
392 ;(t.bold || (t.bold = []), t.bold.push({ start: a.start, length: a.length }))
393 break
394 case 5:
395 ;(t.italic || (t.italic = []), t.italic.push({ start: a.start, length: a.length }))
396 break
397 case 6:
398 ;(t.code || (t.code = []), t.code.push({ start: a.start, length: a.length }))
399 break
400 case 7:
401 ;(t.emoji || (t.emoji = []),
402 t.emoji.push({ range: { start: a.start, length: a.length }, content: a.content }))
403 break
404 case 8:
405 ;(t.codeBlock || (t.codeBlock = []), t.codeBlock.push({ start: a.start, length: a.length }))
406 break
407 case 9:
408 ;(t.strikeThrough || (t.strikeThrough = []),
409 t.strikeThrough.push({ start: a.start, length: a.length }))
410 break
411 default:
412 continue
413 }
414 return t
415}
416function L(e) {
417 return {
418 range: { start: e.start, length: e.length },
419 url: e.content,
420 preview: e.preview
421 ? {
422 title: e.preview.title,
423 description: e.preview.description,
424 file: e.preview.file
425 ? {
426 pointer: {
427 externalDrive: {
428 key: e.preview.file.key,
429 path: e.preview.file.path,
430 version: e.preview.file.version,
431 size: 0,
432 },
433 },
434 metadata: { mimetype: e.preview.file.type, dimensions: e.preview.file.dimensions },
435 }
436 : null,
437 }
438 : null,
439 }
440}
441async function O(e) {
442 const t = await e.get(n.CodeVersionKey, n.UpgraderEncoding)
443 return t ? t.value : 0
444}
445function C() {
446 return {
447 devices: { total: 0, active: 0 },
448 members: { total: 0, active: 0, pending: 0 },
449 chat: { clock: 0, pinned: 0, threads: 0, timestamp: 0 },
450 files: { clock: 0 },
451 }
452}
453function _(e) {
454 return {
455 isAdmin: !!(2 & e.capabilities),
456 isModerator: !!(4 & e.capabilities),
457 isPending: !1,
458 isActive: !e.inactive || 0 === e.inactive.length,
459 isMuted: !1,
460 isBanned: !1,
461 isShadowBanned: !1,
462 }
463}
464function q(e) {
465 return { isIndexing: !!(2 & e.capabilities), isActive: !0 }
466}
467function N(e) {
468 switch (e) {
469 case 0:
470 return m.Default
471 case 1:
472 return m.Broadcast
473 case 2:
474 return m.DirectMessage
475 default:
476 return 0
477 }
478}
479module.exports = {
480 generateCompatSeed: y,
481 getLegacyUserData: h,
482 getLegacyLocalKey: g,
483 autobaseApply: b,
484 migrate: k,
485}
keet-core-4.14.4-pretty/lib/core/migrations/3/index.js +122 -0
……@@ -0,0 +1,122 @@
1const e = require("autobase"),
2 i = require("hyperbee"),
3 t = require("@holepunchto/hyperindex"),
4 o = require("compact-encoding"),
5 a = require("b4a"),
6 { mnemonicToEntropy: r } = require("bip39-mnemonic"),
7 {
8 IndexFilePointer: n,
9 FileRecord: c,
10 RoomRecord: l,
11 BookmarksRecord: s,
12 PendingInvitationRecord: d,
13 LocalIdentityRecord: y,
14 } = require("./messages.js"),
15 { getLegacyUserData: u, getLegacyLocalKey: m, generateCompatSeed: p } = require("./apply"),
16 { generateRoomCapabilities: g } = require("../../invitations/index.js"),
17 { roomMigrationsStats: v } = require("../../contract/stats/local")
18async function f(e, i, t) {
19 const o = await e.createKeyPair(t.identity.identityPublicKey),
20 n = await u(e, t.privateProfileKey, "keet-seed-phrase"),
21 c = n ? r(a.toString(n)) : null,
22 l = {
23 publicKey: t.identity.identityPublicKey,
24 privateProfileKey: t.privateProfileKey,
25 deviceKeyPair: o,
26 deviceProof: t.identity.deviceProof,
27 status: { isConfirmed: !0 },
28 entropy: c,
29 swap: null,
30 }
31 await i.insert("@local/identity", l)
32}
33function w(e) {
34 return e.createCollections([
35 { keyEncoding: t.BUFFER, valueEncoding: l },
36 { keyEncoding: t.UINT, valueEncoding: s },
37 { keyEncoding: n, valueEncoding: c },
38 { keyEncoding: t.BUFFER, valueEncoding: d },
39 { keyEncoding: t.BUFFER },
40 { keyEncoding: [t.BUFFER, t.BUFFER] },
41 ])
42}
43module.exports = async function (r, n) {
44 const c = r.store,
45 l = c.get({ name: "local", compat: !1, active: !1 })
46 if ((await l.ready(), !l.length)) return void (await l.close())
47 const s = new t(new i(c.get({ name: "local", compat: !1, active: !1 }))),
48 d = new i(c.get({ name: "local-recents-3", compat: !1, active: !1 })),
49 K = new i(c.get({ name: "keet-local-identity", compat: !1, active: !1 })),
50 E = w(s),
51 k = E[0],
52 P = E[2],
53 R = E[5],
54 b = [],
55 h = [],
56 F = await K.get(a.from([1]), { valueEncoding: y }),
57 q = F?.value
58 if (q?.identity) {
59 const e = await k.get(F.value.privateProfileKey)
60 ;(e && b.push({ priority: 0, record: e }), await f(c, n, q))
61 }
62 const x = d.createReadStream({
63 valueEncoding: o.array(o.fixed32),
64 keyEncoding: o.lexint,
65 reverse: !0,
66 })
67 for await (const { key: e, value: i } of x)
68 for (const t of i) {
69 const i = await k.get(t)
70 i && !i.value.hidden && b.push({ priority: e, record: i })
71 }
72 for await (const {
73 _id: [e, i, t],
74 value: { roomKey: o, cleared: a },
75 } of P.createReadStream()) {
76 const r = i.startsWith("/") ? i.slice(1) : i
77 await n.insert("@local/drive-files", {
78 file: { pointer: { externalDrive: { key: e, path: r, version: t, size: 0 } } },
79 roomKey: o,
80 encryptionKey: null,
81 cleared: a,
82 own: !1,
83 lastAccessed: 0,
84 })
85 }
86 for await (const { _id: e } of R.createReadStream()) h.push(e[1])
87 for (const {
88 priority: i,
89 record: { _id: t, value: o },
90 } of b) {
91 const [r, l] = await Promise.all([u(c, t, "autobase/encryption"), m(c, t)])
92 if (!r) continue
93 const s = p(r),
94 d = g(t, s)
95 let y = null
96 if ((q && a.equals(q.privateProfileKey, t) && (y = { blockedMembers: h }), o.hidden && !y))
97 continue
98 const f = c.get({ key: l, active: !1 })
99 await f.ready()
100 const w = f.length
101 await f.close()
102 const K = {
103 roomKey: t,
104 priority: i,
105 v3: {
106 encryptionKey: r,
107 seed: s,
108 capabilities: d,
109 initiator: { key: l, length: w },
110 fastForwardTo: (await e.getBootRecord(c, t)).key,
111 privateProfile: y,
112 },
113 errored: !1,
114 timestamp: Date.now(),
115 },
116 E = await n.get("@local/room-migrations", { roomKey: t })
117 ;(await n.insert("@local/room-migrations", K),
118 await v(n, K, E),
119 await n.insert("@local/writers", { mailbox: d.mailboxKeyPair.publicKey, key: l, roomKey: t }))
120 }
121 await Promise.allSettled([s.close(), d.close(), K.close()])
122}
keet-core-4.14.4-pretty/lib/core/migrations/3/messages.js +133 -0
……@@ -0,0 +1,133 @@
1const e = require("@holepunchto/hyperindex"),
2 d = require("compact-encoding")
3;((module.exports.IndexFilePointer = [e.BUFFER, e.STRING, e.UINT]),
4 (module.exports.RecentsKeyEncoding = {
5 preencode(e, o) {
6 d.lexint.preencode(e, o)
7 },
8 encode(e, o) {
9 d.lexint.encode(e, o)
10 },
11 decode(e) {
12 const o = e.start
13 try {
14 return d.lexint.decode(e)
15 } catch {
16 return ((e.start = o), d.uint.decode(e))
17 }
18 },
19 }))
20const o = {
21 preencode(e, o) {
22 ;(e.end++,
23 o.displayName && d.string.preencode(e, o.displayName),
24 o.avatar && d.buffer.preencode(e, o.avatar))
25 },
26 encode(e, o) {
27 const n = e.start++
28 let c = 0
29 ;(o.displayName && ((c |= 1), d.string.encode(e, o.displayName)),
30 o.avatar && ((c |= 2), d.buffer.encode(e, o.avatar)),
31 (e.buffer[n] = c))
32 },
33 decode(e) {
34 const o = d.uint.decode(e)
35 return {
36 displayName: 1 & o ? d.string.decode(e) : null,
37 avatar: 2 & o ? d.buffer.decode(e) : null,
38 }
39 },
40}
41;((module.exports.FileRecord = {
42 preencode(e, o) {
43 ;(d.uint.preencode(e, 0), d.fixed32.preencode(e, o.roomKey))
44 },
45 encode(e, o) {
46 const n = e.start++
47 d.fixed32.encode(e, o.roomKey)
48 let c = 0
49 ;(o.cleared && (c |= 1), (e.buffer[n] = c))
50 },
51 decode(e) {
52 const o = d.uint.decode(e)
53 return { roomKey: d.fixed32.decode(e), cleared: !!(1 & o) }
54 },
55}),
56 (module.exports.RoomRecord = {
57 preencode(e, o) {
58 ;(e.end++,
59 d.uint.preencode(e, o.unread),
60 d.uint.preencode(e, o.priority),
61 d.bool.preencode(e, o.bookmarked),
62 o.indexing && d.bool.preencode(e, o.indexing))
63 },
64 encode(e, n) {
65 const c = e.start++
66 ;(d.uint.encode(e, n.unread), d.uint.encode(e, n.priority), d.bool.encode(e, n.bookmarked))
67 let i = 0
68 ;(n.indexing && ((i |= 1), d.bool.encode(e, n.indexing)),
69 n.incognito && ((i |= 2), o.encode(e, n.incognito)),
70 n.hidden && (i |= 4),
71 (e.buffer[c] = i))
72 },
73 decode(e) {
74 const n = d.uint.decode(e)
75 return {
76 unread: d.uint.decode(e),
77 priority: d.uint.decode(e),
78 bookmarked: d.bool.decode(e),
79 indexing: !!(1 & n) && d.bool.decode(e),
80 incognito: 2 & n ? o.decode(e) : null,
81 hidden: !!(4 & n),
82 }
83 },
84 }))
85const n = {
86 preencode(e, o) {
87 ;(e.end++,
88 d.fixed32.preencode(e, o.identityPublicKey),
89 d.buffer.preencode(e, o.deviceProof),
90 d.buffer.preencode(e, o.sharedInviteSeed))
91 },
92 encode(e, o) {
93 const n = e.start++
94 d.fixed32.encode(e, o.identityPublicKey)
95 let c = 0
96 ;(o.deviceProof && ((c |= 1), d.buffer.encode(e, o.deviceProof)),
97 o.sharedInviteSeed && ((c |= 2), d.buffer.encode(e, o.sharedInviteSeed)),
98 (e.buffer[n] = c))
99 },
100 decode(e) {
101 const o = d.uint.decode(e)
102 return {
103 identityPublicKey: d.fixed32.decode(e),
104 deviceProof: 1 & o ? d.buffer.decode(e) : null,
105 sharedInviteSeed: 2 & o ? d.buffer.decode(e) : null,
106 }
107 },
108}
109module.exports.LocalIdentityRecord = {
110 preencode(e, o) {
111 ;(d.uint.preencode(e, 2),
112 d.fixed32.preencode(e, o.privateProfileKey),
113 o.deviceName && d.string.preencode(e, o.deviceName),
114 o.identity && n.preencode(e, o.identity))
115 },
116 encode(e, o) {
117 let c = 0
118 ;(o.deviceName && (c |= 1),
119 o.identity && (c |= 2),
120 d.uint.encode(e, c),
121 d.fixed32.encode(e, o.privateProfileKey),
122 o.deviceName && d.string.encode(e, o.deviceName),
123 o.identity && n.encode(e, o.identity))
124 },
125 decode(e) {
126 const o = d.uint.decode(e)
127 return {
128 privateProfileKey: d.fixed32.decode(e),
129 deviceName: 1 & o ? d.string.decode(e) : null,
130 identity: 2 & o ? n.decode(e) : null,
131 }
132 },
133}
keet-core-4.14.4-pretty/lib/core/migrations/3/room.js +112 -0
……@@ -0,0 +1,112 @@
1const e = require("b4a"),
2 i = require("keet-identity-key"),
3 { mnemonicToEntropy: t } = require("bip39-mnemonic"),
4 a = require("compact-encoding"),
5 { ConfigSchema: o } = require("@holepunchto/legacy-keet-core-schemas"),
6 { CONFIG: r } = require("@holepunchto/keet-core-api"),
7 n = 1711547109544,
8 c = "keet-seed-phrase"
9function s(e) {
10 for (const i of e.peers) if (!(i.remoteLength <= e.signedLength)) return !0
11 return !1
12}
13async function l(e, i) {
14 await i.core.ready()
15 const t = i.core.findingPeers(),
16 a = setTimeout(t, e.isTesting ? 75 : 7500)
17 try {
18 await i.core.update()
19 for (let t = 0; t < 5 && s(i.core); t++)
20 (t > 0 && (await new Promise((i) => setTimeout(i, e.isTesting ? 10 : 1e3))), await i.update())
21 } finally {
22 ;(clearTimeout(a), t())
23 }
24}
25async function y(i, n, s, y, f) {
26 if (i.debugForceMigrationFailure && e.equals(i.debugForceMigrationFailure, n.key))
27 throw new Error("Migration failed")
28 if ((await l(i, n.base), !(await n.db.get("@keet/system-digest")))) {
29 let e = null
30 if (f) {
31 const i = []
32 for (const e of f.blockedMembers) i.push(e)
33 const t = []
34 for (const { roomKey: e, v3: i } of y) {
35 const { seed: a, encryptionKey: o, initiator: r, fastForwardTo: n } = i,
36 c = { roomKey: e, encryptionKey: o, seed: a, initiator: r, fastForwardTo: n }
37 t.push(c)
38 }
39 e = { sharedRooms: t, blockedContacts: i }
40 }
41 ;(await n.dispatch("@keet/upgrade", { version: 9 }, { dryRun: !1, optimistic: !0 }),
42 e && (await n.dispatch("@keet-private-id/run-v3-migration", e, { dryRun: !1 })))
43 }
44 const m = await i.local.get("@local/rooms", { roomKey: n.key })
45 if (
46 (m.digest &&
47 m.dm &&
48 m.dm.length &&
49 (m.config.title ||
50 (await i.privateProfile.dispatch("@keet-private-id/remove-contact", {
51 memberKey: m.dm[0],
52 }))),
53 !f)
54 )
55 return void (await n.internalEnsureProfileUpdated())
56 const [u, p, w] = await Promise.all([
57 n.db.findOne("@keet/members"),
58 n.base.view.legacy.bee.get(r.ID_RECOVERY_PHRASE, o.Encoding),
59 n.base.getUserData(c),
60 ]),
61 g = p ? a.decode(a.string, p.value) : w && e.toString(w, "utf-8")
62 if (u) {
63 const e = { ...u.profile, mailbox: s.mailboxKeyPair.publicKey }
64 await i.internalUpdateProfile({ profile: e }, { opening: !0 })
65 }
66 if (g) {
67 const e = await i.internalEnterLocalTransaction()
68 try {
69 const i = await e.get("@local/identity")
70 ;((i.entropy = t(g)), await e.insert("@local/identity", i), await e.flush())
71 } finally {
72 await i.internalExitLocalTransaction()
73 }
74 await d(i, n, g, s)
75 }
76}
77async function d(e, t, a, o) {
78 const r = await i.from({ mnemonic: a })
79 if ((await e.internalCreateDiscoveryCore(r), e.discoveryCore.length > 0)) {
80 const i = Math.floor((Date.now() - n) / 1e3)
81 await e.discoveryCore.truncate(e.discoveryCore.length, i)
82 }
83 const c = o.mailboxKeyPair.publicKey
84 ;(await e.discoveryCore.append({ version: 1, timestamp: Date.now(), key: t.key, mailbox: c }),
85 await t.dispatch("@keet-private-id/update-identity", {
86 identity: { publicKey: r.identityPublicKey, discoveryCoreKey: e.discoveryCore.key },
87 }))
88}
89module.exports = async function (
90 e,
91 i,
92 { capabilities: t, encryptionKey: a, privateProfile: o },
93 { migratingRooms: r },
94) {
95 const n = await e.local
96 .find("@local/drive-files-by-room", { gte: { roomKey: i }, lte: { roomKey: i } })
97 .toArray()
98 for (const e of n) e.encryptionKey = a
99 const c = await e.internalEnterLocalTransaction()
100 try {
101 for (const e of n) await c.insert("@local/drive-files", e)
102 await c.flush()
103 } finally {
104 await e.internalExitLocalTransaction()
105 }
106 const s = e.internalOpenRoom(i, a, { mailbox: t.mailboxKeyPair.publicKey, isPrivateProfile: !!o })
107 try {
108 ;(await y(e, s, t, r, o), await e.blindPeering.addAutobase(s.base))
109 } finally {
110 e.internalReleaseRoom(s)
111 }
112}
keet-core-4.14.4-pretty/lib/core/migrations/4/index.js +1 -0
……@@ -0,0 +1 @@
1module.exports = async function (n, o) {}
keet-core-4.14.4-pretty/lib/core/migrations/4/post.js +9 -0
……@@ -0,0 +1,9 @@
1async function o(o) {
2 const r = []
3 for await (const e of o.privateProfile.db.find("@keet-private-id/rooms"))
4 (await o.local.get("@local/rooms", { roomKey: e.roomKey })) || r.push(e)
5 for (const e of r) o.tasks.joinRoomKeys(e.roomKey, { keys: e }).runBackground()
6}
7module.exports = async function (r) {
8 o(r).catch(r.onerror)
9}
keet-core-4.14.4-pretty/lib/core/migrations/7/index.js +5 -0
……@@ -0,0 +1,5 @@
1module.exports = async function (o) {
2 const s = []
3 for await (const a of o.find("@local/rooms")) a.dm && s.push(o.insert("@local/rooms", a))
4 await Promise.all(s)
5}
keet-core-4.14.4-pretty/lib/core/migrations/8/index.js +14 -0
……@@ -0,0 +1,14 @@
1const o = require("hypercore-id-encoding")
2module.exports = async function (e) {
3 const t = new Map()
4 for await (const { roomKey: n, file: c, cleared: i } of e.find("@local/blob-files")) {
5 if (i) continue
6 const e = c.pointer.externalBlob?.blob.byteLength
7 if (!e) continue
8 const l = o.encode(n)
9 t.set(l, (t.get(l) ?? 0) + e)
10 }
11 const n = []
12 for (const [c, i] of t) n.push(e.insert("@local/file-stats", { roomKey: o.decode(c), total: i }))
13 await Promise.all(n)
14}
keet-core-4.14.4-pretty/lib/core/swarm/index.js +2 -0
……@@ -0,0 +1,2 @@
1const r = require("./worker")
2module.exports = { SwarmWorker: r }
keet-core-4.14.4-pretty/lib/core/swarm/worker.js +234 -0
……@@ -0,0 +1,234 @@
1const s = require("ready-resource"),
2 e = require("hypercore-id-encoding"),
3 t = require("scope-lock"),
4 {
5 local: {
6 hyperschema: { getEnum: i },
7 },
8 } = require("../../../schema/spec"),
9 r = i("@local/keet-state"),
10 a = 8,
11 o = 1e3,
12 n = 3e4,
13 c = 6e4,
14 l = 1e4,
15 h = 5e3,
16 m = 5e3
17async function d(s) {
18 ;(await s.swarm.flushed(),
19 await s.swarm.destroy(),
20 (s.swarmStatus.isClient = !1),
21 (s.swarmStatus.isServer = !1),
22 (s.swarm = null))
23}
24module.exports = class extends s {
25 constructor(s, e = {}) {
26 super()
27 const {
28 gcDefaultDiscoveryTimeout: i = c,
29 gcUpdatedDiscoveryTimeout: r = l,
30 gcStartDiscoverySwarmingDelay: d = h,
31 gcStartFallbackSwarmingDelay: u = m,
32 refreshInterval: w = o,
33 fallbackSwarmingLimit: S = a,
34 gcIdleTime: g = n,
35 } = e
36 ;((this.keet = s),
37 (this.swarm = null),
38 (this.sessions = new Map()),
39 (this.sessionsByRoomId = new Map()),
40 (this._refreshLock = new t({ debounce: !0 })),
41 (this._refreshTimer = null),
42 (this._gcEnabled = !1 !== e.gc),
43 (this._deferSwarming = !1 !== e.deferSwarming),
44 (this._fallbackSwarmingEnabled = !1 !== e.fallbackSwarming),
45 (this._fallbackSwarmingLimit = S),
46 (this._gcIdleTime = g),
47 (this._refreshInterval = w),
48 (this._gcDefaultDiscoveryTimeout = i),
49 (this._gcUpdatedDiscoveryTimeout = r),
50 (this._gcStartDiscoverySwarmingDelay = d),
51 (this._gcStartFallbackSwarmingDelay = u),
52 (this._serverModeAllowed = !0),
53 (this._backgrounded = !1))
54 }
55 _runOpen() {
56 ;(this._refreshTimer ||
57 (this._refreshTimer = setInterval(this.refresh.bind(this), this._refreshInterval)),
58 this.refresh().catch(this.keet.onerror))
59 }
60 async _runClose() {
61 this._refreshTimer && (clearInterval(this._refreshTimer), (this._refreshTimer = null))
62 const s = []
63 for (const e of this.sessions.values()) e.swarm && s.push(e.swarm.destroy())
64 ;(this.sessions.clear(), await Promise.allSettled(s))
65 }
66 _open() {
67 ;((this.swarm = this.keet.swarm), this._runOpen())
68 }
69 _close() {
70 return this._runClose()
71 }
72 async _refreshFallbackSwarming() {
73 if (!this._fallbackSwarmingEnabled) return
74 const s = await this.keet.local
75 .find("@local/rooms-by-timestamp", { limit: this._fallbackSwarmingLimit, reverse: !0 })
76 .toArray(),
77 t = new Set()
78 for (const i of s) {
79 const s = e.encode(i.capabilities.swarmTopic),
80 r = this._createSession(s, i.capabilities.swarmTopic)
81 if (!r.status.isFallback) {
82 r.status.isFallback = !0
83 const s = Math.floor(0.5 * Math.random() * this._gcStartFallbackSwarmingDelay),
84 e = this._gcStartFallbackSwarmingDelay + s
85 r.fallbackSwarmingStartTime = Date.now() + e
86 }
87 t.add(s)
88 }
89 for (const s of this.sessions.values()) t.has(s.id) || (s.status.isFallback = !1)
90 }
91 async _refreshSessions() {
92 const s = [],
93 e = []
94 for (const t of this.sessions.values())
95 this._checkInactivity(t) ? s.push(t) : e.push(this._refreshSession(t))
96 await Promise.allSettled(e)
97 const t = []
98 for (const e of s)
99 (this.sessions.delete(e.id),
100 e.roomId && this.sessionsByRoomId.delete(e.roomId),
101 e.swarm && t.push(e.swarm.destroy()))
102 await Promise.allSettled(t)
103 }
104 _checkInactivity(s) {
105 if (!this._gcEnabled) return !1
106 let e = !1
107 s.status.isDiscovering && (e = Date.now() - s.discoveryStartTime > s.discoveryTimeout)
108 const t = s.status.isFallback || s.status.isActive
109 let i = s.status.isDiscovering && !e
110 return (
111 s.status.isDiscovering &&
112 e &&
113 (this.keet.internalDiscoveryCompleted(s.discoveryKey, s.roomId),
114 (s.status.isDiscovering = !1),
115 (i = !1)),
116 !(
117 t ||
118 i ||
119 (0 === s.idleStartTime && (s.idleStartTime = Date.now()),
120 (s.idleDuration = Date.now() - s.idleStartTime),
121 s.idleDuration < this._gcIdleTime)
122 )
123 )
124 }
125 async _refreshSession(s) {
126 let e = !1,
127 t = !1
128 ;(s.status.isFallback &&
129 (t = Date.now() >= s.fallbackSwarmingStartTime || s.swarmStatus.isServer),
130 s.status.isDiscovering &&
131 (e = Date.now() >= s.discoverySwarmingStartTime || s.swarmStatus.isClient),
132 s.status.isActive && ((e = !0), (t = !0)))
133 const i = e === s.swarmStatus.isClient,
134 a = t === s.swarmStatus.isServer
135 if (i && a) return
136 const o = s.swarm
137 ;(this._serverModeAllowed || (t = !1),
138 (s.swarmStatus.isClient = e),
139 (s.swarmStatus.isServer = t),
140 this.keet.debug.disableSwarming ||
141 this.keet.state === r.WAKEUP ||
142 ((s.swarm = this.swarm.join(s.discoveryKey, { client: e, server: t, limit: s.limit })),
143 o && (await o.destroy())))
144 }
145 async refresh() {
146 if (!this.keet.closing && (await this._refreshLock.lock()))
147 try {
148 ;(await this._refreshFallbackSwarming(), await this._refreshSessions())
149 } catch (s) {
150 this.keet.onerror(s)
151 } finally {
152 this._refreshLock.unlock()
153 }
154 }
155 _createSession(s, e, { roomId: t, limit: i } = {}) {
156 let r = this.sessions.get(s)
157 return r
158 ? (t && !this.sessionsByRoomId.has(t) && ((r.roomId = t), this.sessionsByRoomId.set(t, r)), r)
159 : ((r = {
160 id: s,
161 roomId: t,
162 discoveryKey: e,
163 swarm: null,
164 lastActiveTime: 0,
165 discoveryStartTime: 0,
166 discoveryTimeout: 0,
167 discoverySwarmingStartTime: 0,
168 fallbackSwarmingStartTime: 0,
169 idleStartTime: 0,
170 idleDuration: 0,
171 status: { isActive: !1, isFallback: !1, isDiscovering: !1 },
172 limit: i,
173 swarmStatus: { isClient: !1, isServer: !1 },
174 }),
175 this.sessions.set(s, r),
176 t && this.sessionsByRoomId.set(t, r),
177 r)
178 }
179 setServerMode(s) {
180 this._serverModeAllowed = s
181 }
182 startActiveSwarming(s) {
183 const t = e.encode(s),
184 i = this._createSession(t, s)
185 ;((i.status.isActive = !0), (i.lastActiveTime = Date.now()), this.refresh())
186 }
187 stopActiveSwarming(s) {
188 const t = e.encode(s),
189 i = this.sessions.get(t)
190 i && ((i.status.isActive = !1), this.refresh())
191 }
192 startDiscoverySwarming(s, t) {
193 const i = e.encode(s),
194 r = this._createSession(i, s, t)
195 if (
196 ((r.status.isDiscovering = !0),
197 (r.discoveryStartTime = Date.now()),
198 (r.discoveryTimeout = this._gcDefaultDiscoveryTimeout),
199 !1 !== t.deferSwarming && this._deferSwarming)
200 ) {
201 const s = Math.floor(0.5 * Math.random() * this._gcStartDiscoverySwarmingDelay),
202 e = this._gcStartDiscoverySwarmingDelay + s
203 r.discoverySwarmingStartTime = Date.now() + e
204 } else r.discoverySwarmingStartTime = r.discoveryStartTime
205 this.refresh()
206 }
207 notifyDiscoveryUpdate(s) {
208 const e = this.sessionsByRoomId.get(s)
209 e &&
210 e.status.isDiscovering &&
211 ((e.discoveryStartTime = Date.now()),
212 (e.discoveryTimeout = this._gcUpdatedDiscoveryTimeout),
213 this.refresh())
214 }
215 async background() {
216 if (this._backgrounded) return
217 this._backgrounded = !0
218 const s = []
219 for (const e of this.sessions.values()) e.swarm && s.push(d(e))
220 await Promise.allSettled(s)
221 }
222 async unbackground() {
223 this._backgrounded && ((this._backgrounded = !1), await this._runOpen())
224 }
225 async suspend() {
226 await this._runClose()
227 }
228 async resume() {
229 await this._runOpen()
230 }
231 async flush() {
232 ;(await this.refresh(), await this.swarm.flush())
233 }
234}
keet-core-4.14.4-pretty/lib/core/sync/index.js +194 -0
……@@ -0,0 +1,194 @@
1const e = require("hypercore-id-encoding"),
2 t = require("ready-resource"),
3 s = require("./updater"),
4 { roomsStats: a } = require("../contract/stats/local")
5module.exports = class extends t {
6 constructor(e, t, s, a) {
7 ;(super(),
8 (this.keet = e),
9 (this.view = t),
10 (this.base = s),
11 (this.changes = a),
12 (this._events = []),
13 (this._swappedId = !1),
14 (this._updater = null))
15 }
16 async _close() {
17 this._updater && (await this._updater.close())
18 }
19 async _save() {
20 const t = await this.keet.internalEnterLocalTransaction()
21 try {
22 const s = this._updater.updates.startIdentitySwap,
23 i = this._updater.updates.finishIdentitySwap
24 if (s) {
25 const e = this._updater.currentIdentityInfo
26 ;((e.swapV2 = s), await t.insert("@local/identity", e))
27 }
28 if (
29 (i && (await t.insert("@local/identity", i), (this._swappedId = !0)),
30 this._updater.updates.contacts)
31 )
32 for (const e of this._updater.updates.contacts) await t.insert("@local/contacts", e)
33 if (this._updater.updates.sharedPreferences)
34 for (const s of this._updater.updates.sharedPreferences) {
35 const a = await t.get("@local/room-preferences", s)
36 await t.insert("@local/room-preferences", s)
37 const i = await t.get("@local/rooms", s)
38 ;(i && ((i.preferences = s.status), await t.insert("@local/rooms", i)),
39 s.status.isActive &&
40 this._events.push({
41 type: "recent-rooms-changed",
42 args: ["changed", 0, e.encode(s.roomKey)],
43 }))
44 const r = !1 === a?.status.isFavorite && s.status.isFavorite,
45 o = !0 === a?.status.isFavorite && !s.status.isFavorite
46 r || o
47 ? this._events.push({
48 type: "favorite-rooms-changed",
49 args: [o ? "removed" : "added", 0, e.encode(s.roomKey)],
50 })
51 : s.status.isFavorite &&
52 s.status.isActive &&
53 this._events.push({
54 type: "favorite-rooms-changed",
55 args: ["changed", 0, e.encode(s.roomKey)],
56 })
57 }
58 if (this._updater.updates.cache) {
59 const e = this._updater.updates.cache
60 ;(e.device &&
61 (await t.insert("@local/devices", { roomKey: this.base.key, device: e.device })),
62 e.member && (await t.insert("@local/members", e.member)))
63 }
64 const r = await t.get("@local/rooms", this._updater.roomInfo)
65 if (!r) {
66 const e = await t.get("@local/room-preferences", this._updater.roomInfo)
67 e && (this._updater.roomInfo.preferences = e.status)
68 }
69 ;(await t.insert("@local/rooms", this._updater.roomInfo),
70 await a(t, this._updater.roomInfo, r),
71 await t.flush())
72 } finally {
73 await this.keet.internalExitLocalTransaction()
74 }
75 }
76 async _dispatch() {
77 const e = this._updater.updates.dispatches
78 if (e && 0 !== e.length)
79 try {
80 await this.keet.dispatchBatch(this.base.id, e)
81 } catch (e) {
82 this.keet.onerror(e)
83 }
84 }
85 async _profileDispatch() {
86 if (!this._updater.currentIdentityInfo) return
87 const t = this._updater.updates.profileDispatches
88 if (t && 0 !== t.length)
89 try {
90 const s = e.encode(this._updater.currentIdentityInfo.privateProfileKey)
91 await this.keet.dispatchBatch(s, t)
92 } catch (e) {
93 this.keet.onerror(e)
94 }
95 }
96 _generateEvents() {
97 this._events.push({ type: "room-changed", args: [this.base.id] })
98 const { roomKey: t, discoveryKey: s, timestamps: a } = this._updater.roomInfo,
99 i = a.latestChatMessage || a.latestSync,
100 r = this._updater.roomInfo && !this._updater.currentRoomInfo,
101 o =
102 !this._updater.roomInfo.status.isRemoved && this._updater.currentRoomInfo?.status.isRemoved,
103 n =
104 this._updater.roomInfo.status.isRemoved && !this._updater.currentRoomInfo?.status.isRemoved,
105 h = this._updater.roomInfo.status.isRemoved,
106 d = !!this._updater.roomInfo.dm,
107 c = !(h || n || r || o)
108 if (
109 ((r || o || n) &&
110 (this._events.push({
111 type: "recent-rooms-changed",
112 args: [n ? "removed" : "added", i, this.base.id],
113 }),
114 this._updater.roomInfo.preferences?.isFavorite &&
115 this._events.push({
116 type: "favorite-rooms-changed",
117 args: [n ? "removed" : "added", i, this.base.id],
118 }),
119 (r || o) && this._events.push({ type: "room-preferences-changed", args: ["join", t, s] }),
120 n && this._events.push({ type: "room-preferences-changed", args: ["leave", t, s] }),
121 r && d && this._events.push({ type: "dm-rooms-changed", args: [] })),
122 this._updater.updates.chat &&
123 (c &&
124 (this._events.push({ type: "recent-rooms-changed", args: ["changed", i, this.base.id] }),
125 this._updater.roomInfo.preferences?.isFavorite &&
126 this._events.push({
127 type: "favorite-rooms-changed",
128 args: ["changed", i, this.base.id],
129 })),
130 h ||
131 this._events.push({
132 type: "chat-changed",
133 args: [this.base.id, this._updater.updates.chat.id.index],
134 })),
135 this._updater.isCurrentPrivateProfile &&
136 this._events.push({ type: "identity-changed", args: [] }),
137 this._updater.updates.sharedPreferences)
138 )
139 for (const { roomKey: t, status: s } of this._updater.updates.sharedPreferences)
140 (s.isFullyMuted &&
141 this._events.push({ type: "room-preferences-changed", args: ["mute", t] }),
142 s.isFullyMuted ||
143 this._events.push({ type: "room-preferences-changed", args: ["unmute", t] }),
144 this._events.push({ type: "room-changed", args: [e.encode(t)] }))
145 if (this._updater.updates.activeCallSynced) {
146 const e = this._updater.updates.activeCall,
147 t = this._updater.updates.activeCallDevice
148 this._events.push({ type: "call-changed", args: [this.base.id, e, t] })
149 }
150 }
151 async _runPostUpdate() {
152 try {
153 if ((await this.base.update(), this.keet.closing)) return
154 if ((await this._dispatch(), this.keet.closing)) return
155 if ((await this._profileDispatch(), this.keet.closing)) return
156 if (this._updater.updates.shouldUpgrade) {
157 const t = e.encode(this._updater.roomInfo.roomKey)
158 await this.keet.internalDispatchUpgrade(t, this.keet.abi.autoupgrade)
159 }
160 if (this._updater.updates.tasks)
161 for (const e of this._updater.updates.tasks) e.runBackground()
162 for (const { type: e, args: t } of this._events) this.keet.emit(e, ...t)
163 ;(this._updater.changes.logout && (await this.keet.logout()),
164 this._updater.updates.unreadKeys && (await this.keet.internalRefreshUnreads()))
165 for (const { type: e, value: t } of this._updater.events) {
166 const s = {
167 roomKey: this.base.key,
168 roomId: this.base.id,
169 roomInfo: this._updater.roomInfo,
170 value: t,
171 }
172 this.keet.emit(e, s)
173 }
174 } catch (e) {
175 this.keet.onerror(e)
176 }
177 }
178 async run() {
179 try {
180 if (
181 ((this._updater = new s(this.keet, this.view, this.base, this.changes)),
182 !(await this._updater.run()) || this.closing)
183 )
184 return
185 if ((await this._save(), this.closing)) return
186 ;(this._swappedId && this.keet.internalSafeSwapPrivateProfiles(), this._generateEvents())
187 } finally {
188 await this.close()
189 }
190 }
191 runPostUpdate() {
192 queueMicrotask(this._runPostUpdate.bind(this))
193 }
194}
keet-core-4.14.4-pretty/lib/core/sync/loader.js +376 -0
……@@ -0,0 +1,376 @@
1const t = require("ready-resource"),
2 e = require("hypercore-id-encoding"),
3 i = require("safety-catch"),
4 a = require("b4a"),
5 { KeetContractError: s } = require("../contract/errors"),
6 {
7 contract: {
8 hyperschema: { getEnum: n },
9 },
10 } = require("../../../schema/spec"),
11 o = n("@keet/room-type"),
12 { restoreAvatar: l, restoreFile: r } = require("../contract/avatars"),
13 { getMemberForDeviceKey: h } = require("../contract/query"),
14 { getCall: d } = require("../../api/v1/helpers"),
15 g = 20
16module.exports = class extends t {
17 constructor(t, e, a) {
18 ;(super(),
19 (this.local = t),
20 (this.view = e),
21 (this.base = a),
22 (this.shared = 0),
23 (this.syncTime = null),
24 (this.output = null),
25 (this.input = null),
26 (this.inputBlobs = null),
27 (this.core = null),
28 (this._loadingLocalPrivateProfileInfo = null),
29 (this._loadingLocalIdentityInfo = null),
30 (this._loadingLocalRoomInfo = null),
31 (this._loadingLatestMessages = null),
32 (this._loadingLatestMembers = null),
33 (this._loadingDigest = null),
34 (this._loadingConfig = null),
35 (this._loadingCapabilities = null),
36 (this._loadingIdentity = null),
37 (this._loadingPrimaryThread = null),
38 (this._loadingLastMessage = null),
39 (this._loadingDMMembers = null),
40 (this._loadingReadLengths = null),
41 (this._loadingChatChanges = null),
42 (this._loadingContactChanges = null),
43 (this._loadingSharedRoomChanges = null),
44 (this._loadingPendingInvitations = null),
45 this.ready().catch(i))
46 }
47 _close() {
48 return Promise.all([this.input.close(), this.output.close(), this.inputBlobs.close()])
49 }
50 async _open() {
51 ;(this.view.db.update(),
52 (this.output = this.local.snapshot()),
53 (this.input = this.view.db.snapshot()),
54 (this.inputBlobs = this.view.blobs.snapshot()),
55 (this.core = this.input.engine.db.core),
56 (this.syncTime = Date.now()))
57 }
58 async _getChangeRange(t) {
59 const e = await this.input.findOne(t, { reverse: !0, checkout: this.shared })
60 return e ? { gt: { clock: e.clock } } : {}
61 }
62 async _runLoadConfig() {
63 const [t, e, i, s] = await Promise.all([
64 this.loadLocalRoomInfo(),
65 this.loadDigest(),
66 this.loadSelfMember(),
67 this.input.get("@keet/room-config"),
68 ])
69 let n = s?.title || null,
70 r = s?.avatar || null
71 if (i && e?.settings.roomType === o.DirectMessage) {
72 const t = await this.input.find("@keet/members").toArray()
73 for (const e of t)
74 if (!a.equals(i.key, e.key)) {
75 ;((n = e.profile.displayName), (r = e.profile.avatar))
76 break
77 }
78 }
79 if (r) {
80 const e = t?.config?.avatar?.small?.hash,
81 i = r?.small?.hash
82 e && i && a.equals(e, i) ? (s.avatar = t.config.avatar) : await l(this.inputBlobs, r)
83 }
84 return { ...s, title: n, avatar: r }
85 }
86 async _runLoadSelfMember() {
87 const t = await h(this.input, this.base.local.key)
88 if (!t) return null
89 const e = await this.input.get("@keet/member-proofs", { key: t.key }),
90 i = { ...t, proofs: e }
91 return i?.profile.avatar ? (await l(this.inputBlobs, i.profile.avatar), i) : i
92 }
93 async _runLoadLastMessage() {
94 const t = await this.loadPrimaryThread()
95 if (!t || 0 === t.count) return null
96 const e = { thread: 0, index: t.count - 1 }
97 return this.loadMessage(e)
98 }
99 async _runLoadDMMembers() {
100 const [t, e] = await Promise.all([this.loadDigest(), this.loadSelfMember()])
101 if (!t || !e || t.settings.roomType !== o.DirectMessage) return []
102 const i = await this.input.find("@keet/members").toArray(),
103 s = []
104 for (const t of i) a.equals(t.key, e.key) || s.push(t.key)
105 return s
106 }
107 async _runLoadChatChanges() {
108 const [t, e] = await Promise.all([this.loadLocalRoomInfo(), this.loadLastMessage()]),
109 i = t?.lastMessage?.oplog.key,
110 s = t?.lastMessage?.oplog.seq,
111 n = e?.oplog.key,
112 o = e?.oplog.seq
113 let l = !1
114 return ((l = !i || !(a.equals(i, n) && s === o)), { lastMessage: e, changed: l })
115 }
116 async _runLoadLatestMessages() {
117 const t = await this.loadLocalIdentityInfo()
118 return t && a.equals(this.base.key, t.privateProfileKey)
119 ? []
120 : this.input
121 .find("@keet/chat", {
122 gte: { id: { thread: 0 } },
123 lte: { id: { thread: 0 } },
124 limit: g,
125 reverse: !0,
126 })
127 .toArray()
128 }
129 async _loadFiles(t) {
130 const e = await Promise.all(t.map((t) => this.input.get("@keet/files", { id: t })))
131 return await Promise.all(e.map(async (t) => (await r(this.inputBlobs, t.file.preview), t.file)))
132 }
133 async _loadMemberForDeviceKey(t, i, a) {
134 const s = await h(this.input, a)
135 if (!s) return null
136 const n = e.encode(s.key)
137 t.has(n) || (t.add(n), s.avatar && (await l(this.inputBlobs, s.avatar)), i.push(s))
138 }
139 async _runLoadLatestMembers() {
140 const t = await this.loadLatestMessages()
141 if (this.closing || !t.length) return []
142 const i = [],
143 a = [],
144 s = new Set(),
145 n = new Set()
146 for (const o of t) {
147 const t = e.encode(o.oplog.key)
148 s.has(t) || (s.add(t), a.push(this._loadMemberForDeviceKey(n, i, o.oplog.key)))
149 }
150 return (await Promise.all(a), i)
151 }
152 async _runLoadSharedRoomChanges() {
153 const t = await this._getChangeRange("@keet-private-id/rooms-by-clock"),
154 e = []
155 for await (const i of this.input.find("@keet-private-id/rooms-by-clock", t)) e.push(i)
156 return e
157 }
158 async _runLoadContactChanges() {
159 const t = await this._getChangeRange("@keet-private-id/contacts-by-clock"),
160 e = []
161 for await (const i of this.input.find("@keet-private-id/contacts-by-clock", t)) e.push(i)
162 return e
163 }
164 _runLoadPendingInvitations() {
165 return this.input.find("@keet-private-id/pending-invitations").toArray()
166 }
167 async _runLoadLocalPrivateProfileInfo() {
168 const t = await this.loadLocalIdentityInfo()
169 return this.closing || !t
170 ? null
171 : this.output.get("@local/rooms", { roomKey: t.privateProfileKey })
172 }
173 _runLoadReadLengths() {
174 return this.input.find("@keet/read-lengths").toArray()
175 }
176 _runLoadActiveCall() {
177 return d(this.input, "@keet/active-calls-by-timestamp")
178 }
179 _runLoadActiveCallDevice(t, e) {
180 return this.input.get("@keet/call-devices", { callKey: t, deviceKey: e })
181 }
182 loadLocalRoomInfo() {
183 return (
184 this._loadingLocalRoomInfo ||
185 ((this._loadingLocalRoomInfo = this.output.get("@local/rooms", { roomKey: this.base.key })),
186 this._loadingLocalRoomInfo.catch(i)),
187 this._loadingLocalRoomInfo
188 )
189 }
190 loadLocalPrivateProfileInfo() {
191 return (
192 this._loadingLocalPrivateProfileInfo ||
193 ((this._loadingLocalPrivateProfileInfo = this._runLoadLocalPrivateProfileInfo()),
194 this._loadingLocalPrivateProfileInfo.catch(i)),
195 this._loadingLocalPrivateProfileInfo
196 )
197 }
198 loadLocalIdentityInfo() {
199 return (
200 this._loadingLocalIdentityInfo ||
201 ((this._loadingLocalIdentityInfo = this.output.get("@local/identity")),
202 this._loadingLocalIdentityInfo.catch(i)),
203 this._loadingLocalIdentityInfo
204 )
205 }
206 loadDigest() {
207 return (
208 this._loadingDigest ||
209 ((this._loadingDigest = this.input.get("@keet/system-digest")),
210 this._loadingDigest.catch(i)),
211 this._loadingDigest
212 )
213 }
214 loadConfig() {
215 return (
216 this._loadingConfig ||
217 ((this._loadingConfig = this._runLoadConfig()), this._loadingConfig.catch(i)),
218 this._loadingConfig
219 )
220 }
221 loadCapabilities() {
222 return (
223 this._loadingCapabilities ||
224 ((this._loadingCapabilities = this.input.get("@keet/room-capabilities")),
225 this._loadingCapabilities.catch(i)),
226 this._loadingCapabilities
227 )
228 }
229 loadPrimaryThread() {
230 return (
231 this._loadingPrimaryThread ||
232 ((this._loadingPrimaryThread = this.input.get("@keet/threads", { id: 0 })),
233 this._loadingPrimaryThread.catch(i)),
234 this._loadingPrimaryThread
235 )
236 }
237 loadSelfDevice() {
238 return (
239 this._loadingSelfDevice ||
240 ((this._loadingSelfDevice = this.input.get("@keet/devices", { key: this.base.local.key })),
241 this._loadingSelfDevice.catch(i)),
242 this._loadingSelfDevice
243 )
244 }
245 loadSelfMember() {
246 return (
247 this._loadingSelfMember ||
248 ((this._loadingSelfMember = this._runLoadSelfMember()), this._loadingSelfMember.catch(i)),
249 this._loadingSelfMember
250 )
251 }
252 loadLastMessage() {
253 return (
254 this._loadingLastMessage ||
255 ((this._loadingLastMessage = this._runLoadLastMessage()),
256 this._loadingLastMessage.catch(i)),
257 this._loadingLastMessage
258 )
259 }
260 loadDMMembers() {
261 return (
262 this._loadingDMMembers ||
263 ((this._loadingDMMembers = this._runLoadDMMembers()), this._loadingDMMembers.catch(i)),
264 this._loadingDMMembers
265 )
266 }
267 loadIdentity() {
268 return (
269 this._loadingIdentity ||
270 ((this._loadingIdentity = this.input.get("@keet-private-id/identity")),
271 this._loadingIdentity.catch(i)),
272 this._loadingIdentity
273 )
274 }
275 loadChatChanges() {
276 return (
277 this._loadingChatChanges ||
278 ((this._loadingChatChanges = this._runLoadChatChanges()),
279 this._loadingChatChanges.catch(i)),
280 this._loadingChatChanges
281 )
282 }
283 loadContactChanges() {
284 return (
285 this._loadingContactChanges ||
286 ((this._loadingContactChanges = this._runLoadContactChanges()),
287 this._loadingContactChanges.catch(i)),
288 this._loadingContactChanges
289 )
290 }
291 loadSharedRoomChanges() {
292 return (
293 this._loadingSharedRoomChanges ||
294 ((this._loadingSharedRoomChanges = this._runLoadSharedRoomChanges()),
295 this._loadingSharedRoomChanges.catch(i)),
296 this._loadingSharedRoomChanges
297 )
298 }
299 loadPendingInvitations() {
300 return (
301 this._loadingPendingInvitations ||
302 ((this._loadingPendingInvitations = this._runLoadPendingInvitations()),
303 this._loadingPendingInvitations.catch(i)),
304 this._loadingPendingInvitations
305 )
306 }
307 loadLatestMessages() {
308 return (
309 this._loadingLatestMessages ||
310 ((this._loadingLatestMessages = this._runLoadLatestMessages()),
311 this._loadingLatestMessages.catch(i)),
312 this._loadingLatestMessages
313 )
314 }
315 loadLatestMembers() {
316 return (
317 this._loadingLatestMembers ||
318 ((this._loadingLatestMembers = this._runLoadLatestMembers()),
319 this._loadingLatestMembers.catch(i)),
320 this._loadingLatestMembers
321 )
322 }
323 loadReadLengths() {
324 return (
325 this._loadingReadLengths ||
326 ((this._loadingReadLengths = this._runLoadReadLengths()),
327 this._loadingReadLengths.catch(i)),
328 this._loadingReadLengths
329 )
330 }
331 loadActiveCall() {
332 return (
333 this._loadingActiveCall ||
334 ((this._loadingActiveCall = this._runLoadActiveCall()), this._loadingActiveCall.catch(i)),
335 this._loadingActiveCall
336 )
337 }
338 loadActiveCallDevice(t, e) {
339 return (
340 this._loadingActiveCallDevice ||
341 ((this._loadingActiveCallDevice = this._runLoadActiveCallDevice(t, e)),
342 this._loadingActiveCallDevice.catch(i)),
343 this._loadingActiveCallDevice
344 )
345 }
346 loadPreferences() {
347 return (
348 this._loadingPreferences ||
349 ((this._loadingPreferences = this.local.get("@local/room-preferences", {
350 roomKey: this.base.key,
351 })),
352 this._loadingPreferences.catch(i)),
353 this._loadingPreferences
354 )
355 }
356 async loadMessage(t) {
357 const [e, i] = await Promise.all([
358 this.input.get("@keet/chat", { id: t }),
359 this.input.get("@keet/reaction-digests", { id: t }),
360 ])
361 if (!e) return null
362 const a = e.message?.files,
363 n = !!a && a.length > 0,
364 [o, r, d] = await Promise.all([
365 this.input.get("@keet/devices", { key: e.oplog.key }),
366 h(this.input, e.oplog.key),
367 n ? this._loadFiles(a) : null,
368 ])
369 if (!r) throw s.CORRUPT("Last chat message does not have a member")
370 return (
371 r.profile.avatar && (await l(this.inputBlobs, r.profile.avatar)),
372 d && (e.message.files = d),
373 { message: e, reactions: i, device: o, member: r }
374 )
375 }
376}
keet-core-4.14.4-pretty/lib/core/sync/updater.js +482 -0
……@@ -0,0 +1,482 @@
1const e = require("ready-resource"),
2 t = require("safety-catch"),
3 s = require("b4a"),
4 i = require("./loader"),
5 { KeetContract: a } = require("../contract"),
6 {
7 contract: {
8 hyperschema: { getEnum: o },
9 },
10 } = require("../../../schema/spec"),
11 {
12 verifyIdentityProofs: n,
13 generateRoomCapabilities: r,
14 generateIdentityPairingName: l,
15 } = require("../invitations"),
16 { RoomStatus: h } = require("../contract/identity/private"),
17 { KeetErrorV2: c } = require("../../errors"),
18 d = o("@keet/room-type"),
19 u = "insert",
20 m = 16
21function f(e, t) {
22 return s.equals(e.oplog.key, t.oplog.key) && e.oplog.seq === t.oplog.seq
23}
24module.exports = class extends e {
25 constructor(e, t, s, i) {
26 ;(super(),
27 (this.keet = e),
28 (this.swarm = e.swarm),
29 (this.local = e.local),
30 (this.view = t),
31 (this.base = s),
32 (this.changes = i),
33 (this.isCurrentPrivateProfile = !1),
34 (this.currentPrivateProfileInfo = null),
35 (this.currentIdentityInfo = null),
36 (this.currentWriterInfo = null),
37 (this.currentRoomInfo = null),
38 (this.roomInfo = null),
39 (this.updated = !1),
40 (this.updates = {
41 cache: null,
42 tasks: null,
43 contacts: null,
44 dispatches: null,
45 shouldUpgrade: !1,
46 profileDispatches: null,
47 unreadKeys: !1,
48 activeCall: null,
49 activeCallDevice: null,
50 activeCallSynced: !1,
51 sharedRooms: null,
52 sharedPreferences: null,
53 pendingInvitations: null,
54 startIdentitySwap: null,
55 attemptIdentitySwap: null,
56 finishIdentitySwap: null,
57 logout: !1,
58 }),
59 (this.events = []),
60 (this._loader = null),
61 (this._running = null))
62 }
63 _open() {
64 return ((this._loader = new i(this.local, this.view, this.base)), this._loader.ready())
65 }
66 async _close() {
67 this._loader && (await this._loader.close())
68 }
69 async _syncDigest(e) {
70 if ((e || (e = await this._loader.loadDigest()), e)) {
71 if (!this.keet.isValidBuildType(e)) throw c.INVALID_BUILD_TYPE()
72 ;(this.events.push({ type: "v2:room-digest-changed", value: e }), (this.roomInfo.digest = e))
73 }
74 }
75 async _syncConfig() {
76 const e = await this._loader.loadConfig()
77 e &&
78 (this.events.push({ type: "v2:room-config-changed", value: e }), (this.roomInfo.config = e))
79 }
80 async _syncRoomCapabilities(e) {
81 ;(e || (e = await this._loader.loadCapabilities()),
82 e &&
83 ((this.roomInfo.seed && s.equals(this.roomInfo.seed, e.seed)) ||
84 (this.events.push({ type: "v2:room-capabilities-changed", value: e }),
85 (this.roomInfo.seed = e.seed),
86 (this.roomInfo.capabilities = r(this.base.key, e.seed)))))
87 }
88 async _syncSelf() {
89 const [e, t, s] = await Promise.all([
90 this._loader.loadDigest(),
91 this._loader.loadSelfDevice(),
92 this._loader.loadSelfMember(),
93 ])
94 if (
95 ((this.roomInfo.selfDevice = t),
96 (this.roomInfo.selfMember = s),
97 !e || e.settings.roomType !== d.DirectMessage)
98 )
99 return
100 const [i, a] = await Promise.all([this._loader.loadConfig(), this._loader.loadDMMembers()])
101 ;((this.roomInfo.config = i), (this.roomInfo.dm = a))
102 }
103 async _syncSelfMember(e) {
104 if (
105 (this.events.push({ type: "v2:room-member-changed", value: e }),
106 !e || s.equals(e.key, this.currentIdentityInfo.publicKey))
107 )
108 return this._syncSelf()
109 }
110 async _syncDevice(e) {
111 if (
112 (this.events.push({ type: "v2:room-device-changed", value: e }),
113 !e || s.equals(e.key, this.base.local.key))
114 )
115 return this._syncSelf()
116 }
117 _setLastMessage(e) {
118 ;(this.events.push({ type: "v2:room-last-message-changed", value: e }),
119 (this.roomInfo.lastMessage = e.message),
120 (this.roomInfo.lastMember = e.member),
121 (this.roomInfo.lastMessageReactions = e.reactions),
122 (this.updates.cache = { member: e.member, device: e.device }))
123 const t = this.currentRoomInfo?.lastMessage
124 ;(t && f(t, e.message)) || (this.updates.chat = e.message)
125 }
126 async _syncLastMessage() {
127 const e = await this._loader.loadLastMessage()
128 e && this._setLastMessage(e)
129 }
130 async _syncMessage(e) {
131 if (!e) return
132 const [t, s] = await Promise.all([
133 this._loader.loadPrimaryThread(),
134 this._loader.loadMessage(e.id),
135 ])
136 ;(0 === e.id.thread && e.id.index === t.count - 1 && this._setLastMessage(s),
137 this.events.push({ type: "v2:room-chat-changed", value: s }))
138 }
139 async _syncReactions(e) {
140 const t = await this._loader.input.get("@keet/chat", { id: e.id })
141 this.events.push({ type: "v2:room-reactions-changed", value: { id: t.oplog, reactions: e } })
142 }
143 _syncJoinRequests(e) {
144 this.events.push({ type: "v2:room-join-requests-changed", value: e })
145 }
146 async _syncReadLengths() {
147 const e = await this._loader.loadReadLengths()
148 e?.length &&
149 (this.events.push({ type: "v2:read-lengths-changed", value: e }),
150 (this.roomInfo.readLengths = e))
151 }
152 async _syncActiveCall() {
153 ;((this.updates.activeCallSynced = !0), (this.roomInfo.activeCall = null))
154 const e = await this._loader.loadActiveCall()
155 if (e) {
156 const t = e.callKey,
157 s = this.base.local.key,
158 i = await this._loader.loadActiveCallDevice(t, s),
159 a = i ? i.deviceKey : null
160 ;((this.updates.activeCallDevice = i),
161 (this.roomInfo.activeCall = { callKey: t, selfDeviceKey: a }))
162 }
163 this.updates.activeCall = e
164 }
165 async _syncPreferences() {
166 const e = await this._loader.loadPreferences()
167 e && (this.roomInfo.preferences = e.status)
168 }
169 async _syncStats(e) {
170 ;(e || (e = await this._loader.loadPrimaryThread()),
171 e &&
172 (this.events.push({ type: "v2:room-stats-changed", value: e }),
173 (this.roomInfo.stats = e.stats)))
174 }
175 async _syncRoomIdentity(e) {
176 ;(e || (e = await this._loader.loadIdentity()),
177 e &&
178 (this.events.push({ type: "v2:room-identity-changed", value: e }),
179 (this.roomInfo.identity = e)))
180 }
181 async _syncUnreadAnchors() {
182 this.updates.unreadKeys = !0
183 }
184 async _syncMember(e) {
185 const i = [this._syncSelfMember(e)]
186 this.roomInfo.dm?.length && i.push(this._syncConfig().catch(t))
187 const { lastMember: a } = this.roomInfo
188 ;(a && s.equals(a.key, e.key) && i.push(this._syncLastMessage().catch(t)), await Promise.all(i))
189 }
190 async _incrementalRoomInfoLoad(e, s) {
191 const i = [],
192 a = ["@keet/calls", "@keet/call-devices", "@keet/call-members"]
193 for await (const { type: o, collection: n, value: r } of this._loader.input.changes({
194 gte: e,
195 lt: s,
196 })) {
197 if (!a.includes(n) && o !== u) continue
198 let e = null
199 switch (n) {
200 case "@keet/system-digest":
201 e = this._syncDigest(r)
202 break
203 case "@keet/room-config":
204 e = this._syncConfig()
205 break
206 case "@keet/room-capabilities":
207 e = this._syncRoomCapabilities(r)
208 break
209 case "@keet/members":
210 e = this._syncMember(r)
211 break
212 case "@keet/devices":
213 e = this._syncDevice(r)
214 break
215 case "@keet/chat":
216 e = this._syncMessage(r)
217 break
218 case "@keet/reaction-digests":
219 e = this._syncReactions(r)
220 break
221 case "@keet/threads":
222 e = this._syncStats(r)
223 break
224 case "@keet-private-id/identity":
225 e = this._syncRoomIdentity(r)
226 break
227 case "@keet/join-requests":
228 e = this._syncJoinRequests(r)
229 break
230 case "@keet-private-id/unreads-v2":
231 case "@keet-private-id/unreads":
232 e = this._syncUnreadAnchors()
233 break
234 case "@keet/read-lengths":
235 e = this._syncReadLengths()
236 break
237 case "@keet/calls":
238 case "@keet/call-devices":
239 case "@keet/call-members":
240 e = this._syncActiveCall()
241 break
242 default:
243 continue
244 }
245 e && (e.catch(t), i.push(e))
246 }
247 return (await Promise.all(i), !!this.roomInfo.digest)
248 }
249 async _fullRoomInfoLoad() {
250 return (
251 this.events.push({ type: "v2:room-fast-forward" }),
252 (this.roomInfo = {
253 roomKey: this.base.key,
254 discoveryKey: this.base.discoveryKey,
255 encryptionKey: this.base.encryptionKey,
256 digest: null,
257 stats: null,
258 fork: 0,
259 length: 0,
260 timestamps: { creation: 0, latestActivity: 0, latestChatMessage: 0 },
261 status: null,
262 mailbox: null,
263 selfDevice: null,
264 selfMember: null,
265 config: null,
266 capabilities: null,
267 identity: null,
268 lastMessage: null,
269 lastMember: null,
270 lastMessageReactions: null,
271 dm: null,
272 activeCall: null,
273 preferences: null,
274 }),
275 await Promise.all([
276 this._syncDigest(null),
277 this._syncRoomCapabilities(null),
278 this._syncDevice(null),
279 this._syncMember(null),
280 this._syncStats(null),
281 this._syncRoomIdentity(null),
282 this._syncUnreadAnchors(),
283 this._syncConfig(),
284 this._syncReadLengths(),
285 this._syncLastMessage(),
286 this._syncActiveCall(),
287 this._syncPreferences(),
288 ]),
289 !!this.roomInfo.digest
290 )
291 }
292 async _loadPrivateProfileChanges() {
293 let e = null
294 if (this.isCurrentPrivateProfile && this.roomInfo.selfDevice) {
295 const t = this.changes.get(a.DB_VIEW_NAME)
296 ;((this._loader.shared = this.currentRoomInfo?.selfDevice ? t.shared : 1),
297 (e = await Promise.all([
298 this._loader.loadContactChanges(),
299 this._loader.loadSharedRoomChanges(),
300 this._loader.loadPendingInvitations(),
301 ])))
302 }
303 e &&
304 ((this.updates.contacts = e[0]),
305 (this.updates.sharedRooms = e[1]),
306 (this.updates.pendingInvitations = e[2]))
307 }
308 async _loadLocalInfo() {
309 const [e, t, i] = await Promise.all([
310 this._loader.loadLocalRoomInfo(),
311 this._loader.loadLocalIdentityInfo(),
312 this._loader.loadLocalPrivateProfileInfo(),
313 ])
314 ;((this.currentRoomInfo = e),
315 (this.roomInfo = { ...this.currentRoomInfo }),
316 (this.currentIdentityInfo = t),
317 (this.currentPrivateProfileInfo = i),
318 (this.isCurrentPrivateProfile = !!t && s.equals(t.privateProfileKey, this.base.key)))
319 const a = this.currentIdentityInfo?.swapV2
320 return (
321 !a ||
322 !s.equals(a.privateProfileKey, this.base.key) ||
323 ((this.updates.attemptIdentitySwap = a), !0)
324 )
325 }
326 async _load() {
327 let [e, t] = await Promise.all([
328 this._loadLocalInfo(),
329 this.base.system.get(this.base.local.key),
330 ])
331 if (this.closing || !e) return !1
332 if (this.updates.attemptIdentitySwap) {
333 const e = this.updates.attemptIdentitySwap,
334 t = e.writerKey,
335 [i, a, o] = await Promise.all([
336 this._loader.input.get("@keet-private-id/device-identities", { deviceKey: t }),
337 this._loader.input.get("@keet/devices", { key: t }),
338 this.local.get("@local/rooms", { roomKey: this.base.key }),
339 ])
340 if (!i || !a || !n(e, i)) return !1
341 const r = i.deviceProof,
342 h = l(e.publicKey),
343 c = await this.keet.store.createKeyPair(h)
344 if (!s.equals(c.publicKey, e.devicePublicKey)) return !1
345 ;((this.isCurrentPrivateProfile = !0),
346 (this.currentPrivateProfileInfo = o),
347 (this.currentIdentityInfo = this.currentIdentityInfo.swapV2),
348 (this.updates.finishIdentitySwap = {
349 publicKey: this.updates.attemptIdentitySwap.publicKey,
350 privateProfileKey: this.base.key,
351 deviceKeyPair: c,
352 deviceProof: r,
353 status: { isConfirmed: !0 },
354 }))
355 }
356 this.currentWriterInfo = t
357 let i = null
358 if (this.changes && this.currentRoomInfo) {
359 const e = this.changes.get("_system")
360 if (e.to - e.shared < m) {
361 const e = this.changes.get("keet/v3/db")
362 i = { from: e.shared, to: e.to }
363 }
364 }
365 if (
366 ((e = !1),
367 (e = i ? await this._incrementalRoomInfoLoad(i.from, i.to) : await this._fullRoomInfoLoad()),
368 !e)
369 )
370 return !1
371 ;(this.events.push({ type: "v2:room-changed" }),
372 (this.roomInfo.length = this._loader.core.length),
373 (this.roomInfo.fork = this._loader.core.fork),
374 this.isCurrentPrivateProfile && (await this._loadPrivateProfileChanges()))
375 const a = !!this.roomInfo.selfMember?.status.isRemoved,
376 o = !!this.roomInfo.selfMember?.status.isActive,
377 r = !!this.roomInfo.selfDevice?.status.isActive,
378 h = a || (!r && !!this.currentWriterInfo),
379 c = this.base.writable && r && o,
380 d = !!this.roomInfo.identity
381 return (
382 (this.roomInfo.status = { isWritable: c, isReadable: !0, isPrivateProfile: d, isRemoved: h }),
383 (this.roomInfo.timestamps.latestSync = Date.now()),
384 (this.roomInfo.timestamps.creation = this.roomInfo.digest.creationTime),
385 this.roomInfo.lastMessage &&
386 (this.roomInfo.timestamps.latestChatMessage = this.roomInfo.lastMessage.timestamp),
387 !0
388 )
389 }
390 _shouldUpgrade() {
391 return (
392 (this.roomInfo.selfMember.status.isModerator &&
393 !(this.roomInfo.digest.abi.version >= this.keet.abi.autoupgrade)) ||
394 null
395 )
396 }
397 _generateMemberUpdate() {
398 const e = this.currentPrivateProfileInfo.selfMember,
399 t = this.roomInfo.selfMember,
400 s = t.profile.timestamp > 0,
401 i = e.profile.timestamp <= t.profile.timestamp
402 if (!e?.profile || (s && i)) return null
403 const a = { identity: this.currentIdentityInfo, privateProfile: this.currentPrivateProfileInfo }
404 return { type: "@keet/update-member", op: { member: this.keet.internalGetMemberUpdate(a) } }
405 }
406 _generatePrivateProfileDispatches() {
407 ;((this.updates.profileDispatches = []),
408 this.updates.profileDispatches.push({
409 type: "@keet-private-id/update-room-status",
410 op: { roomKey: this.roomInfo.roomKey, key: h.IsActive, status: { isActive: !1 } },
411 }))
412 }
413 _generateDispatches() {
414 if (
415 ((this.updates.dispatches = []),
416 (this.updates.shouldUpgrade = this._shouldUpgrade()),
417 !this.currentPrivateProfileInfo?.selfMember)
418 )
419 return
420 const e = this._generateMemberUpdate()
421 e && this.updates.dispatches.push(e)
422 }
423 _generateTasks() {
424 if (this.updates.sharedRooms) {
425 ;((this.updates.tasks = []), (this.updates.sharedPreferences = []))
426 for (const e of this.updates.sharedRooms) {
427 const t = e.mailbox
428 if (e.identitySwapV2) {
429 ;((this.updates.startIdentitySwap = {
430 ...e.identitySwapV2,
431 privateProfileKey: e.roomKey,
432 }),
433 (this.updates.tasks = [this.keet.tasks.joinRoomKeys(t, { keys: e })]))
434 break
435 }
436 ;(e.status.isActive
437 ? this.updates.tasks.push(this.keet.tasks.joinRoomKeys(t, { keys: e }))
438 : this.updates.tasks.push(this.keet.tasks.leaveRoom(t, { roomKey: e.roomKey })),
439 this.updates.sharedPreferences.push({ roomKey: e.roomKey, status: e.status }))
440 }
441 if (!this.updates.startIdentitySwap && this.updates.pendingInvitations)
442 for (const e of this.updates.pendingInvitations)
443 this.updates.tasks.push(this.keet.tasks.joinRoomInvitation(e.mailbox, { invitation: e }))
444 }
445 }
446 async _maybeUpdateOpenRooms(e) {
447 try {
448 const t = this.currentRoomInfo?.selfMember?.profile.timestamp || 0
449 if (!this.roomInfo?.selfMember || t >= this.roomInfo.selfMember.profile.timestamp) return
450 const i = {
451 profile: this.roomInfo.selfMember.profile,
452 attestation: {
453 memberKey: this.roomInfo.selfMember.key,
454 proof: this.roomInfo.selfMember.proofs.profileAttestation,
455 },
456 },
457 a = []
458 for (const t of this.keet.rooms.values())
459 s.equals(t.key, e) || a.push(t.dispatch("@keet/update-member", { member: i }))
460 await Promise.allSettled(a)
461 } catch (e) {
462 this.keet.onerror(e)
463 }
464 }
465 async _run() {
466 if ((this.opened || (await this.ready()), !(await this._load()) || this.closing)) return !1
467 ;(this.roomInfo.status.isWritable && this._generateDispatches(),
468 this.isCurrentPrivateProfile &&
469 (this.roomInfo.selfDevice?.status.isActive
470 ? (this._generateTasks(), this._maybeUpdateOpenRooms(this.base.key))
471 : (this.changes.logout = !0)))
472 const e = this.roomInfo.selfMember,
473 t = this.currentRoomInfo?.selfMember
474 return (
475 e?.status.isRemoved && !t?.status.isRemoved && this._generatePrivateProfileDispatches(),
476 !0
477 )
478 }
479 run() {
480 return (this._running || ((this._running = this._run()), this._running.catch(t)), this._running)
481 }
482}
keet-core-4.14.4-pretty/lib/core/tasks/contacts/request.js +292 -0
……@@ -0,0 +1,292 @@
1const e = require("hypercore-crypto"),
2 t = require("signal-promise"),
3 i = require("safety-catch"),
4 { Task: o } = require("../task"),
5 { restoreAvatar: s } = require("../../contract/avatars"),
6 {
7 contract: {
8 hyperschema: { getEnum: r },
9 },
10 } = require("../../../../schema/spec"),
11 {
12 getWriterKey: a,
13 createContactRequestOperation: n,
14 generateRoomCapabilities: m,
15 generatePairingCapabilities: h,
16 } = require("../../invitations"),
17 l = r("@keet/room-type")
18module.exports = class extends o {
19 constructor(e) {
20 super(e)
21 const t = this.description.sendContactRequest
22 ;((this._roomKey = t.roomKey),
23 (this._memberKey = t.memberKey),
24 (this._message = t.message),
25 (this._contactInfo = t.contactInfo),
26 (this._member = null),
27 (this._contact = null),
28 (this._writerInfo = null),
29 (this._contactRoomInfo = null),
30 (this._privateContactRoom = null),
31 (this._selfMember = null),
32 (this._targetMember = null),
33 (this._roomMailbox = null),
34 (this._memberMailbox = null),
35 (this._memberMailboxDiscoveryKey = null),
36 (this._core = null),
37 (this._dmRoom = null),
38 (this._memberRoom = null),
39 (this._privateProfile = null),
40 (this._wakeupSession = null),
41 (this._watcher = null),
42 (this._privateProfileWatcher = null))
43 }
44 async _close() {
45 ;(this._dmRoom &&
46 (this._watcher && this._dmRoom.db.unwatch(this._watcher),
47 this.keet.internalReleaseRoom(this._dmRoom)),
48 this._memberRoom && this.keet.internalReleaseRoom(this._memberRoom),
49 this._privateProfile &&
50 (this._privateProfileWatcher &&
51 this._privateProfile.db.unwatch(this._privateProfileWatcher),
52 this.keet.internalReleaseRoom(this._privateProfile)),
53 this._wakeupSession && this._wakeupSession.destroy())
54 }
55 async _createRoom() {
56 const t = e.keyPair(),
57 i = e.randomBytes(32),
58 o = a(t.publicKey),
59 s = m(o, i),
60 r = { identity: this._identityInfo, privateProfile: this._privateProfileInfo },
61 n = this.keet.internalCreateDeviceUpdate(r, o)
62 return (
63 (this._roomMailbox = s.mailboxKeyPair.publicKey),
64 (this._dmRoom = await this.keet.internalCreateRoom({
65 settings: { roomType: l.DirectMessage },
66 initialMembers: [this._selfMember, this._targetMember],
67 bootstrapDevice: n,
68 keyPair: t,
69 seed: i,
70 })),
71 this._message &&
72 (await this._dmRoom.dispatch("@keet/add-chat-message", {
73 message: { text: this._message },
74 })),
75 !0
76 )
77 }
78 async _appendContactRequest() {
79 if (!(await this.keet.internalVerifyOptimisticCore(this._core)) || this.closing) return
80 const e = {
81 message: this._message,
82 sender: this._selfMember,
83 mailbox: this._roomMailbox,
84 keys: { key: this._dmRoom.key, encryptionKey: this._dmRoom.encryptionKey },
85 },
86 t = n(this._memberMailbox, this._identityInfo, e),
87 i = {
88 memberKey: this._memberKey,
89 mailbox: this._memberMailbox,
90 roomKey: this._dmRoom.key,
91 status: { isBlocked: !1 },
92 }
93 return (
94 await Promise.all([
95 this._core.append(t),
96 this._privateProfile.dispatch("@keet-private-id/add-contact", { contact: i }),
97 ]),
98 !0
99 )
100 }
101 async _loadRequestWriter() {
102 if (
103 ((this._writerInfo = await this.local.get("@local/writers", {
104 mailbox: this._memberMailbox,
105 })),
106 this._writerInfo)
107 )
108 return
109 const t = e.keyPair(),
110 i = a(t.publicKey)
111 this._writerInfo = { mailbox: this._memberMailbox, keyPair: t, key: i }
112 const o = await this.keet.internalEnterLocalTransaction()
113 try {
114 ;(await o.insert("@local/writers", this._writerInfo), await o.flush())
115 } finally {
116 await this.keet.internalExitLocalTransaction()
117 }
118 }
119 _getQueryRange() {
120 return {
121 gte: { contact: this._targetMember.attestation.memberKey },
122 lte: { contact: this._targetMember.attestation.memberKey },
123 }
124 }
125 async _load() {
126 if (
127 (this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready()),
128 (this._identityInfo = await this.local.get("@local/identity")),
129 this.closing)
130 )
131 return !1
132 const e = this._identityInfo.privateProfileKey
133 if (
134 ((this._privateProfileInfo = await this.local.get("@local/rooms", { roomKey: e })),
135 this.closing)
136 )
137 return !1
138 if (
139 ((this._privateProfile = this.keet.internalOpenExistingRoom(e)),
140 await this._privateProfile.ready(),
141 this.closing)
142 )
143 return !1
144 let t = !1
145 return (
146 (t = this._contactInfo ? await this._useContactInfo() : await this._useRoomKey()),
147 !(
148 !this._targetMember?.profile?.displayName ||
149 (await this._loadRequestWriter(),
150 this.closing ||
151 ((this._core = this.store.get({ keyPair: this._writerInfo.keyPair })),
152 await this._core.ready(),
153 this.closing ||
154 ((this._privateContactRoom = await this._privateProfile.db.findOne(
155 "@keet-private-id/rooms-by-contact",
156 this._getQueryRange(),
157 )),
158 (!t || this._privateContactRoom) && (await this._waitForMember(), 1))))
159 )
160 )
161 }
162 async _useContactInfo() {
163 const e = await this._privateProfile.db.get("@keet-private-id/contacts", {
164 memberKey: this._memberKey,
165 })
166 if (
167 ((this._contact = e),
168 (this._memberMailbox = this._contactInfo.profile.mailbox),
169 (this._member = null),
170 (this._memberProofs = null),
171 (this._memberPairingCapabilities = h(this._memberMailbox)),
172 (this._targetMember = {
173 profile: this._contactInfo.profile,
174 attestation: this._contactInfo.attestation,
175 }),
176 e?.roomKey &&
177 (this._contactRoomInfo = await this._privateProfile.db.get("@keet-private-id/rooms", {
178 roomKey: this._contact.roomKey,
179 })),
180 this.closing || this._contactRoomInfo?.status.isActive)
181 )
182 return !1
183 const t = this._privateProfileInfo.selfMember
184 return (
185 (this._selfMember = {
186 profile: t.profile,
187 attestation: { memberKey: t.key, proof: t.proofs.profileAttestation },
188 }),
189 !0
190 )
191 }
192 async _useRoomKey() {
193 if (
194 ((this._memberRoom = this.keet.internalOpenExistingRoom(this._roomKey)),
195 await this._memberRoom.ready(),
196 this.closing)
197 )
198 return !1
199 const [e, t, i] = await Promise.all([
200 this._privateProfile.db.get("@keet-private-id/contacts", { memberKey: this._memberKey }),
201 this._memberRoom.db.get("@keet/members", { key: this._memberKey }),
202 this._memberRoom.db.get("@keet/member-proofs", { key: this._memberKey }),
203 ])
204 if (
205 ((this._contact = e),
206 (this._member = t),
207 (this._memberProofs = i),
208 (this._memberMailbox = this._member.profile.mailbox),
209 (this._memberPairingCapabilities = h(this._memberMailbox)),
210 this.closing || !t || !i)
211 )
212 return !1
213 if (
214 ((this._targetMember = {
215 profile: this._member.profile,
216 attestation: { memberKey: this._member.key, proof: this._memberProofs.profileAttestation },
217 }),
218 e?.roomKey &&
219 (this._contactRoomInfo = await this._privateProfile.db.get("@keet-private-id/rooms", {
220 roomKey: this._contact.roomKey,
221 })),
222 this.closing || this._contactRoomInfo?.status.isActive)
223 )
224 return !1
225 const o = this._privateProfileInfo.selfMember
226 return (
227 (this._selfMember = {
228 profile: o.profile,
229 attestation: { memberKey: o.key, proof: o.proofs.profileAttestation },
230 }),
231 this._targetMember.profile.avatar &&
232 (await s(this._memberRoom.blobs, this._targetMember.profile.avatar)),
233 !0
234 )
235 }
236 async _waitForMember() {
237 if (!this._dmRoom) {
238 const e = this._privateContactRoom?.roomKey || this._contact.roomKey
239 this._dmRoom = this.keet.internalOpenExistingRoom(e)
240 }
241 this.swarmWorker.startActiveSwarming(this._memberPairingCapabilities.swarmTopic)
242 const e = (e) => {
243 this._wakeupSession.announce(e, [{ key: this._core.key, length: this._core.length }])
244 }
245 this._wakeupSession = this.keet.protomuxWakeup.session(this._memberMailbox, {
246 discoveryKey: this._memberPairingCapabilities.wakeupTopic,
247 onpeeractive: e,
248 })
249 for (const t of this._wakeupSession.peers) t.active && e(t)
250 ;(this.keet.blindPeering.addCoreBackground(this._core, {
251 target: this._memberMailbox,
252 referrer: this._memberMailbox,
253 priority: 1,
254 }),
255 (this._signal = new t()),
256 (this._watcher = async () => {
257 try {
258 const e = this._targetMember.attestation.memberKey
259 ;(await this._dmRoom.db.findOne("@keet/devices-by-member-key", {
260 gte: { memberKey: e },
261 lte: { memberKey: e },
262 })) && this._signal.notify()
263 } catch (e) {
264 i(e)
265 }
266 }),
267 this._dmRoom.db.watch(this._watcher),
268 this._watcher(),
269 (this._privateProfileWatcher = async () => {
270 try {
271 const e = await await this._privateProfile.db.get("@keet-private-id/rooms", {
272 roomKey: this._dmRoom.key,
273 })
274 e && !1 === e.status.isActive && this._signal.notify()
275 } catch (e) {
276 i(e)
277 }
278 }),
279 this._privateProfile.db.watch(this._privateProfileWatcher),
280 this._privateProfileWatcher(),
281 await this._signal.wait(),
282 this.swarmWorker.stopActiveSwarming(this._memberPairingCapabilities.swarmTopic))
283 }
284 async _run() {
285 const e = await this._load()
286 if (this.closing || !e) return
287 const t = await this._createRoom()
288 if (this.closing || !t) return
289 const i = await this._appendContactRequest()
290 !this.closing && i && (await this._waitForMember())
291 }
292}
keet-core-4.14.4-pretty/lib/core/tasks/identity/restore.js +180 -0
……@@ -0,0 +1,180 @@
1const e = require("keet-identity-key"),
2 i = require("hypercore-crypto"),
3 t = require("b4a"),
4 { mnemonicToEntropy: r } = require("bip39-mnemonic"),
5 { Task: s } = require("../task"),
6 { getWriterKey: o, generateRoomCapabilities: a } = require("../../invitations"),
7 n = 1711547109544
8module.exports = class extends s {
9 constructor(e) {
10 super(e)
11 const i = this.description.restoreIdentity
12 ;((this.swarmWorker = this.keet.swarmWorker),
13 (this.store = this.keet.store),
14 (this._mnemonic = i.mnemonic),
15 (this._recover = i.recover),
16 (this._profileDiscoveryTimeout = i.profileDiscoveryTimeout),
17 (this._discoveredProfileInfo = null),
18 (this._currentIdentityInfo = null),
19 (this._currentPrivateProfileInfo = null),
20 (this._newIdentityInfo = null),
21 (this._newPrivateProfile = null),
22 (this._newMailbox = null),
23 (this._identity = null),
24 (this._deviceProof = null),
25 (this._deviceKeyPair = null),
26 (this._privateProfileKey = null),
27 (this._mailboxKey = null),
28 (this._joinTask = null))
29 }
30 async _close() {
31 this._newPrivateProfile && this.keet.internalReleaseRoom(this._newPrivateProfile)
32 }
33 _maybeEmitEvents() {
34 this.keet.emit("identity-changed")
35 }
36 async _refreshSwarming() {
37 ;(this._currentPrivateProfileInfo &&
38 this.swarmWorker.stopActiveSwarming(this._currentPrivateProfileInfo.capabilities.swarmTopic),
39 this.swarmWorker.startActiveSwarming(this._newCapabilities.swarmTopic))
40 }
41 async _recoverPrivateProfile() {
42 if (
43 (await this.keet.swarm.flush(),
44 await new Promise((e) => setTimeout(e, this._profileDiscoveryTimeout)),
45 !this.keet.discoveryCore.length)
46 )
47 return !1
48 const e = await this.keet.discoveryCore.get(this.keet.discoveryCore.length - 1)
49 return (
50 !!e &&
51 ((this._newIdentityInfo.privateProfileKey = e.key),
52 (this._privateProfileKey = e.key),
53 (this._mailboxKey = e.mailbox),
54 !0)
55 )
56 }
57 async _createInitialKeyPairs() {
58 return (
59 (this._deviceKeyPair = await this.store.createKeyPair(this._identity.identityPublicKey)),
60 !this.closing &&
61 ((this._deviceProof = await this._identity.bootstrap(this._deviceKeyPair.publicKey)),
62 !this.closing &&
63 ((this._newIdentityInfo = {
64 publicKey: this._identity.identityPublicKey,
65 privateProfileKey: null,
66 deviceKeyPair: this._deviceKeyPair,
67 deviceProof: this._deviceProof,
68 entropy: r(this._mnemonic),
69 status: { isConfirmed: !1 },
70 }),
71 !0))
72 )
73 }
74 async _createNewPrivateProfile() {
75 const e = i.randomBytes(32),
76 t = i.keyPair(),
77 r = o(t.publicKey),
78 s = a(r, e)
79 ;((this._newCapabilities = s),
80 (this._newMailbox = s.mailboxKeyPair.publicKey),
81 (this._newIdentityInfo.privateProfileKey = r),
82 (this._privateProfileKey = r))
83 const l = { identity: this._newIdentityInfo, privateProfile: this._currentPrivateProfileInfo },
84 h = this.keet.internalCreateDeviceUpdate(l, r, { isPrivateProfile: !0 }),
85 y = [this.keet.internalCreateMemberUpdate(l, { profile: { mailbox: this._newMailbox } })],
86 c = {
87 publicKey: this._identity.identityPublicKey,
88 discoveryCoreKey: this.keet.discoveryCore.key,
89 },
90 _ = this._identity.getEncryptionKey(r)
91 this._newPrivateProfile = await this.keet.internalCreateRoom({
92 identity: c,
93 isPrivateProfile: !0,
94 bootstrapDevice: h,
95 initialMembers: y,
96 encryptionKey: _,
97 keyPair: t,
98 seed: e,
99 })
100 const P = Math.floor((Date.now() - n) / 1e3)
101 ;(await this.keet.discoveryCore.truncate(this.keet.discoveryCore.length, P),
102 await this.keet.discoveryCore.append({
103 version: 1,
104 timestamp: Date.now(),
105 key: r,
106 mailbox: this._newMailbox,
107 }))
108 }
109 async _joinExistingPrivateProfile() {
110 const e = this._identity.getEncryptionKey(this._privateProfileKey)
111 ;((this._newPrivateProfile = this.keet.internalOpenRoom(this._privateProfileKey, e, {
112 mailbox: this._mailboxKey,
113 })),
114 await this._newPrivateProfile.ready(),
115 await new Promise((e) => setTimeout(e, this._profileDiscoveryTimeout)))
116 const [i, r] = await Promise.all([
117 this._newPrivateProfile.db.get("@keet-private-id/identity"),
118 this._newPrivateProfile.db.get("@keet/room-capabilities"),
119 ])
120 if (!i || !r || !t.equals(i.publicKey, this._identity.identityPublicKey)) return !1
121 this._newCapabilities = a(this._privateProfileKey, r.seed)
122 const s = this._newCapabilities.mailboxKeyPair
123 return (
124 !!s &&
125 ((this._newMailbox = s.publicKey),
126 (this._joinTask = await this.keet.tasks.joinRoomKeys(this._privateProfileKey, {
127 keys: {
128 roomKey: this._privateProfileKey,
129 encryptionKey: e,
130 initiator: { key: this._privateProfileKey, length: 1 },
131 mailbox: this._newCapabilities.mailboxKeyPair.publicKey,
132 status: { isReadOnly: !1 },
133 },
134 })),
135 (this._newIdentityInfo.status.isConfirmed = !0),
136 !0)
137 )
138 }
139 async _load() {
140 const [i, r] = await Promise.all([
141 this.local.get("@local/identity"),
142 e.from({ mnemonic: this._mnemonic }),
143 ])
144 ;((this._identity = r),
145 (this._currentIdentityInfo = i),
146 (this._currentPrivateProfileInfo = null),
147 this._currentIdentityInfo &&
148 (this._currentPrivateProfileInfo = await this.local.get("@local/rooms", {
149 roomKey: i.privateProfileKey,
150 })))
151 const s = i?.publicKey
152 return s && t.equals(s, r.identityPublicKey)
153 }
154 async _save() {
155 const e = await this.keet.internalEnterLocalTransaction()
156 try {
157 ;(await e.insert("@local/identity", this._newIdentityInfo), await e.flush())
158 } finally {
159 await this.keet.internalExitLocalTransaction()
160 }
161 }
162 async _run() {
163 if ((await this._load()) || this.closing) return
164 if (!(await this._createInitialKeyPairs())) return
165 await this.keet.internalCreateDiscoveryCore(this._identity)
166 let e = !1
167 if (this._recover && ((e = await this._recoverPrivateProfile()), this.closing)) return
168 let i = !1
169 if (!e || ((i = await this._joinExistingPrivateProfile()), !this.closing)) {
170 if (!e || !i) {
171 if (this._recover) throw new Error("Could not recover identity from seed phrase")
172 await this._createNewPrivateProfile()
173 }
174 ;(await this._save(),
175 this._joinTask && (await this._joinTask.run()),
176 this._refreshSwarming(),
177 this._maybeEmitEvents())
178 }
179 }
180}
keet-core-4.14.4-pretty/lib/core/tasks/index.js +224 -0
……@@ -0,0 +1,224 @@
1const e = require("ready-resource"),
2 t = require("hypercore-id-encoding"),
3 s = require("scope-lock"),
4 r = require("resolve-reject-promise"),
5 i = require("safety-catch"),
6 {
7 local: {
8 hyperschema: { getEnum: n },
9 },
10 } = require("../../../schema/spec"),
11 { Task: a } = require("./task"),
12 o = n("@local/tasks"),
13 c = require("./rooms/leave"),
14 l = require("./rooms/clear"),
15 h = require("./rooms/create"),
16 u = require("./identity/restore"),
17 d = require("./pairing/invitation"),
18 k = require("./pairing/response"),
19 p = require("./pairing/keys"),
20 y = require("./contacts/request"),
21 m = require("./testing/fast"),
22 _ = require("./testing/slow"),
23 w = require("./testing/error"),
24 g = 10
25class R extends e {
26 constructor(e, s, n) {
27 ;(super(),
28 (this.description = n),
29 (this.manager = e),
30 (this.idx = 0),
31 (this.id = s),
32 (this.keet = this.manager.keet),
33 (this.scope = this.description.discoveryKey),
34 (this.scopeId = t.encode(this.scope)),
35 (this.running = null),
36 (this.waiting = !0),
37 (this.completed = !1),
38 (this._task = null))
39 const { resolve: a, reject: o, promise: c } = r()
40 ;((this._resolve = a), (this._reject = o), (this._promise = c), this._promise.catch(i))
41 }
42 get taskClosing() {
43 return this._task && this._task.closing
44 }
45 async _close() {
46 ;(this._task && (await this._task.close()), this._reject(new Error("Task was cancelled")))
47 }
48 async _run() {
49 if (this.manager.closing) return
50 if (
51 (await this.manager.internalFlushTasks(),
52 (this._task = this._createTask()),
53 await this.manager.internalHandleTaskStarted(this),
54 this.manager.closing)
55 )
56 return
57 this.waiting = !1
58 let e = null,
59 t = null
60 try {
61 e = await this._task.run()
62 } catch (e) {
63 if (this.manager.closing) return
64 t = e
65 } finally {
66 ;((this.completed = !0),
67 await this.manager.internalHandleTaskCompleted(this),
68 t ? this._reject(t) : this._resolve(e))
69 }
70 }
71 _createTask() {
72 switch (this.description.type) {
73 case o.RestoreIdentity:
74 return new u(this)
75 case o.CreateRoom:
76 return new h(this)
77 case o.LeaveRoom:
78 return new c(this)
79 case o.ClearRoom:
80 return new l(this)
81 case o.JoinRoomInvitation:
82 return new d(this)
83 case o.JoinRoomKeys:
84 return new p(this)
85 case o.JoinRoomResponse:
86 return new k(this)
87 case o.SendContactRequest:
88 return new y(this)
89 case o.TestFastTask:
90 return new m(this)
91 case o.TestSlowTask:
92 return new _(this)
93 case o.TestErrorTask:
94 return new w(this)
95 default:
96 throw new Error("Unknown task type: " + this.description.type)
97 }
98 }
99 run() {
100 return (
101 this.running || ((this.running = this._run()), this.running.catch(this.keet.onerror)),
102 this._promise
103 )
104 }
105 runBackground() {
106 this.run().catch(this.keet.onerror)
107 }
108}
109function f(e) {
110 const t = { type: e.type, discoveryKey: e.discoveryKey }
111 return { gte: t, lte: t }
112}
113module.exports = class extends e {
114 constructor(e) {
115 ;(super(),
116 (this.keet = e),
117 (this.local = this.keet.local),
118 (this._flushLock = new s({ debounce: !0 })),
119 (this._scopeLocks = new Map()),
120 (this._handles = []),
121 this.ready().catch(e.onerror))
122 }
123 async _open() {
124 if (!this.keet.readOnly)
125 for await (const e of this.local.find("@local/tasks")) {
126 const t = e.type,
127 s = e.discoveryKey
128 this._createHandle(t, s, e).runBackground()
129 }
130 }
131 _close() {
132 const e = []
133 for (const t of this._handles) e.push(t.close())
134 return Promise.allSettled(e)
135 }
136 async flush() {
137 await this.internalFlushTasks()
138 const e = []
139 for (const t of this._handles) e.push(t.running)
140 await Promise.allSettled(e)
141 }
142 async internalFlushTasks() {
143 if ((await this._flushLock.lock()) && !this.closing)
144 try {
145 const e = await this.keet.internalEnterLocalTransaction()
146 try {
147 let t = !1
148 for (const s of this._handles)
149 s.running &&
150 !s.completed &&
151 ((await e.get("@local/tasks-by-type", s.description)) ||
152 (await e.insert("@local/tasks", s.description), (t = !0)))
153 t && (await e.flush())
154 } finally {
155 await this.keet.internalExitLocalTransaction()
156 }
157 } catch (e) {
158 this.keet.onerror(e)
159 } finally {
160 this._flushLock.unlock()
161 }
162 }
163 _createHandle(e, t, s, r = {}) {
164 const i = { ...s, type: e, discoveryKey: t, timestamp: Date.now(), priority: r.priority || g },
165 n = a.getId(i),
166 o = new R(this, n, i)
167 return ((o.idx = this._handles.push(o) - 1), o)
168 }
169 async internalHandleTaskStarted(e) {
170 let t = this._scopeLocks.get(e.scopeId)
171 ;(t || ((t = new s()), this._scopeLocks.set(e.scopeId, t)), await t.lock())
172 }
173 async internalHandleTaskCompleted(e) {
174 if (this.closing) return
175 const t = this._handles.pop()
176 t !== e && ((t.idx = e.idx), (this._handles[e.idx] = t))
177 const s = await this.keet.internalEnterLocalTransaction()
178 try {
179 for await (const t of s.find("@local/tasks-by-type", f(e.description)))
180 await s.delete("@local/tasks", t)
181 await s.flush()
182 } catch (e) {
183 this.keet.onerror(e)
184 } finally {
185 await this.keet.internalExitLocalTransaction()
186 }
187 const r = this._scopeLocks.get(e.scopeId),
188 i = r.waiting.length
189 ;(r.unlock(), 0 === i && this._scopeLocks.delete(e.scopeId))
190 }
191 restoreIdentity(e, t) {
192 return this._createHandle(o.RestoreIdentity, e, { restoreIdentity: t })
193 }
194 createRoom(e, t) {
195 return this._createHandle(o.CreateRoom, e, { createRoom: t })
196 }
197 leaveRoom(e, t) {
198 return this._createHandle(o.LeaveRoom, e, { leaveRoom: t })
199 }
200 clearRoom(e, t) {
201 return this._createHandle(o.ClearRoom, e, { clearRoom: t })
202 }
203 joinRoomInvitation(e, t) {
204 return this._createHandle(o.JoinRoomInvitation, e, { joinRoomInvitation: t })
205 }
206 joinRoomKeys(e, t) {
207 return this._createHandle(o.JoinRoomKeys, e, { joinRoomKeys: t })
208 }
209 joinRoomResponse(e, t) {
210 return this._createHandle(o.JoinRoomResponse, e, { joinRoomResponse: t })
211 }
212 sendContactRequest(e, t) {
213 return this._createHandle(o.SendContactRequest, e, { sendContactRequest: t })
214 }
215 testFastTask(e) {
216 return this._createHandle(o.TestFastTask, e)
217 }
218 testSlowTask(e) {
219 return this._createHandle(o.TestSlowTask, e)
220 }
221 testErrorTask(e) {
222 return this._createHandle(o.TestErrorTask, e)
223 }
224}
keet-core-4.14.4-pretty/lib/core/tasks/pairing/invitation.js +208 -0
……@@ -0,0 +1,208 @@
1const i = require("b4a"),
2 t = require("safety-catch"),
3 e = require("signal-promise"),
4 { Task: s } = require("../task"),
5 {
6 getInvitationId: a,
7 generatePairingCapabilities: o,
8 generateRoomPairingName: n,
9 createInvitationJoinOperation: r,
10 } = require("../../invitations")
11module.exports = class extends s {
12 constructor(i) {
13 super(i)
14 const t = this.description.joinRoomInvitation
15 ;((this._invitation = t.invitation),
16 (this._initiator = t.invitation.initiator),
17 (this._inviter = t.invitation.inviter),
18 (this._identity = t.invitation.identity),
19 (this._mailboxPublicKey = t.invitation.mailbox),
20 (this._responseKeyPair = t.invitation.responseKeyPair),
21 (this._invitationSeed = this._invitation.invitationSeed),
22 (this._capabilities = o(this._mailboxPublicKey)),
23 (this._invitationId = a(this._invitationSeed)),
24 (this._roomInfo = null),
25 (this._sharedRoomInfo = null),
26 (this._writerInfo = null),
27 (this._identityInfo = null),
28 (this._privateProfileInfo = null),
29 (this._room = null),
30 (this._core = null),
31 (this._responseCore = null),
32 (this._wakeupSession = null),
33 (this._privateProfile = null),
34 (this._signal = null),
35 (this._watcher = null))
36 }
37 async _close() {
38 ;(this._signal &&
39 this._signal.notify(new Error("Invitation join task closed before resolving")),
40 this._watcher && this._privateProfile.db.unwatch(this._watcher),
41 this._wakeupSession &&
42 (this.swarmWorker.stopActiveSwarming(this._capabilities.swarmTopic),
43 this._wakeupSession.destroy()),
44 this._core && (await this._core.close()),
45 this._responseCore && (await this._responseCore.close()),
46 this._room && this.keet.internalReleaseRoom(this._room),
47 this._privateProfile && this.keet.internalReleaseRoom(this._privateProfile))
48 }
49 _samePendingInvitation(t) {
50 return (
51 i.equals(t.id, this._invitationId) &&
52 i.equals(t.responseKeyPair.publicKey, this._responseKeyPair.publicKey)
53 )
54 }
55 async _appendJoinRequest() {
56 const i = { key: this._core.key, responsePublicKey: this._responseKeyPair.publicKey }
57 if (await this.local.get("@local/writer-appends", i)) return
58 const t = { identity: this._identityInfo, privateProfile: this._privateProfileInfo },
59 e = {
60 device: this.keet.internalCreateDeviceUpdate(t, this._core.key, {
61 isPrivateProfile: !!this._identity,
62 buildType: this._invitation.buildType,
63 }),
64 member: this.keet.internalGetMemberUpdate(t),
65 }
66 let s = null
67 this._identity && (s = { devicePublicKey: this._identity.devicePublicKey })
68 const a = this.keet.internalGetHeads(this._inviter, this._room),
69 o = r(
70 this._core.key,
71 this._mailboxPublicKey,
72 this._responseKeyPair,
73 this._invitationSeed,
74 e,
75 { identity: s, heads: a },
76 )
77 if ((await this.keet.internalAppendOptimisticOperation(this._core.key, o), this.closing)) return
78 const n = await this.keet.internalEnterLocalTransaction()
79 try {
80 ;(await n.insert("@local/writer-appends", i), await n.flush())
81 } finally {
82 await this.keet.internalExitLocalTransaction()
83 }
84 }
85 async _waitForResponse() {
86 ;((this._responseCore = this.store.get({ keyPair: this._responseKeyPair, writable: !1 })),
87 await this._responseCore.ready())
88 const i = this._privateProfileInfo.capabilities.mailboxKeyPair.publicKey
89 if (
90 (this.keet.blindPeering.addCoreBackground(this._responseCore, {
91 target: i,
92 referrer: i,
93 priority: 1,
94 }),
95 this.closing)
96 )
97 return
98 const t = (i) => {
99 this._wakeupSession.announce(i, [{ key: this._core.key, length: this._core.length }])
100 }
101 this._wakeupSession = this.keet.protomuxWakeup.session(this._mailboxPublicKey, {
102 discoveryKey: this._capabilities.wakeupTopic,
103 onpeeractive: t,
104 })
105 for (const i of this._wakeupSession.peers) i.active && t(i)
106 ;(this.swarmWorker.startActiveSwarming(this._capabilities.swarmTopic),
107 this.keet.discovery && this.keet.discovery.announce(this._capabilities.discoveryKeyPair))
108 try {
109 await this._responseCore.get(0)
110 } catch (i) {
111 if (this.closing) return
112 throw i
113 }
114 this.closing ||
115 (this.swarmWorker.stopActiveSwarming(this._capabilities.swarmTopic),
116 this.keet.discovery &&
117 this.keet.discovery.subscribe(this._capabilities.discoveryKeyPair.publicKey, {
118 since: Date.now(),
119 }),
120 await this._responseCore.close(),
121 this.closing ||
122 this._privateProfile.base.hintWakeup([{ key: this._responseCore.key, length: 1 }]))
123 }
124 async _append() {
125 const i = await this.keet.store.createKeyPair(n(this._responseKeyPair.publicKey)),
126 t = await this.keet.internalEnterLocalTransaction()
127 try {
128 ;((this._writerInfo = {
129 keyPair: i,
130 key: this._core.key,
131 mailbox: this._mailboxPublicKey,
132 responseKeyPair: this._responseKeyPair,
133 }),
134 await t.insert("@local/writers", this._writerInfo),
135 await t.flush())
136 } finally {
137 await this.keet.internalExitLocalTransaction()
138 }
139 await this._appendJoinRequest()
140 }
141 async _run() {
142 if (this.closing) return
143 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
144 const [i, s] = await Promise.all([
145 this.local.get("@local/writers", { mailbox: this._mailboxPublicKey }),
146 this.local.get("@local/identity"),
147 ]),
148 [a, o] = await Promise.all([
149 this.local.get("@local/rooms", { roomKey: s.privateProfileKey }),
150 this.local.get("@local/rooms-by-mailbox", {
151 capabilities: { mailboxKeyPair: { publicKey: this._mailboxPublicKey } },
152 }),
153 ])
154 if (this.closing) return
155 if (
156 ((this._roomInfo = o),
157 (this._writerInfo = i),
158 (this._identityInfo = s),
159 (this._privateProfileInfo = a),
160 (this._privateProfile = this.keet.internalOpenExistingRoom(
161 this._identityInfo.privateProfileKey,
162 )),
163 await this._privateProfile.ready(),
164 this.closing)
165 )
166 return
167 if (
168 ((this._room = this._roomInfo
169 ? this.keet.internalOpenExistingRoom(this._roomInfo.roomKey)
170 : null),
171 this._room && (await this._room.ready(), this.closing))
172 )
173 return
174 const n = await this._privateProfile.db.get("@keet-private-id/pending-invitations", {
175 id: this._invitationId,
176 })
177 !this.closing &&
178 n &&
179 this._samePendingInvitation(n) &&
180 ((this._core = this.store.get({ key: this._initiator.key })),
181 await this._core.ready(),
182 this.closing ||
183 (this._core.writable &&
184 (await this._append(),
185 this._room && (await this._room.base.setLocal(this._core.key), this.closing))) ||
186 (this.keet.emit("pending-rooms-changed"),
187 this.keet.blindPeering.addCoreBackground(this._core, {
188 target: this._mailboxPublicKey,
189 referrer: this._mailboxPublicKey,
190 priority: 1,
191 }),
192 this._waitForResponse().catch(this.keet.onerror),
193 (this._signal = new e()),
194 (this._watcher = async () => {
195 try {
196 const i = await this._privateProfile.db.get("@keet-private-id/pending-invitations", {
197 id: this._invitationId,
198 })
199 ;(i && this._samePendingInvitation(i)) || this._signal.notify()
200 } catch (i) {
201 t(i)
202 }
203 }),
204 this._privateProfile.db.watch(this._watcher),
205 this._watcher(),
206 await this._signal.wait()))
207 }
208}
keet-core-4.14.4-pretty/lib/core/tasks/pairing/keys.js +119 -0
……@@ -0,0 +1,119 @@
1const t = require("hypercore-crypto"),
2 i = require("safety-catch"),
3 e = require("signal-promise"),
4 { createMemberProofJoinOperation: s } = require("../../invitations"),
5 { Task: o } = require("../task"),
6 a = 12e4
7module.exports = class extends o {
8 constructor(t) {
9 super(t)
10 const i = this.description.joinRoomKeys
11 ;((this._keys = i.keys),
12 (this._isReadOnly = this._keys.status?.isReadOnly),
13 (this._identityInfo = null),
14 (this._writerInfo = null),
15 (this._roomInfo = null),
16 (this._roomPreferences = null),
17 (this._room = null),
18 (this._timer = null),
19 (this._signal = null),
20 (this._watcher = null),
21 (this._localWatcher = null))
22 }
23 _close() {
24 ;(this._signal && this._signal.notify(new Error("Fast join closed before resolving digest")),
25 this._localWatcher && this.local.unwatch(this._localWatcher),
26 this._room && this.keet.internalReleaseRoom(this._room),
27 this._timer && clearTimeout(this._timer))
28 }
29 async _save() {
30 const t = await this.keet.internalEnterLocalTransaction()
31 try {
32 ;(await t.insert("@local/writers", this._writerInfo), await t.flush())
33 } finally {
34 await this.keet.internalExitLocalTransaction()
35 }
36 }
37 async _appendJoinRequest() {
38 if (!(await this.keet.internalVerifyOptimisticCore(this._core)) || this.closing) return
39 const t = {
40 device: this.keet.internalCreateDeviceUpdate(this._identityInfo, this._core.key),
41 member: this.keet.internalGetMemberUpdate(this._identityInfo),
42 }
43 let i = null
44 i = this._keys.initiator
45 ? this.keet.internalGetHeads(this._keys.initiator, this._room)
46 : [{ key: this._keys.roomKey, length: 1 }]
47 const e = s(this._keys.mailbox, t, { heads: i })
48 await this.keet.internalAppendOptimisticOperation(this._core.key, e)
49 }
50 async _openRoom() {
51 ;((this._room = this.keet.internalOpenRoom(this._keys.roomKey, this._keys.encryptionKey, {
52 fastForwardTo: this._keys.fastForwardTo ? { key: this._keys.fastForwardTo } : null,
53 mailbox: this._keys.mailbox,
54 bigBatches: !!this._keys.identitySwap,
55 })),
56 await this._room.ready())
57 }
58 async _doRun() {
59 if (((this._identityInfo = await this.keet.internalGetIdentityInfo()), this.closing)) return
60 const [s, o, a] = await Promise.all([
61 this.local.get("@local/writers", { mailbox: this._keys.mailbox }),
62 this.local.get("@local/rooms", { roomKey: this._keys.roomKey }),
63 this.local.get("@local/room-preferences", { roomKey: this._keys.roomKey }),
64 ])
65 ;((this._writerInfo = s), (this._roomInfo = o), (this._roomPreferences = a))
66 let n = null
67 ;(this._writerInfo
68 ? (this._core = this.store.get(this._writerInfo.key))
69 : ((n = t.keyPair()), (this._core = this.store.get({ keyPair: n }))),
70 await this._core.ready(),
71 this.closing ||
72 (this._roomInfo && (await this._openRoom()),
73 this.closing ||
74 (this._writerInfo ||
75 (this._writerInfo = {
76 keyPair: n,
77 key: this._core.key,
78 mailbox: this._keys.mailbox,
79 responseKeyPair: null,
80 roomKey: null,
81 }),
82 (this._writerInfo.roomKey = this._keys.roomKey),
83 0 !== this._core.length || this._isReadOnly || (await this._appendJoinRequest()),
84 this.closing ||
85 (await this._save(),
86 this.closing ||
87 (this._room || (await this._openRoom()),
88 this._isReadOnly || (await this._room.base.setLocal(this._core.key)),
89 (this._signal = new e()),
90 (this._localWatcher = async () => {
91 try {
92 ;(await this.local.get("@local/rooms", { roomKey: this._keys.roomKey })) &&
93 this._signal.notify()
94 } catch (t) {
95 i(t)
96 }
97 }),
98 this.local.watch(this._localWatcher),
99 this._localWatcher(),
100 await this._signal.wait())))))
101 }
102 _release() {
103 ;(this.keet.debugRunningFastJoins--, this.keet.internalFastJoinSemaphore.signal())
104 }
105 async _run() {
106 ;(await this.keet.internalFastJoinSemaphore.wait(),
107 this.keet.debugRunningFastJoins++,
108 (this.keet.debugMaxRunningFastJoins = Math.max(
109 this.keet.debugMaxRunningFastJoins,
110 this.keet.debugRunningFastJoins,
111 )))
112 try {
113 if (this.closing) return
114 ;((this._timer = setTimeout(() => this._release(), a)), await this._doRun())
115 } finally {
116 this._release()
117 }
118 }
119}
keet-core-4.14.4-pretty/lib/core/tasks/pairing/response.js +30 -0
……@@ -0,0 +1,30 @@
1const { Task: e } = require("../task")
2module.exports = class extends e {
3 constructor(e) {
4 super(e)
5 const i = this.description.joinRoomResponse
6 ;((this._keyPair = i.keyPair),
7 (this._response = i.response),
8 (this._mailbox = i.mailbox),
9 (this._core = null))
10 }
11 async _close() {
12 this._core && (await this._core.close())
13 }
14 async _run() {
15 if (
16 ((this._core = this.store.get({ keyPair: this._keyPair })),
17 await this._core.ready(),
18 0 === this._core.length)
19 ) {
20 if ((await this.keet.internalVerifyOptimisticCore(this._core), this.closing)) return
21 0 === this._core.length && (await this._core.append(this._response, { maxLength: 1 }))
22 }
23 ;(await this.keet.blindPeering.addCore(this._core, {
24 target: this._mailbox,
25 referrer: this._mailbox,
26 priority: 1,
27 }),
28 await new Promise((e) => setTimeout(e, this.keet.internalPairingTimeout)))
29 }
30}
keet-core-4.14.4-pretty/lib/core/tasks/rooms/clear.js +10 -0
……@@ -0,0 +1,10 @@
1const { Task: s } = require("../task")
2module.exports = class extends s {
3 constructor(s) {
4 super(s)
5 const o = this.description.clearRoom
6 this._roomKey = o.roomKey
7 }
8 async _close() {}
9 async _run() {}
10}
keet-core-4.14.4-pretty/lib/core/tasks/rooms/create.js +99 -0
……@@ -0,0 +1,99 @@
1const {
2 contract: {
3 hyperschema: { getEnum: e },
4 },
5 } = require("../../../../schema/spec"),
6 { Task: t } = require("../task"),
7 i = require("b4a"),
8 s = e("@keet/room-type"),
9 o = require("../../sync/updater"),
10 { roomsStats: a } = require("../../contract/stats/local")
11module.exports = class extends t {
12 constructor(e) {
13 super(e)
14 const t = this.description.createRoom
15 ;((this._key = t.roomKey),
16 (this._mailbox = t.mailbox),
17 (this._keyPair = t.keyPair),
18 (this._genesis = t.genesis),
19 (this._fastForwardTo = t.fastForwardTo),
20 (this._encryptionKey = t.encryptionKey),
21 (this._isPrivateProfile = t.isPrivateProfile),
22 (this._room = null),
23 (this._updater = null),
24 (this._privateProfile = null))
25 }
26 async _close() {
27 ;(this._updater && (await this._updater.close()),
28 this._room && this.keet.internalReleaseRoom(this._room),
29 this._privateProfile && this.keet.internalReleaseRoom(this._privateProfile))
30 }
31 async _save() {
32 const e = await this.keet.internalEnterLocalTransaction()
33 try {
34 const t = await e.get("@local/rooms", this._updater.roomInfo)
35 ;(await e.insert("@local/rooms", this._updater.roomInfo),
36 await a(e, this._updater.roomInfo, t),
37 await e.flush())
38 } finally {
39 await this.keet.internalExitLocalTransaction()
40 }
41 }
42 _getDmMemberKey() {
43 if (this._genesis.digest.settings.roomType !== s.DirectMessage) return null
44 for (const { attestation: e } of this._genesis.initialMembers)
45 if (!i.equals(e.memberKey, this._genesis.bootstrapDevice.attestation.memberKey))
46 return e.memberKey
47 }
48 _maybeEmitEvents() {
49 this.keet.emit("room-changed", this._room.id)
50 }
51 async _create() {
52 if ((await this._room.ready(), this.closing)) return
53 let e = this._genesis.bootstrapDevice,
54 t = this._genesis.initialMembers
55 if (!e) {
56 const i = await this.keet.internalGetIdentityInfo()
57 if (this.closing) return
58 ;((e = this.keet.internalCreateDeviceUpdate(i, this._room.deviceKey)),
59 (t = [this.keet.internalGetMemberUpdate(i)]))
60 }
61 ;(await this._room.dispatch("@keet/genesis", {
62 ...this._genesis,
63 bootstrapDevice: e,
64 initialMembers: t,
65 }),
66 (this._updater = new o(this.keet, this._room.base.view, this._room.base, null)))
67 const i = await this._updater.run()
68 if (!this.closing && i && (await this._save(), !this.closing)) {
69 if (this._privateProfile) {
70 const e = this._room.base.getSystemKey(),
71 t = { key: this._room.base.local.key, length: this._room.base.local.length }
72 await this._privateProfile.dispatch("@keet-private-id/add-room", {
73 roomKey: this._room.key,
74 encryptionKey: this._room.encryptionKey,
75 mailbox: this._mailbox,
76 fastForwardTo: e,
77 initiator: t,
78 dm: this._getDmMemberKey(),
79 })
80 }
81 this._maybeEmitEvents()
82 }
83 }
84 async _run() {
85 if (
86 ((this._room = this.keet.internalOpenRoom(this._key, this._encryptionKey, {
87 fastForwardTo: this._fastForwardTo,
88 keyPair: this._keyPair,
89 mailbox: this._mailbox,
90 })),
91 !this._isPrivateProfile)
92 ) {
93 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
94 const e = await this.local.get("@local/identity")
95 this._privateProfile = this.keet.internalOpenExistingRoom(e.privateProfileKey)
96 }
97 await this._create()
98 }
99}
keet-core-4.14.4-pretty/lib/core/tasks/rooms/leave.js +67 -0
……@@ -0,0 +1,67 @@
1const { Task: i } = require("../task"),
2 t = require("b4a")
3module.exports = class extends i {
4 constructor(i) {
5 super(i)
6 const t = this.description.leaveRoom
7 ;((this._roomKey = t.roomKey),
8 (this._isGossiped = t.isGossiped),
9 (this._roomInfo = null),
10 (this._identityInfo = null),
11 (this._room = null),
12 (this._privateProfile = null))
13 }
14 async _close() {
15 ;(this._room && this.keet.internalReleaseRoom(this._room),
16 this._privateProfile && this.keet.internalReleaseRoom(this._privateProfile))
17 }
18 async _load() {
19 this.keet.onlineBoot.opened || (await this.keet.onlineBoot.ready())
20 const [i, e] = await Promise.all([
21 this.local.get("@local/rooms", { roomKey: this._roomKey }),
22 this.local.get("@local/identity"),
23 ])
24 if (this.closing || !i || !e) return !1
25 if (
26 ((this._roomInfo = i),
27 (this._identityInfo = e),
28 (this._privateProfile = this.keet.internalOpenExistingRoom(
29 this._identityInfo.privateProfileKey,
30 )),
31 await this._privateProfile.ready(),
32 this.closing)
33 )
34 return !1
35 if (this.discovery && this._roomInfo) {
36 const i = this._roomInfo.capabilities.discoveryKeyPair.publicKey
37 this.discovery.unsubscribe(i)
38 }
39 if (
40 ((this._room = this.keet.internalOpenExistingRoom(this._roomKey)),
41 await this._room.ready(),
42 this.closing)
43 )
44 return !1
45 let o = !1
46 const s = await this._privateProfile.db.find("@keet-private-id/pending-invitations").toArray()
47 for (const i of s)
48 t.equals(i.mailbox, this._roomInfo.capabilities.mailboxKeyPair.publicKey) && (o = !0)
49 return !this.closing && !o
50 }
51 async _save() {
52 const i = await this.keet.internalEnterLocalTransaction()
53 try {
54 ;(await i.delete("@local/writers", {
55 mailbox: this._roomInfo.capabilities.mailboxKeyPair.publicKey,
56 }),
57 await i.flush())
58 } finally {
59 await this.keet.internalExitLocalTransaction()
60 }
61 await this.files.clearAllFiles(this._roomKey, { leaving: !0 })
62 }
63 async _run() {
64 const i = await this._load()
65 !this.closing && i && (await this._save())
66 }
67}
keet-core-4.14.4-pretty/lib/core/tasks/task.js +34 -0
……@@ -0,0 +1,34 @@
1const t = require("ready-resource"),
2 i = require("hypercore-id-encoding")
3class e extends t {
4 constructor(t) {
5 ;(super(),
6 (this.handle = t),
7 (this.description = t.description),
8 (this.type = this.description.type),
9 (this.scope = this.description.discoveryKey),
10 (this.priority = this.description.priority),
11 (this.keet = this.handle.manager.keet),
12 (this.store = this.keet.store),
13 (this.local = this.keet.local),
14 (this.swarm = this.keet.swarm),
15 (this.swarmWorker = this.keet.swarmWorker),
16 (this.files = this.keet.files),
17 (this._running = null))
18 }
19 _open() {
20 ;((this._running = this._run()), this._running.catch(this.keet.onerror))
21 }
22 get id() {
23 return (this._id || (this._id = e.getId(this.description)), this._id)
24 }
25 async run() {
26 ;(this.opened || (await this.ready()), await this._running, await this.close())
27 }
28 async _run() {}
29 async _close() {}
30 static getId(t) {
31 return `${t.timestamp}:${i.encode(t.discoveryKey)}:${t.type}`
32 }
33}
34module.exports = { Task: e }
keet-core-4.14.4-pretty/lib/core/tasks/testing/error.js +6 -0
……@@ -0,0 +1,6 @@
1const { Task: e } = require("../task")
2module.exports = class extends e {
3 _run() {
4 return Promise.reject(new Error("Simulated task failure"))
5 }
6}
keet-core-4.14.4-pretty/lib/core/tasks/testing/fast.js +14 -0
……@@ -0,0 +1,14 @@
1const e = require("resolve-reject-promise"),
2 { Task: s } = require("../task")
3module.exports = class extends s {
4 constructor(e) {
5 ;(super(e), (this.timer = null))
6 }
7 _close() {
8 this.timer && clearTimeout(this.timer)
9 }
10 async _run() {
11 const { resolve: s, promise: t } = e()
12 ;((this.timer = setTimeout(() => s(), 100)), await t)
13 }
14}
keet-core-4.14.4-pretty/lib/core/tasks/testing/slow.js +14 -0
……@@ -0,0 +1,14 @@
1const e = require("resolve-reject-promise"),
2 { Task: s } = require("../task")
3module.exports = class extends s {
4 constructor(e) {
5 ;(super(e), (this._timer = null), (this._resolve = null), (this._reject = null))
6 }
7 _close() {
8 ;(this._timer && clearTimeout(this.timer), this._reject(new Error("Slow task was closed")))
9 }
10 async _run() {
11 const { resolve: s, reject: t, promise: r } = e()
12 ;((this._resolve = s), (this._reject = t), (this._timer = setTimeout(() => s(), 1e3)), await r)
13 }
14}
keet-core-4.14.4-pretty/lib/core/users/index.js +235 -0
……@@ -0,0 +1,235 @@
1const e = require("@holepunchto/keet-registry-client"),
2 t = require("ready-resource"),
3 s = require("@holepunchto/keet-registry"),
4 i = require("b4a"),
5 { createUsernameReservationRequest: r } = require("../invitations"),
6 { Readable: n } = require("streamx"),
7 a = require("@holepunchto/keet-registry/lib/errors")
8class o extends t {
9 constructor(e, { db: t, reserved: s, blobs: i, rpc: r, rateLimit: n = {} } = {}) {
10 ;(super(),
11 (this.dbKey = t),
12 (this.reservedKey = s),
13 (this.blobsKey = i),
14 (this.rpcKeys = r),
15 (this.keet = e),
16 (this.store = null),
17 (this.swarm = null),
18 (this.swarmWorker = null),
19 (this.db = null),
20 (this.reserved = null),
21 (this.blobs = null),
22 (this._keetRegistry = null),
23 (this._rpcClient = null),
24 (this._registryRpcOpts = { rateLimit: n }),
25 (this._subs = []),
26 (this._watchingReservation = !1),
27 (this._watchingRecord = !1),
28 (this._boundEmit = this._emit.bind(this)),
29 (this._boundCatch = this._catch.bind(this)),
30 (this._boundLookupOwn = null))
31 }
32 async _open() {
33 ;((this.store = this.keet.store.session()),
34 (this.swarmWorker = this.keet.swarmWorker),
35 (this.db = this.store.get({ key: this.dbKey })),
36 (this.reserved = this.store.get({ key: this.reservedKey })),
37 (this.blobs = this.store.get({ key: this.blobsKey })),
38 (this._keetRegistry = new s(this.db, this.reserved, this.blobs, { extension: !1 })),
39 (this._rpcClient = new e(this.rpcKeys, this.keet.rpcClient, this._registryRpcOpts)),
40 await this._keetRegistry.ready())
41 const t = await this._getIdentity()
42 ;((this._boundLookupOwn = this._safeLookupOwn.bind(this, t)),
43 this._lookupOwn(t).catch(this.keet.onerror),
44 this._keetRegistry.reserved.core.once("append", this._boundLookupOwn))
45 }
46 async _emit(e, t = null, s = null) {
47 for (const i of this._subs) {
48 if (this.keet.closing) return
49 i.push({ status: h(e), reservation: t, record: this._encode(s) })
50 }
51 }
52 async _catch(e) {
53 this._unwatch()
54 for (const t of this._subs) t.push({ status: h({ hasError: !0 }), error: e.code ?? e.message })
55 }
56 async _close() {
57 ;(this._unwatch(), this._rpcClient.destroy())
58 try {
59 await this._keetRegistry.close()
60 } catch (e) {
61 if ("REQUEST_CANCELLED" !== e.code) throw e
62 }
63 await this.store.close()
64 }
65 async _getIdentity() {
66 const e = await this.keet.local.get("@local/identity")
67 if (!e) throw new Error("Identity is required")
68 return e
69 }
70 _encode(e) {
71 return e ? { ...e, contactInfo: this.keet.internalEncodeContactInfo(e) } : null
72 }
73 async _safeLookupOwn(e) {
74 try {
75 return await this._lookupOwn(e)
76 } catch (e) {
77 this.keet.onerror(e)
78 }
79 }
80 async _lookupOwn(e) {
81 const [t, s] = await Promise.all([
82 this._keetRegistry.getByKey(e.publicKey),
83 this._keetRegistry.getReservationsByKey(e.publicKey),
84 ])
85 if (!t) {
86 if (s.length && !this._watchingRecord) {
87 const e = s.pop()
88 ;(this._boundEmit({ isReserved: !0 }, { username: e.username }), this._claimReservation(e))
89 }
90 return null
91 }
92 return this._encode(t)
93 }
94 async lookup(e) {
95 if (!e) throw new Error("Username required")
96 ;(this.opened || (await this.ready()),
97 this.swarmWorker.startDiscoverySwarming(this.db.discoveryKey, {
98 deferSwarming: !1,
99 limit: 1,
100 }))
101 const t = await this._keetRegistry.get(e)
102 return this._encode(t)
103 }
104 async lookupByKey(e) {
105 if (!e) throw new Error("Public key required")
106 ;(this.opened || (await this.ready()),
107 this.swarmWorker.startDiscoverySwarming(this.db.discoveryKey, {
108 deferSwarming: !1,
109 limit: 1,
110 }))
111 const t = await this._getIdentity()
112 if (i.equals(t.publicKey, e)) return this._lookupOwn(t)
113 const s = await this._keetRegistry.getByKey(e)
114 return this._encode(s)
115 }
116 async search(e, t) {
117 if (!e) return []
118 ;(this.opened || (await this.ready()),
119 this.swarmWorker.startDiscoverySwarming(this.db.discoveryKey, {
120 deferSwarming: !1,
121 limit: 1,
122 }))
123 const s = []
124 for await (const i of this._keetRegistry.search(e, t)) s.push(this._encode(i))
125 return s
126 }
127 async isAvailable(e) {
128 if (!e) throw new Error("Username required")
129 return (
130 this.opened || (await this.ready()),
131 this.swarmWorker.startDiscoverySwarming(this.db.discoveryKey, {
132 deferSwarming: !1,
133 limit: 1,
134 }),
135 this._keetRegistry.isAvailable(e)
136 )
137 }
138 async getReservationsByKey(e) {
139 if (!e) throw new Error("Public key required")
140 return (
141 this.opened || (await this.ready()),
142 this.swarmWorker.startDiscoverySwarming(this.db.discoveryKey, {
143 deferSwarming: !1,
144 limit: 1,
145 }),
146 this._keetRegistry.getReservationsByKey(e)
147 )
148 }
149 async internalUpdateRegistryMember(e) {
150 try {
151 ;(await s.verifyPut(this._keetRegistry, e), await this._rpcClient.putRecord(e))
152 } catch (e) {
153 this._boundCatch(e)
154 }
155 }
156 async _pushOwnRecord() {
157 const { publicKey: e } = await this._getIdentity(),
158 t = await this._keetRegistry.getByKey(e)
159 t && this._boundEmit({ hasRecord: !0 }, null, t)
160 }
161 subscribeUsername() {
162 const e = this
163 return new n({
164 open(t) {
165 ;(e._subs.push(this), e._pushOwnRecord().catch(e.keet.onerror), t(null))
166 },
167 destroy(t) {
168 const s = e._subs.indexOf(this)
169 ;(-1 !== s && e._subs.splice(s, 1), t(null))
170 },
171 })
172 }
173 async update(e) {
174 if (!e) throw new Error("Username required")
175 if ((this.opened || (await this.ready()), this._watchingReservation))
176 throw new Error("Registration already in progress")
177 const { publicKey: t, deviceKeyPair: i, deviceProof: n } = await this._getIdentity()
178 ;(this.swarmWorker.startDiscoverySwarming(this.db.discoveryKey, {
179 deferSwarming: !1,
180 limit: 1,
181 }),
182 this._watchReservation(e, t))
183 try {
184 this._boundEmit({ isReserving: !0 }, { username: e })
185 const a = r(e, { publicKey: t, deviceKeyPair: i, deviceProof: n })
186 ;(await s.verifyReservation(a), await this._rpcClient.reserve(a))
187 } catch (e) {
188 return (this._boundCatch(e), !1)
189 }
190 return !0
191 }
192 _unwatch() {
193 ;(this._keetRegistry.unwatch(), (this._watchingRecord = !1), (this._watchingReservation = !1))
194 }
195 async _claimReservation({ username: e, memberKey: t }) {
196 ;(this._keetRegistry.reserved.core.removeListener("append", this._boundLookupOwn),
197 this._boundEmit({ isReserved: !0 }, { username: e, memberKey: t }),
198 this._watchRecord(e, t),
199 await this.keet
200 .internalUpdateProfile({ username: e }, { forceUpdateRegistry: !0 })
201 .catch(this._boundCatch))
202 }
203 _watchReservation(e, t) {
204 const s = this
205 ;((this._watchingReservation = !0),
206 this._keetRegistry.watchReservation(e).then(async function (e) {
207 ;((s._watchingReservation = !1),
208 null !== e &&
209 (i.equals(e.memberKey, t)
210 ? await s._claimReservation(e)
211 : s._boundCatch(a.NAME_UNAVAILABLE())))
212 }, this._boundCatch))
213 }
214 _watchRecord(e, t) {
215 const s = this,
216 i = { attestation: { memberKey: t } }
217 ;((this._watchingRecord = !0),
218 this._keetRegistry
219 .watchRecord(i, function (t) {
220 return t.profile.username === e
221 })
222 .then(function (e) {
223 ;((s._watchingRecord = !1), null !== e && s._boundEmit({ hasRecord: !0 }, null, e))
224 }, this._boundCatch))
225 }
226}
227function h(e) {
228 return {
229 hasRecord: !0 === e.hasRecord,
230 hasError: !0 === e.hasError,
231 isReserving: !0 === e.isReserving,
232 isReserved: !0 === e.isReserved || !0 === e.hasRecord,
233 }
234}
235module.exports = o
keet-core-4.14.4-pretty/lib/env.js +10 -0
……@@ -0,0 +1,10 @@
1const e = require("hypercore-id-encoding"),
2 n = require("../env.json")
3module.exports = function (o) {
4 const r = n[o]
5 if (!r) throw new Error("Invalid buildType: " + o)
6 return {
7 bundles: { key: e.decode(r.bundles.key), length: r.bundles.length },
8 config: { key: e.decode(r.config.key), length: r.config.length },
9 }
10}
keet-core-4.14.4-pretty/lib/errors/index.js +152 -0
……@@ -0,0 +1,152 @@
1const e = require("ready-resource"),
2 t = require("scope-lock"),
3 { KeetContractError: r } = require("../core/contract/errors"),
4 s = 1e4,
5 i = 12096e5,
6 a = {
7 INVALID_INVITATION_TYPE: "INVALID_INVITATION_TYPE",
8 UNKNOWN_EXPIRATION: "UNKNOWN_EXPIRATION",
9 INVALID_INVITE: "INVALID_INVITE",
10 INVALID_CONTACT_INFO: "INVALID_CONTACT_INFO",
11 MODERATORS_ONLY: "MODERATORS_ONLY",
12 UNEXPECTED_ERROR: "UNEXPECTED_ERROR",
13 INVALID_BUILD_TYPE: "INVALID_BUILD_TYPE",
14 }
15class o extends e {
16 constructor(e, r) {
17 ;(super(),
18 (this.keet = e),
19 (this.errors = []),
20 (this._flushLock = new t({ debounce: !0 })),
21 (this._flushInterval = r.errorFlushInterval || s),
22 (this._flushTimerDisabled = null === r.errorFlushTimer),
23 (this._flushTimer = null),
24 (this._gcMaxAge = r.errorGcMaxAge || i),
25 this.ready().catch(e.onerror))
26 }
27 async _open() {
28 ;(await this.keet.ready(), await this._gc())
29 }
30 async _close() {
31 ;((this._flushTimerDisabled = !0), this._resetTimeout(), await this._flush())
32 }
33 add(e) {
34 ;(this.errors.push(e),
35 this.keet.emit("caught-error", e),
36 this._flushTimerDisabled || this._scheduleFlush())
37 }
38 normalize(e, t = {}) {
39 return n.isKeetError(e)
40 ? e
41 : r.isContractError(e)
42 ? ((e.timestamp = Date.now()), e)
43 : n.fromError(e, t)
44 }
45 _scheduleFlush() {
46 this._flushTimer || (this._flushTimer = setTimeout(this._flush.bind(this), this._flushInterval))
47 }
48 _resetTimeout() {
49 this._flushTimer && (clearTimeout(this._flushTimer), (this._flushTimer = null))
50 }
51 debugPauseFlush() {
52 this._resetTimeout()
53 }
54 debugResumeFlush() {
55 this._scheduleFlush()
56 }
57 async _flush() {
58 if (!this.keet.readOnly && (await this._flushLock.lock()))
59 try {
60 const e = await this.keet.internalEnterLocalTransaction()
61 try {
62 const t = [...this.errors]
63 this.errors = []
64 for (const r of t)
65 await e.insert("@local/errors", {
66 code: r.code,
67 message: r.message,
68 stack: r.stack,
69 details: r.details,
70 timestamp: r.timestamp,
71 })
72 await e.flush()
73 } finally {
74 await this.keet.internalExitLocalTransaction()
75 }
76 } finally {
77 ;(this._flushLock.unlock(), this._resetTimeout())
78 }
79 }
80 async _gc() {
81 if (this.closing) return
82 const e = Date.now() - this._gcMaxAge,
83 t = await this.keet.local.find("@local/errors", { lte: { timestamp: e } }).toArray(),
84 r = await this.keet.internalEnterLocalTransaction()
85 try {
86 for (const e of t) await r.delete("@local/errors", e)
87 await r.flush()
88 } finally {
89 await this.keet.internalExitLocalTransaction()
90 }
91 }
92}
93class n extends Error {
94 constructor(e, t, r = {}, s = this.constructor) {
95 ;(super(t ? `${e}: ${t}` : e),
96 (this.isKeetError = !0),
97 (this.code = e),
98 (this.details = r),
99 (this.timestamp = Date.now()),
100 Error.captureStackTrace && Error.captureStackTrace(this, s))
101 }
102 static isKeetError(e) {
103 return e?.isKeetError
104 }
105 static fromError(e, t = {}) {
106 const r = c(e, t)
107 return (
108 (e.code = r),
109 (e.message = `${r}: ${e.message}`),
110 (e.timestamp = Date.now()),
111 e.stack || (e.stack = ""),
112 (e.details = {}),
113 t.roomKey && (e.details.roomKey = t.roomKey),
114 t.coreKey && (e.details.coreKey = t.coreKey),
115 e
116 )
117 }
118 static INVALID_INVITATION_TYPE(
119 e = "Attempting to use a device sync invitation as a room invitation",
120 t = {},
121 ) {
122 return new n(a.INVALID_INVITATION_TYPE, e, t, n.INVALID_INVITATION_TYPE)
123 }
124 static UNKNOWN_EXPIRATION(e = "Unknown expiration", t = {}) {
125 return new n(a.UNKNOWN_EXPIRATION, e, t, n.UNKNOWN_EXPIRATION)
126 }
127 static INVALID_INVITE(e = "Invalid invite", t = {}) {
128 return new n(a.INVALID_INVITE, e, t, n.INVALID_INVITE)
129 }
130 static INVALID_CONTACT_INFO(e = "Invalid contact info", t = {}) {
131 return new n(a.INVALID_CONTACT_INFO, e, t, n.INVALID_CONTACT_INFO)
132 }
133 static MODERATORS_ONLY(e = "", t = {}) {
134 return new n(a.MODERATORS_ONLY, e, t, n.MODERATORS_ONLY)
135 }
136 static UNEXPECTED_ERROR(e = "", t = {}) {
137 return new n(a.UNEXPECTED_ERROR, e, t, n.UNEXPECTED_ERROR)
138 }
139 static INVALID_BUILD_TYPE(e = "", t = {}) {
140 return new n(a.INVALID_BUILD_TYPE, e, t, n.INVALID_BUILD_TYPE)
141 }
142}
143function c(e, t) {
144 return e.cause?.code
145 ? e.cause.code
146 : t.prefix
147 ? t.prefix
148 : t.roomKey
149 ? "UNEXPECTED_ROOM_ERROR"
150 : "UNEXPECTED_ERROR"
151}
152module.exports = { ERRORS: a, KeetErrorV2: n, KeetErrorManager: o }
keet-core-4.14.4-pretty/lib/features.js +2 -0
……@@ -0,0 +1,2 @@
1const { FEATURES: e, isFeatureSupported: r } = require("../schema/versions")
2module.exports = { FEATURES: e, isFeatureSupported: r }
keet-core-4.14.4-pretty/lib/legacy-constants.js +17 -0
……@@ -0,0 +1,17 @@
1const E = require("@holepunchto/keet-core-api"),
2 {
3 ERRORS: S,
4 DISPLAY_TYPES: R,
5 DM_STATUSES: e,
6 PREFERENCES: p,
7 GENERIC_EVENTS: o,
8 isDisplaySupported: T,
9 } = E
10module.exports = {
11 ERRORS: S,
12 DISPLAY_TYPES: R,
13 DM_STATUSES: e,
14 PREFERENCES: p,
15 GENERIC_EVENTS: o,
16 isDisplaySupported: T,
17}
keet-core-4.14.4-pretty/lib/push/index.js +213 -0
……@@ -0,0 +1,213 @@
1const e = require("hypercore-id-encoding"),
2 l = require("hypercore-storage"),
3 t = require("multi-profile-store"),
4 a = require("@holepunchto/keet-push/lib/notifications.js"),
5 { decodeValue: o } = require("autobase/lib/values.js"),
6 n = require("b4a"),
7 {
8 contract: {
9 hyperdispatch: { decode: i },
10 hyperschema: { getEnum: r },
11 },
12 } = require("../../schema/spec"),
13 c = r("@keet/room-type"),
14 s = require("../core/local"),
15 u = require("keet-identity-key")
16function d(e) {
17 return "@keet/start-call" === e.name
18 ? "call"
19 : "@keet/join-call" === e.name
20 ? "call_joined"
21 : "@keet/end-call" === e.name || "@keet/leave-call" === e.name
22 ? "call_hangup"
23 : void 0
24}
25function m(e) {
26 return "@keet/start-call" === e.name
27 ? "Message for call"
28 : "@keet/join-call" === e.name
29 ? "Message for call joined"
30 : "@keet/end-call" === e.name || "@keet/leave-call" === e.name
31 ? "Message for call hangup"
32 : void 0
33}
34function y(e, l) {
35 switch (e) {
36 case c.Default:
37 return (l("Room type is default"), "0")
38 case c.Broadcast:
39 return (l("Room type is Broadcast"), "1")
40 case c.DirectMessage:
41 return (l("Room type is DirectMessage"), "2")
42 default:
43 throw new Error("Incompatible legacy room type:", e)
44 }
45}
46function f(e, l, t) {
47 try {
48 return !!u.verify(e, l, { expectedIdentity: t })
49 } catch {
50 return !1
51 }
52}
53module.exports = async function (r, c, { log: u = () => {}, profile: p = !0 } = {}) {
54 const g = t.open(r).active()
55 if (!g && p) return (u("no active profile is made"), null)
56 const { version: k, discoveryKey: h, proof: v } = a.decode(c),
57 b = new l(g ? g.storage : r, {
58 readOnly: !0,
59 blockCache: !1,
60 tableCacheIndexAndFilterBlocks: !1,
61 optimizeFiltersForMemory: !0,
62 maxOpenFiles: 1,
63 useDirectReads: !0,
64 filterPolicy: null,
65 })
66 try {
67 const l = s.rocks(b.rocks.columnFamily("keet/local-database"))
68 ;(await l.ready(), u("Keet local database is ready"))
69 const [t, r] = await Promise.all([
70 l.get("@local/rooms-by-discovery-key", { discoveryKey: h }),
71 l.get("@local/identity"),
72 ])
73 if (!t || t.status.isRemoved) return (u("Room member was removed from room"), null)
74 const c = await l.get("@local/room-preferences", { roomKey: t.roomKey })
75 if (c && (!c.status.isActive || c.status.isFullyMuted)) return null
76 const p = await a.receive(b, t.roomKey, v, k),
77 g = 1 === k ? p?.result : p,
78 x = 1 === k ? p?.attest : null
79 if ((u("Receiving notification"), !g)) return null
80 if ((u("Notification is good"), !g.block)) return null
81 if ((u("Notification was not blocked"), !g.newer)) return null
82 const K = g.key,
83 w = g.discoveryKey,
84 M = o(n.from(g.proof.block.value), {
85 autobase: t.roomKey,
86 encryptionKey: t.encryptionKey,
87 key: K,
88 manifest: g.proof.manifest,
89 index: g.block.index,
90 }),
91 [T, q] = await Promise.all([l.get("@local/devices", { device: { key: K } }), M]),
92 I = T?.device,
93 R = i(q),
94 [j, D] = await Promise.all([
95 I ? l.get("@local/contacts", { memberKey: I.memberKey }) : null,
96 I ? l.get("@local/members", { key: I.memberKey }) : null,
97 ]),
98 F = !!j?.status.isBlocked
99 u("Blocked?: ", F)
100 const B = x ? f(x, K, r.publicKey) : D && n.equals(D.key, r.publicKey)
101 u(
102 `Member exists ?: ${null !== D} and keys are equal?: ${null !== D && n.equals(D.key, r.publicKey)}`,
103 )
104 const A = D ? D.profile.displayName : null,
105 P = D ? D.profile.avatar : null,
106 S = t ? t.config.avatar : null,
107 E = t ? t.digest.abi.version : 0
108 let N = null
109 switch (R.name) {
110 case "@keet/add-chat-message": {
111 const l = R.value.header.timestamp,
112 a = R.value.message
113 if (a?.files && a.files.length > 0) {
114 const e = a.files[0]
115 ;((N = {
116 timestamp: l,
117 type: "file",
118 chatText: null,
119 callId: null,
120 fileType: e.metadata?.mimetype,
121 location: null,
122 }),
123 u("Message for file"))
124 } else if (a?.event?.locationShared)
125 ((N = {
126 timestamp: l,
127 type: "location",
128 chatText: a.text,
129 callId: null,
130 fileType: null,
131 location: a.event.locationShared,
132 }),
133 u("Message for location"))
134 else if (a.text)
135 ((N = {
136 timestamp: l,
137 type: "text",
138 chatText: a.text,
139 callId: null,
140 fileType: null,
141 location: null,
142 }),
143 u("Message for text"))
144 else if (a.event.callStarted && E < 23) {
145 if (Math.abs(Date.now() - l) > 12e4) return
146 ;((N = {
147 timestamp: l,
148 type: "call",
149 chatText: null,
150 callId: e.encode(t.discoveryKey),
151 fileType: null,
152 location: null,
153 }),
154 u("Message for call"))
155 } else if (a.event.callHangup && E < 23) {
156 if (Math.abs(Date.now() - l) > 12e4) return
157 ;((N = {
158 timestamp: l,
159 type: "call_hangup",
160 chatText: null,
161 callId: e.encode(t.discoveryKey),
162 fileType: null,
163 location: null,
164 }),
165 u("Message for call hangup"))
166 }
167 break
168 }
169 case "@keet/start-call":
170 case "@keet/join-call":
171 case "@keet/leave-call":
172 case "@keet/end-call": {
173 if (E < 23) return
174 const l = R.value.header.timestamp
175 if (Math.abs(Date.now() - l) > 12e4) return
176 const t = d(R),
177 a = m(R)
178 ;((N = {
179 timestamp: l,
180 type: t,
181 chatText: null,
182 callId: e.encode(R.value.callKey),
183 fileType: null,
184 location: null,
185 }),
186 u(a))
187 break
188 }
189 }
190 const _ = {
191 id: null,
192 sender: { id: e.encode(K), length: g.length, blocked: F, self: B, name: A, memberAvatar: P },
193 room: {
194 key: t.roomKey,
195 title: t.config.title,
196 type: y(t.digest.settings.roomType, u),
197 roomAvatar: S,
198 },
199 proof: { discoveryKey: w, data: g.proof },
200 index: g.block.index,
201 message: N,
202 }
203 return (
204 (_.id = _.sender.id + (-1 !== _.index ? "/b" + _.index : "/l" + _.sender.length)),
205 u("Returning result"),
206 _
207 )
208 } catch (e) {
209 return (u("Error:", e), null)
210 } finally {
211 ;(await b.close(), u("Storage closed"))
212 }
213}
keet-core-4.14.4-pretty/lib/rpc/client.js +1381 -0
……@@ -0,0 +1,1381 @@
1const e = require("tiny-buffer-rpc/any"),
2 r = require("safety-catch")
3module.exports = function (s) {
4 const t = s.register(0, { request: e, response: e }),
5 o = s.register(1, { request: e, response: e }),
6 n = s.register(2, { request: e, response: e }),
7 u = s.register(3, { request: e, response: e }),
8 a = s.register(4, { request: e, response: e }),
9 q = s.register(5, { request: e, response: e }),
10 i = s.register(6, { request: e, response: e }),
11 c = s.register(7, { request: e, response: e }),
12 m = s.register(8, { request: e, response: e }),
13 g = s.register(9, { request: e, response: e }),
14 p = s.register(10, { request: e, response: e }),
15 y = s.register(11, { request: e, response: e }),
16 f = s.register(12, { request: e, response: e }),
17 A = s.register(13, { request: e, response: e }),
18 d = s.register(14, { request: e, response: e }),
19 b = s.register(15, { request: e, response: e }),
20 R = s.register(16, { request: e, response: e }),
21 l = s.register(17, { request: e, response: e }),
22 S = s.register(18, { request: e, response: e }),
23 w = s.register(19, { request: e, response: e }),
24 v = s.register(20, { request: e, response: e }),
25 M = s.register(21, { request: e, response: e }),
26 h = s.register(22, { request: e, response: e }),
27 C = s.register(23, { request: e, response: e }),
28 P = s.register(24, { request: e, response: e }),
29 I = s.register(25, { request: e, response: e }),
30 F = s.register(26, { request: e, response: e }),
31 k = s.register(27, { request: e, response: e }),
32 D = s.register(28, { request: e, response: e }),
33 U = s.register(29, { request: e, response: e }),
34 E = s.register(30, { request: e, response: e }),
35 T = s.register(31, { request: e, response: e }),
36 B = s.register(32, { request: e, response: e }),
37 L = s.register(33, { request: e, response: e }),
38 x = s.register(34, { request: e, response: e }),
39 N = s.register(35, { request: e, response: e }),
40 j = s.register(36, { request: e, response: e }),
41 z = s.register(37, { request: e, response: e }),
42 H = s.register(38, { request: e, response: e }),
43 K = s.register(39, { request: e, response: e }),
44 V = s.register(40, { request: e, response: e }),
45 J = s.register(41, { request: e, response: e }),
46 O = s.register(42, { request: e, response: e }),
47 W = s.register(43, { request: e, response: e }),
48 G = s.register(44, { request: e, response: e }),
49 Q = s.register(45, { request: e, response: e }),
50 X = s.register(46, { request: e, response: e }),
51 Y = s.register(47, { request: e, response: e }),
52 Z = s.register(48, { request: e, response: e }),
53 $ = s.register(49, { request: e, response: e }),
54 _ = s.register(50, { request: e, response: e }),
55 ee = s.register(51, { request: e, response: e }),
56 re = s.register(52, { request: e, response: e }),
57 se = s.register(53, { request: e, response: e }),
58 te = s.register(54, { request: e, response: e }),
59 oe = s.register(55, { request: e, response: e }),
60 ne = s.register(56, { request: e, response: e }),
61 ue = s.register(57, { request: e, response: e }),
62 ae = s.register(58, { request: e, response: e }),
63 qe = s.register(59, { request: e, response: e }),
64 ie = s.register(60, { request: e, response: e }),
65 ce = s.register(61, { request: e, response: e }),
66 me = s.register(62, { request: e, response: e }),
67 ge = s.register(63, { request: e, response: e }),
68 pe = s.register(64, { request: e, response: e }),
69 ye = s.register(65, { request: e, response: e }),
70 fe = s.register(66, { request: e, response: e }),
71 Ae = s.register(67, { request: e, response: e }),
72 de = s.register(68, { request: e, response: e }),
73 be = s.register(69, { request: e, response: e }),
74 Re = s.register(70, { request: e, response: e }),
75 le = s.register(71, { request: e, response: e }),
76 Se = s.register(72, { request: e, response: e }),
77 we = s.register(73, { request: e, response: e }),
78 ve = s.register(74, { request: e, response: e }),
79 Me = s.register(75, { request: e, response: e }),
80 he = s.register(76, { request: e, response: e }),
81 Ce = s.register(77, { request: e, response: e }),
82 Pe = s.register(78, { request: e, response: e }),
83 Ie = s.register(79, { request: e, response: e }),
84 Fe = s.register(80, { request: e, response: e }),
85 ke = s.register(81, { request: e, response: e }),
86 De = s.register(82, { request: e, response: e }),
87 Ue = s.register(83, { request: e, response: e }),
88 Ee = s.register(84, { request: e, response: e }),
89 Te = s.register(85, { request: e, response: e }),
90 Be = s.register(86, { request: e, response: e }),
91 Le = s.register(87, { request: e, response: e }),
92 xe = s.register(88, { request: e, response: e }),
93 Ne = s.register(89, { request: e, response: e }),
94 je = s.register(90, { request: e, response: e }),
95 ze = s.register(91, { request: e, response: e }),
96 He = s.register(92, { request: e, response: e }),
97 Ke = s.register(93, { request: e, response: e }),
98 Ve = s.register(94, { request: e, response: e }),
99 Je = s.register(95, { request: e, response: e }),
100 Oe = s.register(96, { request: e, response: e }),
101 We = s.register(97, { request: e, response: e }),
102 Ge = s.register(98, { request: e, response: e }),
103 Qe = s.register(99, { request: e, response: e }),
104 Xe = s.register(100, { request: e, response: e }),
105 Ye = s.register(101, { request: e, response: e }),
106 Ze = s.register(102, { request: e, response: e }),
107 $e = s.register(103, { request: e, response: e }),
108 _e = s.register(104, { request: e, response: e }),
109 er = s.register(105, { request: e, response: e }),
110 rr = s.register(106, { request: e, response: e }),
111 sr = s.register(107, { request: e, response: e }),
112 tr = s.register(108, { request: e, response: e }),
113 or = s.register(109, { request: e, response: e }),
114 nr = s.register(110, { request: e, response: e }),
115 ur = s.register(111, { request: e, response: e }),
116 ar = s.register(112, { request: e, response: e }),
117 qr = s.register(113, { request: e, response: e }),
118 ir = s.register(114, { request: e, response: e }),
119 cr = s.register(115, { request: e, response: e }),
120 mr = s.register(116, { request: e, response: e }),
121 gr = s.register(117, { request: e, response: e }),
122 pr = s.register(118, { request: e, response: e }),
123 yr = s.register(119, { request: e, response: e }),
124 fr = s.register(120, { request: e, response: e }),
125 Ar = s.register(121, { request: e, response: e }),
126 dr = s.register(122, { request: e, response: e }),
127 br = s.register(123, { request: e, response: e }),
128 Rr = s.register(124, { request: e, response: e }),
129 lr = s.register(125, { request: e, response: e }),
130 Sr = s.register(126, { request: e, response: e }),
131 wr = s.register(127, { request: e, response: e }),
132 vr = s.register(128, { request: e, response: e }),
133 Mr = s.register(129, { request: e, response: e }),
134 hr = s.register(130, { request: e, response: e }),
135 Cr = s.register(131, { request: e, response: e }),
136 Pr = s.register(132, { request: e, response: e }),
137 Ir = s.register(133, { request: e, response: e }),
138 Fr = s.register(134, { request: e, response: e }),
139 kr = s.register(135, { request: e, response: e }),
140 Dr = s.register(136, { request: e, response: e }),
141 Ur = s.register(137, { request: e, response: e }),
142 Er = s.register(138, { request: e, response: e }),
143 Tr = s.register(139, { request: e, response: e }),
144 Br = s.register(140, { request: e, response: e }),
145 Lr = s.register(141, { request: e, response: e }),
146 xr = s.register(142, { request: e, response: e }),
147 Nr = s.register(143, { request: e, response: e }),
148 jr = s.register(144, { request: e, response: e }),
149 zr = s.register(145, { request: e, response: e }),
150 Hr = s.register(146, { request: e, response: e }),
151 Kr = s.register(147, { request: e, response: e }),
152 Vr = s.register(148, { request: e, response: e }),
153 Jr = s.register(149, { request: e, response: e }),
154 Or = s.register(150, { request: e, response: e }),
155 Wr = s.register(151, { request: e, response: e }),
156 Gr = s.register(152, { request: e, response: e }),
157 Qr = s.register(153, { request: e, response: e }),
158 Xr = s.register(154, { request: e, response: e }),
159 Yr = s.register(155, { request: e, response: e }),
160 Zr = s.register(156, { request: e, response: e }),
161 $r = s.register(157, { request: e, response: e }),
162 _r = s.register(158, { request: e, response: e }),
163 es = s.register(159, { request: e, response: e }),
164 rs = s.register(160, { request: e, response: e }),
165 ss = s.register(161, { request: e, response: e }),
166 ts = s.register(162, { request: e, response: e }),
167 os = s.register(163, { request: e, response: e }),
168 ns = s.register(164, { request: e, response: e }),
169 us = s.register(165, { request: e, response: e }),
170 as = s.register(166, { request: e, response: e }),
171 qs = s.register(167, { request: e, response: e }),
172 is = s.register(168, { request: e, response: e }),
173 cs = s.register(169, { request: e, response: e }),
174 ms = s.register(170, { request: e, response: e }),
175 gs = s.register(171, { request: e, response: e }),
176 ps = s.register(172, { request: e, response: e }),
177 ys = s.register(173, { request: e, response: e }),
178 fs = s.register(174, { request: e, response: e }),
179 As = s.register(175, { request: e, response: e }),
180 ds = s.register(176, { request: e, response: e }),
181 bs = s.register(177, { request: e, response: e }),
182 Rs = s.register(178, { request: e, response: e }),
183 ls = s.register(179, { request: e, response: e }),
184 Ss = s.register(180, { request: e, response: e }),
185 ws = s.register(181, { request: e, response: e }),
186 vs = s.register(182, { request: e, response: e }),
187 Ms = s.register(183, { request: e, response: e }),
188 hs = s.register(184, { request: e, response: e }),
189 Cs = s.register(185, { request: e, response: e }),
190 Ps = s.register(186, { request: e, response: e }),
191 Is = s.register(187, { request: e, response: e }),
192 Fs = s.register(188, { request: e, response: e }),
193 ks = s.register(189, { request: e, response: e }),
194 Ds = s.register(190, { request: e, response: e }),
195 Us = s.register(191, { request: e, response: e }),
196 Es = s.register(192, { request: e, response: e }),
197 Ts = s.register(193, { request: e, response: e }),
198 Bs = s.register(194, { request: e, response: e }),
199 Ls = s.register(195, { request: e, response: e }),
200 xs = s.register(196, { request: e, response: e }),
201 Ns = s.register(197, { request: e, response: e }),
202 js = s.register(198, { request: e, response: e }),
203 zs = s.register(199, { request: e, response: e }),
204 Hs = s.register(200, { request: e, response: e }),
205 Ks = s.register(201, { request: e, response: e }),
206 Vs = s.register(202, { request: e, response: e }),
207 Js = s.register(203, { request: e, response: e }),
208 Os = s.register(204, { request: e, response: e }),
209 Ws = s.register(205, { request: e, response: e }),
210 Gs = s.register(206, { request: e, response: e }),
211 Qs = s.register(207, { request: e, response: e }),
212 Xs = s.register(208, { request: e, response: e }),
213 Ys = s.register(209, { request: e, response: e }),
214 Zs = s.register(210, { request: e, response: e }),
215 $s = s.register(211, { request: e, response: e }),
216 _s = s.register(212, { request: e, response: e }),
217 et = s.register(213, { request: e, response: e }),
218 rt = s.register(214, { request: e, response: e }),
219 st = s.register(215, { request: e, response: e }),
220 tt = s.register(216, { request: e, response: e }),
221 ot = s.register(217, { request: e, response: e }),
222 nt = s.register(218, { request: e, response: e }),
223 ut = s.register(219, { request: e, response: e }),
224 at = s.register(220, { request: e, response: e }),
225 qt = s.register(221, { request: e, response: e }),
226 it = s.register(222, { request: e, response: e }),
227 ct = s.register(223, { request: e, response: e }),
228 mt = s.register(224, { request: e, response: e }),
229 gt = s.register(225, { request: e, response: e }),
230 pt = s.register(226, { request: e, response: e }),
231 yt = s.register(227, { request: e, response: e }),
232 ft = s.register(228, { request: e, response: e }),
233 At = s.register(229, { request: e, response: e }),
234 dt = s.register(230, { request: e, response: e }),
235 bt = s.register(231, { request: e, response: e }),
236 Rt = s.register(232, { request: e, response: e }),
237 lt = s.register(233, { request: e, response: e }),
238 St = s.register(234, { request: e, response: e }),
239 wt = s.register(235, { request: e, response: e }),
240 vt = s.register(236, { request: e, response: e }),
241 Mt = s.register(237, { request: e, response: e }),
242 ht = s.register(238, { request: e, response: e }),
243 Ct = s.register(239, { request: e, response: e }),
244 Pt = s.register(240, { request: e, response: e }),
245 It = s.register(241, { request: e, response: e }),
246 Ft = s.register(242, { request: e, response: e }),
247 kt = s.register(243, { request: e, response: e }),
248 Dt = s.register(244, { request: e, response: e }),
249 Ut = s.register(245, { request: e, response: e }),
250 Et = s.register(246, { request: e, response: e }),
251 Tt = s.register(247, { request: e, response: e }),
252 Bt = s.register(248, { request: e, response: e }),
253 Lt = s.register(249, { request: e, response: e }),
254 xt = s.register(250, { request: e, response: e }),
255 Nt = s.register(251, { request: e, response: e }),
256 jt = s.register(252, { request: e, response: e }),
257 zt = s.register(253, { request: e, response: e }),
258 Ht = s.register(254, { request: e, response: e }),
259 Kt = s.register(255, { request: e, response: e }),
260 Vt = s.register(256, { request: e, response: e }),
261 Jt = s.register(257, { request: e, response: e }),
262 Ot = s.register(258, { request: e, response: e })
263 return {
264 swarm: {
265 ready: (...e) => {
266 const r = Array.from(e)
267 return t.request(r)
268 },
269 },
270 core: {
271 getVersion: (...e) => {
272 const r = Array.from(e)
273 return o.request(r)
274 },
275 subscribeRoomVersion: (...e) => {
276 const s = Array.from(e),
277 t = n.createRequestStream()
278 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
279 },
280 subscribeForceUpdates: (...e) => {
281 const s = Array.from(e),
282 t = u.createRequestStream()
283 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
284 },
285 upgradeRoom: (...e) => {
286 const r = Array.from(e)
287 return a.request(r)
288 },
289 updateUserSettings: (...e) => {
290 const r = Array.from(e)
291 return q.request(r)
292 },
293 getIdentity: (...e) => {
294 const r = Array.from(e)
295 return i.request(r)
296 },
297 subscribeIdentity: (...e) => {
298 const s = Array.from(e),
299 t = c.createRequestStream()
300 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
301 },
302 generateIdentity: (...e) => {
303 const r = Array.from(e)
304 return m.request(r)
305 },
306 restoreIdentity: (...e) => {
307 const r = Array.from(e)
308 return g.request(r)
309 },
310 getRecoveryPhrase: (...e) => {
311 const r = Array.from(e)
312 return p.request(r)
313 },
314 getEncryptedRecoveryPhrase: (...e) => {
315 const r = Array.from(e)
316 return y.request(r)
317 },
318 decryptEncryptedRecoveryPhrase: (...e) => {
319 const r = Array.from(e)
320 return f.request(r)
321 },
322 freeRecoveryPhrase: (...e) => {
323 const r = Array.from(e)
324 return A.request(r)
325 },
326 confirmRecoveryPhrase: (...e) => {
327 const r = Array.from(e)
328 return d.request(r)
329 },
330 storeRecoveryPhrase: (...e) => {
331 const r = Array.from(e)
332 return b.request(r)
333 },
334 confirmIdentity: (...e) => {
335 const r = Array.from(e)
336 return R.request(r)
337 },
338 confirmPairingRequest: (...e) => {
339 const r = Array.from(e)
340 return l.request(r)
341 },
342 subscribeIdentityPairingRequests: (...e) => {
343 const s = Array.from(e),
344 t = S.createRequestStream()
345 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
346 },
347 updateIdentityProfile: (...e) => {
348 const r = Array.from(e)
349 return w.request(r)
350 },
351 updateIdentityDevice: (...e) => {
352 const r = Array.from(e)
353 return v.request(r)
354 },
355 removeIdentityDevice: (...e) => {
356 const r = Array.from(e)
357 return M.request(r)
358 },
359 getLinkInfo: (...e) => {
360 const r = Array.from(e)
361 return h.request(r)
362 },
363 startPairingIdentity: (...e) => {
364 const r = Array.from(e)
365 return C.request(r)
366 },
367 pairIdentity: (...e) => {
368 const r = Array.from(e)
369 return P.request(r)
370 },
371 createRoom: (...e) => {
372 const r = Array.from(e)
373 return I.request(r)
374 },
375 pairRoom: (...e) => {
376 const r = Array.from(e)
377 return F.request(r)
378 },
379 leaveRoom: (...e) => {
380 const r = Array.from(e)
381 return k.request(r)
382 },
383 startPairingRoom: (...e) => {
384 const r = Array.from(e)
385 return D.request(r)
386 },
387 stopPairingRoom: (...e) => {
388 const r = Array.from(e)
389 return U.request(r)
390 },
391 subscribePendingRooms: (...e) => {
392 const s = Array.from(e),
393 t = E.createRequestStream()
394 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
395 },
396 subscribePushNotificationChanges: (...e) => {
397 const s = Array.from(e),
398 t = T.createRequestStream()
399 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
400 },
401 subscribeActivateRoom: (...e) => {
402 const s = Array.from(e),
403 t = B.createRequestStream()
404 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
405 },
406 getRoomKeys: (...e) => {
407 const r = Array.from(e)
408 return L.request(r)
409 },
410 resyncPrivateProfile: (...e) => {
411 const r = Array.from(e)
412 return x.request(r)
413 },
414 getTipSize: (...e) => {
415 const r = Array.from(e)
416 return N.request(r)
417 },
418 bookmark: (...e) => {
419 const r = Array.from(e)
420 return j.request(r)
421 },
422 unbookmark: (...e) => {
423 const r = Array.from(e)
424 return z.request(r)
425 },
426 subscribeBookmarks: (...e) => {
427 const s = Array.from(e),
428 t = H.createRequestStream()
429 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
430 },
431 getRoomInfo: (...e) => {
432 const r = Array.from(e)
433 return K.request(r)
434 },
435 subscribeRoomInfo: (...e) => {
436 const s = Array.from(e),
437 t = V.createRequestStream()
438 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
439 },
440 searchRooms: (...e) => {
441 const r = Array.from(e)
442 return J.request(r)
443 },
444 getRecentRooms: (...e) => {
445 const r = Array.from(e)
446 return O.request(r)
447 },
448 getLocalRoomMetadata: (...e) => {
449 const r = Array.from(e)
450 return W.request(r)
451 },
452 subscribeRecentRooms: (...e) => {
453 const s = Array.from(e),
454 t = G.createRequestStream()
455 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
456 },
457 subscribeFavoriteRooms: (...e) => {
458 const s = Array.from(e),
459 t = Q.createRequestStream()
460 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
461 },
462 subscribeUnreadActivity: (...e) => {
463 const s = Array.from(e),
464 t = X.createRequestStream()
465 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
466 },
467 setRoomUnread: (...e) => {
468 const r = Array.from(e)
469 return Y.request(r)
470 },
471 bumpRoomPriority: (...e) => {
472 const r = Array.from(e)
473 return Z.request(r)
474 },
475 addDevice: (...e) => {
476 const r = Array.from(e)
477 return $.request(r)
478 },
479 removeDevice: (...e) => {
480 const r = Array.from(e)
481 return _.request(r)
482 },
483 getDevice: (...e) => {
484 const r = Array.from(e)
485 return ee.request(r)
486 },
487 getDevices: (...e) => {
488 const r = Array.from(e)
489 return re.request(r)
490 },
491 getDevicesByMemberId: (...e) => {
492 const r = Array.from(e)
493 return se.request(r)
494 },
495 getCurrentDeviceId: (...e) => {
496 const r = Array.from(e)
497 return te.request(r)
498 },
499 moveIndexer: (...e) => {
500 const r = Array.from(e)
501 return oe.request(r)
502 },
503 subscribeDevice: (...e) => {
504 const s = Array.from(e),
505 t = ne.createRequestStream()
506 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
507 },
508 subscribeDevices: (...e) => {
509 const s = Array.from(e),
510 t = ue.createRequestStream()
511 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
512 },
513 createIdentityInvitation: (...e) => {
514 const r = Array.from(e)
515 return ae.request(r)
516 },
517 createInvitation: (...e) => {
518 const r = Array.from(e)
519 return qe.request(r)
520 },
521 updateMember: (...e) => {
522 const r = Array.from(e)
523 return ie.request(r)
524 },
525 isMemberMuted: (...e) => {
526 const r = Array.from(e)
527 return ce.request(r)
528 },
529 getMember: (...e) => {
530 const r = Array.from(e)
531 return me.request(r)
532 },
533 removeMember: (...e) => {
534 const r = Array.from(e)
535 return ge.request(r)
536 },
537 getMembers: (...e) => {
538 const r = Array.from(e)
539 return pe.request(r)
540 },
541 getActiveMembers: (...e) => {
542 const r = Array.from(e)
543 return ye.request(r)
544 },
545 subscribeActiveMembers: (...e) => {
546 const s = Array.from(e),
547 t = fe.createRequestStream()
548 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
549 },
550 getModerators: (...e) => {
551 const r = Array.from(e)
552 return Ae.request(r)
553 },
554 getMemberCount: (...e) => {
555 const r = Array.from(e)
556 return de.request(r)
557 },
558 waitUntilJoined: (...e) => {
559 const r = Array.from(e)
560 return be.request(r)
561 },
562 getMemberForDevice: (...e) => {
563 const r = Array.from(e)
564 return Re.request(r)
565 },
566 subscribeMemberCount: (...e) => {
567 const s = Array.from(e),
568 t = le.createRequestStream()
569 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
570 },
571 subscribeMember: (...e) => {
572 const s = Array.from(e),
573 t = Se.createRequestStream()
574 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
575 },
576 subscribeMembers: (...e) => {
577 const s = Array.from(e),
578 t = we.createRequestStream()
579 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
580 },
581 subscribeModerators: (...e) => {
582 const s = Array.from(e),
583 t = ve.createRequestStream()
584 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
585 },
586 subscribeMemberForDevice: (...e) => {
587 const s = Array.from(e),
588 t = Me.createRequestStream()
589 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
590 },
591 changeMemberRole: (...e) => {
592 const r = Array.from(e)
593 return he.request(r)
594 },
595 muteMember: (...e) => {
596 const r = Array.from(e)
597 return Ce.request(r)
598 },
599 unmuteMember: (...e) => {
600 const r = Array.from(e)
601 return Pe.request(r)
602 },
603 getSearchMembers: (...e) => {
604 const r = Array.from(e)
605 return Ie.request(r)
606 },
607 getPushNotificationMembers: (...e) => {
608 const r = Array.from(e)
609 return Fe.request(r)
610 },
611 subscribeSearchMembers: (...e) => {
612 const s = Array.from(e),
613 t = ke.createRequestStream()
614 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
615 },
616 subscribePushNotificationMembers: (...e) => {
617 const s = Array.from(e),
618 t = De.createRequestStream()
619 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
620 },
621 getContactInfo: (...e) => {
622 const r = Array.from(e)
623 return Ue.request(r)
624 },
625 subscribeContactInfo: (...e) => {
626 const s = Array.from(e),
627 t = Ee.createRequestStream()
628 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
629 },
630 getSelfContactInfo: (...e) => {
631 const r = Array.from(e)
632 return Te.request(r)
633 },
634 blockMember: (...e) => {
635 const r = Array.from(e)
636 return Be.request(r)
637 },
638 unblockMember: (...e) => {
639 const r = Array.from(e)
640 return Le.request(r)
641 },
642 getBlockedMembers: (...e) => {
643 const r = Array.from(e)
644 return xe.request(r)
645 },
646 subscribeBlockedMembers: (...e) => {
647 const s = Array.from(e),
648 t = Ne.createRequestStream()
649 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
650 },
651 getConnectedMembers: (...e) => {
652 const r = Array.from(e)
653 return je.request(r)
654 },
655 subscribeConnectedMembers: (...e) => {
656 const s = Array.from(e),
657 t = ze.createRequestStream()
658 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
659 },
660 updateConfig: (...e) => {
661 const r = Array.from(e)
662 return He.request(r)
663 },
664 getConfig: (...e) => {
665 const r = Array.from(e)
666 return Ke.request(r)
667 },
668 subscribeConfig: (...e) => {
669 const s = Array.from(e),
670 t = Ve.createRequestStream()
671 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
672 },
673 updateRoomSettings: (...e) => {
674 const r = Array.from(e)
675 return Je.request(r)
676 },
677 disableMembershipEvents: (...e) => {
678 const r = Array.from(e)
679 return Oe.request(r)
680 },
681 enableMembershipEvents: (...e) => {
682 const r = Array.from(e)
683 return We.request(r)
684 },
685 addChatMessage: (...e) => {
686 const r = Array.from(e)
687 return Ge.request(r)
688 },
689 updateChatMessage: (...e) => {
690 const r = Array.from(e)
691 return Qe.request(r)
692 },
693 removeChatMessage: (...e) => {
694 const r = Array.from(e)
695 return Xe.request(r)
696 },
697 forwardChatMessage: (...e) => {
698 const r = Array.from(e)
699 return Ye.request(r)
700 },
701 pinChatMessage: (...e) => {
702 const r = Array.from(e)
703 return Ze.request(r)
704 },
705 unpinChatMessage: (...e) => {
706 const r = Array.from(e)
707 return $e.request(r)
708 },
709 startCall: (...e) => {
710 const r = Array.from(e)
711 return _e.request(r)
712 },
713 joinCall: (...e) => {
714 const r = Array.from(e)
715 return er.request(r)
716 },
717 leaveCall: (...e) => {
718 const r = Array.from(e)
719 return rr.request(r)
720 },
721 endCall: (...e) => {
722 const r = Array.from(e)
723 return sr.request(r)
724 },
725 addCallStream: (...e) => {
726 const r = Array.from(e)
727 return tr.request(r)
728 },
729 removeCallStream: (...e) => {
730 const r = Array.from(e)
731 return or.request(r)
732 },
733 getActiveCalls: (...e) => {
734 const r = Array.from(e)
735 return nr.request(r)
736 },
737 getCalls: (...e) => {
738 const r = Array.from(e)
739 return ur.request(r)
740 },
741 subscribeActiveCalls: (...e) => {
742 const s = Array.from(e),
743 t = ar.createRequestStream()
744 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
745 },
746 subscribeCalls: (...e) => {
747 const s = Array.from(e),
748 t = qr.createRequestStream()
749 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
750 },
751 addCallStartedEvent: (...e) => {
752 const r = Array.from(e)
753 return ir.request(r)
754 },
755 addCallHangupEvent: (...e) => {
756 const r = Array.from(e)
757 return cr.request(r)
758 },
759 addCallMissedEvent: (...e) => {
760 const r = Array.from(e)
761 return mr.request(r)
762 },
763 addLocationSharedEvent: (...e) => {
764 const r = Array.from(e)
765 return gr.request(r)
766 },
767 addRoomAvatarChangedEvent: (...e) => {
768 const r = Array.from(e)
769 return pr.request(r)
770 },
771 addEvent: (...e) => {
772 const r = Array.from(e)
773 return yr.request(r)
774 },
775 removeEvent: (...e) => {
776 const r = Array.from(e)
777 return fr.request(r)
778 },
779 getChatMessage: (...e) => {
780 const r = Array.from(e)
781 return Ar.request(r)
782 },
783 getChatMessageById: (...e) => {
784 const r = Array.from(e)
785 return dr.request(r)
786 },
787 getChatMessages: (...e) => {
788 const r = Array.from(e)
789 return br.request(r)
790 },
791 getPinnedChatMessages: (...e) => {
792 const r = Array.from(e)
793 return Rr.request(r)
794 },
795 getChatLength: (...e) => {
796 const r = Array.from(e)
797 return lr.request(r)
798 },
799 subscribeChatMessages: (...e) => {
800 const s = Array.from(e),
801 t = Sr.createRequestStream()
802 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
803 },
804 subscribeChatLength: (...e) => {
805 const s = Array.from(e),
806 t = wr.createRequestStream()
807 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
808 },
809 searchChatMessages: (...e) => {
810 const r = Array.from(e)
811 return vr.request(r)
812 },
813 createChatSearchStream: (...e) => {
814 const s = Array.from(e),
815 t = Mr.createRequestStream()
816 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
817 },
818 sendDMFromContact: (...e) => {
819 const r = Array.from(e)
820 return hr.request(r)
821 },
822 sendDMRequest: (...e) => {
823 const r = Array.from(e)
824 return Cr.request(r)
825 },
826 sendInvitations: (...e) => {
827 const r = Array.from(e)
828 return Pr.request(r)
829 },
830 updatePrivateMailboxRecord: (...e) => {
831 const r = Array.from(e)
832 return Ir.request(r)
833 },
834 getPrivateMailboxRecords: (...e) => {
835 const r = Array.from(e)
836 return Fr.request(r)
837 },
838 subscribePrivateMailbox: (...e) => {
839 const s = Array.from(e),
840 t = kr.createRequestStream()
841 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
842 },
843 getSentPrivateMailboxRecords: (...e) => {
844 const r = Array.from(e)
845 return Dr.request(r)
846 },
847 subscribeSentPrivateMailbox: (...e) => {
848 const s = Array.from(e),
849 t = Ur.createRequestStream()
850 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
851 },
852 getDmByMemberId: (...e) => {
853 const r = Array.from(e)
854 return Er.request(r)
855 },
856 getDmRequestsByStatus: (...e) => {
857 const r = Array.from(e)
858 return Tr.request(r)
859 },
860 subscribeDmRequestsByStatus: (...e) => {
861 const s = Array.from(e),
862 t = Br.createRequestStream()
863 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
864 },
865 acceptDmRequest: (...e) => {
866 const r = Array.from(e)
867 return Lr.request(r)
868 },
869 rejectDmRequest: (...e) => {
870 const r = Array.from(e)
871 return xr.request(r)
872 },
873 addReaction: (...e) => {
874 const r = Array.from(e)
875 return Nr.request(r)
876 },
877 removeReaction: (...e) => {
878 const r = Array.from(e)
879 return jr.request(r)
880 },
881 getLatestReactions: (...e) => {
882 const r = Array.from(e)
883 return zr.request(r)
884 },
885 getReactions: (...e) => {
886 const r = Array.from(e)
887 return Hr.request(r)
888 },
889 subscribeReactions: (...e) => {
890 const s = Array.from(e),
891 t = Kr.createRequestStream()
892 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
893 },
894 addChatReport: (...e) => {
895 const r = Array.from(e)
896 return Vr.request(r)
897 },
898 removeChatReport: (...e) => {
899 const r = Array.from(e)
900 return Jr.request(r)
901 },
902 reportMember: (...e) => {
903 const r = Array.from(e)
904 return Or.request(r)
905 },
906 getReportedMembers: (...e) => {
907 const r = Array.from(e)
908 return Wr.request(r)
909 },
910 subscribeReportedMembers: (...e) => {
911 const s = Array.from(e),
912 t = Gr.createRequestStream()
913 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
914 },
915 getReportedMessages: (...e) => {
916 const r = Array.from(e)
917 return Qr.request(r)
918 },
919 subscribeReportedMessages: (...e) => {
920 const s = Array.from(e),
921 t = Xr.createRequestStream()
922 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
923 },
924 addFileBlob: (...e) => {
925 const r = Array.from(e)
926 return Yr.request(r)
927 },
928 addFile: (...e) => {
929 const r = Array.from(e)
930 return Zr.request(r)
931 },
932 saveFileBlob: (...e) => {
933 const r = Array.from(e)
934 return $r.request(r)
935 },
936 saveFile: (...e) => {
937 const r = Array.from(e)
938 return _r.request(r)
939 },
940 subscribeAddFile: (...e) => {
941 const s = Array.from(e),
942 t = es.createRequestStream()
943 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
944 },
945 sendFile: (...e) => {
946 const r = Array.from(e)
947 return rs.request(r)
948 },
949 removeFile: (...e) => {
950 const r = Array.from(e)
951 return ss.request(r)
952 },
953 refreshFileLinks: (...e) => {
954 const r = Array.from(e)
955 return ts.request(r)
956 },
957 subscribeFileInfo: (...e) => {
958 const s = Array.from(e),
959 t = os.createRequestStream()
960 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
961 },
962 clearAllFiles: (...e) => {
963 const r = Array.from(e)
964 return ns.request(r)
965 },
966 getFileEntry: (...e) => {
967 const r = Array.from(e)
968 return us.request(r)
969 },
970 getLocalFiles: (...e) => {
971 const r = Array.from(e)
972 return as.request(r)
973 },
974 getFiles: (...e) => {
975 const r = Array.from(e)
976 return qs.request(r)
977 },
978 startDownload: (...e) => {
979 const r = Array.from(e)
980 return is.request(r)
981 },
982 cancelDownload: (...e) => {
983 const r = Array.from(e)
984 return cs.request(r)
985 },
986 clearFile: (...e) => {
987 const r = Array.from(e)
988 return ms.request(r)
989 },
990 unclearFile: (...e) => {
991 const r = Array.from(e)
992 return gs.request(r)
993 },
994 getFileCleared: (...e) => {
995 const r = Array.from(e)
996 return ps.request(r)
997 },
998 subscribeFileCleared: (...e) => {
999 const s = Array.from(e),
1000 t = ys.createRequestStream()
1001 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1002 },
1003 subscribeFiles: (...e) => {
1004 const s = Array.from(e),
1005 t = fs.createRequestStream()
1006 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1007 },
1008 getStats: (...e) => {
1009 const r = Array.from(e)
1010 return As.request(r)
1011 },
1012 subscribeProgress: (...e) => {
1013 const s = Array.from(e),
1014 t = ds.createRequestStream()
1015 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1016 },
1017 subscribeSystemUpdateRequest: (...e) => {
1018 const s = Array.from(e),
1019 t = bs.createRequestStream()
1020 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1021 },
1022 lookupUsername: (...e) => {
1023 const r = Array.from(e)
1024 return Rs.request(r)
1025 },
1026 lookupUserByMemberId: (...e) => {
1027 const r = Array.from(e)
1028 return ls.request(r)
1029 },
1030 subscribeUsername: (...e) => {
1031 const s = Array.from(e),
1032 t = Ss.createRequestStream()
1033 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1034 },
1035 registerUsername: (...e) => {
1036 const r = Array.from(e)
1037 return ws.request(r)
1038 },
1039 updateUsername: (...e) => {
1040 const r = Array.from(e)
1041 return vs.request(r)
1042 },
1043 searchUsername: (...e) => {
1044 const r = Array.from(e)
1045 return Ms.request(r)
1046 },
1047 getReservationsByKey: (...e) => {
1048 const r = Array.from(e)
1049 return hs.request(r)
1050 },
1051 checkUsername: (...e) => {
1052 const r = Array.from(e)
1053 return Cs.request(r)
1054 },
1055 updateRoomPreferences: (...e) => {
1056 const r = Array.from(e)
1057 return Ps.request(r)
1058 },
1059 getRoomPreferences: (...e) => {
1060 const r = Array.from(e)
1061 return Is.request(r)
1062 },
1063 audit: (...e) => {
1064 const r = Array.from(e)
1065 return Fs.request(r)
1066 },
1067 close: (...e) => {
1068 const r = Array.from(e)
1069 return ks.request(r)
1070 },
1071 suspend: (...e) => {
1072 const r = Array.from(e)
1073 return Ds.request(r)
1074 },
1075 resume: (...e) => {
1076 const r = Array.from(e)
1077 return Us.request(r)
1078 },
1079 getDebugFlags: (...e) => {
1080 const r = Array.from(e)
1081 return Es.request(r)
1082 },
1083 updateDebugFlag: (...e) => {
1084 const r = Array.from(e)
1085 return Ts.request(r)
1086 },
1087 repair: (...e) => {
1088 const r = Array.from(e)
1089 return Bs.request(r)
1090 },
1091 rotateWriter: (...e) => {
1092 const r = Array.from(e)
1093 return Ls.request(r)
1094 },
1095 getRoomStats: (...e) => {
1096 const r = Array.from(e)
1097 return xs.request(r)
1098 },
1099 compact: (...e) => {
1100 const r = Array.from(e)
1101 return Ns.request(r)
1102 },
1103 setUnread: (...e) => {
1104 const r = Array.from(e)
1105 return js.request(r)
1106 },
1107 getUnread: (...e) => {
1108 const r = Array.from(e)
1109 return zs.request(r)
1110 },
1111 getUnreadAnchor: (...e) => {
1112 const r = Array.from(e)
1113 return Hs.request(r)
1114 },
1115 setUnreadAnchor: (...e) => {
1116 const r = Array.from(e)
1117 return Ks.request(r)
1118 },
1119 subscribeUnreadAnchor: (...e) => {
1120 const s = Array.from(e),
1121 t = Vs.createRequestStream()
1122 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1123 },
1124 subscribeSentLength: (...e) => {
1125 const s = Array.from(e),
1126 t = Js.createRequestStream()
1127 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1128 },
1129 createErrorStream: (...e) => {
1130 const s = Array.from(e),
1131 t = Os.createRequestStream()
1132 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1133 },
1134 boot: (...e) => {
1135 const r = Array.from(e)
1136 return Ws.request(r)
1137 },
1138 subscribeErrors: (...e) => {
1139 const s = Array.from(e),
1140 t = Gs.createRequestStream()
1141 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1142 },
1143 setCallRingingId: (...e) => {
1144 const r = Array.from(e)
1145 return Qs.request(r)
1146 },
1147 subscribeNotifications: (...e) => {
1148 const s = Array.from(e),
1149 t = Xs.createRequestStream()
1150 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1151 },
1152 getDHTSettings: (...e) => {
1153 const r = Array.from(e)
1154 return Ys.request(r)
1155 },
1156 updateDHTSettings: (...e) => {
1157 const r = Array.from(e)
1158 return Zs.request(r)
1159 },
1160 setRoomFavorite: (...e) => {
1161 const r = Array.from(e)
1162 return $s.request(r)
1163 },
1164 clearOldFiles: (...e) => {
1165 const r = Array.from(e)
1166 return _s.request(r)
1167 },
1168 },
1169 preferences: {
1170 subscribe: (...e) => {
1171 const s = Array.from(e),
1172 t = et.createRequestStream()
1173 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1174 },
1175 update: (...e) => {
1176 const r = Array.from(e)
1177 return rt.request(r)
1178 },
1179 query: (...e) => {
1180 const r = Array.from(e)
1181 return st.request(r)
1182 },
1183 },
1184 call: {
1185 authorize: (...e) => {
1186 const r = Array.from(e)
1187 return tt.request(r)
1188 },
1189 deauthorize: (...e) => {
1190 const r = Array.from(e)
1191 return ot.request(r)
1192 },
1193 joinPeer: (...e) => {
1194 const r = Array.from(e)
1195 return nt.request(r)
1196 },
1197 leavePeer: (...e) => {
1198 const r = Array.from(e)
1199 return ut.request(r)
1200 },
1201 requestTrack: (...e) => {
1202 const r = Array.from(e)
1203 return at.request(r)
1204 },
1205 unrequestTrack: (...e) => {
1206 const r = Array.from(e)
1207 return qt.request(r)
1208 },
1209 signalMedia: (...e) => {
1210 const r = Array.from(e)
1211 return it.request(r)
1212 },
1213 getRequestedTracks: (...e) => {
1214 const r = Array.from(e)
1215 return ct.request(r)
1216 },
1217 subscribeRequestedTracks: (...e) => {
1218 const s = Array.from(e),
1219 t = mt.createRequestStream()
1220 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1221 },
1222 subscribeMediaSignals: (...e) => {
1223 const s = Array.from(e),
1224 t = gt.createRequestStream()
1225 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1226 },
1227 subscribeProxyUpdates: (...e) => {
1228 const s = Array.from(e),
1229 t = pt.createRequestStream()
1230 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1231 },
1232 shareTrack: (...e) => {
1233 const r = Array.from(e)
1234 return yt.request(r)
1235 },
1236 unshareTrack: (...e) => {
1237 const r = Array.from(e)
1238 return ft.request(r)
1239 },
1240 relayTrack: (...e) => {
1241 const r = Array.from(e)
1242 return At.request(r)
1243 },
1244 unrelayTrack: (...e) => {
1245 const r = Array.from(e)
1246 return dt.request(r)
1247 },
1248 subscribeAvailableTracks: (...e) => {
1249 const s = Array.from(e),
1250 t = bt.createRequestStream()
1251 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1252 },
1253 getAvailableTracks: (...e) => {
1254 const r = Array.from(e)
1255 return Rt.request(r)
1256 },
1257 setPresent: (...e) => {
1258 const r = Array.from(e)
1259 return lt.request(r)
1260 },
1261 setNotPresent: (...e) => {
1262 const r = Array.from(e)
1263 return St.request(r)
1264 },
1265 subscribePresence: (...e) => {
1266 const s = Array.from(e),
1267 t = wt.createRequestStream()
1268 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1269 },
1270 getPresence: (...e) => {
1271 const r = Array.from(e)
1272 return vt.request(r)
1273 },
1274 },
1275 tracing: {
1276 start: (...e) => {
1277 const r = Array.from(e)
1278 return Mt.request(r)
1279 },
1280 addFrontendTrace: (...e) => {
1281 const r = Array.from(e)
1282 return ht.request(r)
1283 },
1284 },
1285 console: {
1286 log: (...e) => {
1287 const r = Array.from(e)
1288 return Ct.request(r)
1289 },
1290 warn: (...e) => {
1291 const r = Array.from(e)
1292 return Pt.request(r)
1293 },
1294 error: (...e) => {
1295 const r = Array.from(e)
1296 return It.request(r)
1297 },
1298 },
1299 network: {
1300 subscribe: (...e) => {
1301 const s = Array.from(e),
1302 t = Ft.createRequestStream()
1303 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1304 },
1305 query: (...e) => {
1306 const r = Array.from(e)
1307 return kt.request(r)
1308 },
1309 subscribeDebug: (...e) => {
1310 const s = Array.from(e),
1311 t = Dt.createRequestStream()
1312 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1313 },
1314 debug: (...e) => {
1315 const r = Array.from(e)
1316 return Ut.request(r)
1317 },
1318 },
1319 error: {
1320 subscribe: (...e) => {
1321 const s = Array.from(e),
1322 t = Et.createRequestStream()
1323 return (t.write(s), t.end(), t.on("error", (e) => r(e)), t)
1324 },
1325 },
1326 debug: {
1327 getCurrentRoomStats: (...e) => {
1328 const r = Array.from(e)
1329 return Tt.request(r)
1330 },
1331 enableInspector: (...e) => {
1332 const r = Array.from(e)
1333 return Bt.request(r)
1334 },
1335 disableInspector: (...e) => {
1336 const r = Array.from(e)
1337 return Lt.request(r)
1338 },
1339 getInspectorKey: (...e) => {
1340 const r = Array.from(e)
1341 return xt.request(r)
1342 },
1343 processTop: (...e) => {
1344 const r = Array.from(e)
1345 return Nt.request(r)
1346 },
1347 heapSnapshot: (...e) => {
1348 const r = Array.from(e)
1349 return jt.request(r)
1350 },
1351 hash: (...e) => {
1352 const r = Array.from(e)
1353 return zt.request(r)
1354 },
1355 generateSyntheticError: (...e) => {
1356 const r = Array.from(e)
1357 return Ht.request(r)
1358 },
1359 resetUnreads: (...e) => {
1360 const r = Array.from(e)
1361 return Kt.request(r)
1362 },
1363 },
1364 pear: {
1365 teardown: (...e) => {
1366 const r = Array.from(e)
1367 return Vt.request(r)
1368 },
1369 selfDestruct: (...e) => {
1370 const r = Array.from(e)
1371 return Jt.request(r)
1372 },
1373 },
1374 feedback: {
1375 send: (...e) => {
1376 const r = Array.from(e)
1377 return Ot.request(r)
1378 },
1379 },
1380 }
1381}
keet-core-4.14.4-pretty/lib/rpc/server.js +1388 -0
……@@ -0,0 +1,1388 @@
1const e = require("tiny-buffer-rpc/any"),
2 { pipeline: r } = require("streamx")
3function s() {}
4module.exports = function (t, o) {
5 ;(o.register(0, { request: e, response: e, onrequest: (e) => t.api.swarm.ready(...e) }),
6 o.register(1, { request: e, response: e, onrequest: (e) => t.api.core.getVersion(...e) }),
7 o.register(2, {
8 request: e,
9 response: e,
10 dedup: !0,
11 onstream: async (e) => {
12 try {
13 for await (const o of e) {
14 const n = t.api.core.subscribeRoomVersion(...o)
15 r(n, e).on("error", s)
16 }
17 } catch (r) {
18 e.destroy(r)
19 }
20 },
21 }),
22 o.register(3, {
23 request: e,
24 response: e,
25 dedup: !0,
26 onstream: async (e) => {
27 try {
28 for await (const o of e) {
29 const n = t.api.core.subscribeForceUpdates(...o)
30 r(n, e).on("error", s)
31 }
32 } catch (r) {
33 e.destroy(r)
34 }
35 },
36 }),
37 o.register(4, { request: e, response: e, onrequest: (e) => t.api.core.upgradeRoom(...e) }),
38 o.register(5, {
39 request: e,
40 response: e,
41 onrequest: (e) => t.api.core.updateUserSettings(...e),
42 }),
43 o.register(6, { request: e, response: e, onrequest: (e) => t.api.core.getIdentity(...e) }),
44 o.register(7, {
45 request: e,
46 response: e,
47 dedup: !0,
48 onstream: async (e) => {
49 try {
50 for await (const o of e) {
51 const n = t.api.core.subscribeIdentity(...o)
52 r(n, e).on("error", s)
53 }
54 } catch (r) {
55 e.destroy(r)
56 }
57 },
58 }),
59 o.register(8, { request: e, response: e, onrequest: (e) => t.api.core.generateIdentity(...e) }),
60 o.register(9, { request: e, response: e, onrequest: (e) => t.api.core.restoreIdentity(...e) }),
61 o.register(10, {
62 request: e,
63 response: e,
64 onrequest: (e) => t.api.core.getRecoveryPhrase(...e),
65 }),
66 o.register(11, {
67 request: e,
68 response: e,
69 onrequest: (e) => t.api.core.getEncryptedRecoveryPhrase(...e),
70 }),
71 o.register(12, {
72 request: e,
73 response: e,
74 onrequest: (e) => t.api.core.decryptEncryptedRecoveryPhrase(...e),
75 }),
76 o.register(13, {
77 request: e,
78 response: e,
79 onrequest: (e) => t.api.core.freeRecoveryPhrase(...e),
80 }),
81 o.register(14, {
82 request: e,
83 response: e,
84 onrequest: (e) => t.api.core.confirmRecoveryPhrase(...e),
85 }),
86 o.register(15, {
87 request: e,
88 response: e,
89 onrequest: (e) => t.api.core.storeRecoveryPhrase(...e),
90 }),
91 o.register(16, { request: e, response: e, onrequest: (e) => t.api.core.confirmIdentity(...e) }),
92 o.register(17, {
93 request: e,
94 response: e,
95 onrequest: (e) => t.api.core.confirmPairingRequest(...e),
96 }),
97 o.register(18, {
98 request: e,
99 response: e,
100 dedup: !1,
101 onstream: async (e) => {
102 try {
103 for await (const o of e) {
104 const n = t.api.core.subscribeIdentityPairingRequests(...o)
105 r(n, e).on("error", s)
106 }
107 } catch (r) {
108 e.destroy(r)
109 }
110 },
111 }),
112 o.register(19, {
113 request: e,
114 response: e,
115 onrequest: (e) => t.api.core.updateIdentityProfile(...e),
116 }),
117 o.register(20, {
118 request: e,
119 response: e,
120 onrequest: (e) => t.api.core.updateIdentityDevice(...e),
121 }),
122 o.register(21, {
123 request: e,
124 response: e,
125 onrequest: (e) => t.api.core.removeIdentityDevice(...e),
126 }),
127 o.register(22, { request: e, response: e, onrequest: (e) => t.api.core.getLinkInfo(...e) }),
128 o.register(23, {
129 request: e,
130 response: e,
131 onrequest: (e) => t.api.core.startPairingIdentity(...e),
132 }),
133 o.register(24, { request: e, response: e, onrequest: (e) => t.api.core.pairIdentity(...e) }),
134 o.register(25, { request: e, response: e, onrequest: (e) => t.api.core.createRoom(...e) }),
135 o.register(26, { request: e, response: e, onrequest: (e) => t.api.core.pairRoom(...e) }),
136 o.register(27, { request: e, response: e, onrequest: (e) => t.api.core.leaveRoom(...e) }),
137 o.register(28, {
138 request: e,
139 response: e,
140 onrequest: (e) => t.api.core.startPairingRoom(...e),
141 }),
142 o.register(29, { request: e, response: e, onrequest: (e) => t.api.core.stopPairingRoom(...e) }),
143 o.register(30, {
144 request: e,
145 response: e,
146 dedup: !0,
147 onstream: async (e) => {
148 try {
149 for await (const o of e) {
150 const n = t.api.core.subscribePendingRooms(...o)
151 r(n, e).on("error", s)
152 }
153 } catch (r) {
154 e.destroy(r)
155 }
156 },
157 }),
158 o.register(31, {
159 request: e,
160 response: e,
161 dedup: !0,
162 onstream: async (e) => {
163 try {
164 for await (const o of e) {
165 const n = t.api.core.subscribePushNotificationChanges(...o)
166 r(n, e).on("error", s)
167 }
168 } catch (r) {
169 e.destroy(r)
170 }
171 },
172 }),
173 o.register(32, {
174 request: e,
175 response: e,
176 dedup: !0,
177 onstream: async (e) => {
178 try {
179 for await (const o of e) {
180 const n = t.api.core.subscribeActivateRoom(...o)
181 r(n, e).on("error", s)
182 }
183 } catch (r) {
184 e.destroy(r)
185 }
186 },
187 }),
188 o.register(33, { request: e, response: e, onrequest: (e) => t.api.core.getRoomKeys(...e) }),
189 o.register(34, {
190 request: e,
191 response: e,
192 onrequest: (e) => t.api.core.resyncPrivateProfile(...e),
193 }),
194 o.register(35, { request: e, response: e, onrequest: (e) => t.api.core.getTipSize(...e) }),
195 o.register(36, { request: e, response: e, onrequest: (e) => t.api.core.bookmark(...e) }),
196 o.register(37, { request: e, response: e, onrequest: (e) => t.api.core.unbookmark(...e) }),
197 o.register(38, {
198 request: e,
199 response: e,
200 dedup: !0,
201 onstream: async (e) => {
202 try {
203 for await (const o of e) {
204 const n = t.api.core.subscribeBookmarks(...o)
205 r(n, e).on("error", s)
206 }
207 } catch (r) {
208 e.destroy(r)
209 }
210 },
211 }),
212 o.register(39, { request: e, response: e, onrequest: (e) => t.api.core.getRoomInfo(...e) }),
213 o.register(40, {
214 request: e,
215 response: e,
216 dedup: !0,
217 onstream: async (e) => {
218 try {
219 for await (const o of e) {
220 const n = t.api.core.subscribeRoomInfo(...o)
221 r(n, e).on("error", s)
222 }
223 } catch (r) {
224 e.destroy(r)
225 }
226 },
227 }),
228 o.register(41, { request: e, response: e, onrequest: (e) => t.api.core.searchRooms(...e) }),
229 o.register(42, { request: e, response: e, onrequest: (e) => t.api.core.getRecentRooms(...e) }),
230 o.register(43, {
231 request: e,
232 response: e,
233 onrequest: (e) => t.api.core.getLocalRoomMetadata(...e),
234 }),
235 o.register(44, {
236 request: e,
237 response: e,
238 dedup: !0,
239 onstream: async (e) => {
240 try {
241 for await (const o of e) {
242 const n = t.api.core.subscribeRecentRooms(...o)
243 r(n, e).on("error", s)
244 }
245 } catch (r) {
246 e.destroy(r)
247 }
248 },
249 }),
250 o.register(45, {
251 request: e,
252 response: e,
253 dedup: !0,
254 onstream: async (e) => {
255 try {
256 for await (const o of e) {
257 const n = t.api.core.subscribeFavoriteRooms(...o)
258 r(n, e).on("error", s)
259 }
260 } catch (r) {
261 e.destroy(r)
262 }
263 },
264 }),
265 o.register(46, {
266 request: e,
267 response: e,
268 dedup: !0,
269 onstream: async (e) => {
270 try {
271 for await (const o of e) {
272 const n = t.api.core.subscribeUnreadActivity(...o)
273 r(n, e).on("error", s)
274 }
275 } catch (r) {
276 e.destroy(r)
277 }
278 },
279 }),
280 o.register(47, { request: e, response: e, onrequest: (e) => t.api.core.setRoomUnread(...e) }),
281 o.register(48, {
282 request: e,
283 response: e,
284 onrequest: (e) => t.api.core.bumpRoomPriority(...e),
285 }),
286 o.register(49, { request: e, response: e, onrequest: (e) => t.api.core.addDevice(...e) }),
287 o.register(50, { request: e, response: e, onrequest: (e) => t.api.core.removeDevice(...e) }),
288 o.register(51, { request: e, response: e, onrequest: (e) => t.api.core.getDevice(...e) }),
289 o.register(52, { request: e, response: e, onrequest: (e) => t.api.core.getDevices(...e) }),
290 o.register(53, {
291 request: e,
292 response: e,
293 onrequest: (e) => t.api.core.getDevicesByMemberId(...e),
294 }),
295 o.register(54, {
296 request: e,
297 response: e,
298 onrequest: (e) => t.api.core.getCurrentDeviceId(...e),
299 }),
300 o.register(55, { request: e, response: e, onrequest: (e) => t.api.core.moveIndexer(...e) }),
301 o.register(56, {
302 request: e,
303 response: e,
304 dedup: !0,
305 onstream: async (e) => {
306 try {
307 for await (const o of e) {
308 const n = t.api.core.subscribeDevice(...o)
309 r(n, e).on("error", s)
310 }
311 } catch (r) {
312 e.destroy(r)
313 }
314 },
315 }),
316 o.register(57, {
317 request: e,
318 response: e,
319 dedup: !0,
320 onstream: async (e) => {
321 try {
322 for await (const o of e) {
323 const n = t.api.core.subscribeDevices(...o)
324 r(n, e).on("error", s)
325 }
326 } catch (r) {
327 e.destroy(r)
328 }
329 },
330 }),
331 o.register(58, {
332 request: e,
333 response: e,
334 onrequest: (e) => t.api.core.createIdentityInvitation(...e),
335 }),
336 o.register(59, {
337 request: e,
338 response: e,
339 onrequest: (e) => t.api.core.createInvitation(...e),
340 }),
341 o.register(60, { request: e, response: e, onrequest: (e) => t.api.core.updateMember(...e) }),
342 o.register(61, { request: e, response: e, onrequest: (e) => t.api.core.isMemberMuted(...e) }),
343 o.register(62, { request: e, response: e, onrequest: (e) => t.api.core.getMember(...e) }),
344 o.register(63, { request: e, response: e, onrequest: (e) => t.api.core.removeMember(...e) }),
345 o.register(64, { request: e, response: e, onrequest: (e) => t.api.core.getMembers(...e) }),
346 o.register(65, {
347 request: e,
348 response: e,
349 onrequest: (e) => t.api.core.getActiveMembers(...e),
350 }),
351 o.register(66, {
352 request: e,
353 response: e,
354 dedup: !0,
355 onstream: async (e) => {
356 try {
357 for await (const o of e) {
358 const n = t.api.core.subscribeActiveMembers(...o)
359 r(n, e).on("error", s)
360 }
361 } catch (r) {
362 e.destroy(r)
363 }
364 },
365 }),
366 o.register(67, { request: e, response: e, onrequest: (e) => t.api.core.getModerators(...e) }),
367 o.register(68, { request: e, response: e, onrequest: (e) => t.api.core.getMemberCount(...e) }),
368 o.register(69, { request: e, response: e, onrequest: (e) => t.api.core.waitUntilJoined(...e) }),
369 o.register(70, {
370 request: e,
371 response: e,
372 onrequest: (e) => t.api.core.getMemberForDevice(...e),
373 }),
374 o.register(71, {
375 request: e,
376 response: e,
377 dedup: !0,
378 onstream: async (e) => {
379 try {
380 for await (const o of e) {
381 const n = t.api.core.subscribeMemberCount(...o)
382 r(n, e).on("error", s)
383 }
384 } catch (r) {
385 e.destroy(r)
386 }
387 },
388 }),
389 o.register(72, {
390 request: e,
391 response: e,
392 dedup: !0,
393 onstream: async (e) => {
394 try {
395 for await (const o of e) {
396 const n = t.api.core.subscribeMember(...o)
397 r(n, e).on("error", s)
398 }
399 } catch (r) {
400 e.destroy(r)
401 }
402 },
403 }),
404 o.register(73, {
405 request: e,
406 response: e,
407 dedup: !0,
408 onstream: async (e) => {
409 try {
410 for await (const o of e) {
411 const n = t.api.core.subscribeMembers(...o)
412 r(n, e).on("error", s)
413 }
414 } catch (r) {
415 e.destroy(r)
416 }
417 },
418 }),
419 o.register(74, {
420 request: e,
421 response: e,
422 dedup: !0,
423 onstream: async (e) => {
424 try {
425 for await (const o of e) {
426 const n = t.api.core.subscribeModerators(...o)
427 r(n, e).on("error", s)
428 }
429 } catch (r) {
430 e.destroy(r)
431 }
432 },
433 }),
434 o.register(75, {
435 request: e,
436 response: e,
437 dedup: !0,
438 onstream: async (e) => {
439 try {
440 for await (const o of e) {
441 const n = t.api.core.subscribeMemberForDevice(...o)
442 r(n, e).on("error", s)
443 }
444 } catch (r) {
445 e.destroy(r)
446 }
447 },
448 }),
449 o.register(76, {
450 request: e,
451 response: e,
452 onrequest: (e) => t.api.core.changeMemberRole(...e),
453 }),
454 o.register(77, { request: e, response: e, onrequest: (e) => t.api.core.muteMember(...e) }),
455 o.register(78, { request: e, response: e, onrequest: (e) => t.api.core.unmuteMember(...e) }),
456 o.register(79, {
457 request: e,
458 response: e,
459 onrequest: (e) => t.api.core.getSearchMembers(...e),
460 }),
461 o.register(80, {
462 request: e,
463 response: e,
464 onrequest: (e) => t.api.core.getPushNotificationMembers(...e),
465 }),
466 o.register(81, {
467 request: e,
468 response: e,
469 dedup: !0,
470 onstream: async (e) => {
471 try {
472 for await (const o of e) {
473 const n = t.api.core.subscribeSearchMembers(...o)
474 r(n, e).on("error", s)
475 }
476 } catch (r) {
477 e.destroy(r)
478 }
479 },
480 }),
481 o.register(82, {
482 request: e,
483 response: e,
484 dedup: !0,
485 onstream: async (e) => {
486 try {
487 for await (const o of e) {
488 const n = t.api.core.subscribePushNotificationMembers(...o)
489 r(n, e).on("error", s)
490 }
491 } catch (r) {
492 e.destroy(r)
493 }
494 },
495 }),
496 o.register(83, { request: e, response: e, onrequest: (e) => t.api.core.getContactInfo(...e) }),
497 o.register(84, {
498 request: e,
499 response: e,
500 dedup: !0,
501 onstream: async (e) => {
502 try {
503 for await (const o of e) {
504 const n = t.api.core.subscribeContactInfo(...o)
505 r(n, e).on("error", s)
506 }
507 } catch (r) {
508 e.destroy(r)
509 }
510 },
511 }),
512 o.register(85, {
513 request: e,
514 response: e,
515 onrequest: (e) => t.api.core.getSelfContactInfo(...e),
516 }),
517 o.register(86, { request: e, response: e, onrequest: (e) => t.api.core.blockMember(...e) }),
518 o.register(87, { request: e, response: e, onrequest: (e) => t.api.core.unblockMember(...e) }),
519 o.register(88, {
520 request: e,
521 response: e,
522 onrequest: (e) => t.api.core.getBlockedMembers(...e),
523 }),
524 o.register(89, {
525 request: e,
526 response: e,
527 dedup: !0,
528 onstream: async (e) => {
529 try {
530 for await (const o of e) {
531 const n = t.api.core.subscribeBlockedMembers(...o)
532 r(n, e).on("error", s)
533 }
534 } catch (r) {
535 e.destroy(r)
536 }
537 },
538 }),
539 o.register(90, {
540 request: e,
541 response: e,
542 onrequest: (e) => t.api.core.getConnectedMembers(...e),
543 }),
544 o.register(91, {
545 request: e,
546 response: e,
547 dedup: !0,
548 onstream: async (e) => {
549 try {
550 for await (const o of e) {
551 const n = t.api.core.subscribeConnectedMembers(...o)
552 r(n, e).on("error", s)
553 }
554 } catch (r) {
555 e.destroy(r)
556 }
557 },
558 }),
559 o.register(92, { request: e, response: e, onrequest: (e) => t.api.core.updateConfig(...e) }),
560 o.register(93, { request: e, response: e, onrequest: (e) => t.api.core.getConfig(...e) }),
561 o.register(94, {
562 request: e,
563 response: e,
564 dedup: !0,
565 onstream: async (e) => {
566 try {
567 for await (const o of e) {
568 const n = t.api.core.subscribeConfig(...o)
569 r(n, e).on("error", s)
570 }
571 } catch (r) {
572 e.destroy(r)
573 }
574 },
575 }),
576 o.register(95, {
577 request: e,
578 response: e,
579 onrequest: (e) => t.api.core.updateRoomSettings(...e),
580 }),
581 o.register(96, {
582 request: e,
583 response: e,
584 onrequest: (e) => t.api.core.disableMembershipEvents(...e),
585 }),
586 o.register(97, {
587 request: e,
588 response: e,
589 onrequest: (e) => t.api.core.enableMembershipEvents(...e),
590 }),
591 o.register(98, { request: e, response: e, onrequest: (e) => t.api.core.addChatMessage(...e) }),
592 o.register(99, {
593 request: e,
594 response: e,
595 onrequest: (e) => t.api.core.updateChatMessage(...e),
596 }),
597 o.register(100, {
598 request: e,
599 response: e,
600 onrequest: (e) => t.api.core.removeChatMessage(...e),
601 }),
602 o.register(101, {
603 request: e,
604 response: e,
605 onrequest: (e) => t.api.core.forwardChatMessage(...e),
606 }),
607 o.register(102, { request: e, response: e, onrequest: (e) => t.api.core.pinChatMessage(...e) }),
608 o.register(103, {
609 request: e,
610 response: e,
611 onrequest: (e) => t.api.core.unpinChatMessage(...e),
612 }),
613 o.register(104, { request: e, response: e, onrequest: (e) => t.api.core.startCall(...e) }),
614 o.register(105, { request: e, response: e, onrequest: (e) => t.api.core.joinCall(...e) }),
615 o.register(106, { request: e, response: e, onrequest: (e) => t.api.core.leaveCall(...e) }),
616 o.register(107, { request: e, response: e, onrequest: (e) => t.api.core.endCall(...e) }),
617 o.register(108, { request: e, response: e, onrequest: (e) => t.api.core.addCallStream(...e) }),
618 o.register(109, {
619 request: e,
620 response: e,
621 onrequest: (e) => t.api.core.removeCallStream(...e),
622 }),
623 o.register(110, { request: e, response: e, onrequest: (e) => t.api.core.getActiveCalls(...e) }),
624 o.register(111, { request: e, response: e, onrequest: (e) => t.api.core.getCalls(...e) }),
625 o.register(112, {
626 request: e,
627 response: e,
628 dedup: !0,
629 onstream: async (e) => {
630 try {
631 for await (const o of e) {
632 const n = t.api.core.subscribeActiveCalls(...o)
633 r(n, e).on("error", s)
634 }
635 } catch (r) {
636 e.destroy(r)
637 }
638 },
639 }),
640 o.register(113, {
641 request: e,
642 response: e,
643 dedup: !0,
644 onstream: async (e) => {
645 try {
646 for await (const o of e) {
647 const n = t.api.core.subscribeCalls(...o)
648 r(n, e).on("error", s)
649 }
650 } catch (r) {
651 e.destroy(r)
652 }
653 },
654 }),
655 o.register(114, {
656 request: e,
657 response: e,
658 onrequest: (e) => t.api.core.addCallStartedEvent(...e),
659 }),
660 o.register(115, {
661 request: e,
662 response: e,
663 onrequest: (e) => t.api.core.addCallHangupEvent(...e),
664 }),
665 o.register(116, {
666 request: e,
667 response: e,
668 onrequest: (e) => t.api.core.addCallMissedEvent(...e),
669 }),
670 o.register(117, {
671 request: e,
672 response: e,
673 onrequest: (e) => t.api.core.addLocationSharedEvent(...e),
674 }),
675 o.register(118, {
676 request: e,
677 response: e,
678 onrequest: (e) => t.api.core.addRoomAvatarChangedEvent(...e),
679 }),
680 o.register(119, { request: e, response: e, onrequest: (e) => t.api.core.addEvent(...e) }),
681 o.register(120, { request: e, response: e, onrequest: (e) => t.api.core.removeEvent(...e) }),
682 o.register(121, { request: e, response: e, onrequest: (e) => t.api.core.getChatMessage(...e) }),
683 o.register(122, {
684 request: e,
685 response: e,
686 onrequest: (e) => t.api.core.getChatMessageById(...e),
687 }),
688 o.register(123, {
689 request: e,
690 response: e,
691 onrequest: (e) => t.api.core.getChatMessages(...e),
692 }),
693 o.register(124, {
694 request: e,
695 response: e,
696 onrequest: (e) => t.api.core.getPinnedChatMessages(...e),
697 }),
698 o.register(125, { request: e, response: e, onrequest: (e) => t.api.core.getChatLength(...e) }),
699 o.register(126, {
700 request: e,
701 response: e,
702 dedup: !0,
703 onstream: async (e) => {
704 try {
705 for await (const o of e) {
706 const n = t.api.core.subscribeChatMessages(...o)
707 r(n, e).on("error", s)
708 }
709 } catch (r) {
710 e.destroy(r)
711 }
712 },
713 }),
714 o.register(127, {
715 request: e,
716 response: e,
717 dedup: !0,
718 onstream: async (e) => {
719 try {
720 for await (const o of e) {
721 const n = t.api.core.subscribeChatLength(...o)
722 r(n, e).on("error", s)
723 }
724 } catch (r) {
725 e.destroy(r)
726 }
727 },
728 }),
729 o.register(128, {
730 request: e,
731 response: e,
732 onrequest: (e) => t.api.core.searchChatMessages(...e),
733 }),
734 o.register(129, {
735 request: e,
736 response: e,
737 dedup: !0,
738 onstream: async (e) => {
739 try {
740 for await (const o of e) {
741 const n = t.api.core.createChatSearchStream(...o)
742 r(n, e).on("error", s)
743 }
744 } catch (r) {
745 e.destroy(r)
746 }
747 },
748 }),
749 o.register(130, {
750 request: e,
751 response: e,
752 onrequest: (e) => t.api.core.sendDMFromContact(...e),
753 }),
754 o.register(131, { request: e, response: e, onrequest: (e) => t.api.core.sendDMRequest(...e) }),
755 o.register(132, {
756 request: e,
757 response: e,
758 onrequest: (e) => t.api.core.sendInvitations(...e),
759 }),
760 o.register(133, {
761 request: e,
762 response: e,
763 onrequest: (e) => t.api.core.updatePrivateMailboxRecord(...e),
764 }),
765 o.register(134, {
766 request: e,
767 response: e,
768 onrequest: (e) => t.api.core.getPrivateMailboxRecords(...e),
769 }),
770 o.register(135, {
771 request: e,
772 response: e,
773 dedup: !0,
774 onstream: async (e) => {
775 try {
776 for await (const o of e) {
777 const n = t.api.core.subscribePrivateMailbox(...o)
778 r(n, e).on("error", s)
779 }
780 } catch (r) {
781 e.destroy(r)
782 }
783 },
784 }),
785 o.register(136, {
786 request: e,
787 response: e,
788 onrequest: (e) => t.api.core.getSentPrivateMailboxRecords(...e),
789 }),
790 o.register(137, {
791 request: e,
792 response: e,
793 dedup: !0,
794 onstream: async (e) => {
795 try {
796 for await (const o of e) {
797 const n = t.api.core.subscribeSentPrivateMailbox(...o)
798 r(n, e).on("error", s)
799 }
800 } catch (r) {
801 e.destroy(r)
802 }
803 },
804 }),
805 o.register(138, {
806 request: e,
807 response: e,
808 onrequest: (e) => t.api.core.getDmByMemberId(...e),
809 }),
810 o.register(139, {
811 request: e,
812 response: e,
813 onrequest: (e) => t.api.core.getDmRequestsByStatus(...e),
814 }),
815 o.register(140, {
816 request: e,
817 response: e,
818 dedup: !0,
819 onstream: async (e) => {
820 try {
821 for await (const o of e) {
822 const n = t.api.core.subscribeDmRequestsByStatus(...o)
823 r(n, e).on("error", s)
824 }
825 } catch (r) {
826 e.destroy(r)
827 }
828 },
829 }),
830 o.register(141, {
831 request: e,
832 response: e,
833 onrequest: (e) => t.api.core.acceptDmRequest(...e),
834 }),
835 o.register(142, {
836 request: e,
837 response: e,
838 onrequest: (e) => t.api.core.rejectDmRequest(...e),
839 }),
840 o.register(143, { request: e, response: e, onrequest: (e) => t.api.core.addReaction(...e) }),
841 o.register(144, { request: e, response: e, onrequest: (e) => t.api.core.removeReaction(...e) }),
842 o.register(145, {
843 request: e,
844 response: e,
845 onrequest: (e) => t.api.core.getLatestReactions(...e),
846 }),
847 o.register(146, { request: e, response: e, onrequest: (e) => t.api.core.getReactions(...e) }),
848 o.register(147, {
849 request: e,
850 response: e,
851 dedup: !0,
852 onstream: async (e) => {
853 try {
854 for await (const o of e) {
855 const n = t.api.core.subscribeReactions(...o)
856 r(n, e).on("error", s)
857 }
858 } catch (r) {
859 e.destroy(r)
860 }
861 },
862 }),
863 o.register(148, { request: e, response: e, onrequest: (e) => t.api.core.addChatReport(...e) }),
864 o.register(149, {
865 request: e,
866 response: e,
867 onrequest: (e) => t.api.core.removeChatReport(...e),
868 }),
869 o.register(150, { request: e, response: e, onrequest: (e) => t.api.core.reportMember(...e) }),
870 o.register(151, {
871 request: e,
872 response: e,
873 onrequest: (e) => t.api.core.getReportedMembers(...e),
874 }),
875 o.register(152, {
876 request: e,
877 response: e,
878 dedup: !0,
879 onstream: async (e) => {
880 try {
881 for await (const o of e) {
882 const n = t.api.core.subscribeReportedMembers(...o)
883 r(n, e).on("error", s)
884 }
885 } catch (r) {
886 e.destroy(r)
887 }
888 },
889 }),
890 o.register(153, {
891 request: e,
892 response: e,
893 onrequest: (e) => t.api.core.getReportedMessages(...e),
894 }),
895 o.register(154, {
896 request: e,
897 response: e,
898 dedup: !0,
899 onstream: async (e) => {
900 try {
901 for await (const o of e) {
902 const n = t.api.core.subscribeReportedMessages(...o)
903 r(n, e).on("error", s)
904 }
905 } catch (r) {
906 e.destroy(r)
907 }
908 },
909 }),
910 o.register(155, { request: e, response: e, onrequest: (e) => t.api.core.addFileBlob(...e) }),
911 o.register(156, { request: e, response: e, onrequest: (e) => t.api.core.addFile(...e) }),
912 o.register(157, { request: e, response: e, onrequest: (e) => t.api.core.saveFileBlob(...e) }),
913 o.register(158, { request: e, response: e, onrequest: (e) => t.api.core.saveFile(...e) }),
914 o.register(159, {
915 request: e,
916 response: e,
917 dedup: !0,
918 onstream: async (e) => {
919 try {
920 for await (const o of e) {
921 const n = t.api.core.subscribeAddFile(...o)
922 r(n, e).on("error", s)
923 }
924 } catch (r) {
925 e.destroy(r)
926 }
927 },
928 }),
929 o.register(160, { request: e, response: e, onrequest: (e) => t.api.core.sendFile(...e) }),
930 o.register(161, { request: e, response: e, onrequest: (e) => t.api.core.removeFile(...e) }),
931 o.register(162, {
932 request: e,
933 response: e,
934 onrequest: (e) => t.api.core.refreshFileLinks(...e),
935 }),
936 o.register(163, {
937 request: e,
938 response: e,
939 dedup: !0,
940 onstream: async (e) => {
941 try {
942 for await (const o of e) {
943 const n = t.api.core.subscribeFileInfo(...o)
944 r(n, e).on("error", s)
945 }
946 } catch (r) {
947 e.destroy(r)
948 }
949 },
950 }),
951 o.register(164, { request: e, response: e, onrequest: (e) => t.api.core.clearAllFiles(...e) }),
952 o.register(165, { request: e, response: e, onrequest: (e) => t.api.core.getFileEntry(...e) }),
953 o.register(166, { request: e, response: e, onrequest: (e) => t.api.core.getLocalFiles(...e) }),
954 o.register(167, { request: e, response: e, onrequest: (e) => t.api.core.getFiles(...e) }),
955 o.register(168, { request: e, response: e, onrequest: (e) => t.api.core.startDownload(...e) }),
956 o.register(169, { request: e, response: e, onrequest: (e) => t.api.core.cancelDownload(...e) }),
957 o.register(170, { request: e, response: e, onrequest: (e) => t.api.core.clearFile(...e) }),
958 o.register(171, { request: e, response: e, onrequest: (e) => t.api.core.unclearFile(...e) }),
959 o.register(172, { request: e, response: e, onrequest: (e) => t.api.core.getFileCleared(...e) }),
960 o.register(173, {
961 request: e,
962 response: e,
963 dedup: !0,
964 onstream: async (e) => {
965 try {
966 for await (const o of e) {
967 const n = t.api.core.subscribeFileCleared(...o)
968 r(n, e).on("error", s)
969 }
970 } catch (r) {
971 e.destroy(r)
972 }
973 },
974 }),
975 o.register(174, {
976 request: e,
977 response: e,
978 dedup: !0,
979 onstream: async (e) => {
980 try {
981 for await (const o of e) {
982 const n = t.api.core.subscribeFiles(...o)
983 r(n, e).on("error", s)
984 }
985 } catch (r) {
986 e.destroy(r)
987 }
988 },
989 }),
990 o.register(175, { request: e, response: e, onrequest: (e) => t.api.core.getStats(...e) }),
991 o.register(176, {
992 request: e,
993 response: e,
994 dedup: !0,
995 onstream: async (e) => {
996 try {
997 for await (const o of e) {
998 const n = t.api.core.subscribeProgress(...o)
999 r(n, e).on("error", s)
1000 }
1001 } catch (r) {
1002 e.destroy(r)
1003 }
1004 },
1005 }),
1006 o.register(177, {
1007 request: e,
1008 response: e,
1009 dedup: !0,
1010 onstream: async (e) => {
1011 try {
1012 for await (const o of e) {
1013 const n = t.api.core.subscribeSystemUpdateRequest(...o)
1014 r(n, e).on("error", s)
1015 }
1016 } catch (r) {
1017 e.destroy(r)
1018 }
1019 },
1020 }),
1021 o.register(178, { request: e, response: e, onrequest: (e) => t.api.core.lookupUsername(...e) }),
1022 o.register(179, {
1023 request: e,
1024 response: e,
1025 onrequest: (e) => t.api.core.lookupUserByMemberId(...e),
1026 }),
1027 o.register(180, {
1028 request: e,
1029 response: e,
1030 dedup: !0,
1031 onstream: async (e) => {
1032 try {
1033 for await (const o of e) {
1034 const n = t.api.core.subscribeUsername(...o)
1035 r(n, e).on("error", s)
1036 }
1037 } catch (r) {
1038 e.destroy(r)
1039 }
1040 },
1041 }),
1042 o.register(181, {
1043 request: e,
1044 response: e,
1045 onrequest: (e) => t.api.core.registerUsername(...e),
1046 }),
1047 o.register(182, { request: e, response: e, onrequest: (e) => t.api.core.updateUsername(...e) }),
1048 o.register(183, { request: e, response: e, onrequest: (e) => t.api.core.searchUsername(...e) }),
1049 o.register(184, {
1050 request: e,
1051 response: e,
1052 onrequest: (e) => t.api.core.getReservationsByKey(...e),
1053 }),
1054 o.register(185, { request: e, response: e, onrequest: (e) => t.api.core.checkUsername(...e) }),
1055 o.register(186, {
1056 request: e,
1057 response: e,
1058 onrequest: (e) => t.api.core.updateRoomPreferences(...e),
1059 }),
1060 o.register(187, {
1061 request: e,
1062 response: e,
1063 onrequest: (e) => t.api.core.getRoomPreferences(...e),
1064 }),
1065 o.register(188, { request: e, response: e, onrequest: (e) => t.api.core.audit(...e) }),
1066 o.register(189, { request: e, response: e, onrequest: (e) => t.api.core.close(...e) }),
1067 o.register(190, { request: e, response: e, onrequest: (e) => t.api.core.suspend(...e) }),
1068 o.register(191, { request: e, response: e, onrequest: (e) => t.api.core.resume(...e) }),
1069 o.register(192, { request: e, response: e, onrequest: (e) => t.api.core.getDebugFlags(...e) }),
1070 o.register(193, {
1071 request: e,
1072 response: e,
1073 onrequest: (e) => t.api.core.updateDebugFlag(...e),
1074 }),
1075 o.register(194, { request: e, response: e, onrequest: (e) => t.api.core.repair(...e) }),
1076 o.register(195, { request: e, response: e, onrequest: (e) => t.api.core.rotateWriter(...e) }),
1077 o.register(196, { request: e, response: e, onrequest: (e) => t.api.core.getRoomStats(...e) }),
1078 o.register(197, { request: e, response: e, onrequest: (e) => t.api.core.compact(...e) }),
1079 o.register(198, { request: e, response: e, onrequest: (e) => t.api.core.setUnread(...e) }),
1080 o.register(199, { request: e, response: e, onrequest: (e) => t.api.core.getUnread(...e) }),
1081 o.register(200, {
1082 request: e,
1083 response: e,
1084 onrequest: (e) => t.api.core.getUnreadAnchor(...e),
1085 }),
1086 o.register(201, {
1087 request: e,
1088 response: e,
1089 onrequest: (e) => t.api.core.setUnreadAnchor(...e),
1090 }),
1091 o.register(202, {
1092 request: e,
1093 response: e,
1094 dedup: !0,
1095 onstream: async (e) => {
1096 try {
1097 for await (const o of e) {
1098 const n = t.api.core.subscribeUnreadAnchor(...o)
1099 r(n, e).on("error", s)
1100 }
1101 } catch (r) {
1102 e.destroy(r)
1103 }
1104 },
1105 }),
1106 o.register(203, {
1107 request: e,
1108 response: e,
1109 dedup: !0,
1110 onstream: async (e) => {
1111 try {
1112 for await (const o of e) {
1113 const n = t.api.core.subscribeSentLength(...o)
1114 r(n, e).on("error", s)
1115 }
1116 } catch (r) {
1117 e.destroy(r)
1118 }
1119 },
1120 }),
1121 o.register(204, {
1122 request: e,
1123 response: e,
1124 dedup: !0,
1125 onstream: async (e) => {
1126 try {
1127 for await (const o of e) {
1128 const n = t.api.core.createErrorStream(...o)
1129 r(n, e).on("error", s)
1130 }
1131 } catch (r) {
1132 e.destroy(r)
1133 }
1134 },
1135 }),
1136 o.register(205, { request: e, response: e, onrequest: (e) => t.api.core.boot(...e) }),
1137 o.register(206, {
1138 request: e,
1139 response: e,
1140 dedup: !0,
1141 onstream: async (e) => {
1142 try {
1143 for await (const o of e) {
1144 const n = t.api.core.subscribeErrors(...o)
1145 r(n, e).on("error", s)
1146 }
1147 } catch (r) {
1148 e.destroy(r)
1149 }
1150 },
1151 }),
1152 o.register(207, {
1153 request: e,
1154 response: e,
1155 onrequest: (e) => t.api.core.setCallRingingId(...e),
1156 }),
1157 o.register(208, {
1158 request: e,
1159 response: e,
1160 dedup: !0,
1161 onstream: async (e) => {
1162 try {
1163 for await (const o of e) {
1164 const n = t.api.core.subscribeNotifications(...o)
1165 r(n, e).on("error", s)
1166 }
1167 } catch (r) {
1168 e.destroy(r)
1169 }
1170 },
1171 }),
1172 o.register(209, { request: e, response: e, onrequest: (e) => t.api.core.getDHTSettings(...e) }),
1173 o.register(210, {
1174 request: e,
1175 response: e,
1176 onrequest: (e) => t.api.core.updateDHTSettings(...e),
1177 }),
1178 o.register(211, {
1179 request: e,
1180 response: e,
1181 onrequest: (e) => t.api.core.setRoomFavorite(...e),
1182 }),
1183 o.register(212, { request: e, response: e, onrequest: (e) => t.api.core.clearOldFiles(...e) }),
1184 o.register(213, {
1185 request: e,
1186 response: e,
1187 dedup: !0,
1188 onstream: async (e) => {
1189 try {
1190 for await (const o of e) {
1191 const n = t.api.preferences.subscribe(...o)
1192 r(n, e).on("error", s)
1193 }
1194 } catch (r) {
1195 e.destroy(r)
1196 }
1197 },
1198 }),
1199 o.register(214, { request: e, response: e, onrequest: (e) => t.api.preferences.update(...e) }),
1200 o.register(215, { request: e, response: e, onrequest: (e) => t.api.preferences.query(...e) }),
1201 o.register(216, { request: e, response: e, onrequest: (e) => t.api.call.authorize(...e) }),
1202 o.register(217, { request: e, response: e, onrequest: (e) => t.api.call.deauthorize(...e) }),
1203 o.register(218, { request: e, response: e, onrequest: (e) => t.api.call.joinPeer(...e) }),
1204 o.register(219, { request: e, response: e, onrequest: (e) => t.api.call.leavePeer(...e) }),
1205 o.register(220, { request: e, response: e, onrequest: (e) => t.api.call.requestTrack(...e) }),
1206 o.register(221, { request: e, response: e, onrequest: (e) => t.api.call.unrequestTrack(...e) }),
1207 o.register(222, { request: e, response: e, onrequest: (e) => t.api.call.signalMedia(...e) }),
1208 o.register(223, {
1209 request: e,
1210 response: e,
1211 onrequest: (e) => t.api.call.getRequestedTracks(...e),
1212 }),
1213 o.register(224, {
1214 request: e,
1215 response: e,
1216 dedup: !0,
1217 onstream: async (e) => {
1218 try {
1219 for await (const o of e) {
1220 const n = t.api.call.subscribeRequestedTracks(...o)
1221 r(n, e).on("error", s)
1222 }
1223 } catch (r) {
1224 e.destroy(r)
1225 }
1226 },
1227 }),
1228 o.register(225, {
1229 request: e,
1230 response: e,
1231 dedup: !0,
1232 onstream: async (e) => {
1233 try {
1234 for await (const o of e) {
1235 const n = t.api.call.subscribeMediaSignals(...o)
1236 r(n, e).on("error", s)
1237 }
1238 } catch (r) {
1239 e.destroy(r)
1240 }
1241 },
1242 }),
1243 o.register(226, {
1244 request: e,
1245 response: e,
1246 dedup: !0,
1247 onstream: async (e) => {
1248 try {
1249 for await (const o of e) {
1250 const n = t.api.call.subscribeProxyUpdates(...o)
1251 r(n, e).on("error", s)
1252 }
1253 } catch (r) {
1254 e.destroy(r)
1255 }
1256 },
1257 }),
1258 o.register(227, { request: e, response: e, onrequest: (e) => t.api.call.shareTrack(...e) }),
1259 o.register(228, { request: e, response: e, onrequest: (e) => t.api.call.unshareTrack(...e) }),
1260 o.register(229, { request: e, response: e, onrequest: (e) => t.api.call.relayTrack(...e) }),
1261 o.register(230, { request: e, response: e, onrequest: (e) => t.api.call.unrelayTrack(...e) }),
1262 o.register(231, {
1263 request: e,
1264 response: e,
1265 dedup: !0,
1266 onstream: async (e) => {
1267 try {
1268 for await (const o of e) {
1269 const n = t.api.call.subscribeAvailableTracks(...o)
1270 r(n, e).on("error", s)
1271 }
1272 } catch (r) {
1273 e.destroy(r)
1274 }
1275 },
1276 }),
1277 o.register(232, {
1278 request: e,
1279 response: e,
1280 onrequest: (e) => t.api.call.getAvailableTracks(...e),
1281 }),
1282 o.register(233, { request: e, response: e, onrequest: (e) => t.api.call.setPresent(...e) }),
1283 o.register(234, { request: e, response: e, onrequest: (e) => t.api.call.setNotPresent(...e) }),
1284 o.register(235, {
1285 request: e,
1286 response: e,
1287 dedup: !0,
1288 onstream: async (e) => {
1289 try {
1290 for await (const o of e) {
1291 const n = t.api.call.subscribePresence(...o)
1292 r(n, e).on("error", s)
1293 }
1294 } catch (r) {
1295 e.destroy(r)
1296 }
1297 },
1298 }),
1299 o.register(236, { request: e, response: e, onrequest: (e) => t.api.call.getPresence(...e) }),
1300 o.register(237, { request: e, response: e, onrequest: (e) => t.api.tracing.start(...e) }),
1301 o.register(238, {
1302 request: e,
1303 response: e,
1304 onrequest: (e) => t.api.tracing.addFrontendTrace(...e),
1305 }),
1306 o.register(239, { request: e, response: e, onrequest: (e) => t.api.console.log(...e) }),
1307 o.register(240, { request: e, response: e, onrequest: (e) => t.api.console.warn(...e) }),
1308 o.register(241, { request: e, response: e, onrequest: (e) => t.api.console.error(...e) }),
1309 o.register(242, {
1310 request: e,
1311 response: e,
1312 dedup: !0,
1313 onstream: async (e) => {
1314 try {
1315 for await (const o of e) {
1316 const n = t.api.network.subscribe(...o)
1317 r(n, e).on("error", s)
1318 }
1319 } catch (r) {
1320 e.destroy(r)
1321 }
1322 },
1323 }),
1324 o.register(243, { request: e, response: e, onrequest: (e) => t.api.network.query(...e) }),
1325 o.register(244, {
1326 request: e,
1327 response: e,
1328 dedup: !0,
1329 onstream: async (e) => {
1330 try {
1331 for await (const o of e) {
1332 const n = t.api.network.subscribeDebug(...o)
1333 r(n, e).on("error", s)
1334 }
1335 } catch (r) {
1336 e.destroy(r)
1337 }
1338 },
1339 }),
1340 o.register(245, { request: e, response: e, onrequest: (e) => t.api.network.debug(...e) }),
1341 o.register(246, {
1342 request: e,
1343 response: e,
1344 dedup: !0,
1345 onstream: async (e) => {
1346 try {
1347 for await (const o of e) {
1348 const n = t.api.error.subscribe(...o)
1349 r(n, e).on("error", s)
1350 }
1351 } catch (r) {
1352 e.destroy(r)
1353 }
1354 },
1355 }),
1356 o.register(247, {
1357 request: e,
1358 response: e,
1359 onrequest: (e) => t.api.debug.getCurrentRoomStats(...e),
1360 }),
1361 o.register(248, {
1362 request: e,
1363 response: e,
1364 onrequest: (e) => t.api.debug.enableInspector(...e),
1365 }),
1366 o.register(249, {
1367 request: e,
1368 response: e,
1369 onrequest: (e) => t.api.debug.disableInspector(...e),
1370 }),
1371 o.register(250, {
1372 request: e,
1373 response: e,
1374 onrequest: (e) => t.api.debug.getInspectorKey(...e),
1375 }),
1376 o.register(251, { request: e, response: e, onrequest: (e) => t.api.debug.processTop(...e) }),
1377 o.register(252, { request: e, response: e, onrequest: (e) => t.api.debug.heapSnapshot(...e) }),
1378 o.register(253, { request: e, response: e, onrequest: (e) => t.api.debug.hash(...e) }),
1379 o.register(254, {
1380 request: e,
1381 response: e,
1382 onrequest: (e) => t.api.debug.generateSyntheticError(...e),
1383 }),
1384 o.register(255, { request: e, response: e, onrequest: (e) => t.api.debug.resetUnreads(...e) }),
1385 o.register(256, { request: e, response: e, onrequest: (e) => t.api.pear.teardown(...e) }),
1386 o.register(257, { request: e, response: e, onrequest: (e) => t.api.pear.selfDestruct(...e) }),
1387 o.register(258, { request: e, response: e, onrequest: (e) => t.api.feedback.send(...e) }))
1388}
keet-core-4.14.4-pretty/package.json +185 -0
……@@ -0,0 +1,185 @@
1{
2 "name": "@holepunchto/keet-core",
3 "version": "4.14.4",
4 "description": "A version of keet-core built with rocksdb and hyperdb",
5 "main": "index.js",
6 "imports": {
7 "events": {
8 "bare": "bare-events",
9 "default": "events"
10 },
11 "path": {
12 "bare": "bare-path",
13 "default": "path"
14 },
15 "fs": {
16 "bare": "bare-fs",
17 "default": "fs"
18 },
19 "fs/*": {
20 "bare": "bare-fs/*",
21 "default": "fs/*"
22 },
23 "fetch": {
24 "bare": "bare-fetch",
25 "default": "fetch"
26 },
27 "process": {
28 "bare": "bare-process",
29 "default": "process"
30 },
31 "#runtime": {
32 "pear": "./workers/desktop.js",
33 "default": "./workers/mobile.js"
34 }
35 },
36 "exports": {
37 ".": "./index.js",
38 "./client": "./lib/client/index.js",
39 "./client/view": "./lib/client/view.js",
40 "./rpc/client": "./lib/rpc/client.js",
41 "./rpc/server": "./lib/rpc/server.js",
42 "./schemas": "./schema/index.js",
43 "./schemas/versions": "./schema/versions.js",
44 "./errors": "./lib/errors/index.js",
45 "./push": "./lib/push/index.js",
46 "./features": "./lib/features.js",
47 "./legacy-constants": "./lib/legacy-constants.js",
48 "./debugging": "./lib/core/debug/debugging.js",
49 "./package.json": "./package.json"
50 },
51 "files": [
52 "index.js",
53 "env.json",
54 "lib",
55 "schema",
56 "workers"
57 ],
58 "scripts": {
59 "format": "prettier . --write",
60 "lint": "prettier . --check && lunte",
61 "test": "brittle-bare test/index.js",
62 "test:consistency": "brittle-bare test/fuzz/consistency-test.js",
63 "test:chaos": "brittle-bare test/core/chaos.js",
64 "test:prod": "prettier . --check && PROD_SPEC=1 brittle-bare test/index.js",
65 "test:integration": "brittle-bare test/integration/index.js",
66 "test:e2e": "scripts/is-not-linux || brittle-bare test/e2e/index.js",
67 "build": "npm run build:rpc && npm run build:schema && prettier lib/rpc --write",
68 "build:rpc": "bare scripts/build/rpc.js",
69 "build:schema": "bare scripts/build/schema.js",
70 "build:config": "bare scripts/build/config.js",
71 "ops": "bare scripts/ops",
72 "debug:rotate-password": "bare scripts/debug/rotate-password.js"
73 },
74 "repository": {
75 "type": "git",
76 "url": "git+https://github.com/holepunchto/keet-core.git"
77 },
78 "author": "Holepunch",
79 "license": "UNLICENSED",
80 "bugs": {
81 "url": "https://github.com/holepunchto/keet-core/issues"
82 },
83 "homepage": "https://github.com/holepunchto/keet-core#readme",
84 "dependencies": {
85 "@holepunchto/hyperdiscovery": "^1.1.0",
86 "@holepunchto/hyperindex": "2.3.5",
87 "@holepunchto/keet-call": "^10.3.3",
88 "@holepunchto/keet-core-api": "^2.0.0",
89 "@holepunchto/keet-debug-helper": "^2.0.3",
90 "@holepunchto/keet-default-config": "^3.0.0",
91 "@holepunchto/keet-indexing": "6.3.2",
92 "@holepunchto/keet-push": "^4.0.0",
93 "@holepunchto/keet-registry": "^3.3.1",
94 "@holepunchto/keet-registry-client": "^5.0.0",
95 "@holepunchto/keet-unread-anchors": "^2.0.0",
96 "@holepunchto/legacy-keet-core-schemas": "^2.17.0",
97 "autobase": "^7.13.2",
98 "b4a": "^1.6.7",
99 "bare-addon-resolve": "^1.9.4",
100 "bare-bundle": "^1.8.4",
101 "bare-console": "^6.1.0",
102 "bare-events": "^2.8.2",
103 "bare-file-logger": "^1.2.1",
104 "bare-fs": "^4.4.4",
105 "bare-inspector": "^4.0.3",
106 "bare-logger": "^2.0.2",
107 "bare-performance": "^1.3.0",
108 "bare-semver": "^1.0.2",
109 "bare-zlib": "^1.3.1",
110 "bip39-mnemonic": "^2.4.0",
111 "blind-peering": "^2.0.1",
112 "bundlebee": "^1.2.0",
113 "compact-encoding": "^2.16.1",
114 "corestore": "^7.6.0",
115 "db-lock": "^1.2.0",
116 "deterministic-sealed-box": "^1.0.0",
117 "framed-stream": "^1.0.1",
118 "fs-native-lock": "^1.2.0",
119 "hrpc": "^4.1.0",
120 "hyperblobs": "^2.8.0",
121 "hyperconf": "^1.0.1",
122 "hypercore-blob-server": "^1.9.0",
123 "hypercore-crypto": "^3.4.2",
124 "hypercore-id-encoding": "^1.3.0",
125 "hypercore-proof-queue": "^2.0.2",
126 "hypercore-storage": "^2.0.0",
127 "hyperdb": "^5.0.0",
128 "hyperdht": "^6.28.0",
129 "hyperdispatch": "^1.1.0",
130 "hyperschema": "^1.10.4",
131 "hyperswarm": "^4.11.5",
132 "keet-identity-key": "^3.1.0",
133 "multi-profile-store": "^1.0.1",
134 "process-top": "^1.6.0",
135 "promaphore": "^1.0.0",
136 "protomux-rpc-client": "^2.0.1",
137 "protomux-wakeup": "^2.2.2",
138 "rache": "^1.0.0",
139 "ready-guard": "^1.0.0",
140 "resolve-reject-promise": "^1.1.0",
141 "rocksdb-blobs": "^1.0.0",
142 "rocksdb-native": "^3.5.10",
143 "safety-catch": "^1.0.2",
144 "scope-lock": "^1.2.4",
145 "sentry-bare": "^0.1.0",
146 "sodium-native": "^5.0.1",
147 "suspendify": "^1.7.0",
148 "task-backoff": "^1.0.1",
149 "tiny-buffer-rpc": "^2.3.1",
150 "tiny-preferences": "^1.1.0",
151 "uncaughts": "^1.1.1",
152 "xache": "^1.2.1",
153 "z32": "^1.1.0"
154 },
155 "devDependencies": {
156 "@holepunchto/keet-fcm-gatekeeper": "^1.0.0",
157 "@hyperswarm/rpc": "^3.4.1",
158 "@holepunchto/hyperschema-regen": "^2.0.7",
159 "@holepunchto/keet-package": "^3.0.0",
160 "@holepunchto/keet-registry-service": "^6.0.0",
161 "@hyperswarm/testnet": "^3.1.4",
162 "bare-channel": "^5.2.0",
163 "bare-fetch": "^2.2.1",
164 "bare-path": "^3.0.0",
165 "bare-process": "^4.2.1",
166 "bare-subprocess": "^5.1.0",
167 "blind-peer": "^3.2.0",
168 "brittle": "^3.7.0",
169 "graceful-goodbye": "^1.3.3",
170 "hyperbee": "^2.20.4",
171 "hyperbee2": "^2.9.1",
172 "hypercore": "^11.26.0",
173 "hyperdrive": "^12.2.0",
174 "hypermininet": "^1.4.0",
175 "lunte": "^1.3.0",
176 "math-random-seed": "^2.0.0",
177 "passthrough-pair": "^1.0.0",
178 "prettier": "^3.6.2",
179 "prettier-config-holepunch": "^2.0.0",
180 "protomux-rpc-router": "^1.2.0",
181 "random-bytes-seed": "^2.0.1",
182 "tar-fs": "^3.0.8",
183 "test-tmp": "^1.3.0"
184 }
185}
keet-core-4.14.4-pretty/schema/api/call/index.js +1 -0
……@@ -0,0 +1 @@
1module.exports = function (o) {}
keet-core-4.14.4-pretty/schema/api/common.js +13 -0
……@@ -0,0 +1,13 @@
1function e(e = []) {
2 return [{ name: "header", type: "@api/request-header", required: !0 }, ...e]
3}
4function r(e = []) {
5 return [{ name: "header", type: "@api/response-header", required: !0 }, ...e]
6}
7function n(e = []) {
8 return [{ name: "clock", type: "uint", required: !0 }, ...e]
9}
10function t() {
11 return [{ name: "clock", type: "uint", required: !0 }]
12}
13module.exports = { createRequest: e, createResponse: r, createWant: n, createUnwant: t }
keet-core-4.14.4-pretty/schema/api/core/files.js +1 -0
……@@ -0,0 +1 @@
1module.exports = function (o) {}
keet-core-4.14.4-pretty/schema/api/core/identity.js +35 -0
……@@ -0,0 +1,35 @@
1const { createRequest: e, createWant: t, createUnwant: i } = require("../common.js")
2module.exports = function (r) {
3 ;(r.register({
4 name: "update-profile-request",
5 fields: e([
6 { name: "displayName", type: "string", required: !0 },
7 { name: "avatar", type: "@api/core/inline-avatar" },
8 ]),
9 }),
10 r.register({ name: "want-identity", fields: t([]) }),
11 r.register({ name: "unwant-identity", fields: i() }),
12 r.register({
13 name: "identity-status",
14 fields: [
15 { name: "isConfirmed", type: "bool" },
16 { name: "isLoggedOut", type: "bool" },
17 ],
18 }),
19 r.register({
20 name: "identity",
21 fields: [
22 { name: "memberKey", type: "@keet/member-key", required: !0 },
23 { name: "status", type: "@api/core/identity-status", required: !0 },
24 { name: "deviceKeys", type: "@keet/device-key", array: !0, required: !0 },
25 ],
26 }),
27 r.register({
28 name: "identity-member",
29 fields: [{ name: "memberKey", type: "@keet/member-key", required: !0 }],
30 }),
31 r.register({
32 name: "identity-device",
33 fields: [{ name: "deviceKey", type: "@keet/device-key", required: !0 }],
34 }))
35}
keet-core-4.14.4-pretty/schema/api/core/index.js +18 -0
……@@ -0,0 +1,18 @@
1const e = require("./identity"),
2 r = require("./pairing"),
3 i = require("./files"),
4 a = require("./users"),
5 n = require("./room")
6module.exports = function (t) {
7 ;(t.register({ name: "inline-avatar", alias: "buffer" }),
8 t.register({
9 name: "have",
10 compact: !0,
11 fields: [{ name: "clock", type: "uint", required: !0 }],
12 }),
13 n(t),
14 a(t),
15 i(t),
16 r(t),
17 e(t))
18}
keet-core-4.14.4-pretty/schema/api/core/pairing.js +99 -0
……@@ -0,0 +1,99 @@
1const {
2 createRequest: e,
3 createResponse: i,
4 createWant: r,
5 createUnwant: t,
6} = require("../common.js")
7module.exports = function (n) {
8 ;(n.register({ name: "want-pairing", fields: r([]) }),
9 n.register({ name: "unwant-pairing", fields: t([]) }),
10 n.register({
11 name: "pending-invitations",
12 fields: [
13 {
14 name: "invitations",
15 type: "@keet-private-id/pending-invitation",
16 array: !0,
17 required: !0,
18 },
19 ],
20 }),
21 n.register({
22 name: "join-request",
23 fields: [
24 { name: "roomKey", type: "@keet/room-key", required: !0 },
25 { name: "request", type: "@keet/join-request", required: !0 },
26 ],
27 }),
28 n.register({
29 name: "join-requests",
30 fields: [{ name: "requests", type: "@api/core/join-request", array: !0, required: !0 }],
31 }),
32 n.register({
33 name: "pairing",
34 fields: [
35 {
36 name: "pendingInvitations",
37 type: "@keet-private-id/pending-invitation",
38 array: !0,
39 required: !0,
40 },
41 { name: "identityJoinRequests", type: "@keet/join-request", array: !0, required: !0 },
42 ],
43 }),
44 n.register({
45 name: "start-pairing-request",
46 fields: e([
47 { name: "invitation", type: "string", required: !0 },
48 { name: "isIdentity", type: "bool" },
49 ]),
50 }),
51 n.register({ name: "start-pairing-response", fields: i([]) }),
52 n.register({
53 name: "invitation-permissions",
54 fields: [
55 { name: "canModerate", type: "bool" },
56 { name: "canAdmin", type: "bool" },
57 { name: "requiresConfirmation", type: "bool" },
58 { name: "isReadOnly", type: "bool" },
59 ],
60 }),
61 n.register({
62 name: "create-room-invitation-request",
63 fields: e([
64 { name: "roomKey", type: "@keet/room-key", required: !0 },
65 { name: "permissions", type: "@api/core/invitation-permissions" },
66 { name: "expiration", type: "uint" },
67 ]),
68 }),
69 n.register({
70 name: "create-room-invitation-response",
71 fields: i([{ name: "invitation", type: "string", required: !0 }]),
72 }),
73 n.register({ name: "create-identity-invitation-request", fields: e([]) }),
74 n.register({
75 name: "create-identity-invitation-response",
76 fields: i([{ name: "invitation", type: "string", required: !0 }]),
77 }),
78 n.register({
79 name: "accept-join-request-request",
80 fields: e([
81 { name: "roomKey", type: "@keet/room-key", required: !0 },
82 { name: "request", type: "@keet/join-request", required: !0 },
83 ]),
84 }),
85 n.register({ name: "accept-join-request-response", fields: i([]) }),
86 n.register({
87 name: "reject-join-request-request",
88 fields: e([
89 { name: "roomKey", type: "@keet/room-key", required: !0 },
90 { name: "request", type: "@keet/join-request", required: !0 },
91 ]),
92 }),
93 n.register({ name: "reject-join-request-response", fields: i([]) }),
94 n.register({
95 name: "stop-pairing-request",
96 fields: e([{ name: "id", type: "@keet/invitation-id", required: !0 }]),
97 }),
98 n.register({ name: "stop-pairing-response", fields: i([]) }))
99}
keet-core-4.14.4-pretty/schema/api/core/room.js +305 -0
……@@ -0,0 +1,305 @@
1const {
2 createRequest: e,
3 createResponse: r,
4 createWant: t,
5 createUnwant: i,
6} = require("../common.js")
7module.exports = function (m) {
8 ;(m.register({
9 name: "create-room-request",
10 fields: e([
11 { name: "config", type: "@keet/room-config" },
12 { name: "settings", type: "@keet/system-settings" },
13 ]),
14 }),
15 m.register({
16 name: "create-room-response",
17 fields: r([{ name: "roomKey", type: "@keet/room-key" }]),
18 }),
19 m.register({
20 name: "activate-room-request",
21 fields: e([{ name: "roomKey", type: "@keet/room-key", required: !0 }]),
22 }),
23 m.register({
24 name: "deactivate-room-request",
25 fields: e([{ name: "roomKey", type: "@keet/room-key", required: !0 }]),
26 }),
27 m.register({
28 name: "leave-room-request",
29 fields: e([{ name: "roomKey", type: "@keet/room-key", required: !0 }]),
30 }),
31 m.register({ name: "leave-room-response", fields: r() }),
32 m.register({
33 name: "update-room-config-request",
34 fields: e([
35 { name: "roomKey", type: "@keet/room-key", required: !0 },
36 { name: "key", type: "uint", required: !0 },
37 { name: "config", type: "@keet/room-config", required: !0 },
38 ]),
39 }),
40 m.register({
41 name: "update-room-settings-request",
42 fields: e([
43 { name: "roomKey", type: "@keet/room-key", required: !0 },
44 { name: "key", type: "uint", required: !0 },
45 { name: "settings", type: "@keet/system-settings", required: !0 },
46 ]),
47 }),
48 m.register({
49 name: "update-room-status-request",
50 fields: e([
51 { name: "roomKey", type: "@keet/room-key", required: !0 },
52 { name: "key", type: "uint", required: !0 },
53 { name: "status", type: "@keet-private-id/room-status", required: !0 },
54 ]),
55 }),
56 m.register({
57 name: "add-chat-message-request",
58 fields: e([
59 { name: "roomKey", type: "@keet/room-key", required: !0 },
60 { name: "message", type: "@keet/oplog-message", required: !0 },
61 ]),
62 }),
63 m.register({ name: "add-chat-message-response", fields: r() }),
64 m.register({
65 name: "edit-chat-message-request",
66 fields: e([
67 { name: "roomKey", type: "@keet/room-key", required: !0 },
68 { name: "id", type: "@keet/oplog-id", required: !0 },
69 { name: "message", type: "@keet/oplog-message", required: !0 },
70 ]),
71 }),
72 m.register({ name: "edit-chat-message-response", fields: r() }),
73 m.register({
74 name: "remove-chat-message-request",
75 fields: e([
76 { name: "roomKey", type: "@keet/room-key", required: !0 },
77 { name: "id", type: "@keet/oplog-id", required: !0 },
78 ]),
79 }),
80 m.register({ name: "remove-chat-message-response", fields: r() }),
81 m.register({
82 name: "add-chat-reaction-request",
83 fields: e([
84 { name: "roomKey", type: "@keet/room-key", required: !0 },
85 { name: "id", type: "@keet/oplog-id", required: !0 },
86 { name: "reaction", type: "string", required: !0 },
87 ]),
88 }),
89 m.register({ name: "add-chat-reaction-response", fields: r() }),
90 m.register({
91 name: "remove-chat-reaction-request",
92 fields: e([
93 { name: "roomKey", type: "@keet/room-key", required: !0 },
94 { name: "id", type: "@keet/oplog-id", required: !0 },
95 { name: "reaction", type: "string", required: !0 },
96 ]),
97 }),
98 m.register({ name: "remove-chat-reaction-response", fields: r() }),
99 m.register({
100 name: "want-lobby",
101 fields: t([
102 { name: "start", type: "uint", required: !0 },
103 { name: "end", type: "uint", required: !0 },
104 ]),
105 }),
106 m.register({ name: "unwant-lobby", fields: i() }),
107 m.register({
108 name: "want-room-info",
109 fields: t([{ name: "keys", type: "@keet/room-key", array: !0, required: !0 }]),
110 }),
111 m.register({
112 name: "want-chat",
113 fields: t([
114 { name: "roomKey", type: "@keet/room-key", required: !0 },
115 { name: "start", type: "uint" },
116 { name: "size", type: "uint" },
117 { name: "isBottom", type: "bool" },
118 ]),
119 }),
120 m.register({ name: "unwant-chat", fields: i() }),
121 m.register({
122 name: "want-members",
123 fields: t([
124 { name: "roomKey", type: "@keet/room-key", required: !0 },
125 { name: "offset", type: "@keet/member-key" },
126 { name: "count", type: "uint" },
127 ]),
128 }),
129 m.register({ name: "unwant-members", fields: i() }),
130 m.register({
131 name: "lobby-record",
132 compact: !0,
133 fields: [
134 { name: "timestamp", type: "uint", required: !0 },
135 { name: "id", type: "@keet/room-key", required: !0 },
136 ],
137 }),
138 m.register({ name: "lobby-record-change-type", enum: ["Changed", "Removed"] }),
139 m.register({
140 name: "lobby",
141 fields: [
142 { name: "keys", type: "@keet/room-key", array: !0, required: !0 },
143 { name: "start", type: "uint", required: !0 },
144 { name: "end", type: "uint", required: !0 },
145 { name: "total", type: "uint", required: !0 },
146 ],
147 }),
148 m.register({
149 name: "lobby-room",
150 fields: [
151 { name: "type", type: "@api/core/lobby-record-change-type", required: !0 },
152 { name: "room", type: "@api/core/lobby-record", required: !0 },
153 ],
154 }),
155 m.register({
156 name: "room-role",
157 fields: [
158 { name: "device", type: "@local/room-status", required: !0 },
159 { name: "member", type: "@keet/member-status" },
160 ],
161 }),
162 m.register({
163 name: "room-info",
164 fields: [
165 { name: "id", type: "@keet/room-key", required: !0 },
166 { name: "role", type: "@api/core/room-role", required: !0 },
167 { name: "digest", type: "@keet/system-digest", required: !0 },
168 { name: "config", type: "@keet/room-config", required: !0 },
169 { name: "messageId", type: "@keet/oplog-id" },
170 ],
171 }),
172 m.register({
173 name: "room-info-status",
174 fields: [
175 { name: "id", type: "@keet/room-key", required: !0 },
176 { name: "status", type: "@local/room-status", required: !0 },
177 ],
178 }),
179 m.register({
180 name: "room-info-digest",
181 fields: [
182 { name: "id", type: "@keet/room-key", required: !0 },
183 { name: "digest", type: "@keet/system-digest", required: !0 },
184 ],
185 }),
186 m.register({
187 name: "room-info-config",
188 fields: [
189 { name: "id", type: "@keet/room-key", required: !0 },
190 { name: "config", type: "@keet/room-config", required: !0 },
191 ],
192 }),
193 m.register({
194 name: "room-info-role",
195 fields: [
196 { name: "id", type: "@keet/room-key", required: !0 },
197 { name: "role", type: "@api/core/room-role" },
198 ],
199 }),
200 m.register({
201 name: "room-info-last-message",
202 fields: [
203 { name: "id", type: "@keet/room-key", required: !0 },
204 { name: "lastMessage", type: "@keet/oplog-id", required: !0 },
205 ],
206 }),
207 m.register({
208 name: "member",
209 fields: [
210 { name: "key", type: "@keet/member-key", required: !0 },
211 { name: "profile", type: "@keet/member-profile", required: !0 },
212 ],
213 }),
214 m.register({
215 name: "device",
216 fields: [
217 { name: "key", type: "@keet/device-key", required: !0 },
218 { name: "status", type: "@keet/device-status", required: !0 },
219 { name: "profile", type: "@keet/device-profile", required: !0 },
220 ],
221 }),
222 m.register({
223 name: "member-list-add",
224 fields: [
225 { name: "roomKey", type: "@keet/room-key", required: !0 },
226 { name: "key", type: "@keet/member-key", required: !0 },
227 ],
228 }),
229 m.register({
230 name: "member-list-remove",
231 fields: [
232 { name: "roomKey", type: "@keet/room-key", required: !0 },
233 { name: "key", type: "@keet/member-key", required: !0 },
234 ],
235 }),
236 m.register({
237 name: "chat-reset",
238 fields: [
239 { name: "roomKey", type: "@keet/room-key", required: !0 },
240 { name: "start", type: "uint", required: !0 },
241 { name: "size", type: "uint", required: !0 },
242 { name: "total", type: "uint", required: !0 },
243 { name: "ids", type: "@keet/oplog-id", required: !0, array: !0 },
244 { name: "isBottom", type: "bool" },
245 ],
246 }),
247 m.register({
248 name: "message-timestamps",
249 fields: [
250 { name: "sent", type: "uint", required: !0 },
251 { name: "edited", type: "uint" },
252 ],
253 }),
254 m.register({
255 name: "message",
256 fields: [
257 { name: "id", type: "@keet/oplog-id", required: !0 },
258 { name: "clock", type: "uint", required: !0 },
259 { name: "timestamps", type: "@api/core/message-timestamps", required: !0 },
260 { name: "status", type: "@keet/message-status", required: !0 },
261 { name: "message", type: "@keet/index-message" },
262 { name: "event", type: "@keet/chat-event" },
263 ],
264 }),
265 m.register({
266 name: "message-info",
267 fields: [
268 { name: "chat", type: "@api/core/message", required: !0 },
269 { name: "memberKey", type: "@keet/member-key", required: !0 },
270 { name: "role", type: "@keet/member-status", required: !0 },
271 ],
272 }),
273 m.register({
274 name: "message-info-chat",
275 fields: [{ name: "chat", type: "@api/core/message", required: !0 }],
276 }),
277 m.register({
278 name: "message-info-member",
279 fields: [
280 { name: "ids", type: "@keet/oplog-id", array: !0, required: !0 },
281 { name: "memberKey", type: "@keet/member-key", required: !0 },
282 ],
283 }),
284 m.register({
285 name: "message-info-role",
286 fields: [
287 { name: "ids", type: "@keet/oplog-id", array: !0, required: !0 },
288 { name: "role", type: "@keet/member-status", required: !0 },
289 ],
290 }),
291 m.register({
292 name: "message-info-reactions",
293 fields: [
294 { name: "id", type: "@keet/oplog-id", required: !0 },
295 { name: "reactions", type: "@keet/reactions-digest", required: !0 },
296 ],
297 }),
298 m.register({
299 name: "reactions",
300 fields: [
301 { name: "id", type: "@keet/oplog-id", required: !0 },
302 { name: "digest", type: "@keet/reactions-digest", required: !0 },
303 ],
304 }))
305}
keet-core-4.14.4-pretty/schema/api/core/users.js +1 -0
……@@ -0,0 +1 @@
1module.exports = function (o) {}
keet-core-4.14.4-pretty/schema/api/debug/index.js +13 -0
……@@ -0,0 +1,13 @@
1const { createRequest: e, createResponse: s } = require("../common.js")
2module.exports = function (r) {
3 ;(r.register({
4 name: "enable-request",
5 fields: e([{ name: "password", type: "string", required: !0 }]),
6 }),
7 r.register({
8 name: "enable-response",
9 fields: s([{ name: "inspector", type: "string", required: !0 }]),
10 }),
11 r.register({ name: "disable-request", fields: s([]) }),
12 r.register({ name: "disable-response", fields: s([]) }))
13}
keet-core-4.14.4-pretty/schema/api/error/index.js +1 -0
……@@ -0,0 +1 @@
1module.exports = function (o) {}
keet-core-4.14.4-pretty/schema/api/index.js +35 -0
……@@ -0,0 +1,35 @@
1const e = require("../local"),
2 { createRequest: r, createResponse: s } = require("./common.js"),
3 i = require("./core"),
4 a = require("./call"),
5 t = require("./debug"),
6 n = require("./error"),
7 u = require("./network")
8module.exports = function (o) {
9 const c = o.namespace("api")
10 ;(e(o),
11 c.register({
12 name: "request-header",
13 fields: [{ name: "timestamp", type: "uint", required: !0 }],
14 }),
15 c.register({
16 name: "response-header",
17 fields: [{ name: "duration", type: "uint", required: !0 }],
18 }),
19 c.register({
20 name: "subscription-request-header",
21 fields: [{ name: "clock", type: "uint", required: !0 }],
22 }),
23 c.register({
24 name: "subscription-response-header",
25 fields: [{ name: "clock", type: "uint", required: !0 }],
26 }),
27 c.register({ name: "boot-request", fields: r([]) }),
28 c.register({ name: "boot-response", fields: s([]) }),
29 c.register({ name: "self-destruct-request", fields: r([]) }),
30 i(o.namespace("api/core")),
31 a(o.namespace("api/call")),
32 t(o.namespace("api/debug")),
33 n(o.namespace("api/error")),
34 u(o.namespace("api/network")))
35}
keet-core-4.14.4-pretty/schema/api/network/index.js +1 -0
……@@ -0,0 +1 @@
1module.exports = function (o) {}
keet-core-4.14.4-pretty/schema/api/pear/index.js +1 -0
……@@ -0,0 +1 @@
1module.exports = function (o) {}
keet-core-4.14.4-pretty/schema/builder/api/hrpc.js +213 -0
……@@ -0,0 +1,213 @@
1module.exports = function (e) {
2 const r = e.namespace("api")
3 ;(r.register({
4 name: "self-destruct",
5 request: { name: "@api/self-destruct-request", stream: !1 },
6 }),
7 r.register({
8 name: "boot",
9 request: { name: "@api/boot-request", stream: !1 },
10 response: { name: "@api/boot-response", stream: !1 },
11 }),
12 r.register({
13 name: "core-create-room",
14 request: { name: "@api/core/create-room-request", stream: !1 },
15 response: { name: "@api/core/create-room-response", stream: !1 },
16 }),
17 r.register({
18 name: "core-activate-room",
19 request: { name: "@api/core/activate-room-request", send: !0 },
20 }),
21 r.register({
22 name: "core-deactivate-room",
23 request: { name: "@api/core/deactivate-room-request", send: !0 },
24 }),
25 r.register({
26 name: "core-leave-room",
27 request: { name: "@api/core/leave-room-request" },
28 response: { name: "@api/core/leave-room-response" },
29 }),
30 r.register({
31 name: "core-update-room-config",
32 request: { name: "@api/core/update-room-config-request", send: !0 },
33 }),
34 r.register({
35 name: "core-update-room-settings",
36 request: { name: "@api/core/update-room-settings-request", send: !0 },
37 }),
38 r.register({
39 name: "core-update-room-status",
40 request: { name: "@api/core/update-room-status-request", send: !0 },
41 }),
42 r.register({
43 name: "core-update-profile",
44 request: { name: "@api/core/update-profile-request", send: !0 },
45 }),
46 r.register({
47 name: "core-create-room-invitation",
48 request: { name: "@api/core/create-room-invitation-request" },
49 response: { name: "@api/core/create-room-invitation-response" },
50 }),
51 r.register({
52 name: "core-create-identity-invitation",
53 request: { name: "@api/core/create-identity-invitation-request" },
54 response: { name: "@api/core/create-identity-invitation-response" },
55 }),
56 r.register({
57 name: "core-start-pairing",
58 request: { name: "@api/core/start-pairing-request" },
59 response: { name: "@api/core/start-pairing-response" },
60 }),
61 r.register({
62 name: "core-accept-join-request",
63 request: { name: "@api/core/accept-join-request-request" },
64 response: { name: "@api/core/accept-join-request-response" },
65 }),
66 r.register({
67 name: "core-reject-join-request",
68 request: { name: "@api/core/reject-join-request-request" },
69 response: { name: "@api/core/reject-join-request-response" },
70 }),
71 r.register({
72 name: "core-stop-pairing",
73 request: { name: "@api/core/stop-pairing-request" },
74 response: { name: "@api/core/stop-pairing-response" },
75 }),
76 r.register({
77 name: "core-add-chat-message",
78 request: { name: "@api/core/add-chat-message-request" },
79 response: { name: "@api/core/add-chat-message-response" },
80 }),
81 r.register({
82 name: "core-edit-chat-message",
83 request: { name: "@api/core/edit-chat-message-request" },
84 response: { name: "@api/core/edit-chat-message-response" },
85 }),
86 r.register({
87 name: "core-remove-chat-message",
88 request: { name: "@api/core/remove-chat-message-request" },
89 response: { name: "@api/core/remove-chat-message-response" },
90 }),
91 r.register({
92 name: "core-add-chat-reaction",
93 request: { name: "@api/core/add-chat-reaction-request" },
94 response: { name: "@api/core/add-chat-reaction-response" },
95 }),
96 r.register({
97 name: "core-remove-chat-reaction",
98 request: { name: "@api/core/remove-chat-reaction-request" },
99 response: { name: "@api/core/remove-chat-reaction-response" },
100 }),
101 r.register({
102 name: "core-want-identity",
103 request: { name: "@api/core/want-identity", send: !0 },
104 }),
105 r.register({
106 name: "core-unwant-identity",
107 request: { name: "@api/core/unwant-identity", send: !0 },
108 }),
109 r.register({ name: "core-have-identity", request: { name: "@api/core/have", send: !0 } }),
110 r.register({ name: "core-identity-reset", request: { name: "@api/core/identity", send: !0 } }),
111 r.register({
112 name: "core-identity-member",
113 request: { name: "@api/core/identity-member", send: !0 },
114 }),
115 r.register({
116 name: "core-identity-device",
117 request: { name: "@api/core/identity-device", send: !0 },
118 }),
119 r.register({
120 name: "core-want-pairing",
121 request: { name: "@api/core/want-pairing", send: !0 },
122 }),
123 r.register({
124 name: "core-unwant-pairing",
125 request: { name: "@api/core/unwant-pairing", send: !0 },
126 }),
127 r.register({ name: "core-have-pairing", request: { name: "@api/core/have", send: !0 } }),
128 r.register({ name: "core-pairing-reset", request: { name: "@api/core/pairing", send: !0 } }),
129 r.register({ name: "core-want-lobby", request: { name: "@api/core/want-lobby", send: !0 } }),
130 r.register({
131 name: "core-unwant-lobby",
132 request: { name: "@api/core/unwant-lobby", send: !0 },
133 }),
134 r.register({ name: "core-have-lobby", request: { name: "@api/core/have", send: !0 } }),
135 r.register({ name: "core-lobby-reset", request: { name: "@api/core/lobby", send: !0 } }),
136 r.register({ name: "core-lobby-room", request: { name: "@api/core/lobby-room", send: !0 } }),
137 r.register({
138 name: "core-want-room-info",
139 request: { name: "@api/core/want-room-info", send: !0 },
140 }),
141 r.register({ name: "core-have-room-info", request: { name: "@api/core/have", send: !0 } }),
142 r.register({ name: "core-room-info", request: { name: "@api/core/room-info", send: !0 } }),
143 r.register({
144 name: "core-room-info-digest",
145 request: { name: "@api/core/room-info-digest", send: !0 },
146 }),
147 r.register({
148 name: "core-room-info-config",
149 request: { name: "@api/core/room-info-config", send: !0 },
150 }),
151 r.register({
152 name: "core-room-info-role",
153 request: { name: "@api/core/room-info-role", send: !0 },
154 }),
155 r.register({
156 name: "core-room-info-last-message",
157 request: { name: "@api/core/room-info-last-message", send: !0 },
158 }),
159 r.register({ name: "core-want-chat", request: { name: "@api/core/want-chat", send: !0 } }),
160 r.register({ name: "core-unwant-chat", request: { name: "@api/core/unwant-chat", send: !0 } }),
161 r.register({ name: "core-have-chat", request: { name: "@api/core/have", send: !0 } }),
162 r.register({ name: "core-chat-reset", request: { name: "@api/core/chat-reset", send: !0 } }),
163 r.register({
164 name: "core-message-info",
165 request: { name: "@api/core/message-info", send: !0 },
166 }),
167 r.register({
168 name: "core-message-info-chat",
169 request: { name: "@api/core/message-info-chat", send: !0 },
170 }),
171 r.register({
172 name: "core-message-info-member",
173 request: { name: "@api/core/message-info-member", send: !0 },
174 }),
175 r.register({
176 name: "core-message-info-role",
177 request: { name: "@api/core/message-info-role", send: !0 },
178 }),
179 r.register({
180 name: "core-message-info-reactions",
181 request: { name: "@api/core/message-info-reactions", send: !0 },
182 }),
183 r.register({
184 name: "core-want-members",
185 request: { name: "@api/core/want-members", send: !0 },
186 }),
187 r.register({
188 name: "core-unwant-members",
189 request: { name: "@api/core/unwant-members", send: !0 },
190 }),
191 r.register({ name: "core-have-members", request: { name: "@api/core/have", send: !0 } }),
192 r.register({
193 name: "core-member-list-add",
194 request: { name: "@api/core/member-list-add", send: !0 },
195 }),
196 r.register({
197 name: "core-member-list-remove",
198 request: { name: "@api/core/member-list-remove", send: !0 },
199 }),
200 r.register({ name: "core-member", request: { name: "@api/core/member", send: !0 } }),
201 r.register({ name: "core-device", request: { name: "@api/core/device", send: !0 } }),
202 r.register({
203 name: "debug-enable",
204 request: { name: "@api/debug/enable-request" },
205 response: { name: "@api/debug/enable-response" },
206 }),
207 r.register({
208 name: "debug-disable",
209 request: { name: "@api/debug/disable-request" },
210 response: { name: "@api/debug/disable-response" },
211 }),
212 r.register({ name: "send-legacy", request: { name: "buffer", send: !0 } }))
213}
keet-core-4.14.4-pretty/schema/builder/contract/hyperdb.js +469 -0
……@@ -0,0 +1,469 @@
1const e = require("path")
2module.exports = function (t) {
3 const i = t.namespace("keet")
4 ;(i.require(e.join(__dirname, "../../../lib/core/hyperdb/contract/keet.js")),
5 i.collections.register({ name: "system-digest", schema: "@keet/system-digest", key: [] }),
6 i.collections.register({ name: "blind-peers", schema: "@keet/blind-peer", key: ["key"] }),
7 i.collections.register({ name: "room-config", schema: "@keet/room-config", key: [] }),
8 i.collections.register({ name: "room-capabilities", schema: "@keet/room-seed", key: [] }),
9 i.collections.register({
10 name: "join-requests",
11 schema: "@keet/join-request",
12 key: ["deviceKey"],
13 }),
14 i.collections.register({
15 name: "devices",
16 schema: "@keet/device",
17 key: ["key"],
18 trigger: "devicesTrigger",
19 }),
20 i.indexes.register({
21 name: "devices-by-member-key",
22 collection: "@keet/devices",
23 key: ["memberKey"],
24 }),
25 i.indexes.register({
26 name: "devices-by-swarm-key",
27 collection: "@keet/devices",
28 key: ["profile.swarmKey"],
29 unique: !0,
30 }),
31 i.indexes.register({
32 name: "active-devices-by-member-key",
33 collection: "@keet/devices",
34 key: {
35 type: { fields: [{ name: "memberKey", type: "@keet/member-key" }] },
36 map: "activeDevicesByMemberKeyMap",
37 },
38 }),
39 i.indexes.register({
40 name: "active-devices",
41 collection: "@keet/devices",
42 unique: !0,
43 key: {
44 type: { fields: [{ name: "key", type: "@keet/device-key" }] },
45 map: "activeDevicesMap",
46 },
47 }),
48 i.collections.register({ name: "member-proofs", schema: "@keet/member-proofs", key: ["key"] }),
49 i.collections.register({
50 name: "members",
51 schema: "@keet/member",
52 key: ["key"],
53 trigger: "membersTrigger",
54 }),
55 i.indexes.register({
56 name: "moderators",
57 collection: "@keet/members",
58 unique: !0,
59 key: { type: { fields: [{ name: "key", type: "@keet/member-key" }] }, map: "moderatorsMap" },
60 }),
61 i.indexes.register({
62 name: "admins",
63 collection: "@keet/members",
64 unique: !0,
65 key: { type: { fields: [{ name: "key", type: "@keet/member-key" }] }, map: "adminsMap" },
66 }),
67 i.indexes.register({
68 name: "active-members",
69 collection: "@keet/members",
70 unique: !0,
71 key: {
72 type: { fields: [{ name: "key", type: "@keet/member-key" }] },
73 map: "activeMembersMap",
74 },
75 }),
76 i.indexes.register({
77 name: "muted-members",
78 collection: "@keet/members",
79 unique: !0,
80 key: {
81 type: { fields: [{ name: "key", type: "@keet/member-key" }] },
82 map: "mutedMembersMap",
83 },
84 }),
85 i.indexes.register({
86 name: "members-by-member-name",
87 collection: "@keet/members",
88 key: { type: { fields: [{ name: "name", type: "string" }] }, map: "membersByMemberNameMap" },
89 }),
90 i.collections.register({
91 name: "member-activity",
92 schema: "@keet/member-activity",
93 key: ["key"],
94 }),
95 i.collections.register({ name: "invitations", schema: "@keet/invitation", key: ["id"] }),
96 i.collections.register({ name: "threads", schema: "@keet/thread", key: ["id"] }),
97 i.indexes.register({
98 name: "threads-by-parent",
99 collection: "@keet/threads",
100 unique: !0,
101 key: {
102 type: {
103 fields: [
104 { name: "key", type: "@keet/member-key" },
105 { name: "seq", type: "uint" },
106 ],
107 },
108 map: "threadsByParentMap",
109 },
110 }),
111 i.collections.register({
112 name: "chat",
113 schema: "@keet/chat-message-record",
114 key: ["id.thread", "id.index"],
115 trigger: "chatTrigger",
116 }),
117 i.indexes.register({
118 name: "chat-by-message-id",
119 collection: "@keet/chat",
120 key: ["oplog.key", "oplog.seq"],
121 unique: !0,
122 }),
123 i.indexes.register({
124 name: "chat-mentions-by-member-id",
125 collection: "@keet/chat",
126 key: {
127 type: {
128 fields: [
129 { name: "key", type: "@keet/member-key" },
130 { name: "clock", type: "uint" },
131 ],
132 },
133 map: "chatMentionsByMemberIdMap",
134 },
135 }),
136 i.indexes.register({
137 name: "pinned-chat-messages",
138 collection: "@keet/chat",
139 key: {
140 type: {
141 fields: [
142 { name: "thread", type: "uint" },
143 { name: "index", type: "uint" },
144 ],
145 },
146 map: "pinnedChatMessagesMap",
147 },
148 }),
149 i.collections.register({
150 name: "reaction-digests",
151 schema: "@keet/reactions-digest",
152 key: ["id.thread", "id.index"],
153 }),
154 i.collections.register({
155 name: "reactions",
156 schema: "@keet/reaction",
157 key: ["id.thread", "id.index", "sender", "reaction"],
158 trigger: "reactionsTrigger",
159 }),
160 i.indexes.register({
161 name: "reactions-by-clock",
162 collection: "@keet/reactions",
163 key: ["id.thread", "id.index", "reaction", "clock", "sender"],
164 }),
165 i.collections.register({
166 name: "files",
167 schema: "@keet/file-record",
168 key: ["id"],
169 versionField: "version",
170 trigger: "filesTrigger",
171 }),
172 i.indexes.register({
173 name: "files-by-message-id",
174 collection: "@keet/files",
175 key: ["oplog.key", "oplog.seq"],
176 }),
177 i.indexes.register({
178 name: "files-by-type",
179 collection: "@keet/files",
180 key: {
181 type: {
182 fields: [
183 { name: "type", type: "string" },
184 { name: "id", type: "uint" },
185 ],
186 },
187 map: "filesByTypeMap",
188 },
189 deprecated: !0,
190 }),
191 i.indexes.register({
192 name: "deleted-files",
193 collection: "@keet/files",
194 key: { type: { fields: [{ name: "id", type: "uint" }] }, map: "deletedFilesMap" },
195 deprecated: !0,
196 }),
197 i.indexes.register({
198 name: "files-by-major-type",
199 collection: "@keet/files",
200 key: {
201 type: {
202 fields: [
203 { name: "type", type: "string" },
204 { name: "id", type: "uint" },
205 ],
206 },
207 map: "filesByMajorTypeMap",
208 },
209 }),
210 i.indexes.register({
211 name: "active-files",
212 collection: "@keet/files",
213 key: { type: { fields: [{ name: "id", type: "uint" }] }, map: "activeFilesMap" },
214 }),
215 i.collections.register({
216 name: "chat-labels",
217 schema: "@keet/chat-label",
218 key: ["id.thread", "id.index", "sender", "label"],
219 trigger: "chatLabelTrigger",
220 }),
221 i.collections.register({
222 name: "chat-label-digests",
223 schema: "@keet/chat-label-digest",
224 versionField: "version",
225 key: ["id.thread", "id.index"],
226 }),
227 i.indexes.register({
228 name: "chat-label-digests-by-clock",
229 collection: "@keet/chat-label-digests",
230 key: {
231 type: {
232 fields: [
233 { name: "label", type: "@keet/label-type" },
234 { name: "clock", type: "uint" },
235 ],
236 },
237 map: "chatLabelDigestFlagMap",
238 },
239 }),
240 i.collections.register({
241 name: "member-labels",
242 schema: "@keet/member-label",
243 key: ["key", "sender", "label"],
244 }),
245 i.collections.register({
246 name: "member-label-digests",
247 schema: "@keet/member-label-digest",
248 key: ["key"],
249 }),
250 i.indexes.register({
251 name: "member-label-digests-by-clock",
252 collection: "@keet/member-label-digests",
253 key: {
254 type: {
255 fields: [
256 { name: "label", type: "@keet/member-label-type" },
257 { name: "clock", type: "uint" },
258 ],
259 },
260 map: "memberLabelDigestFlagMap",
261 },
262 }),
263 i.collections.register({
264 name: "read-lengths",
265 schema: "@keet/read-length",
266 key: ["memberKey"],
267 }),
268 i.collections.register({
269 name: "test-collection-1",
270 schema: "@keet/test-collection-record-1",
271 key: ["key"],
272 }),
273 i.collections.register({
274 name: "tmp-removed-members",
275 schema: "@keet/tmp-removed-member",
276 key: ["key"],
277 }),
278 i.collections.register({ name: "calls", schema: "@keet/call-record", key: ["callKey"] }),
279 i.indexes.register({
280 name: "calls-by-timestamp",
281 collection: "@keet/calls",
282 key: ["createdAt"],
283 }),
284 i.indexes.register({
285 name: "active-calls-by-timestamp",
286 collection: "@keet/calls",
287 key: { type: { fields: [{ name: "createdAt", type: "uint" }] }, map: "activeCallsMap" },
288 }),
289 i.collections.register({
290 name: "call-members",
291 schema: "@keet/call-member-record",
292 key: ["callKey", "memberKey"],
293 }),
294 i.collections.register({
295 name: "call-devices",
296 schema: "@keet/call-device-record",
297 key: ["callKey", "deviceKey"],
298 }),
299 i.indexes.register({
300 name: "call-devices-by-member-key",
301 collection: "@keet/call-devices",
302 key: ["callKey", "memberKey"],
303 }),
304 i.collections.register({
305 name: "call-streams",
306 schema: "@keet/call-stream-record",
307 key: ["callKey", "streamKey"],
308 }),
309 i.indexes.register({
310 name: "call-streams-by-device-key",
311 collection: "@keet/call-streams",
312 key: ["callKey", "deviceKey"],
313 }))
314 const s = t.namespace("keet-private-id")
315 ;(s.require(e.join(__dirname, "../../../lib/core/hyperdb/contract/keet-private-id.js")),
316 s.collections.register({ name: "identity", schema: "@keet/room-identity", key: [] }),
317 s.collections.register({ name: "stats", schema: "@keet-private-id/stats", key: [] }),
318 s.collections.register({ name: "counters", schema: "@keet-private-id/counters", key: [] }),
319 s.collections.register({
320 name: "pending-invitations",
321 schema: "@keet-private-id/pending-invitation",
322 key: ["id"],
323 }),
324 s.collections.register({
325 name: "rooms",
326 schema: "@keet-private-id/room",
327 key: ["roomKey"],
328 trigger: "roomsTrigger",
329 }),
330 s.indexes.register({
331 name: "rooms-by-clock",
332 collection: "@keet-private-id/rooms",
333 key: ["clock"],
334 }),
335 s.indexes.register({
336 name: "rooms-by-contact",
337 collection: "@keet-private-id/rooms",
338 key: {
339 type: { fields: [{ name: "contact", type: "@keet/member-key" }] },
340 map: "roomsByContactMap",
341 },
342 }),
343 s.collections.register({
344 name: "contacts",
345 schema: "@keet-private-id/contact-record",
346 key: ["memberKey"],
347 trigger: "contactsTrigger",
348 }),
349 s.indexes.register({
350 name: "contacts-by-clock",
351 collection: "@keet-private-id/contacts",
352 key: ["clock"],
353 }),
354 s.collections.register({
355 name: "contact-requests",
356 schema: "@keet-private-id/contact-request-record",
357 key: ["memberKey"],
358 trigger: "contactRequestsTrigger",
359 }),
360 s.indexes.register({
361 name: "contact-requests-by-clock",
362 collection: "@keet-private-id/contact-requests",
363 key: ["clock"],
364 }),
365 s.indexes.register({
366 name: "pending-contact-requests",
367 collection: "@keet-private-id/contact-requests",
368 key: {
369 type: { fields: [{ name: "clock", type: "uint" }] },
370 map: "pendingContactRequestsMap",
371 },
372 }),
373 s.indexes.register({
374 name: "accepted-contact-requests",
375 collection: "@keet-private-id/contact-requests",
376 key: {
377 type: { fields: [{ name: "clock", type: "uint" }] },
378 map: "acceptedContactRequestsMap",
379 },
380 }),
381 s.indexes.register({
382 name: "rejected-contact-requests",
383 collection: "@keet-private-id/contact-requests",
384 key: {
385 type: { fields: [{ name: "clock", type: "uint" }] },
386 map: "rejectedContactRequestsMap",
387 },
388 }),
389 s.indexes.register({
390 name: "discarded-contact-requests",
391 collection: "@keet-private-id/contact-requests",
392 key: {
393 type: { fields: [{ name: "clock", type: "uint" }] },
394 map: "discardedContactRequestsMap",
395 },
396 }),
397 s.collections.register({
398 name: "device-identities",
399 schema: "@keet/device-identity",
400 key: ["deviceKey"],
401 }),
402 s.collections.register({
403 name: "contact-requests-v2",
404 schema: "@keet-private-id/contact-request-record",
405 key: ["memberKey", "keys.key"],
406 trigger: "contactRequestsTrigger",
407 }),
408 s.indexes.register({
409 name: "contact-requests-by-member",
410 collection: "@keet-private-id/contact-requests-v2",
411 key: ["memberKey"],
412 }),
413 s.indexes.register({
414 name: "contact-requests-by-clock-v2",
415 collection: "@keet-private-id/contact-requests-v2",
416 key: ["clock"],
417 }),
418 s.indexes.register({
419 name: "pending-contact-requests-v2",
420 collection: "@keet-private-id/contact-requests-v2",
421 key: {
422 type: { fields: [{ name: "clock", type: "uint" }] },
423 map: "pendingContactRequestsMap",
424 },
425 }),
426 s.indexes.register({
427 name: "pending-contact-requests-by-member",
428 collection: "@keet-private-id/contact-requests-v2",
429 key: {
430 type: { fields: [{ name: "memberKey", type: "@keet/member-key" }] },
431 map: "pendingContactRequestsByMemberMap",
432 },
433 }),
434 s.indexes.register({
435 name: "accepted-contact-requests-v2",
436 collection: "@keet-private-id/contact-requests-v2",
437 key: {
438 type: { fields: [{ name: "clock", type: "uint" }] },
439 map: "acceptedContactRequestsMap",
440 },
441 }),
442 s.indexes.register({
443 name: "rejected-contact-requests-v2",
444 collection: "@keet-private-id/contact-requests-v2",
445 key: {
446 type: { fields: [{ name: "clock", type: "uint" }] },
447 map: "rejectedContactRequestsMap",
448 },
449 }),
450 s.indexes.register({
451 name: "discarded-contact-requests-v2",
452 collection: "@keet-private-id/contact-requests-v2",
453 key: {
454 type: { fields: [{ name: "clock", type: "uint" }] },
455 map: "discardedContactRequestsMap",
456 },
457 }),
458 s.collections.register({
459 name: "unreads-v2",
460 schema: "@keet-private-id/unreads",
461 key: ["deviceKey"],
462 }),
463 s.collections.register({
464 name: "unreads",
465 schema: "@keet-private-id/unreads",
466 key: ["deviceKey"],
467 }),
468 s.collections.register({ name: "settings", schema: "@keet-private-id/settings", key: [] }))
469}
keet-core-4.14.4-pretty/schema/builder/contract/hyperdispatch.js +110 -0
……@@ -0,0 +1,110 @@
1module.exports = function (e) {
2 const t = e.namespace("keet")
3 ;(t.register({ name: "genesis", requestType: "@keet/genesis-operation" }),
4 t.register({ name: "upgrade", requestType: "@keet/upgrade-operation" }),
5 t.register({
6 name: "update-system-settings",
7 requestType: "@keet/update-system-settings-operation",
8 }),
9 t.register({ name: "add-blind-peer", requestType: "@keet/add-blind-peer-operation" }),
10 t.register({ name: "remove-blind-peer", requestType: "@keet/remove-blind-peer-operation" }),
11 t.register({ name: "add-device", requestType: "@keet/add-device-operation" }),
12 t.register({ name: "update-device", requestType: "@keet/update-device-operation" }),
13 t.register({ name: "start-indexing", requestType: "@keet/start-indexing-operation" }),
14 t.register({ name: "stop-indexing", requestType: "@keet/stop-indexing-operation" }),
15 t.register({ name: "accept-join-request", requestType: "@keet/accept-join-request-operation" }),
16 t.register({ name: "reject-join-request", requestType: "@keet/reject-join-request-operation" }),
17 t.register({ name: "update-member", requestType: "@keet/update-member-operation" }),
18 t.register({ name: "change-member-role", requestType: "@keet/change-member-role-operation" }),
19 t.register({
20 name: "change-member-status",
21 requestType: "@keet/change-member-status-operation",
22 }),
23 t.register({ name: "remove-member", requestType: "@keet/remove-member-operation" }),
24 t.register({ name: "add-invitation", requestType: "@keet/add-invitation-operation" }),
25 t.register({ name: "remove-invitation", requestType: "@keet/remove-invitation-operation" }),
26 t.register({ name: "add-chat-message", requestType: "@keet/add-chat-message-operation" }),
27 t.register({ name: "remove-chat-message", requestType: "@keet/remove-chat-message-operation" }),
28 t.register({ name: "update-chat-message", requestType: "@keet/update-chat-message-operation" }),
29 t.register({ name: "pin-chat-message", requestType: "@keet/pin-chat-message-operation" }),
30 t.register({ name: "add-reaction", requestType: "@keet/add-reaction-operation" }),
31 t.register({ name: "remove-reaction", requestType: "@keet/remove-reaction-operation" }),
32 t.register({ name: "update-room-config", requestType: "@keet/update-room-config-operation" }))
33 const r = e.namespace("keet-private-id")
34 ;(r.register({
35 name: "run-v3-migration",
36 requestType: "@keet-private-id/run-v3-migration-operation",
37 }),
38 r.register({
39 name: "update-identity",
40 requestType: "@keet-private-id/update-identity-operation",
41 }),
42 r.register({
43 name: "resolve-pending-invitation",
44 requestType: "@keet-private-id/resolve-pending-invitation-operation",
45 }),
46 r.register({
47 name: "add-pending-invitation",
48 requestType: "@keet-private-id/add-pending-invitation-operation",
49 }),
50 r.register({
51 name: "remove-pending-invitation",
52 requestType: "@keet-private-id/remove-pending-invitation-operation",
53 }),
54 r.register({ name: "add-room", requestType: "@keet-private-id/add-room-operation" }),
55 r.register({ name: "remove-room", requestType: "@keet-private-id/remove-room-operation" }),
56 r.register({
57 name: "update-room-status",
58 requestType: "@keet-private-id/update-room-status-operation",
59 }),
60 r.register({ name: "add-contact", requestType: "@keet-private-id/add-contact-operation" }),
61 r.register({
62 name: "update-contact-status",
63 requestType: "@keet-private-id/update-contact-status-operation",
64 }),
65 r.register({
66 name: "remove-contact",
67 requestType: "@keet-private-id/remove-contact-operation",
68 }),
69 r.register({
70 name: "add-contact-request",
71 requestType: "@keet-private-id/add-contact-request-operation",
72 }),
73 r.register({
74 name: "update-contact-request-status",
75 requestType: "@keet-private-id/update-contact-request-status-operation",
76 }),
77 t.register({ name: "add-file-preview", requestType: "@keet/add-file-preview-operation" }),
78 t.register({ name: "remove-device", requestType: "@keet/remove-device-operation" }),
79 r.register({
80 name: "activate-contact-room",
81 requestType: "@keet-private-id/activate-contact-room-operation",
82 }),
83 t.register({ name: "test-increment", requestType: "@keet/test-increment-operation" }),
84 t.register({ name: "migrate-abi", requestType: "@keet/migrate-abi-operation" }),
85 r.register({
86 name: "add-unreads-key",
87 requestType: "@keet-private-id/add-unreads-key-operation",
88 }),
89 r.register({
90 name: "remove-unreads-key",
91 requestType: "@keet-private-id/remove-unreads-key-operation",
92 }),
93 t.register({ name: "add-chat-label", requestType: "@keet/add-chat-label-operation" }),
94 t.register({ name: "remove-chat-label", requestType: "@keet/remove-chat-label-operation" }),
95 t.register({ name: "update-read-length", requestType: "@keet/update-read-length-operation" }),
96 r.register({
97 name: "update-settings",
98 requestType: "@keet-private-id/update-settings-operation",
99 }),
100 t.register({ name: "add-member-label", requestType: "@keet/add-member-label-operation" }),
101 t.register({ name: "move-indexer", requestType: "@keet/move-indexer-operation" }),
102 t.register({ name: "start-call", requestType: "@keet/start-call" }),
103 t.register({ name: "join-call", requestType: "@keet/join-call" }),
104 t.register({ name: "leave-call", requestType: "@keet/leave-call" }),
105 t.register({ name: "end-call", requestType: "@keet/end-call" }),
106 t.register({ name: "add-call-stream", requestType: "@keet/add-call-stream" }),
107 t.register({ name: "remove-call-stream", requestType: "@keet/remove-call-stream" }),
108 t.register({ name: "test-crash", requestType: "@keet/test-crash-operation" }),
109 t.register({ name: "test-dispatch-error", requestType: "@keet/test-dispatch-error-operation" }))
110}
keet-core-4.14.4-pretty/schema/builder/index.js +69 -0
……@@ -0,0 +1,69 @@
1const e = require("path"),
2 r = require("@holepunchto/hyperschema-regen"),
3 c = require("hyperdispatch"),
4 o = require("hyperschema"),
5 h = require("hyperdb/builder"),
6 n = require("hyperconf/builder"),
7 t = require("hrpc"),
8 {
9 generateContractSchema: i,
10 generateConfigSchema: a,
11 generateLocalSchema: p,
12 generateAPISchema: s,
13 } = require("../index.js")
14function y(r) {
15 const c = e.join(r, "contract"),
16 o = e.join(r, "local"),
17 h = e.join(r, "config"),
18 n = e.join(r, "api")
19 return {
20 contract: {
21 hyperschema: e.join(c, "hyperschema"),
22 hyperdb: e.join(c, "hyperdb"),
23 hyperdispatch: e.join(c, "hyperdispatch"),
24 },
25 local: { hyperschema: e.join(o, "hyperschema"), hyperdb: e.join(o, "hyperdb") },
26 config: { hyperschema: e.join(h, "hyperschema"), hyperconf: e.join(h, "hyperconf") },
27 api: { hyperschema: e.join(n, "hyperschema"), hrpc: e.join(n, "hrpc") },
28 }
29}
30function m(e) {
31 const r = require("./contract/hyperdispatch"),
32 n = require("./contract/hyperdb"),
33 t = o.from(e.contract.hyperschema)
34 ;(i(t), o.toDisk(t))
35 const a = h.from(e.contract.hyperschema, e.contract.hyperdb)
36 ;(n(a), h.toDisk(a))
37 const p = c.from(e.contract.hyperschema, e.contract.hyperdispatch, { offset: 2 })
38 ;(r(p), c.toDisk(p))
39}
40function f(e) {
41 const r = require("./local/hyperdb"),
42 c = o.from(e.local.hyperschema)
43 ;(p(c), o.toDisk(c))
44 const n = h.from(e.local.hyperschema, e.local.hyperdb)
45 ;(r(n), h.toDisk(n))
46}
47function u(e, r) {
48 const c = require("../config/generate"),
49 h = o.from(e.config.hyperschema)
50 ;(a(h), o.toDisk(h))
51 const t = n.from(e.config.hyperschema, e.config.hyperconf)
52 ;(c(t, r), n.toDisk(t))
53}
54function d(e) {
55 const r = require("./api/hrpc"),
56 c = o.from(e.api.hyperschema)
57 ;(s(c), o.toDisk(c))
58 const h = t.from(e.api.hyperschema, e.api.hrpc)
59 ;(r(h), t.toDisk(h))
60}
61module.exports = function (e, { testing: c = !1 } = {}) {
62 c || r.checkout("schema/spec")
63 const o = y(e)
64 ;(m(o),
65 f(o),
66 u(o, { testing: c }),
67 d(o),
68 c || r.validate("schema/spec/contract/hyperdb/db.json", "schema/spec/local/hyperdb/db.json"))
69}
keet-core-4.14.4-pretty/schema/builder/local/hyperdb.js +217 -0
……@@ -0,0 +1,217 @@
1const e = require("path")
2module.exports = function (o) {
3 const i = o.namespace("local")
4 ;(i.require(e.join(__dirname, "../../../lib/core/hyperdb/local/local.js")),
5 i.collections.register({ name: "stats", schema: "@local/stats", key: [] }),
6 i.collections.register({ name: "migrations", schema: "@local/migration-status", key: [] }),
7 i.collections.register({
8 name: "room-migration-stats",
9 schema: "@local/room-migration-stats",
10 key: [],
11 }),
12 i.collections.register({
13 name: "room-migrations",
14 schema: "@local/room-migration",
15 key: ["roomKey"],
16 trigger: "roomMigrationsTrigger",
17 }),
18 i.indexes.register({
19 name: "room-migrations-by-priority",
20 collection: "@local/room-migrations",
21 key: ["priority"],
22 }),
23 i.collections.register({ name: "identity", schema: "@local/identity-record", key: [] }),
24 i.collections.register({ name: "hyperdht", schema: "@local/hyperdht-record", key: [] }),
25 i.collections.register({
26 name: "rooms",
27 schema: "@local/room",
28 versionField: "version",
29 key: ["roomKey"],
30 trigger: "roomsTrigger",
31 }),
32 i.indexes.register({
33 name: "rooms-by-discovery-key",
34 collection: "@local/rooms",
35 unique: !0,
36 key: ["discoveryKey"],
37 }),
38 i.indexes.register({
39 name: "rooms-by-timestamp",
40 collection: "@local/rooms",
41 unique: !1,
42 key: { type: { fields: [{ name: "timestamp", type: "uint" }] }, map: "roomsByTimestampMap" },
43 }),
44 i.indexes.register({
45 name: "rooms-by-type-and-timestamp",
46 collection: "@local/rooms",
47 unique: !1,
48 key: {
49 type: {
50 fields: [
51 { name: "type", type: "uint" },
52 { name: "timestamp", type: "uint" },
53 ],
54 },
55 map: "roomsByTypeAndTimestampMap",
56 },
57 }),
58 i.indexes.register({
59 name: "rooms-by-contact",
60 collection: "@local/rooms",
61 key: {
62 type: { fields: [{ name: "contact", type: "@keet/member-key" }] },
63 map: "roomsByContactMap",
64 },
65 }),
66 i.indexes.register({
67 name: "rooms-by-wakeup-topic",
68 collection: "@local/rooms",
69 unique: !0,
70 key: ["capabilities.wakeupTopic"],
71 }),
72 i.indexes.register({
73 name: "rooms-by-mailbox",
74 collection: "@local/rooms",
75 unique: !0,
76 key: ["capabilities.mailboxKeyPair.publicKey"],
77 }),
78 i.indexes.register({
79 name: "rooms-by-discovery",
80 collection: "@local/rooms",
81 unique: !0,
82 key: ["capabilities.discoveryKeyPair.publicKey"],
83 }),
84 i.collections.register({
85 name: "room-preferences",
86 schema: "@local/room-preferences",
87 key: ["roomKey"],
88 }),
89 i.collections.register({
90 name: "room-metadata",
91 schema: "@local/room-metadata",
92 key: ["roomKey"],
93 }),
94 i.collections.register({ name: "writers", schema: "@local/writer", key: ["mailbox"] }),
95 i.collections.register({
96 name: "writer-appends",
97 schema: "@local/writer-append",
98 key: ["key", "responsePublicKey"],
99 }),
100 i.indexes.register({
101 name: "writers-by-wakeup-topic",
102 collection: "@local/writers",
103 unique: !0,
104 key: {
105 type: { fields: [{ name: "wakeupTopic", type: "@keet/room-discovery-key" }] },
106 map: "writersByWakeupTopicMap",
107 },
108 }),
109 i.indexes.register({
110 name: "writers-by-room-key",
111 collection: "@local/writers",
112 unique: !0,
113 key: {
114 type: { fields: [{ name: "roomKey", type: "@keet/room-key" }] },
115 map: "writersByRoomKeyMap",
116 },
117 }),
118 i.collections.register({ name: "members", schema: "@local/member", key: ["key"] }),
119 i.collections.register({ name: "devices", schema: "@local/device", key: ["device.key"] }),
120 i.collections.register({
121 name: "contacts",
122 schema: "@keet-private-id/contact",
123 key: ["memberKey"],
124 }),
125 i.indexes.register({
126 name: "blocked-contacts",
127 collection: "@local/contacts",
128 unique: !0,
129 key: {
130 type: { fields: [{ name: "memberKey", type: "@keet/member-key" }] },
131 map: "blockedContactsMap",
132 },
133 }),
134 i.collections.register({
135 name: "tasks",
136 schema: "@local/task",
137 key: ["priority", "timestamp", "type", "discoveryKey"],
138 }),
139 i.indexes.register({
140 name: "tasks-by-type",
141 collection: "@local/tasks",
142 key: ["type", "discoveryKey"],
143 unique: !0,
144 }),
145 i.collections.register({
146 name: "blob-files",
147 schema: "@local/file",
148 versionField: "version",
149 key: ["file.pointer.externalBlob.key", "file.pointer.externalBlob.blob.blockOffset"],
150 }),
151 i.collections.register({
152 name: "drive-files",
153 schema: "@local/file",
154 versionField: "version",
155 key: [
156 "file.pointer.externalDrive.key",
157 "file.pointer.externalDrive.path",
158 "file.pointer.externalDrive.version",
159 ],
160 }),
161 i.indexes.register({
162 name: "blob-files-by-room",
163 collection: "@local/blob-files",
164 unique: !1,
165 key: ["roomKey"],
166 }),
167 i.indexes.register({
168 name: "drive-files-by-room",
169 collection: "@local/drive-files",
170 unique: !1,
171 key: ["roomKey"],
172 }),
173 i.indexes.register({
174 name: "blob-files-by-last-accessed",
175 collection: "@local/blob-files",
176 unique: !1,
177 key: ["lastAccessed"],
178 }),
179 i.indexes.register({
180 name: "drive-files-by-last-accessed",
181 collection: "@local/drive-files",
182 unique: !1,
183 key: ["lastAccessed"],
184 }),
185 i.collections.register({
186 name: "background-sync",
187 schema: "@local/background-sync-room",
188 key: ["discoveryPublicKey"],
189 }),
190 i.indexes.register({
191 name: "background-sync-by-dirty",
192 collection: "@local/background-sync",
193 unique: !1,
194 key: { type: { fields: [{ name: "timestamp", type: "uint" }] }, map: "dirtyByTimestampMap" },
195 }),
196 i.collections.register({ name: "debug", schema: "@local/debug" }),
197 i.collections.register({ name: "unreads", schema: "@local/unread", key: ["roomKey"] }),
198 i.collections.register({ name: "errors", schema: "@local/error-record", key: ["timestamp"] }),
199 i.indexes.register({
200 name: "errors-by-code",
201 collection: "@local/errors",
202 unique: !1,
203 key: ["code"],
204 }),
205 i.collections.register({ name: "file-stats", schema: "@local/file-stats", key: ["roomKey"] }),
206 i.collections.register({ name: "file-gc-info", schema: "@local/file-gc-info" }),
207 i.indexes.register({
208 name: "rooms-by-favorite-and-timestamp",
209 collection: "@local/rooms",
210 unique: !1,
211 key: {
212 type: { fields: [{ name: "timestamp", type: "uint" }] },
213 map: "roomsByFavoriteAndTimestampMap",
214 },
215 }),
216 i.collections.register({ name: "environment", schema: "@local/environment-record", key: [] }))
217}
keet-core-4.14.4-pretty/schema/config/generate.js +11 -0
……@@ -0,0 +1,11 @@
1const o = require("b4a"),
2 n = require("./internal.js"),
3 e = require("./production.js")
4module.exports = function (r, { testing: t }) {
5 const i = n(r),
6 c = e(r)
7 t ||
8 (console.log("internal config:", o.toString(i, "hex")),
9 console.log(),
10 console.log("prod config:", o.toString(c, "hex")))
11}
keet-core-4.14.4-pretty/schema/config/index.js +59 -0
……@@ -0,0 +1,59 @@
1module.exports = function (e) {
2 const r = e.namespace("config")
3 ;(r.register({
4 name: "semver",
5 fields: [
6 { name: "major", type: "uint", required: !0 },
7 { name: "minor", type: "uint", required: !0 },
8 { name: "patch", type: "uint", required: !0 },
9 ],
10 }),
11 r.register({
12 name: "versions",
13 fields: [
14 { name: "minimum", type: "uint", required: !0 },
15 { name: "autoupgrade", type: "uint" },
16 { name: "forceUpdate", type: "uint" },
17 { name: "minVersion", type: "@config/semver" },
18 ],
19 }),
20 r.register({
21 name: "user-registry",
22 fields: [
23 { name: "db", type: "fixed32", required: !0 },
24 { name: "reserved", type: "fixed32", required: !0 },
25 { name: "blobs", type: "fixed32", required: !0 },
26 { name: "rpc", type: "fixed32", array: !0, required: !0 },
27 ],
28 }),
29 r.register({
30 name: "services",
31 fields: [
32 { name: "userRegistries", type: "@config/user-registry", array: !0 },
33 { name: "blindPeers", type: "fixed32", array: !0 },
34 { name: "blindRelays", type: "fixed32", array: !0 },
35 { name: "gatekeepers", type: "fixed32", array: !0 },
36 { name: "discovery", type: "fixed32", array: !0 },
37 { name: "feedback", type: "fixed32" },
38 ],
39 }),
40 r.register({
41 name: "rooms",
42 fields: [
43 { name: "disabled", type: "fixed32", array: !0 },
44 { name: "verified", type: "fixed32", array: !0 },
45 ],
46 }),
47 r.register({ name: "profile", fields: [{ name: "disableUnreadSync", type: "bool" }] }),
48 r.register({ name: "debug", fields: [{ name: "unlockHash", type: "fixed32" }] }),
49 r.register({
50 name: "keet-config",
51 fields: [
52 { name: "versions", type: "@config/versions", required: !0 },
53 { name: "services", type: "@config/services" },
54 { name: "rooms", type: "@config/rooms" },
55 { name: "profile", type: "@config/profile" },
56 { name: "debug", type: "@config/debug" },
57 ],
58 }))
59}
keet-core-4.14.4-pretty/schema/config/internal.js +66 -0
……@@ -0,0 +1,66 @@
1const e = require("hypercore-id-encoding")
2module.exports = function (a) {
3 const d = [
4 {
5 db: e.decode("pyjsuabgzd57rmnd4p95yum74u4wsb4t57nsztcunuuwfw8mbx6y"),
6 reserved: e.decode("dxrpazirghdxpgykkzxirqhakjrozqfptdamcthmmpkowzt78nqy"),
7 blobs: e.decode("5z5k5q4jhxq7qcpcp97cxumzx7hb6j8op58eg1tatszg4aqytqoy"),
8 rpc: [
9 "o3ihjhb8ep1phi81ppr5tze319n5o6r59bot5sx9fdgs4a9yqary",
10 "nioheeafykgbfb1miysfeh79ky31wquksi4y9ffra83848noqg8y",
11 "u3m66zs6kmpetdtun6xxdg8kcq9tiaofc1fdfsjfetk1nqwm15ny",
12 ].map((a) => e.decode(a)),
13 },
14 ],
15 c = [
16 "ep4bxqnksbeikpjc99kibih314f33ox64318gogz7c5ra4pecqqy",
17 "naraymtsa7ob85bchpazs76dqqefscuiqo6cdxwqyku7gbf93ipy",
18 "jer19u85dibjcdabhcrt1gehzrtux4caos5p5aqjfjpw3ayqnkry",
19 "11acfj3mo8x3prq348e8fuuihbhuakbe55xstybk4aktur6dgado",
20 "78xqipa6khjzbwufj38ijom8m89gz7uc9xoo93iw3iioap1cys3o",
21 "133tphu316kggjpq3hoakmg4cmjrbkg14e1xznijqgbdd6ydshiy",
22 "ui47euoy6u5g8aaxd49x5d6goe1gi69uaz39ug9hzy5ps6g67zxy",
23 "a89erh4bmm31ig1tn45cmgruf7smin5j9q11pk93eqdndbcx9wwy",
24 "4c39n36w8ho48qtuqcguu8pwubu6ohxr4wq1jxqj7drhq4j3edho",
25 "qp4qtzgfeom9yuyurc9p5j5y8gmmjefggzrbu5gzxewpjp8o5kqy",
26 "7bzpaaj7oxpd5fraupngyjnq1abrjiada5z57ig38f3n6rbdunry",
27 "czgrdix4yj3t6a3rbbhihr6rpna3c8xe5ebrww8ikragkykoixky",
28 ].map((a) => e.decode(a)),
29 o = [
30 "eszrfraa6fddr5q7sjasow3cxti1d1sx5ifr8ij3hbi7kgf8tr7y",
31 "r5i1j1m6kxhw4qjeek3hbc9751ho8ere8mns18u8hur7g4xxrc3y",
32 "mt8qfwywy3amec6y9bnxhqbgjobnoospup5mmww8c64grwa7943y",
33 "taig1guqbc8ph3i7ei41symfkf8571rreho6syhxzunbfmaqs4eo",
34 "q16atydb6oczes6onr58qr8yzkcqbsakf6a1iapndqtpnxmiwcgy",
35 "dz94965h9arysfpq9m19wggns6sw86sctnbmmiow9in1cm3u78ro",
36 "6rkwz3shauha6qfmjs96qwkfxrd5nupc8t5pd5mfjkufa4ecffwy",
37 ].map((a) => e.decode(a)),
38 r = ["2c64e9baa7529518937c541567cb2a0da371239937ab9cd1a85c372c18b396f2"].map((a) =>
39 e.decode(a),
40 ),
41 i = ["39720256e9d51be850afe8596c2aca8c4ad1e2d539a16c1470652791b7be2d10"].map((a) =>
42 e.decode(a),
43 ),
44 p = e.decode("05f1ec96118a019d1a02bea752745d47b6a8c562aca3cb65d6ba76a1641fc83b"),
45 b = ["h4r95z83do6mfmpfs64ue74phc9hrcbe9dcqwypastq35i8xhp3o"].map((a) => e.decode(a)),
46 s = ["hq1e4ymj8ed54xnm4uisr1qz31dkz19m69yfyo868r3k3koxhc6o"].map((a) => e.decode(a)),
47 m = e.decode("3h14o8dftqwxgecpqrak5y1d6bfjwjfh4tzuymr73kkiic7cns1o")
48 return a.setDevelopment("@config/keet-config", {
49 versions: {
50 minimum: 14,
51 forceUpdate: 1,
52 autoupgrade: 26,
53 minVersion: { major: 4, minor: 12, patch: 3 },
54 },
55 services: {
56 userRegistries: d,
57 blindPeers: c,
58 blindRelays: o,
59 gatekeepers: i,
60 discovery: r,
61 feedback: p,
62 },
63 rooms: { disabled: b, verified: s },
64 debug: { unlockHash: m },
65 })
66}
keet-core-4.14.4-pretty/schema/config/production.js +65 -0
……@@ -0,0 +1,65 @@
1const e = require("hypercore-id-encoding")
2module.exports = function (c) {
3 const o = [
4 {
5 db: e.decode("497ub4optrizbb7p79o6zmhrdisc8bacqcfdtwurzw1j9z99syyo"),
6 reserved: e.decode("eekg7oi737xhj541pn4huxnjjuzp8efe3qf1u95kuwoq5bs5f1jy"),
7 blobs: e.decode("htmeph5re4jcb1ozbz64gt58m9csifp1eq1bz3bf85txkzbhkjjo"),
8 rpc: [
9 "3sjsj8x3xgnqsbq53oy1sguooo7hayne33fr669qj9hnfbkmymjo",
10 "4cxrxktsjcm3hkxuihompmz67s1uadn9tcgss6wpgogsxwgeu8yy",
11 "5c9zwzdpfaesuaqiefj4okt8fze7egio65fhbo4wmsxxuzyw7hjo",
12 ].map((c) => e.decode(c)),
13 },
14 ],
15 a = [
16 "ep4bxqnksbeikpjc99kibih314f33ox64318gogz7c5ra4pecqqy",
17 "naraymtsa7ob85bchpazs76dqqefscuiqo6cdxwqyku7gbf93ipy",
18 "jer19u85dibjcdabhcrt1gehzrtux4caos5p5aqjfjpw3ayqnkry",
19 "11acfj3mo8x3prq348e8fuuihbhuakbe55xstybk4aktur6dgado",
20 "78xqipa6khjzbwufj38ijom8m89gz7uc9xoo93iw3iioap1cys3o",
21 "133tphu316kggjpq3hoakmg4cmjrbkg14e1xznijqgbdd6ydshiy",
22 "ui47euoy6u5g8aaxd49x5d6goe1gi69uaz39ug9hzy5ps6g67zxy",
23 "a89erh4bmm31ig1tn45cmgruf7smin5j9q11pk93eqdndbcx9wwy",
24 "4c39n36w8ho48qtuqcguu8pwubu6ohxr4wq1jxqj7drhq4j3edho",
25 "qp4qtzgfeom9yuyurc9p5j5y8gmmjefggzrbu5gzxewpjp8o5kqy",
26 "7bzpaaj7oxpd5fraupngyjnq1abrjiada5z57ig38f3n6rbdunry",
27 "czgrdix4yj3t6a3rbbhihr6rpna3c8xe5ebrww8ikragkykoixky",
28 ].map((c) => e.decode(c)),
29 d = [
30 "eszrfraa6fddr5q7sjasow3cxti1d1sx5ifr8ij3hbi7kgf8tr7y",
31 "r5i1j1m6kxhw4qjeek3hbc9751ho8ere8mns18u8hur7g4xxrc3y",
32 "mt8qfwywy3amec6y9bnxhqbgjobnoospup5mmww8c64grwa7943y",
33 "taig1guqbc8ph3i7ei41symfkf8571rreho6syhxzunbfmaqs4eo",
34 "q16atydb6oczes6onr58qr8yzkcqbsakf6a1iapndqtpnxmiwcgy",
35 "dz94965h9arysfpq9m19wggns6sw86sctnbmmiow9in1cm3u78ro",
36 "6rkwz3shauha6qfmjs96qwkfxrd5nupc8t5pd5mfjkufa4ecffwy",
37 ].map((c) => e.decode(c)),
38 r = ["2c64e9baa7529518937c541567cb2a0da371239937ab9cd1a85c372c18b396f2"].map((c) =>
39 e.decode(c),
40 ),
41 b = ["39720256e9d51be850afe8596c2aca8c4ad1e2d539a16c1470652791b7be2d10"].map((c) =>
42 e.decode(c),
43 ),
44 i = e.decode("05f1ec96118a019d1a02bea752745d47b6a8c562aca3cb65d6ba76a1641fc83b"),
45 s = ["h4r95z83do6mfmpfs64ue74phc9hrcbe9dcqwypastq35i8xhp3o"].map((c) => e.decode(c)),
46 u = e.decode("3h14o8dftqwxgecpqrak5y1d6bfjwjfh4tzuymr73kkiic7cns1o")
47 return c.setProduction("@config/keet-config", {
48 versions: {
49 minimum: 14,
50 forceUpdate: 1,
51 autoupgrade: 23,
52 minVersion: { major: 4, minor: 12, patch: 3 },
53 },
54 services: {
55 userRegistries: o,
56 blindPeers: a,
57 blindRelays: d,
58 gatekeepers: b,
59 discovery: r,
60 feedback: i,
61 },
62 rooms: { disabled: s },
63 debug: { unlockHash: u },
64 })
65}
keet-core-4.14.4-pretty/schema/contract/index.js +1378 -0
……@@ -0,0 +1,1378 @@
1module.exports = function (e) {
2 const t = e.namespace("keet")
3 ;(t.register({ name: "public-key", alias: "fixed32" }),
4 t.register({ name: "secret-key", alias: "buffer" }),
5 t.register({ name: "room-key", alias: "fixed32" }),
6 t.register({ name: "encryption-key", alias: "buffer" }),
7 t.register({ name: "room-discovery-key", alias: "fixed32" }),
8 t.register({ name: "core-key", alias: "fixed32" }),
9 t.register({ name: "device-key", alias: "fixed32" }),
10 t.register({ name: "invitation-id", alias: "fixed32" }),
11 t.register({ name: "member-key", alias: "fixed32" }),
12 t.register({ name: "swarm-key", alias: "fixed32" }),
13 t.register({ name: "core-seq", alias: "uint" }),
14 t.register({
15 name: "head",
16 compact: !0,
17 fields: [
18 { name: "key", type: "@keet/device-key", required: !0 },
19 { name: "length", type: "uint", required: !0 },
20 ],
21 }),
22 t.register({
23 name: "oplog-id",
24 compact: !0,
25 fields: [
26 { name: "key", type: "@keet/device-key", required: !0 },
27 { name: "seq", type: "@keet/core-seq", required: !0 },
28 ],
29 }),
30 t.register({
31 name: "encryption-keypair",
32 compact: !0,
33 fields: [
34 { name: "publicKey", type: "fixed32", required: !0 },
35 { name: "secretKey", type: "fixed32", required: !0 },
36 ],
37 }),
38 t.register({
39 name: "signing-keypair",
40 compact: !0,
41 fields: [
42 { name: "publicKey", type: "fixed32", required: !0 },
43 { name: "secretKey", type: "fixed64", required: !0 },
44 ],
45 }),
46 t.register({
47 name: "room-keys",
48 fields: [
49 { name: "key", type: "@keet/room-key", required: !0 },
50 { name: "encryptionKey", type: "@keet/encryption-key" },
51 { name: "fastForwardTo", type: "fixed32" },
52 ],
53 }))
54 const i = { name: "header", type: "@keet/operation-header", required: !0 }
55 ;(t.register({
56 name: "operation-header",
57 fields: [{ name: "timestamp", type: "uint", required: !0 }],
58 }),
59 t.register({
60 name: "blob-pointer",
61 compact: !0,
62 fields: [
63 { name: "blockOffset", type: "uint", required: !0 },
64 { name: "blockLength", type: "uint", required: !0 },
65 { name: "byteOffset", type: "uint", required: !0 },
66 { name: "byteLength", type: "uint", required: !0 },
67 ],
68 }),
69 t.register({
70 name: "file-dimensions",
71 fields: [
72 { name: "width", type: "uint", required: !0 },
73 { name: "height", type: "uint", required: !0 },
74 ],
75 }),
76 t.register({
77 name: "file-metadata",
78 fields: [
79 { name: "name", type: "string" },
80 { name: "mimetype", type: "string" },
81 { name: "dimensions", type: "@keet/file-dimensions" },
82 { name: "userdata", type: "buffer" },
83 { name: "duration", type: "uint" },
84 { name: "isPreview", type: "bool" },
85 ],
86 }),
87 t.register({
88 name: "external-drive-pointer",
89 fields: [
90 { name: "key", type: "@keet/core-key", required: !0 },
91 { name: "path", type: "string", required: !0 },
92 { name: "version", type: "uint", required: !0 },
93 { name: "size", type: "uint", required: !0 },
94 ],
95 }),
96 t.register({
97 name: "external-blob-pointer",
98 fields: [
99 { name: "key", type: "@keet/core-key", required: !0 },
100 { name: "blob", type: "@keet/blob-pointer", required: !0 },
101 ],
102 }),
103 t.register({
104 name: "file-pointer",
105 fields: [
106 { name: "inlined", type: "buffer" },
107 { name: "blob", type: "@keet/blob-pointer" },
108 { name: "externalBlob", type: "@keet/external-blob-pointer" },
109 { name: "externalDrive", type: "@keet/external-drive-pointer" },
110 ],
111 }),
112 t.register({
113 name: "file",
114 fields: [
115 { name: "pointer", type: "@keet/file-pointer", required: !0 },
116 { name: "metadata", type: "@keet/file-metadata" },
117 { name: "preview", type: "@keet/image-file" },
118 { name: "hash", type: "fixed32" },
119 ],
120 }),
121 t.register({
122 name: "image-file",
123 fields: [
124 { name: "small", type: "@keet/file" },
125 { name: "medium", type: "@keet/file" },
126 { name: "large", type: "@keet/file" },
127 ],
128 }),
129 t.register({ name: "file-status", fields: [{ name: "isDeleted", type: "bool" }] }),
130 t.register({
131 name: "file-record",
132 fields: [
133 { name: "id", type: "uint", required: !0 },
134 { name: "oplog", type: "@keet/oplog-id", required: !0 },
135 { name: "status", type: "@keet/file-status", required: !0 },
136 { name: "file", type: "@keet/file", required: !0 },
137 { name: "version", type: "uint" },
138 ],
139 }),
140 t.register({
141 name: "device-status",
142 fields: [
143 { name: "isActive", type: "bool" },
144 { name: "isIndexing", type: "bool" },
145 ],
146 }),
147 t.register({
148 name: "member-status",
149 fields: [
150 { name: "isAdmin", type: "bool" },
151 { name: "isModerator", type: "bool" },
152 { name: "isPending", type: "bool" },
153 { name: "isActive", type: "bool" },
154 { name: "isMuted", type: "bool" },
155 { name: "isBanned", type: "bool" },
156 { name: "isShadowBanned", type: "bool" },
157 { name: "isRemoved", type: "bool" },
158 ],
159 }),
160 t.register({
161 name: "member-moderation-status",
162 fields: [
163 { name: "isMuted", type: "bool" },
164 { name: "isBanned", type: "bool" },
165 { name: "isShadowBanned", type: "bool" },
166 ],
167 }),
168 t.register({ name: "abi", fields: [{ name: "version", type: "uint", required: !0 }] }),
169 t.register({
170 name: "device-stats",
171 fields: [
172 { name: "total", type: "uint", required: !0 },
173 { name: "active", type: "uint", required: !0 },
174 ],
175 }),
176 t.register({
177 name: "member-stats",
178 fields: [
179 { name: "total", type: "uint", required: !0 },
180 { name: "active", type: "uint", required: !0 },
181 { name: "pending", type: "uint", required: !0 },
182 ],
183 }),
184 t.register({
185 name: "chat-stats",
186 fields: [
187 { name: "clock", type: "uint", required: !0 },
188 { name: "pinned", type: "uint", required: !0 },
189 { name: "threads", type: "uint", required: !0 },
190 { name: "timestamp", type: "uint", required: !0 },
191 { name: "flagsClock", type: "uint" },
192 ],
193 }),
194 t.register({ name: "file-stats", fields: [{ name: "clock", type: "uint", required: !0 }] }),
195 t.register({
196 name: "stats",
197 fields: [
198 { name: "devices", type: "@keet/device-stats", required: !0 },
199 { name: "members", type: "@keet/member-stats", required: !0 },
200 { name: "chat", type: "@keet/chat-stats", required: !0 },
201 { name: "files", type: "@keet/file-stats", required: !0 },
202 ],
203 }),
204 t.register({ name: "room-type", enum: ["Default", "Broadcast", "DirectMessage"] }),
205 t.register({
206 name: "system-settings",
207 fields: [
208 { name: "roomType", type: "@keet/room-type" },
209 { name: "isExperimental", type: "bool" },
210 { name: "isJoiningDisabled", type: "bool" },
211 { name: "isAppendingDisabled", type: "bool" },
212 { name: "isCallingDisabled", type: "bool" },
213 { name: "isMembershipEventsDisabled", type: "bool" },
214 { name: "isAttachmentsDisabled", type: "bool" },
215 { name: "isLinksDisabled", type: "bool" },
216 { name: "buildType", type: "@keet/build-type" },
217 ],
218 }),
219 t.register({
220 name: "system-digest",
221 fields: [
222 { name: "abi", type: "@keet/abi", required: !0 },
223 { name: "settings", type: "@keet/system-settings", required: !0 },
224 { name: "creationTime", type: "uint", required: !0 },
225 ],
226 }),
227 t.register({ name: "room-seed", fields: [{ name: "seed", type: "fixed32", required: !0 }] }),
228 t.register({
229 name: "room-capabilities",
230 fields: [
231 { name: "mailboxKeyPair", type: "@keet/encryption-keypair", required: !0 },
232 { name: "discoveryKeyPair", type: "@keet/signing-keypair", required: !0 },
233 { name: "wakeupTopic", type: "@keet/room-discovery-key", required: !0 },
234 { name: "swarmTopic", type: "@keet/room-discovery-key", required: !0 },
235 ],
236 }),
237 t.register({
238 name: "room-supported-language",
239 strings: !0,
240 enum: ["en", "it", "ru", "es", "de"],
241 }),
242 t.register({
243 name: "room-config",
244 fields: [
245 { name: "title", type: "string" },
246 { name: "avatar", type: "@keet/image-file" },
247 { name: "description", type: "string" },
248 { name: "supportedLanguages", array: !0, type: "@keet/room-supported-language" },
249 { name: "blindPeers", type: "fixed32", array: !0 },
250 ],
251 }),
252 t.register({
253 name: "blind-peer",
254 fields: [{ name: "key", type: "@keet/public-key", required: !0 }],
255 }),
256 t.register({
257 name: "add-blind-peer-operation",
258 fields: [i, { name: "peer", type: "@keet/blind-peer", required: !0 }],
259 }),
260 t.register({
261 name: "remove-blind-peer-operation",
262 fields: [i, { name: "key", type: "@keet/public-key", required: !0 }],
263 }),
264 t.register({
265 name: "identity-attestation",
266 compact: !0,
267 fields: [
268 { name: "memberKey", type: "@keet/member-key", required: !0 },
269 { name: "proof", type: "buffer", required: !0 },
270 ],
271 }),
272 t.register({
273 name: "device-invitation",
274 fields: [
275 { name: "id", type: "@keet/invitation-id", required: !0 },
276 { name: "response", type: "buffer", required: !0 },
277 ],
278 }),
279 t.register({
280 name: "device",
281 fields: [
282 { name: "key", type: "@keet/device-key", required: !0 },
283 { name: "memberKey", type: "@keet/member-key", required: !0 },
284 { name: "status", type: "@keet/device-status", required: !0 },
285 { name: "profile", type: "@keet/device-profile", required: !0 },
286 { name: "invitation", type: "@keet/device-invitation" },
287 ],
288 }),
289 t.register({
290 name: "member-profile",
291 fields: [
292 { name: "timestamp", type: "uint", required: !0 },
293 { name: "mailbox", type: "@keet/public-key" },
294 { name: "displayName", type: "string" },
295 { name: "avatar", type: "@keet/image-file" },
296 { name: "username", type: "string" },
297 ],
298 }),
299 t.register({
300 name: "device-profile",
301 fields: [
302 { name: "swarmKey", type: "@keet/swarm-key" },
303 { name: "name", type: "string" },
304 { name: "isMobile", type: "bool" },
305 { name: "buildType", type: "@keet/build-type" },
306 ],
307 }),
308 t.register({
309 name: "member-update",
310 fields: [
311 { name: "profile", type: "@keet/member-profile", required: !0 },
312 { name: "attestation", type: "@keet/identity-attestation", required: !0 },
313 ],
314 }),
315 t.register({
316 name: "device-update",
317 fields: [
318 { name: "profile", type: "@keet/device-profile", required: !0 },
319 { name: "attestation", type: "@keet/identity-attestation", required: !0 },
320 ],
321 }),
322 t.register({
323 name: "member-contact-info",
324 fields: [
325 { name: "profile", type: "@keet/member-profile", required: !0 },
326 { name: "attestation", type: "@keet/identity-attestation", required: !0 },
327 ],
328 }),
329 t.register({ name: "build-type", strings: !0, enum: ["Nightly", "Internal", "Production"] }),
330 t.register({
331 name: "signed-pairing-data",
332 fields: [
333 { name: "id", type: "@keet/invitation-id", required: !0 },
334 { name: "data", type: "buffer", required: !0 },
335 { name: "signature", type: "buffer", required: !0 },
336 ],
337 }),
338 t.register({
339 name: "device-request-identity",
340 fields: [{ name: "devicePublicKey", type: "@keet/public-key", required: !0 }],
341 }),
342 t.register({
343 name: "device-response-identity",
344 fields: [
345 { name: "privateProfileIdentity", type: "@keet/identity-attestation", required: !0 },
346 { name: "deviceProof", type: "buffer", required: !0 },
347 ],
348 }),
349 t.register({
350 name: "device-identity",
351 fields: [
352 { name: "deviceKey", type: "@keet/device-key", required: !0 },
353 { name: "privateProfileIdentity", type: "@keet/identity-attestation", required: !0 },
354 { name: "deviceProof", type: "buffer", required: !0 },
355 ],
356 }),
357 t.register({
358 name: "device-request-with-invitation",
359 fields: [
360 { name: "deviceKey", type: "@keet/device-key", required: !0 },
361 { name: "keyPair", type: "@keet/signing-keypair", required: !0 },
362 { name: "device", type: "@keet/device-update", required: !0 },
363 { name: "member", type: "@keet/member-update", required: !0 },
364 { name: "identity", type: "@keet/device-request-identity" },
365 ],
366 }),
367 t.register({
368 name: "device-request-with-invitation-and-proof",
369 fields: [
370 { name: "id", type: "@keet/invitation-id", required: !0 },
371 { name: "request", type: "@keet/device-request-with-invitation", required: !0 },
372 { name: "signature", type: "buffer", required: !0 },
373 ],
374 }),
375 t.register({
376 name: "device-request-with-member-proof",
377 fields: [
378 { name: "device", type: "@keet/device-update", required: !0 },
379 { name: "member", type: "@keet/member-update" },
380 ],
381 }),
382 t.register({
383 name: "device-request",
384 fields: [
385 { name: "withInvitation", type: "@keet/device-request-with-invitation-and-proof" },
386 { name: "withMemberProof", type: "@keet/device-request-with-member-proof" },
387 ],
388 }),
389 t.register({
390 name: "device-response",
391 fields: [
392 { name: "signedKeys", type: "@keet/signed-pairing-data", required: !0 },
393 { name: "identity", type: "@keet/device-response-identity" },
394 ],
395 }),
396 t.register({
397 name: "invitation-metadata",
398 fields: [
399 { name: "expiration", type: "uint" },
400 { name: "requiresConfirmation", type: "bool" },
401 { name: "canModerate", type: "bool" },
402 { name: "canAdmin", type: "bool" },
403 { name: "buildType", type: "@keet/build-type" },
404 ],
405 }),
406 t.register({
407 name: "invitation",
408 fields: [
409 { name: "id", type: "@keet/invitation-id", required: !0 },
410 { name: "response", type: "@keet/signed-pairing-data", required: !0 },
411 { name: "metadata", type: "@keet/invitation-metadata", required: !0 },
412 { name: "anchor", type: "@keet/head" },
413 { name: "isActive", type: "bool" },
414 ],
415 }),
416 t.register({
417 name: "add-invitation-operation",
418 fields: [i, { name: "invitation", type: "@keet/invitation", required: !0 }],
419 }),
420 t.register({
421 name: "remove-invitation-operation",
422 fields: [i, { name: "id", type: "fixed32", required: !0 }],
423 }),
424 t.register({
425 name: "sendable-room-invitation",
426 fields: [
427 { name: "mailbox", type: "fixed32", required: !0 },
428 { name: "invitationSeed", type: "fixed32", required: !0 },
429 { name: "anchor", type: "@keet/head", required: !0 },
430 ],
431 }),
432 t.register({
433 name: "readonly-room-invitation",
434 fields: [
435 { name: "roomKey", type: "fixed32", required: !0 },
436 { name: "encryptionKey", type: "fixed32", required: !0 },
437 { name: "seed", type: "fixed32", required: !0 },
438 { name: "fastForwardTo", type: "fixed32" },
439 ],
440 }),
441 t.register({
442 name: "sendable-identity-invitation",
443 fields: [
444 { name: "mailbox", type: "fixed32", required: !0 },
445 { name: "invitationSeed", type: "fixed32", required: !0 },
446 { name: "anchor", type: "@keet/head", required: !0 },
447 { name: "identityPublicKey", type: "@keet/member-key", required: !0 },
448 ],
449 }),
450 t.register({
451 name: "sendable-contact-invitation",
452 fields: [{ name: "mailbox", type: "fixed32", required: !0 }],
453 }),
454 t.register({
455 name: "sendable-invitation",
456 fields: [
457 { name: "room", type: "@keet/sendable-room-invitation" },
458 { name: "identity", type: "@keet/sendable-identity-invitation" },
459 { name: "contact", type: "@keet/sendable-contact-invitation" },
460 { name: "readonly", type: "@keet/readonly-room-invitation" },
461 { name: "additionalNodes", array: !0, type: "ipv4Address" },
462 { name: "buildType", type: "@keet/build-type" },
463 ],
464 }),
465 t.register({
466 name: "add-device-operation",
467 fields: [i, { name: "blindRequest", type: "buffer", required: !0 }],
468 }),
469 t.register({
470 name: "update-device-operation",
471 fields: [i, { name: "profile", type: "@keet/device-profile" }],
472 }),
473 t.register({
474 name: "remove-device-operation",
475 fields: [i, { name: "key", type: "@keet/device-key", required: !0 }],
476 }),
477 t.register({ name: "start-indexing-operation", fields: [] }),
478 t.register({ name: "stop-indexing-operation", fields: [] }),
479 t.register({
480 name: "join-request",
481 fields: [
482 { name: "deviceKey", type: "@keet/device-key", required: !0 },
483 { name: "id", type: "@keet/invitation-id", required: !0 },
484 { name: "request", type: "@keet/device-request-with-invitation", required: !0 },
485 ],
486 }),
487 t.register({
488 name: "accept-join-request-operation",
489 fields: [
490 i,
491 { name: "deviceKey", type: "@keet/device-key", required: !0 },
492 { name: "identity", type: "@keet/device-response-identity" },
493 ],
494 }),
495 t.register({
496 name: "reject-join-request-operation",
497 fields: [i, { name: "deviceKey", type: "@keet/device-key", required: !0 }],
498 }))
499 const r = [
500 { name: "key", type: "@keet/member-key", required: !0 },
501 { name: "status", type: "@keet/member-status", required: !0 },
502 { name: "profile", type: "@keet/member-profile", required: !0 },
503 ]
504 ;(t.register({ name: "member", fields: r }),
505 t.register({
506 name: "full-member",
507 fields: [...r, { name: "proofs", type: "@keet/member-proofs" }],
508 }),
509 t.register({
510 name: "member-proofs",
511 fields: [
512 { name: "key", type: "@keet/member-key", required: !0 },
513 { name: "profileAttestation", type: "buffer" },
514 { name: "latestReceipt", type: "buffer" },
515 ],
516 }),
517 t.register({
518 name: "update-member-operation",
519 fields: [i, { name: "member", type: "@keet/member-update", required: !0 }],
520 }),
521 t.register({
522 name: "change-member-status-operation",
523 fields: [
524 i,
525 { name: "memberKey", type: "@keet/member-key", required: !0 },
526 { name: "key", type: "uint", required: !0 },
527 { name: "status", type: "@keet/member-moderation-status", required: !0 },
528 ],
529 }),
530 t.register({
531 name: "change-member-role-operation",
532 fields: [
533 i,
534 { name: "key", type: "@keet/member-key", required: !0 },
535 { name: "isModerator", type: "bool" },
536 { name: "isAdmin", type: "bool" },
537 ],
538 }),
539 t.register({
540 name: "remove-member-operation",
541 fields: [i, { name: "key", type: "@keet/member-key", required: !0 }],
542 }),
543 t.register({
544 name: "member-activity",
545 fields: [
546 { name: "key", type: "@keet/member-key", required: !0 },
547 { name: "mentions", type: "uint", required: !0 },
548 ],
549 }),
550 t.register({
551 name: "member-joined-event",
552 fields: [{ name: "memberKey", type: "@keet/member-key" }],
553 }),
554 t.register({
555 name: "member-left-event",
556 fields: [{ name: "memberKey", type: "@keet/member-key" }],
557 }),
558 t.register({
559 name: "member-removed-event",
560 fields: [{ name: "memberKey", type: "@keet/member-key" }],
561 }),
562 t.register({
563 name: "title-changed-chat-event",
564 fields: [
565 { name: "from", type: "string" },
566 { name: "to", type: "string" },
567 ],
568 }),
569 t.register({
570 name: "location-shared-event",
571 fields: [
572 { name: "latitude", type: "float64", required: !0 },
573 { name: "longitude", type: "float64", required: !0 },
574 ],
575 }),
576 t.register({
577 name: "chat-event",
578 fields: [
579 { name: "memberJoined", type: "@keet/member-joined-event" },
580 { name: "memberLeft", type: "@keet/member-left-event" },
581 { name: "titleChanged", type: "@keet/title-changed-chat-event" },
582 { name: "callStarted", type: "bool" },
583 { name: "callHangup", type: "bool" },
584 { name: "callMissed", type: "bool" },
585 { name: "roomAvatarChanged", type: "bool" },
586 { name: "invitationCreated", type: "bool" },
587 { name: "memberRemoved", type: "@keet/member-removed-event" },
588 { name: "locationShared", type: "@keet/location-shared-event" },
589 ],
590 }),
591 t.register({
592 name: "sendable-event",
593 fields: [
594 { name: "callStarted", type: "bool" },
595 { name: "callHangup", type: "bool" },
596 { name: "callMissed", type: "bool" },
597 { name: "locationShared", type: "@keet/location-shared-event" },
598 ],
599 }),
600 t.register({
601 name: "display-range",
602 fields: [
603 { name: "start", type: "uint", required: !0 },
604 { name: "length", type: "uint", required: !0 },
605 ],
606 }),
607 t.register({
608 name: "display-content-range",
609 fields: [
610 { name: "range", type: "@keet/display-range", required: !0 },
611 { name: "content", type: "string", required: !0 },
612 ],
613 }),
614 t.register({
615 name: "mention-display-item",
616 fields: [
617 { name: "range", type: "@keet/display-range", required: !0 },
618 { name: "memberKey", type: "@keet/member-key", required: !0 },
619 ],
620 }),
621 t.register({
622 name: "translation-display-item",
623 fields: [
624 { name: "range", type: "@keet/display-range", required: !0 },
625 { name: "language", type: "@keet/room-supported-language", required: !0 },
626 { name: "text", type: "string", required: !0 },
627 ],
628 }),
629 t.register({
630 name: "link-preview",
631 fields: [
632 { name: "title", type: "string" },
633 { name: "description", type: "string" },
634 { name: "file", type: "@keet/file" },
635 { name: "files", type: "uint", array: !0 },
636 ],
637 }),
638 t.register({
639 name: "display-link-item",
640 fields: [
641 { name: "range", type: "@keet/display-range", required: !0 },
642 { name: "url", type: "string", required: !0 },
643 { name: "preview", type: "@keet/link-preview" },
644 ],
645 }),
646 t.register({
647 name: "display",
648 fields: [
649 { name: "mention", type: "@keet/mention-display-item", array: !0 },
650 { name: "httpLink", type: "@keet/display-link-item", array: !0 },
651 { name: "pearLink", type: "@keet/display-link-item", array: !0 },
652 { name: "bold", type: "@keet/display-range", array: !0 },
653 { name: "italic", type: "@keet/display-range", array: !0 },
654 { name: "code", type: "@keet/display-range", array: !0 },
655 { name: "emoji", type: "@keet/display-content-range", array: !0 },
656 { name: "codeBlock", type: "@keet/display-range", array: !0 },
657 { name: "strike", type: "@keet/display-range", array: !0 },
658 { name: "translation", type: "@keet/translation-display-item", array: !0 },
659 ],
660 }),
661 t.register({
662 name: "oplog-message",
663 fields: [
664 { name: "text", type: "string" },
665 { name: "files", type: "@keet/file", array: !0 },
666 { name: "display", type: "@keet/display" },
667 { name: "replyTo", type: "@keet/oplog-id" },
668 { name: "parent", type: "@keet/oplog-id" },
669 { name: "event", type: "@keet/sendable-event" },
670 { name: "forwarded", type: "bool" },
671 ],
672 }),
673 t.register({
674 name: "index-message",
675 fields: [
676 { name: "text", type: "string" },
677 { name: "files", type: "uint", array: !0 },
678 { name: "display", type: "@keet/display" },
679 { name: "replyTo", type: "@keet/oplog-id" },
680 { name: "parent", type: "@keet/oplog-id" },
681 { name: "forwarded", type: "bool" },
682 ],
683 }),
684 t.register({
685 name: "full-index-message",
686 fields: [
687 { name: "text", type: "string" },
688 { name: "files", type: "@keet/file", array: !0 },
689 { name: "display", type: "@keet/display" },
690 { name: "replyTo", type: "@keet/oplog-id" },
691 { name: "parent", type: "@keet/oplog-id" },
692 { name: "forwarded", type: "bool" },
693 ],
694 }),
695 t.register({
696 name: "message-status",
697 fields: [
698 { name: "isEdited", type: "bool" },
699 { name: "isDeleted", type: "bool" },
700 { name: "isPinned", type: "bool" },
701 ],
702 }),
703 t.register({
704 name: "message-index-id",
705 compact: !0,
706 fields: [
707 { name: "thread", type: "uint", required: !0 },
708 { name: "index", type: "uint", required: !0 },
709 ],
710 }),
711 t.register({
712 name: "thread",
713 fields: [
714 { name: "id", type: "uint", required: !0 },
715 { name: "count", type: "uint", required: !0 },
716 { name: "parent", type: "@keet/oplog-id" },
717 { name: "stats", type: "@keet/stats" },
718 ],
719 }),
720 t.register({
721 name: "chat-message-record",
722 fields: [
723 { name: "id", type: "@keet/message-index-id", required: !0 },
724 { name: "oplog", type: "@keet/oplog-id", required: !0 },
725 { name: "clock", type: "uint", required: !0 },
726 { name: "timestamp", type: "uint", required: !0 },
727 { name: "editedAt", type: "uint" },
728 { name: "status", type: "@keet/message-status", required: !0 },
729 { name: "message", type: "@keet/index-message" },
730 { name: "event", type: "@keet/chat-event" },
731 ],
732 }),
733 t.register({
734 name: "full-chat-message-record",
735 fields: [
736 { name: "id", type: "@keet/message-index-id", required: !0 },
737 { name: "oplog", type: "@keet/oplog-id", required: !0 },
738 { name: "clock", type: "uint", required: !0 },
739 { name: "timestamp", type: "uint", required: !0 },
740 { name: "editedAt", type: "uint" },
741 { name: "status", type: "@keet/message-status", required: !0 },
742 { name: "message", type: "@keet/full-index-message" },
743 { name: "event", type: "@keet/chat-event" },
744 ],
745 }),
746 t.register({
747 name: "add-chat-message-operation",
748 fields: [i, { name: "message", type: "@keet/oplog-message", required: !0 }],
749 }),
750 t.register({
751 name: "remove-chat-message-operation",
752 fields: [i, { name: "oplog", type: "@keet/oplog-id", required: !0 }],
753 }),
754 t.register({
755 name: "update-chat-message-operation",
756 fields: [
757 i,
758 { name: "oplog", type: "@keet/oplog-id", required: !0 },
759 { name: "message", type: "@keet/oplog-message", required: !0 },
760 ],
761 }),
762 t.register({
763 name: "pin-chat-message-operation",
764 fields: [
765 i,
766 { name: "oplog", type: "@keet/oplog-id", required: !0 },
767 { name: "isPinned", type: "bool" },
768 ],
769 }),
770 t.register({ name: "display-type", enum: ["HttpLink", "PearLink"] }),
771 t.register({
772 name: "add-file-preview-operation",
773 fields: [
774 i,
775 { name: "oplog", type: "@keet/oplog-id", required: !0 },
776 { name: "index", type: "uint", required: !0 },
777 { name: "preview", type: "@keet/image-file", required: !0 },
778 { name: "displayType", type: "@keet/display-type" },
779 ],
780 }),
781 t.register({
782 name: "reaction",
783 fields: [
784 { name: "id", type: "@keet/message-index-id", required: !0 },
785 { name: "sender", type: "@keet/member-key", required: !0 },
786 { name: "clock", type: "uint", required: !0 },
787 { name: "reaction", type: "string", required: !0 },
788 ],
789 }),
790 t.register({
791 name: "reactions-summary",
792 fields: [
793 { name: "text", type: "string", required: !0 },
794 { name: "count", type: "uint", required: !0 },
795 ],
796 }),
797 t.register({
798 name: "reactions-digest",
799 fields: [
800 { name: "id", type: "@keet/message-index-id", required: !0 },
801 { name: "total", type: "uint", required: !0 },
802 { name: "reactions", type: "@keet/reactions-summary", required: !0, array: !0 },
803 { name: "editedAt", type: "uint" },
804 ],
805 }),
806 t.register({
807 name: "add-reaction-operation",
808 fields: [
809 i,
810 { name: "oplog", type: "@keet/oplog-id", required: !0 },
811 { name: "reaction", type: "string", required: !0 },
812 ],
813 }),
814 t.register({
815 name: "remove-reaction-operation",
816 fields: [
817 i,
818 { name: "oplog", type: "@keet/oplog-id", required: !0 },
819 { name: "reaction", type: "string", required: !0 },
820 ],
821 }),
822 t.register({
823 name: "update-room-config-operation",
824 fields: [
825 i,
826 { name: "key", type: "uint", required: !0 },
827 { name: "config", type: "@keet/room-config", required: !0 },
828 ],
829 }),
830 t.register({
831 name: "group-member",
832 fields: [
833 { name: "memberKey", type: "@keet/member-key", required: !0 },
834 { name: "displayName", type: "string", required: !0 },
835 { name: "avatar", type: "@keet/image-file" },
836 ],
837 }),
838 t.register({
839 name: "user-registry-info",
840 fields: [
841 { name: "key", type: "@keet/core-key", required: !0 },
842 { name: "username", type: "string" },
843 ],
844 }),
845 t.register({
846 name: "room-identity",
847 fields: [
848 { name: "publicKey", type: "@keet/member-key", required: !0 },
849 { name: "discoveryCoreKey", type: "@keet/core-key" },
850 { name: "userRegistry", type: "@keet/user-registry-info" },
851 ],
852 }),
853 t.register({
854 name: "genesis-operation",
855 fields: [
856 i,
857 { name: "digest", type: "@keet/system-digest", required: !0 },
858 { name: "capabilities", type: "@keet/room-seed", required: !0 },
859 { name: "config", type: "@keet/room-config" },
860 { name: "identity", type: "@keet/room-identity" },
861 { name: "bootstrapDevice", type: "@keet/device-update" },
862 { name: "initialMembers", type: "@keet/member-update", array: !0 },
863 ],
864 }),
865 t.register({
866 name: "upgrade-operation",
867 fields: [i, { name: "version", type: "uint", required: !0 }],
868 }),
869 t.register({
870 name: "migrate-abi-operation",
871 fields: [
872 i,
873 { name: "from", type: "uint", required: !0 },
874 { name: "to", type: "uint", required: !0 },
875 { name: "buildType", type: "@keet/build-type" },
876 ],
877 }),
878 t.register({
879 name: "system-settings-keys",
880 enum: [
881 "RoomType",
882 "IsExperimental",
883 "IsJoiningDisabled",
884 "IsAppendingDisabled",
885 "IsCallingDisabled",
886 "IsMembershipEventsDisabled",
887 "IsAttachmentsDisabled",
888 "IsLinksDisabled",
889 ],
890 }),
891 t.register({
892 name: "update-system-settings-operation",
893 fields: [
894 i,
895 { name: "key", type: "uint", required: !0 },
896 { name: "settings", type: "@keet/system-settings", required: !0 },
897 ],
898 }),
899 t.register({
900 name: "test-increment-operation",
901 fields: [i, { name: "value", type: "uint", required: !0 }],
902 }),
903 t.register({
904 name: "test-collection-record-1",
905 fields: [
906 { name: "key", type: "uint", required: !0 },
907 { name: "value", type: "uint", required: !0 },
908 ],
909 }),
910 t.register({ name: "label-type", enum: ["Flag"] }),
911 t.register({
912 name: "chat-label",
913 fields: [
914 { name: "id", type: "@keet/message-index-id", required: !0 },
915 { name: "sender", type: "@keet/member-key", required: !0 },
916 { name: "clock", type: "uint", required: !0 },
917 { name: "label", type: "@keet/label-type", required: !0 },
918 ],
919 }),
920 t.register({
921 name: "add-chat-label-operation",
922 fields: [
923 i,
924 { name: "oplog", type: "@keet/oplog-id", required: !0 },
925 { name: "label", type: "@keet/label-type", required: !0 },
926 ],
927 }),
928 t.register({
929 name: "remove-chat-label-operation",
930 fields: [
931 i,
932 { name: "oplog", type: "@keet/oplog-id", required: !0 },
933 { name: "label", type: "@keet/label-type", required: !0 },
934 ],
935 }),
936 t.register({
937 name: "chat-label-summary",
938 fields: [
939 { name: "label", type: "@keet/label-type", required: !0 },
940 { name: "count", type: "uint", required: !0 },
941 ],
942 }),
943 t.register({
944 name: "chat-label-digest",
945 fields: [
946 { name: "id", type: "@keet/message-index-id", required: !0 },
947 { name: "total", type: "uint", required: !0 },
948 { name: "labels", type: "@keet/chat-label-summary", required: !0, array: !0 },
949 { name: "editedAt", type: "uint", required: !0 },
950 { name: "flagsClock", type: "uint" },
951 { name: "version", type: "uint" },
952 { name: "isDeleted", type: "bool" },
953 ],
954 }),
955 t.register({ name: "member-label-type", enum: ["Flag"] }),
956 t.register({
957 name: "member-label",
958 fields: [
959 { name: "key", type: "@keet/member-key", required: !0 },
960 { name: "sender", type: "@keet/member-key", required: !0 },
961 { name: "clock", type: "uint", required: !0 },
962 { name: "label", type: "@keet/member-label-type", required: !0 },
963 ],
964 }),
965 t.register({
966 name: "add-member-label-operation",
967 fields: [
968 i,
969 { name: "key", type: "@keet/member-key", required: !0 },
970 { name: "label", type: "@keet/member-label-type", required: !0 },
971 ],
972 }),
973 t.register({
974 name: "member-label-summary",
975 fields: [
976 { name: "label", type: "@keet/member-label-type", required: !0 },
977 { name: "count", type: "uint", required: !0 },
978 ],
979 }),
980 t.register({
981 name: "member-label-digest",
982 fields: [
983 { name: "key", type: "@keet/member-key", required: !0 },
984 { name: "total", type: "uint", required: !0 },
985 { name: "labels", type: "@keet/member-label-summary", required: !0, array: !0 },
986 { name: "editedAt", type: "uint", required: !0 },
987 { name: "flagsClock", type: "uint", required: !0 },
988 ],
989 }),
990 t.register({
991 name: "update-read-length-operation",
992 fields: [i, { name: "length", type: "uint", required: !0 }],
993 }),
994 t.register({
995 name: "read-length",
996 fields: [
997 { name: "memberKey", type: "@keet/member-key", required: !0 },
998 { name: "length", type: "uint", required: !0 },
999 ],
1000 }),
1001 t.register({
1002 name: "move-indexer-operation",
1003 fields: [
1004 i,
1005 { name: "deviceKey", type: "@keet/device-key", required: !0 },
1006 { name: "fromDeviceKey", type: "@keet/device-key", required: !0 },
1007 ],
1008 }),
1009 t.register({
1010 name: "tmp-removed-member",
1011 fields: [{ name: "key", type: "@keet/member-key", required: !0 }],
1012 }),
1013 t.register({
1014 name: "start-call",
1015 fields: [
1016 i,
1017 { name: "callKey", type: "fixed32", required: !0 },
1018 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
1019 { name: "streams", type: "@keet/core-key", array: !0 },
1020 { name: "discoveryKey", type: "@keet/room-discovery-key" },
1021 { name: "version", type: "uint" },
1022 ],
1023 }),
1024 t.register({
1025 name: "join-call",
1026 fields: [
1027 i,
1028 { name: "callKey", type: "fixed32", required: !0 },
1029 { name: "streams", type: "@keet/core-key", array: !0 },
1030 ],
1031 }),
1032 t.register({
1033 name: "leave-call",
1034 fields: [i, { name: "callKey", type: "fixed32", required: !0 }],
1035 }),
1036 t.register({
1037 name: "end-call",
1038 fields: [i, { name: "callKey", type: "fixed32", required: !0 }],
1039 }),
1040 t.register({
1041 name: "add-call-stream",
1042 fields: [
1043 i,
1044 { name: "callKey", type: "fixed32", required: !0 },
1045 { name: "streamKey", type: "@keet/core-key", required: !0 },
1046 ],
1047 }),
1048 t.register({
1049 name: "remove-call-stream",
1050 fields: [
1051 i,
1052 { name: "callKey", type: "fixed32", required: !0 },
1053 { name: "streamKey", type: "@keet/core-key", required: !0 },
1054 ],
1055 }),
1056 t.register({
1057 name: "call-record",
1058 fields: [
1059 { name: "callKey", type: "fixed32", required: !0 },
1060 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
1061 { name: "createdAt", type: "uint", required: !0 },
1062 { name: "endedAt", type: "uint" },
1063 { name: "discoveryKey", type: "@keet/room-discovery-key" },
1064 { name: "version", type: "uint" },
1065 ],
1066 }),
1067 t.register({
1068 name: "call-member-record",
1069 fields: [
1070 { name: "callKey", type: "fixed32", required: !0 },
1071 { name: "memberKey", type: "@keet/member-key", required: !0 },
1072 { name: "createdAt", type: "uint", required: !0 },
1073 ],
1074 }),
1075 t.register({
1076 name: "call-device-record",
1077 fields: [
1078 { name: "callKey", type: "fixed32", required: !0 },
1079 { name: "deviceKey", type: "@keet/device-key", required: !0 },
1080 { name: "memberKey", type: "@keet/member-key", required: !0 },
1081 { name: "createdAt", type: "uint", required: !0 },
1082 { name: "swarmKey", type: "@keet/swarm-key" },
1083 ],
1084 }),
1085 t.register({
1086 name: "call-stream-record",
1087 fields: [
1088 { name: "callKey", type: "fixed32", required: !0 },
1089 { name: "deviceKey", type: "@keet/device-key", required: !0 },
1090 { name: "streamKey", type: "buffer", required: !0 },
1091 { name: "createdAt", type: "uint", required: !0 },
1092 ],
1093 }),
1094 t.register({ name: "test-crash-operation", fields: [i] }),
1095 t.register({ name: "test-dispatch-error-operation", fields: [i] }))
1096 const a = e.namespace("keet-private-id")
1097 ;(a.register({
1098 name: "contact",
1099 fields: [
1100 { name: "memberKey", type: "@keet/member-key", required: !0 },
1101 { name: "status", type: "@keet-private-id/contact-status", required: !0 },
1102 { name: "mailbox", type: "@keet/public-key" },
1103 { name: "roomKey", type: "@keet/room-key" },
1104 ],
1105 }),
1106 a.register({
1107 name: "v3-room-migration-info",
1108 fields: [
1109 { name: "roomKey", type: "@keet/room-key", required: !0 },
1110 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
1111 { name: "seed", type: "fixed32", required: !0 },
1112 { name: "initiator", type: "@keet/head", required: !0 },
1113 { name: "fastForwardTo", type: "fixed32", required: !0 },
1114 ],
1115 }),
1116 a.register({
1117 name: "run-v3-migration-operation",
1118 fields: [
1119 {
1120 name: "sharedRooms",
1121 type: "@keet-private-id/v3-room-migration-info",
1122 array: !0,
1123 required: !0,
1124 },
1125 { name: "blockedContacts", type: "@keet/member-key", array: !0, required: !0 },
1126 ],
1127 }),
1128 a.register({
1129 name: "update-identity-operation",
1130 fields: [{ name: "identity", type: "@keet/room-identity", required: !0 }],
1131 }),
1132 a.register({
1133 name: "counters",
1134 fields: [
1135 { name: "rooms", type: "uint", required: !0 },
1136 { name: "contacts", type: "uint", required: !0 },
1137 ],
1138 }),
1139 a.register({
1140 name: "stats",
1141 fields: [
1142 { name: "rooms", type: "uint", required: !0 },
1143 { name: "contactRequests", type: "uint", required: !0 },
1144 ],
1145 }),
1146 a.register({
1147 name: "add-entropy-operation",
1148 fields: [{ name: "entropy", type: "buffer", required: !0 }],
1149 }),
1150 a.register({
1151 name: "pending-invitation-identity",
1152 fields: [
1153 { name: "publicKey", type: "@keet/member-key", required: !0 },
1154 { name: "devicePublicKey", type: "@keet/public-key", required: !0 },
1155 { name: "writerKey", type: "@keet/device-key", required: !0 },
1156 ],
1157 }),
1158 a.register({
1159 name: "pending-invitation",
1160 fields: [
1161 { name: "id", type: "fixed32", required: !0 },
1162 { name: "invitationSeed", type: "fixed32", required: !0 },
1163 { name: "mailbox", type: "fixed32", required: !0 },
1164 { name: "responseKeyPair", type: "@keet/signing-keypair", required: !0 },
1165 { name: "initiator", type: "@keet/head", required: !0 },
1166 { name: "inviter", type: "@keet/head", required: !0 },
1167 { name: "identity", type: "@keet-private-id/pending-invitation-identity" },
1168 { name: "buildType", type: "@keet/build-type" },
1169 ],
1170 }),
1171 a.register({
1172 name: "resolve-pending-invitation-operation",
1173 fields: [i, { name: "blindResponse", type: "buffer", required: !0 }],
1174 }),
1175 a.register({
1176 name: "add-pending-invitation-operation",
1177 fields: [
1178 i,
1179 { name: "invitation", type: "@keet-private-id/pending-invitation", required: !0 },
1180 ],
1181 }),
1182 a.register({
1183 name: "remove-pending-invitation-operation",
1184 fields: [i, { name: "id", type: "fixed32", required: !0 }],
1185 }),
1186 a.register({
1187 name: "identity-swap",
1188 fields: [
1189 { name: "publicKey", type: "@keet/member-key", required: !0 },
1190 { name: "devicePublicKey", type: "@keet/public-key", required: !0 },
1191 { name: "privateProfileKey", type: "@keet/room-key" },
1192 { name: "deviceKeyPair", type: "@keet/signing-keypair" },
1193 { name: "deviceProof", type: "buffer", required: !0 },
1194 ],
1195 }),
1196 a.register({
1197 name: "identity-swap-v2",
1198 fields: [
1199 { name: "publicKey", type: "@keet/member-key", required: !0 },
1200 { name: "writerKey", type: "@keet/core-key", required: !0 },
1201 { name: "devicePublicKey", type: "@keet/public-key", required: !0 },
1202 { name: "privateProfileKey", type: "@keet/room-key" },
1203 ],
1204 }),
1205 a.register({
1206 name: "room-status",
1207 fields: [
1208 { name: "isActive", type: "bool" },
1209 { name: "isFullyMuted", type: "bool" },
1210 { name: "isMentionsOnlyMuted", type: "bool" },
1211 { name: "isReadOnly", type: "bool" },
1212 { name: "isFavorite", type: "bool" },
1213 ],
1214 }),
1215 a.register({
1216 name: "room",
1217 fields: [
1218 { name: "roomKey", type: "@keet/room-key", required: !0 },
1219 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
1220 { name: "mailbox", type: "@keet/public-key", required: !0 },
1221 { name: "status", type: "@keet-private-id/room-status", required: !0 },
1222 { name: "clock", type: "uint", required: !0 },
1223 { name: "initiator", type: "@keet/head" },
1224 { name: "fastForwardTo", type: "fixed32" },
1225 { name: "identitySwap", type: "@keet-private-id/identity-swap" },
1226 { name: "identitySwapV2", type: "@keet-private-id/pending-invitation-identity" },
1227 { name: "contact", type: "@keet/member-key" },
1228 ],
1229 }),
1230 a.register({
1231 name: "add-room-operation",
1232 fields: [
1233 i,
1234 { name: "roomKey", type: "@keet/room-key", required: !0 },
1235 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
1236 { name: "mailbox", type: "@keet/public-key", required: !0 },
1237 { name: "fastForwardTo", type: "fixed32" },
1238 { name: "initiator", type: "@keet/head" },
1239 { name: "dm", type: "@keet/member-key" },
1240 { name: "isReadOnly", type: "bool" },
1241 ],
1242 }),
1243 a.register({
1244 name: "remove-room-operation",
1245 fields: [i, { name: "discoveryKey", type: "@keet/room-discovery-key", required: !0 }],
1246 }),
1247 a.register({
1248 name: "update-room-status-operation",
1249 fields: [
1250 i,
1251 { name: "roomKey", type: "@keet/room-key", required: !0 },
1252 { name: "key", type: "uint", required: !0 },
1253 { name: "status", type: "@keet-private-id/room-status", required: !0 },
1254 ],
1255 }),
1256 a.register({ name: "contact-status", fields: [{ name: "isBlocked", type: "bool" }] }),
1257 a.register({
1258 name: "contact-record",
1259 fields: [
1260 { name: "memberKey", type: "@keet/member-key", required: !0 },
1261 { name: "clock", type: "uint", required: !0 },
1262 { name: "status", type: "@keet-private-id/contact-status", required: !0 },
1263 { name: "mailbox", type: "@keet/public-key" },
1264 { name: "roomKey", type: "@keet/room-key" },
1265 ],
1266 }),
1267 a.register({
1268 name: "add-contact-operation",
1269 fields: [i, { name: "contact", type: "@keet-private-id/contact", required: !0 }],
1270 }),
1271 a.register({
1272 name: "update-contact-status-operation",
1273 fields: [
1274 i,
1275 { name: "memberKey", type: "@keet/member-key", required: !0 },
1276 { name: "key", type: "uint", required: !0 },
1277 { name: "status", type: "@keet-private-id/contact-status", required: !0 },
1278 ],
1279 }),
1280 a.register({
1281 name: "remove-contact-operation",
1282 fields: [i, { name: "memberKey", type: "@keet/member-key", required: !0 }],
1283 }),
1284 a.register({
1285 name: "activate-contact-room-operation",
1286 fields: [i, { name: "memberKey", type: "@keet/member-key", required: !0 }],
1287 }),
1288 a.register({
1289 name: "contact-request-status",
1290 fields: [
1291 { name: "isPending", type: "bool" },
1292 { name: "isAccepted", type: "bool" },
1293 { name: "isRejected", type: "bool" },
1294 { name: "isDiscarded", type: "bool" },
1295 { name: "isSeen", type: "bool" },
1296 ],
1297 }),
1298 a.register({
1299 name: "contact-request-body",
1300 fields: [
1301 { name: "sender", type: "@keet/member-update", required: !0 },
1302 { name: "keys", type: "@keet/room-keys", required: !0 },
1303 { name: "mailbox", type: "@keet/public-key", required: !0 },
1304 { name: "message", type: "string" },
1305 ],
1306 }),
1307 a.register({
1308 name: "contact-request",
1309 fields: [
1310 { name: "body", type: "@keet-private-id/contact-request-body", required: !0 },
1311 { name: "attestation", type: "@keet/identity-attestation", required: !0 },
1312 ],
1313 }),
1314 a.register({
1315 name: "contact-request-record",
1316 fields: [
1317 { name: "memberKey", type: "@keet/member-key", required: !0 },
1318 { name: "clock", type: "uint", required: !0 },
1319 { name: "sender", type: "@keet/member-profile", required: !0 },
1320 { name: "status", type: "@keet-private-id/contact-request-status", required: !0 },
1321 { name: "keys", type: "@keet/room-keys", required: !0 },
1322 { name: "mailbox", type: "@keet/public-key", required: !0 },
1323 { name: "message", type: "string" },
1324 { name: "sentAt", type: "uint" },
1325 ],
1326 }),
1327 a.register({
1328 name: "add-contact-request-operation",
1329 fields: [i, { name: "blindRequest", type: "buffer", required: !0 }],
1330 }),
1331 a.register({
1332 name: "update-contact-request-status-operation",
1333 fields: [
1334 i,
1335 { name: "memberKey", type: "@keet/member-key", required: !0 },
1336 { name: "key", type: "uint", required: !0 },
1337 { name: "status", type: "@keet-private-id/contact-request-status", required: !0 },
1338 { name: "roomKey", type: "@keet/room-key" },
1339 ],
1340 }),
1341 a.register({
1342 name: "profile-discovery-record-v1",
1343 fields: [
1344 { name: "timestamp", type: "uint", required: !0 },
1345 { name: "key", type: "@keet/core-key", required: !0 },
1346 { name: "mailbox", type: "@keet/public-key", required: !0 },
1347 ],
1348 }),
1349 a.register({
1350 name: "profile-discovery-record",
1351 versions: [{ version: 1, type: "@keet-private-id/profile-discovery-record-v1" }],
1352 }),
1353 a.register({
1354 name: "unreads",
1355 fields: [
1356 { name: "deviceKey", type: "@keet/device-key", required: !0 },
1357 { name: "key", type: "@keet/core-key", required: !0 },
1358 ],
1359 }),
1360 a.register({
1361 name: "add-unreads-key-operation",
1362 fields: [i, { name: "key", type: "@keet/core-key", required: !0 }],
1363 }),
1364 a.register({
1365 name: "remove-unreads-key-operation",
1366 fields: [i, { name: "key", type: "@keet/core-key", required: !0 }],
1367 }),
1368 a.register({ name: "settings", fields: [{ name: "disableReadReceipts", type: "bool" }] }),
1369 a.register({ name: "user-settings-key", strings: !0, enum: ["disableReadReceipts"] }),
1370 a.register({
1371 name: "update-settings-operation",
1372 fields: [
1373 i,
1374 { name: "key", type: "@keet-private-id/user-settings-key", required: !0 },
1375 { name: "settings", type: "@keet-private-id/settings", required: !0 },
1376 ],
1377 }))
1378}
keet-core-4.14.4-pretty/schema/index.js +10 -0
……@@ -0,0 +1,10 @@
1const e = require("./contract"),
2 r = require("./config"),
3 a = require("./local"),
4 c = require("./api")
5module.exports = {
6 generateContractSchema: e,
7 generateConfigSchema: r,
8 generateLocalSchema: a,
9 generateAPISchema: c,
10}
keet-core-4.14.4-pretty/schema/local/index.js +359 -0
……@@ -0,0 +1,359 @@
1const e = require("../contract")
2module.exports = function (t) {
3 const r = t.namespace("local")
4 ;(e(t),
5 r.register({
6 name: "background-sync-room",
7 fields: [
8 { name: "discoveryPublicKey", type: "@keet/room-discovery-key", required: !0 },
9 { name: "timestamp", type: "uint", required: !0 },
10 { name: "lastSynced", type: "uint" },
11 { name: "dirty", type: "bool" },
12 ],
13 }),
14 r.register({
15 name: "stats",
16 fields: [
17 { name: "rooms", type: "uint", required: !0 },
18 { name: "activeRooms", type: "uint", required: !0 },
19 ],
20 }),
21 r.register({
22 name: "migration-status",
23 fields: [{ name: "version", type: "uint", required: !0 }],
24 }),
25 r.register({
26 name: "v3-private-profile-migration",
27 fields: [{ name: "blockedMembers", type: "@keet/member-key", array: !0 }],
28 }),
29 r.register({
30 name: "v3-room-migration",
31 fields: [
32 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
33 { name: "seed", type: "fixed32", required: !0 },
34 { name: "capabilities", type: "@keet/room-capabilities", required: !0 },
35 { name: "initiator", type: "@keet/head", required: !0 },
36 { name: "fastForwardTo", type: "fixed32", required: !0 },
37 { name: "privateProfile", type: "@local/v3-private-profile-migration" },
38 ],
39 }),
40 r.register({
41 name: "room-migration-stats",
42 fields: [{ name: "count", type: "uint", require: !0 }],
43 }),
44 r.register({
45 name: "room-migration",
46 fields: [
47 { name: "roomKey", type: "@keet/room-key", required: !0 },
48 { name: "priority", type: "uint", required: !0 },
49 { name: "v3", type: "@local/v3-room-migration" },
50 { name: "errored", type: "bool" },
51 { name: "timestamp", type: "uint" },
52 ],
53 }),
54 r.register({ name: "identity-status", fields: [{ name: "isConfirmed", type: "bool" }] }),
55 r.register({
56 name: "identity-swap",
57 fields: [{ name: "privateProfileKey", type: "@keet/room-key", required: !0 }],
58 }),
59 r.register({
60 name: "identity-record",
61 fields: [
62 { name: "publicKey", type: "@keet/public-key", required: !0 },
63 { name: "privateProfileKey", type: "@keet/room-key", required: !0 },
64 { name: "deviceKeyPair", type: "@keet/signing-keypair", required: !0 },
65 { name: "deviceProof", type: "buffer", required: !0 },
66 { name: "status", type: "@local/identity-status", required: !0 },
67 { name: "entropy", type: "buffer" },
68 { name: "swap", type: "@keet-private-id/identity-swap" },
69 { name: "swapV2", type: "@keet-private-id/identity-swap-v2" },
70 ],
71 }),
72 r.register({
73 name: "tasks",
74 enum: [
75 "RestoreIdentity",
76 "CreateRoom",
77 "LeaveRoom",
78 "ClearRoom",
79 "JoinRoomInvitation",
80 "JoinRoomKeys",
81 "JoinRoomResponse",
82 "SendContactRequest",
83 "TestFastTask",
84 "TestSlowTask",
85 "TestErrorTask",
86 ],
87 }))
88 const i = [
89 { name: "roomKey", type: "@keet/room-key", required: !0 },
90 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
91 { name: "fastForwardTo", type: "fixed32" },
92 { name: "initiator", type: "@keet/head" },
93 ]
94 ;(r.register({ name: "room-keys", fields: i }),
95 r.register({
96 name: "join-room-invitation-task",
97 fields: [{ name: "invitation", type: "@keet-private-id/pending-invitation", required: !0 }],
98 }),
99 r.register({
100 name: "join-room-response-task",
101 fields: [
102 { name: "mailbox", type: "@keet/public-key", required: !0 },
103 { name: "keyPair", type: "@keet/signing-keypair", required: !0 },
104 { name: "response", type: "buffer", required: !0 },
105 ],
106 }),
107 r.register({
108 name: "fast-forward-to",
109 fields: [{ name: "key", type: "@keet/core-key", required: !0 }],
110 }))
111 const a = [...i, { name: "mailbox", type: "@keet/public-key" }]
112 ;(r.register({ name: "add-room-fields", fields: a }),
113 r.register({
114 name: "join-room-keys-task",
115 fields: [{ name: "keys", type: "@local/add-room-fields", required: !0 }],
116 }),
117 r.register({
118 name: "create-room-task",
119 fields: [
120 ...a,
121 { name: "keyPair", type: "@keet/signing-keypair" },
122 { name: "genesis", type: "@keet/genesis-operation" },
123 { name: "isPrivateProfile", type: "bool" },
124 ],
125 }),
126 r.register({
127 name: "leave-room-task",
128 fields: [
129 { name: "roomKey", type: "@keet/room-key", required: !0 },
130 { name: "isGossiped", type: "bool" },
131 ],
132 }),
133 r.register({
134 name: "clear-room-task",
135 fields: [{ name: "roomKey", type: "@keet/room-key", required: !0 }],
136 }),
137 r.register({
138 name: "restore-identity-task",
139 fields: [
140 { name: "mnemonic", type: "string", required: !0 },
141 { name: "profileDiscoveryTimeout", type: "uint" },
142 { name: "recover", type: "bool" },
143 ],
144 }),
145 r.register({
146 name: "send-contact-request-task",
147 fields: [
148 { name: "roomKey", type: "@keet/room-key", required: !0 },
149 { name: "memberKey", type: "@keet/member-key", required: !0 },
150 { name: "message", type: "string" },
151 { name: "contactInfo", type: "@keet/member-contact-info" },
152 ],
153 }),
154 r.register({
155 name: "migrate-v2-room-task",
156 fields: [
157 { name: "key", type: "@keet/room-key", required: !0 },
158 { name: "isPrivateProfile", type: "bool" },
159 ],
160 }),
161 r.register({
162 name: "task",
163 fields: [
164 { name: "discoveryKey", type: "@keet/room-discovery-key", required: !0 },
165 { name: "priority", type: "uint", required: !0 },
166 { name: "timestamp", type: "uint", required: !0 },
167 { name: "type", type: "uint", required: !0 },
168 { name: "restoreIdentity", type: "@local/restore-identity-task" },
169 { name: "createRoom", type: "@local/create-room-task" },
170 { name: "leaveRoom", type: "@local/leave-room-task" },
171 { name: "clearRoom", type: "@local/clear-room-task" },
172 { name: "joinRoomInvitation", type: "@local/join-room-invitation-task" },
173 { name: "joinRoomKeys", type: "@local/join-room-keys-task" },
174 { name: "joinRoomResponse", type: "@local/join-room-response-task" },
175 { name: "sendContactRequest", type: "@local/send-contact-request-task" },
176 { name: "migrateV2Room", type: "@local/migrate-v2-room-task" },
177 ],
178 }),
179 r.register({
180 name: "shared-invitation",
181 fields: [
182 { name: "seed", type: "buffer", required: !0 },
183 { name: "invitation", type: "@keet/invitation", required: !0 },
184 ],
185 }),
186 r.register({
187 name: "room-status",
188 fields: [
189 { name: "isWritable", type: "bool" },
190 { name: "isReadable", type: "bool" },
191 { name: "isPrivateProfile", type: "bool" },
192 { name: "isRemoved", type: "bool" },
193 ],
194 }),
195 r.register({
196 name: "room-timestamps",
197 fields: [
198 { name: "creation", type: "uint", required: !0 },
199 { name: "latestSync", type: "uint", required: !0 },
200 { name: "latestChatMessage", type: "uint", required: !0 },
201 ],
202 }),
203 r.register({
204 name: "room",
205 fields: [
206 { name: "roomKey", type: "@keet/room-key", required: !0 },
207 { name: "discoveryKey", type: "@keet/room-discovery-key", required: !0 },
208 { name: "encryptionKey", type: "@keet/encryption-key", required: !0 },
209 { name: "digest", type: "@keet/system-digest", required: !0 },
210 { name: "stats", type: "@keet/stats", required: !0 },
211 { name: "timestamps", type: "@local/room-timestamps", required: !0 },
212 { name: "fork", type: "uint", required: !0 },
213 { name: "length", type: "uint", required: !0 },
214 { name: "seed", type: "fixed32", required: !0 },
215 { name: "capabilities", type: "@keet/room-capabilities", required: !0 },
216 { name: "status", type: "@local/room-status", required: !0 },
217 { name: "selfDevice", type: "@keet/device" },
218 { name: "selfMember", type: "@keet/full-member" },
219 { name: "config", type: "@keet/room-config" },
220 { name: "identity", type: "@keet/room-identity" },
221 { name: "lastMessage", type: "@keet/full-chat-message-record" },
222 { name: "dm", type: "@keet/member-key", array: !0 },
223 { name: "readLengths", type: "@keet/read-length", array: !0 },
224 { name: "lastMember", type: "@keet/member" },
225 { name: "version", type: "uint" },
226 { name: "preferences", type: "@keet-private-id/room-status" },
227 { name: "activeCall", type: "@local/active-call" },
228 ],
229 }),
230 r.register({
231 name: "active-call",
232 fields: [
233 { name: "callKey", type: "fixed32", required: !0 },
234 { name: "selfDeviceKey", type: "@keet/device-key" },
235 ],
236 }),
237 r.register({
238 name: "room-preferences",
239 fields: [
240 { name: "roomKey", type: "@keet/room-key", required: !0 },
241 { name: "status", type: "@keet-private-id/room-status", required: !0 },
242 ],
243 }),
244 r.register({
245 name: "room-metadata",
246 fields: [
247 { name: "roomKey", type: "@keet/room-key", required: !0 },
248 { name: "repairs", type: "uint" },
249 ],
250 }),
251 r.register({
252 name: "writer",
253 fields: [
254 { name: "mailbox", type: "@keet/public-key", required: !0 },
255 { name: "key", type: "@keet/core-key", required: !0 },
256 { name: "roomKey", type: "@keet/room-key" },
257 { name: "keyPair", type: "@keet/signing-keypair" },
258 { name: "responseKeyPair", type: "@keet/signing-keypair" },
259 ],
260 }),
261 r.register({
262 name: "writer-append",
263 fields: [
264 { name: "key", type: "@keet/core-key", required: !0 },
265 { name: "responsePublicKey", type: "fixed32", required: !0 },
266 ],
267 }),
268 r.register({
269 name: "member",
270 fields: [
271 { name: "key", type: "@keet/member-key", required: !0 },
272 { name: "profile", type: "@keet/member-profile", required: !0 },
273 ],
274 }),
275 r.register({
276 name: "device",
277 fields: [
278 { name: "roomKey", type: "@keet/room-key", required: !0 },
279 { name: "device", type: "@keet/device", required: !0 },
280 ],
281 }),
282 r.register({
283 name: "file",
284 fields: [
285 { name: "file", type: "@keet/file", required: !0 },
286 { name: "roomKey", type: "@keet/room-key", required: !0 },
287 { name: "encryptionKey", type: "@keet/encryption-key" },
288 { name: "cleared", type: "bool" },
289 { name: "own", type: "bool" },
290 { name: "lastAccessed", type: "uint" },
291 { name: "version", type: "uint" },
292 ],
293 }),
294 r.register({
295 name: "debug-flag",
296 fields: [
297 { name: "key", type: "string" },
298 { name: "value", type: "bool" },
299 { name: "description", type: "string" },
300 ],
301 }),
302 r.register({
303 name: "debug",
304 fields: [{ name: "flags", type: "@local/debug-flag", array: !0 }],
305 }),
306 r.register({
307 name: "hyperdht-record",
308 fields: [
309 { name: "nodes", type: "ipv4Address", array: !0 },
310 { name: "concurrency", type: "uint" },
311 { name: "maxWindow", type: "uint" },
312 { name: "randomPunchInterval", type: "uint" },
313 { name: "connectionKeepAlive", type: "uint" },
314 ],
315 }),
316 r.register({
317 name: "unread",
318 fields: [
319 { name: "roomKey", type: "@keet/room-key", required: !0 },
320 { name: "count", type: "uint", required: !0 },
321 ],
322 }),
323 r.register({
324 name: "error-record-details",
325 fields: [
326 { name: "roomKey", type: "@keet/room-key" },
327 { name: "coreKey", type: "@keet/core-key" },
328 ],
329 }),
330 r.register({
331 name: "error-record",
332 fields: [
333 { name: "code", type: "string", required: !0 },
334 { name: "message", type: "string", required: !0 },
335 { name: "stack", type: "string", required: !0 },
336 { name: "timestamp", type: "uint", required: !0 },
337 { name: "details", type: "@local/error-record-details" },
338 ],
339 }),
340 r.register({ name: "keet-state", enum: ["RESUME", "WAKEUP", "PRESUSPEND", "SUSPEND"] }),
341 r.register({
342 name: "file-stats",
343 fields: [
344 { name: "roomKey", type: "@keet/room-key", required: !0 },
345 { name: "total", type: "uint", required: !0 },
346 ],
347 }),
348 r.register({
349 name: "file-gc-info",
350 fields: [{ name: "lastCleared", type: "uint", required: !0 }],
351 }),
352 r.register({
353 name: "environment-record",
354 fields: [
355 { name: "buildType", type: "@keet/build-type", required: !0 },
356 { name: "latestOfflineAbi", type: "uint" },
357 ],
358 }))
359}
keet-core-4.14.4-pretty/schema/spec/api/hrpc/hrpc.json +599 -0
……@@ -0,0 +1,599 @@
1{
2 "version": 2,
3 "schema": [
4 {
5 "id": 0,
6 "name": "@api/self-destruct",
7 "request": {
8 "name": "@api/self-destruct-request",
9 "stream": false
10 },
11 "version": 1
12 },
13 {
14 "id": 1,
15 "name": "@api/boot",
16 "request": {
17 "name": "@api/boot-request",
18 "stream": false
19 },
20 "response": {
21 "name": "@api/boot-response",
22 "stream": false
23 },
24 "version": 1
25 },
26 {
27 "id": 2,
28 "name": "@api/core-create-room",
29 "request": {
30 "name": "@api/core/create-room-request",
31 "stream": false
32 },
33 "response": {
34 "name": "@api/core/create-room-response",
35 "stream": false
36 },
37 "version": 1
38 },
39 {
40 "id": 3,
41 "name": "@api/core-activate-room",
42 "request": {
43 "name": "@api/core/activate-room-request",
44 "send": true
45 },
46 "version": 1
47 },
48 {
49 "id": 4,
50 "name": "@api/core-deactivate-room",
51 "request": {
52 "name": "@api/core/deactivate-room-request",
53 "send": true
54 },
55 "version": 1
56 },
57 {
58 "id": 5,
59 "name": "@api/core-leave-room",
60 "request": {
61 "name": "@api/core/leave-room-request"
62 },
63 "response": {
64 "name": "@api/core/leave-room-response"
65 },
66 "version": 1
67 },
68 {
69 "id": 6,
70 "name": "@api/core-update-room-config",
71 "request": {
72 "name": "@api/core/update-room-config-request",
73 "send": true
74 },
75 "version": 1
76 },
77 {
78 "id": 7,
79 "name": "@api/core-update-room-settings",
80 "request": {
81 "name": "@api/core/update-room-settings-request",
82 "send": true
83 },
84 "version": 1
85 },
86 {
87 "id": 8,
88 "name": "@api/core-update-room-status",
89 "request": {
90 "name": "@api/core/update-room-status-request",
91 "send": true
92 },
93 "version": 1
94 },
95 {
96 "id": 9,
97 "name": "@api/core-update-profile",
98 "request": {
99 "name": "@api/core/update-profile-request",
100 "send": true
101 },
102 "version": 1
103 },
104 {
105 "id": 10,
106 "name": "@api/core-create-room-invitation",
107 "request": {
108 "name": "@api/core/create-room-invitation-request"
109 },
110 "response": {
111 "name": "@api/core/create-room-invitation-response"
112 },
113 "version": 1
114 },
115 {
116 "id": 11,
117 "name": "@api/core-create-identity-invitation",
118 "request": {
119 "name": "@api/core/create-identity-invitation-request"
120 },
121 "response": {
122 "name": "@api/core/create-identity-invitation-response"
123 },
124 "version": 1
125 },
126 {
127 "id": 12,
128 "name": "@api/core-start-pairing",
129 "request": {
130 "name": "@api/core/start-pairing-request"
131 },
132 "response": {
133 "name": "@api/core/start-pairing-response"
134 },
135 "version": 1
136 },
137 {
138 "id": 13,
139 "name": "@api/core-accept-join-request",
140 "request": {
141 "name": "@api/core/accept-join-request-request"
142 },
143 "response": {
144 "name": "@api/core/accept-join-request-response"
145 },
146 "version": 1
147 },
148 {
149 "id": 14,
150 "name": "@api/core-reject-join-request",
151 "request": {
152 "name": "@api/core/reject-join-request-request"
153 },
154 "response": {
155 "name": "@api/core/reject-join-request-response"
156 },
157 "version": 1
158 },
159 {
160 "id": 15,
161 "name": "@api/core-stop-pairing",
162 "request": {
163 "name": "@api/core/stop-pairing-request"
164 },
165 "response": {
166 "name": "@api/core/stop-pairing-response"
167 },
168 "version": 1
169 },
170 {
171 "id": 16,
172 "name": "@api/core-add-chat-message",
173 "request": {
174 "name": "@api/core/add-chat-message-request"
175 },
176 "response": {
177 "name": "@api/core/add-chat-message-response"
178 },
179 "version": 1
180 },
181 {
182 "id": 17,
183 "name": "@api/core-edit-chat-message",
184 "request": {
185 "name": "@api/core/edit-chat-message-request"
186 },
187 "response": {
188 "name": "@api/core/edit-chat-message-response"
189 },
190 "version": 1
191 },
192 {
193 "id": 18,
194 "name": "@api/core-remove-chat-message",
195 "request": {
196 "name": "@api/core/remove-chat-message-request"
197 },
198 "response": {
199 "name": "@api/core/remove-chat-message-response"
200 },
201 "version": 1
202 },
203 {
204 "id": 19,
205 "name": "@api/core-add-chat-reaction",
206 "request": {
207 "name": "@api/core/add-chat-reaction-request"
208 },
209 "response": {
210 "name": "@api/core/add-chat-reaction-response"
211 },
212 "version": 1
213 },
214 {
215 "id": 20,
216 "name": "@api/core-remove-chat-reaction",
217 "request": {
218 "name": "@api/core/remove-chat-reaction-request"
219 },
220 "response": {
221 "name": "@api/core/remove-chat-reaction-response"
222 },
223 "version": 1
224 },
225 {
226 "id": 21,
227 "name": "@api/core-want-identity",
228 "request": {
229 "name": "@api/core/want-identity",
230 "send": true
231 },
232 "version": 1
233 },
234 {
235 "id": 22,
236 "name": "@api/core-unwant-identity",
237 "request": {
238 "name": "@api/core/unwant-identity",
239 "send": true
240 },
241 "version": 1
242 },
243 {
244 "id": 23,
245 "name": "@api/core-have-identity",
246 "request": {
247 "name": "@api/core/have",
248 "send": true
249 },
250 "version": 1
251 },
252 {
253 "id": 24,
254 "name": "@api/core-identity-reset",
255 "request": {
256 "name": "@api/core/identity",
257 "send": true
258 },
259 "version": 1
260 },
261 {
262 "id": 25,
263 "name": "@api/core-identity-member",
264 "request": {
265 "name": "@api/core/identity-member",
266 "send": true
267 },
268 "version": 1
269 },
270 {
271 "id": 26,
272 "name": "@api/core-identity-device",
273 "request": {
274 "name": "@api/core/identity-device",
275 "send": true
276 },
277 "version": 1
278 },
279 {
280 "id": 27,
281 "name": "@api/core-want-pairing",
282 "request": {
283 "name": "@api/core/want-pairing",
284 "send": true
285 },
286 "version": 1
287 },
288 {
289 "id": 28,
290 "name": "@api/core-unwant-pairing",
291 "request": {
292 "name": "@api/core/unwant-pairing",
293 "send": true
294 },
295 "version": 1
296 },
297 {
298 "id": 29,
299 "name": "@api/core-have-pairing",
300 "request": {
301 "name": "@api/core/have",
302 "send": true
303 },
304 "version": 1
305 },
306 {
307 "id": 30,
308 "name": "@api/core-pairing-reset",
309 "request": {
310 "name": "@api/core/pairing",
311 "send": true
312 },
313 "version": 1
314 },
315 {
316 "id": 31,
317 "name": "@api/core-want-lobby",
318 "request": {
319 "name": "@api/core/want-lobby",
320 "send": true
321 },
322 "version": 1
323 },
324 {
325 "id": 32,
326 "name": "@api/core-unwant-lobby",
327 "request": {
328 "name": "@api/core/unwant-lobby",
329 "send": true
330 },
331 "version": 1
332 },
333 {
334 "id": 33,
335 "name": "@api/core-have-lobby",
336 "request": {
337 "name": "@api/core/have",
338 "send": true
339 },
340 "version": 1
341 },
342 {
343 "id": 34,
344 "name": "@api/core-lobby-reset",
345 "request": {
346 "name": "@api/core/lobby",
347 "send": true
348 },
349 "version": 1
350 },
351 {
352 "id": 35,
353 "name": "@api/core-lobby-room",
354 "request": {
355 "name": "@api/core/lobby-room",
356 "send": true
357 },
358 "version": 1
359 },
360 {
361 "id": 36,
362 "name": "@api/core-want-room-info",
363 "request": {
364 "name": "@api/core/want-room-info",
365 "send": true
366 },
367 "version": 1
368 },
369 {
370 "id": 37,
371 "name": "@api/core-have-room-info",
372 "request": {
373 "name": "@api/core/have",
374 "send": true
375 },
376 "version": 1
377 },
378 {
379 "id": 38,
380 "name": "@api/core-room-info",
381 "request": {
382 "name": "@api/core/room-info",
383 "send": true
384 },
385 "version": 1
386 },
387 {
388 "id": 39,
389 "name": "@api/core-room-info-digest",
390 "request": {
391 "name": "@api/core/room-info-digest",
392 "send": true
393 },
394 "version": 1
395 },
396 {
397 "id": 40,
398 "name": "@api/core-room-info-config",
399 "request": {
400 "name": "@api/core/room-info-config",
401 "send": true
402 },
403 "version": 1
404 },
405 {
406 "id": 41,
407 "name": "@api/core-room-info-role",
408 "request": {
409 "name": "@api/core/room-info-role",
410 "send": true
411 },
412 "version": 1
413 },
414 {
415 "id": 42,
416 "name": "@api/core-room-info-last-message",
417 "request": {
418 "name": "@api/core/room-info-last-message",
419 "send": true
420 },
421 "version": 1
422 },
423 {
424 "id": 43,
425 "name": "@api/core-want-chat",
426 "request": {
427 "name": "@api/core/want-chat",
428 "send": true
429 },
430 "version": 1
431 },
432 {
433 "id": 44,
434 "name": "@api/core-unwant-chat",
435 "request": {
436 "name": "@api/core/unwant-chat",
437 "send": true
438 },
439 "version": 1
440 },
441 {
442 "id": 45,
443 "name": "@api/core-have-chat",
444 "request": {
445 "name": "@api/core/have",
446 "send": true
447 },
448 "version": 1
449 },
450 {
451 "id": 46,
452 "name": "@api/core-chat-reset",
453 "request": {
454 "name": "@api/core/chat-reset",
455 "send": true
456 },
457 "version": 1
458 },
459 {
460 "id": 47,
461 "name": "@api/core-message-info",
462 "request": {
463 "name": "@api/core/message-info",
464 "send": true
465 },
466 "version": 1
467 },
468 {
469 "id": 48,
470 "name": "@api/core-message-info-chat",
471 "request": {
472 "name": "@api/core/message-info-chat",
473 "send": true
474 },
475 "version": 1
476 },
477 {
478 "id": 49,
479 "name": "@api/core-message-info-member",
480 "request": {
481 "name": "@api/core/message-info-member",
482 "send": true
483 },
484 "version": 1
485 },
486 {
487 "id": 50,
488 "name": "@api/core-message-info-role",
489 "request": {
490 "name": "@api/core/message-info-role",
491 "send": true
492 },
493 "version": 1
494 },
495 {
496 "id": 51,
497 "name": "@api/core-message-info-reactions",
498 "request": {
499 "name": "@api/core/message-info-reactions",
500 "send": true
501 },
502 "version": 1
503 },
504 {
505 "id": 52,
506 "name": "@api/core-want-members",
507 "request": {
508 "name": "@api/core/want-members",
509 "send": true
510 },
511 "version": 1
512 },
513 {
514 "id": 53,
515 "name": "@api/core-unwant-members",
516 "request": {
517 "name": "@api/core/unwant-members",
518 "send": true
519 },
520 "version": 1
521 },
522 {
523 "id": 54,
524 "name": "@api/core-have-members",
525 "request": {
526 "name": "@api/core/have",
527 "send": true
528 },
529 "version": 1
530 },
531 {
532 "id": 55,
533 "name": "@api/core-member-list-add",
534 "request": {
535 "name": "@api/core/member-list-add",
536 "send": true
537 },
538 "version": 1
539 },
540 {
541 "id": 56,
542 "name": "@api/core-member-list-remove",
543 "request": {
544 "name": "@api/core/member-list-remove",
545 "send": true
546 },
547 "version": 1
548 },
549 {
550 "id": 57,
551 "name": "@api/core-member",
552 "request": {
553 "name": "@api/core/member",
554 "send": true
555 },
556 "version": 1
557 },
558 {
559 "id": 58,
560 "name": "@api/core-device",
561 "request": {
562 "name": "@api/core/device",
563 "send": true
564 },
565 "version": 1
566 },
567 {
568 "id": 59,
569 "name": "@api/debug-enable",
570 "request": {
571 "name": "@api/debug/enable-request"
572 },
573 "response": {
574 "name": "@api/debug/enable-response"
575 },
576 "version": 1
577 },
578 {
579 "id": 60,
580 "name": "@api/debug-disable",
581 "request": {
582 "name": "@api/debug/disable-request"
583 },
584 "response": {
585 "name": "@api/debug/disable-response"
586 },
587 "version": 1
588 },
589 {
590 "id": 61,
591 "name": "@api/send-legacy",
592 "request": {
593 "name": "buffer",
594 "send": true
595 },
596 "version": 2
597 }
598 ]
599}
keet-core-4.14.4-pretty/schema/spec/api/hrpc/index.js +700 -0
……@@ -0,0 +1,700 @@
1const { c: e, RPC: a, RPCStream: o, RPCRequestStream: r } = require("hrpc/runtime"),
2 { getEncoding: i } = require("./messages.js"),
3 t = new Map([
4 ["@api/self-destruct", 0],
5 [0, "@api/self-destruct"],
6 ["@api/boot", 1],
7 [1, "@api/boot"],
8 ["@api/core-create-room", 2],
9 [2, "@api/core-create-room"],
10 ["@api/core-activate-room", 3],
11 [3, "@api/core-activate-room"],
12 ["@api/core-deactivate-room", 4],
13 [4, "@api/core-deactivate-room"],
14 ["@api/core-leave-room", 5],
15 [5, "@api/core-leave-room"],
16 ["@api/core-update-room-config", 6],
17 [6, "@api/core-update-room-config"],
18 ["@api/core-update-room-settings", 7],
19 [7, "@api/core-update-room-settings"],
20 ["@api/core-update-room-status", 8],
21 [8, "@api/core-update-room-status"],
22 ["@api/core-update-profile", 9],
23 [9, "@api/core-update-profile"],
24 ["@api/core-create-room-invitation", 10],
25 [10, "@api/core-create-room-invitation"],
26 ["@api/core-create-identity-invitation", 11],
27 [11, "@api/core-create-identity-invitation"],
28 ["@api/core-start-pairing", 12],
29 [12, "@api/core-start-pairing"],
30 ["@api/core-accept-join-request", 13],
31 [13, "@api/core-accept-join-request"],
32 ["@api/core-reject-join-request", 14],
33 [14, "@api/core-reject-join-request"],
34 ["@api/core-stop-pairing", 15],
35 [15, "@api/core-stop-pairing"],
36 ["@api/core-add-chat-message", 16],
37 [16, "@api/core-add-chat-message"],
38 ["@api/core-edit-chat-message", 17],
39 [17, "@api/core-edit-chat-message"],
40 ["@api/core-remove-chat-message", 18],
41 [18, "@api/core-remove-chat-message"],
42 ["@api/core-add-chat-reaction", 19],
43 [19, "@api/core-add-chat-reaction"],
44 ["@api/core-remove-chat-reaction", 20],
45 [20, "@api/core-remove-chat-reaction"],
46 ["@api/core-want-identity", 21],
47 [21, "@api/core-want-identity"],
48 ["@api/core-unwant-identity", 22],
49 [22, "@api/core-unwant-identity"],
50 ["@api/core-have-identity", 23],
51 [23, "@api/core-have-identity"],
52 ["@api/core-identity-reset", 24],
53 [24, "@api/core-identity-reset"],
54 ["@api/core-identity-member", 25],
55 [25, "@api/core-identity-member"],
56 ["@api/core-identity-device", 26],
57 [26, "@api/core-identity-device"],
58 ["@api/core-want-pairing", 27],
59 [27, "@api/core-want-pairing"],
60 ["@api/core-unwant-pairing", 28],
61 [28, "@api/core-unwant-pairing"],
62 ["@api/core-have-pairing", 29],
63 [29, "@api/core-have-pairing"],
64 ["@api/core-pairing-reset", 30],
65 [30, "@api/core-pairing-reset"],
66 ["@api/core-want-lobby", 31],
67 [31, "@api/core-want-lobby"],
68 ["@api/core-unwant-lobby", 32],
69 [32, "@api/core-unwant-lobby"],
70 ["@api/core-have-lobby", 33],
71 [33, "@api/core-have-lobby"],
72 ["@api/core-lobby-reset", 34],
73 [34, "@api/core-lobby-reset"],
74 ["@api/core-lobby-room", 35],
75 [35, "@api/core-lobby-room"],
76 ["@api/core-want-room-info", 36],
77 [36, "@api/core-want-room-info"],
78 ["@api/core-have-room-info", 37],
79 [37, "@api/core-have-room-info"],
80 ["@api/core-room-info", 38],
81 [38, "@api/core-room-info"],
82 ["@api/core-room-info-digest", 39],
83 [39, "@api/core-room-info-digest"],
84 ["@api/core-room-info-config", 40],
85 [40, "@api/core-room-info-config"],
86 ["@api/core-room-info-role", 41],
87 [41, "@api/core-room-info-role"],
88 ["@api/core-room-info-last-message", 42],
89 [42, "@api/core-room-info-last-message"],
90 ["@api/core-want-chat", 43],
91 [43, "@api/core-want-chat"],
92 ["@api/core-unwant-chat", 44],
93 [44, "@api/core-unwant-chat"],
94 ["@api/core-have-chat", 45],
95 [45, "@api/core-have-chat"],
96 ["@api/core-chat-reset", 46],
97 [46, "@api/core-chat-reset"],
98 ["@api/core-message-info", 47],
99 [47, "@api/core-message-info"],
100 ["@api/core-message-info-chat", 48],
101 [48, "@api/core-message-info-chat"],
102 ["@api/core-message-info-member", 49],
103 [49, "@api/core-message-info-member"],
104 ["@api/core-message-info-role", 50],
105 [50, "@api/core-message-info-role"],
106 ["@api/core-message-info-reactions", 51],
107 [51, "@api/core-message-info-reactions"],
108 ["@api/core-want-members", 52],
109 [52, "@api/core-want-members"],
110 ["@api/core-unwant-members", 53],
111 [53, "@api/core-unwant-members"],
112 ["@api/core-have-members", 54],
113 [54, "@api/core-have-members"],
114 ["@api/core-member-list-add", 55],
115 [55, "@api/core-member-list-add"],
116 ["@api/core-member-list-remove", 56],
117 [56, "@api/core-member-list-remove"],
118 ["@api/core-member", 57],
119 [57, "@api/core-member"],
120 ["@api/core-device", 58],
121 [58, "@api/core-device"],
122 ["@api/debug-enable", 59],
123 [59, "@api/debug-enable"],
124 ["@api/debug-disable", 60],
125 [60, "@api/debug-disable"],
126 ["@api/send-legacy", 61],
127 [61, "@api/send-legacy"],
128 ])
129class c {
130 constructor(c) {
131 ;((this._stream = c),
132 (this._handlers = []),
133 (this._requestEncodings = new Map([
134 ["@api/self-destruct", i("@api/self-destruct-request")],
135 ["@api/boot", i("@api/boot-request")],
136 ["@api/core-create-room", i("@api/core/create-room-request")],
137 ["@api/core-activate-room", i("@api/core/activate-room-request")],
138 ["@api/core-deactivate-room", i("@api/core/deactivate-room-request")],
139 ["@api/core-leave-room", i("@api/core/leave-room-request")],
140 ["@api/core-update-room-config", i("@api/core/update-room-config-request")],
141 ["@api/core-update-room-settings", i("@api/core/update-room-settings-request")],
142 ["@api/core-update-room-status", i("@api/core/update-room-status-request")],
143 ["@api/core-update-profile", i("@api/core/update-profile-request")],
144 ["@api/core-create-room-invitation", i("@api/core/create-room-invitation-request")],
145 ["@api/core-create-identity-invitation", i("@api/core/create-identity-invitation-request")],
146 ["@api/core-start-pairing", i("@api/core/start-pairing-request")],
147 ["@api/core-accept-join-request", i("@api/core/accept-join-request-request")],
148 ["@api/core-reject-join-request", i("@api/core/reject-join-request-request")],
149 ["@api/core-stop-pairing", i("@api/core/stop-pairing-request")],
150 ["@api/core-add-chat-message", i("@api/core/add-chat-message-request")],
151 ["@api/core-edit-chat-message", i("@api/core/edit-chat-message-request")],
152 ["@api/core-remove-chat-message", i("@api/core/remove-chat-message-request")],
153 ["@api/core-add-chat-reaction", i("@api/core/add-chat-reaction-request")],
154 ["@api/core-remove-chat-reaction", i("@api/core/remove-chat-reaction-request")],
155 ["@api/core-want-identity", i("@api/core/want-identity")],
156 ["@api/core-unwant-identity", i("@api/core/unwant-identity")],
157 ["@api/core-have-identity", i("@api/core/have")],
158 ["@api/core-identity-reset", i("@api/core/identity")],
159 ["@api/core-identity-member", i("@api/core/identity-member")],
160 ["@api/core-identity-device", i("@api/core/identity-device")],
161 ["@api/core-want-pairing", i("@api/core/want-pairing")],
162 ["@api/core-unwant-pairing", i("@api/core/unwant-pairing")],
163 ["@api/core-have-pairing", i("@api/core/have")],
164 ["@api/core-pairing-reset", i("@api/core/pairing")],
165 ["@api/core-want-lobby", i("@api/core/want-lobby")],
166 ["@api/core-unwant-lobby", i("@api/core/unwant-lobby")],
167 ["@api/core-have-lobby", i("@api/core/have")],
168 ["@api/core-lobby-reset", i("@api/core/lobby")],
169 ["@api/core-lobby-room", i("@api/core/lobby-room")],
170 ["@api/core-want-room-info", i("@api/core/want-room-info")],
171 ["@api/core-have-room-info", i("@api/core/have")],
172 ["@api/core-room-info", i("@api/core/room-info")],
173 ["@api/core-room-info-digest", i("@api/core/room-info-digest")],
174 ["@api/core-room-info-config", i("@api/core/room-info-config")],
175 ["@api/core-room-info-role", i("@api/core/room-info-role")],
176 ["@api/core-room-info-last-message", i("@api/core/room-info-last-message")],
177 ["@api/core-want-chat", i("@api/core/want-chat")],
178 ["@api/core-unwant-chat", i("@api/core/unwant-chat")],
179 ["@api/core-have-chat", i("@api/core/have")],
180 ["@api/core-chat-reset", i("@api/core/chat-reset")],
181 ["@api/core-message-info", i("@api/core/message-info")],
182 ["@api/core-message-info-chat", i("@api/core/message-info-chat")],
183 ["@api/core-message-info-member", i("@api/core/message-info-member")],
184 ["@api/core-message-info-role", i("@api/core/message-info-role")],
185 ["@api/core-message-info-reactions", i("@api/core/message-info-reactions")],
186 ["@api/core-want-members", i("@api/core/want-members")],
187 ["@api/core-unwant-members", i("@api/core/unwant-members")],
188 ["@api/core-have-members", i("@api/core/have")],
189 ["@api/core-member-list-add", i("@api/core/member-list-add")],
190 ["@api/core-member-list-remove", i("@api/core/member-list-remove")],
191 ["@api/core-member", i("@api/core/member")],
192 ["@api/core-device", i("@api/core/device")],
193 ["@api/debug-enable", i("@api/debug/enable-request")],
194 ["@api/debug-disable", i("@api/debug/disable-request")],
195 ["@api/send-legacy", e.buffer],
196 ])),
197 (this._responseEncodings = new Map([
198 ["@api/boot", i("@api/boot-response")],
199 ["@api/core-create-room", i("@api/core/create-room-response")],
200 ["@api/core-leave-room", i("@api/core/leave-room-response")],
201 ["@api/core-create-room-invitation", i("@api/core/create-room-invitation-response")],
202 [
203 "@api/core-create-identity-invitation",
204 i("@api/core/create-identity-invitation-response"),
205 ],
206 ["@api/core-start-pairing", i("@api/core/start-pairing-response")],
207 ["@api/core-accept-join-request", i("@api/core/accept-join-request-response")],
208 ["@api/core-reject-join-request", i("@api/core/reject-join-request-response")],
209 ["@api/core-stop-pairing", i("@api/core/stop-pairing-response")],
210 ["@api/core-add-chat-message", i("@api/core/add-chat-message-response")],
211 ["@api/core-edit-chat-message", i("@api/core/edit-chat-message-response")],
212 ["@api/core-remove-chat-message", i("@api/core/remove-chat-message-response")],
213 ["@api/core-add-chat-reaction", i("@api/core/add-chat-reaction-response")],
214 ["@api/core-remove-chat-reaction", i("@api/core/remove-chat-reaction-response")],
215 ["@api/debug-enable", i("@api/debug/enable-response")],
216 ["@api/debug-disable", i("@api/debug/disable-response")],
217 ])),
218 (this._rpc = new a(c, async (a) => {
219 const i = t.get(a.command),
220 c = this._responseEncodings.get(i),
221 n = this._requestEncodings.get(i)
222 if (this._requestIsSend(i)) {
223 const o = a.data ? e.decode(n, a.data) : null
224 return void (await this._handlers[i](o))
225 }
226 if (!this._requestIsStream(i) && !this._responseIsStream(i)) {
227 const o = a.data ? e.decode(n, a.data) : null,
228 r = await this._handlers[i](o)
229 a.reply(e.encode(c, r))
230 }
231 if (!this._requestIsStream(i) && this._responseIsStream(i)) {
232 const r = a.data ? e.decode(n, a.data) : null,
233 t = new o(null, null, a.createResponseStream(), c)
234 ;((t.data = r), await this._handlers[i](t))
235 }
236 if (this._requestIsStream(i) && !this._responseIsStream(i)) {
237 const o = new r(a, c, a.createRequestStream(), n),
238 t = await this._handlers[i](o)
239 a.reply(e.encode(c, t))
240 }
241 if (this._requestIsStream(i) && this._responseIsStream(i)) {
242 const e = new r(a, c, a.createRequestStream(), n, a.createResponseStream(), c)
243 await this._handlers[i](e)
244 }
245 })))
246 }
247 async _call(a, o) {
248 const r = this._requestEncodings.get(a),
249 i = this._responseEncodings.get(a),
250 c = this._rpc.request(t.get(a)),
251 n = e.encode(r, o)
252 return (c.send(n), e.decode(i, await c.reply()))
253 }
254 _callSync(a, i) {
255 const c = this._requestEncodings.get(a),
256 n = this._responseEncodings.get(a)
257 if (this._requestIsSend(a)) {
258 const o = e.encode(c, i)
259 this._rpc.event(t.get(a)).send(o)
260 }
261 const s = this._rpc.request(t.get(a))
262 if (!this._requestIsStream(a) && this._responseIsStream(a)) {
263 const a = e.encode(c, i)
264 return (s.send(a), new o(s.createResponseStream(), n))
265 }
266 return this._requestIsStream(a) && !this._responseIsStream(a)
267 ? new r(s, n, null, null, s.createRequestStream(), c)
268 : this._requestIsStream(a) && this._responseIsStream(a)
269 ? new r(s, n, s.createResponseStream(), n, s.createRequestStream(), c)
270 : void 0
271 }
272 async selfDestruct(e) {
273 return this._call("@api/self-destruct", e)
274 }
275 async boot(e) {
276 return this._call("@api/boot", e)
277 }
278 async coreCreateRoom(e) {
279 return this._call("@api/core-create-room", e)
280 }
281 coreActivateRoom(e) {
282 return this._callSync("@api/core-activate-room", e)
283 }
284 coreDeactivateRoom(e) {
285 return this._callSync("@api/core-deactivate-room", e)
286 }
287 async coreLeaveRoom(e) {
288 return this._call("@api/core-leave-room", e)
289 }
290 coreUpdateRoomConfig(e) {
291 return this._callSync("@api/core-update-room-config", e)
292 }
293 coreUpdateRoomSettings(e) {
294 return this._callSync("@api/core-update-room-settings", e)
295 }
296 coreUpdateRoomStatus(e) {
297 return this._callSync("@api/core-update-room-status", e)
298 }
299 coreUpdateProfile(e) {
300 return this._callSync("@api/core-update-profile", e)
301 }
302 async coreCreateRoomInvitation(e) {
303 return this._call("@api/core-create-room-invitation", e)
304 }
305 async coreCreateIdentityInvitation(e) {
306 return this._call("@api/core-create-identity-invitation", e)
307 }
308 async coreStartPairing(e) {
309 return this._call("@api/core-start-pairing", e)
310 }
311 async coreAcceptJoinRequest(e) {
312 return this._call("@api/core-accept-join-request", e)
313 }
314 async coreRejectJoinRequest(e) {
315 return this._call("@api/core-reject-join-request", e)
316 }
317 async coreStopPairing(e) {
318 return this._call("@api/core-stop-pairing", e)
319 }
320 async coreAddChatMessage(e) {
321 return this._call("@api/core-add-chat-message", e)
322 }
323 async coreEditChatMessage(e) {
324 return this._call("@api/core-edit-chat-message", e)
325 }
326 async coreRemoveChatMessage(e) {
327 return this._call("@api/core-remove-chat-message", e)
328 }
329 async coreAddChatReaction(e) {
330 return this._call("@api/core-add-chat-reaction", e)
331 }
332 async coreRemoveChatReaction(e) {
333 return this._call("@api/core-remove-chat-reaction", e)
334 }
335 coreWantIdentity(e) {
336 return this._callSync("@api/core-want-identity", e)
337 }
338 coreUnwantIdentity(e) {
339 return this._callSync("@api/core-unwant-identity", e)
340 }
341 coreHaveIdentity(e) {
342 return this._callSync("@api/core-have-identity", e)
343 }
344 coreIdentityReset(e) {
345 return this._callSync("@api/core-identity-reset", e)
346 }
347 coreIdentityMember(e) {
348 return this._callSync("@api/core-identity-member", e)
349 }
350 coreIdentityDevice(e) {
351 return this._callSync("@api/core-identity-device", e)
352 }
353 coreWantPairing(e) {
354 return this._callSync("@api/core-want-pairing", e)
355 }
356 coreUnwantPairing(e) {
357 return this._callSync("@api/core-unwant-pairing", e)
358 }
359 coreHavePairing(e) {
360 return this._callSync("@api/core-have-pairing", e)
361 }
362 corePairingReset(e) {
363 return this._callSync("@api/core-pairing-reset", e)
364 }
365 coreWantLobby(e) {
366 return this._callSync("@api/core-want-lobby", e)
367 }
368 coreUnwantLobby(e) {
369 return this._callSync("@api/core-unwant-lobby", e)
370 }
371 coreHaveLobby(e) {
372 return this._callSync("@api/core-have-lobby", e)
373 }
374 coreLobbyReset(e) {
375 return this._callSync("@api/core-lobby-reset", e)
376 }
377 coreLobbyRoom(e) {
378 return this._callSync("@api/core-lobby-room", e)
379 }
380 coreWantRoomInfo(e) {
381 return this._callSync("@api/core-want-room-info", e)
382 }
383 coreHaveRoomInfo(e) {
384 return this._callSync("@api/core-have-room-info", e)
385 }
386 coreRoomInfo(e) {
387 return this._callSync("@api/core-room-info", e)
388 }
389 coreRoomInfoDigest(e) {
390 return this._callSync("@api/core-room-info-digest", e)
391 }
392 coreRoomInfoConfig(e) {
393 return this._callSync("@api/core-room-info-config", e)
394 }
395 coreRoomInfoRole(e) {
396 return this._callSync("@api/core-room-info-role", e)
397 }
398 coreRoomInfoLastMessage(e) {
399 return this._callSync("@api/core-room-info-last-message", e)
400 }
401 coreWantChat(e) {
402 return this._callSync("@api/core-want-chat", e)
403 }
404 coreUnwantChat(e) {
405 return this._callSync("@api/core-unwant-chat", e)
406 }
407 coreHaveChat(e) {
408 return this._callSync("@api/core-have-chat", e)
409 }
410 coreChatReset(e) {
411 return this._callSync("@api/core-chat-reset", e)
412 }
413 coreMessageInfo(e) {
414 return this._callSync("@api/core-message-info", e)
415 }
416 coreMessageInfoChat(e) {
417 return this._callSync("@api/core-message-info-chat", e)
418 }
419 coreMessageInfoMember(e) {
420 return this._callSync("@api/core-message-info-member", e)
421 }
422 coreMessageInfoRole(e) {
423 return this._callSync("@api/core-message-info-role", e)
424 }
425 coreMessageInfoReactions(e) {
426 return this._callSync("@api/core-message-info-reactions", e)
427 }
428 coreWantMembers(e) {
429 return this._callSync("@api/core-want-members", e)
430 }
431 coreUnwantMembers(e) {
432 return this._callSync("@api/core-unwant-members", e)
433 }
434 coreHaveMembers(e) {
435 return this._callSync("@api/core-have-members", e)
436 }
437 coreMemberListAdd(e) {
438 return this._callSync("@api/core-member-list-add", e)
439 }
440 coreMemberListRemove(e) {
441 return this._callSync("@api/core-member-list-remove", e)
442 }
443 coreMember(e) {
444 return this._callSync("@api/core-member", e)
445 }
446 coreDevice(e) {
447 return this._callSync("@api/core-device", e)
448 }
449 async debugEnable(e) {
450 return this._call("@api/debug-enable", e)
451 }
452 async debugDisable(e) {
453 return this._call("@api/debug-disable", e)
454 }
455 sendLegacy(e) {
456 return this._callSync("@api/send-legacy", e)
457 }
458 onSelfDestruct(e) {
459 this._handlers["@api/self-destruct"] = e
460 }
461 onBoot(e) {
462 this._handlers["@api/boot"] = e
463 }
464 onCoreCreateRoom(e) {
465 this._handlers["@api/core-create-room"] = e
466 }
467 onCoreActivateRoom(e) {
468 this._handlers["@api/core-activate-room"] = e
469 }
470 onCoreDeactivateRoom(e) {
471 this._handlers["@api/core-deactivate-room"] = e
472 }
473 onCoreLeaveRoom(e) {
474 this._handlers["@api/core-leave-room"] = e
475 }
476 onCoreUpdateRoomConfig(e) {
477 this._handlers["@api/core-update-room-config"] = e
478 }
479 onCoreUpdateRoomSettings(e) {
480 this._handlers["@api/core-update-room-settings"] = e
481 }
482 onCoreUpdateRoomStatus(e) {
483 this._handlers["@api/core-update-room-status"] = e
484 }
485 onCoreUpdateProfile(e) {
486 this._handlers["@api/core-update-profile"] = e
487 }
488 onCoreCreateRoomInvitation(e) {
489 this._handlers["@api/core-create-room-invitation"] = e
490 }
491 onCoreCreateIdentityInvitation(e) {
492 this._handlers["@api/core-create-identity-invitation"] = e
493 }
494 onCoreStartPairing(e) {
495 this._handlers["@api/core-start-pairing"] = e
496 }
497 onCoreAcceptJoinRequest(e) {
498 this._handlers["@api/core-accept-join-request"] = e
499 }
500 onCoreRejectJoinRequest(e) {
501 this._handlers["@api/core-reject-join-request"] = e
502 }
503 onCoreStopPairing(e) {
504 this._handlers["@api/core-stop-pairing"] = e
505 }
506 onCoreAddChatMessage(e) {
507 this._handlers["@api/core-add-chat-message"] = e
508 }
509 onCoreEditChatMessage(e) {
510 this._handlers["@api/core-edit-chat-message"] = e
511 }
512 onCoreRemoveChatMessage(e) {
513 this._handlers["@api/core-remove-chat-message"] = e
514 }
515 onCoreAddChatReaction(e) {
516 this._handlers["@api/core-add-chat-reaction"] = e
517 }
518 onCoreRemoveChatReaction(e) {
519 this._handlers["@api/core-remove-chat-reaction"] = e
520 }
521 onCoreWantIdentity(e) {
522 this._handlers["@api/core-want-identity"] = e
523 }
524 onCoreUnwantIdentity(e) {
525 this._handlers["@api/core-unwant-identity"] = e
526 }
527 onCoreHaveIdentity(e) {
528 this._handlers["@api/core-have-identity"] = e
529 }
530 onCoreIdentityReset(e) {
531 this._handlers["@api/core-identity-reset"] = e
532 }
533 onCoreIdentityMember(e) {
534 this._handlers["@api/core-identity-member"] = e
535 }
536 onCoreIdentityDevice(e) {
537 this._handlers["@api/core-identity-device"] = e
538 }
539 onCoreWantPairing(e) {
540 this._handlers["@api/core-want-pairing"] = e
541 }
542 onCoreUnwantPairing(e) {
543 this._handlers["@api/core-unwant-pairing"] = e
544 }
545 onCoreHavePairing(e) {
546 this._handlers["@api/core-have-pairing"] = e
547 }
548 onCorePairingReset(e) {
549 this._handlers["@api/core-pairing-reset"] = e
550 }
551 onCoreWantLobby(e) {
552 this._handlers["@api/core-want-lobby"] = e
553 }
554 onCoreUnwantLobby(e) {
555 this._handlers["@api/core-unwant-lobby"] = e
556 }
557 onCoreHaveLobby(e) {
558 this._handlers["@api/core-have-lobby"] = e
559 }
560 onCoreLobbyReset(e) {
561 this._handlers["@api/core-lobby-reset"] = e
562 }
563 onCoreLobbyRoom(e) {
564 this._handlers["@api/core-lobby-room"] = e
565 }
566 onCoreWantRoomInfo(e) {
567 this._handlers["@api/core-want-room-info"] = e
568 }
569 onCoreHaveRoomInfo(e) {
570 this._handlers["@api/core-have-room-info"] = e
571 }
572 onCoreRoomInfo(e) {
573 this._handlers["@api/core-room-info"] = e
574 }
575 onCoreRoomInfoDigest(e) {
576 this._handlers["@api/core-room-info-digest"] = e
577 }
578 onCoreRoomInfoConfig(e) {
579 this._handlers["@api/core-room-info-config"] = e
580 }
581 onCoreRoomInfoRole(e) {
582 this._handlers["@api/core-room-info-role"] = e
583 }
584 onCoreRoomInfoLastMessage(e) {
585 this._handlers["@api/core-room-info-last-message"] = e
586 }
587 onCoreWantChat(e) {
588 this._handlers["@api/core-want-chat"] = e
589 }
590 onCoreUnwantChat(e) {
591 this._handlers["@api/core-unwant-chat"] = e
592 }
593 onCoreHaveChat(e) {
594 this._handlers["@api/core-have-chat"] = e
595 }
596 onCoreChatReset(e) {
597 this._handlers["@api/core-chat-reset"] = e
598 }
599 onCoreMessageInfo(e) {
600 this._handlers["@api/core-message-info"] = e
601 }
602 onCoreMessageInfoChat(e) {
603 this._handlers["@api/core-message-info-chat"] = e
604 }
605 onCoreMessageInfoMember(e) {
606 this._handlers["@api/core-message-info-member"] = e
607 }
608 onCoreMessageInfoRole(e) {
609 this._handlers["@api/core-message-info-role"] = e
610 }
611 onCoreMessageInfoReactions(e) {
612 this._handlers["@api/core-message-info-reactions"] = e
613 }
614 onCoreWantMembers(e) {
615 this._handlers["@api/core-want-members"] = e
616 }
617 onCoreUnwantMembers(e) {
618 this._handlers["@api/core-unwant-members"] = e
619 }
620 onCoreHaveMembers(e) {
621 this._handlers["@api/core-have-members"] = e
622 }
623 onCoreMemberListAdd(e) {
624 this._handlers["@api/core-member-list-add"] = e
625 }
626 onCoreMemberListRemove(e) {
627 this._handlers["@api/core-member-list-remove"] = e
628 }
629 onCoreMember(e) {
630 this._handlers["@api/core-member"] = e
631 }
632 onCoreDevice(e) {
633 this._handlers["@api/core-device"] = e
634 }
635 onDebugEnable(e) {
636 this._handlers["@api/debug-enable"] = e
637 }
638 onDebugDisable(e) {
639 this._handlers["@api/debug-disable"] = e
640 }
641 onSendLegacy(e) {
642 this._handlers["@api/send-legacy"] = e
643 }
644 _requestIsStream(e) {
645 return [].includes(e)
646 }
647 _responseIsStream(e) {
648 return [].includes(e)
649 }
650 _requestIsSend(e) {
651 return [
652 "@api/core-activate-room",
653 "@api/core-deactivate-room",
654 "@api/core-update-room-config",
655 "@api/core-update-room-settings",
656 "@api/core-update-room-status",
657 "@api/core-update-profile",
658 "@api/core-want-identity",
659 "@api/core-unwant-identity",
660 "@api/core-have-identity",
661 "@api/core-identity-reset",
662 "@api/core-identity-member",
663 "@api/core-identity-device",
664 "@api/core-want-pairing",
665 "@api/core-unwant-pairing",
666 "@api/core-have-pairing",
667 "@api/core-pairing-reset",
668 "@api/core-want-lobby",
669 "@api/core-unwant-lobby",
670 "@api/core-have-lobby",
671 "@api/core-lobby-reset",
672 "@api/core-lobby-room",
673 "@api/core-want-room-info",
674 "@api/core-have-room-info",
675 "@api/core-room-info",
676 "@api/core-room-info-digest",
677 "@api/core-room-info-config",
678 "@api/core-room-info-role",
679 "@api/core-room-info-last-message",
680 "@api/core-want-chat",
681 "@api/core-unwant-chat",
682 "@api/core-have-chat",
683 "@api/core-chat-reset",
684 "@api/core-message-info",
685 "@api/core-message-info-chat",
686 "@api/core-message-info-member",
687 "@api/core-message-info-role",
688 "@api/core-message-info-reactions",
689 "@api/core-want-members",
690 "@api/core-unwant-members",
691 "@api/core-have-members",
692 "@api/core-member-list-add",
693 "@api/core-member-list-remove",
694 "@api/core-member",
695 "@api/core-device",
696 "@api/send-legacy",
697 ].includes(e)
698 }
699}
700module.exports = c
keet-core-4.14.4-pretty/schema/spec/api/hrpc/messages.js +6234 -0
……@@ -0,0 +1,6234 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 6
3let o = 6
4const n = {
5 preencode(d, o) {
6 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.length))
7 },
8 encode(d, o) {
9 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.length))
10 },
11 decode: (d) => ({ key: e.fixed32.decode(d), length: e.uint.decode(d) }),
12 },
13 c = {
14 preencode(d, o) {
15 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.seq))
16 },
17 encode(d, o) {
18 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.seq))
19 },
20 decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
21 },
22 r = {
23 preencode(d, o) {
24 ;(e.fixed32.preencode(d, o.publicKey), e.fixed32.preencode(d, o.secretKey))
25 },
26 encode(d, o) {
27 ;(e.fixed32.encode(d, o.publicKey), e.fixed32.encode(d, o.secretKey))
28 },
29 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed32.decode(d) }),
30 },
31 t = {
32 preencode(d, o) {
33 ;(e.fixed32.preencode(d, o.publicKey), e.fixed64.preencode(d, o.secretKey))
34 },
35 encode(d, o) {
36 ;(e.fixed32.encode(d, o.publicKey), e.fixed64.encode(d, o.secretKey))
37 },
38 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed64.decode(d) }),
39 },
40 i = {
41 preencode(d, o) {
42 ;(e.fixed32.preencode(d, o.key),
43 d.end++,
44 o.encryptionKey && e.buffer.preencode(d, o.encryptionKey),
45 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
46 },
47 encode(d, o) {
48 const n = (o.encryptionKey ? 1 : 0) | (o.fastForwardTo ? 2 : 0)
49 ;(e.fixed32.encode(d, o.key),
50 e.uint.encode(d, n),
51 o.encryptionKey && e.buffer.encode(d, o.encryptionKey),
52 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
53 },
54 decode(d) {
55 const o = e.fixed32.decode(d),
56 n = e.uint.decode(d)
57 return {
58 key: o,
59 encryptionKey: 1 & n ? e.buffer.decode(d) : null,
60 fastForwardTo: 2 & n ? e.fixed32.decode(d) : null,
61 }
62 },
63 },
64 a = {
65 preencode(d, o) {
66 e.uint.preencode(d, o.timestamp)
67 },
68 encode(d, o) {
69 e.uint.encode(d, o.timestamp)
70 },
71 decode: (d) => ({ timestamp: e.uint.decode(d) }),
72 },
73 s = {
74 preencode(d, o) {
75 ;(e.uint.preencode(d, o.blockOffset),
76 e.uint.preencode(d, o.blockLength),
77 e.uint.preencode(d, o.byteOffset),
78 e.uint.preencode(d, o.byteLength))
79 },
80 encode(d, o) {
81 ;(e.uint.encode(d, o.blockOffset),
82 e.uint.encode(d, o.blockLength),
83 e.uint.encode(d, o.byteOffset),
84 e.uint.encode(d, o.byteLength))
85 },
86 decode: (d) => ({
87 blockOffset: e.uint.decode(d),
88 blockLength: e.uint.decode(d),
89 byteOffset: e.uint.decode(d),
90 byteLength: e.uint.decode(d),
91 }),
92 },
93 p = {
94 preencode(d, o) {
95 ;(e.uint.preencode(d, o.width), e.uint.preencode(d, o.height))
96 },
97 encode(d, o) {
98 ;(e.uint.encode(d, o.width), e.uint.encode(d, o.height))
99 },
100 decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
101 },
102 u = e.frame(p),
103 l = {
104 preencode(d, o) {
105 ;(d.end++,
106 o.name && e.string.preencode(d, o.name),
107 o.mimetype && e.string.preencode(d, o.mimetype),
108 o.dimensions && u.preencode(d, o.dimensions),
109 o.userdata && e.buffer.preencode(d, o.userdata),
110 o.duration && e.uint.preencode(d, o.duration))
111 },
112 encode(d, o) {
113 const n =
114 (o.name ? 1 : 0) |
115 (o.mimetype ? 2 : 0) |
116 (o.dimensions ? 4 : 0) |
117 (o.userdata ? 8 : 0) |
118 (o.duration ? 16 : 0) |
119 (o.isPreview ? 32 : 0)
120 ;(e.uint.encode(d, n),
121 o.name && e.string.encode(d, o.name),
122 o.mimetype && e.string.encode(d, o.mimetype),
123 o.dimensions && u.encode(d, o.dimensions),
124 o.userdata && e.buffer.encode(d, o.userdata),
125 o.duration && e.uint.encode(d, o.duration))
126 },
127 decode(d) {
128 const o = e.uint.decode(d)
129 return {
130 name: 1 & o ? e.string.decode(d) : null,
131 mimetype: 2 & o ? e.string.decode(d) : null,
132 dimensions: 4 & o ? u.decode(d) : null,
133 userdata: 8 & o ? e.buffer.decode(d) : null,
134 duration: 16 & o ? e.uint.decode(d) : 0,
135 isPreview: !!(32 & o),
136 }
137 },
138 },
139 f = {
140 preencode(d, o) {
141 ;(e.fixed32.preencode(d, o.key),
142 e.string.preencode(d, o.path),
143 e.uint.preencode(d, o.version),
144 e.uint.preencode(d, o.size))
145 },
146 encode(d, o) {
147 ;(e.fixed32.encode(d, o.key),
148 e.string.encode(d, o.path),
149 e.uint.encode(d, o.version),
150 e.uint.encode(d, o.size))
151 },
152 decode: (d) => ({
153 key: e.fixed32.decode(d),
154 path: e.string.decode(d),
155 version: e.uint.decode(d),
156 size: e.uint.decode(d),
157 }),
158 },
159 m = {
160 preencode(d, o) {
161 ;(e.fixed32.preencode(d, o.key), s.preencode(d, o.blob))
162 },
163 encode(d, o) {
164 ;(e.fixed32.encode(d, o.key), s.encode(d, o.blob))
165 },
166 decode: (d) => ({ key: e.fixed32.decode(d), blob: s.decode(d) }),
167 },
168 y = e.frame(m),
169 x = e.frame(f),
170 b = {
171 preencode(d, o) {
172 ;(d.end++,
173 o.inlined && e.buffer.preencode(d, o.inlined),
174 o.blob && s.preencode(d, o.blob),
175 o.externalBlob && y.preencode(d, o.externalBlob),
176 o.externalDrive && x.preencode(d, o.externalDrive))
177 },
178 encode(d, o) {
179 const n =
180 (o.inlined ? 1 : 0) |
181 (o.blob ? 2 : 0) |
182 (o.externalBlob ? 4 : 0) |
183 (o.externalDrive ? 8 : 0)
184 ;(e.uint.encode(d, n),
185 o.inlined && e.buffer.encode(d, o.inlined),
186 o.blob && s.encode(d, o.blob),
187 o.externalBlob && y.encode(d, o.externalBlob),
188 o.externalDrive && x.encode(d, o.externalDrive))
189 },
190 decode(d) {
191 const o = e.uint.decode(d)
192 return {
193 inlined: 1 & o ? e.buffer.decode(d) : null,
194 blob: 2 & o ? s.decode(d) : null,
195 externalBlob: 4 & o ? y.decode(d) : null,
196 externalDrive: 8 & o ? x.decode(d) : null,
197 }
198 },
199 },
200 v = e.frame(b),
201 g = e.frame(l),
202 k = {
203 preencode(d, o) {
204 ;(v.preencode(d, o.pointer),
205 d.end++,
206 o.metadata && g.preencode(d, o.metadata),
207 o.preview && Op.preencode(d, o.preview),
208 o.hash && e.fixed32.preencode(d, o.hash))
209 },
210 encode(d, o) {
211 const n = (o.metadata ? 1 : 0) | (o.preview ? 2 : 0) | (o.hash ? 4 : 0)
212 ;(v.encode(d, o.pointer),
213 e.uint.encode(d, n),
214 o.metadata && g.encode(d, o.metadata),
215 o.preview && Op.encode(d, o.preview),
216 o.hash && e.fixed32.encode(d, o.hash))
217 },
218 decode(d) {
219 const o = v.decode(d),
220 n = e.uint.decode(d)
221 return {
222 pointer: o,
223 metadata: 1 & n ? g.decode(d) : null,
224 preview: 2 & n ? Op.decode(d) : null,
225 hash: 4 & n ? e.fixed32.decode(d) : null,
226 }
227 },
228 },
229 h = e.frame(k),
230 K = h,
231 w = h,
232 P = {
233 preencode(e, d) {
234 ;(e.end++,
235 d.small && h.preencode(e, d.small),
236 d.medium && K.preencode(e, d.medium),
237 d.large && w.preencode(e, d.large))
238 },
239 encode(d, o) {
240 const n = (o.small ? 1 : 0) | (o.medium ? 2 : 0) | (o.large ? 4 : 0)
241 ;(e.uint.encode(d, n),
242 o.small && h.encode(d, o.small),
243 o.medium && K.encode(d, o.medium),
244 o.large && w.encode(d, o.large))
245 },
246 decode(d) {
247 const o = e.uint.decode(d)
248 return {
249 small: 1 & o ? h.decode(d) : null,
250 medium: 2 & o ? K.decode(d) : null,
251 large: 4 & o ? w.decode(d) : null,
252 }
253 },
254 },
255 R = {
256 preencode(e, d) {
257 e.end++
258 },
259 encode(d, o) {
260 const n = o.isDeleted ? 1 : 0
261 e.uint.encode(d, n)
262 },
263 decode: (d) => ({ isDeleted: !!(1 & e.uint.decode(d)) }),
264 },
265 T = e.frame(R),
266 A = h,
267 q = {
268 preencode(d, o) {
269 ;(e.uint.preencode(d, o.id),
270 c.preencode(d, o.oplog),
271 T.preencode(d, o.status),
272 A.preencode(d, o.file),
273 d.end++,
274 o.version && e.uint.preencode(d, o.version))
275 },
276 encode(d, o) {
277 const n = o.version ? 1 : 0
278 ;(e.uint.encode(d, o.id),
279 c.encode(d, o.oplog),
280 T.encode(d, o.status),
281 A.encode(d, o.file),
282 e.uint.encode(d, n),
283 o.version && e.uint.encode(d, o.version))
284 },
285 decode: (d) => ({
286 id: e.uint.decode(d),
287 oplog: c.decode(d),
288 status: T.decode(d),
289 file: A.decode(d),
290 version: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
291 }),
292 },
293 M = {
294 preencode(e, d) {
295 e.end++
296 },
297 encode(d, o) {
298 const n = (o.isActive ? 1 : 0) | (o.isIndexing ? 2 : 0)
299 e.uint.encode(d, n)
300 },
301 decode(d) {
302 const o = e.uint.decode(d)
303 return { isActive: !!(1 & o), isIndexing: !!(2 & o) }
304 },
305 },
306 C = {
307 preencode(d, o) {
308 const n =
309 (o.isAdmin ? 1 : 0) |
310 (o.isModerator ? 2 : 0) |
311 (o.isPending ? 4 : 0) |
312 (o.isActive ? 8 : 0) |
313 (o.isMuted ? 16 : 0) |
314 (o.isBanned ? 32 : 0) |
315 (o.isShadowBanned ? 64 : 0) |
316 (o.isRemoved ? 128 : 0)
317 e.uint.preencode(d, n)
318 },
319 encode(d, o) {
320 const n =
321 (o.isAdmin ? 1 : 0) |
322 (o.isModerator ? 2 : 0) |
323 (o.isPending ? 4 : 0) |
324 (o.isActive ? 8 : 0) |
325 (o.isMuted ? 16 : 0) |
326 (o.isBanned ? 32 : 0) |
327 (o.isShadowBanned ? 64 : 0) |
328 (o.isRemoved ? 128 : 0)
329 e.uint.encode(d, n)
330 },
331 decode(d) {
332 const o = e.uint.decode(d)
333 return {
334 isAdmin: !!(1 & o),
335 isModerator: !!(2 & o),
336 isPending: !!(4 & o),
337 isActive: !!(8 & o),
338 isMuted: !!(16 & o),
339 isBanned: !!(32 & o),
340 isShadowBanned: !!(64 & o),
341 isRemoved: !!(128 & o),
342 }
343 },
344 },
345 D = {
346 preencode(e, d) {
347 e.end++
348 },
349 encode(d, o) {
350 const n = (o.isMuted ? 1 : 0) | (o.isBanned ? 2 : 0) | (o.isShadowBanned ? 4 : 0)
351 e.uint.encode(d, n)
352 },
353 decode(d) {
354 const o = e.uint.decode(d)
355 return { isMuted: !!(1 & o), isBanned: !!(2 & o), isShadowBanned: !!(4 & o) }
356 },
357 },
358 I = {
359 preencode(d, o) {
360 e.uint.preencode(d, o.version)
361 },
362 encode(d, o) {
363 e.uint.encode(d, o.version)
364 },
365 decode: (d) => ({ version: e.uint.decode(d) }),
366 },
367 S = {
368 preencode(d, o) {
369 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active))
370 },
371 encode(d, o) {
372 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active))
373 },
374 decode: (d) => ({ total: e.uint.decode(d), active: e.uint.decode(d) }),
375 },
376 F = {
377 preencode(d, o) {
378 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active), e.uint.preencode(d, o.pending))
379 },
380 encode(d, o) {
381 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active), e.uint.encode(d, o.pending))
382 },
383 decode: (d) => ({
384 total: e.uint.decode(d),
385 active: e.uint.decode(d),
386 pending: e.uint.decode(d),
387 }),
388 },
389 L = {
390 preencode(d, o) {
391 ;(e.uint.preencode(d, o.clock),
392 e.uint.preencode(d, o.pinned),
393 e.uint.preencode(d, o.threads),
394 e.uint.preencode(d, o.timestamp),
395 d.end++,
396 o.flagsClock && e.uint.preencode(d, o.flagsClock))
397 },
398 encode(d, o) {
399 const n = o.flagsClock ? 1 : 0
400 ;(e.uint.encode(d, o.clock),
401 e.uint.encode(d, o.pinned),
402 e.uint.encode(d, o.threads),
403 e.uint.encode(d, o.timestamp),
404 e.uint.encode(d, n),
405 o.flagsClock && e.uint.encode(d, o.flagsClock))
406 },
407 decode: (d) => ({
408 clock: e.uint.decode(d),
409 pinned: e.uint.decode(d),
410 threads: e.uint.decode(d),
411 timestamp: e.uint.decode(d),
412 flagsClock: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
413 }),
414 },
415 j = {
416 preencode(d, o) {
417 e.uint.preencode(d, o.clock)
418 },
419 encode(d, o) {
420 e.uint.encode(d, o.clock)
421 },
422 decode: (d) => ({ clock: e.uint.decode(d) }),
423 },
424 E = e.frame(S),
425 B = e.frame(F),
426 N = e.frame(L),
427 O = e.frame(j),
428 V = {
429 preencode(e, d) {
430 ;(E.preencode(e, d.devices),
431 B.preencode(e, d.members),
432 N.preencode(e, d.chat),
433 O.preencode(e, d.files))
434 },
435 encode(e, d) {
436 ;(E.encode(e, d.devices), B.encode(e, d.members), N.encode(e, d.chat), O.encode(e, d.files))
437 },
438 decode: (e) => ({
439 devices: E.decode(e),
440 members: B.decode(e),
441 chat: N.decode(e),
442 files: O.decode(e),
443 }),
444 },
445 U = { Default: 1, Broadcast: 2, DirectMessage: 3 },
446 J = {
447 preencode(e, d) {
448 e.end++
449 },
450 encode(d, o) {
451 if (o > 3) throw new Error("Unknown enum")
452 e.uint.encode(d, o)
453 },
454 decode: (d) => e.uint.decode(d),
455 },
456 z = {
457 preencode(d, n) {
458 const c =
459 (n.roomType ? 1 : 0) |
460 (n.isExperimental ? 2 : 0) |
461 (n.isJoiningDisabled ? 4 : 0) |
462 (n.isAppendingDisabled ? 8 : 0) |
463 (n.isCallingDisabled ? 16 : 0) |
464 (n.isMembershipEventsDisabled ? 32 : 0) |
465 (o >= 4 && n.isAttachmentsDisabled ? 64 : 0) |
466 (o >= 4 && n.isLinksDisabled ? 128 : 0) |
467 (o >= 5 && n.buildType ? 256 : 0)
468 ;(e.uint.preencode(d, c),
469 n.roomType && J.preencode(d, n.roomType),
470 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
471 },
472 encode(d, n) {
473 const c =
474 (n.roomType ? 1 : 0) |
475 (n.isExperimental ? 2 : 0) |
476 (n.isJoiningDisabled ? 4 : 0) |
477 (n.isAppendingDisabled ? 8 : 0) |
478 (n.isCallingDisabled ? 16 : 0) |
479 (n.isMembershipEventsDisabled ? 32 : 0) |
480 (o >= 4 && n.isAttachmentsDisabled ? 64 : 0) |
481 (o >= 4 && n.isLinksDisabled ? 128 : 0) |
482 (o >= 5 && n.buildType ? 256 : 0)
483 ;(e.uint.encode(d, c),
484 n.roomType && J.encode(d, n.roomType),
485 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
486 },
487 decode(d) {
488 const n = e.uint.decode(d)
489 return {
490 roomType: 1 & n ? J.decode(d) : 0,
491 isExperimental: !!(2 & n),
492 isJoiningDisabled: !!(4 & n),
493 isAppendingDisabled: !!(8 & n),
494 isCallingDisabled: !!(16 & n),
495 isMembershipEventsDisabled: !!(32 & n),
496 isAttachmentsDisabled: o >= 4 && !!(64 & n),
497 isLinksDisabled: o >= 4 && !!(128 & n),
498 buildType: o >= 5 && 256 & n ? Fp.decode(d) : null,
499 }
500 },
501 },
502 W = e.frame(I),
503 H = e.frame(z),
504 G = {
505 preencode(d, o) {
506 ;(W.preencode(d, o.abi), H.preencode(d, o.settings), e.uint.preencode(d, o.creationTime))
507 },
508 encode(d, o) {
509 ;(W.encode(d, o.abi), H.encode(d, o.settings), e.uint.encode(d, o.creationTime))
510 },
511 decode: (d) => ({ abi: W.decode(d), settings: H.decode(d), creationTime: e.uint.decode(d) }),
512 },
513 Q = {
514 preencode(d, o) {
515 e.fixed32.preencode(d, o.seed)
516 },
517 encode(d, o) {
518 e.fixed32.encode(d, o.seed)
519 },
520 decode: (d) => ({ seed: e.fixed32.decode(d) }),
521 },
522 X = {
523 preencode(d, o) {
524 ;(r.preencode(d, o.mailboxKeyPair),
525 t.preencode(d, o.discoveryKeyPair),
526 e.fixed32.preencode(d, o.wakeupTopic),
527 e.fixed32.preencode(d, o.swarmTopic))
528 },
529 encode(d, o) {
530 ;(r.encode(d, o.mailboxKeyPair),
531 t.encode(d, o.discoveryKeyPair),
532 e.fixed32.encode(d, o.wakeupTopic),
533 e.fixed32.encode(d, o.swarmTopic))
534 },
535 decode: (d) => ({
536 mailboxKeyPair: r.decode(d),
537 discoveryKeyPair: t.decode(d),
538 wakeupTopic: e.fixed32.decode(d),
539 swarmTopic: e.fixed32.decode(d),
540 }),
541 },
542 Y = { en: "en", it: "it", ru: "ru", es: "es", de: "de" },
543 Z = {
544 preencode(e, d) {
545 e.end++
546 },
547 encode(d, o) {
548 switch (o) {
549 case "en":
550 e.uint.encode(d, 1)
551 break
552 case "it":
553 e.uint.encode(d, 2)
554 break
555 case "ru":
556 e.uint.encode(d, 3)
557 break
558 case "es":
559 e.uint.encode(d, 4)
560 break
561 case "de":
562 e.uint.encode(d, 5)
563 break
564 default:
565 throw new Error("Unknown enum")
566 }
567 },
568 decode(d) {
569 switch (e.uint.decode(d)) {
570 case 1:
571 return "en"
572 case 2:
573 return "it"
574 case 3:
575 return "ru"
576 case 4:
577 return "es"
578 case 5:
579 return "de"
580 default:
581 return null
582 }
583 },
584 },
585 $ = e.array(Z),
586 _ = e.array(e.fixed32),
587 ee = {
588 preencode(d, o) {
589 ;(d.end++,
590 o.title && e.string.preencode(d, o.title),
591 o.avatar && Vp.preencode(d, o.avatar),
592 o.description && e.string.preencode(d, o.description),
593 o.supportedLanguages && $.preencode(d, o.supportedLanguages),
594 o.blindPeers && _.preencode(d, o.blindPeers))
595 },
596 encode(d, o) {
597 const n =
598 (o.title ? 1 : 0) |
599 (o.avatar ? 2 : 0) |
600 (o.description ? 4 : 0) |
601 (o.supportedLanguages ? 8 : 0) |
602 (o.blindPeers ? 16 : 0)
603 ;(e.uint.encode(d, n),
604 o.title && e.string.encode(d, o.title),
605 o.avatar && Vp.encode(d, o.avatar),
606 o.description && e.string.encode(d, o.description),
607 o.supportedLanguages && $.encode(d, o.supportedLanguages),
608 o.blindPeers && _.encode(d, o.blindPeers))
609 },
610 decode(d) {
611 const o = e.uint.decode(d)
612 return {
613 title: 1 & o ? e.string.decode(d) : null,
614 avatar: 2 & o ? Vp.decode(d) : null,
615 description: 4 & o ? e.string.decode(d) : null,
616 supportedLanguages: 8 & o ? $.decode(d) : null,
617 blindPeers: 16 & o ? _.decode(d) : null,
618 }
619 },
620 },
621 de = {
622 preencode(d, o) {
623 e.fixed32.preencode(d, o.key)
624 },
625 encode(d, o) {
626 e.fixed32.encode(d, o.key)
627 },
628 decode: (d) => ({ key: e.fixed32.decode(d) }),
629 },
630 oe = e.frame(a),
631 ne = e.frame(de),
632 ce = {
633 preencode(e, d) {
634 ;(oe.preencode(e, d.header), ne.preencode(e, d.peer))
635 },
636 encode(e, d) {
637 ;(oe.encode(e, d.header), ne.encode(e, d.peer))
638 },
639 decode: (e) => ({ header: oe.decode(e), peer: ne.decode(e) }),
640 },
641 re = oe,
642 te = {
643 preencode(d, o) {
644 ;(re.preencode(d, o.header), e.fixed32.preencode(d, o.key))
645 },
646 encode(d, o) {
647 ;(re.encode(d, o.header), e.fixed32.encode(d, o.key))
648 },
649 decode: (d) => ({ header: re.decode(d), key: e.fixed32.decode(d) }),
650 },
651 ie = {
652 preencode(d, o) {
653 ;(e.fixed32.preencode(d, o.memberKey), e.buffer.preencode(d, o.proof))
654 },
655 encode(d, o) {
656 ;(e.fixed32.encode(d, o.memberKey), e.buffer.encode(d, o.proof))
657 },
658 decode: (d) => ({ memberKey: e.fixed32.decode(d), proof: e.buffer.decode(d) }),
659 },
660 ae = {
661 preencode(d, o) {
662 ;(e.fixed32.preencode(d, o.id), e.buffer.preencode(d, o.response))
663 },
664 encode(d, o) {
665 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.response))
666 },
667 decode: (d) => ({ id: e.fixed32.decode(d), response: e.buffer.decode(d) }),
668 },
669 se = e.frame(M),
670 pe = e.frame(ae),
671 ue = {
672 preencode(d, o) {
673 ;(e.fixed32.preencode(d, o.key),
674 e.fixed32.preencode(d, o.memberKey),
675 se.preencode(d, o.status),
676 Up.preencode(d, o.profile),
677 d.end++,
678 o.invitation && pe.preencode(d, o.invitation))
679 },
680 encode(d, o) {
681 const n = o.invitation ? 1 : 0
682 ;(e.fixed32.encode(d, o.key),
683 e.fixed32.encode(d, o.memberKey),
684 se.encode(d, o.status),
685 Up.encode(d, o.profile),
686 e.uint.encode(d, n),
687 o.invitation && pe.encode(d, o.invitation))
688 },
689 decode: (d) => ({
690 key: e.fixed32.decode(d),
691 memberKey: e.fixed32.decode(d),
692 status: se.decode(d),
693 profile: Up.decode(d),
694 invitation: 1 & e.uint.decode(d) ? pe.decode(d) : null,
695 }),
696 },
697 le = {
698 preencode(d, o) {
699 ;(e.uint.preencode(d, o.timestamp),
700 d.end++,
701 o.mailbox && e.fixed32.preencode(d, o.mailbox),
702 o.displayName && e.string.preencode(d, o.displayName),
703 o.avatar && Jp.preencode(d, o.avatar),
704 o.username && e.string.preencode(d, o.username))
705 },
706 encode(d, o) {
707 const n =
708 (o.mailbox ? 1 : 0) | (o.displayName ? 2 : 0) | (o.avatar ? 4 : 0) | (o.username ? 8 : 0)
709 ;(e.uint.encode(d, o.timestamp),
710 e.uint.encode(d, n),
711 o.mailbox && e.fixed32.encode(d, o.mailbox),
712 o.displayName && e.string.encode(d, o.displayName),
713 o.avatar && Jp.encode(d, o.avatar),
714 o.username && e.string.encode(d, o.username))
715 },
716 decode(d) {
717 const o = e.uint.decode(d),
718 n = e.uint.decode(d)
719 return {
720 timestamp: o,
721 mailbox: 1 & n ? e.fixed32.decode(d) : null,
722 displayName: 2 & n ? e.string.decode(d) : null,
723 avatar: 4 & n ? Jp.decode(d) : null,
724 username: 8 & n ? e.string.decode(d) : null,
725 }
726 },
727 },
728 fe = {
729 preencode(d, n) {
730 ;(d.end++,
731 n.swarmKey && e.fixed32.preencode(d, n.swarmKey),
732 n.name && e.string.preencode(d, n.name),
733 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
734 },
735 encode(d, n) {
736 const c =
737 (n.swarmKey ? 1 : 0) |
738 (n.name ? 2 : 0) |
739 (n.isMobile ? 4 : 0) |
740 (o >= 5 && n.buildType ? 8 : 0)
741 ;(e.uint.encode(d, c),
742 n.swarmKey && e.fixed32.encode(d, n.swarmKey),
743 n.name && e.string.encode(d, n.name),
744 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
745 },
746 decode(d) {
747 const n = e.uint.decode(d)
748 return {
749 swarmKey: 1 & n ? e.fixed32.decode(d) : null,
750 name: 2 & n ? e.string.decode(d) : null,
751 isMobile: !!(4 & n),
752 buildType: o >= 5 && 8 & n ? Fp.decode(d) : null,
753 }
754 },
755 },
756 me = e.frame(le),
757 ye = {
758 preencode(e, d) {
759 ;(me.preencode(e, d.profile), ie.preencode(e, d.attestation))
760 },
761 encode(e, d) {
762 ;(me.encode(e, d.profile), ie.encode(e, d.attestation))
763 },
764 decode: (e) => ({ profile: me.decode(e), attestation: ie.decode(e) }),
765 },
766 xe = {
767 preencode(e, d) {
768 ;(zp.preencode(e, d.profile), ie.preencode(e, d.attestation))
769 },
770 encode(e, d) {
771 ;(zp.encode(e, d.profile), ie.encode(e, d.attestation))
772 },
773 decode: (e) => ({ profile: zp.decode(e), attestation: ie.decode(e) }),
774 },
775 be = me,
776 ve = {
777 preencode(e, d) {
778 ;(be.preencode(e, d.profile), ie.preencode(e, d.attestation))
779 },
780 encode(e, d) {
781 ;(be.encode(e, d.profile), ie.encode(e, d.attestation))
782 },
783 decode: (e) => ({ profile: be.decode(e), attestation: ie.decode(e) }),
784 },
785 ge = {
786 preencode(d, o) {
787 ;(e.fixed32.preencode(d, o.id),
788 e.buffer.preencode(d, o.data),
789 e.buffer.preencode(d, o.signature))
790 },
791 encode(d, o) {
792 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.data), e.buffer.encode(d, o.signature))
793 },
794 decode: (d) => ({
795 id: e.fixed32.decode(d),
796 data: e.buffer.decode(d),
797 signature: e.buffer.decode(d),
798 }),
799 },
800 ke = {
801 preencode(d, o) {
802 e.fixed32.preencode(d, o.devicePublicKey)
803 },
804 encode(d, o) {
805 e.fixed32.encode(d, o.devicePublicKey)
806 },
807 decode: (d) => ({ devicePublicKey: e.fixed32.decode(d) }),
808 },
809 he = {
810 preencode(d, o) {
811 ;(ie.preencode(d, o.privateProfileIdentity), e.buffer.preencode(d, o.deviceProof))
812 },
813 encode(d, o) {
814 ;(ie.encode(d, o.privateProfileIdentity), e.buffer.encode(d, o.deviceProof))
815 },
816 decode: (d) => ({ privateProfileIdentity: ie.decode(d), deviceProof: e.buffer.decode(d) }),
817 },
818 Ke = {
819 preencode(d, o) {
820 ;(e.fixed32.preencode(d, o.deviceKey),
821 ie.preencode(d, o.privateProfileIdentity),
822 e.buffer.preencode(d, o.deviceProof))
823 },
824 encode(d, o) {
825 ;(e.fixed32.encode(d, o.deviceKey),
826 ie.encode(d, o.privateProfileIdentity),
827 e.buffer.encode(d, o.deviceProof))
828 },
829 decode: (d) => ({
830 deviceKey: e.fixed32.decode(d),
831 privateProfileIdentity: ie.decode(d),
832 deviceProof: e.buffer.decode(d),
833 }),
834 },
835 we = e.frame(xe),
836 Pe = e.frame(ye),
837 Re = e.frame(ke),
838 Te = {
839 preencode(d, o) {
840 ;(e.fixed32.preencode(d, o.deviceKey),
841 t.preencode(d, o.keyPair),
842 we.preencode(d, o.device),
843 Pe.preencode(d, o.member),
844 d.end++,
845 o.identity && Re.preencode(d, o.identity))
846 },
847 encode(d, o) {
848 const n = o.identity ? 1 : 0
849 ;(e.fixed32.encode(d, o.deviceKey),
850 t.encode(d, o.keyPair),
851 we.encode(d, o.device),
852 Pe.encode(d, o.member),
853 e.uint.encode(d, n),
854 o.identity && Re.encode(d, o.identity))
855 },
856 decode: (d) => ({
857 deviceKey: e.fixed32.decode(d),
858 keyPair: t.decode(d),
859 device: we.decode(d),
860 member: Pe.decode(d),
861 identity: 1 & e.uint.decode(d) ? Re.decode(d) : null,
862 }),
863 },
864 Ae = e.frame(Te),
865 qe = {
866 preencode(d, o) {
867 ;(e.fixed32.preencode(d, o.id),
868 Ae.preencode(d, o.request),
869 e.buffer.preencode(d, o.signature))
870 },
871 encode(d, o) {
872 ;(e.fixed32.encode(d, o.id), Ae.encode(d, o.request), e.buffer.encode(d, o.signature))
873 },
874 decode: (d) => ({
875 id: e.fixed32.decode(d),
876 request: Ae.decode(d),
877 signature: e.buffer.decode(d),
878 }),
879 },
880 Me = we,
881 Ce = Pe,
882 De = {
883 preencode(e, d) {
884 ;(Me.preencode(e, d.device), e.end++, d.member && Ce.preencode(e, d.member))
885 },
886 encode(d, o) {
887 const n = o.member ? 1 : 0
888 ;(Me.encode(d, o.device), e.uint.encode(d, n), o.member && Ce.encode(d, o.member))
889 },
890 decode: (d) => ({ device: Me.decode(d), member: 1 & e.uint.decode(d) ? Ce.decode(d) : null }),
891 },
892 Ie = e.frame(qe),
893 Se = e.frame(De),
894 Fe = {
895 preencode(e, d) {
896 ;(e.end++,
897 d.withInvitation && Ie.preencode(e, d.withInvitation),
898 d.withMemberProof && Se.preencode(e, d.withMemberProof))
899 },
900 encode(d, o) {
901 const n = (o.withInvitation ? 1 : 0) | (o.withMemberProof ? 2 : 0)
902 ;(e.uint.encode(d, n),
903 o.withInvitation && Ie.encode(d, o.withInvitation),
904 o.withMemberProof && Se.encode(d, o.withMemberProof))
905 },
906 decode(d) {
907 const o = e.uint.decode(d)
908 return {
909 withInvitation: 1 & o ? Ie.decode(d) : null,
910 withMemberProof: 2 & o ? Se.decode(d) : null,
911 }
912 },
913 },
914 Le = e.frame(ge),
915 je = e.frame(he),
916 Ee = {
917 preencode(e, d) {
918 ;(Le.preencode(e, d.signedKeys), e.end++, d.identity && je.preencode(e, d.identity))
919 },
920 encode(d, o) {
921 const n = o.identity ? 1 : 0
922 ;(Le.encode(d, o.signedKeys), e.uint.encode(d, n), o.identity && je.encode(d, o.identity))
923 },
924 decode: (d) => ({
925 signedKeys: Le.decode(d),
926 identity: 1 & e.uint.decode(d) ? je.decode(d) : null,
927 }),
928 },
929 Be = {
930 preencode(d, n) {
931 ;(d.end++,
932 n.expiration && e.uint.preencode(d, n.expiration),
933 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
934 },
935 encode(d, n) {
936 const c =
937 (n.expiration ? 1 : 0) |
938 (n.requiresConfirmation ? 2 : 0) |
939 (n.canModerate ? 4 : 0) |
940 (n.canAdmin ? 8 : 0) |
941 (o >= 5 && n.buildType ? 16 : 0)
942 ;(e.uint.encode(d, c),
943 n.expiration && e.uint.encode(d, n.expiration),
944 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
945 },
946 decode(d) {
947 const n = e.uint.decode(d)
948 return {
949 expiration: 1 & n ? e.uint.decode(d) : 0,
950 requiresConfirmation: !!(2 & n),
951 canModerate: !!(4 & n),
952 canAdmin: !!(8 & n),
953 buildType: o >= 5 && 16 & n ? Fp.decode(d) : null,
954 }
955 },
956 },
957 Ne = Le,
958 Oe = e.frame(Be),
959 Ve = {
960 preencode(d, o) {
961 ;(e.fixed32.preencode(d, o.id),
962 Ne.preencode(d, o.response),
963 Oe.preencode(d, o.metadata),
964 d.end++,
965 o.anchor && n.preencode(d, o.anchor))
966 },
967 encode(d, o) {
968 const c = (o.anchor ? 1 : 0) | (o.isActive ? 2 : 0)
969 ;(e.fixed32.encode(d, o.id),
970 Ne.encode(d, o.response),
971 Oe.encode(d, o.metadata),
972 e.uint.encode(d, c),
973 o.anchor && n.encode(d, o.anchor))
974 },
975 decode(d) {
976 const o = e.fixed32.decode(d),
977 c = Ne.decode(d),
978 r = Oe.decode(d),
979 t = e.uint.decode(d)
980 return {
981 id: o,
982 response: c,
983 metadata: r,
984 anchor: 1 & t ? n.decode(d) : null,
985 isActive: !!(2 & t),
986 }
987 },
988 },
989 Ue = oe,
990 Je = e.frame(Ve),
991 ze = {
992 preencode(e, d) {
993 ;(Ue.preencode(e, d.header), Je.preencode(e, d.invitation))
994 },
995 encode(e, d) {
996 ;(Ue.encode(e, d.header), Je.encode(e, d.invitation))
997 },
998 decode: (e) => ({ header: Ue.decode(e), invitation: Je.decode(e) }),
999 },
1000 We = oe,
1001 He = {
1002 preencode(d, o) {
1003 ;(We.preencode(d, o.header), e.fixed32.preencode(d, o.id))
1004 },
1005 encode(d, o) {
1006 ;(We.encode(d, o.header), e.fixed32.encode(d, o.id))
1007 },
1008 decode: (d) => ({ header: We.decode(d), id: e.fixed32.decode(d) }),
1009 },
1010 Ge = {
1011 preencode(d, o) {
1012 ;(e.fixed32.preencode(d, o.mailbox),
1013 e.fixed32.preencode(d, o.invitationSeed),
1014 n.preencode(d, o.anchor))
1015 },
1016 encode(d, o) {
1017 ;(e.fixed32.encode(d, o.mailbox),
1018 e.fixed32.encode(d, o.invitationSeed),
1019 n.encode(d, o.anchor))
1020 },
1021 decode: (d) => ({
1022 mailbox: e.fixed32.decode(d),
1023 invitationSeed: e.fixed32.decode(d),
1024 anchor: n.decode(d),
1025 }),
1026 },
1027 Qe = {
1028 preencode(d, o) {
1029 ;(e.fixed32.preencode(d, o.roomKey),
1030 e.fixed32.preencode(d, o.encryptionKey),
1031 e.fixed32.preencode(d, o.seed),
1032 d.end++,
1033 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
1034 },
1035 encode(d, o) {
1036 const n = o.fastForwardTo ? 1 : 0
1037 ;(e.fixed32.encode(d, o.roomKey),
1038 e.fixed32.encode(d, o.encryptionKey),
1039 e.fixed32.encode(d, o.seed),
1040 e.uint.encode(d, n),
1041 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
1042 },
1043 decode: (d) => ({
1044 roomKey: e.fixed32.decode(d),
1045 encryptionKey: e.fixed32.decode(d),
1046 seed: e.fixed32.decode(d),
1047 fastForwardTo: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
1048 }),
1049 },
1050 Xe = {
1051 preencode(d, o) {
1052 ;(e.fixed32.preencode(d, o.mailbox),
1053 e.fixed32.preencode(d, o.invitationSeed),
1054 n.preencode(d, o.anchor),
1055 e.fixed32.preencode(d, o.identityPublicKey))
1056 },
1057 encode(d, o) {
1058 ;(e.fixed32.encode(d, o.mailbox),
1059 e.fixed32.encode(d, o.invitationSeed),
1060 n.encode(d, o.anchor),
1061 e.fixed32.encode(d, o.identityPublicKey))
1062 },
1063 decode: (d) => ({
1064 mailbox: e.fixed32.decode(d),
1065 invitationSeed: e.fixed32.decode(d),
1066 anchor: n.decode(d),
1067 identityPublicKey: e.fixed32.decode(d),
1068 }),
1069 },
1070 Ye = {
1071 preencode(d, o) {
1072 e.fixed32.preencode(d, o.mailbox)
1073 },
1074 encode(d, o) {
1075 e.fixed32.encode(d, o.mailbox)
1076 },
1077 decode: (d) => ({ mailbox: e.fixed32.decode(d) }),
1078 },
1079 Ze = e.frame(Ge),
1080 $e = e.frame(Xe),
1081 _e = e.frame(Ye),
1082 ed = e.frame(Qe),
1083 dd = e.array(e.ipv4Address),
1084 od = {
1085 preencode(e, d) {
1086 ;(e.end++,
1087 d.room && Ze.preencode(e, d.room),
1088 d.identity && $e.preencode(e, d.identity),
1089 d.contact && _e.preencode(e, d.contact),
1090 d.readonly && ed.preencode(e, d.readonly),
1091 d.additionalNodes && dd.preencode(e, d.additionalNodes),
1092 o >= 5 && d.buildType && Fp.preencode(e, d.buildType))
1093 },
1094 encode(d, n) {
1095 const c =
1096 (n.room ? 1 : 0) |
1097 (n.identity ? 2 : 0) |
1098 (n.contact ? 4 : 0) |
1099 (n.readonly ? 8 : 0) |
1100 (n.additionalNodes ? 16 : 0) |
1101 (o >= 5 && n.buildType ? 32 : 0)
1102 ;(e.uint.encode(d, c),
1103 n.room && Ze.encode(d, n.room),
1104 n.identity && $e.encode(d, n.identity),
1105 n.contact && _e.encode(d, n.contact),
1106 n.readonly && ed.encode(d, n.readonly),
1107 n.additionalNodes && dd.encode(d, n.additionalNodes),
1108 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
1109 },
1110 decode(d) {
1111 const n = e.uint.decode(d)
1112 return {
1113 room: 1 & n ? Ze.decode(d) : null,
1114 identity: 2 & n ? $e.decode(d) : null,
1115 contact: 4 & n ? _e.decode(d) : null,
1116 readonly: 8 & n ? ed.decode(d) : null,
1117 additionalNodes: 16 & n ? dd.decode(d) : null,
1118 buildType: o >= 5 && 32 & n ? Fp.decode(d) : null,
1119 }
1120 },
1121 },
1122 nd = oe,
1123 cd = {
1124 preencode(d, o) {
1125 ;(nd.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
1126 },
1127 encode(d, o) {
1128 ;(nd.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
1129 },
1130 decode: (d) => ({ header: nd.decode(d), blindRequest: e.buffer.decode(d) }),
1131 },
1132 rd = oe,
1133 td = {
1134 preencode(e, d) {
1135 ;(rd.preencode(e, d.header), e.end++, d.profile && Wp.preencode(e, d.profile))
1136 },
1137 encode(d, o) {
1138 const n = o.profile ? 1 : 0
1139 ;(rd.encode(d, o.header), e.uint.encode(d, n), o.profile && Wp.encode(d, o.profile))
1140 },
1141 decode: (d) => ({ header: rd.decode(d), profile: 1 & e.uint.decode(d) ? Wp.decode(d) : null }),
1142 },
1143 id = oe,
1144 ad = {
1145 preencode(d, o) {
1146 ;(id.preencode(d, o.header), e.fixed32.preencode(d, o.key))
1147 },
1148 encode(d, o) {
1149 ;(id.encode(d, o.header), e.fixed32.encode(d, o.key))
1150 },
1151 decode: (d) => ({ header: id.decode(d), key: e.fixed32.decode(d) }),
1152 },
1153 sd = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({}) },
1154 pd = sd,
1155 ud = Ae,
1156 ld = {
1157 preencode(d, o) {
1158 ;(e.fixed32.preencode(d, o.deviceKey),
1159 e.fixed32.preencode(d, o.id),
1160 ud.preencode(d, o.request))
1161 },
1162 encode(d, o) {
1163 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.id), ud.encode(d, o.request))
1164 },
1165 decode: (d) => ({
1166 deviceKey: e.fixed32.decode(d),
1167 id: e.fixed32.decode(d),
1168 request: ud.decode(d),
1169 }),
1170 },
1171 fd = oe,
1172 md = je,
1173 yd = {
1174 preencode(d, o) {
1175 ;(fd.preencode(d, o.header),
1176 e.fixed32.preencode(d, o.deviceKey),
1177 d.end++,
1178 o.identity && md.preencode(d, o.identity))
1179 },
1180 encode(d, o) {
1181 const n = o.identity ? 1 : 0
1182 ;(fd.encode(d, o.header),
1183 e.fixed32.encode(d, o.deviceKey),
1184 e.uint.encode(d, n),
1185 o.identity && md.encode(d, o.identity))
1186 },
1187 decode: (d) => ({
1188 header: fd.decode(d),
1189 deviceKey: e.fixed32.decode(d),
1190 identity: 1 & e.uint.decode(d) ? md.decode(d) : null,
1191 }),
1192 },
1193 xd = oe,
1194 bd = {
1195 preencode(d, o) {
1196 ;(xd.preencode(d, o.header), e.fixed32.preencode(d, o.deviceKey))
1197 },
1198 encode(d, o) {
1199 ;(xd.encode(d, o.header), e.fixed32.encode(d, o.deviceKey))
1200 },
1201 decode: (d) => ({ header: xd.decode(d), deviceKey: e.fixed32.decode(d) }),
1202 },
1203 vd = e.frame(C),
1204 gd = me,
1205 kd = {
1206 preencode(d, o) {
1207 ;(e.fixed32.preencode(d, o.key), vd.preencode(d, o.status), gd.preencode(d, o.profile))
1208 },
1209 encode(d, o) {
1210 ;(e.fixed32.encode(d, o.key), vd.encode(d, o.status), gd.encode(d, o.profile))
1211 },
1212 decode: (d) => ({ key: e.fixed32.decode(d), status: vd.decode(d), profile: gd.decode(d) }),
1213 },
1214 hd = vd,
1215 Kd = me,
1216 wd = {
1217 preencode(d, o) {
1218 ;(e.fixed32.preencode(d, o.key),
1219 hd.preencode(d, o.status),
1220 Kd.preencode(d, o.profile),
1221 d.end++,
1222 o.proofs && Hp.preencode(d, o.proofs))
1223 },
1224 encode(d, o) {
1225 const n = o.proofs ? 1 : 0
1226 ;(e.fixed32.encode(d, o.key),
1227 hd.encode(d, o.status),
1228 Kd.encode(d, o.profile),
1229 e.uint.encode(d, n),
1230 o.proofs && Hp.encode(d, o.proofs))
1231 },
1232 decode: (d) => ({
1233 key: e.fixed32.decode(d),
1234 status: hd.decode(d),
1235 profile: Kd.decode(d),
1236 proofs: 1 & e.uint.decode(d) ? Hp.decode(d) : null,
1237 }),
1238 },
1239 Pd = {
1240 preencode(d, o) {
1241 ;(e.fixed32.preencode(d, o.key),
1242 d.end++,
1243 o.profileAttestation && e.buffer.preencode(d, o.profileAttestation),
1244 o.latestReceipt && e.buffer.preencode(d, o.latestReceipt))
1245 },
1246 encode(d, o) {
1247 const n = (o.profileAttestation ? 1 : 0) | (o.latestReceipt ? 2 : 0)
1248 ;(e.fixed32.encode(d, o.key),
1249 e.uint.encode(d, n),
1250 o.profileAttestation && e.buffer.encode(d, o.profileAttestation),
1251 o.latestReceipt && e.buffer.encode(d, o.latestReceipt))
1252 },
1253 decode(d) {
1254 const o = e.fixed32.decode(d),
1255 n = e.uint.decode(d)
1256 return {
1257 key: o,
1258 profileAttestation: 1 & n ? e.buffer.decode(d) : null,
1259 latestReceipt: 2 & n ? e.buffer.decode(d) : null,
1260 }
1261 },
1262 },
1263 Rd = oe,
1264 Td = Pe,
1265 Ad = {
1266 preencode(e, d) {
1267 ;(Rd.preencode(e, d.header), Td.preencode(e, d.member))
1268 },
1269 encode(e, d) {
1270 ;(Rd.encode(e, d.header), Td.encode(e, d.member))
1271 },
1272 decode: (e) => ({ header: Rd.decode(e), member: Td.decode(e) }),
1273 },
1274 qd = oe,
1275 Md = e.frame(D),
1276 Cd = {
1277 preencode(d, o) {
1278 ;(qd.preencode(d, o.header),
1279 e.fixed32.preencode(d, o.memberKey),
1280 e.uint.preencode(d, o.key),
1281 Md.preencode(d, o.status))
1282 },
1283 encode(d, o) {
1284 ;(qd.encode(d, o.header),
1285 e.fixed32.encode(d, o.memberKey),
1286 e.uint.encode(d, o.key),
1287 Md.encode(d, o.status))
1288 },
1289 decode: (d) => ({
1290 header: qd.decode(d),
1291 memberKey: e.fixed32.decode(d),
1292 key: e.uint.decode(d),
1293 status: Md.decode(d),
1294 }),
1295 },
1296 Dd = oe,
1297 Id = {
1298 preencode(d, o) {
1299 ;(Dd.preencode(d, o.header), e.fixed32.preencode(d, o.key), d.end++)
1300 },
1301 encode(d, o) {
1302 const n = (o.isModerator ? 1 : 0) | (o.isAdmin ? 2 : 0)
1303 ;(Dd.encode(d, o.header), e.fixed32.encode(d, o.key), e.uint.encode(d, n))
1304 },
1305 decode(d) {
1306 const o = Dd.decode(d),
1307 n = e.fixed32.decode(d),
1308 c = e.uint.decode(d)
1309 return { header: o, key: n, isModerator: !!(1 & c), isAdmin: !!(2 & c) }
1310 },
1311 },
1312 Sd = oe,
1313 Fd = {
1314 preencode(d, o) {
1315 ;(Sd.preencode(d, o.header), e.fixed32.preencode(d, o.key))
1316 },
1317 encode(d, o) {
1318 ;(Sd.encode(d, o.header), e.fixed32.encode(d, o.key))
1319 },
1320 decode: (d) => ({ header: Sd.decode(d), key: e.fixed32.decode(d) }),
1321 },
1322 Ld = {
1323 preencode(d, o) {
1324 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.mentions))
1325 },
1326 encode(d, o) {
1327 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.mentions))
1328 },
1329 decode: (d) => ({ key: e.fixed32.decode(d), mentions: e.uint.decode(d) }),
1330 },
1331 jd = {
1332 preencode(d, o) {
1333 ;(d.end++, o.memberKey && e.fixed32.preencode(d, o.memberKey))
1334 },
1335 encode(d, o) {
1336 const n = o.memberKey ? 1 : 0
1337 ;(e.uint.encode(d, n), o.memberKey && e.fixed32.encode(d, o.memberKey))
1338 },
1339 decode: (d) => ({ memberKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null }),
1340 },
1341 Ed = jd,
1342 Bd = jd,
1343 Nd = {
1344 preencode(d, o) {
1345 ;(d.end++, o.from && e.string.preencode(d, o.from), o.to && e.string.preencode(d, o.to))
1346 },
1347 encode(d, o) {
1348 const n = (o.from ? 1 : 0) | (o.to ? 2 : 0)
1349 ;(e.uint.encode(d, n), o.from && e.string.encode(d, o.from), o.to && e.string.encode(d, o.to))
1350 },
1351 decode(d) {
1352 const o = e.uint.decode(d)
1353 return { from: 1 & o ? e.string.decode(d) : null, to: 2 & o ? e.string.decode(d) : null }
1354 },
1355 },
1356 Od = e.frame(jd),
1357 Vd = e.frame(Ed),
1358 Ud = e.frame(Nd),
1359 Jd = e.frame(Bd),
1360 zd = {
1361 preencode(d, n) {
1362 const c =
1363 (n.memberJoined ? 1 : 0) |
1364 (n.memberLeft ? 2 : 0) |
1365 (n.titleChanged ? 4 : 0) |
1366 (n.callStarted ? 8 : 0) |
1367 (n.callHangup ? 16 : 0) |
1368 (n.callMissed ? 32 : 0) |
1369 (n.roomAvatarChanged ? 64 : 0) |
1370 (n.invitationCreated ? 128 : 0) |
1371 (n.memberRemoved ? 256 : 0) |
1372 (o >= 3 && n.locationShared ? 512 : 0)
1373 ;(e.uint.preencode(d, c),
1374 n.memberJoined && Od.preencode(d, n.memberJoined),
1375 n.memberLeft && Vd.preencode(d, n.memberLeft),
1376 n.titleChanged && Ud.preencode(d, n.titleChanged),
1377 n.memberRemoved && Jd.preencode(d, n.memberRemoved),
1378 o >= 3 && n.locationShared && Gp.preencode(d, n.locationShared))
1379 },
1380 encode(d, n) {
1381 const c =
1382 (n.memberJoined ? 1 : 0) |
1383 (n.memberLeft ? 2 : 0) |
1384 (n.titleChanged ? 4 : 0) |
1385 (n.callStarted ? 8 : 0) |
1386 (n.callHangup ? 16 : 0) |
1387 (n.callMissed ? 32 : 0) |
1388 (n.roomAvatarChanged ? 64 : 0) |
1389 (n.invitationCreated ? 128 : 0) |
1390 (n.memberRemoved ? 256 : 0) |
1391 (o >= 3 && n.locationShared ? 512 : 0)
1392 ;(e.uint.encode(d, c),
1393 n.memberJoined && Od.encode(d, n.memberJoined),
1394 n.memberLeft && Vd.encode(d, n.memberLeft),
1395 n.titleChanged && Ud.encode(d, n.titleChanged),
1396 n.memberRemoved && Jd.encode(d, n.memberRemoved),
1397 o >= 3 && n.locationShared && Gp.encode(d, n.locationShared))
1398 },
1399 decode(d) {
1400 const n = e.uint.decode(d)
1401 return {
1402 memberJoined: 1 & n ? Od.decode(d) : null,
1403 memberLeft: 2 & n ? Vd.decode(d) : null,
1404 titleChanged: 4 & n ? Ud.decode(d) : null,
1405 callStarted: !!(8 & n),
1406 callHangup: !!(16 & n),
1407 callMissed: !!(32 & n),
1408 roomAvatarChanged: !!(64 & n),
1409 invitationCreated: !!(128 & n),
1410 memberRemoved: 256 & n ? Jd.decode(d) : null,
1411 locationShared: o >= 3 && 512 & n ? Gp.decode(d) : null,
1412 }
1413 },
1414 },
1415 Wd = {
1416 preencode(e, d) {
1417 ;(e.end++, o >= 3 && d.locationShared && Qp.preencode(e, d.locationShared))
1418 },
1419 encode(d, n) {
1420 const c =
1421 (n.callStarted ? 1 : 0) |
1422 (n.callHangup ? 2 : 0) |
1423 (n.callMissed ? 4 : 0) |
1424 (o >= 3 && n.locationShared ? 8 : 0)
1425 ;(e.uint.encode(d, c), o >= 3 && n.locationShared && Qp.encode(d, n.locationShared))
1426 },
1427 decode(d) {
1428 const n = e.uint.decode(d)
1429 return {
1430 callStarted: !!(1 & n),
1431 callHangup: !!(2 & n),
1432 callMissed: !!(4 & n),
1433 locationShared: o >= 3 && 8 & n ? Qp.decode(d) : null,
1434 }
1435 },
1436 },
1437 Hd = {
1438 preencode(d, o) {
1439 ;(e.uint.preencode(d, o.start), e.uint.preencode(d, o.length))
1440 },
1441 encode(d, o) {
1442 ;(e.uint.encode(d, o.start), e.uint.encode(d, o.length))
1443 },
1444 decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
1445 },
1446 Gd = e.frame(Hd),
1447 Qd = {
1448 preencode(d, o) {
1449 ;(Gd.preencode(d, o.range), e.string.preencode(d, o.content))
1450 },
1451 encode(d, o) {
1452 ;(Gd.encode(d, o.range), e.string.encode(d, o.content))
1453 },
1454 decode: (d) => ({ range: Gd.decode(d), content: e.string.decode(d) }),
1455 },
1456 Xd = Gd,
1457 Yd = {
1458 preencode(d, o) {
1459 ;(Xd.preencode(d, o.range), e.fixed32.preencode(d, o.memberKey))
1460 },
1461 encode(d, o) {
1462 ;(Xd.encode(d, o.range), e.fixed32.encode(d, o.memberKey))
1463 },
1464 decode: (d) => ({ range: Xd.decode(d), memberKey: e.fixed32.decode(d) }),
1465 },
1466 Zd = Gd,
1467 $d = {
1468 preencode(d, o) {
1469 ;(Zd.preencode(d, o.range), Z.preencode(d, o.language), e.string.preencode(d, o.text))
1470 },
1471 encode(d, o) {
1472 ;(Zd.encode(d, o.range), Z.encode(d, o.language), e.string.encode(d, o.text))
1473 },
1474 decode: (d) => ({ range: Zd.decode(d), language: Z.decode(d), text: e.string.decode(d) }),
1475 },
1476 _d = h,
1477 eo = e.array(e.uint),
1478 oo = {
1479 preencode(d, o) {
1480 ;(d.end++,
1481 o.title && e.string.preencode(d, o.title),
1482 o.description && e.string.preencode(d, o.description),
1483 o.file && _d.preencode(d, o.file),
1484 o.files && eo.preencode(d, o.files))
1485 },
1486 encode(d, o) {
1487 const n = (o.title ? 1 : 0) | (o.description ? 2 : 0) | (o.file ? 4 : 0) | (o.files ? 8 : 0)
1488 ;(e.uint.encode(d, n),
1489 o.title && e.string.encode(d, o.title),
1490 o.description && e.string.encode(d, o.description),
1491 o.file && _d.encode(d, o.file),
1492 o.files && eo.encode(d, o.files))
1493 },
1494 decode(d) {
1495 const o = e.uint.decode(d)
1496 return {
1497 title: 1 & o ? e.string.decode(d) : null,
1498 description: 2 & o ? e.string.decode(d) : null,
1499 file: 4 & o ? _d.decode(d) : null,
1500 files: 8 & o ? eo.decode(d) : null,
1501 }
1502 },
1503 },
1504 no = Gd,
1505 co = e.frame(oo),
1506 ro = {
1507 preencode(d, o) {
1508 ;(no.preencode(d, o.range),
1509 e.string.preencode(d, o.url),
1510 d.end++,
1511 o.preview && co.preencode(d, o.preview))
1512 },
1513 encode(d, o) {
1514 const n = o.preview ? 1 : 0
1515 ;(no.encode(d, o.range),
1516 e.string.encode(d, o.url),
1517 e.uint.encode(d, n),
1518 o.preview && co.encode(d, o.preview))
1519 },
1520 decode: (d) => ({
1521 range: no.decode(d),
1522 url: e.string.decode(d),
1523 preview: 1 & e.uint.decode(d) ? co.decode(d) : null,
1524 }),
1525 },
1526 to = e.array(e.frame(Yd)),
1527 io = e.array(e.frame(ro)),
1528 ao = io,
1529 so = e.array(e.frame(Hd)),
1530 po = so,
1531 uo = so,
1532 lo = e.array(e.frame(Qd)),
1533 fo = so,
1534 mo = so,
1535 yo = e.array(e.frame($d)),
1536 xo = {
1537 preencode(d, o) {
1538 const n =
1539 (o.mention ? 1 : 0) |
1540 (o.httpLink ? 2 : 0) |
1541 (o.pearLink ? 4 : 0) |
1542 (o.bold ? 8 : 0) |
1543 (o.italic ? 16 : 0) |
1544 (o.code ? 32 : 0) |
1545 (o.emoji ? 64 : 0) |
1546 (o.codeBlock ? 128 : 0) |
1547 (o.strike ? 256 : 0) |
1548 (o.translation ? 512 : 0)
1549 ;(e.uint.preencode(d, n),
1550 o.mention && to.preencode(d, o.mention),
1551 o.httpLink && io.preencode(d, o.httpLink),
1552 o.pearLink && ao.preencode(d, o.pearLink),
1553 o.bold && so.preencode(d, o.bold),
1554 o.italic && po.preencode(d, o.italic),
1555 o.code && uo.preencode(d, o.code),
1556 o.emoji && lo.preencode(d, o.emoji),
1557 o.codeBlock && fo.preencode(d, o.codeBlock),
1558 o.strike && mo.preencode(d, o.strike),
1559 o.translation && yo.preencode(d, o.translation))
1560 },
1561 encode(d, o) {
1562 const n =
1563 (o.mention ? 1 : 0) |
1564 (o.httpLink ? 2 : 0) |
1565 (o.pearLink ? 4 : 0) |
1566 (o.bold ? 8 : 0) |
1567 (o.italic ? 16 : 0) |
1568 (o.code ? 32 : 0) |
1569 (o.emoji ? 64 : 0) |
1570 (o.codeBlock ? 128 : 0) |
1571 (o.strike ? 256 : 0) |
1572 (o.translation ? 512 : 0)
1573 ;(e.uint.encode(d, n),
1574 o.mention && to.encode(d, o.mention),
1575 o.httpLink && io.encode(d, o.httpLink),
1576 o.pearLink && ao.encode(d, o.pearLink),
1577 o.bold && so.encode(d, o.bold),
1578 o.italic && po.encode(d, o.italic),
1579 o.code && uo.encode(d, o.code),
1580 o.emoji && lo.encode(d, o.emoji),
1581 o.codeBlock && fo.encode(d, o.codeBlock),
1582 o.strike && mo.encode(d, o.strike),
1583 o.translation && yo.encode(d, o.translation))
1584 },
1585 decode(d) {
1586 const o = e.uint.decode(d)
1587 return {
1588 mention: 1 & o ? to.decode(d) : null,
1589 httpLink: 2 & o ? io.decode(d) : null,
1590 pearLink: 4 & o ? ao.decode(d) : null,
1591 bold: 8 & o ? so.decode(d) : null,
1592 italic: 16 & o ? po.decode(d) : null,
1593 code: 32 & o ? uo.decode(d) : null,
1594 emoji: 64 & o ? lo.decode(d) : null,
1595 codeBlock: 128 & o ? fo.decode(d) : null,
1596 strike: 256 & o ? mo.decode(d) : null,
1597 translation: 512 & o ? yo.decode(d) : null,
1598 }
1599 },
1600 },
1601 bo = e.array(e.frame(k)),
1602 vo = e.frame(xo),
1603 go = e.frame(Wd),
1604 ko = {
1605 preencode(d, o) {
1606 ;(d.end++,
1607 o.text && e.string.preencode(d, o.text),
1608 o.files && bo.preencode(d, o.files),
1609 o.display && vo.preencode(d, o.display),
1610 o.replyTo && c.preencode(d, o.replyTo),
1611 o.parent && c.preencode(d, o.parent),
1612 o.event && go.preencode(d, o.event))
1613 },
1614 encode(d, n) {
1615 const r =
1616 (n.text ? 1 : 0) |
1617 (n.files ? 2 : 0) |
1618 (n.display ? 4 : 0) |
1619 (n.replyTo ? 8 : 0) |
1620 (n.parent ? 16 : 0) |
1621 (n.event ? 32 : 0) |
1622 (o >= 3 && n.forwarded ? 64 : 0)
1623 ;(e.uint.encode(d, r),
1624 n.text && e.string.encode(d, n.text),
1625 n.files && bo.encode(d, n.files),
1626 n.display && vo.encode(d, n.display),
1627 n.replyTo && c.encode(d, n.replyTo),
1628 n.parent && c.encode(d, n.parent),
1629 n.event && go.encode(d, n.event))
1630 },
1631 decode(d) {
1632 const n = e.uint.decode(d)
1633 return {
1634 text: 1 & n ? e.string.decode(d) : null,
1635 files: 2 & n ? bo.decode(d) : null,
1636 display: 4 & n ? vo.decode(d) : null,
1637 replyTo: 8 & n ? c.decode(d) : null,
1638 parent: 16 & n ? c.decode(d) : null,
1639 event: 32 & n ? go.decode(d) : null,
1640 forwarded: o >= 3 && !!(64 & n),
1641 }
1642 },
1643 },
1644 ho = eo,
1645 Ko = vo,
1646 wo = {
1647 preencode(d, o) {
1648 ;(d.end++,
1649 o.text && e.string.preencode(d, o.text),
1650 o.files && ho.preencode(d, o.files),
1651 o.display && Ko.preencode(d, o.display),
1652 o.replyTo && c.preencode(d, o.replyTo),
1653 o.parent && c.preencode(d, o.parent))
1654 },
1655 encode(d, n) {
1656 const r =
1657 (n.text ? 1 : 0) |
1658 (n.files ? 2 : 0) |
1659 (n.display ? 4 : 0) |
1660 (n.replyTo ? 8 : 0) |
1661 (n.parent ? 16 : 0) |
1662 (o >= 3 && n.forwarded ? 32 : 0)
1663 ;(e.uint.encode(d, r),
1664 n.text && e.string.encode(d, n.text),
1665 n.files && ho.encode(d, n.files),
1666 n.display && Ko.encode(d, n.display),
1667 n.replyTo && c.encode(d, n.replyTo),
1668 n.parent && c.encode(d, n.parent))
1669 },
1670 decode(d) {
1671 const n = e.uint.decode(d)
1672 return {
1673 text: 1 & n ? e.string.decode(d) : null,
1674 files: 2 & n ? ho.decode(d) : null,
1675 display: 4 & n ? Ko.decode(d) : null,
1676 replyTo: 8 & n ? c.decode(d) : null,
1677 parent: 16 & n ? c.decode(d) : null,
1678 forwarded: o >= 3 && !!(32 & n),
1679 }
1680 },
1681 },
1682 Po = bo,
1683 Ro = vo,
1684 To = {
1685 preencode(d, o) {
1686 ;(d.end++,
1687 o.text && e.string.preencode(d, o.text),
1688 o.files && Po.preencode(d, o.files),
1689 o.display && Ro.preencode(d, o.display),
1690 o.replyTo && c.preencode(d, o.replyTo),
1691 o.parent && c.preencode(d, o.parent))
1692 },
1693 encode(d, n) {
1694 const r =
1695 (n.text ? 1 : 0) |
1696 (n.files ? 2 : 0) |
1697 (n.display ? 4 : 0) |
1698 (n.replyTo ? 8 : 0) |
1699 (n.parent ? 16 : 0) |
1700 (o >= 3 && n.forwarded ? 32 : 0)
1701 ;(e.uint.encode(d, r),
1702 n.text && e.string.encode(d, n.text),
1703 n.files && Po.encode(d, n.files),
1704 n.display && Ro.encode(d, n.display),
1705 n.replyTo && c.encode(d, n.replyTo),
1706 n.parent && c.encode(d, n.parent))
1707 },
1708 decode(d) {
1709 const n = e.uint.decode(d)
1710 return {
1711 text: 1 & n ? e.string.decode(d) : null,
1712 files: 2 & n ? Po.decode(d) : null,
1713 display: 4 & n ? Ro.decode(d) : null,
1714 replyTo: 8 & n ? c.decode(d) : null,
1715 parent: 16 & n ? c.decode(d) : null,
1716 forwarded: o >= 3 && !!(32 & n),
1717 }
1718 },
1719 },
1720 Ao = {
1721 preencode(e, d) {
1722 e.end++
1723 },
1724 encode(d, o) {
1725 const n = (o.isEdited ? 1 : 0) | (o.isDeleted ? 2 : 0) | (o.isPinned ? 4 : 0)
1726 e.uint.encode(d, n)
1727 },
1728 decode(d) {
1729 const o = e.uint.decode(d)
1730 return { isEdited: !!(1 & o), isDeleted: !!(2 & o), isPinned: !!(4 & o) }
1731 },
1732 },
1733 qo = {
1734 preencode(d, o) {
1735 ;(e.uint.preencode(d, o.thread), e.uint.preencode(d, o.index))
1736 },
1737 encode(d, o) {
1738 ;(e.uint.encode(d, o.thread), e.uint.encode(d, o.index))
1739 },
1740 decode: (d) => ({ thread: e.uint.decode(d), index: e.uint.decode(d) }),
1741 },
1742 Mo = e.frame(V),
1743 Co = {
1744 preencode(d, o) {
1745 ;(e.uint.preencode(d, o.id),
1746 e.uint.preencode(d, o.count),
1747 d.end++,
1748 o.parent && c.preencode(d, o.parent),
1749 o.stats && Mo.preencode(d, o.stats))
1750 },
1751 encode(d, o) {
1752 const n = (o.parent ? 1 : 0) | (o.stats ? 2 : 0)
1753 ;(e.uint.encode(d, o.id),
1754 e.uint.encode(d, o.count),
1755 e.uint.encode(d, n),
1756 o.parent && c.encode(d, o.parent),
1757 o.stats && Mo.encode(d, o.stats))
1758 },
1759 decode(d) {
1760 const o = e.uint.decode(d),
1761 n = e.uint.decode(d),
1762 r = e.uint.decode(d)
1763 return {
1764 id: o,
1765 count: n,
1766 parent: 1 & r ? c.decode(d) : null,
1767 stats: 2 & r ? Mo.decode(d) : null,
1768 }
1769 },
1770 },
1771 Do = e.frame(Ao),
1772 Io = e.frame(wo),
1773 So = e.frame(zd),
1774 Fo = {
1775 preencode(d, o) {
1776 ;(qo.preencode(d, o.id),
1777 c.preencode(d, o.oplog),
1778 e.uint.preencode(d, o.clock),
1779 e.uint.preencode(d, o.timestamp),
1780 d.end++,
1781 o.editedAt && e.uint.preencode(d, o.editedAt),
1782 Do.preencode(d, o.status),
1783 o.message && Io.preencode(d, o.message),
1784 o.event && So.preencode(d, o.event))
1785 },
1786 encode(d, o) {
1787 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1788 ;(qo.encode(d, o.id),
1789 c.encode(d, o.oplog),
1790 e.uint.encode(d, o.clock),
1791 e.uint.encode(d, o.timestamp),
1792 e.uint.encode(d, n),
1793 o.editedAt && e.uint.encode(d, o.editedAt),
1794 Do.encode(d, o.status),
1795 o.message && Io.encode(d, o.message),
1796 o.event && So.encode(d, o.event))
1797 },
1798 decode(d) {
1799 const o = qo.decode(d),
1800 n = c.decode(d),
1801 r = e.uint.decode(d),
1802 t = e.uint.decode(d),
1803 i = e.uint.decode(d)
1804 return {
1805 id: o,
1806 oplog: n,
1807 clock: r,
1808 timestamp: t,
1809 editedAt: 1 & i ? e.uint.decode(d) : 0,
1810 status: Do.decode(d),
1811 message: 2 & i ? Io.decode(d) : null,
1812 event: 4 & i ? So.decode(d) : null,
1813 }
1814 },
1815 },
1816 Lo = Do,
1817 jo = e.frame(To),
1818 Eo = So,
1819 Bo = {
1820 preencode(d, o) {
1821 ;(qo.preencode(d, o.id),
1822 c.preencode(d, o.oplog),
1823 e.uint.preencode(d, o.clock),
1824 e.uint.preencode(d, o.timestamp),
1825 d.end++,
1826 o.editedAt && e.uint.preencode(d, o.editedAt),
1827 Lo.preencode(d, o.status),
1828 o.message && jo.preencode(d, o.message),
1829 o.event && Eo.preencode(d, o.event))
1830 },
1831 encode(d, o) {
1832 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1833 ;(qo.encode(d, o.id),
1834 c.encode(d, o.oplog),
1835 e.uint.encode(d, o.clock),
1836 e.uint.encode(d, o.timestamp),
1837 e.uint.encode(d, n),
1838 o.editedAt && e.uint.encode(d, o.editedAt),
1839 Lo.encode(d, o.status),
1840 o.message && jo.encode(d, o.message),
1841 o.event && Eo.encode(d, o.event))
1842 },
1843 decode(d) {
1844 const o = qo.decode(d),
1845 n = c.decode(d),
1846 r = e.uint.decode(d),
1847 t = e.uint.decode(d),
1848 i = e.uint.decode(d)
1849 return {
1850 id: o,
1851 oplog: n,
1852 clock: r,
1853 timestamp: t,
1854 editedAt: 1 & i ? e.uint.decode(d) : 0,
1855 status: Lo.decode(d),
1856 message: 2 & i ? jo.decode(d) : null,
1857 event: 4 & i ? Eo.decode(d) : null,
1858 }
1859 },
1860 },
1861 No = oe,
1862 Oo = e.frame(ko),
1863 Vo = {
1864 preencode(e, d) {
1865 ;(No.preencode(e, d.header), Oo.preencode(e, d.message))
1866 },
1867 encode(e, d) {
1868 ;(No.encode(e, d.header), Oo.encode(e, d.message))
1869 },
1870 decode: (e) => ({ header: No.decode(e), message: Oo.decode(e) }),
1871 },
1872 Uo = oe,
1873 Jo = {
1874 preencode(e, d) {
1875 ;(Uo.preencode(e, d.header), c.preencode(e, d.oplog))
1876 },
1877 encode(e, d) {
1878 ;(Uo.encode(e, d.header), c.encode(e, d.oplog))
1879 },
1880 decode: (e) => ({ header: Uo.decode(e), oplog: c.decode(e) }),
1881 },
1882 zo = oe,
1883 Wo = Oo,
1884 Ho = {
1885 preencode(e, d) {
1886 ;(zo.preencode(e, d.header), c.preencode(e, d.oplog), Wo.preencode(e, d.message))
1887 },
1888 encode(e, d) {
1889 ;(zo.encode(e, d.header), c.encode(e, d.oplog), Wo.encode(e, d.message))
1890 },
1891 decode: (e) => ({ header: zo.decode(e), oplog: c.decode(e), message: Wo.decode(e) }),
1892 },
1893 Go = oe,
1894 Qo = {
1895 preencode(e, d) {
1896 ;(Go.preencode(e, d.header), c.preencode(e, d.oplog), e.end++)
1897 },
1898 encode(d, o) {
1899 const n = o.isPinned ? 1 : 0
1900 ;(Go.encode(d, o.header), c.encode(d, o.oplog), e.uint.encode(d, n))
1901 },
1902 decode: (d) => ({
1903 header: Go.decode(d),
1904 oplog: c.decode(d),
1905 isPinned: !!(1 & e.uint.decode(d)),
1906 }),
1907 },
1908 Xo = { HttpLink: 1, PearLink: 2 },
1909 Yo = {
1910 preencode(e, d) {
1911 e.end++
1912 },
1913 encode(d, o) {
1914 if (o > 2) throw new Error("Unknown enum")
1915 e.uint.encode(d, o)
1916 },
1917 decode: (d) => e.uint.decode(d),
1918 },
1919 Zo = oe,
1920 $o = {
1921 preencode(d, o) {
1922 ;(Zo.preencode(d, o.header),
1923 c.preencode(d, o.oplog),
1924 e.uint.preencode(d, o.index),
1925 Xp.preencode(d, o.preview),
1926 d.end++,
1927 o.displayType && Yo.preencode(d, o.displayType))
1928 },
1929 encode(d, o) {
1930 const n = o.displayType ? 1 : 0
1931 ;(Zo.encode(d, o.header),
1932 c.encode(d, o.oplog),
1933 e.uint.encode(d, o.index),
1934 Xp.encode(d, o.preview),
1935 e.uint.encode(d, n),
1936 o.displayType && Yo.encode(d, o.displayType))
1937 },
1938 decode: (d) => ({
1939 header: Zo.decode(d),
1940 oplog: c.decode(d),
1941 index: e.uint.decode(d),
1942 preview: Xp.decode(d),
1943 displayType: 1 & e.uint.decode(d) ? Yo.decode(d) : 0,
1944 }),
1945 },
1946 _o = {
1947 preencode(d, o) {
1948 ;(qo.preencode(d, o.id),
1949 e.fixed32.preencode(d, o.sender),
1950 e.uint.preencode(d, o.clock),
1951 e.string.preencode(d, o.reaction))
1952 },
1953 encode(d, o) {
1954 ;(qo.encode(d, o.id),
1955 e.fixed32.encode(d, o.sender),
1956 e.uint.encode(d, o.clock),
1957 e.string.encode(d, o.reaction))
1958 },
1959 decode: (d) => ({
1960 id: qo.decode(d),
1961 sender: e.fixed32.decode(d),
1962 clock: e.uint.decode(d),
1963 reaction: e.string.decode(d),
1964 }),
1965 },
1966 en = {
1967 preencode(d, o) {
1968 ;(e.string.preencode(d, o.text), e.uint.preencode(d, o.count))
1969 },
1970 encode(d, o) {
1971 ;(e.string.encode(d, o.text), e.uint.encode(d, o.count))
1972 },
1973 decode: (d) => ({ text: e.string.decode(d), count: e.uint.decode(d) }),
1974 },
1975 dn = e.array(e.frame(en)),
1976 on = {
1977 preencode(d, o) {
1978 ;(qo.preencode(d, o.id),
1979 e.uint.preencode(d, o.total),
1980 dn.preencode(d, o.reactions),
1981 d.end++,
1982 o.editedAt && e.uint.preencode(d, o.editedAt))
1983 },
1984 encode(d, o) {
1985 const n = o.editedAt ? 1 : 0
1986 ;(qo.encode(d, o.id),
1987 e.uint.encode(d, o.total),
1988 dn.encode(d, o.reactions),
1989 e.uint.encode(d, n),
1990 o.editedAt && e.uint.encode(d, o.editedAt))
1991 },
1992 decode: (d) => ({
1993 id: qo.decode(d),
1994 total: e.uint.decode(d),
1995 reactions: dn.decode(d),
1996 editedAt: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
1997 }),
1998 },
1999 nn = oe,
2000 cn = {
2001 preencode(d, o) {
2002 ;(nn.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
2003 },
2004 encode(d, o) {
2005 ;(nn.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
2006 },
2007 decode: (d) => ({ header: nn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
2008 },
2009 rn = oe,
2010 tn = {
2011 preencode(d, o) {
2012 ;(rn.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
2013 },
2014 encode(d, o) {
2015 ;(rn.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
2016 },
2017 decode: (d) => ({ header: rn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
2018 },
2019 an = oe,
2020 sn = e.frame(ee),
2021 pn = {
2022 preencode(d, o) {
2023 ;(an.preencode(d, o.header), e.uint.preencode(d, o.key), sn.preencode(d, o.config))
2024 },
2025 encode(d, o) {
2026 ;(an.encode(d, o.header), e.uint.encode(d, o.key), sn.encode(d, o.config))
2027 },
2028 decode: (d) => ({ header: an.decode(d), key: e.uint.decode(d), config: sn.decode(d) }),
2029 },
2030 un = {
2031 preencode(d, o) {
2032 ;(e.fixed32.preencode(d, o.memberKey),
2033 e.string.preencode(d, o.displayName),
2034 d.end++,
2035 o.avatar && Yp.preencode(d, o.avatar))
2036 },
2037 encode(d, o) {
2038 const n = o.avatar ? 1 : 0
2039 ;(e.fixed32.encode(d, o.memberKey),
2040 e.string.encode(d, o.displayName),
2041 e.uint.encode(d, n),
2042 o.avatar && Yp.encode(d, o.avatar))
2043 },
2044 decode: (d) => ({
2045 memberKey: e.fixed32.decode(d),
2046 displayName: e.string.decode(d),
2047 avatar: 1 & e.uint.decode(d) ? Yp.decode(d) : null,
2048 }),
2049 },
2050 ln = {
2051 preencode(d, o) {
2052 ;(e.fixed32.preencode(d, o.key), d.end++, o.username && e.string.preencode(d, o.username))
2053 },
2054 encode(d, o) {
2055 const n = o.username ? 1 : 0
2056 ;(e.fixed32.encode(d, o.key),
2057 e.uint.encode(d, n),
2058 o.username && e.string.encode(d, o.username))
2059 },
2060 decode: (d) => ({
2061 key: e.fixed32.decode(d),
2062 username: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2063 }),
2064 },
2065 fn = e.frame(ln),
2066 mn = {
2067 preencode(d, o) {
2068 ;(e.fixed32.preencode(d, o.publicKey),
2069 d.end++,
2070 o.discoveryCoreKey && e.fixed32.preencode(d, o.discoveryCoreKey),
2071 o.userRegistry && fn.preencode(d, o.userRegistry))
2072 },
2073 encode(d, o) {
2074 const n = (o.discoveryCoreKey ? 1 : 0) | (o.userRegistry ? 2 : 0)
2075 ;(e.fixed32.encode(d, o.publicKey),
2076 e.uint.encode(d, n),
2077 o.discoveryCoreKey && e.fixed32.encode(d, o.discoveryCoreKey),
2078 o.userRegistry && fn.encode(d, o.userRegistry))
2079 },
2080 decode(d) {
2081 const o = e.fixed32.decode(d),
2082 n = e.uint.decode(d)
2083 return {
2084 publicKey: o,
2085 discoveryCoreKey: 1 & n ? e.fixed32.decode(d) : null,
2086 userRegistry: 2 & n ? fn.decode(d) : null,
2087 }
2088 },
2089 },
2090 yn = oe,
2091 xn = e.frame(G),
2092 bn = e.frame(Q),
2093 vn = sn,
2094 gn = e.frame(mn),
2095 kn = we,
2096 hn = e.array(e.frame(ye)),
2097 Kn = {
2098 preencode(e, d) {
2099 ;(yn.preencode(e, d.header),
2100 xn.preencode(e, d.digest),
2101 bn.preencode(e, d.capabilities),
2102 e.end++,
2103 d.config && vn.preencode(e, d.config),
2104 d.identity && gn.preencode(e, d.identity),
2105 d.bootstrapDevice && kn.preencode(e, d.bootstrapDevice),
2106 d.initialMembers && hn.preencode(e, d.initialMembers))
2107 },
2108 encode(d, o) {
2109 const n =
2110 (o.config ? 1 : 0) |
2111 (o.identity ? 2 : 0) |
2112 (o.bootstrapDevice ? 4 : 0) |
2113 (o.initialMembers ? 8 : 0)
2114 ;(yn.encode(d, o.header),
2115 xn.encode(d, o.digest),
2116 bn.encode(d, o.capabilities),
2117 e.uint.encode(d, n),
2118 o.config && vn.encode(d, o.config),
2119 o.identity && gn.encode(d, o.identity),
2120 o.bootstrapDevice && kn.encode(d, o.bootstrapDevice),
2121 o.initialMembers && hn.encode(d, o.initialMembers))
2122 },
2123 decode(d) {
2124 const o = yn.decode(d),
2125 n = xn.decode(d),
2126 c = bn.decode(d),
2127 r = e.uint.decode(d)
2128 return {
2129 header: o,
2130 digest: n,
2131 capabilities: c,
2132 config: 1 & r ? vn.decode(d) : null,
2133 identity: 2 & r ? gn.decode(d) : null,
2134 bootstrapDevice: 4 & r ? kn.decode(d) : null,
2135 initialMembers: 8 & r ? hn.decode(d) : null,
2136 }
2137 },
2138 },
2139 wn = oe,
2140 Pn = {
2141 preencode(d, o) {
2142 ;(wn.preencode(d, o.header), e.uint.preencode(d, o.version))
2143 },
2144 encode(d, o) {
2145 ;(wn.encode(d, o.header), e.uint.encode(d, o.version))
2146 },
2147 decode: (d) => ({ header: wn.decode(d), version: e.uint.decode(d) }),
2148 },
2149 Rn = oe,
2150 Tn = {
2151 preencode(d, n) {
2152 ;(Rn.preencode(d, n.header),
2153 e.uint.preencode(d, n.from),
2154 e.uint.preencode(d, n.to),
2155 d.end++,
2156 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
2157 },
2158 encode(d, n) {
2159 const c = o >= 5 && n.buildType ? 1 : 0
2160 ;(Rn.encode(d, n.header),
2161 e.uint.encode(d, n.from),
2162 e.uint.encode(d, n.to),
2163 e.uint.encode(d, c),
2164 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
2165 },
2166 decode(d) {
2167 const n = Rn.decode(d),
2168 c = e.uint.decode(d),
2169 r = e.uint.decode(d),
2170 t = d.start < d.end ? e.uint.decode(d) : 0
2171 return { header: n, from: c, to: r, buildType: o >= 5 && 1 & t ? Fp.decode(d) : null }
2172 },
2173 },
2174 An = {
2175 RoomType: 1,
2176 IsExperimental: 2,
2177 IsJoiningDisabled: 3,
2178 IsAppendingDisabled: 4,
2179 IsCallingDisabled: 5,
2180 IsMembershipEventsDisabled: 6,
2181 IsAttachmentsDisabled: 7,
2182 IsLinksDisabled: 8,
2183 },
2184 qn = {
2185 preencode(e, d) {
2186 e.end++
2187 },
2188 encode(d, o) {
2189 if (o > 8) throw new Error("Unknown enum")
2190 e.uint.encode(d, o)
2191 },
2192 decode: (d) => e.uint.decode(d),
2193 },
2194 Mn = oe,
2195 Cn = H,
2196 Dn = {
2197 preencode(d, o) {
2198 ;(Mn.preencode(d, o.header), e.uint.preencode(d, o.key), Cn.preencode(d, o.settings))
2199 },
2200 encode(d, o) {
2201 ;(Mn.encode(d, o.header), e.uint.encode(d, o.key), Cn.encode(d, o.settings))
2202 },
2203 decode: (d) => ({ header: Mn.decode(d), key: e.uint.decode(d), settings: Cn.decode(d) }),
2204 },
2205 In = oe,
2206 Sn = {
2207 preencode(d, o) {
2208 ;(In.preencode(d, o.header), e.uint.preencode(d, o.value))
2209 },
2210 encode(d, o) {
2211 ;(In.encode(d, o.header), e.uint.encode(d, o.value))
2212 },
2213 decode: (d) => ({ header: In.decode(d), value: e.uint.decode(d) }),
2214 },
2215 Fn = {
2216 preencode(d, o) {
2217 ;(e.uint.preencode(d, o.key), e.uint.preencode(d, o.value))
2218 },
2219 encode(d, o) {
2220 ;(e.uint.encode(d, o.key), e.uint.encode(d, o.value))
2221 },
2222 decode: (d) => ({ key: e.uint.decode(d), value: e.uint.decode(d) }),
2223 },
2224 Ln = { Flag: 1 },
2225 jn = {
2226 preencode(e, d) {
2227 e.end++
2228 },
2229 encode(d, o) {
2230 if (o > 1) throw new Error("Unknown enum")
2231 e.uint.encode(d, o)
2232 },
2233 decode: (d) => e.uint.decode(d),
2234 },
2235 En = {
2236 preencode(d, o) {
2237 ;(qo.preencode(d, o.id),
2238 e.fixed32.preencode(d, o.sender),
2239 e.uint.preencode(d, o.clock),
2240 jn.preencode(d, o.label))
2241 },
2242 encode(d, o) {
2243 ;(qo.encode(d, o.id),
2244 e.fixed32.encode(d, o.sender),
2245 e.uint.encode(d, o.clock),
2246 jn.encode(d, o.label))
2247 },
2248 decode: (d) => ({
2249 id: qo.decode(d),
2250 sender: e.fixed32.decode(d),
2251 clock: e.uint.decode(d),
2252 label: jn.decode(d),
2253 }),
2254 },
2255 Bn = oe,
2256 Nn = {
2257 preencode(e, d) {
2258 ;(Bn.preencode(e, d.header), c.preencode(e, d.oplog), jn.preencode(e, d.label))
2259 },
2260 encode(e, d) {
2261 ;(Bn.encode(e, d.header), c.encode(e, d.oplog), jn.encode(e, d.label))
2262 },
2263 decode: (e) => ({ header: Bn.decode(e), oplog: c.decode(e), label: jn.decode(e) }),
2264 },
2265 On = oe,
2266 Vn = {
2267 preencode(e, d) {
2268 ;(On.preencode(e, d.header), c.preencode(e, d.oplog), jn.preencode(e, d.label))
2269 },
2270 encode(e, d) {
2271 ;(On.encode(e, d.header), c.encode(e, d.oplog), jn.encode(e, d.label))
2272 },
2273 decode: (e) => ({ header: On.decode(e), oplog: c.decode(e), label: jn.decode(e) }),
2274 },
2275 Un = {
2276 preencode(d, o) {
2277 ;(jn.preencode(d, o.label), e.uint.preencode(d, o.count))
2278 },
2279 encode(d, o) {
2280 ;(jn.encode(d, o.label), e.uint.encode(d, o.count))
2281 },
2282 decode: (d) => ({ label: jn.decode(d), count: e.uint.decode(d) }),
2283 },
2284 Jn = e.array(e.frame(Un)),
2285 zn = {
2286 preencode(d, o) {
2287 ;(qo.preencode(d, o.id),
2288 e.uint.preencode(d, o.total),
2289 Jn.preencode(d, o.labels),
2290 e.uint.preencode(d, o.editedAt),
2291 d.end++,
2292 o.flagsClock && e.uint.preencode(d, o.flagsClock),
2293 o.version && e.uint.preencode(d, o.version))
2294 },
2295 encode(d, o) {
2296 const n = (o.flagsClock ? 1 : 0) | (o.version ? 2 : 0) | (o.isDeleted ? 4 : 0)
2297 ;(qo.encode(d, o.id),
2298 e.uint.encode(d, o.total),
2299 Jn.encode(d, o.labels),
2300 e.uint.encode(d, o.editedAt),
2301 e.uint.encode(d, n),
2302 o.flagsClock && e.uint.encode(d, o.flagsClock),
2303 o.version && e.uint.encode(d, o.version))
2304 },
2305 decode(d) {
2306 const o = qo.decode(d),
2307 n = e.uint.decode(d),
2308 c = Jn.decode(d),
2309 r = e.uint.decode(d),
2310 t = e.uint.decode(d)
2311 return {
2312 id: o,
2313 total: n,
2314 labels: c,
2315 editedAt: r,
2316 flagsClock: 1 & t ? e.uint.decode(d) : 0,
2317 version: 2 & t ? e.uint.decode(d) : 0,
2318 isDeleted: !!(4 & t),
2319 }
2320 },
2321 },
2322 Wn = oe,
2323 Hn = {
2324 preencode(d, o) {
2325 ;(Wn.preencode(d, o.header), e.uint.preencode(d, o.length))
2326 },
2327 encode(d, o) {
2328 ;(Wn.encode(d, o.header), e.uint.encode(d, o.length))
2329 },
2330 decode: (d) => ({ header: Wn.decode(d), length: e.uint.decode(d) }),
2331 },
2332 Gn = {
2333 preencode(d, o) {
2334 ;(e.fixed32.preencode(d, o.memberKey), e.uint.preencode(d, o.length))
2335 },
2336 encode(d, o) {
2337 ;(e.fixed32.encode(d, o.memberKey), e.uint.encode(d, o.length))
2338 },
2339 decode: (d) => ({ memberKey: e.fixed32.decode(d), length: e.uint.decode(d) }),
2340 },
2341 Qn = de,
2342 Xn = {
2343 preencode(d, o) {
2344 ;(e.fixed32.preencode(d, o.memberKey),
2345 Zp.preencode(d, o.status),
2346 d.end++,
2347 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2348 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2349 },
2350 encode(d, o) {
2351 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2352 ;(e.fixed32.encode(d, o.memberKey),
2353 Zp.encode(d, o.status),
2354 e.uint.encode(d, n),
2355 o.mailbox && e.fixed32.encode(d, o.mailbox),
2356 o.roomKey && e.fixed32.encode(d, o.roomKey))
2357 },
2358 decode(d) {
2359 const o = e.fixed32.decode(d),
2360 n = Zp.decode(d),
2361 c = e.uint.decode(d)
2362 return {
2363 memberKey: o,
2364 status: n,
2365 mailbox: 1 & c ? e.fixed32.decode(d) : null,
2366 roomKey: 2 & c ? e.fixed32.decode(d) : null,
2367 }
2368 },
2369 },
2370 Yn = {
2371 preencode(d, o) {
2372 ;(e.fixed32.preencode(d, o.roomKey),
2373 e.buffer.preencode(d, o.encryptionKey),
2374 e.fixed32.preencode(d, o.seed),
2375 n.preencode(d, o.initiator),
2376 e.fixed32.preencode(d, o.fastForwardTo))
2377 },
2378 encode(d, o) {
2379 ;(e.fixed32.encode(d, o.roomKey),
2380 e.buffer.encode(d, o.encryptionKey),
2381 e.fixed32.encode(d, o.seed),
2382 n.encode(d, o.initiator),
2383 e.fixed32.encode(d, o.fastForwardTo))
2384 },
2385 decode: (d) => ({
2386 roomKey: e.fixed32.decode(d),
2387 encryptionKey: e.buffer.decode(d),
2388 seed: e.fixed32.decode(d),
2389 initiator: n.decode(d),
2390 fastForwardTo: e.fixed32.decode(d),
2391 }),
2392 },
2393 Zn = e.array(e.frame(Yn)),
2394 $n = _,
2395 _n = {
2396 preencode(e, d) {
2397 ;(Zn.preencode(e, d.sharedRooms), $n.preencode(e, d.blockedContacts))
2398 },
2399 encode(e, d) {
2400 ;(Zn.encode(e, d.sharedRooms), $n.encode(e, d.blockedContacts))
2401 },
2402 decode: (e) => ({ sharedRooms: Zn.decode(e), blockedContacts: $n.decode(e) }),
2403 },
2404 ec = gn,
2405 dc = {
2406 preencode(e, d) {
2407 ec.preencode(e, d.identity)
2408 },
2409 encode(e, d) {
2410 ec.encode(e, d.identity)
2411 },
2412 decode: (e) => ({ identity: ec.decode(e) }),
2413 },
2414 oc = {
2415 preencode(d, o) {
2416 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contacts))
2417 },
2418 encode(d, o) {
2419 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contacts))
2420 },
2421 decode: (d) => ({ rooms: e.uint.decode(d), contacts: e.uint.decode(d) }),
2422 },
2423 nc = {
2424 preencode(d, o) {
2425 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contactRequests))
2426 },
2427 encode(d, o) {
2428 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contactRequests))
2429 },
2430 decode: (d) => ({ rooms: e.uint.decode(d), contactRequests: e.uint.decode(d) }),
2431 },
2432 cc = {
2433 preencode(d, o) {
2434 e.buffer.preencode(d, o.entropy)
2435 },
2436 encode(d, o) {
2437 e.buffer.encode(d, o.entropy)
2438 },
2439 decode: (d) => ({ entropy: e.buffer.decode(d) }),
2440 },
2441 rc = {
2442 preencode(d, o) {
2443 ;(e.fixed32.preencode(d, o.publicKey),
2444 e.fixed32.preencode(d, o.devicePublicKey),
2445 e.fixed32.preencode(d, o.writerKey))
2446 },
2447 encode(d, o) {
2448 ;(e.fixed32.encode(d, o.publicKey),
2449 e.fixed32.encode(d, o.devicePublicKey),
2450 e.fixed32.encode(d, o.writerKey))
2451 },
2452 decode: (d) => ({
2453 publicKey: e.fixed32.decode(d),
2454 devicePublicKey: e.fixed32.decode(d),
2455 writerKey: e.fixed32.decode(d),
2456 }),
2457 },
2458 tc = e.frame(rc),
2459 ic = {
2460 preencode(d, c) {
2461 ;(e.fixed32.preencode(d, c.id),
2462 e.fixed32.preencode(d, c.invitationSeed),
2463 e.fixed32.preencode(d, c.mailbox),
2464 t.preencode(d, c.responseKeyPair),
2465 n.preencode(d, c.initiator),
2466 n.preencode(d, c.inviter),
2467 d.end++,
2468 c.identity && tc.preencode(d, c.identity),
2469 o >= 5 && c.buildType && Fp.preencode(d, c.buildType))
2470 },
2471 encode(d, c) {
2472 const r = (c.identity ? 1 : 0) | (o >= 5 && c.buildType ? 2 : 0)
2473 ;(e.fixed32.encode(d, c.id),
2474 e.fixed32.encode(d, c.invitationSeed),
2475 e.fixed32.encode(d, c.mailbox),
2476 t.encode(d, c.responseKeyPair),
2477 n.encode(d, c.initiator),
2478 n.encode(d, c.inviter),
2479 e.uint.encode(d, r),
2480 c.identity && tc.encode(d, c.identity),
2481 o >= 5 && c.buildType && Fp.encode(d, c.buildType))
2482 },
2483 decode(d) {
2484 const c = e.fixed32.decode(d),
2485 r = e.fixed32.decode(d),
2486 i = e.fixed32.decode(d),
2487 a = t.decode(d),
2488 s = n.decode(d),
2489 p = n.decode(d),
2490 u = e.uint.decode(d)
2491 return {
2492 id: c,
2493 invitationSeed: r,
2494 mailbox: i,
2495 responseKeyPair: a,
2496 initiator: s,
2497 inviter: p,
2498 identity: 1 & u ? tc.decode(d) : null,
2499 buildType: o >= 5 && 2 & u ? Fp.decode(d) : null,
2500 }
2501 },
2502 },
2503 ac = oe,
2504 sc = {
2505 preencode(d, o) {
2506 ;(ac.preencode(d, o.header), e.buffer.preencode(d, o.blindResponse))
2507 },
2508 encode(d, o) {
2509 ;(ac.encode(d, o.header), e.buffer.encode(d, o.blindResponse))
2510 },
2511 decode: (d) => ({ header: ac.decode(d), blindResponse: e.buffer.decode(d) }),
2512 },
2513 pc = oe,
2514 uc = e.frame(ic),
2515 lc = {
2516 preencode(e, d) {
2517 ;(pc.preencode(e, d.header), uc.preencode(e, d.invitation))
2518 },
2519 encode(e, d) {
2520 ;(pc.encode(e, d.header), uc.encode(e, d.invitation))
2521 },
2522 decode: (e) => ({ header: pc.decode(e), invitation: uc.decode(e) }),
2523 },
2524 fc = oe,
2525 mc = {
2526 preencode(d, o) {
2527 ;(fc.preencode(d, o.header), e.fixed32.preencode(d, o.id))
2528 },
2529 encode(d, o) {
2530 ;(fc.encode(d, o.header), e.fixed32.encode(d, o.id))
2531 },
2532 decode: (d) => ({ header: fc.decode(d), id: e.fixed32.decode(d) }),
2533 },
2534 yc = {
2535 preencode(d, o) {
2536 ;(e.fixed32.preencode(d, o.publicKey),
2537 e.fixed32.preencode(d, o.devicePublicKey),
2538 d.end++,
2539 o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey),
2540 o.deviceKeyPair && t.preencode(d, o.deviceKeyPair),
2541 e.buffer.preencode(d, o.deviceProof))
2542 },
2543 encode(d, o) {
2544 const n = (o.privateProfileKey ? 1 : 0) | (o.deviceKeyPair ? 2 : 0)
2545 ;(e.fixed32.encode(d, o.publicKey),
2546 e.fixed32.encode(d, o.devicePublicKey),
2547 e.uint.encode(d, n),
2548 o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey),
2549 o.deviceKeyPair && t.encode(d, o.deviceKeyPair),
2550 e.buffer.encode(d, o.deviceProof))
2551 },
2552 decode(d) {
2553 const o = e.fixed32.decode(d),
2554 n = e.fixed32.decode(d),
2555 c = e.uint.decode(d)
2556 return {
2557 publicKey: o,
2558 devicePublicKey: n,
2559 privateProfileKey: 1 & c ? e.fixed32.decode(d) : null,
2560 deviceKeyPair: 2 & c ? t.decode(d) : null,
2561 deviceProof: e.buffer.decode(d),
2562 }
2563 },
2564 },
2565 xc = {
2566 preencode(d, o) {
2567 ;(e.fixed32.preencode(d, o.publicKey),
2568 e.fixed32.preencode(d, o.writerKey),
2569 e.fixed32.preencode(d, o.devicePublicKey),
2570 d.end++,
2571 o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey))
2572 },
2573 encode(d, o) {
2574 const n = o.privateProfileKey ? 1 : 0
2575 ;(e.fixed32.encode(d, o.publicKey),
2576 e.fixed32.encode(d, o.writerKey),
2577 e.fixed32.encode(d, o.devicePublicKey),
2578 e.uint.encode(d, n),
2579 o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey))
2580 },
2581 decode: (d) => ({
2582 publicKey: e.fixed32.decode(d),
2583 writerKey: e.fixed32.decode(d),
2584 devicePublicKey: e.fixed32.decode(d),
2585 privateProfileKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
2586 }),
2587 },
2588 bc = {
2589 preencode(e, d) {
2590 e.end++
2591 },
2592 encode(d, n) {
2593 const c =
2594 (n.isActive ? 1 : 0) |
2595 (n.isFullyMuted ? 2 : 0) |
2596 (n.isMentionsOnlyMuted ? 4 : 0) |
2597 (n.isReadOnly ? 8 : 0) |
2598 (o >= 3 && n.isFavorite ? 16 : 0)
2599 e.uint.encode(d, c)
2600 },
2601 decode(d) {
2602 const n = e.uint.decode(d)
2603 return {
2604 isActive: !!(1 & n),
2605 isFullyMuted: !!(2 & n),
2606 isMentionsOnlyMuted: !!(4 & n),
2607 isReadOnly: !!(8 & n),
2608 isFavorite: o >= 3 && !!(16 & n),
2609 }
2610 },
2611 },
2612 vc = e.frame(bc),
2613 gc = e.frame(yc),
2614 kc = tc,
2615 hc = {
2616 preencode(d, o) {
2617 ;(e.fixed32.preencode(d, o.roomKey),
2618 e.buffer.preencode(d, o.encryptionKey),
2619 e.fixed32.preencode(d, o.mailbox),
2620 vc.preencode(d, o.status),
2621 e.uint.preencode(d, o.clock),
2622 d.end++,
2623 o.initiator && n.preencode(d, o.initiator),
2624 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2625 o.identitySwap && gc.preencode(d, o.identitySwap),
2626 o.identitySwapV2 && kc.preencode(d, o.identitySwapV2),
2627 o.contact && e.fixed32.preencode(d, o.contact))
2628 },
2629 encode(d, o) {
2630 const c =
2631 (o.initiator ? 1 : 0) |
2632 (o.fastForwardTo ? 2 : 0) |
2633 (o.identitySwap ? 4 : 0) |
2634 (o.identitySwapV2 ? 8 : 0) |
2635 (o.contact ? 16 : 0)
2636 ;(e.fixed32.encode(d, o.roomKey),
2637 e.buffer.encode(d, o.encryptionKey),
2638 e.fixed32.encode(d, o.mailbox),
2639 vc.encode(d, o.status),
2640 e.uint.encode(d, o.clock),
2641 e.uint.encode(d, c),
2642 o.initiator && n.encode(d, o.initiator),
2643 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2644 o.identitySwap && gc.encode(d, o.identitySwap),
2645 o.identitySwapV2 && kc.encode(d, o.identitySwapV2),
2646 o.contact && e.fixed32.encode(d, o.contact))
2647 },
2648 decode(d) {
2649 const o = e.fixed32.decode(d),
2650 c = e.buffer.decode(d),
2651 r = e.fixed32.decode(d),
2652 t = vc.decode(d),
2653 i = e.uint.decode(d),
2654 a = e.uint.decode(d)
2655 return {
2656 roomKey: o,
2657 encryptionKey: c,
2658 mailbox: r,
2659 status: t,
2660 clock: i,
2661 initiator: 1 & a ? n.decode(d) : null,
2662 fastForwardTo: 2 & a ? e.fixed32.decode(d) : null,
2663 identitySwap: 4 & a ? gc.decode(d) : null,
2664 identitySwapV2: 8 & a ? kc.decode(d) : null,
2665 contact: 16 & a ? e.fixed32.decode(d) : null,
2666 }
2667 },
2668 },
2669 Kc = oe,
2670 wc = {
2671 preencode(d, o) {
2672 ;(Kc.preencode(d, o.header),
2673 e.fixed32.preencode(d, o.roomKey),
2674 e.buffer.preencode(d, o.encryptionKey),
2675 e.fixed32.preencode(d, o.mailbox),
2676 d.end++,
2677 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2678 o.initiator && n.preencode(d, o.initiator),
2679 o.dm && e.fixed32.preencode(d, o.dm))
2680 },
2681 encode(d, o) {
2682 const c =
2683 (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0) | (o.dm ? 4 : 0) | (o.isReadOnly ? 8 : 0)
2684 ;(Kc.encode(d, o.header),
2685 e.fixed32.encode(d, o.roomKey),
2686 e.buffer.encode(d, o.encryptionKey),
2687 e.fixed32.encode(d, o.mailbox),
2688 e.uint.encode(d, c),
2689 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2690 o.initiator && n.encode(d, o.initiator),
2691 o.dm && e.fixed32.encode(d, o.dm))
2692 },
2693 decode(d) {
2694 const o = Kc.decode(d),
2695 c = e.fixed32.decode(d),
2696 r = e.buffer.decode(d),
2697 t = e.fixed32.decode(d),
2698 i = e.uint.decode(d)
2699 return {
2700 header: o,
2701 roomKey: c,
2702 encryptionKey: r,
2703 mailbox: t,
2704 fastForwardTo: 1 & i ? e.fixed32.decode(d) : null,
2705 initiator: 2 & i ? n.decode(d) : null,
2706 dm: 4 & i ? e.fixed32.decode(d) : null,
2707 isReadOnly: !!(8 & i),
2708 }
2709 },
2710 },
2711 Pc = oe,
2712 Rc = {
2713 preencode(d, o) {
2714 ;(Pc.preencode(d, o.header), e.fixed32.preencode(d, o.discoveryKey))
2715 },
2716 encode(d, o) {
2717 ;(Pc.encode(d, o.header), e.fixed32.encode(d, o.discoveryKey))
2718 },
2719 decode: (d) => ({ header: Pc.decode(d), discoveryKey: e.fixed32.decode(d) }),
2720 },
2721 Tc = oe,
2722 Ac = vc,
2723 qc = {
2724 preencode(d, o) {
2725 ;(Tc.preencode(d, o.header),
2726 e.fixed32.preencode(d, o.roomKey),
2727 e.uint.preencode(d, o.key),
2728 Ac.preencode(d, o.status))
2729 },
2730 encode(d, o) {
2731 ;(Tc.encode(d, o.header),
2732 e.fixed32.encode(d, o.roomKey),
2733 e.uint.encode(d, o.key),
2734 Ac.encode(d, o.status))
2735 },
2736 decode: (d) => ({
2737 header: Tc.decode(d),
2738 roomKey: e.fixed32.decode(d),
2739 key: e.uint.decode(d),
2740 status: Ac.decode(d),
2741 }),
2742 },
2743 Mc = {
2744 preencode(e, d) {
2745 e.end++
2746 },
2747 encode(d, o) {
2748 const n = o.isBlocked ? 1 : 0
2749 e.uint.encode(d, n)
2750 },
2751 decode: (d) => ({ isBlocked: !!(1 & e.uint.decode(d)) }),
2752 },
2753 Cc = {
2754 preencode(d, o) {
2755 ;(e.fixed32.preencode(d, o.memberKey),
2756 e.uint.preencode(d, o.clock),
2757 $p.preencode(d, o.status),
2758 d.end++,
2759 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2760 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2761 },
2762 encode(d, o) {
2763 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2764 ;(e.fixed32.encode(d, o.memberKey),
2765 e.uint.encode(d, o.clock),
2766 $p.encode(d, o.status),
2767 e.uint.encode(d, n),
2768 o.mailbox && e.fixed32.encode(d, o.mailbox),
2769 o.roomKey && e.fixed32.encode(d, o.roomKey))
2770 },
2771 decode(d) {
2772 const o = e.fixed32.decode(d),
2773 n = e.uint.decode(d),
2774 c = $p.decode(d),
2775 r = e.uint.decode(d)
2776 return {
2777 memberKey: o,
2778 clock: n,
2779 status: c,
2780 mailbox: 1 & r ? e.fixed32.decode(d) : null,
2781 roomKey: 2 & r ? e.fixed32.decode(d) : null,
2782 }
2783 },
2784 },
2785 Dc = oe,
2786 Ic = e.frame(Xn),
2787 Sc = {
2788 preencode(e, d) {
2789 ;(Dc.preencode(e, d.header), Ic.preencode(e, d.contact))
2790 },
2791 encode(e, d) {
2792 ;(Dc.encode(e, d.header), Ic.encode(e, d.contact))
2793 },
2794 decode: (e) => ({ header: Dc.decode(e), contact: Ic.decode(e) }),
2795 },
2796 Fc = oe,
2797 Lc = {
2798 preencode(d, o) {
2799 ;(Fc.preencode(d, o.header),
2800 e.fixed32.preencode(d, o.memberKey),
2801 e.uint.preencode(d, o.key),
2802 _p.preencode(d, o.status))
2803 },
2804 encode(d, o) {
2805 ;(Fc.encode(d, o.header),
2806 e.fixed32.encode(d, o.memberKey),
2807 e.uint.encode(d, o.key),
2808 _p.encode(d, o.status))
2809 },
2810 decode: (d) => ({
2811 header: Fc.decode(d),
2812 memberKey: e.fixed32.decode(d),
2813 key: e.uint.decode(d),
2814 status: _p.decode(d),
2815 }),
2816 },
2817 jc = oe,
2818 Ec = {
2819 preencode(d, o) {
2820 ;(jc.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
2821 },
2822 encode(d, o) {
2823 ;(jc.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
2824 },
2825 decode: (d) => ({ header: jc.decode(d), memberKey: e.fixed32.decode(d) }),
2826 },
2827 Bc = oe,
2828 Nc = {
2829 preencode(d, o) {
2830 ;(Bc.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
2831 },
2832 encode(d, o) {
2833 ;(Bc.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
2834 },
2835 decode: (d) => ({ header: Bc.decode(d), memberKey: e.fixed32.decode(d) }),
2836 },
2837 Oc = {
2838 preencode(e, d) {
2839 e.end++
2840 },
2841 encode(d, o) {
2842 const n =
2843 (o.isPending ? 1 : 0) |
2844 (o.isAccepted ? 2 : 0) |
2845 (o.isRejected ? 4 : 0) |
2846 (o.isDiscarded ? 8 : 0) |
2847 (o.isSeen ? 16 : 0)
2848 e.uint.encode(d, n)
2849 },
2850 decode(d) {
2851 const o = e.uint.decode(d)
2852 return {
2853 isPending: !!(1 & o),
2854 isAccepted: !!(2 & o),
2855 isRejected: !!(4 & o),
2856 isDiscarded: !!(8 & o),
2857 isSeen: !!(16 & o),
2858 }
2859 },
2860 },
2861 Vc = Pe,
2862 Uc = e.frame(i),
2863 Jc = {
2864 preencode(d, o) {
2865 ;(Vc.preencode(d, o.sender),
2866 Uc.preencode(d, o.keys),
2867 e.fixed32.preencode(d, o.mailbox),
2868 d.end++,
2869 o.message && e.string.preencode(d, o.message))
2870 },
2871 encode(d, o) {
2872 const n = o.message ? 1 : 0
2873 ;(Vc.encode(d, o.sender),
2874 Uc.encode(d, o.keys),
2875 e.fixed32.encode(d, o.mailbox),
2876 e.uint.encode(d, n),
2877 o.message && e.string.encode(d, o.message))
2878 },
2879 decode: (d) => ({
2880 sender: Vc.decode(d),
2881 keys: Uc.decode(d),
2882 mailbox: e.fixed32.decode(d),
2883 message: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2884 }),
2885 },
2886 zc = e.frame(Jc),
2887 Wc = {
2888 preencode(e, d) {
2889 ;(zc.preencode(e, d.body), ie.preencode(e, d.attestation))
2890 },
2891 encode(e, d) {
2892 ;(zc.encode(e, d.body), ie.encode(e, d.attestation))
2893 },
2894 decode: (e) => ({ body: zc.decode(e), attestation: ie.decode(e) }),
2895 },
2896 Hc = me,
2897 Gc = e.frame(Oc),
2898 Qc = Uc,
2899 Xc = {
2900 preencode(d, o) {
2901 ;(e.fixed32.preencode(d, o.memberKey),
2902 e.uint.preencode(d, o.clock),
2903 Hc.preencode(d, o.sender),
2904 Gc.preencode(d, o.status),
2905 Qc.preencode(d, o.keys),
2906 e.fixed32.preencode(d, o.mailbox),
2907 d.end++,
2908 o.message && e.string.preencode(d, o.message),
2909 o.sentAt && e.uint.preencode(d, o.sentAt))
2910 },
2911 encode(d, o) {
2912 const n = (o.message ? 1 : 0) | (o.sentAt ? 2 : 0)
2913 ;(e.fixed32.encode(d, o.memberKey),
2914 e.uint.encode(d, o.clock),
2915 Hc.encode(d, o.sender),
2916 Gc.encode(d, o.status),
2917 Qc.encode(d, o.keys),
2918 e.fixed32.encode(d, o.mailbox),
2919 e.uint.encode(d, n),
2920 o.message && e.string.encode(d, o.message),
2921 o.sentAt && e.uint.encode(d, o.sentAt))
2922 },
2923 decode(d) {
2924 const o = e.fixed32.decode(d),
2925 n = e.uint.decode(d),
2926 c = Hc.decode(d),
2927 r = Gc.decode(d),
2928 t = Qc.decode(d),
2929 i = e.fixed32.decode(d),
2930 a = e.uint.decode(d)
2931 return {
2932 memberKey: o,
2933 clock: n,
2934 sender: c,
2935 status: r,
2936 keys: t,
2937 mailbox: i,
2938 message: 1 & a ? e.string.decode(d) : null,
2939 sentAt: 2 & a ? e.uint.decode(d) : 0,
2940 }
2941 },
2942 },
2943 Yc = oe,
2944 Zc = {
2945 preencode(d, o) {
2946 ;(Yc.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
2947 },
2948 encode(d, o) {
2949 ;(Yc.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
2950 },
2951 decode: (d) => ({ header: Yc.decode(d), blindRequest: e.buffer.decode(d) }),
2952 },
2953 $c = oe,
2954 _c = Gc,
2955 er = {
2956 preencode(d, o) {
2957 ;($c.preencode(d, o.header),
2958 e.fixed32.preencode(d, o.memberKey),
2959 e.uint.preencode(d, o.key),
2960 _c.preencode(d, o.status),
2961 d.end++,
2962 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2963 },
2964 encode(d, o) {
2965 const n = o.roomKey ? 1 : 0
2966 ;($c.encode(d, o.header),
2967 e.fixed32.encode(d, o.memberKey),
2968 e.uint.encode(d, o.key),
2969 _c.encode(d, o.status),
2970 e.uint.encode(d, n),
2971 o.roomKey && e.fixed32.encode(d, o.roomKey))
2972 },
2973 decode: (d) => ({
2974 header: $c.decode(d),
2975 memberKey: e.fixed32.decode(d),
2976 key: e.uint.decode(d),
2977 status: _c.decode(d),
2978 roomKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
2979 }),
2980 },
2981 dr = {
2982 preencode(d, o) {
2983 ;(e.uint.preencode(d, o.timestamp),
2984 e.fixed32.preencode(d, o.key),
2985 e.fixed32.preencode(d, o.mailbox))
2986 },
2987 encode(d, o) {
2988 ;(e.uint.encode(d, o.timestamp), e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.mailbox))
2989 },
2990 decode: (d) => ({
2991 version: e.uint.decode(d),
2992 timestamp: e.uint.decode(d),
2993 key: e.fixed32.decode(d),
2994 mailbox: e.fixed32.decode(d),
2995 }),
2996 },
2997 or = {
2998 preencode(d, o) {
2999 switch ((e.uint.preencode(d, o.version), o.version)) {
3000 case 0:
3001 case 1:
3002 dr.preencode(d, o)
3003 break
3004 default:
3005 throw new Error("Unsupported version")
3006 }
3007 },
3008 encode(d, o) {
3009 switch ((e.uint.encode(d, o.version), o.version)) {
3010 case 0:
3011 case 1:
3012 dr.encode(d, o)
3013 break
3014 default:
3015 throw new Error("Unsupported version")
3016 }
3017 },
3018 decode(d) {
3019 const o = d.start,
3020 n = e.uint.decode(d)
3021 switch (((d.start = o), n)) {
3022 case 0:
3023 case 1:
3024 return dr.decode(d)
3025 default:
3026 throw new Error("Unsupported version")
3027 }
3028 },
3029 },
3030 nr = {
3031 preencode(d, o) {
3032 ;(e.fixed32.preencode(d, o.deviceKey), e.fixed32.preencode(d, o.key))
3033 },
3034 encode(d, o) {
3035 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.key))
3036 },
3037 decode: (d) => ({ deviceKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
3038 },
3039 cr = oe,
3040 rr = {
3041 preencode(d, o) {
3042 ;(cr.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3043 },
3044 encode(d, o) {
3045 ;(cr.encode(d, o.header), e.fixed32.encode(d, o.key))
3046 },
3047 decode: (d) => ({ header: cr.decode(d), key: e.fixed32.decode(d) }),
3048 },
3049 tr = oe,
3050 ir = {
3051 preencode(d, o) {
3052 ;(tr.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3053 },
3054 encode(d, o) {
3055 ;(tr.encode(d, o.header), e.fixed32.encode(d, o.key))
3056 },
3057 decode: (d) => ({ header: tr.decode(d), key: e.fixed32.decode(d) }),
3058 },
3059 ar = {
3060 preencode(e, d) {
3061 e.end++
3062 },
3063 encode(d, o) {
3064 const n = o.disableReadReceipts ? 1 : 0
3065 e.uint.encode(d, n)
3066 },
3067 decode: (d) => ({ disableReadReceipts: !!(1 & e.uint.decode(d)) }),
3068 },
3069 sr = { disableReadReceipts: "disableReadReceipts" },
3070 pr = {
3071 preencode(e, d) {
3072 e.end++
3073 },
3074 encode(d, o) {
3075 if ("disableReadReceipts" !== o) throw new Error("Unknown enum")
3076 e.uint.encode(d, 1)
3077 },
3078 decode: (d) => (1 === e.uint.decode(d) ? "disableReadReceipts" : null),
3079 },
3080 ur = oe,
3081 lr = e.frame(ar),
3082 fr = {
3083 preencode(e, d) {
3084 ;(ur.preencode(e, d.header), pr.preencode(e, d.key), lr.preencode(e, d.settings))
3085 },
3086 encode(e, d) {
3087 ;(ur.encode(e, d.header), pr.encode(e, d.key), lr.encode(e, d.settings))
3088 },
3089 decode: (e) => ({ header: ur.decode(e), key: pr.decode(e), settings: lr.decode(e) }),
3090 },
3091 mr = {
3092 preencode(d, o) {
3093 ;(e.fixed32.preencode(d, o.discoveryPublicKey),
3094 e.uint.preencode(d, o.timestamp),
3095 d.end++,
3096 o.lastSynced && e.uint.preencode(d, o.lastSynced))
3097 },
3098 encode(d, o) {
3099 const n = (o.lastSynced ? 1 : 0) | (o.dirty ? 2 : 0)
3100 ;(e.fixed32.encode(d, o.discoveryPublicKey),
3101 e.uint.encode(d, o.timestamp),
3102 e.uint.encode(d, n),
3103 o.lastSynced && e.uint.encode(d, o.lastSynced))
3104 },
3105 decode(d) {
3106 const o = e.fixed32.decode(d),
3107 n = e.uint.decode(d),
3108 c = e.uint.decode(d)
3109 return {
3110 discoveryPublicKey: o,
3111 timestamp: n,
3112 lastSynced: 1 & c ? e.uint.decode(d) : 0,
3113 dirty: !!(2 & c),
3114 }
3115 },
3116 },
3117 yr = {
3118 preencode(d, o) {
3119 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.activeRooms))
3120 },
3121 encode(d, o) {
3122 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.activeRooms))
3123 },
3124 decode: (d) => ({ rooms: e.uint.decode(d), activeRooms: e.uint.decode(d) }),
3125 },
3126 xr = I,
3127 br = _,
3128 vr = {
3129 preencode(e, d) {
3130 ;(e.end++, d.blockedMembers && br.preencode(e, d.blockedMembers))
3131 },
3132 encode(d, o) {
3133 const n = o.blockedMembers ? 1 : 0
3134 ;(e.uint.encode(d, n), o.blockedMembers && br.encode(d, o.blockedMembers))
3135 },
3136 decode: (d) => ({ blockedMembers: 1 & e.uint.decode(d) ? br.decode(d) : null }),
3137 },
3138 gr = e.frame(X),
3139 kr = e.frame(vr),
3140 hr = {
3141 preencode(d, o) {
3142 ;(e.buffer.preencode(d, o.encryptionKey),
3143 e.fixed32.preencode(d, o.seed),
3144 gr.preencode(d, o.capabilities),
3145 n.preencode(d, o.initiator),
3146 e.fixed32.preencode(d, o.fastForwardTo),
3147 d.end++,
3148 o.privateProfile && kr.preencode(d, o.privateProfile))
3149 },
3150 encode(d, o) {
3151 const c = o.privateProfile ? 1 : 0
3152 ;(e.buffer.encode(d, o.encryptionKey),
3153 e.fixed32.encode(d, o.seed),
3154 gr.encode(d, o.capabilities),
3155 n.encode(d, o.initiator),
3156 e.fixed32.encode(d, o.fastForwardTo),
3157 e.uint.encode(d, c),
3158 o.privateProfile && kr.encode(d, o.privateProfile))
3159 },
3160 decode: (d) => ({
3161 encryptionKey: e.buffer.decode(d),
3162 seed: e.fixed32.decode(d),
3163 capabilities: gr.decode(d),
3164 initiator: n.decode(d),
3165 fastForwardTo: e.fixed32.decode(d),
3166 privateProfile: 1 & e.uint.decode(d) ? kr.decode(d) : null,
3167 }),
3168 },
3169 Kr = {
3170 preencode(d, o) {
3171 ;(d.end++, o.count && e.uint.preencode(d, o.count))
3172 },
3173 encode(d, o) {
3174 const n = o.count ? 1 : 0
3175 ;(e.uint.encode(d, n), o.count && e.uint.encode(d, o.count))
3176 },
3177 decode: (d) => ({ count: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0 }),
3178 },
3179 wr = e.frame(hr),
3180 Pr = {
3181 preencode(d, o) {
3182 ;(e.fixed32.preencode(d, o.roomKey),
3183 e.uint.preencode(d, o.priority),
3184 d.end++,
3185 o.v3 && wr.preencode(d, o.v3),
3186 o.timestamp && e.uint.preencode(d, o.timestamp))
3187 },
3188 encode(d, o) {
3189 const n = (o.v3 ? 1 : 0) | (o.errored ? 2 : 0) | (o.timestamp ? 4 : 0)
3190 ;(e.fixed32.encode(d, o.roomKey),
3191 e.uint.encode(d, o.priority),
3192 e.uint.encode(d, n),
3193 o.v3 && wr.encode(d, o.v3),
3194 o.timestamp && e.uint.encode(d, o.timestamp))
3195 },
3196 decode(d) {
3197 const o = e.fixed32.decode(d),
3198 n = e.uint.decode(d),
3199 c = e.uint.decode(d)
3200 return {
3201 roomKey: o,
3202 priority: n,
3203 v3: 1 & c ? wr.decode(d) : null,
3204 errored: !!(2 & c),
3205 timestamp: 4 & c ? e.uint.decode(d) : 0,
3206 }
3207 },
3208 },
3209 Rr = {
3210 preencode(e, d) {
3211 e.end++
3212 },
3213 encode(d, o) {
3214 const n = o.isConfirmed ? 1 : 0
3215 e.uint.encode(d, n)
3216 },
3217 decode: (d) => ({ isConfirmed: !!(1 & e.uint.decode(d)) }),
3218 },
3219 Tr = {
3220 preencode(d, o) {
3221 e.fixed32.preencode(d, o.privateProfileKey)
3222 },
3223 encode(d, o) {
3224 e.fixed32.encode(d, o.privateProfileKey)
3225 },
3226 decode: (d) => ({ privateProfileKey: e.fixed32.decode(d) }),
3227 },
3228 Ar = e.frame(Rr),
3229 qr = gc,
3230 Mr = e.frame(xc),
3231 Cr = {
3232 preencode(d, o) {
3233 ;(e.fixed32.preencode(d, o.publicKey),
3234 e.fixed32.preencode(d, o.privateProfileKey),
3235 t.preencode(d, o.deviceKeyPair),
3236 e.buffer.preencode(d, o.deviceProof),
3237 Ar.preencode(d, o.status),
3238 d.end++,
3239 o.entropy && e.buffer.preencode(d, o.entropy),
3240 o.swap && qr.preencode(d, o.swap),
3241 o.swapV2 && Mr.preencode(d, o.swapV2))
3242 },
3243 encode(d, o) {
3244 const n = (o.entropy ? 1 : 0) | (o.swap ? 2 : 0) | (o.swapV2 ? 4 : 0)
3245 ;(e.fixed32.encode(d, o.publicKey),
3246 e.fixed32.encode(d, o.privateProfileKey),
3247 t.encode(d, o.deviceKeyPair),
3248 e.buffer.encode(d, o.deviceProof),
3249 Ar.encode(d, o.status),
3250 e.uint.encode(d, n),
3251 o.entropy && e.buffer.encode(d, o.entropy),
3252 o.swap && qr.encode(d, o.swap),
3253 o.swapV2 && Mr.encode(d, o.swapV2))
3254 },
3255 decode(d) {
3256 const o = e.fixed32.decode(d),
3257 n = e.fixed32.decode(d),
3258 c = t.decode(d),
3259 r = e.buffer.decode(d),
3260 i = Ar.decode(d),
3261 a = e.uint.decode(d)
3262 return {
3263 publicKey: o,
3264 privateProfileKey: n,
3265 deviceKeyPair: c,
3266 deviceProof: r,
3267 status: i,
3268 entropy: 1 & a ? e.buffer.decode(d) : null,
3269 swap: 2 & a ? qr.decode(d) : null,
3270 swapV2: 4 & a ? Mr.decode(d) : null,
3271 }
3272 },
3273 },
3274 Dr = {
3275 RestoreIdentity: 1,
3276 CreateRoom: 2,
3277 LeaveRoom: 3,
3278 ClearRoom: 4,
3279 JoinRoomInvitation: 5,
3280 JoinRoomKeys: 6,
3281 JoinRoomResponse: 7,
3282 SendContactRequest: 8,
3283 TestFastTask: 9,
3284 TestSlowTask: 10,
3285 TestErrorTask: 11,
3286 },
3287 Ir = {
3288 preencode(e, d) {
3289 e.end++
3290 },
3291 encode(d, o) {
3292 if (o > 11) throw new Error("Unknown enum")
3293 e.uint.encode(d, o)
3294 },
3295 decode: (d) => e.uint.decode(d),
3296 },
3297 Sr = {
3298 preencode(d, o) {
3299 ;(e.fixed32.preencode(d, o.roomKey),
3300 e.buffer.preencode(d, o.encryptionKey),
3301 d.end++,
3302 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
3303 o.initiator && n.preencode(d, o.initiator))
3304 },
3305 encode(d, o) {
3306 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0)
3307 ;(e.fixed32.encode(d, o.roomKey),
3308 e.buffer.encode(d, o.encryptionKey),
3309 e.uint.encode(d, c),
3310 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3311 o.initiator && n.encode(d, o.initiator))
3312 },
3313 decode(d) {
3314 const o = e.fixed32.decode(d),
3315 c = e.buffer.decode(d),
3316 r = e.uint.decode(d)
3317 return {
3318 roomKey: o,
3319 encryptionKey: c,
3320 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3321 initiator: 2 & r ? n.decode(d) : null,
3322 }
3323 },
3324 },
3325 Fr = uc,
3326 Lr = {
3327 preencode(e, d) {
3328 Fr.preencode(e, d.invitation)
3329 },
3330 encode(e, d) {
3331 Fr.encode(e, d.invitation)
3332 },
3333 decode: (e) => ({ invitation: Fr.decode(e) }),
3334 },
3335 jr = {
3336 preencode(d, o) {
3337 ;(e.fixed32.preencode(d, o.mailbox),
3338 t.preencode(d, o.keyPair),
3339 e.buffer.preencode(d, o.response))
3340 },
3341 encode(d, o) {
3342 ;(e.fixed32.encode(d, o.mailbox), t.encode(d, o.keyPair), e.buffer.encode(d, o.response))
3343 },
3344 decode: (d) => ({
3345 mailbox: e.fixed32.decode(d),
3346 keyPair: t.decode(d),
3347 response: e.buffer.decode(d),
3348 }),
3349 },
3350 Er = de,
3351 Br = {
3352 preencode(d, o) {
3353 ;(e.fixed32.preencode(d, o.roomKey),
3354 e.buffer.preencode(d, o.encryptionKey),
3355 d.end++,
3356 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
3357 o.initiator && n.preencode(d, o.initiator),
3358 o.mailbox && e.fixed32.preencode(d, o.mailbox))
3359 },
3360 encode(d, o) {
3361 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0) | (o.mailbox ? 4 : 0)
3362 ;(e.fixed32.encode(d, o.roomKey),
3363 e.buffer.encode(d, o.encryptionKey),
3364 e.uint.encode(d, c),
3365 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3366 o.initiator && n.encode(d, o.initiator),
3367 o.mailbox && e.fixed32.encode(d, o.mailbox))
3368 },
3369 decode(d) {
3370 const o = e.fixed32.decode(d),
3371 c = e.buffer.decode(d),
3372 r = e.uint.decode(d)
3373 return {
3374 roomKey: o,
3375 encryptionKey: c,
3376 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3377 initiator: 2 & r ? n.decode(d) : null,
3378 mailbox: 4 & r ? e.fixed32.decode(d) : null,
3379 }
3380 },
3381 },
3382 Nr = e.frame(Br),
3383 Or = {
3384 preencode(e, d) {
3385 Nr.preencode(e, d.keys)
3386 },
3387 encode(e, d) {
3388 Nr.encode(e, d.keys)
3389 },
3390 decode: (e) => ({ keys: Nr.decode(e) }),
3391 },
3392 Vr = e.frame(Kn),
3393 Ur = {
3394 preencode(d, o) {
3395 ;(e.fixed32.preencode(d, o.roomKey),
3396 e.buffer.preencode(d, o.encryptionKey),
3397 d.end++,
3398 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
3399 o.initiator && n.preencode(d, o.initiator),
3400 o.mailbox && e.fixed32.preencode(d, o.mailbox),
3401 o.keyPair && t.preencode(d, o.keyPair),
3402 o.genesis && Vr.preencode(d, o.genesis))
3403 },
3404 encode(d, o) {
3405 const c =
3406 (o.fastForwardTo ? 1 : 0) |
3407 (o.initiator ? 2 : 0) |
3408 (o.mailbox ? 4 : 0) |
3409 (o.keyPair ? 8 : 0) |
3410 (o.genesis ? 16 : 0) |
3411 (o.isPrivateProfile ? 32 : 0)
3412 ;(e.fixed32.encode(d, o.roomKey),
3413 e.buffer.encode(d, o.encryptionKey),
3414 e.uint.encode(d, c),
3415 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3416 o.initiator && n.encode(d, o.initiator),
3417 o.mailbox && e.fixed32.encode(d, o.mailbox),
3418 o.keyPair && t.encode(d, o.keyPair),
3419 o.genesis && Vr.encode(d, o.genesis))
3420 },
3421 decode(d) {
3422 const o = e.fixed32.decode(d),
3423 c = e.buffer.decode(d),
3424 r = e.uint.decode(d)
3425 return {
3426 roomKey: o,
3427 encryptionKey: c,
3428 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3429 initiator: 2 & r ? n.decode(d) : null,
3430 mailbox: 4 & r ? e.fixed32.decode(d) : null,
3431 keyPair: 8 & r ? t.decode(d) : null,
3432 genesis: 16 & r ? Vr.decode(d) : null,
3433 isPrivateProfile: !!(32 & r),
3434 }
3435 },
3436 },
3437 Jr = {
3438 preencode(d, o) {
3439 ;(e.fixed32.preencode(d, o.roomKey), d.end++)
3440 },
3441 encode(d, o) {
3442 const n = o.isGossiped ? 1 : 0
3443 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, n))
3444 },
3445 decode: (d) => ({ roomKey: e.fixed32.decode(d), isGossiped: !!(1 & e.uint.decode(d)) }),
3446 },
3447 zr = {
3448 preencode(d, o) {
3449 e.fixed32.preencode(d, o.roomKey)
3450 },
3451 encode(d, o) {
3452 e.fixed32.encode(d, o.roomKey)
3453 },
3454 decode: (d) => ({ roomKey: e.fixed32.decode(d) }),
3455 },
3456 Wr = {
3457 preencode(d, o) {
3458 ;(e.string.preencode(d, o.mnemonic),
3459 d.end++,
3460 o.profileDiscoveryTimeout && e.uint.preencode(d, o.profileDiscoveryTimeout))
3461 },
3462 encode(d, o) {
3463 const n = (o.profileDiscoveryTimeout ? 1 : 0) | (o.recover ? 2 : 0)
3464 ;(e.string.encode(d, o.mnemonic),
3465 e.uint.encode(d, n),
3466 o.profileDiscoveryTimeout && e.uint.encode(d, o.profileDiscoveryTimeout))
3467 },
3468 decode(d) {
3469 const o = e.string.decode(d),
3470 n = e.uint.decode(d)
3471 return {
3472 mnemonic: o,
3473 profileDiscoveryTimeout: 1 & n ? e.uint.decode(d) : 0,
3474 recover: !!(2 & n),
3475 }
3476 },
3477 },
3478 Hr = e.frame(ve),
3479 Gr = {
3480 preencode(d, o) {
3481 ;(e.fixed32.preencode(d, o.roomKey),
3482 e.fixed32.preencode(d, o.memberKey),
3483 d.end++,
3484 o.message && e.string.preencode(d, o.message),
3485 o.contactInfo && Hr.preencode(d, o.contactInfo))
3486 },
3487 encode(d, o) {
3488 const n = (o.message ? 1 : 0) | (o.contactInfo ? 2 : 0)
3489 ;(e.fixed32.encode(d, o.roomKey),
3490 e.fixed32.encode(d, o.memberKey),
3491 e.uint.encode(d, n),
3492 o.message && e.string.encode(d, o.message),
3493 o.contactInfo && Hr.encode(d, o.contactInfo))
3494 },
3495 decode(d) {
3496 const o = e.fixed32.decode(d),
3497 n = e.fixed32.decode(d),
3498 c = e.uint.decode(d)
3499 return {
3500 roomKey: o,
3501 memberKey: n,
3502 message: 1 & c ? e.string.decode(d) : null,
3503 contactInfo: 2 & c ? Hr.decode(d) : null,
3504 }
3505 },
3506 },
3507 Qr = {
3508 preencode(d, o) {
3509 ;(e.fixed32.preencode(d, o.key), d.end++)
3510 },
3511 encode(d, o) {
3512 const n = o.isPrivateProfile ? 1 : 0
3513 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, n))
3514 },
3515 decode: (d) => ({ key: e.fixed32.decode(d), isPrivateProfile: !!(1 & e.uint.decode(d)) }),
3516 },
3517 Xr = e.frame(Wr),
3518 Yr = e.frame(Ur),
3519 Zr = e.frame(Jr),
3520 $r = e.frame(zr),
3521 _r = e.frame(Lr),
3522 et = e.frame(Or),
3523 dt = e.frame(jr),
3524 ot = e.frame(Gr),
3525 nt = e.frame(Qr),
3526 ct = {
3527 preencode(d, o) {
3528 const n =
3529 (o.restoreIdentity ? 1 : 0) |
3530 (o.createRoom ? 2 : 0) |
3531 (o.leaveRoom ? 4 : 0) |
3532 (o.clearRoom ? 8 : 0) |
3533 (o.joinRoomInvitation ? 16 : 0) |
3534 (o.joinRoomKeys ? 32 : 0) |
3535 (o.joinRoomResponse ? 64 : 0) |
3536 (o.sendContactRequest ? 128 : 0) |
3537 (o.migrateV2Room ? 256 : 0)
3538 ;(e.fixed32.preencode(d, o.discoveryKey),
3539 e.uint.preencode(d, o.priority),
3540 e.uint.preencode(d, o.timestamp),
3541 e.uint.preencode(d, o.type),
3542 e.uint.preencode(d, n),
3543 o.restoreIdentity && Xr.preencode(d, o.restoreIdentity),
3544 o.createRoom && Yr.preencode(d, o.createRoom),
3545 o.leaveRoom && Zr.preencode(d, o.leaveRoom),
3546 o.clearRoom && $r.preencode(d, o.clearRoom),
3547 o.joinRoomInvitation && _r.preencode(d, o.joinRoomInvitation),
3548 o.joinRoomKeys && et.preencode(d, o.joinRoomKeys),
3549 o.joinRoomResponse && dt.preencode(d, o.joinRoomResponse),
3550 o.sendContactRequest && ot.preencode(d, o.sendContactRequest),
3551 o.migrateV2Room && nt.preencode(d, o.migrateV2Room))
3552 },
3553 encode(d, o) {
3554 const n =
3555 (o.restoreIdentity ? 1 : 0) |
3556 (o.createRoom ? 2 : 0) |
3557 (o.leaveRoom ? 4 : 0) |
3558 (o.clearRoom ? 8 : 0) |
3559 (o.joinRoomInvitation ? 16 : 0) |
3560 (o.joinRoomKeys ? 32 : 0) |
3561 (o.joinRoomResponse ? 64 : 0) |
3562 (o.sendContactRequest ? 128 : 0) |
3563 (o.migrateV2Room ? 256 : 0)
3564 ;(e.fixed32.encode(d, o.discoveryKey),
3565 e.uint.encode(d, o.priority),
3566 e.uint.encode(d, o.timestamp),
3567 e.uint.encode(d, o.type),
3568 e.uint.encode(d, n),
3569 o.restoreIdentity && Xr.encode(d, o.restoreIdentity),
3570 o.createRoom && Yr.encode(d, o.createRoom),
3571 o.leaveRoom && Zr.encode(d, o.leaveRoom),
3572 o.clearRoom && $r.encode(d, o.clearRoom),
3573 o.joinRoomInvitation && _r.encode(d, o.joinRoomInvitation),
3574 o.joinRoomKeys && et.encode(d, o.joinRoomKeys),
3575 o.joinRoomResponse && dt.encode(d, o.joinRoomResponse),
3576 o.sendContactRequest && ot.encode(d, o.sendContactRequest),
3577 o.migrateV2Room && nt.encode(d, o.migrateV2Room))
3578 },
3579 decode(d) {
3580 const o = e.fixed32.decode(d),
3581 n = e.uint.decode(d),
3582 c = e.uint.decode(d),
3583 r = e.uint.decode(d),
3584 t = e.uint.decode(d)
3585 return {
3586 discoveryKey: o,
3587 priority: n,
3588 timestamp: c,
3589 type: r,
3590 restoreIdentity: 1 & t ? Xr.decode(d) : null,
3591 createRoom: 2 & t ? Yr.decode(d) : null,
3592 leaveRoom: 4 & t ? Zr.decode(d) : null,
3593 clearRoom: 8 & t ? $r.decode(d) : null,
3594 joinRoomInvitation: 16 & t ? _r.decode(d) : null,
3595 joinRoomKeys: 32 & t ? et.decode(d) : null,
3596 joinRoomResponse: 64 & t ? dt.decode(d) : null,
3597 sendContactRequest: 128 & t ? ot.decode(d) : null,
3598 migrateV2Room: 256 & t ? nt.decode(d) : null,
3599 }
3600 },
3601 },
3602 rt = Je,
3603 tt = {
3604 preencode(d, o) {
3605 ;(e.buffer.preencode(d, o.seed), rt.preencode(d, o.invitation))
3606 },
3607 encode(d, o) {
3608 ;(e.buffer.encode(d, o.seed), rt.encode(d, o.invitation))
3609 },
3610 decode: (d) => ({ seed: e.buffer.decode(d), invitation: rt.decode(d) }),
3611 },
3612 it = {
3613 preencode(e, d) {
3614 e.end++
3615 },
3616 encode(d, o) {
3617 const n =
3618 (o.isWritable ? 1 : 0) |
3619 (o.isReadable ? 2 : 0) |
3620 (o.isPrivateProfile ? 4 : 0) |
3621 (o.isRemoved ? 8 : 0)
3622 e.uint.encode(d, n)
3623 },
3624 decode(d) {
3625 const o = e.uint.decode(d)
3626 return {
3627 isWritable: !!(1 & o),
3628 isReadable: !!(2 & o),
3629 isPrivateProfile: !!(4 & o),
3630 isRemoved: !!(8 & o),
3631 }
3632 },
3633 },
3634 at = {
3635 preencode(d, o) {
3636 ;(e.uint.preencode(d, o.creation),
3637 e.uint.preencode(d, o.latestSync),
3638 e.uint.preencode(d, o.latestChatMessage))
3639 },
3640 encode(d, o) {
3641 ;(e.uint.encode(d, o.creation),
3642 e.uint.encode(d, o.latestSync),
3643 e.uint.encode(d, o.latestChatMessage))
3644 },
3645 decode: (d) => ({
3646 creation: e.uint.decode(d),
3647 latestSync: e.uint.decode(d),
3648 latestChatMessage: e.uint.decode(d),
3649 }),
3650 },
3651 st = xn,
3652 pt = Mo,
3653 ut = e.frame(at),
3654 lt = gr,
3655 ft = e.frame(it),
3656 mt = e.frame(ue),
3657 yt = e.frame(wd),
3658 xt = sn,
3659 bt = gn,
3660 vt = e.frame(Bo),
3661 gt = _,
3662 kt = e.array(e.frame(Gn)),
3663 ht = e.frame(kd),
3664 Kt = vc,
3665 wt = {
3666 preencode(d, n) {
3667 const c =
3668 (n.selfDevice ? 1 : 0) |
3669 (n.selfMember ? 2 : 0) |
3670 (n.config ? 4 : 0) |
3671 (n.identity ? 8 : 0) |
3672 (n.lastMessage ? 16 : 0) |
3673 (n.dm ? 32 : 0) |
3674 (n.readLengths ? 64 : 0) |
3675 (n.lastMember ? 128 : 0) |
3676 (n.version ? 256 : 0) |
3677 (o >= 3 && n.preferences ? 512 : 0) |
3678 (o >= 4 && n.activeCall ? 1024 : 0)
3679 ;(e.fixed32.preencode(d, n.roomKey),
3680 e.fixed32.preencode(d, n.discoveryKey),
3681 e.buffer.preencode(d, n.encryptionKey),
3682 st.preencode(d, n.digest),
3683 pt.preencode(d, n.stats),
3684 ut.preencode(d, n.timestamps),
3685 e.uint.preencode(d, n.fork),
3686 e.uint.preencode(d, n.length),
3687 e.fixed32.preencode(d, n.seed),
3688 lt.preencode(d, n.capabilities),
3689 ft.preencode(d, n.status),
3690 e.uint.preencode(d, c),
3691 n.selfDevice && mt.preencode(d, n.selfDevice),
3692 n.selfMember && yt.preencode(d, n.selfMember),
3693 n.config && xt.preencode(d, n.config),
3694 n.identity && bt.preencode(d, n.identity),
3695 n.lastMessage && vt.preencode(d, n.lastMessage),
3696 n.dm && gt.preencode(d, n.dm),
3697 n.readLengths && kt.preencode(d, n.readLengths),
3698 n.lastMember && ht.preencode(d, n.lastMember),
3699 n.version && e.uint.preencode(d, n.version),
3700 o >= 3 && n.preferences && Kt.preencode(d, n.preferences),
3701 o >= 4 && n.activeCall && eu.preencode(d, n.activeCall))
3702 },
3703 encode(d, n) {
3704 const c =
3705 (n.selfDevice ? 1 : 0) |
3706 (n.selfMember ? 2 : 0) |
3707 (n.config ? 4 : 0) |
3708 (n.identity ? 8 : 0) |
3709 (n.lastMessage ? 16 : 0) |
3710 (n.dm ? 32 : 0) |
3711 (n.readLengths ? 64 : 0) |
3712 (n.lastMember ? 128 : 0) |
3713 (n.version ? 256 : 0) |
3714 (o >= 3 && n.preferences ? 512 : 0) |
3715 (o >= 4 && n.activeCall ? 1024 : 0)
3716 ;(e.fixed32.encode(d, n.roomKey),
3717 e.fixed32.encode(d, n.discoveryKey),
3718 e.buffer.encode(d, n.encryptionKey),
3719 st.encode(d, n.digest),
3720 pt.encode(d, n.stats),
3721 ut.encode(d, n.timestamps),
3722 e.uint.encode(d, n.fork),
3723 e.uint.encode(d, n.length),
3724 e.fixed32.encode(d, n.seed),
3725 lt.encode(d, n.capabilities),
3726 ft.encode(d, n.status),
3727 e.uint.encode(d, c),
3728 n.selfDevice && mt.encode(d, n.selfDevice),
3729 n.selfMember && yt.encode(d, n.selfMember),
3730 n.config && xt.encode(d, n.config),
3731 n.identity && bt.encode(d, n.identity),
3732 n.lastMessage && vt.encode(d, n.lastMessage),
3733 n.dm && gt.encode(d, n.dm),
3734 n.readLengths && kt.encode(d, n.readLengths),
3735 n.lastMember && ht.encode(d, n.lastMember),
3736 n.version && e.uint.encode(d, n.version),
3737 o >= 3 && n.preferences && Kt.encode(d, n.preferences),
3738 o >= 4 && n.activeCall && eu.encode(d, n.activeCall))
3739 },
3740 decode(d) {
3741 const n = e.fixed32.decode(d),
3742 c = e.fixed32.decode(d),
3743 r = e.buffer.decode(d),
3744 t = st.decode(d),
3745 i = pt.decode(d),
3746 a = ut.decode(d),
3747 s = e.uint.decode(d),
3748 p = e.uint.decode(d),
3749 u = e.fixed32.decode(d),
3750 l = lt.decode(d),
3751 f = ft.decode(d),
3752 m = e.uint.decode(d)
3753 return {
3754 roomKey: n,
3755 discoveryKey: c,
3756 encryptionKey: r,
3757 digest: t,
3758 stats: i,
3759 timestamps: a,
3760 fork: s,
3761 length: p,
3762 seed: u,
3763 capabilities: l,
3764 status: f,
3765 selfDevice: 1 & m ? mt.decode(d) : null,
3766 selfMember: 2 & m ? yt.decode(d) : null,
3767 config: 4 & m ? xt.decode(d) : null,
3768 identity: 8 & m ? bt.decode(d) : null,
3769 lastMessage: 16 & m ? vt.decode(d) : null,
3770 dm: 32 & m ? gt.decode(d) : null,
3771 readLengths: 64 & m ? kt.decode(d) : null,
3772 lastMember: 128 & m ? ht.decode(d) : null,
3773 version: 256 & m ? e.uint.decode(d) : 0,
3774 preferences: o >= 3 && 512 & m ? Kt.decode(d) : null,
3775 activeCall: o >= 4 && 1024 & m ? eu.decode(d) : null,
3776 }
3777 },
3778 },
3779 Pt = vc,
3780 Rt = {
3781 preencode(d, o) {
3782 ;(e.fixed32.preencode(d, o.roomKey), Pt.preencode(d, o.status))
3783 },
3784 encode(d, o) {
3785 ;(e.fixed32.encode(d, o.roomKey), Pt.encode(d, o.status))
3786 },
3787 decode: (d) => ({ roomKey: e.fixed32.decode(d), status: Pt.decode(d) }),
3788 },
3789 Tt = {
3790 preencode(d, o) {
3791 ;(e.fixed32.preencode(d, o.roomKey), d.end++, o.repairs && e.uint.preencode(d, o.repairs))
3792 },
3793 encode(d, o) {
3794 const n = o.repairs ? 1 : 0
3795 ;(e.fixed32.encode(d, o.roomKey),
3796 e.uint.encode(d, n),
3797 o.repairs && e.uint.encode(d, o.repairs))
3798 },
3799 decode: (d) => ({
3800 roomKey: e.fixed32.decode(d),
3801 repairs: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
3802 }),
3803 },
3804 At = {
3805 preencode(d, o) {
3806 ;(e.fixed32.preencode(d, o.mailbox),
3807 e.fixed32.preencode(d, o.key),
3808 d.end++,
3809 o.roomKey && e.fixed32.preencode(d, o.roomKey),
3810 o.keyPair && t.preencode(d, o.keyPair),
3811 o.responseKeyPair && t.preencode(d, o.responseKeyPair))
3812 },
3813 encode(d, o) {
3814 const n = (o.roomKey ? 1 : 0) | (o.keyPair ? 2 : 0) | (o.responseKeyPair ? 4 : 0)
3815 ;(e.fixed32.encode(d, o.mailbox),
3816 e.fixed32.encode(d, o.key),
3817 e.uint.encode(d, n),
3818 o.roomKey && e.fixed32.encode(d, o.roomKey),
3819 o.keyPair && t.encode(d, o.keyPair),
3820 o.responseKeyPair && t.encode(d, o.responseKeyPair))
3821 },
3822 decode(d) {
3823 const o = e.fixed32.decode(d),
3824 n = e.fixed32.decode(d),
3825 c = e.uint.decode(d)
3826 return {
3827 mailbox: o,
3828 key: n,
3829 roomKey: 1 & c ? e.fixed32.decode(d) : null,
3830 keyPair: 2 & c ? t.decode(d) : null,
3831 responseKeyPair: 4 & c ? t.decode(d) : null,
3832 }
3833 },
3834 },
3835 qt = {
3836 preencode(d, o) {
3837 ;(e.fixed32.preencode(d, o.key), e.fixed32.preencode(d, o.responsePublicKey))
3838 },
3839 encode(d, o) {
3840 ;(e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.responsePublicKey))
3841 },
3842 decode: (d) => ({ key: e.fixed32.decode(d), responsePublicKey: e.fixed32.decode(d) }),
3843 },
3844 Mt = me,
3845 Ct = {
3846 preencode(d, o) {
3847 ;(e.fixed32.preencode(d, o.key), Mt.preencode(d, o.profile))
3848 },
3849 encode(d, o) {
3850 ;(e.fixed32.encode(d, o.key), Mt.encode(d, o.profile))
3851 },
3852 decode: (d) => ({ key: e.fixed32.decode(d), profile: Mt.decode(d) }),
3853 },
3854 Dt = mt,
3855 It = {
3856 preencode(d, o) {
3857 ;(e.fixed32.preencode(d, o.roomKey), Dt.preencode(d, o.device))
3858 },
3859 encode(d, o) {
3860 ;(e.fixed32.encode(d, o.roomKey), Dt.encode(d, o.device))
3861 },
3862 decode: (d) => ({ roomKey: e.fixed32.decode(d), device: Dt.decode(d) }),
3863 },
3864 St = h,
3865 Ft = {
3866 preencode(d, n) {
3867 ;(St.preencode(d, n.file),
3868 e.fixed32.preencode(d, n.roomKey),
3869 d.end++,
3870 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
3871 o >= 4 && n.lastAccessed && e.uint.preencode(d, n.lastAccessed),
3872 o >= 4 && n.version && e.uint.preencode(d, n.version))
3873 },
3874 encode(d, n) {
3875 const c =
3876 (n.encryptionKey ? 1 : 0) |
3877 (n.cleared ? 2 : 0) |
3878 (n.own ? 4 : 0) |
3879 (o >= 4 && n.lastAccessed ? 8 : 0) |
3880 (o >= 4 && n.version ? 16 : 0)
3881 ;(St.encode(d, n.file),
3882 e.fixed32.encode(d, n.roomKey),
3883 e.uint.encode(d, c),
3884 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
3885 o >= 4 && n.lastAccessed && e.uint.encode(d, n.lastAccessed),
3886 o >= 4 && n.version && e.uint.encode(d, n.version))
3887 },
3888 decode(d) {
3889 const n = St.decode(d),
3890 c = e.fixed32.decode(d),
3891 r = e.uint.decode(d)
3892 return {
3893 file: n,
3894 roomKey: c,
3895 encryptionKey: 1 & r ? e.buffer.decode(d) : null,
3896 cleared: !!(2 & r),
3897 own: !!(4 & r),
3898 lastAccessed: o >= 4 && 8 & r ? e.uint.decode(d) : 0,
3899 version: o >= 4 && 16 & r ? e.uint.decode(d) : 0,
3900 }
3901 },
3902 },
3903 Lt = {
3904 preencode(d, o) {
3905 ;(d.end++,
3906 o.key && e.string.preencode(d, o.key),
3907 o.description && e.string.preencode(d, o.description))
3908 },
3909 encode(d, o) {
3910 const n = (o.key ? 1 : 0) | (o.value ? 2 : 0) | (o.description ? 4 : 0)
3911 ;(e.uint.encode(d, n),
3912 o.key && e.string.encode(d, o.key),
3913 o.description && e.string.encode(d, o.description))
3914 },
3915 decode(d) {
3916 const o = e.uint.decode(d)
3917 return {
3918 key: 1 & o ? e.string.decode(d) : null,
3919 value: !!(2 & o),
3920 description: 4 & o ? e.string.decode(d) : null,
3921 }
3922 },
3923 },
3924 jt = e.array(e.frame(Lt)),
3925 Et = {
3926 preencode(e, d) {
3927 ;(e.end++, d.flags && jt.preencode(e, d.flags))
3928 },
3929 encode(d, o) {
3930 const n = o.flags ? 1 : 0
3931 ;(e.uint.encode(d, n), o.flags && jt.encode(d, o.flags))
3932 },
3933 decode: (d) => ({ flags: 1 & e.uint.decode(d) ? jt.decode(d) : null }),
3934 },
3935 Bt = dd,
3936 Nt = {
3937 preencode(d, o) {
3938 ;(d.end++,
3939 o.nodes && Bt.preencode(d, o.nodes),
3940 o.concurrency && e.uint.preencode(d, o.concurrency),
3941 o.maxWindow && e.uint.preencode(d, o.maxWindow),
3942 o.randomPunchInterval && e.uint.preencode(d, o.randomPunchInterval),
3943 o.connectionKeepAlive && e.uint.preencode(d, o.connectionKeepAlive))
3944 },
3945 encode(d, o) {
3946 const n =
3947 (o.nodes ? 1 : 0) |
3948 (o.concurrency ? 2 : 0) |
3949 (o.maxWindow ? 4 : 0) |
3950 (o.randomPunchInterval ? 8 : 0) |
3951 (o.connectionKeepAlive ? 16 : 0)
3952 ;(e.uint.encode(d, n),
3953 o.nodes && Bt.encode(d, o.nodes),
3954 o.concurrency && e.uint.encode(d, o.concurrency),
3955 o.maxWindow && e.uint.encode(d, o.maxWindow),
3956 o.randomPunchInterval && e.uint.encode(d, o.randomPunchInterval),
3957 o.connectionKeepAlive && e.uint.encode(d, o.connectionKeepAlive))
3958 },
3959 decode(d) {
3960 const o = e.uint.decode(d)
3961 return {
3962 nodes: 1 & o ? Bt.decode(d) : null,
3963 concurrency: 2 & o ? e.uint.decode(d) : 0,
3964 maxWindow: 4 & o ? e.uint.decode(d) : 0,
3965 randomPunchInterval: 8 & o ? e.uint.decode(d) : 0,
3966 connectionKeepAlive: 16 & o ? e.uint.decode(d) : 0,
3967 }
3968 },
3969 },
3970 Ot = {
3971 preencode(d, o) {
3972 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.count))
3973 },
3974 encode(d, o) {
3975 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.count))
3976 },
3977 decode: (d) => ({ roomKey: e.fixed32.decode(d), count: e.uint.decode(d) }),
3978 },
3979 Vt = {
3980 preencode(d, o) {
3981 ;(d.end++,
3982 o.roomKey && e.fixed32.preencode(d, o.roomKey),
3983 o.coreKey && e.fixed32.preencode(d, o.coreKey))
3984 },
3985 encode(d, o) {
3986 const n = (o.roomKey ? 1 : 0) | (o.coreKey ? 2 : 0)
3987 ;(e.uint.encode(d, n),
3988 o.roomKey && e.fixed32.encode(d, o.roomKey),
3989 o.coreKey && e.fixed32.encode(d, o.coreKey))
3990 },
3991 decode(d) {
3992 const o = e.uint.decode(d)
3993 return {
3994 roomKey: 1 & o ? e.fixed32.decode(d) : null,
3995 coreKey: 2 & o ? e.fixed32.decode(d) : null,
3996 }
3997 },
3998 },
3999 Ut = e.frame(Vt),
4000 Jt = {
4001 preencode(d, o) {
4002 ;(e.string.preencode(d, o.code),
4003 e.string.preencode(d, o.message),
4004 e.string.preencode(d, o.stack),
4005 e.uint.preencode(d, o.timestamp),
4006 d.end++,
4007 o.details && Ut.preencode(d, o.details))
4008 },
4009 encode(d, o) {
4010 const n = o.details ? 1 : 0
4011 ;(e.string.encode(d, o.code),
4012 e.string.encode(d, o.message),
4013 e.string.encode(d, o.stack),
4014 e.uint.encode(d, o.timestamp),
4015 e.uint.encode(d, n),
4016 o.details && Ut.encode(d, o.details))
4017 },
4018 decode: (d) => ({
4019 code: e.string.decode(d),
4020 message: e.string.decode(d),
4021 stack: e.string.decode(d),
4022 timestamp: e.uint.decode(d),
4023 details: 1 & e.uint.decode(d) ? Ut.decode(d) : null,
4024 }),
4025 },
4026 zt = { RESUME: 1, WAKEUP: 2, PRESUSPEND: 3, SUSPEND: 4 },
4027 Wt = {
4028 preencode(e, d) {
4029 e.end++
4030 },
4031 encode(d, o) {
4032 if (o > 4) throw new Error("Unknown enum")
4033 e.uint.encode(d, o)
4034 },
4035 decode: (d) => e.uint.decode(d),
4036 },
4037 Ht = {
4038 preencode(d, o) {
4039 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.total))
4040 },
4041 encode(d, o) {
4042 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.total))
4043 },
4044 decode: (d) => ({ roomKey: e.fixed32.decode(d), total: e.uint.decode(d) }),
4045 },
4046 Gt = a,
4047 Qt = {
4048 preencode(d, o) {
4049 e.uint.preencode(d, o.duration)
4050 },
4051 encode(d, o) {
4052 e.uint.encode(d, o.duration)
4053 },
4054 decode: (d) => ({ duration: e.uint.decode(d) }),
4055 },
4056 Xt = j,
4057 Yt = j,
4058 Zt = e.frame(Gt),
4059 $t = {
4060 preencode(e, d) {
4061 Zt.preencode(e, d.header)
4062 },
4063 encode(e, d) {
4064 Zt.encode(e, d.header)
4065 },
4066 decode: (e) => ({ header: Zt.decode(e) }),
4067 },
4068 _t = e.frame(Qt),
4069 ei = {
4070 preencode(e, d) {
4071 _t.preencode(e, d.header)
4072 },
4073 encode(e, d) {
4074 _t.encode(e, d.header)
4075 },
4076 decode: (e) => ({ header: _t.decode(e) }),
4077 },
4078 di = Zt,
4079 oi = {
4080 preencode(e, d) {
4081 di.preencode(e, d.header)
4082 },
4083 encode(e, d) {
4084 di.encode(e, d.header)
4085 },
4086 decode: (e) => ({ header: di.decode(e) }),
4087 },
4088 ni = j,
4089 ci = Zt,
4090 ri = sn,
4091 ti = H,
4092 ii = {
4093 preencode(e, d) {
4094 ;(ci.preencode(e, d.header),
4095 e.end++,
4096 d.config && ri.preencode(e, d.config),
4097 d.settings && ti.preencode(e, d.settings))
4098 },
4099 encode(d, o) {
4100 const n = (o.config ? 1 : 0) | (o.settings ? 2 : 0)
4101 ;(ci.encode(d, o.header),
4102 e.uint.encode(d, n),
4103 o.config && ri.encode(d, o.config),
4104 o.settings && ti.encode(d, o.settings))
4105 },
4106 decode(d) {
4107 const o = ci.decode(d),
4108 n = e.uint.decode(d)
4109 return {
4110 header: o,
4111 config: 1 & n ? ri.decode(d) : null,
4112 settings: 2 & n ? ti.decode(d) : null,
4113 }
4114 },
4115 },
4116 ai = _t,
4117 si = {
4118 preencode(d, o) {
4119 ;(ai.preencode(d, o.header), d.end++, o.roomKey && e.fixed32.preencode(d, o.roomKey))
4120 },
4121 encode(d, o) {
4122 const n = o.roomKey ? 1 : 0
4123 ;(ai.encode(d, o.header), e.uint.encode(d, n), o.roomKey && e.fixed32.encode(d, o.roomKey))
4124 },
4125 decode: (d) => ({
4126 header: ai.decode(d),
4127 roomKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
4128 }),
4129 },
4130 pi = Zt,
4131 ui = {
4132 preencode(d, o) {
4133 ;(pi.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey))
4134 },
4135 encode(d, o) {
4136 ;(pi.encode(d, o.header), e.fixed32.encode(d, o.roomKey))
4137 },
4138 decode: (d) => ({ header: pi.decode(d), roomKey: e.fixed32.decode(d) }),
4139 },
4140 li = Zt,
4141 fi = {
4142 preencode(d, o) {
4143 ;(li.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey))
4144 },
4145 encode(d, o) {
4146 ;(li.encode(d, o.header), e.fixed32.encode(d, o.roomKey))
4147 },
4148 decode: (d) => ({ header: li.decode(d), roomKey: e.fixed32.decode(d) }),
4149 },
4150 mi = Zt,
4151 yi = {
4152 preencode(d, o) {
4153 ;(mi.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey))
4154 },
4155 encode(d, o) {
4156 ;(mi.encode(d, o.header), e.fixed32.encode(d, o.roomKey))
4157 },
4158 decode: (d) => ({ header: mi.decode(d), roomKey: e.fixed32.decode(d) }),
4159 },
4160 xi = _t,
4161 bi = {
4162 preencode(e, d) {
4163 xi.preencode(e, d.header)
4164 },
4165 encode(e, d) {
4166 xi.encode(e, d.header)
4167 },
4168 decode: (e) => ({ header: xi.decode(e) }),
4169 },
4170 vi = Zt,
4171 gi = sn,
4172 ki = {
4173 preencode(d, o) {
4174 ;(vi.preencode(d, o.header),
4175 e.fixed32.preencode(d, o.roomKey),
4176 e.uint.preencode(d, o.key),
4177 gi.preencode(d, o.config))
4178 },
4179 encode(d, o) {
4180 ;(vi.encode(d, o.header),
4181 e.fixed32.encode(d, o.roomKey),
4182 e.uint.encode(d, o.key),
4183 gi.encode(d, o.config))
4184 },
4185 decode: (d) => ({
4186 header: vi.decode(d),
4187 roomKey: e.fixed32.decode(d),
4188 key: e.uint.decode(d),
4189 config: gi.decode(d),
4190 }),
4191 },
4192 hi = Zt,
4193 Ki = H,
4194 wi = {
4195 preencode(d, o) {
4196 ;(hi.preencode(d, o.header),
4197 e.fixed32.preencode(d, o.roomKey),
4198 e.uint.preencode(d, o.key),
4199 Ki.preencode(d, o.settings))
4200 },
4201 encode(d, o) {
4202 ;(hi.encode(d, o.header),
4203 e.fixed32.encode(d, o.roomKey),
4204 e.uint.encode(d, o.key),
4205 Ki.encode(d, o.settings))
4206 },
4207 decode: (d) => ({
4208 header: hi.decode(d),
4209 roomKey: e.fixed32.decode(d),
4210 key: e.uint.decode(d),
4211 settings: Ki.decode(d),
4212 }),
4213 },
4214 Pi = Zt,
4215 Ri = vc,
4216 Ti = {
4217 preencode(d, o) {
4218 ;(Pi.preencode(d, o.header),
4219 e.fixed32.preencode(d, o.roomKey),
4220 e.uint.preencode(d, o.key),
4221 Ri.preencode(d, o.status))
4222 },
4223 encode(d, o) {
4224 ;(Pi.encode(d, o.header),
4225 e.fixed32.encode(d, o.roomKey),
4226 e.uint.encode(d, o.key),
4227 Ri.encode(d, o.status))
4228 },
4229 decode: (d) => ({
4230 header: Pi.decode(d),
4231 roomKey: e.fixed32.decode(d),
4232 key: e.uint.decode(d),
4233 status: Ri.decode(d),
4234 }),
4235 },
4236 Ai = Zt,
4237 qi = Oo,
4238 Mi = {
4239 preencode(d, o) {
4240 ;(Ai.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), qi.preencode(d, o.message))
4241 },
4242 encode(d, o) {
4243 ;(Ai.encode(d, o.header), e.fixed32.encode(d, o.roomKey), qi.encode(d, o.message))
4244 },
4245 decode: (d) => ({ header: Ai.decode(d), roomKey: e.fixed32.decode(d), message: qi.decode(d) }),
4246 },
4247 Ci = _t,
4248 Di = {
4249 preencode(e, d) {
4250 Ci.preencode(e, d.header)
4251 },
4252 encode(e, d) {
4253 Ci.encode(e, d.header)
4254 },
4255 decode: (e) => ({ header: Ci.decode(e) }),
4256 },
4257 Ii = Zt,
4258 Si = Oo,
4259 Fi = {
4260 preencode(d, o) {
4261 ;(Ii.preencode(d, o.header),
4262 e.fixed32.preencode(d, o.roomKey),
4263 c.preencode(d, o.id),
4264 Si.preencode(d, o.message))
4265 },
4266 encode(d, o) {
4267 ;(Ii.encode(d, o.header),
4268 e.fixed32.encode(d, o.roomKey),
4269 c.encode(d, o.id),
4270 Si.encode(d, o.message))
4271 },
4272 decode: (d) => ({
4273 header: Ii.decode(d),
4274 roomKey: e.fixed32.decode(d),
4275 id: c.decode(d),
4276 message: Si.decode(d),
4277 }),
4278 },
4279 Li = _t,
4280 ji = {
4281 preencode(e, d) {
4282 Li.preencode(e, d.header)
4283 },
4284 encode(e, d) {
4285 Li.encode(e, d.header)
4286 },
4287 decode: (e) => ({ header: Li.decode(e) }),
4288 },
4289 Ei = Zt,
4290 Bi = {
4291 preencode(d, o) {
4292 ;(Ei.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), c.preencode(d, o.id))
4293 },
4294 encode(d, o) {
4295 ;(Ei.encode(d, o.header), e.fixed32.encode(d, o.roomKey), c.encode(d, o.id))
4296 },
4297 decode: (d) => ({ header: Ei.decode(d), roomKey: e.fixed32.decode(d), id: c.decode(d) }),
4298 },
4299 Ni = _t,
4300 Oi = {
4301 preencode(e, d) {
4302 Ni.preencode(e, d.header)
4303 },
4304 encode(e, d) {
4305 Ni.encode(e, d.header)
4306 },
4307 decode: (e) => ({ header: Ni.decode(e) }),
4308 },
4309 Vi = Zt,
4310 Ui = {
4311 preencode(d, o) {
4312 ;(Vi.preencode(d, o.header),
4313 e.fixed32.preencode(d, o.roomKey),
4314 c.preencode(d, o.id),
4315 e.string.preencode(d, o.reaction))
4316 },
4317 encode(d, o) {
4318 ;(Vi.encode(d, o.header),
4319 e.fixed32.encode(d, o.roomKey),
4320 c.encode(d, o.id),
4321 e.string.encode(d, o.reaction))
4322 },
4323 decode: (d) => ({
4324 header: Vi.decode(d),
4325 roomKey: e.fixed32.decode(d),
4326 id: c.decode(d),
4327 reaction: e.string.decode(d),
4328 }),
4329 },
4330 Ji = _t,
4331 zi = {
4332 preencode(e, d) {
4333 Ji.preencode(e, d.header)
4334 },
4335 encode(e, d) {
4336 Ji.encode(e, d.header)
4337 },
4338 decode: (e) => ({ header: Ji.decode(e) }),
4339 },
4340 Wi = Zt,
4341 Hi = {
4342 preencode(d, o) {
4343 ;(Wi.preencode(d, o.header),
4344 e.fixed32.preencode(d, o.roomKey),
4345 c.preencode(d, o.id),
4346 e.string.preencode(d, o.reaction))
4347 },
4348 encode(d, o) {
4349 ;(Wi.encode(d, o.header),
4350 e.fixed32.encode(d, o.roomKey),
4351 c.encode(d, o.id),
4352 e.string.encode(d, o.reaction))
4353 },
4354 decode: (d) => ({
4355 header: Wi.decode(d),
4356 roomKey: e.fixed32.decode(d),
4357 id: c.decode(d),
4358 reaction: e.string.decode(d),
4359 }),
4360 },
4361 Gi = _t,
4362 Qi = {
4363 preencode(e, d) {
4364 Gi.preencode(e, d.header)
4365 },
4366 encode(e, d) {
4367 Gi.encode(e, d.header)
4368 },
4369 decode: (e) => ({ header: Gi.decode(e) }),
4370 },
4371 Xi = {
4372 preencode(d, o) {
4373 ;(e.uint.preencode(d, o.clock), e.uint.preencode(d, o.start), e.uint.preencode(d, o.end))
4374 },
4375 encode(d, o) {
4376 ;(e.uint.encode(d, o.clock), e.uint.encode(d, o.start), e.uint.encode(d, o.end))
4377 },
4378 decode: (d) => ({ clock: e.uint.decode(d), start: e.uint.decode(d), end: e.uint.decode(d) }),
4379 },
4380 Yi = j,
4381 Zi = _,
4382 $i = {
4383 preencode(d, o) {
4384 ;(e.uint.preencode(d, o.clock), Zi.preencode(d, o.keys))
4385 },
4386 encode(d, o) {
4387 ;(e.uint.encode(d, o.clock), Zi.encode(d, o.keys))
4388 },
4389 decode: (d) => ({ clock: e.uint.decode(d), keys: Zi.decode(d) }),
4390 },
4391 _i = {
4392 preencode(d, o) {
4393 ;(e.uint.preencode(d, o.clock),
4394 e.fixed32.preencode(d, o.roomKey),
4395 d.end++,
4396 o.start && e.uint.preencode(d, o.start),
4397 o.size && e.uint.preencode(d, o.size))
4398 },
4399 encode(d, o) {
4400 const n = (o.start ? 1 : 0) | (o.size ? 2 : 0) | (o.isBottom ? 4 : 0)
4401 ;(e.uint.encode(d, o.clock),
4402 e.fixed32.encode(d, o.roomKey),
4403 e.uint.encode(d, n),
4404 o.start && e.uint.encode(d, o.start),
4405 o.size && e.uint.encode(d, o.size))
4406 },
4407 decode(d) {
4408 const o = e.uint.decode(d),
4409 n = e.fixed32.decode(d),
4410 c = e.uint.decode(d)
4411 return {
4412 clock: o,
4413 roomKey: n,
4414 start: 1 & c ? e.uint.decode(d) : 0,
4415 size: 2 & c ? e.uint.decode(d) : 0,
4416 isBottom: !!(4 & c),
4417 }
4418 },
4419 },
4420 ea = j,
4421 da = {
4422 preencode(d, o) {
4423 ;(e.uint.preencode(d, o.clock),
4424 e.fixed32.preencode(d, o.roomKey),
4425 d.end++,
4426 o.offset && e.fixed32.preencode(d, o.offset),
4427 o.count && e.uint.preencode(d, o.count))
4428 },
4429 encode(d, o) {
4430 const n = (o.offset ? 1 : 0) | (o.count ? 2 : 0)
4431 ;(e.uint.encode(d, o.clock),
4432 e.fixed32.encode(d, o.roomKey),
4433 e.uint.encode(d, n),
4434 o.offset && e.fixed32.encode(d, o.offset),
4435 o.count && e.uint.encode(d, o.count))
4436 },
4437 decode(d) {
4438 const o = e.uint.decode(d),
4439 n = e.fixed32.decode(d),
4440 c = e.uint.decode(d)
4441 return {
4442 clock: o,
4443 roomKey: n,
4444 offset: 1 & c ? e.fixed32.decode(d) : null,
4445 count: 2 & c ? e.uint.decode(d) : 0,
4446 }
4447 },
4448 },
4449 oa = j,
4450 na = {
4451 preencode(d, o) {
4452 ;(e.uint.preencode(d, o.timestamp), e.fixed32.preencode(d, o.id))
4453 },
4454 encode(d, o) {
4455 ;(e.uint.encode(d, o.timestamp), e.fixed32.encode(d, o.id))
4456 },
4457 decode: (d) => ({ timestamp: e.uint.decode(d), id: e.fixed32.decode(d) }),
4458 },
4459 ca = { Changed: 1, Removed: 2 },
4460 ra = {
4461 preencode(e, d) {
4462 e.end++
4463 },
4464 encode(d, o) {
4465 if (o > 2) throw new Error("Unknown enum")
4466 e.uint.encode(d, o)
4467 },
4468 decode: (d) => e.uint.decode(d),
4469 },
4470 ta = _,
4471 ia = {
4472 preencode(d, o) {
4473 ;(ta.preencode(d, o.keys),
4474 e.uint.preencode(d, o.start),
4475 e.uint.preencode(d, o.end),
4476 e.uint.preencode(d, o.total))
4477 },
4478 encode(d, o) {
4479 ;(ta.encode(d, o.keys),
4480 e.uint.encode(d, o.start),
4481 e.uint.encode(d, o.end),
4482 e.uint.encode(d, o.total))
4483 },
4484 decode: (d) => ({
4485 keys: ta.decode(d),
4486 start: e.uint.decode(d),
4487 end: e.uint.decode(d),
4488 total: e.uint.decode(d),
4489 }),
4490 },
4491 aa = {
4492 preencode(e, d) {
4493 ;(ra.preencode(e, d.type), na.preencode(e, d.room))
4494 },
4495 encode(e, d) {
4496 ;(ra.encode(e, d.type), na.encode(e, d.room))
4497 },
4498 decode: (e) => ({ type: ra.decode(e), room: na.decode(e) }),
4499 },
4500 sa = ft,
4501 pa = vd,
4502 ua = {
4503 preencode(e, d) {
4504 ;(sa.preencode(e, d.device), e.end++, d.member && pa.preencode(e, d.member))
4505 },
4506 encode(d, o) {
4507 const n = o.member ? 1 : 0
4508 ;(sa.encode(d, o.device), e.uint.encode(d, n), o.member && pa.encode(d, o.member))
4509 },
4510 decode: (d) => ({ device: sa.decode(d), member: 1 & e.uint.decode(d) ? pa.decode(d) : null }),
4511 },
4512 la = e.frame(ua),
4513 fa = xn,
4514 ma = sn,
4515 ya = {
4516 preencode(d, o) {
4517 ;(e.fixed32.preencode(d, o.id),
4518 la.preencode(d, o.role),
4519 fa.preencode(d, o.digest),
4520 ma.preencode(d, o.config),
4521 d.end++,
4522 o.messageId && c.preencode(d, o.messageId))
4523 },
4524 encode(d, o) {
4525 const n = o.messageId ? 1 : 0
4526 ;(e.fixed32.encode(d, o.id),
4527 la.encode(d, o.role),
4528 fa.encode(d, o.digest),
4529 ma.encode(d, o.config),
4530 e.uint.encode(d, n),
4531 o.messageId && c.encode(d, o.messageId))
4532 },
4533 decode: (d) => ({
4534 id: e.fixed32.decode(d),
4535 role: la.decode(d),
4536 digest: fa.decode(d),
4537 config: ma.decode(d),
4538 messageId: 1 & e.uint.decode(d) ? c.decode(d) : null,
4539 }),
4540 },
4541 xa = ft,
4542 ba = {
4543 preencode(d, o) {
4544 ;(e.fixed32.preencode(d, o.id), xa.preencode(d, o.status))
4545 },
4546 encode(d, o) {
4547 ;(e.fixed32.encode(d, o.id), xa.encode(d, o.status))
4548 },
4549 decode: (d) => ({ id: e.fixed32.decode(d), status: xa.decode(d) }),
4550 },
4551 va = xn,
4552 ga = {
4553 preencode(d, o) {
4554 ;(e.fixed32.preencode(d, o.id), va.preencode(d, o.digest))
4555 },
4556 encode(d, o) {
4557 ;(e.fixed32.encode(d, o.id), va.encode(d, o.digest))
4558 },
4559 decode: (d) => ({ id: e.fixed32.decode(d), digest: va.decode(d) }),
4560 },
4561 ka = sn,
4562 ha = {
4563 preencode(d, o) {
4564 ;(e.fixed32.preencode(d, o.id), ka.preencode(d, o.config))
4565 },
4566 encode(d, o) {
4567 ;(e.fixed32.encode(d, o.id), ka.encode(d, o.config))
4568 },
4569 decode: (d) => ({ id: e.fixed32.decode(d), config: ka.decode(d) }),
4570 },
4571 Ka = la,
4572 wa = {
4573 preencode(d, o) {
4574 ;(e.fixed32.preencode(d, o.id), d.end++, o.role && Ka.preencode(d, o.role))
4575 },
4576 encode(d, o) {
4577 const n = o.role ? 1 : 0
4578 ;(e.fixed32.encode(d, o.id), e.uint.encode(d, n), o.role && Ka.encode(d, o.role))
4579 },
4580 decode: (d) => ({ id: e.fixed32.decode(d), role: 1 & e.uint.decode(d) ? Ka.decode(d) : null }),
4581 },
4582 Pa = {
4583 preencode(d, o) {
4584 ;(e.fixed32.preencode(d, o.id), c.preencode(d, o.lastMessage))
4585 },
4586 encode(d, o) {
4587 ;(e.fixed32.encode(d, o.id), c.encode(d, o.lastMessage))
4588 },
4589 decode: (d) => ({ id: e.fixed32.decode(d), lastMessage: c.decode(d) }),
4590 },
4591 Ra = me,
4592 Ta = {
4593 preencode(d, o) {
4594 ;(e.fixed32.preencode(d, o.key), Ra.preencode(d, o.profile))
4595 },
4596 encode(d, o) {
4597 ;(e.fixed32.encode(d, o.key), Ra.encode(d, o.profile))
4598 },
4599 decode: (d) => ({ key: e.fixed32.decode(d), profile: Ra.decode(d) }),
4600 },
4601 Aa = se,
4602 qa = {
4603 preencode(d, o) {
4604 ;(e.fixed32.preencode(d, o.key), Aa.preencode(d, o.status), du.preencode(d, o.profile))
4605 },
4606 encode(d, o) {
4607 ;(e.fixed32.encode(d, o.key), Aa.encode(d, o.status), du.encode(d, o.profile))
4608 },
4609 decode: (d) => ({ key: e.fixed32.decode(d), status: Aa.decode(d), profile: du.decode(d) }),
4610 },
4611 Ma = {
4612 preencode(d, o) {
4613 ;(e.fixed32.preencode(d, o.roomKey), e.fixed32.preencode(d, o.key))
4614 },
4615 encode(d, o) {
4616 ;(e.fixed32.encode(d, o.roomKey), e.fixed32.encode(d, o.key))
4617 },
4618 decode: (d) => ({ roomKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
4619 },
4620 Ca = Ma,
4621 Da = e.array(c),
4622 Ia = {
4623 preencode(d, o) {
4624 ;(e.fixed32.preencode(d, o.roomKey),
4625 e.uint.preencode(d, o.start),
4626 e.uint.preencode(d, o.size),
4627 e.uint.preencode(d, o.total),
4628 Da.preencode(d, o.ids),
4629 d.end++)
4630 },
4631 encode(d, o) {
4632 const n = o.isBottom ? 1 : 0
4633 ;(e.fixed32.encode(d, o.roomKey),
4634 e.uint.encode(d, o.start),
4635 e.uint.encode(d, o.size),
4636 e.uint.encode(d, o.total),
4637 Da.encode(d, o.ids),
4638 e.uint.encode(d, n))
4639 },
4640 decode: (d) => ({
4641 roomKey: e.fixed32.decode(d),
4642 start: e.uint.decode(d),
4643 size: e.uint.decode(d),
4644 total: e.uint.decode(d),
4645 ids: Da.decode(d),
4646 isBottom: !!(1 & e.uint.decode(d)),
4647 }),
4648 },
4649 Sa = {
4650 preencode(d, o) {
4651 ;(e.uint.preencode(d, o.sent), d.end++, o.edited && e.uint.preencode(d, o.edited))
4652 },
4653 encode(d, o) {
4654 const n = o.edited ? 1 : 0
4655 ;(e.uint.encode(d, o.sent), e.uint.encode(d, n), o.edited && e.uint.encode(d, o.edited))
4656 },
4657 decode: (d) => ({
4658 sent: e.uint.decode(d),
4659 edited: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
4660 }),
4661 },
4662 Fa = e.frame(Sa),
4663 La = Do,
4664 ja = Io,
4665 Ea = So,
4666 Ba = {
4667 preencode(d, o) {
4668 ;(c.preencode(d, o.id),
4669 e.uint.preencode(d, o.clock),
4670 Fa.preencode(d, o.timestamps),
4671 La.preencode(d, o.status),
4672 d.end++,
4673 o.message && ja.preencode(d, o.message),
4674 o.event && Ea.preencode(d, o.event))
4675 },
4676 encode(d, o) {
4677 const n = (o.message ? 1 : 0) | (o.event ? 2 : 0)
4678 ;(c.encode(d, o.id),
4679 e.uint.encode(d, o.clock),
4680 Fa.encode(d, o.timestamps),
4681 La.encode(d, o.status),
4682 e.uint.encode(d, n),
4683 o.message && ja.encode(d, o.message),
4684 o.event && Ea.encode(d, o.event))
4685 },
4686 decode(d) {
4687 const o = c.decode(d),
4688 n = e.uint.decode(d),
4689 r = Fa.decode(d),
4690 t = La.decode(d),
4691 i = e.uint.decode(d)
4692 return {
4693 id: o,
4694 clock: n,
4695 timestamps: r,
4696 status: t,
4697 message: 1 & i ? ja.decode(d) : null,
4698 event: 2 & i ? Ea.decode(d) : null,
4699 }
4700 },
4701 },
4702 Na = e.frame(Ba),
4703 Oa = vd,
4704 Va = {
4705 preencode(d, o) {
4706 ;(Na.preencode(d, o.chat), e.fixed32.preencode(d, o.memberKey), Oa.preencode(d, o.role))
4707 },
4708 encode(d, o) {
4709 ;(Na.encode(d, o.chat), e.fixed32.encode(d, o.memberKey), Oa.encode(d, o.role))
4710 },
4711 decode: (d) => ({ chat: Na.decode(d), memberKey: e.fixed32.decode(d), role: Oa.decode(d) }),
4712 },
4713 Ua = Na,
4714 Ja = {
4715 preencode(e, d) {
4716 Ua.preencode(e, d.chat)
4717 },
4718 encode(e, d) {
4719 Ua.encode(e, d.chat)
4720 },
4721 decode: (e) => ({ chat: Ua.decode(e) }),
4722 },
4723 za = Da,
4724 Wa = {
4725 preencode(d, o) {
4726 ;(za.preencode(d, o.ids), e.fixed32.preencode(d, o.memberKey))
4727 },
4728 encode(d, o) {
4729 ;(za.encode(d, o.ids), e.fixed32.encode(d, o.memberKey))
4730 },
4731 decode: (d) => ({ ids: za.decode(d), memberKey: e.fixed32.decode(d) }),
4732 },
4733 Ha = Da,
4734 Ga = vd,
4735 Qa = {
4736 preencode(e, d) {
4737 ;(Ha.preencode(e, d.ids), Ga.preencode(e, d.role))
4738 },
4739 encode(e, d) {
4740 ;(Ha.encode(e, d.ids), Ga.encode(e, d.role))
4741 },
4742 decode: (e) => ({ ids: Ha.decode(e), role: Ga.decode(e) }),
4743 },
4744 Xa = e.frame(on),
4745 Ya = {
4746 preencode(e, d) {
4747 ;(c.preencode(e, d.id), Xa.preencode(e, d.reactions))
4748 },
4749 encode(e, d) {
4750 ;(c.encode(e, d.id), Xa.encode(e, d.reactions))
4751 },
4752 decode: (e) => ({ id: c.decode(e), reactions: Xa.decode(e) }),
4753 },
4754 Za = Xa,
4755 $a = {
4756 preencode(e, d) {
4757 ;(c.preencode(e, d.id), Za.preencode(e, d.digest))
4758 },
4759 encode(e, d) {
4760 ;(c.encode(e, d.id), Za.encode(e, d.digest))
4761 },
4762 decode: (e) => ({ id: c.decode(e), digest: Za.decode(e) }),
4763 },
4764 _a = j,
4765 es = j,
4766 ds = e.array(e.frame(ic)),
4767 os = {
4768 preencode(e, d) {
4769 ds.preencode(e, d.invitations)
4770 },
4771 encode(e, d) {
4772 ds.encode(e, d.invitations)
4773 },
4774 decode: (e) => ({ invitations: ds.decode(e) }),
4775 },
4776 ns = e.frame(ld),
4777 cs = {
4778 preencode(d, o) {
4779 ;(e.fixed32.preencode(d, o.roomKey), ns.preencode(d, o.request))
4780 },
4781 encode(d, o) {
4782 ;(e.fixed32.encode(d, o.roomKey), ns.encode(d, o.request))
4783 },
4784 decode: (d) => ({ roomKey: e.fixed32.decode(d), request: ns.decode(d) }),
4785 },
4786 rs = e.array(e.frame(cs)),
4787 ts = {
4788 preencode(e, d) {
4789 rs.preencode(e, d.requests)
4790 },
4791 encode(e, d) {
4792 rs.encode(e, d.requests)
4793 },
4794 decode: (e) => ({ requests: rs.decode(e) }),
4795 },
4796 is = ds,
4797 as = e.array(e.frame(ld)),
4798 ss = {
4799 preencode(e, d) {
4800 ;(is.preencode(e, d.pendingInvitations), as.preencode(e, d.identityJoinRequests))
4801 },
4802 encode(e, d) {
4803 ;(is.encode(e, d.pendingInvitations), as.encode(e, d.identityJoinRequests))
4804 },
4805 decode: (e) => ({ pendingInvitations: is.decode(e), identityJoinRequests: as.decode(e) }),
4806 },
4807 ps = Zt,
4808 us = {
4809 preencode(d, o) {
4810 ;(ps.preencode(d, o.header), e.string.preencode(d, o.invitation), d.end++)
4811 },
4812 encode(d, o) {
4813 const n = o.isIdentity ? 1 : 0
4814 ;(ps.encode(d, o.header), e.string.encode(d, o.invitation), e.uint.encode(d, n))
4815 },
4816 decode: (d) => ({
4817 header: ps.decode(d),
4818 invitation: e.string.decode(d),
4819 isIdentity: !!(1 & e.uint.decode(d)),
4820 }),
4821 },
4822 ls = _t,
4823 fs = {
4824 preencode(e, d) {
4825 ls.preencode(e, d.header)
4826 },
4827 encode(e, d) {
4828 ls.encode(e, d.header)
4829 },
4830 decode: (e) => ({ header: ls.decode(e) }),
4831 },
4832 ms = {
4833 preencode(e, d) {
4834 e.end++
4835 },
4836 encode(d, o) {
4837 const n =
4838 (o.canModerate ? 1 : 0) |
4839 (o.canAdmin ? 2 : 0) |
4840 (o.requiresConfirmation ? 4 : 0) |
4841 (o.isReadOnly ? 8 : 0)
4842 e.uint.encode(d, n)
4843 },
4844 decode(d) {
4845 const o = e.uint.decode(d)
4846 return {
4847 canModerate: !!(1 & o),
4848 canAdmin: !!(2 & o),
4849 requiresConfirmation: !!(4 & o),
4850 isReadOnly: !!(8 & o),
4851 }
4852 },
4853 },
4854 ys = Zt,
4855 xs = e.frame(ms),
4856 bs = {
4857 preencode(d, o) {
4858 ;(ys.preencode(d, o.header),
4859 e.fixed32.preencode(d, o.roomKey),
4860 d.end++,
4861 o.permissions && xs.preencode(d, o.permissions),
4862 o.expiration && e.uint.preencode(d, o.expiration))
4863 },
4864 encode(d, o) {
4865 const n = (o.permissions ? 1 : 0) | (o.expiration ? 2 : 0)
4866 ;(ys.encode(d, o.header),
4867 e.fixed32.encode(d, o.roomKey),
4868 e.uint.encode(d, n),
4869 o.permissions && xs.encode(d, o.permissions),
4870 o.expiration && e.uint.encode(d, o.expiration))
4871 },
4872 decode(d) {
4873 const o = ys.decode(d),
4874 n = e.fixed32.decode(d),
4875 c = e.uint.decode(d)
4876 return {
4877 header: o,
4878 roomKey: n,
4879 permissions: 1 & c ? xs.decode(d) : null,
4880 expiration: 2 & c ? e.uint.decode(d) : 0,
4881 }
4882 },
4883 },
4884 vs = _t,
4885 gs = {
4886 preencode(d, o) {
4887 ;(vs.preencode(d, o.header), e.string.preencode(d, o.invitation))
4888 },
4889 encode(d, o) {
4890 ;(vs.encode(d, o.header), e.string.encode(d, o.invitation))
4891 },
4892 decode: (d) => ({ header: vs.decode(d), invitation: e.string.decode(d) }),
4893 },
4894 ks = Zt,
4895 hs = {
4896 preencode(e, d) {
4897 ks.preencode(e, d.header)
4898 },
4899 encode(e, d) {
4900 ks.encode(e, d.header)
4901 },
4902 decode: (e) => ({ header: ks.decode(e) }),
4903 },
4904 Ks = _t,
4905 ws = {
4906 preencode(d, o) {
4907 ;(Ks.preencode(d, o.header), e.string.preencode(d, o.invitation))
4908 },
4909 encode(d, o) {
4910 ;(Ks.encode(d, o.header), e.string.encode(d, o.invitation))
4911 },
4912 decode: (d) => ({ header: Ks.decode(d), invitation: e.string.decode(d) }),
4913 },
4914 Ps = Zt,
4915 Rs = ns,
4916 Ts = {
4917 preencode(d, o) {
4918 ;(Ps.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), Rs.preencode(d, o.request))
4919 },
4920 encode(d, o) {
4921 ;(Ps.encode(d, o.header), e.fixed32.encode(d, o.roomKey), Rs.encode(d, o.request))
4922 },
4923 decode: (d) => ({ header: Ps.decode(d), roomKey: e.fixed32.decode(d), request: Rs.decode(d) }),
4924 },
4925 As = _t,
4926 qs = {
4927 preencode(e, d) {
4928 As.preencode(e, d.header)
4929 },
4930 encode(e, d) {
4931 As.encode(e, d.header)
4932 },
4933 decode: (e) => ({ header: As.decode(e) }),
4934 },
4935 Ms = Zt,
4936 Cs = ns,
4937 Ds = {
4938 preencode(d, o) {
4939 ;(Ms.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), Cs.preencode(d, o.request))
4940 },
4941 encode(d, o) {
4942 ;(Ms.encode(d, o.header), e.fixed32.encode(d, o.roomKey), Cs.encode(d, o.request))
4943 },
4944 decode: (d) => ({ header: Ms.decode(d), roomKey: e.fixed32.decode(d), request: Cs.decode(d) }),
4945 },
4946 Is = _t,
4947 Ss = {
4948 preencode(e, d) {
4949 Is.preencode(e, d.header)
4950 },
4951 encode(e, d) {
4952 Is.encode(e, d.header)
4953 },
4954 decode: (e) => ({ header: Is.decode(e) }),
4955 },
4956 Fs = Zt,
4957 Ls = {
4958 preencode(d, o) {
4959 ;(Fs.preencode(d, o.header), e.fixed32.preencode(d, o.id))
4960 },
4961 encode(d, o) {
4962 ;(Fs.encode(d, o.header), e.fixed32.encode(d, o.id))
4963 },
4964 decode: (d) => ({ header: Fs.decode(d), id: e.fixed32.decode(d) }),
4965 },
4966 js = _t,
4967 Es = {
4968 preencode(e, d) {
4969 js.preencode(e, d.header)
4970 },
4971 encode(e, d) {
4972 js.encode(e, d.header)
4973 },
4974 decode: (e) => ({ header: js.decode(e) }),
4975 },
4976 Bs = Zt,
4977 Ns = {
4978 preencode(d, o) {
4979 ;(Bs.preencode(d, o.header),
4980 e.string.preencode(d, o.displayName),
4981 d.end++,
4982 o.avatar && e.buffer.preencode(d, o.avatar))
4983 },
4984 encode(d, o) {
4985 const n = o.avatar ? 1 : 0
4986 ;(Bs.encode(d, o.header),
4987 e.string.encode(d, o.displayName),
4988 e.uint.encode(d, n),
4989 o.avatar && e.buffer.encode(d, o.avatar))
4990 },
4991 decode: (d) => ({
4992 header: Bs.decode(d),
4993 displayName: e.string.decode(d),
4994 avatar: 1 & e.uint.decode(d) ? e.buffer.decode(d) : null,
4995 }),
4996 },
4997 Os = j,
4998 Vs = j,
4999 Us = {
5000 preencode(e, d) {
5001 e.end++
5002 },
5003 encode(d, o) {
5004 const n = (o.isConfirmed ? 1 : 0) | (o.isLoggedOut ? 2 : 0)
5005 e.uint.encode(d, n)
5006 },
5007 decode(d) {
5008 const o = e.uint.decode(d)
5009 return { isConfirmed: !!(1 & o), isLoggedOut: !!(2 & o) }
5010 },
5011 },
5012 Js = e.frame(Us),
5013 zs = _,
5014 Ws = {
5015 preencode(d, o) {
5016 ;(e.fixed32.preencode(d, o.memberKey),
5017 Js.preencode(d, o.status),
5018 zs.preencode(d, o.deviceKeys))
5019 },
5020 encode(d, o) {
5021 ;(e.fixed32.encode(d, o.memberKey), Js.encode(d, o.status), zs.encode(d, o.deviceKeys))
5022 },
5023 decode: (d) => ({
5024 memberKey: e.fixed32.decode(d),
5025 status: Js.decode(d),
5026 deviceKeys: zs.decode(d),
5027 }),
5028 },
5029 Hs = {
5030 preencode(d, o) {
5031 e.fixed32.preencode(d, o.memberKey)
5032 },
5033 encode(d, o) {
5034 e.fixed32.encode(d, o.memberKey)
5035 },
5036 decode: (d) => ({ memberKey: e.fixed32.decode(d) }),
5037 },
5038 Gs = {
5039 preencode(d, o) {
5040 e.fixed32.preencode(d, o.deviceKey)
5041 },
5042 encode(d, o) {
5043 e.fixed32.encode(d, o.deviceKey)
5044 },
5045 decode: (d) => ({ deviceKey: e.fixed32.decode(d) }),
5046 },
5047 Qs = Zt,
5048 Xs = {
5049 preencode(d, o) {
5050 ;(Qs.preencode(d, o.header), e.string.preencode(d, o.password))
5051 },
5052 encode(d, o) {
5053 ;(Qs.encode(d, o.header), e.string.encode(d, o.password))
5054 },
5055 decode: (d) => ({ header: Qs.decode(d), password: e.string.decode(d) }),
5056 },
5057 Ys = _t,
5058 Zs = {
5059 preencode(d, o) {
5060 ;(Ys.preencode(d, o.header), e.string.preencode(d, o.inspector))
5061 },
5062 encode(d, o) {
5063 ;(Ys.encode(d, o.header), e.string.encode(d, o.inspector))
5064 },
5065 decode: (d) => ({ header: Ys.decode(d), inspector: e.string.decode(d) }),
5066 },
5067 $s = _t,
5068 _s = {
5069 preencode(e, d) {
5070 $s.preencode(e, d.header)
5071 },
5072 encode(e, d) {
5073 $s.encode(e, d.header)
5074 },
5075 decode: (e) => ({ header: $s.decode(e) }),
5076 },
5077 ep = _t,
5078 dp = {
5079 preencode(e, d) {
5080 ep.preencode(e, d.header)
5081 },
5082 encode(e, d) {
5083 ep.encode(e, d.header)
5084 },
5085 decode: (e) => ({ header: ep.decode(e) }),
5086 },
5087 op = { Flag: 1 },
5088 np = {
5089 preencode(e, d) {
5090 e.end++
5091 },
5092 encode(d, o) {
5093 if (o > 1) throw new Error("Unknown enum")
5094 e.uint.encode(d, o)
5095 },
5096 decode: (d) => e.uint.decode(d),
5097 },
5098 cp = {
5099 preencode(d, o) {
5100 ;(e.fixed32.preencode(d, o.key),
5101 e.fixed32.preencode(d, o.sender),
5102 e.uint.preencode(d, o.clock),
5103 np.preencode(d, o.label))
5104 },
5105 encode(d, o) {
5106 ;(e.fixed32.encode(d, o.key),
5107 e.fixed32.encode(d, o.sender),
5108 e.uint.encode(d, o.clock),
5109 np.encode(d, o.label))
5110 },
5111 decode: (d) => ({
5112 key: e.fixed32.decode(d),
5113 sender: e.fixed32.decode(d),
5114 clock: e.uint.decode(d),
5115 label: np.decode(d),
5116 }),
5117 },
5118 rp = oe,
5119 tp = {
5120 preencode(d, o) {
5121 ;(rp.preencode(d, o.header), e.fixed32.preencode(d, o.key), np.preencode(d, o.label))
5122 },
5123 encode(d, o) {
5124 ;(rp.encode(d, o.header), e.fixed32.encode(d, o.key), np.encode(d, o.label))
5125 },
5126 decode: (d) => ({ header: rp.decode(d), key: e.fixed32.decode(d), label: np.decode(d) }),
5127 },
5128 ip = {
5129 preencode(d, o) {
5130 ;(np.preencode(d, o.label), e.uint.preencode(d, o.count))
5131 },
5132 encode(d, o) {
5133 ;(np.encode(d, o.label), e.uint.encode(d, o.count))
5134 },
5135 decode: (d) => ({ label: np.decode(d), count: e.uint.decode(d) }),
5136 },
5137 ap = e.array(e.frame(ip)),
5138 sp = {
5139 preencode(d, o) {
5140 ;(e.fixed32.preencode(d, o.key),
5141 e.uint.preencode(d, o.total),
5142 ap.preencode(d, o.labels),
5143 e.uint.preencode(d, o.editedAt),
5144 e.uint.preencode(d, o.flagsClock))
5145 },
5146 encode(d, o) {
5147 ;(e.fixed32.encode(d, o.key),
5148 e.uint.encode(d, o.total),
5149 ap.encode(d, o.labels),
5150 e.uint.encode(d, o.editedAt),
5151 e.uint.encode(d, o.flagsClock))
5152 },
5153 decode: (d) => ({
5154 key: e.fixed32.decode(d),
5155 total: e.uint.decode(d),
5156 labels: ap.decode(d),
5157 editedAt: e.uint.decode(d),
5158 flagsClock: e.uint.decode(d),
5159 }),
5160 },
5161 pp = oe,
5162 up = {
5163 preencode(d, o) {
5164 ;(pp.preencode(d, o.header),
5165 e.fixed32.preencode(d, o.deviceKey),
5166 e.fixed32.preencode(d, o.fromDeviceKey))
5167 },
5168 encode(d, o) {
5169 ;(pp.encode(d, o.header),
5170 e.fixed32.encode(d, o.deviceKey),
5171 e.fixed32.encode(d, o.fromDeviceKey))
5172 },
5173 decode: (d) => ({
5174 header: pp.decode(d),
5175 deviceKey: e.fixed32.decode(d),
5176 fromDeviceKey: e.fixed32.decode(d),
5177 }),
5178 },
5179 lp = {
5180 preencode(d, o) {
5181 ;(e.float64.preencode(d, o.latitude), e.float64.preencode(d, o.longitude))
5182 },
5183 encode(d, o) {
5184 ;(e.float64.encode(d, o.latitude), e.float64.encode(d, o.longitude))
5185 },
5186 decode: (d) => ({ latitude: e.float64.decode(d), longitude: e.float64.decode(d) }),
5187 },
5188 fp = oe,
5189 mp = _,
5190 yp = {
5191 preencode(d, n) {
5192 ;(fp.preencode(d, n.header),
5193 e.fixed32.preencode(d, n.callKey),
5194 e.buffer.preencode(d, n.encryptionKey),
5195 d.end++,
5196 o >= 4 && n.streams && mp.preencode(d, n.streams),
5197 o >= 4 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
5198 o >= 4 && n.version && e.uint.preencode(d, n.version))
5199 },
5200 encode(d, n) {
5201 const c =
5202 (o >= 4 && n.streams ? 1 : 0) |
5203 (o >= 4 && n.discoveryKey ? 2 : 0) |
5204 (o >= 4 && n.version ? 4 : 0)
5205 ;(fp.encode(d, n.header),
5206 e.fixed32.encode(d, n.callKey),
5207 e.buffer.encode(d, n.encryptionKey),
5208 e.uint.encode(d, c),
5209 o >= 4 && n.streams && mp.encode(d, n.streams),
5210 o >= 4 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
5211 o >= 4 && n.version && e.uint.encode(d, n.version))
5212 },
5213 decode(d) {
5214 const n = fp.decode(d),
5215 c = e.fixed32.decode(d),
5216 r = e.buffer.decode(d),
5217 t = e.uint.decode(d)
5218 return {
5219 header: n,
5220 callKey: c,
5221 encryptionKey: r,
5222 streams: o >= 4 && 1 & t ? mp.decode(d) : null,
5223 discoveryKey: o >= 4 && 2 & t ? e.fixed32.decode(d) : null,
5224 version: o >= 4 && 4 & t ? e.uint.decode(d) : 0,
5225 }
5226 },
5227 },
5228 xp = oe,
5229 bp = _,
5230 vp = {
5231 preencode(d, n) {
5232 ;(xp.preencode(d, n.header),
5233 e.fixed32.preencode(d, n.callKey),
5234 d.end++,
5235 o >= 4 && n.streams && bp.preencode(d, n.streams))
5236 },
5237 encode(d, n) {
5238 const c = o >= 4 && n.streams ? 1 : 0
5239 ;(xp.encode(d, n.header),
5240 e.fixed32.encode(d, n.callKey),
5241 e.uint.encode(d, c),
5242 o >= 4 && n.streams && bp.encode(d, n.streams))
5243 },
5244 decode(d) {
5245 const n = xp.decode(d),
5246 c = e.fixed32.decode(d),
5247 r = e.uint.decode(d)
5248 return { header: n, callKey: c, streams: o >= 4 && 1 & r ? bp.decode(d) : null }
5249 },
5250 },
5251 gp = oe,
5252 kp = {
5253 preencode(d, o) {
5254 ;(gp.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
5255 },
5256 encode(d, o) {
5257 ;(gp.encode(d, o.header), e.fixed32.encode(d, o.callKey))
5258 },
5259 decode: (d) => ({ header: gp.decode(d), callKey: e.fixed32.decode(d) }),
5260 },
5261 hp = oe,
5262 Kp = {
5263 preencode(d, o) {
5264 ;(hp.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
5265 },
5266 encode(d, o) {
5267 ;(hp.encode(d, o.header), e.fixed32.encode(d, o.callKey))
5268 },
5269 decode: (d) => ({ header: hp.decode(d), callKey: e.fixed32.decode(d) }),
5270 },
5271 wp = oe,
5272 Pp = {
5273 preencode(d, o) {
5274 ;(wp.preencode(d, o.header),
5275 e.fixed32.preencode(d, o.callKey),
5276 e.fixed32.preencode(d, o.streamKey))
5277 },
5278 encode(d, o) {
5279 ;(wp.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
5280 },
5281 decode: (d) => ({
5282 header: wp.decode(d),
5283 callKey: e.fixed32.decode(d),
5284 streamKey: e.fixed32.decode(d),
5285 }),
5286 },
5287 Rp = oe,
5288 Tp = {
5289 preencode(d, o) {
5290 ;(Rp.preencode(d, o.header),
5291 e.fixed32.preencode(d, o.callKey),
5292 e.fixed32.preencode(d, o.streamKey))
5293 },
5294 encode(d, o) {
5295 ;(Rp.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
5296 },
5297 decode: (d) => ({
5298 header: Rp.decode(d),
5299 callKey: e.fixed32.decode(d),
5300 streamKey: e.fixed32.decode(d),
5301 }),
5302 },
5303 Ap = {
5304 preencode(d, n) {
5305 ;(e.fixed32.preencode(d, n.callKey),
5306 e.buffer.preencode(d, n.encryptionKey),
5307 e.uint.preencode(d, n.createdAt),
5308 d.end++,
5309 o >= 4 && n.endedAt && e.uint.preencode(d, n.endedAt),
5310 o >= 4 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
5311 o >= 4 && n.version && e.uint.preencode(d, n.version))
5312 },
5313 encode(d, n) {
5314 const c =
5315 (o >= 4 && n.endedAt ? 1 : 0) |
5316 (o >= 4 && n.discoveryKey ? 2 : 0) |
5317 (o >= 4 && n.version ? 4 : 0)
5318 ;(e.fixed32.encode(d, n.callKey),
5319 e.buffer.encode(d, n.encryptionKey),
5320 e.uint.encode(d, n.createdAt),
5321 e.uint.encode(d, c),
5322 o >= 4 && n.endedAt && e.uint.encode(d, n.endedAt),
5323 o >= 4 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
5324 o >= 4 && n.version && e.uint.encode(d, n.version))
5325 },
5326 decode(d) {
5327 const n = e.fixed32.decode(d),
5328 c = e.buffer.decode(d),
5329 r = e.uint.decode(d),
5330 t = e.uint.decode(d)
5331 return {
5332 callKey: n,
5333 encryptionKey: c,
5334 createdAt: r,
5335 endedAt: o >= 4 && 1 & t ? e.uint.decode(d) : 0,
5336 discoveryKey: o >= 4 && 2 & t ? e.fixed32.decode(d) : null,
5337 version: o >= 4 && 4 & t ? e.uint.decode(d) : 0,
5338 }
5339 },
5340 },
5341 qp = {
5342 preencode(d, o) {
5343 ;(e.fixed32.preencode(d, o.callKey),
5344 e.fixed32.preencode(d, o.memberKey),
5345 e.uint.preencode(d, o.createdAt))
5346 },
5347 encode(d, o) {
5348 ;(e.fixed32.encode(d, o.callKey),
5349 e.fixed32.encode(d, o.memberKey),
5350 e.uint.encode(d, o.createdAt))
5351 },
5352 decode: (d) => ({
5353 callKey: e.fixed32.decode(d),
5354 memberKey: e.fixed32.decode(d),
5355 createdAt: e.uint.decode(d),
5356 }),
5357 },
5358 Mp = {
5359 preencode(d, n) {
5360 ;(e.fixed32.preencode(d, n.callKey),
5361 e.fixed32.preencode(d, n.deviceKey),
5362 e.fixed32.preencode(d, n.memberKey),
5363 e.uint.preencode(d, n.createdAt),
5364 d.end++,
5365 o >= 4 && n.swarmKey && e.fixed32.preencode(d, n.swarmKey))
5366 },
5367 encode(d, n) {
5368 const c = o >= 4 && n.swarmKey ? 1 : 0
5369 ;(e.fixed32.encode(d, n.callKey),
5370 e.fixed32.encode(d, n.deviceKey),
5371 e.fixed32.encode(d, n.memberKey),
5372 e.uint.encode(d, n.createdAt),
5373 e.uint.encode(d, c),
5374 o >= 4 && n.swarmKey && e.fixed32.encode(d, n.swarmKey))
5375 },
5376 decode(d) {
5377 const n = e.fixed32.decode(d),
5378 c = e.fixed32.decode(d),
5379 r = e.fixed32.decode(d),
5380 t = e.uint.decode(d),
5381 i = e.uint.decode(d)
5382 return {
5383 callKey: n,
5384 deviceKey: c,
5385 memberKey: r,
5386 createdAt: t,
5387 swarmKey: o >= 4 && 1 & i ? e.fixed32.decode(d) : null,
5388 }
5389 },
5390 },
5391 Cp = {
5392 preencode(d, o) {
5393 ;(e.fixed32.preencode(d, o.callKey),
5394 e.fixed32.preencode(d, o.deviceKey),
5395 e.buffer.preencode(d, o.streamKey),
5396 e.uint.preencode(d, o.createdAt))
5397 },
5398 encode(d, o) {
5399 ;(e.fixed32.encode(d, o.callKey),
5400 e.fixed32.encode(d, o.deviceKey),
5401 e.buffer.encode(d, o.streamKey),
5402 e.uint.encode(d, o.createdAt))
5403 },
5404 decode: (d) => ({
5405 callKey: e.fixed32.decode(d),
5406 deviceKey: e.fixed32.decode(d),
5407 streamKey: e.buffer.decode(d),
5408 createdAt: e.uint.decode(d),
5409 }),
5410 },
5411 Dp = {
5412 preencode(d, n) {
5413 ;(e.fixed32.preencode(d, n.callKey),
5414 d.end++,
5415 o >= 4 && n.selfDeviceKey && e.fixed32.preencode(d, n.selfDeviceKey))
5416 },
5417 encode(d, n) {
5418 const c = o >= 4 && n.selfDeviceKey ? 1 : 0
5419 ;(e.fixed32.encode(d, n.callKey),
5420 e.uint.encode(d, c),
5421 o >= 4 && n.selfDeviceKey && e.fixed32.encode(d, n.selfDeviceKey))
5422 },
5423 decode(d) {
5424 const n = e.fixed32.decode(d),
5425 c = e.uint.decode(d)
5426 return { callKey: n, selfDeviceKey: o >= 4 && 1 & c ? e.fixed32.decode(d) : null }
5427 },
5428 },
5429 Ip = {
5430 preencode(d, o) {
5431 e.uint.preencode(d, o.lastCleared)
5432 },
5433 encode(d, o) {
5434 e.uint.encode(d, o.lastCleared)
5435 },
5436 decode: (d) => ({ lastCleared: e.uint.decode(d) }),
5437 },
5438 Sp = { Nightly: "Nightly", Internal: "Internal", Production: "Production" },
5439 Fp = {
5440 preencode(e, d) {
5441 e.end++
5442 },
5443 encode(d, o) {
5444 switch (o) {
5445 case "Nightly":
5446 e.uint.encode(d, 1)
5447 break
5448 case "Internal":
5449 e.uint.encode(d, 2)
5450 break
5451 case "Production":
5452 e.uint.encode(d, 3)
5453 break
5454 default:
5455 throw new Error("Unknown enum")
5456 }
5457 },
5458 decode(d) {
5459 switch (e.uint.decode(d)) {
5460 case 1:
5461 return "Nightly"
5462 case 2:
5463 return "Internal"
5464 case 3:
5465 return "Production"
5466 default:
5467 return null
5468 }
5469 },
5470 },
5471 Lp = oe,
5472 jp = {
5473 preencode(e, d) {
5474 Lp.preencode(e, d.header)
5475 },
5476 encode(e, d) {
5477 Lp.encode(e, d.header)
5478 },
5479 decode: (e) => ({ header: Lp.decode(e) }),
5480 },
5481 Ep = oe,
5482 Bp = {
5483 preencode(e, d) {
5484 Ep.preencode(e, d.header)
5485 },
5486 encode(e, d) {
5487 Ep.encode(e, d.header)
5488 },
5489 decode: (e) => ({ header: Ep.decode(e) }),
5490 },
5491 Np = {
5492 preencode(d, n) {
5493 ;(Fp.preencode(d, n.buildType),
5494 d.end++,
5495 o >= 6 && n.latestOfflineAbi && e.uint.preencode(d, n.latestOfflineAbi))
5496 },
5497 encode(d, n) {
5498 const c = o >= 6 && n.latestOfflineAbi ? 1 : 0
5499 ;(Fp.encode(d, n.buildType),
5500 e.uint.encode(d, c),
5501 o >= 6 && n.latestOfflineAbi && e.uint.encode(d, n.latestOfflineAbi))
5502 },
5503 decode(d) {
5504 const n = Fp.decode(d),
5505 c = d.start < d.end ? e.uint.decode(d) : 0
5506 return { buildType: n, latestOfflineAbi: o >= 6 && 1 & c ? e.uint.decode(d) : 0 }
5507 },
5508 },
5509 Op = e.frame(P),
5510 Vp = Op,
5511 Up = e.frame(fe),
5512 Jp = Op,
5513 zp = Up,
5514 Wp = Up,
5515 Hp = e.frame(Pd),
5516 Gp = e.frame(lp),
5517 Qp = Gp,
5518 Xp = Op,
5519 Yp = Op,
5520 Zp = e.frame(Mc),
5521 $p = Zp,
5522 _p = Zp,
5523 eu = e.frame(Dp),
5524 du = Up
5525function ou(e) {
5526 o = e
5527}
5528function nu(d, n, c = 6) {
5529 return ((o = c), e.encode(tu(d), n))
5530}
5531function cu(d, n, c = 6) {
5532 return ((o = c), e.decode(tu(d), n))
5533}
5534function ru(e) {
5535 switch (e) {
5536 case "@keet/room-type":
5537 return U
5538 case "@keet/room-supported-language":
5539 return Y
5540 case "@keet/display-type":
5541 return Xo
5542 case "@keet/system-settings-keys":
5543 return An
5544 case "@keet/label-type":
5545 return Ln
5546 case "@keet-private-id/user-settings-key":
5547 return sr
5548 case "@local/tasks":
5549 return Dr
5550 case "@local/keet-state":
5551 return zt
5552 case "@api/core/lobby-record-change-type":
5553 return ca
5554 case "@keet/member-label-type":
5555 return op
5556 case "@keet/build-type":
5557 return Sp
5558 default:
5559 throw new Error("Enum not found " + e)
5560 }
5561}
5562function tu(e) {
5563 switch (e) {
5564 case "@keet/head":
5565 return n
5566 case "@keet/oplog-id":
5567 return c
5568 case "@keet/encryption-keypair":
5569 return r
5570 case "@keet/signing-keypair":
5571 return t
5572 case "@keet/room-keys":
5573 return i
5574 case "@keet/operation-header":
5575 return a
5576 case "@keet/blob-pointer":
5577 return s
5578 case "@keet/file-dimensions":
5579 return p
5580 case "@keet/file-metadata":
5581 return l
5582 case "@keet/external-drive-pointer":
5583 return f
5584 case "@keet/external-blob-pointer":
5585 return m
5586 case "@keet/file-pointer":
5587 return b
5588 case "@keet/file":
5589 return k
5590 case "@keet/image-file":
5591 return P
5592 case "@keet/file-status":
5593 return R
5594 case "@keet/file-record":
5595 return q
5596 case "@keet/device-status":
5597 return M
5598 case "@keet/member-status":
5599 return C
5600 case "@keet/member-moderation-status":
5601 return D
5602 case "@keet/abi":
5603 return I
5604 case "@keet/device-stats":
5605 return S
5606 case "@keet/member-stats":
5607 return F
5608 case "@keet/chat-stats":
5609 return L
5610 case "@keet/file-stats":
5611 return j
5612 case "@keet/stats":
5613 return V
5614 case "@keet/room-type":
5615 return J
5616 case "@keet/system-settings":
5617 return z
5618 case "@keet/system-digest":
5619 return G
5620 case "@keet/room-seed":
5621 return Q
5622 case "@keet/room-capabilities":
5623 return X
5624 case "@keet/room-supported-language":
5625 return Z
5626 case "@keet/room-config":
5627 return ee
5628 case "@keet/blind-peer":
5629 return de
5630 case "@keet/add-blind-peer-operation":
5631 return ce
5632 case "@keet/remove-blind-peer-operation":
5633 return te
5634 case "@keet/identity-attestation":
5635 return ie
5636 case "@keet/device-invitation":
5637 return ae
5638 case "@keet/device":
5639 return ue
5640 case "@keet/member-profile":
5641 return le
5642 case "@keet/device-profile":
5643 return fe
5644 case "@keet/member-update":
5645 return ye
5646 case "@keet/device-update":
5647 return xe
5648 case "@keet/member-contact-info":
5649 return ve
5650 case "@keet/signed-pairing-data":
5651 return ge
5652 case "@keet/device-request-identity":
5653 return ke
5654 case "@keet/device-response-identity":
5655 return he
5656 case "@keet/device-identity":
5657 return Ke
5658 case "@keet/device-request-with-invitation":
5659 return Te
5660 case "@keet/device-request-with-invitation-and-proof":
5661 return qe
5662 case "@keet/device-request-with-member-proof":
5663 return De
5664 case "@keet/device-request":
5665 return Fe
5666 case "@keet/device-response":
5667 return Ee
5668 case "@keet/invitation-metadata":
5669 return Be
5670 case "@keet/invitation":
5671 return Ve
5672 case "@keet/add-invitation-operation":
5673 return ze
5674 case "@keet/remove-invitation-operation":
5675 return He
5676 case "@keet/sendable-room-invitation":
5677 return Ge
5678 case "@keet/readonly-room-invitation":
5679 return Qe
5680 case "@keet/sendable-identity-invitation":
5681 return Xe
5682 case "@keet/sendable-contact-invitation":
5683 return Ye
5684 case "@keet/sendable-invitation":
5685 return od
5686 case "@keet/add-device-operation":
5687 return cd
5688 case "@keet/update-device-operation":
5689 return td
5690 case "@keet/remove-device-operation":
5691 return ad
5692 case "@keet/start-indexing-operation":
5693 return sd
5694 case "@keet/stop-indexing-operation":
5695 return pd
5696 case "@keet/join-request":
5697 return ld
5698 case "@keet/accept-join-request-operation":
5699 return yd
5700 case "@keet/reject-join-request-operation":
5701 return bd
5702 case "@keet/member":
5703 return kd
5704 case "@keet/full-member":
5705 return wd
5706 case "@keet/member-proofs":
5707 return Pd
5708 case "@keet/update-member-operation":
5709 return Ad
5710 case "@keet/change-member-status-operation":
5711 return Cd
5712 case "@keet/change-member-role-operation":
5713 return Id
5714 case "@keet/remove-member-operation":
5715 return Fd
5716 case "@keet/member-activity":
5717 return Ld
5718 case "@keet/member-joined-event":
5719 return jd
5720 case "@keet/member-left-event":
5721 return Ed
5722 case "@keet/member-removed-event":
5723 return Bd
5724 case "@keet/title-changed-chat-event":
5725 return Nd
5726 case "@keet/chat-event":
5727 return zd
5728 case "@keet/sendable-event":
5729 return Wd
5730 case "@keet/display-range":
5731 return Hd
5732 case "@keet/display-content-range":
5733 return Qd
5734 case "@keet/mention-display-item":
5735 return Yd
5736 case "@keet/translation-display-item":
5737 return $d
5738 case "@keet/link-preview":
5739 return oo
5740 case "@keet/display-link-item":
5741 return ro
5742 case "@keet/display":
5743 return xo
5744 case "@keet/oplog-message":
5745 return ko
5746 case "@keet/index-message":
5747 return wo
5748 case "@keet/full-index-message":
5749 return To
5750 case "@keet/message-status":
5751 return Ao
5752 case "@keet/message-index-id":
5753 return qo
5754 case "@keet/thread":
5755 return Co
5756 case "@keet/chat-message-record":
5757 return Fo
5758 case "@keet/full-chat-message-record":
5759 return Bo
5760 case "@keet/add-chat-message-operation":
5761 return Vo
5762 case "@keet/remove-chat-message-operation":
5763 return Jo
5764 case "@keet/update-chat-message-operation":
5765 return Ho
5766 case "@keet/pin-chat-message-operation":
5767 return Qo
5768 case "@keet/display-type":
5769 return Yo
5770 case "@keet/add-file-preview-operation":
5771 return $o
5772 case "@keet/reaction":
5773 return _o
5774 case "@keet/reactions-summary":
5775 return en
5776 case "@keet/reactions-digest":
5777 return on
5778 case "@keet/add-reaction-operation":
5779 return cn
5780 case "@keet/remove-reaction-operation":
5781 return tn
5782 case "@keet/update-room-config-operation":
5783 return pn
5784 case "@keet/group-member":
5785 return un
5786 case "@keet/user-registry-info":
5787 return ln
5788 case "@keet/room-identity":
5789 return mn
5790 case "@keet/genesis-operation":
5791 return Kn
5792 case "@keet/upgrade-operation":
5793 return Pn
5794 case "@keet/migrate-abi-operation":
5795 return Tn
5796 case "@keet/system-settings-keys":
5797 return qn
5798 case "@keet/update-system-settings-operation":
5799 return Dn
5800 case "@keet/test-increment-operation":
5801 return Sn
5802 case "@keet/test-collection-record-1":
5803 return Fn
5804 case "@keet/label-type":
5805 return jn
5806 case "@keet/chat-label":
5807 return En
5808 case "@keet/add-chat-label-operation":
5809 return Nn
5810 case "@keet/remove-chat-label-operation":
5811 return Vn
5812 case "@keet/chat-label-summary":
5813 return Un
5814 case "@keet/chat-label-digest":
5815 return zn
5816 case "@keet/update-read-length-operation":
5817 return Hn
5818 case "@keet/read-length":
5819 return Gn
5820 case "@keet/tmp-removed-member":
5821 return Qn
5822 case "@keet-private-id/contact":
5823 return Xn
5824 case "@keet-private-id/v3-room-migration-info":
5825 return Yn
5826 case "@keet-private-id/run-v3-migration-operation":
5827 return _n
5828 case "@keet-private-id/update-identity-operation":
5829 return dc
5830 case "@keet-private-id/counters":
5831 return oc
5832 case "@keet-private-id/stats":
5833 return nc
5834 case "@keet-private-id/add-entropy-operation":
5835 return cc
5836 case "@keet-private-id/pending-invitation-identity":
5837 return rc
5838 case "@keet-private-id/pending-invitation":
5839 return ic
5840 case "@keet-private-id/resolve-pending-invitation-operation":
5841 return sc
5842 case "@keet-private-id/add-pending-invitation-operation":
5843 return lc
5844 case "@keet-private-id/remove-pending-invitation-operation":
5845 return mc
5846 case "@keet-private-id/identity-swap":
5847 return yc
5848 case "@keet-private-id/identity-swap-v2":
5849 return xc
5850 case "@keet-private-id/room-status":
5851 return bc
5852 case "@keet-private-id/room":
5853 return hc
5854 case "@keet-private-id/add-room-operation":
5855 return wc
5856 case "@keet-private-id/remove-room-operation":
5857 return Rc
5858 case "@keet-private-id/update-room-status-operation":
5859 return qc
5860 case "@keet-private-id/contact-status":
5861 return Mc
5862 case "@keet-private-id/contact-record":
5863 return Cc
5864 case "@keet-private-id/add-contact-operation":
5865 return Sc
5866 case "@keet-private-id/update-contact-status-operation":
5867 return Lc
5868 case "@keet-private-id/remove-contact-operation":
5869 return Ec
5870 case "@keet-private-id/activate-contact-room-operation":
5871 return Nc
5872 case "@keet-private-id/contact-request-status":
5873 return Oc
5874 case "@keet-private-id/contact-request-body":
5875 return Jc
5876 case "@keet-private-id/contact-request":
5877 return Wc
5878 case "@keet-private-id/contact-request-record":
5879 return Xc
5880 case "@keet-private-id/add-contact-request-operation":
5881 return Zc
5882 case "@keet-private-id/update-contact-request-status-operation":
5883 return er
5884 case "@keet-private-id/profile-discovery-record-v1":
5885 return dr
5886 case "@keet-private-id/profile-discovery-record":
5887 return or
5888 case "@keet-private-id/unreads":
5889 return nr
5890 case "@keet-private-id/add-unreads-key-operation":
5891 return rr
5892 case "@keet-private-id/remove-unreads-key-operation":
5893 return ir
5894 case "@keet-private-id/settings":
5895 return ar
5896 case "@keet-private-id/user-settings-key":
5897 return pr
5898 case "@keet-private-id/update-settings-operation":
5899 return fr
5900 case "@local/background-sync-room":
5901 return mr
5902 case "@local/stats":
5903 return yr
5904 case "@local/migration-status":
5905 return xr
5906 case "@local/v3-private-profile-migration":
5907 return vr
5908 case "@local/v3-room-migration":
5909 return hr
5910 case "@local/room-migration-stats":
5911 return Kr
5912 case "@local/room-migration":
5913 return Pr
5914 case "@local/identity-status":
5915 return Rr
5916 case "@local/identity-swap":
5917 return Tr
5918 case "@local/identity-record":
5919 return Cr
5920 case "@local/tasks":
5921 return Ir
5922 case "@local/room-keys":
5923 return Sr
5924 case "@local/join-room-invitation-task":
5925 return Lr
5926 case "@local/join-room-response-task":
5927 return jr
5928 case "@local/fast-forward-to":
5929 return Er
5930 case "@local/add-room-fields":
5931 return Br
5932 case "@local/join-room-keys-task":
5933 return Or
5934 case "@local/create-room-task":
5935 return Ur
5936 case "@local/leave-room-task":
5937 return Jr
5938 case "@local/clear-room-task":
5939 return zr
5940 case "@local/restore-identity-task":
5941 return Wr
5942 case "@local/send-contact-request-task":
5943 return Gr
5944 case "@local/migrate-v2-room-task":
5945 return Qr
5946 case "@local/task":
5947 return ct
5948 case "@local/shared-invitation":
5949 return tt
5950 case "@local/room-status":
5951 return it
5952 case "@local/room-timestamps":
5953 return at
5954 case "@local/room":
5955 return wt
5956 case "@local/room-preferences":
5957 return Rt
5958 case "@local/room-metadata":
5959 return Tt
5960 case "@local/writer":
5961 return At
5962 case "@local/writer-append":
5963 return qt
5964 case "@local/member":
5965 return Ct
5966 case "@local/device":
5967 return It
5968 case "@local/file":
5969 return Ft
5970 case "@local/debug-flag":
5971 return Lt
5972 case "@local/debug":
5973 return Et
5974 case "@local/hyperdht-record":
5975 return Nt
5976 case "@local/unread":
5977 return Ot
5978 case "@local/error-record-details":
5979 return Vt
5980 case "@local/error-record":
5981 return Jt
5982 case "@local/keet-state":
5983 return Wt
5984 case "@local/file-stats":
5985 return Ht
5986 case "@api/request-header":
5987 return Gt
5988 case "@api/response-header":
5989 return Qt
5990 case "@api/subscription-request-header":
5991 return Xt
5992 case "@api/subscription-response-header":
5993 return Yt
5994 case "@api/boot-request":
5995 return $t
5996 case "@api/boot-response":
5997 return ei
5998 case "@api/self-destruct-request":
5999 return oi
6000 case "@api/core/have":
6001 return ni
6002 case "@api/core/create-room-request":
6003 return ii
6004 case "@api/core/create-room-response":
6005 return si
6006 case "@api/core/activate-room-request":
6007 return ui
6008 case "@api/core/deactivate-room-request":
6009 return fi
6010 case "@api/core/leave-room-request":
6011 return yi
6012 case "@api/core/leave-room-response":
6013 return bi
6014 case "@api/core/update-room-config-request":
6015 return ki
6016 case "@api/core/update-room-settings-request":
6017 return wi
6018 case "@api/core/update-room-status-request":
6019 return Ti
6020 case "@api/core/add-chat-message-request":
6021 return Mi
6022 case "@api/core/add-chat-message-response":
6023 return Di
6024 case "@api/core/edit-chat-message-request":
6025 return Fi
6026 case "@api/core/edit-chat-message-response":
6027 return ji
6028 case "@api/core/remove-chat-message-request":
6029 return Bi
6030 case "@api/core/remove-chat-message-response":
6031 return Oi
6032 case "@api/core/add-chat-reaction-request":
6033 return Ui
6034 case "@api/core/add-chat-reaction-response":
6035 return zi
6036 case "@api/core/remove-chat-reaction-request":
6037 return Hi
6038 case "@api/core/remove-chat-reaction-response":
6039 return Qi
6040 case "@api/core/want-lobby":
6041 return Xi
6042 case "@api/core/unwant-lobby":
6043 return Yi
6044 case "@api/core/want-room-info":
6045 return $i
6046 case "@api/core/want-chat":
6047 return _i
6048 case "@api/core/unwant-chat":
6049 return ea
6050 case "@api/core/want-members":
6051 return da
6052 case "@api/core/unwant-members":
6053 return oa
6054 case "@api/core/lobby-record":
6055 return na
6056 case "@api/core/lobby-record-change-type":
6057 return ra
6058 case "@api/core/lobby":
6059 return ia
6060 case "@api/core/lobby-room":
6061 return aa
6062 case "@api/core/room-role":
6063 return ua
6064 case "@api/core/room-info":
6065 return ya
6066 case "@api/core/room-info-status":
6067 return ba
6068 case "@api/core/room-info-digest":
6069 return ga
6070 case "@api/core/room-info-config":
6071 return ha
6072 case "@api/core/room-info-role":
6073 return wa
6074 case "@api/core/room-info-last-message":
6075 return Pa
6076 case "@api/core/member":
6077 return Ta
6078 case "@api/core/device":
6079 return qa
6080 case "@api/core/member-list-add":
6081 return Ma
6082 case "@api/core/member-list-remove":
6083 return Ca
6084 case "@api/core/chat-reset":
6085 return Ia
6086 case "@api/core/message-timestamps":
6087 return Sa
6088 case "@api/core/message":
6089 return Ba
6090 case "@api/core/message-info":
6091 return Va
6092 case "@api/core/message-info-chat":
6093 return Ja
6094 case "@api/core/message-info-member":
6095 return Wa
6096 case "@api/core/message-info-role":
6097 return Qa
6098 case "@api/core/message-info-reactions":
6099 return Ya
6100 case "@api/core/reactions":
6101 return $a
6102 case "@api/core/want-pairing":
6103 return _a
6104 case "@api/core/unwant-pairing":
6105 return es
6106 case "@api/core/pending-invitations":
6107 return os
6108 case "@api/core/join-request":
6109 return cs
6110 case "@api/core/join-requests":
6111 return ts
6112 case "@api/core/pairing":
6113 return ss
6114 case "@api/core/start-pairing-request":
6115 return us
6116 case "@api/core/start-pairing-response":
6117 return fs
6118 case "@api/core/invitation-permissions":
6119 return ms
6120 case "@api/core/create-room-invitation-request":
6121 return bs
6122 case "@api/core/create-room-invitation-response":
6123 return gs
6124 case "@api/core/create-identity-invitation-request":
6125 return hs
6126 case "@api/core/create-identity-invitation-response":
6127 return ws
6128 case "@api/core/accept-join-request-request":
6129 return Ts
6130 case "@api/core/accept-join-request-response":
6131 return qs
6132 case "@api/core/reject-join-request-request":
6133 return Ds
6134 case "@api/core/reject-join-request-response":
6135 return Ss
6136 case "@api/core/stop-pairing-request":
6137 return Ls
6138 case "@api/core/stop-pairing-response":
6139 return Es
6140 case "@api/core/update-profile-request":
6141 return Ns
6142 case "@api/core/want-identity":
6143 return Os
6144 case "@api/core/unwant-identity":
6145 return Vs
6146 case "@api/core/identity-status":
6147 return Us
6148 case "@api/core/identity":
6149 return Ws
6150 case "@api/core/identity-member":
6151 return Hs
6152 case "@api/core/identity-device":
6153 return Gs
6154 case "@api/debug/enable-request":
6155 return Xs
6156 case "@api/debug/enable-response":
6157 return Zs
6158 case "@api/debug/disable-request":
6159 return _s
6160 case "@api/debug/disable-response":
6161 return dp
6162 case "@keet/member-label-type":
6163 return np
6164 case "@keet/member-label":
6165 return cp
6166 case "@keet/add-member-label-operation":
6167 return tp
6168 case "@keet/member-label-summary":
6169 return ip
6170 case "@keet/member-label-digest":
6171 return sp
6172 case "@keet/move-indexer-operation":
6173 return up
6174 case "@keet/location-shared-event":
6175 return lp
6176 case "@keet/start-call":
6177 return yp
6178 case "@keet/join-call":
6179 return vp
6180 case "@keet/leave-call":
6181 return kp
6182 case "@keet/end-call":
6183 return Kp
6184 case "@keet/add-call-stream":
6185 return Pp
6186 case "@keet/remove-call-stream":
6187 return Tp
6188 case "@keet/call-record":
6189 return Ap
6190 case "@keet/call-member-record":
6191 return qp
6192 case "@keet/call-device-record":
6193 return Mp
6194 case "@keet/call-stream-record":
6195 return Cp
6196 case "@local/active-call":
6197 return Dp
6198 case "@local/file-gc-info":
6199 return Ip
6200 case "@keet/build-type":
6201 return Fp
6202 case "@keet/test-crash-operation":
6203 return jp
6204 case "@keet/test-dispatch-error-operation":
6205 return Bp
6206 case "@local/environment-record":
6207 return Np
6208 default:
6209 throw new Error("Encoder not found " + e)
6210 }
6211}
6212function iu(e, d = 6) {
6213 const n = tu(e)
6214 return {
6215 preencode(e, c) {
6216 ;((o = d), n.preencode(e, c))
6217 },
6218 encode(e, c) {
6219 ;((o = d), n.encode(e, c))
6220 },
6221 decode: (e) => ((o = d), n.decode(e)),
6222 }
6223}
6224const au = iu
6225module.exports = {
6226 resolveStruct: au,
6227 getStruct: iu,
6228 getEnum: ru,
6229 getEncoding: tu,
6230 encode: nu,
6231 decode: cu,
6232 setVersion: ou,
6233 version: o,
6234}
keet-core-4.14.4-pretty/schema/spec/api/hyperschema/index.js +6234 -0
……@@ -0,0 +1,6234 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 6
3let o = 6
4const n = {
5 preencode(d, o) {
6 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.length))
7 },
8 encode(d, o) {
9 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.length))
10 },
11 decode: (d) => ({ key: e.fixed32.decode(d), length: e.uint.decode(d) }),
12 },
13 c = {
14 preencode(d, o) {
15 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.seq))
16 },
17 encode(d, o) {
18 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.seq))
19 },
20 decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
21 },
22 r = {
23 preencode(d, o) {
24 ;(e.fixed32.preencode(d, o.publicKey), e.fixed32.preencode(d, o.secretKey))
25 },
26 encode(d, o) {
27 ;(e.fixed32.encode(d, o.publicKey), e.fixed32.encode(d, o.secretKey))
28 },
29 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed32.decode(d) }),
30 },
31 t = {
32 preencode(d, o) {
33 ;(e.fixed32.preencode(d, o.publicKey), e.fixed64.preencode(d, o.secretKey))
34 },
35 encode(d, o) {
36 ;(e.fixed32.encode(d, o.publicKey), e.fixed64.encode(d, o.secretKey))
37 },
38 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed64.decode(d) }),
39 },
40 i = {
41 preencode(d, o) {
42 ;(e.fixed32.preencode(d, o.key),
43 d.end++,
44 o.encryptionKey && e.buffer.preencode(d, o.encryptionKey),
45 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
46 },
47 encode(d, o) {
48 const n = (o.encryptionKey ? 1 : 0) | (o.fastForwardTo ? 2 : 0)
49 ;(e.fixed32.encode(d, o.key),
50 e.uint.encode(d, n),
51 o.encryptionKey && e.buffer.encode(d, o.encryptionKey),
52 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
53 },
54 decode(d) {
55 const o = e.fixed32.decode(d),
56 n = e.uint.decode(d)
57 return {
58 key: o,
59 encryptionKey: 1 & n ? e.buffer.decode(d) : null,
60 fastForwardTo: 2 & n ? e.fixed32.decode(d) : null,
61 }
62 },
63 },
64 a = {
65 preencode(d, o) {
66 e.uint.preencode(d, o.timestamp)
67 },
68 encode(d, o) {
69 e.uint.encode(d, o.timestamp)
70 },
71 decode: (d) => ({ timestamp: e.uint.decode(d) }),
72 },
73 s = {
74 preencode(d, o) {
75 ;(e.uint.preencode(d, o.blockOffset),
76 e.uint.preencode(d, o.blockLength),
77 e.uint.preencode(d, o.byteOffset),
78 e.uint.preencode(d, o.byteLength))
79 },
80 encode(d, o) {
81 ;(e.uint.encode(d, o.blockOffset),
82 e.uint.encode(d, o.blockLength),
83 e.uint.encode(d, o.byteOffset),
84 e.uint.encode(d, o.byteLength))
85 },
86 decode: (d) => ({
87 blockOffset: e.uint.decode(d),
88 blockLength: e.uint.decode(d),
89 byteOffset: e.uint.decode(d),
90 byteLength: e.uint.decode(d),
91 }),
92 },
93 p = {
94 preencode(d, o) {
95 ;(e.uint.preencode(d, o.width), e.uint.preencode(d, o.height))
96 },
97 encode(d, o) {
98 ;(e.uint.encode(d, o.width), e.uint.encode(d, o.height))
99 },
100 decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
101 },
102 u = e.frame(p),
103 l = {
104 preencode(d, o) {
105 ;(d.end++,
106 o.name && e.string.preencode(d, o.name),
107 o.mimetype && e.string.preencode(d, o.mimetype),
108 o.dimensions && u.preencode(d, o.dimensions),
109 o.userdata && e.buffer.preencode(d, o.userdata),
110 o.duration && e.uint.preencode(d, o.duration))
111 },
112 encode(d, o) {
113 const n =
114 (o.name ? 1 : 0) |
115 (o.mimetype ? 2 : 0) |
116 (o.dimensions ? 4 : 0) |
117 (o.userdata ? 8 : 0) |
118 (o.duration ? 16 : 0) |
119 (o.isPreview ? 32 : 0)
120 ;(e.uint.encode(d, n),
121 o.name && e.string.encode(d, o.name),
122 o.mimetype && e.string.encode(d, o.mimetype),
123 o.dimensions && u.encode(d, o.dimensions),
124 o.userdata && e.buffer.encode(d, o.userdata),
125 o.duration && e.uint.encode(d, o.duration))
126 },
127 decode(d) {
128 const o = e.uint.decode(d)
129 return {
130 name: 1 & o ? e.string.decode(d) : null,
131 mimetype: 2 & o ? e.string.decode(d) : null,
132 dimensions: 4 & o ? u.decode(d) : null,
133 userdata: 8 & o ? e.buffer.decode(d) : null,
134 duration: 16 & o ? e.uint.decode(d) : 0,
135 isPreview: !!(32 & o),
136 }
137 },
138 },
139 f = {
140 preencode(d, o) {
141 ;(e.fixed32.preencode(d, o.key),
142 e.string.preencode(d, o.path),
143 e.uint.preencode(d, o.version),
144 e.uint.preencode(d, o.size))
145 },
146 encode(d, o) {
147 ;(e.fixed32.encode(d, o.key),
148 e.string.encode(d, o.path),
149 e.uint.encode(d, o.version),
150 e.uint.encode(d, o.size))
151 },
152 decode: (d) => ({
153 key: e.fixed32.decode(d),
154 path: e.string.decode(d),
155 version: e.uint.decode(d),
156 size: e.uint.decode(d),
157 }),
158 },
159 m = {
160 preencode(d, o) {
161 ;(e.fixed32.preencode(d, o.key), s.preencode(d, o.blob))
162 },
163 encode(d, o) {
164 ;(e.fixed32.encode(d, o.key), s.encode(d, o.blob))
165 },
166 decode: (d) => ({ key: e.fixed32.decode(d), blob: s.decode(d) }),
167 },
168 y = e.frame(m),
169 x = e.frame(f),
170 b = {
171 preencode(d, o) {
172 ;(d.end++,
173 o.inlined && e.buffer.preencode(d, o.inlined),
174 o.blob && s.preencode(d, o.blob),
175 o.externalBlob && y.preencode(d, o.externalBlob),
176 o.externalDrive && x.preencode(d, o.externalDrive))
177 },
178 encode(d, o) {
179 const n =
180 (o.inlined ? 1 : 0) |
181 (o.blob ? 2 : 0) |
182 (o.externalBlob ? 4 : 0) |
183 (o.externalDrive ? 8 : 0)
184 ;(e.uint.encode(d, n),
185 o.inlined && e.buffer.encode(d, o.inlined),
186 o.blob && s.encode(d, o.blob),
187 o.externalBlob && y.encode(d, o.externalBlob),
188 o.externalDrive && x.encode(d, o.externalDrive))
189 },
190 decode(d) {
191 const o = e.uint.decode(d)
192 return {
193 inlined: 1 & o ? e.buffer.decode(d) : null,
194 blob: 2 & o ? s.decode(d) : null,
195 externalBlob: 4 & o ? y.decode(d) : null,
196 externalDrive: 8 & o ? x.decode(d) : null,
197 }
198 },
199 },
200 v = e.frame(b),
201 g = e.frame(l),
202 k = {
203 preencode(d, o) {
204 ;(v.preencode(d, o.pointer),
205 d.end++,
206 o.metadata && g.preencode(d, o.metadata),
207 o.preview && Op.preencode(d, o.preview),
208 o.hash && e.fixed32.preencode(d, o.hash))
209 },
210 encode(d, o) {
211 const n = (o.metadata ? 1 : 0) | (o.preview ? 2 : 0) | (o.hash ? 4 : 0)
212 ;(v.encode(d, o.pointer),
213 e.uint.encode(d, n),
214 o.metadata && g.encode(d, o.metadata),
215 o.preview && Op.encode(d, o.preview),
216 o.hash && e.fixed32.encode(d, o.hash))
217 },
218 decode(d) {
219 const o = v.decode(d),
220 n = e.uint.decode(d)
221 return {
222 pointer: o,
223 metadata: 1 & n ? g.decode(d) : null,
224 preview: 2 & n ? Op.decode(d) : null,
225 hash: 4 & n ? e.fixed32.decode(d) : null,
226 }
227 },
228 },
229 h = e.frame(k),
230 K = h,
231 w = h,
232 P = {
233 preencode(e, d) {
234 ;(e.end++,
235 d.small && h.preencode(e, d.small),
236 d.medium && K.preencode(e, d.medium),
237 d.large && w.preencode(e, d.large))
238 },
239 encode(d, o) {
240 const n = (o.small ? 1 : 0) | (o.medium ? 2 : 0) | (o.large ? 4 : 0)
241 ;(e.uint.encode(d, n),
242 o.small && h.encode(d, o.small),
243 o.medium && K.encode(d, o.medium),
244 o.large && w.encode(d, o.large))
245 },
246 decode(d) {
247 const o = e.uint.decode(d)
248 return {
249 small: 1 & o ? h.decode(d) : null,
250 medium: 2 & o ? K.decode(d) : null,
251 large: 4 & o ? w.decode(d) : null,
252 }
253 },
254 },
255 R = {
256 preencode(e, d) {
257 e.end++
258 },
259 encode(d, o) {
260 const n = o.isDeleted ? 1 : 0
261 e.uint.encode(d, n)
262 },
263 decode: (d) => ({ isDeleted: !!(1 & e.uint.decode(d)) }),
264 },
265 T = e.frame(R),
266 A = h,
267 q = {
268 preencode(d, o) {
269 ;(e.uint.preencode(d, o.id),
270 c.preencode(d, o.oplog),
271 T.preencode(d, o.status),
272 A.preencode(d, o.file),
273 d.end++,
274 o.version && e.uint.preencode(d, o.version))
275 },
276 encode(d, o) {
277 const n = o.version ? 1 : 0
278 ;(e.uint.encode(d, o.id),
279 c.encode(d, o.oplog),
280 T.encode(d, o.status),
281 A.encode(d, o.file),
282 e.uint.encode(d, n),
283 o.version && e.uint.encode(d, o.version))
284 },
285 decode: (d) => ({
286 id: e.uint.decode(d),
287 oplog: c.decode(d),
288 status: T.decode(d),
289 file: A.decode(d),
290 version: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
291 }),
292 },
293 M = {
294 preencode(e, d) {
295 e.end++
296 },
297 encode(d, o) {
298 const n = (o.isActive ? 1 : 0) | (o.isIndexing ? 2 : 0)
299 e.uint.encode(d, n)
300 },
301 decode(d) {
302 const o = e.uint.decode(d)
303 return { isActive: !!(1 & o), isIndexing: !!(2 & o) }
304 },
305 },
306 C = {
307 preencode(d, o) {
308 const n =
309 (o.isAdmin ? 1 : 0) |
310 (o.isModerator ? 2 : 0) |
311 (o.isPending ? 4 : 0) |
312 (o.isActive ? 8 : 0) |
313 (o.isMuted ? 16 : 0) |
314 (o.isBanned ? 32 : 0) |
315 (o.isShadowBanned ? 64 : 0) |
316 (o.isRemoved ? 128 : 0)
317 e.uint.preencode(d, n)
318 },
319 encode(d, o) {
320 const n =
321 (o.isAdmin ? 1 : 0) |
322 (o.isModerator ? 2 : 0) |
323 (o.isPending ? 4 : 0) |
324 (o.isActive ? 8 : 0) |
325 (o.isMuted ? 16 : 0) |
326 (o.isBanned ? 32 : 0) |
327 (o.isShadowBanned ? 64 : 0) |
328 (o.isRemoved ? 128 : 0)
329 e.uint.encode(d, n)
330 },
331 decode(d) {
332 const o = e.uint.decode(d)
333 return {
334 isAdmin: !!(1 & o),
335 isModerator: !!(2 & o),
336 isPending: !!(4 & o),
337 isActive: !!(8 & o),
338 isMuted: !!(16 & o),
339 isBanned: !!(32 & o),
340 isShadowBanned: !!(64 & o),
341 isRemoved: !!(128 & o),
342 }
343 },
344 },
345 D = {
346 preencode(e, d) {
347 e.end++
348 },
349 encode(d, o) {
350 const n = (o.isMuted ? 1 : 0) | (o.isBanned ? 2 : 0) | (o.isShadowBanned ? 4 : 0)
351 e.uint.encode(d, n)
352 },
353 decode(d) {
354 const o = e.uint.decode(d)
355 return { isMuted: !!(1 & o), isBanned: !!(2 & o), isShadowBanned: !!(4 & o) }
356 },
357 },
358 I = {
359 preencode(d, o) {
360 e.uint.preencode(d, o.version)
361 },
362 encode(d, o) {
363 e.uint.encode(d, o.version)
364 },
365 decode: (d) => ({ version: e.uint.decode(d) }),
366 },
367 S = {
368 preencode(d, o) {
369 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active))
370 },
371 encode(d, o) {
372 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active))
373 },
374 decode: (d) => ({ total: e.uint.decode(d), active: e.uint.decode(d) }),
375 },
376 F = {
377 preencode(d, o) {
378 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active), e.uint.preencode(d, o.pending))
379 },
380 encode(d, o) {
381 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active), e.uint.encode(d, o.pending))
382 },
383 decode: (d) => ({
384 total: e.uint.decode(d),
385 active: e.uint.decode(d),
386 pending: e.uint.decode(d),
387 }),
388 },
389 L = {
390 preencode(d, o) {
391 ;(e.uint.preencode(d, o.clock),
392 e.uint.preencode(d, o.pinned),
393 e.uint.preencode(d, o.threads),
394 e.uint.preencode(d, o.timestamp),
395 d.end++,
396 o.flagsClock && e.uint.preencode(d, o.flagsClock))
397 },
398 encode(d, o) {
399 const n = o.flagsClock ? 1 : 0
400 ;(e.uint.encode(d, o.clock),
401 e.uint.encode(d, o.pinned),
402 e.uint.encode(d, o.threads),
403 e.uint.encode(d, o.timestamp),
404 e.uint.encode(d, n),
405 o.flagsClock && e.uint.encode(d, o.flagsClock))
406 },
407 decode: (d) => ({
408 clock: e.uint.decode(d),
409 pinned: e.uint.decode(d),
410 threads: e.uint.decode(d),
411 timestamp: e.uint.decode(d),
412 flagsClock: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
413 }),
414 },
415 j = {
416 preencode(d, o) {
417 e.uint.preencode(d, o.clock)
418 },
419 encode(d, o) {
420 e.uint.encode(d, o.clock)
421 },
422 decode: (d) => ({ clock: e.uint.decode(d) }),
423 },
424 E = e.frame(S),
425 B = e.frame(F),
426 N = e.frame(L),
427 O = e.frame(j),
428 V = {
429 preencode(e, d) {
430 ;(E.preencode(e, d.devices),
431 B.preencode(e, d.members),
432 N.preencode(e, d.chat),
433 O.preencode(e, d.files))
434 },
435 encode(e, d) {
436 ;(E.encode(e, d.devices), B.encode(e, d.members), N.encode(e, d.chat), O.encode(e, d.files))
437 },
438 decode: (e) => ({
439 devices: E.decode(e),
440 members: B.decode(e),
441 chat: N.decode(e),
442 files: O.decode(e),
443 }),
444 },
445 U = { Default: 1, Broadcast: 2, DirectMessage: 3 },
446 J = {
447 preencode(e, d) {
448 e.end++
449 },
450 encode(d, o) {
451 if (o > 3) throw new Error("Unknown enum")
452 e.uint.encode(d, o)
453 },
454 decode: (d) => e.uint.decode(d),
455 },
456 z = {
457 preencode(d, n) {
458 const c =
459 (n.roomType ? 1 : 0) |
460 (n.isExperimental ? 2 : 0) |
461 (n.isJoiningDisabled ? 4 : 0) |
462 (n.isAppendingDisabled ? 8 : 0) |
463 (n.isCallingDisabled ? 16 : 0) |
464 (n.isMembershipEventsDisabled ? 32 : 0) |
465 (o >= 4 && n.isAttachmentsDisabled ? 64 : 0) |
466 (o >= 4 && n.isLinksDisabled ? 128 : 0) |
467 (o >= 5 && n.buildType ? 256 : 0)
468 ;(e.uint.preencode(d, c),
469 n.roomType && J.preencode(d, n.roomType),
470 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
471 },
472 encode(d, n) {
473 const c =
474 (n.roomType ? 1 : 0) |
475 (n.isExperimental ? 2 : 0) |
476 (n.isJoiningDisabled ? 4 : 0) |
477 (n.isAppendingDisabled ? 8 : 0) |
478 (n.isCallingDisabled ? 16 : 0) |
479 (n.isMembershipEventsDisabled ? 32 : 0) |
480 (o >= 4 && n.isAttachmentsDisabled ? 64 : 0) |
481 (o >= 4 && n.isLinksDisabled ? 128 : 0) |
482 (o >= 5 && n.buildType ? 256 : 0)
483 ;(e.uint.encode(d, c),
484 n.roomType && J.encode(d, n.roomType),
485 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
486 },
487 decode(d) {
488 const n = e.uint.decode(d)
489 return {
490 roomType: 1 & n ? J.decode(d) : 0,
491 isExperimental: !!(2 & n),
492 isJoiningDisabled: !!(4 & n),
493 isAppendingDisabled: !!(8 & n),
494 isCallingDisabled: !!(16 & n),
495 isMembershipEventsDisabled: !!(32 & n),
496 isAttachmentsDisabled: o >= 4 && !!(64 & n),
497 isLinksDisabled: o >= 4 && !!(128 & n),
498 buildType: o >= 5 && 256 & n ? Fp.decode(d) : null,
499 }
500 },
501 },
502 W = e.frame(I),
503 H = e.frame(z),
504 G = {
505 preencode(d, o) {
506 ;(W.preencode(d, o.abi), H.preencode(d, o.settings), e.uint.preencode(d, o.creationTime))
507 },
508 encode(d, o) {
509 ;(W.encode(d, o.abi), H.encode(d, o.settings), e.uint.encode(d, o.creationTime))
510 },
511 decode: (d) => ({ abi: W.decode(d), settings: H.decode(d), creationTime: e.uint.decode(d) }),
512 },
513 Q = {
514 preencode(d, o) {
515 e.fixed32.preencode(d, o.seed)
516 },
517 encode(d, o) {
518 e.fixed32.encode(d, o.seed)
519 },
520 decode: (d) => ({ seed: e.fixed32.decode(d) }),
521 },
522 X = {
523 preencode(d, o) {
524 ;(r.preencode(d, o.mailboxKeyPair),
525 t.preencode(d, o.discoveryKeyPair),
526 e.fixed32.preencode(d, o.wakeupTopic),
527 e.fixed32.preencode(d, o.swarmTopic))
528 },
529 encode(d, o) {
530 ;(r.encode(d, o.mailboxKeyPair),
531 t.encode(d, o.discoveryKeyPair),
532 e.fixed32.encode(d, o.wakeupTopic),
533 e.fixed32.encode(d, o.swarmTopic))
534 },
535 decode: (d) => ({
536 mailboxKeyPair: r.decode(d),
537 discoveryKeyPair: t.decode(d),
538 wakeupTopic: e.fixed32.decode(d),
539 swarmTopic: e.fixed32.decode(d),
540 }),
541 },
542 Y = { en: "en", it: "it", ru: "ru", es: "es", de: "de" },
543 Z = {
544 preencode(e, d) {
545 e.end++
546 },
547 encode(d, o) {
548 switch (o) {
549 case "en":
550 e.uint.encode(d, 1)
551 break
552 case "it":
553 e.uint.encode(d, 2)
554 break
555 case "ru":
556 e.uint.encode(d, 3)
557 break
558 case "es":
559 e.uint.encode(d, 4)
560 break
561 case "de":
562 e.uint.encode(d, 5)
563 break
564 default:
565 throw new Error("Unknown enum")
566 }
567 },
568 decode(d) {
569 switch (e.uint.decode(d)) {
570 case 1:
571 return "en"
572 case 2:
573 return "it"
574 case 3:
575 return "ru"
576 case 4:
577 return "es"
578 case 5:
579 return "de"
580 default:
581 return null
582 }
583 },
584 },
585 $ = e.array(Z),
586 _ = e.array(e.fixed32),
587 ee = {
588 preencode(d, o) {
589 ;(d.end++,
590 o.title && e.string.preencode(d, o.title),
591 o.avatar && Vp.preencode(d, o.avatar),
592 o.description && e.string.preencode(d, o.description),
593 o.supportedLanguages && $.preencode(d, o.supportedLanguages),
594 o.blindPeers && _.preencode(d, o.blindPeers))
595 },
596 encode(d, o) {
597 const n =
598 (o.title ? 1 : 0) |
599 (o.avatar ? 2 : 0) |
600 (o.description ? 4 : 0) |
601 (o.supportedLanguages ? 8 : 0) |
602 (o.blindPeers ? 16 : 0)
603 ;(e.uint.encode(d, n),
604 o.title && e.string.encode(d, o.title),
605 o.avatar && Vp.encode(d, o.avatar),
606 o.description && e.string.encode(d, o.description),
607 o.supportedLanguages && $.encode(d, o.supportedLanguages),
608 o.blindPeers && _.encode(d, o.blindPeers))
609 },
610 decode(d) {
611 const o = e.uint.decode(d)
612 return {
613 title: 1 & o ? e.string.decode(d) : null,
614 avatar: 2 & o ? Vp.decode(d) : null,
615 description: 4 & o ? e.string.decode(d) : null,
616 supportedLanguages: 8 & o ? $.decode(d) : null,
617 blindPeers: 16 & o ? _.decode(d) : null,
618 }
619 },
620 },
621 de = {
622 preencode(d, o) {
623 e.fixed32.preencode(d, o.key)
624 },
625 encode(d, o) {
626 e.fixed32.encode(d, o.key)
627 },
628 decode: (d) => ({ key: e.fixed32.decode(d) }),
629 },
630 oe = e.frame(a),
631 ne = e.frame(de),
632 ce = {
633 preencode(e, d) {
634 ;(oe.preencode(e, d.header), ne.preencode(e, d.peer))
635 },
636 encode(e, d) {
637 ;(oe.encode(e, d.header), ne.encode(e, d.peer))
638 },
639 decode: (e) => ({ header: oe.decode(e), peer: ne.decode(e) }),
640 },
641 re = oe,
642 te = {
643 preencode(d, o) {
644 ;(re.preencode(d, o.header), e.fixed32.preencode(d, o.key))
645 },
646 encode(d, o) {
647 ;(re.encode(d, o.header), e.fixed32.encode(d, o.key))
648 },
649 decode: (d) => ({ header: re.decode(d), key: e.fixed32.decode(d) }),
650 },
651 ie = {
652 preencode(d, o) {
653 ;(e.fixed32.preencode(d, o.memberKey), e.buffer.preencode(d, o.proof))
654 },
655 encode(d, o) {
656 ;(e.fixed32.encode(d, o.memberKey), e.buffer.encode(d, o.proof))
657 },
658 decode: (d) => ({ memberKey: e.fixed32.decode(d), proof: e.buffer.decode(d) }),
659 },
660 ae = {
661 preencode(d, o) {
662 ;(e.fixed32.preencode(d, o.id), e.buffer.preencode(d, o.response))
663 },
664 encode(d, o) {
665 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.response))
666 },
667 decode: (d) => ({ id: e.fixed32.decode(d), response: e.buffer.decode(d) }),
668 },
669 se = e.frame(M),
670 pe = e.frame(ae),
671 ue = {
672 preencode(d, o) {
673 ;(e.fixed32.preencode(d, o.key),
674 e.fixed32.preencode(d, o.memberKey),
675 se.preencode(d, o.status),
676 Up.preencode(d, o.profile),
677 d.end++,
678 o.invitation && pe.preencode(d, o.invitation))
679 },
680 encode(d, o) {
681 const n = o.invitation ? 1 : 0
682 ;(e.fixed32.encode(d, o.key),
683 e.fixed32.encode(d, o.memberKey),
684 se.encode(d, o.status),
685 Up.encode(d, o.profile),
686 e.uint.encode(d, n),
687 o.invitation && pe.encode(d, o.invitation))
688 },
689 decode: (d) => ({
690 key: e.fixed32.decode(d),
691 memberKey: e.fixed32.decode(d),
692 status: se.decode(d),
693 profile: Up.decode(d),
694 invitation: 1 & e.uint.decode(d) ? pe.decode(d) : null,
695 }),
696 },
697 le = {
698 preencode(d, o) {
699 ;(e.uint.preencode(d, o.timestamp),
700 d.end++,
701 o.mailbox && e.fixed32.preencode(d, o.mailbox),
702 o.displayName && e.string.preencode(d, o.displayName),
703 o.avatar && Jp.preencode(d, o.avatar),
704 o.username && e.string.preencode(d, o.username))
705 },
706 encode(d, o) {
707 const n =
708 (o.mailbox ? 1 : 0) | (o.displayName ? 2 : 0) | (o.avatar ? 4 : 0) | (o.username ? 8 : 0)
709 ;(e.uint.encode(d, o.timestamp),
710 e.uint.encode(d, n),
711 o.mailbox && e.fixed32.encode(d, o.mailbox),
712 o.displayName && e.string.encode(d, o.displayName),
713 o.avatar && Jp.encode(d, o.avatar),
714 o.username && e.string.encode(d, o.username))
715 },
716 decode(d) {
717 const o = e.uint.decode(d),
718 n = e.uint.decode(d)
719 return {
720 timestamp: o,
721 mailbox: 1 & n ? e.fixed32.decode(d) : null,
722 displayName: 2 & n ? e.string.decode(d) : null,
723 avatar: 4 & n ? Jp.decode(d) : null,
724 username: 8 & n ? e.string.decode(d) : null,
725 }
726 },
727 },
728 fe = {
729 preencode(d, n) {
730 ;(d.end++,
731 n.swarmKey && e.fixed32.preencode(d, n.swarmKey),
732 n.name && e.string.preencode(d, n.name),
733 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
734 },
735 encode(d, n) {
736 const c =
737 (n.swarmKey ? 1 : 0) |
738 (n.name ? 2 : 0) |
739 (n.isMobile ? 4 : 0) |
740 (o >= 5 && n.buildType ? 8 : 0)
741 ;(e.uint.encode(d, c),
742 n.swarmKey && e.fixed32.encode(d, n.swarmKey),
743 n.name && e.string.encode(d, n.name),
744 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
745 },
746 decode(d) {
747 const n = e.uint.decode(d)
748 return {
749 swarmKey: 1 & n ? e.fixed32.decode(d) : null,
750 name: 2 & n ? e.string.decode(d) : null,
751 isMobile: !!(4 & n),
752 buildType: o >= 5 && 8 & n ? Fp.decode(d) : null,
753 }
754 },
755 },
756 me = e.frame(le),
757 ye = {
758 preencode(e, d) {
759 ;(me.preencode(e, d.profile), ie.preencode(e, d.attestation))
760 },
761 encode(e, d) {
762 ;(me.encode(e, d.profile), ie.encode(e, d.attestation))
763 },
764 decode: (e) => ({ profile: me.decode(e), attestation: ie.decode(e) }),
765 },
766 xe = {
767 preencode(e, d) {
768 ;(zp.preencode(e, d.profile), ie.preencode(e, d.attestation))
769 },
770 encode(e, d) {
771 ;(zp.encode(e, d.profile), ie.encode(e, d.attestation))
772 },
773 decode: (e) => ({ profile: zp.decode(e), attestation: ie.decode(e) }),
774 },
775 be = me,
776 ve = {
777 preencode(e, d) {
778 ;(be.preencode(e, d.profile), ie.preencode(e, d.attestation))
779 },
780 encode(e, d) {
781 ;(be.encode(e, d.profile), ie.encode(e, d.attestation))
782 },
783 decode: (e) => ({ profile: be.decode(e), attestation: ie.decode(e) }),
784 },
785 ge = {
786 preencode(d, o) {
787 ;(e.fixed32.preencode(d, o.id),
788 e.buffer.preencode(d, o.data),
789 e.buffer.preencode(d, o.signature))
790 },
791 encode(d, o) {
792 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.data), e.buffer.encode(d, o.signature))
793 },
794 decode: (d) => ({
795 id: e.fixed32.decode(d),
796 data: e.buffer.decode(d),
797 signature: e.buffer.decode(d),
798 }),
799 },
800 ke = {
801 preencode(d, o) {
802 e.fixed32.preencode(d, o.devicePublicKey)
803 },
804 encode(d, o) {
805 e.fixed32.encode(d, o.devicePublicKey)
806 },
807 decode: (d) => ({ devicePublicKey: e.fixed32.decode(d) }),
808 },
809 he = {
810 preencode(d, o) {
811 ;(ie.preencode(d, o.privateProfileIdentity), e.buffer.preencode(d, o.deviceProof))
812 },
813 encode(d, o) {
814 ;(ie.encode(d, o.privateProfileIdentity), e.buffer.encode(d, o.deviceProof))
815 },
816 decode: (d) => ({ privateProfileIdentity: ie.decode(d), deviceProof: e.buffer.decode(d) }),
817 },
818 Ke = {
819 preencode(d, o) {
820 ;(e.fixed32.preencode(d, o.deviceKey),
821 ie.preencode(d, o.privateProfileIdentity),
822 e.buffer.preencode(d, o.deviceProof))
823 },
824 encode(d, o) {
825 ;(e.fixed32.encode(d, o.deviceKey),
826 ie.encode(d, o.privateProfileIdentity),
827 e.buffer.encode(d, o.deviceProof))
828 },
829 decode: (d) => ({
830 deviceKey: e.fixed32.decode(d),
831 privateProfileIdentity: ie.decode(d),
832 deviceProof: e.buffer.decode(d),
833 }),
834 },
835 we = e.frame(xe),
836 Pe = e.frame(ye),
837 Re = e.frame(ke),
838 Te = {
839 preencode(d, o) {
840 ;(e.fixed32.preencode(d, o.deviceKey),
841 t.preencode(d, o.keyPair),
842 we.preencode(d, o.device),
843 Pe.preencode(d, o.member),
844 d.end++,
845 o.identity && Re.preencode(d, o.identity))
846 },
847 encode(d, o) {
848 const n = o.identity ? 1 : 0
849 ;(e.fixed32.encode(d, o.deviceKey),
850 t.encode(d, o.keyPair),
851 we.encode(d, o.device),
852 Pe.encode(d, o.member),
853 e.uint.encode(d, n),
854 o.identity && Re.encode(d, o.identity))
855 },
856 decode: (d) => ({
857 deviceKey: e.fixed32.decode(d),
858 keyPair: t.decode(d),
859 device: we.decode(d),
860 member: Pe.decode(d),
861 identity: 1 & e.uint.decode(d) ? Re.decode(d) : null,
862 }),
863 },
864 Ae = e.frame(Te),
865 qe = {
866 preencode(d, o) {
867 ;(e.fixed32.preencode(d, o.id),
868 Ae.preencode(d, o.request),
869 e.buffer.preencode(d, o.signature))
870 },
871 encode(d, o) {
872 ;(e.fixed32.encode(d, o.id), Ae.encode(d, o.request), e.buffer.encode(d, o.signature))
873 },
874 decode: (d) => ({
875 id: e.fixed32.decode(d),
876 request: Ae.decode(d),
877 signature: e.buffer.decode(d),
878 }),
879 },
880 Me = we,
881 Ce = Pe,
882 De = {
883 preencode(e, d) {
884 ;(Me.preencode(e, d.device), e.end++, d.member && Ce.preencode(e, d.member))
885 },
886 encode(d, o) {
887 const n = o.member ? 1 : 0
888 ;(Me.encode(d, o.device), e.uint.encode(d, n), o.member && Ce.encode(d, o.member))
889 },
890 decode: (d) => ({ device: Me.decode(d), member: 1 & e.uint.decode(d) ? Ce.decode(d) : null }),
891 },
892 Ie = e.frame(qe),
893 Se = e.frame(De),
894 Fe = {
895 preencode(e, d) {
896 ;(e.end++,
897 d.withInvitation && Ie.preencode(e, d.withInvitation),
898 d.withMemberProof && Se.preencode(e, d.withMemberProof))
899 },
900 encode(d, o) {
901 const n = (o.withInvitation ? 1 : 0) | (o.withMemberProof ? 2 : 0)
902 ;(e.uint.encode(d, n),
903 o.withInvitation && Ie.encode(d, o.withInvitation),
904 o.withMemberProof && Se.encode(d, o.withMemberProof))
905 },
906 decode(d) {
907 const o = e.uint.decode(d)
908 return {
909 withInvitation: 1 & o ? Ie.decode(d) : null,
910 withMemberProof: 2 & o ? Se.decode(d) : null,
911 }
912 },
913 },
914 Le = e.frame(ge),
915 je = e.frame(he),
916 Ee = {
917 preencode(e, d) {
918 ;(Le.preencode(e, d.signedKeys), e.end++, d.identity && je.preencode(e, d.identity))
919 },
920 encode(d, o) {
921 const n = o.identity ? 1 : 0
922 ;(Le.encode(d, o.signedKeys), e.uint.encode(d, n), o.identity && je.encode(d, o.identity))
923 },
924 decode: (d) => ({
925 signedKeys: Le.decode(d),
926 identity: 1 & e.uint.decode(d) ? je.decode(d) : null,
927 }),
928 },
929 Be = {
930 preencode(d, n) {
931 ;(d.end++,
932 n.expiration && e.uint.preencode(d, n.expiration),
933 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
934 },
935 encode(d, n) {
936 const c =
937 (n.expiration ? 1 : 0) |
938 (n.requiresConfirmation ? 2 : 0) |
939 (n.canModerate ? 4 : 0) |
940 (n.canAdmin ? 8 : 0) |
941 (o >= 5 && n.buildType ? 16 : 0)
942 ;(e.uint.encode(d, c),
943 n.expiration && e.uint.encode(d, n.expiration),
944 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
945 },
946 decode(d) {
947 const n = e.uint.decode(d)
948 return {
949 expiration: 1 & n ? e.uint.decode(d) : 0,
950 requiresConfirmation: !!(2 & n),
951 canModerate: !!(4 & n),
952 canAdmin: !!(8 & n),
953 buildType: o >= 5 && 16 & n ? Fp.decode(d) : null,
954 }
955 },
956 },
957 Ne = Le,
958 Oe = e.frame(Be),
959 Ve = {
960 preencode(d, o) {
961 ;(e.fixed32.preencode(d, o.id),
962 Ne.preencode(d, o.response),
963 Oe.preencode(d, o.metadata),
964 d.end++,
965 o.anchor && n.preencode(d, o.anchor))
966 },
967 encode(d, o) {
968 const c = (o.anchor ? 1 : 0) | (o.isActive ? 2 : 0)
969 ;(e.fixed32.encode(d, o.id),
970 Ne.encode(d, o.response),
971 Oe.encode(d, o.metadata),
972 e.uint.encode(d, c),
973 o.anchor && n.encode(d, o.anchor))
974 },
975 decode(d) {
976 const o = e.fixed32.decode(d),
977 c = Ne.decode(d),
978 r = Oe.decode(d),
979 t = e.uint.decode(d)
980 return {
981 id: o,
982 response: c,
983 metadata: r,
984 anchor: 1 & t ? n.decode(d) : null,
985 isActive: !!(2 & t),
986 }
987 },
988 },
989 Ue = oe,
990 Je = e.frame(Ve),
991 ze = {
992 preencode(e, d) {
993 ;(Ue.preencode(e, d.header), Je.preencode(e, d.invitation))
994 },
995 encode(e, d) {
996 ;(Ue.encode(e, d.header), Je.encode(e, d.invitation))
997 },
998 decode: (e) => ({ header: Ue.decode(e), invitation: Je.decode(e) }),
999 },
1000 We = oe,
1001 He = {
1002 preencode(d, o) {
1003 ;(We.preencode(d, o.header), e.fixed32.preencode(d, o.id))
1004 },
1005 encode(d, o) {
1006 ;(We.encode(d, o.header), e.fixed32.encode(d, o.id))
1007 },
1008 decode: (d) => ({ header: We.decode(d), id: e.fixed32.decode(d) }),
1009 },
1010 Ge = {
1011 preencode(d, o) {
1012 ;(e.fixed32.preencode(d, o.mailbox),
1013 e.fixed32.preencode(d, o.invitationSeed),
1014 n.preencode(d, o.anchor))
1015 },
1016 encode(d, o) {
1017 ;(e.fixed32.encode(d, o.mailbox),
1018 e.fixed32.encode(d, o.invitationSeed),
1019 n.encode(d, o.anchor))
1020 },
1021 decode: (d) => ({
1022 mailbox: e.fixed32.decode(d),
1023 invitationSeed: e.fixed32.decode(d),
1024 anchor: n.decode(d),
1025 }),
1026 },
1027 Qe = {
1028 preencode(d, o) {
1029 ;(e.fixed32.preencode(d, o.roomKey),
1030 e.fixed32.preencode(d, o.encryptionKey),
1031 e.fixed32.preencode(d, o.seed),
1032 d.end++,
1033 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
1034 },
1035 encode(d, o) {
1036 const n = o.fastForwardTo ? 1 : 0
1037 ;(e.fixed32.encode(d, o.roomKey),
1038 e.fixed32.encode(d, o.encryptionKey),
1039 e.fixed32.encode(d, o.seed),
1040 e.uint.encode(d, n),
1041 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
1042 },
1043 decode: (d) => ({
1044 roomKey: e.fixed32.decode(d),
1045 encryptionKey: e.fixed32.decode(d),
1046 seed: e.fixed32.decode(d),
1047 fastForwardTo: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
1048 }),
1049 },
1050 Xe = {
1051 preencode(d, o) {
1052 ;(e.fixed32.preencode(d, o.mailbox),
1053 e.fixed32.preencode(d, o.invitationSeed),
1054 n.preencode(d, o.anchor),
1055 e.fixed32.preencode(d, o.identityPublicKey))
1056 },
1057 encode(d, o) {
1058 ;(e.fixed32.encode(d, o.mailbox),
1059 e.fixed32.encode(d, o.invitationSeed),
1060 n.encode(d, o.anchor),
1061 e.fixed32.encode(d, o.identityPublicKey))
1062 },
1063 decode: (d) => ({
1064 mailbox: e.fixed32.decode(d),
1065 invitationSeed: e.fixed32.decode(d),
1066 anchor: n.decode(d),
1067 identityPublicKey: e.fixed32.decode(d),
1068 }),
1069 },
1070 Ye = {
1071 preencode(d, o) {
1072 e.fixed32.preencode(d, o.mailbox)
1073 },
1074 encode(d, o) {
1075 e.fixed32.encode(d, o.mailbox)
1076 },
1077 decode: (d) => ({ mailbox: e.fixed32.decode(d) }),
1078 },
1079 Ze = e.frame(Ge),
1080 $e = e.frame(Xe),
1081 _e = e.frame(Ye),
1082 ed = e.frame(Qe),
1083 dd = e.array(e.ipv4Address),
1084 od = {
1085 preencode(e, d) {
1086 ;(e.end++,
1087 d.room && Ze.preencode(e, d.room),
1088 d.identity && $e.preencode(e, d.identity),
1089 d.contact && _e.preencode(e, d.contact),
1090 d.readonly && ed.preencode(e, d.readonly),
1091 d.additionalNodes && dd.preencode(e, d.additionalNodes),
1092 o >= 5 && d.buildType && Fp.preencode(e, d.buildType))
1093 },
1094 encode(d, n) {
1095 const c =
1096 (n.room ? 1 : 0) |
1097 (n.identity ? 2 : 0) |
1098 (n.contact ? 4 : 0) |
1099 (n.readonly ? 8 : 0) |
1100 (n.additionalNodes ? 16 : 0) |
1101 (o >= 5 && n.buildType ? 32 : 0)
1102 ;(e.uint.encode(d, c),
1103 n.room && Ze.encode(d, n.room),
1104 n.identity && $e.encode(d, n.identity),
1105 n.contact && _e.encode(d, n.contact),
1106 n.readonly && ed.encode(d, n.readonly),
1107 n.additionalNodes && dd.encode(d, n.additionalNodes),
1108 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
1109 },
1110 decode(d) {
1111 const n = e.uint.decode(d)
1112 return {
1113 room: 1 & n ? Ze.decode(d) : null,
1114 identity: 2 & n ? $e.decode(d) : null,
1115 contact: 4 & n ? _e.decode(d) : null,
1116 readonly: 8 & n ? ed.decode(d) : null,
1117 additionalNodes: 16 & n ? dd.decode(d) : null,
1118 buildType: o >= 5 && 32 & n ? Fp.decode(d) : null,
1119 }
1120 },
1121 },
1122 nd = oe,
1123 cd = {
1124 preencode(d, o) {
1125 ;(nd.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
1126 },
1127 encode(d, o) {
1128 ;(nd.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
1129 },
1130 decode: (d) => ({ header: nd.decode(d), blindRequest: e.buffer.decode(d) }),
1131 },
1132 rd = oe,
1133 td = {
1134 preencode(e, d) {
1135 ;(rd.preencode(e, d.header), e.end++, d.profile && Wp.preencode(e, d.profile))
1136 },
1137 encode(d, o) {
1138 const n = o.profile ? 1 : 0
1139 ;(rd.encode(d, o.header), e.uint.encode(d, n), o.profile && Wp.encode(d, o.profile))
1140 },
1141 decode: (d) => ({ header: rd.decode(d), profile: 1 & e.uint.decode(d) ? Wp.decode(d) : null }),
1142 },
1143 id = oe,
1144 ad = {
1145 preencode(d, o) {
1146 ;(id.preencode(d, o.header), e.fixed32.preencode(d, o.key))
1147 },
1148 encode(d, o) {
1149 ;(id.encode(d, o.header), e.fixed32.encode(d, o.key))
1150 },
1151 decode: (d) => ({ header: id.decode(d), key: e.fixed32.decode(d) }),
1152 },
1153 sd = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({}) },
1154 pd = sd,
1155 ud = Ae,
1156 ld = {
1157 preencode(d, o) {
1158 ;(e.fixed32.preencode(d, o.deviceKey),
1159 e.fixed32.preencode(d, o.id),
1160 ud.preencode(d, o.request))
1161 },
1162 encode(d, o) {
1163 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.id), ud.encode(d, o.request))
1164 },
1165 decode: (d) => ({
1166 deviceKey: e.fixed32.decode(d),
1167 id: e.fixed32.decode(d),
1168 request: ud.decode(d),
1169 }),
1170 },
1171 fd = oe,
1172 md = je,
1173 yd = {
1174 preencode(d, o) {
1175 ;(fd.preencode(d, o.header),
1176 e.fixed32.preencode(d, o.deviceKey),
1177 d.end++,
1178 o.identity && md.preencode(d, o.identity))
1179 },
1180 encode(d, o) {
1181 const n = o.identity ? 1 : 0
1182 ;(fd.encode(d, o.header),
1183 e.fixed32.encode(d, o.deviceKey),
1184 e.uint.encode(d, n),
1185 o.identity && md.encode(d, o.identity))
1186 },
1187 decode: (d) => ({
1188 header: fd.decode(d),
1189 deviceKey: e.fixed32.decode(d),
1190 identity: 1 & e.uint.decode(d) ? md.decode(d) : null,
1191 }),
1192 },
1193 xd = oe,
1194 bd = {
1195 preencode(d, o) {
1196 ;(xd.preencode(d, o.header), e.fixed32.preencode(d, o.deviceKey))
1197 },
1198 encode(d, o) {
1199 ;(xd.encode(d, o.header), e.fixed32.encode(d, o.deviceKey))
1200 },
1201 decode: (d) => ({ header: xd.decode(d), deviceKey: e.fixed32.decode(d) }),
1202 },
1203 vd = e.frame(C),
1204 gd = me,
1205 kd = {
1206 preencode(d, o) {
1207 ;(e.fixed32.preencode(d, o.key), vd.preencode(d, o.status), gd.preencode(d, o.profile))
1208 },
1209 encode(d, o) {
1210 ;(e.fixed32.encode(d, o.key), vd.encode(d, o.status), gd.encode(d, o.profile))
1211 },
1212 decode: (d) => ({ key: e.fixed32.decode(d), status: vd.decode(d), profile: gd.decode(d) }),
1213 },
1214 hd = vd,
1215 Kd = me,
1216 wd = {
1217 preencode(d, o) {
1218 ;(e.fixed32.preencode(d, o.key),
1219 hd.preencode(d, o.status),
1220 Kd.preencode(d, o.profile),
1221 d.end++,
1222 o.proofs && Hp.preencode(d, o.proofs))
1223 },
1224 encode(d, o) {
1225 const n = o.proofs ? 1 : 0
1226 ;(e.fixed32.encode(d, o.key),
1227 hd.encode(d, o.status),
1228 Kd.encode(d, o.profile),
1229 e.uint.encode(d, n),
1230 o.proofs && Hp.encode(d, o.proofs))
1231 },
1232 decode: (d) => ({
1233 key: e.fixed32.decode(d),
1234 status: hd.decode(d),
1235 profile: Kd.decode(d),
1236 proofs: 1 & e.uint.decode(d) ? Hp.decode(d) : null,
1237 }),
1238 },
1239 Pd = {
1240 preencode(d, o) {
1241 ;(e.fixed32.preencode(d, o.key),
1242 d.end++,
1243 o.profileAttestation && e.buffer.preencode(d, o.profileAttestation),
1244 o.latestReceipt && e.buffer.preencode(d, o.latestReceipt))
1245 },
1246 encode(d, o) {
1247 const n = (o.profileAttestation ? 1 : 0) | (o.latestReceipt ? 2 : 0)
1248 ;(e.fixed32.encode(d, o.key),
1249 e.uint.encode(d, n),
1250 o.profileAttestation && e.buffer.encode(d, o.profileAttestation),
1251 o.latestReceipt && e.buffer.encode(d, o.latestReceipt))
1252 },
1253 decode(d) {
1254 const o = e.fixed32.decode(d),
1255 n = e.uint.decode(d)
1256 return {
1257 key: o,
1258 profileAttestation: 1 & n ? e.buffer.decode(d) : null,
1259 latestReceipt: 2 & n ? e.buffer.decode(d) : null,
1260 }
1261 },
1262 },
1263 Rd = oe,
1264 Td = Pe,
1265 Ad = {
1266 preencode(e, d) {
1267 ;(Rd.preencode(e, d.header), Td.preencode(e, d.member))
1268 },
1269 encode(e, d) {
1270 ;(Rd.encode(e, d.header), Td.encode(e, d.member))
1271 },
1272 decode: (e) => ({ header: Rd.decode(e), member: Td.decode(e) }),
1273 },
1274 qd = oe,
1275 Md = e.frame(D),
1276 Cd = {
1277 preencode(d, o) {
1278 ;(qd.preencode(d, o.header),
1279 e.fixed32.preencode(d, o.memberKey),
1280 e.uint.preencode(d, o.key),
1281 Md.preencode(d, o.status))
1282 },
1283 encode(d, o) {
1284 ;(qd.encode(d, o.header),
1285 e.fixed32.encode(d, o.memberKey),
1286 e.uint.encode(d, o.key),
1287 Md.encode(d, o.status))
1288 },
1289 decode: (d) => ({
1290 header: qd.decode(d),
1291 memberKey: e.fixed32.decode(d),
1292 key: e.uint.decode(d),
1293 status: Md.decode(d),
1294 }),
1295 },
1296 Dd = oe,
1297 Id = {
1298 preencode(d, o) {
1299 ;(Dd.preencode(d, o.header), e.fixed32.preencode(d, o.key), d.end++)
1300 },
1301 encode(d, o) {
1302 const n = (o.isModerator ? 1 : 0) | (o.isAdmin ? 2 : 0)
1303 ;(Dd.encode(d, o.header), e.fixed32.encode(d, o.key), e.uint.encode(d, n))
1304 },
1305 decode(d) {
1306 const o = Dd.decode(d),
1307 n = e.fixed32.decode(d),
1308 c = e.uint.decode(d)
1309 return { header: o, key: n, isModerator: !!(1 & c), isAdmin: !!(2 & c) }
1310 },
1311 },
1312 Sd = oe,
1313 Fd = {
1314 preencode(d, o) {
1315 ;(Sd.preencode(d, o.header), e.fixed32.preencode(d, o.key))
1316 },
1317 encode(d, o) {
1318 ;(Sd.encode(d, o.header), e.fixed32.encode(d, o.key))
1319 },
1320 decode: (d) => ({ header: Sd.decode(d), key: e.fixed32.decode(d) }),
1321 },
1322 Ld = {
1323 preencode(d, o) {
1324 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.mentions))
1325 },
1326 encode(d, o) {
1327 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.mentions))
1328 },
1329 decode: (d) => ({ key: e.fixed32.decode(d), mentions: e.uint.decode(d) }),
1330 },
1331 jd = {
1332 preencode(d, o) {
1333 ;(d.end++, o.memberKey && e.fixed32.preencode(d, o.memberKey))
1334 },
1335 encode(d, o) {
1336 const n = o.memberKey ? 1 : 0
1337 ;(e.uint.encode(d, n), o.memberKey && e.fixed32.encode(d, o.memberKey))
1338 },
1339 decode: (d) => ({ memberKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null }),
1340 },
1341 Ed = jd,
1342 Bd = jd,
1343 Nd = {
1344 preencode(d, o) {
1345 ;(d.end++, o.from && e.string.preencode(d, o.from), o.to && e.string.preencode(d, o.to))
1346 },
1347 encode(d, o) {
1348 const n = (o.from ? 1 : 0) | (o.to ? 2 : 0)
1349 ;(e.uint.encode(d, n), o.from && e.string.encode(d, o.from), o.to && e.string.encode(d, o.to))
1350 },
1351 decode(d) {
1352 const o = e.uint.decode(d)
1353 return { from: 1 & o ? e.string.decode(d) : null, to: 2 & o ? e.string.decode(d) : null }
1354 },
1355 },
1356 Od = e.frame(jd),
1357 Vd = e.frame(Ed),
1358 Ud = e.frame(Nd),
1359 Jd = e.frame(Bd),
1360 zd = {
1361 preencode(d, n) {
1362 const c =
1363 (n.memberJoined ? 1 : 0) |
1364 (n.memberLeft ? 2 : 0) |
1365 (n.titleChanged ? 4 : 0) |
1366 (n.callStarted ? 8 : 0) |
1367 (n.callHangup ? 16 : 0) |
1368 (n.callMissed ? 32 : 0) |
1369 (n.roomAvatarChanged ? 64 : 0) |
1370 (n.invitationCreated ? 128 : 0) |
1371 (n.memberRemoved ? 256 : 0) |
1372 (o >= 3 && n.locationShared ? 512 : 0)
1373 ;(e.uint.preencode(d, c),
1374 n.memberJoined && Od.preencode(d, n.memberJoined),
1375 n.memberLeft && Vd.preencode(d, n.memberLeft),
1376 n.titleChanged && Ud.preencode(d, n.titleChanged),
1377 n.memberRemoved && Jd.preencode(d, n.memberRemoved),
1378 o >= 3 && n.locationShared && Gp.preencode(d, n.locationShared))
1379 },
1380 encode(d, n) {
1381 const c =
1382 (n.memberJoined ? 1 : 0) |
1383 (n.memberLeft ? 2 : 0) |
1384 (n.titleChanged ? 4 : 0) |
1385 (n.callStarted ? 8 : 0) |
1386 (n.callHangup ? 16 : 0) |
1387 (n.callMissed ? 32 : 0) |
1388 (n.roomAvatarChanged ? 64 : 0) |
1389 (n.invitationCreated ? 128 : 0) |
1390 (n.memberRemoved ? 256 : 0) |
1391 (o >= 3 && n.locationShared ? 512 : 0)
1392 ;(e.uint.encode(d, c),
1393 n.memberJoined && Od.encode(d, n.memberJoined),
1394 n.memberLeft && Vd.encode(d, n.memberLeft),
1395 n.titleChanged && Ud.encode(d, n.titleChanged),
1396 n.memberRemoved && Jd.encode(d, n.memberRemoved),
1397 o >= 3 && n.locationShared && Gp.encode(d, n.locationShared))
1398 },
1399 decode(d) {
1400 const n = e.uint.decode(d)
1401 return {
1402 memberJoined: 1 & n ? Od.decode(d) : null,
1403 memberLeft: 2 & n ? Vd.decode(d) : null,
1404 titleChanged: 4 & n ? Ud.decode(d) : null,
1405 callStarted: !!(8 & n),
1406 callHangup: !!(16 & n),
1407 callMissed: !!(32 & n),
1408 roomAvatarChanged: !!(64 & n),
1409 invitationCreated: !!(128 & n),
1410 memberRemoved: 256 & n ? Jd.decode(d) : null,
1411 locationShared: o >= 3 && 512 & n ? Gp.decode(d) : null,
1412 }
1413 },
1414 },
1415 Wd = {
1416 preencode(e, d) {
1417 ;(e.end++, o >= 3 && d.locationShared && Qp.preencode(e, d.locationShared))
1418 },
1419 encode(d, n) {
1420 const c =
1421 (n.callStarted ? 1 : 0) |
1422 (n.callHangup ? 2 : 0) |
1423 (n.callMissed ? 4 : 0) |
1424 (o >= 3 && n.locationShared ? 8 : 0)
1425 ;(e.uint.encode(d, c), o >= 3 && n.locationShared && Qp.encode(d, n.locationShared))
1426 },
1427 decode(d) {
1428 const n = e.uint.decode(d)
1429 return {
1430 callStarted: !!(1 & n),
1431 callHangup: !!(2 & n),
1432 callMissed: !!(4 & n),
1433 locationShared: o >= 3 && 8 & n ? Qp.decode(d) : null,
1434 }
1435 },
1436 },
1437 Hd = {
1438 preencode(d, o) {
1439 ;(e.uint.preencode(d, o.start), e.uint.preencode(d, o.length))
1440 },
1441 encode(d, o) {
1442 ;(e.uint.encode(d, o.start), e.uint.encode(d, o.length))
1443 },
1444 decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
1445 },
1446 Gd = e.frame(Hd),
1447 Qd = {
1448 preencode(d, o) {
1449 ;(Gd.preencode(d, o.range), e.string.preencode(d, o.content))
1450 },
1451 encode(d, o) {
1452 ;(Gd.encode(d, o.range), e.string.encode(d, o.content))
1453 },
1454 decode: (d) => ({ range: Gd.decode(d), content: e.string.decode(d) }),
1455 },
1456 Xd = Gd,
1457 Yd = {
1458 preencode(d, o) {
1459 ;(Xd.preencode(d, o.range), e.fixed32.preencode(d, o.memberKey))
1460 },
1461 encode(d, o) {
1462 ;(Xd.encode(d, o.range), e.fixed32.encode(d, o.memberKey))
1463 },
1464 decode: (d) => ({ range: Xd.decode(d), memberKey: e.fixed32.decode(d) }),
1465 },
1466 Zd = Gd,
1467 $d = {
1468 preencode(d, o) {
1469 ;(Zd.preencode(d, o.range), Z.preencode(d, o.language), e.string.preencode(d, o.text))
1470 },
1471 encode(d, o) {
1472 ;(Zd.encode(d, o.range), Z.encode(d, o.language), e.string.encode(d, o.text))
1473 },
1474 decode: (d) => ({ range: Zd.decode(d), language: Z.decode(d), text: e.string.decode(d) }),
1475 },
1476 _d = h,
1477 eo = e.array(e.uint),
1478 oo = {
1479 preencode(d, o) {
1480 ;(d.end++,
1481 o.title && e.string.preencode(d, o.title),
1482 o.description && e.string.preencode(d, o.description),
1483 o.file && _d.preencode(d, o.file),
1484 o.files && eo.preencode(d, o.files))
1485 },
1486 encode(d, o) {
1487 const n = (o.title ? 1 : 0) | (o.description ? 2 : 0) | (o.file ? 4 : 0) | (o.files ? 8 : 0)
1488 ;(e.uint.encode(d, n),
1489 o.title && e.string.encode(d, o.title),
1490 o.description && e.string.encode(d, o.description),
1491 o.file && _d.encode(d, o.file),
1492 o.files && eo.encode(d, o.files))
1493 },
1494 decode(d) {
1495 const o = e.uint.decode(d)
1496 return {
1497 title: 1 & o ? e.string.decode(d) : null,
1498 description: 2 & o ? e.string.decode(d) : null,
1499 file: 4 & o ? _d.decode(d) : null,
1500 files: 8 & o ? eo.decode(d) : null,
1501 }
1502 },
1503 },
1504 no = Gd,
1505 co = e.frame(oo),
1506 ro = {
1507 preencode(d, o) {
1508 ;(no.preencode(d, o.range),
1509 e.string.preencode(d, o.url),
1510 d.end++,
1511 o.preview && co.preencode(d, o.preview))
1512 },
1513 encode(d, o) {
1514 const n = o.preview ? 1 : 0
1515 ;(no.encode(d, o.range),
1516 e.string.encode(d, o.url),
1517 e.uint.encode(d, n),
1518 o.preview && co.encode(d, o.preview))
1519 },
1520 decode: (d) => ({
1521 range: no.decode(d),
1522 url: e.string.decode(d),
1523 preview: 1 & e.uint.decode(d) ? co.decode(d) : null,
1524 }),
1525 },
1526 to = e.array(e.frame(Yd)),
1527 io = e.array(e.frame(ro)),
1528 ao = io,
1529 so = e.array(e.frame(Hd)),
1530 po = so,
1531 uo = so,
1532 lo = e.array(e.frame(Qd)),
1533 fo = so,
1534 mo = so,
1535 yo = e.array(e.frame($d)),
1536 xo = {
1537 preencode(d, o) {
1538 const n =
1539 (o.mention ? 1 : 0) |
1540 (o.httpLink ? 2 : 0) |
1541 (o.pearLink ? 4 : 0) |
1542 (o.bold ? 8 : 0) |
1543 (o.italic ? 16 : 0) |
1544 (o.code ? 32 : 0) |
1545 (o.emoji ? 64 : 0) |
1546 (o.codeBlock ? 128 : 0) |
1547 (o.strike ? 256 : 0) |
1548 (o.translation ? 512 : 0)
1549 ;(e.uint.preencode(d, n),
1550 o.mention && to.preencode(d, o.mention),
1551 o.httpLink && io.preencode(d, o.httpLink),
1552 o.pearLink && ao.preencode(d, o.pearLink),
1553 o.bold && so.preencode(d, o.bold),
1554 o.italic && po.preencode(d, o.italic),
1555 o.code && uo.preencode(d, o.code),
1556 o.emoji && lo.preencode(d, o.emoji),
1557 o.codeBlock && fo.preencode(d, o.codeBlock),
1558 o.strike && mo.preencode(d, o.strike),
1559 o.translation && yo.preencode(d, o.translation))
1560 },
1561 encode(d, o) {
1562 const n =
1563 (o.mention ? 1 : 0) |
1564 (o.httpLink ? 2 : 0) |
1565 (o.pearLink ? 4 : 0) |
1566 (o.bold ? 8 : 0) |
1567 (o.italic ? 16 : 0) |
1568 (o.code ? 32 : 0) |
1569 (o.emoji ? 64 : 0) |
1570 (o.codeBlock ? 128 : 0) |
1571 (o.strike ? 256 : 0) |
1572 (o.translation ? 512 : 0)
1573 ;(e.uint.encode(d, n),
1574 o.mention && to.encode(d, o.mention),
1575 o.httpLink && io.encode(d, o.httpLink),
1576 o.pearLink && ao.encode(d, o.pearLink),
1577 o.bold && so.encode(d, o.bold),
1578 o.italic && po.encode(d, o.italic),
1579 o.code && uo.encode(d, o.code),
1580 o.emoji && lo.encode(d, o.emoji),
1581 o.codeBlock && fo.encode(d, o.codeBlock),
1582 o.strike && mo.encode(d, o.strike),
1583 o.translation && yo.encode(d, o.translation))
1584 },
1585 decode(d) {
1586 const o = e.uint.decode(d)
1587 return {
1588 mention: 1 & o ? to.decode(d) : null,
1589 httpLink: 2 & o ? io.decode(d) : null,
1590 pearLink: 4 & o ? ao.decode(d) : null,
1591 bold: 8 & o ? so.decode(d) : null,
1592 italic: 16 & o ? po.decode(d) : null,
1593 code: 32 & o ? uo.decode(d) : null,
1594 emoji: 64 & o ? lo.decode(d) : null,
1595 codeBlock: 128 & o ? fo.decode(d) : null,
1596 strike: 256 & o ? mo.decode(d) : null,
1597 translation: 512 & o ? yo.decode(d) : null,
1598 }
1599 },
1600 },
1601 bo = e.array(e.frame(k)),
1602 vo = e.frame(xo),
1603 go = e.frame(Wd),
1604 ko = {
1605 preencode(d, o) {
1606 ;(d.end++,
1607 o.text && e.string.preencode(d, o.text),
1608 o.files && bo.preencode(d, o.files),
1609 o.display && vo.preencode(d, o.display),
1610 o.replyTo && c.preencode(d, o.replyTo),
1611 o.parent && c.preencode(d, o.parent),
1612 o.event && go.preencode(d, o.event))
1613 },
1614 encode(d, n) {
1615 const r =
1616 (n.text ? 1 : 0) |
1617 (n.files ? 2 : 0) |
1618 (n.display ? 4 : 0) |
1619 (n.replyTo ? 8 : 0) |
1620 (n.parent ? 16 : 0) |
1621 (n.event ? 32 : 0) |
1622 (o >= 3 && n.forwarded ? 64 : 0)
1623 ;(e.uint.encode(d, r),
1624 n.text && e.string.encode(d, n.text),
1625 n.files && bo.encode(d, n.files),
1626 n.display && vo.encode(d, n.display),
1627 n.replyTo && c.encode(d, n.replyTo),
1628 n.parent && c.encode(d, n.parent),
1629 n.event && go.encode(d, n.event))
1630 },
1631 decode(d) {
1632 const n = e.uint.decode(d)
1633 return {
1634 text: 1 & n ? e.string.decode(d) : null,
1635 files: 2 & n ? bo.decode(d) : null,
1636 display: 4 & n ? vo.decode(d) : null,
1637 replyTo: 8 & n ? c.decode(d) : null,
1638 parent: 16 & n ? c.decode(d) : null,
1639 event: 32 & n ? go.decode(d) : null,
1640 forwarded: o >= 3 && !!(64 & n),
1641 }
1642 },
1643 },
1644 ho = eo,
1645 Ko = vo,
1646 wo = {
1647 preencode(d, o) {
1648 ;(d.end++,
1649 o.text && e.string.preencode(d, o.text),
1650 o.files && ho.preencode(d, o.files),
1651 o.display && Ko.preencode(d, o.display),
1652 o.replyTo && c.preencode(d, o.replyTo),
1653 o.parent && c.preencode(d, o.parent))
1654 },
1655 encode(d, n) {
1656 const r =
1657 (n.text ? 1 : 0) |
1658 (n.files ? 2 : 0) |
1659 (n.display ? 4 : 0) |
1660 (n.replyTo ? 8 : 0) |
1661 (n.parent ? 16 : 0) |
1662 (o >= 3 && n.forwarded ? 32 : 0)
1663 ;(e.uint.encode(d, r),
1664 n.text && e.string.encode(d, n.text),
1665 n.files && ho.encode(d, n.files),
1666 n.display && Ko.encode(d, n.display),
1667 n.replyTo && c.encode(d, n.replyTo),
1668 n.parent && c.encode(d, n.parent))
1669 },
1670 decode(d) {
1671 const n = e.uint.decode(d)
1672 return {
1673 text: 1 & n ? e.string.decode(d) : null,
1674 files: 2 & n ? ho.decode(d) : null,
1675 display: 4 & n ? Ko.decode(d) : null,
1676 replyTo: 8 & n ? c.decode(d) : null,
1677 parent: 16 & n ? c.decode(d) : null,
1678 forwarded: o >= 3 && !!(32 & n),
1679 }
1680 },
1681 },
1682 Po = bo,
1683 Ro = vo,
1684 To = {
1685 preencode(d, o) {
1686 ;(d.end++,
1687 o.text && e.string.preencode(d, o.text),
1688 o.files && Po.preencode(d, o.files),
1689 o.display && Ro.preencode(d, o.display),
1690 o.replyTo && c.preencode(d, o.replyTo),
1691 o.parent && c.preencode(d, o.parent))
1692 },
1693 encode(d, n) {
1694 const r =
1695 (n.text ? 1 : 0) |
1696 (n.files ? 2 : 0) |
1697 (n.display ? 4 : 0) |
1698 (n.replyTo ? 8 : 0) |
1699 (n.parent ? 16 : 0) |
1700 (o >= 3 && n.forwarded ? 32 : 0)
1701 ;(e.uint.encode(d, r),
1702 n.text && e.string.encode(d, n.text),
1703 n.files && Po.encode(d, n.files),
1704 n.display && Ro.encode(d, n.display),
1705 n.replyTo && c.encode(d, n.replyTo),
1706 n.parent && c.encode(d, n.parent))
1707 },
1708 decode(d) {
1709 const n = e.uint.decode(d)
1710 return {
1711 text: 1 & n ? e.string.decode(d) : null,
1712 files: 2 & n ? Po.decode(d) : null,
1713 display: 4 & n ? Ro.decode(d) : null,
1714 replyTo: 8 & n ? c.decode(d) : null,
1715 parent: 16 & n ? c.decode(d) : null,
1716 forwarded: o >= 3 && !!(32 & n),
1717 }
1718 },
1719 },
1720 Ao = {
1721 preencode(e, d) {
1722 e.end++
1723 },
1724 encode(d, o) {
1725 const n = (o.isEdited ? 1 : 0) | (o.isDeleted ? 2 : 0) | (o.isPinned ? 4 : 0)
1726 e.uint.encode(d, n)
1727 },
1728 decode(d) {
1729 const o = e.uint.decode(d)
1730 return { isEdited: !!(1 & o), isDeleted: !!(2 & o), isPinned: !!(4 & o) }
1731 },
1732 },
1733 qo = {
1734 preencode(d, o) {
1735 ;(e.uint.preencode(d, o.thread), e.uint.preencode(d, o.index))
1736 },
1737 encode(d, o) {
1738 ;(e.uint.encode(d, o.thread), e.uint.encode(d, o.index))
1739 },
1740 decode: (d) => ({ thread: e.uint.decode(d), index: e.uint.decode(d) }),
1741 },
1742 Mo = e.frame(V),
1743 Co = {
1744 preencode(d, o) {
1745 ;(e.uint.preencode(d, o.id),
1746 e.uint.preencode(d, o.count),
1747 d.end++,
1748 o.parent && c.preencode(d, o.parent),
1749 o.stats && Mo.preencode(d, o.stats))
1750 },
1751 encode(d, o) {
1752 const n = (o.parent ? 1 : 0) | (o.stats ? 2 : 0)
1753 ;(e.uint.encode(d, o.id),
1754 e.uint.encode(d, o.count),
1755 e.uint.encode(d, n),
1756 o.parent && c.encode(d, o.parent),
1757 o.stats && Mo.encode(d, o.stats))
1758 },
1759 decode(d) {
1760 const o = e.uint.decode(d),
1761 n = e.uint.decode(d),
1762 r = e.uint.decode(d)
1763 return {
1764 id: o,
1765 count: n,
1766 parent: 1 & r ? c.decode(d) : null,
1767 stats: 2 & r ? Mo.decode(d) : null,
1768 }
1769 },
1770 },
1771 Do = e.frame(Ao),
1772 Io = e.frame(wo),
1773 So = e.frame(zd),
1774 Fo = {
1775 preencode(d, o) {
1776 ;(qo.preencode(d, o.id),
1777 c.preencode(d, o.oplog),
1778 e.uint.preencode(d, o.clock),
1779 e.uint.preencode(d, o.timestamp),
1780 d.end++,
1781 o.editedAt && e.uint.preencode(d, o.editedAt),
1782 Do.preencode(d, o.status),
1783 o.message && Io.preencode(d, o.message),
1784 o.event && So.preencode(d, o.event))
1785 },
1786 encode(d, o) {
1787 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1788 ;(qo.encode(d, o.id),
1789 c.encode(d, o.oplog),
1790 e.uint.encode(d, o.clock),
1791 e.uint.encode(d, o.timestamp),
1792 e.uint.encode(d, n),
1793 o.editedAt && e.uint.encode(d, o.editedAt),
1794 Do.encode(d, o.status),
1795 o.message && Io.encode(d, o.message),
1796 o.event && So.encode(d, o.event))
1797 },
1798 decode(d) {
1799 const o = qo.decode(d),
1800 n = c.decode(d),
1801 r = e.uint.decode(d),
1802 t = e.uint.decode(d),
1803 i = e.uint.decode(d)
1804 return {
1805 id: o,
1806 oplog: n,
1807 clock: r,
1808 timestamp: t,
1809 editedAt: 1 & i ? e.uint.decode(d) : 0,
1810 status: Do.decode(d),
1811 message: 2 & i ? Io.decode(d) : null,
1812 event: 4 & i ? So.decode(d) : null,
1813 }
1814 },
1815 },
1816 Lo = Do,
1817 jo = e.frame(To),
1818 Eo = So,
1819 Bo = {
1820 preencode(d, o) {
1821 ;(qo.preencode(d, o.id),
1822 c.preencode(d, o.oplog),
1823 e.uint.preencode(d, o.clock),
1824 e.uint.preencode(d, o.timestamp),
1825 d.end++,
1826 o.editedAt && e.uint.preencode(d, o.editedAt),
1827 Lo.preencode(d, o.status),
1828 o.message && jo.preencode(d, o.message),
1829 o.event && Eo.preencode(d, o.event))
1830 },
1831 encode(d, o) {
1832 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1833 ;(qo.encode(d, o.id),
1834 c.encode(d, o.oplog),
1835 e.uint.encode(d, o.clock),
1836 e.uint.encode(d, o.timestamp),
1837 e.uint.encode(d, n),
1838 o.editedAt && e.uint.encode(d, o.editedAt),
1839 Lo.encode(d, o.status),
1840 o.message && jo.encode(d, o.message),
1841 o.event && Eo.encode(d, o.event))
1842 },
1843 decode(d) {
1844 const o = qo.decode(d),
1845 n = c.decode(d),
1846 r = e.uint.decode(d),
1847 t = e.uint.decode(d),
1848 i = e.uint.decode(d)
1849 return {
1850 id: o,
1851 oplog: n,
1852 clock: r,
1853 timestamp: t,
1854 editedAt: 1 & i ? e.uint.decode(d) : 0,
1855 status: Lo.decode(d),
1856 message: 2 & i ? jo.decode(d) : null,
1857 event: 4 & i ? Eo.decode(d) : null,
1858 }
1859 },
1860 },
1861 No = oe,
1862 Oo = e.frame(ko),
1863 Vo = {
1864 preencode(e, d) {
1865 ;(No.preencode(e, d.header), Oo.preencode(e, d.message))
1866 },
1867 encode(e, d) {
1868 ;(No.encode(e, d.header), Oo.encode(e, d.message))
1869 },
1870 decode: (e) => ({ header: No.decode(e), message: Oo.decode(e) }),
1871 },
1872 Uo = oe,
1873 Jo = {
1874 preencode(e, d) {
1875 ;(Uo.preencode(e, d.header), c.preencode(e, d.oplog))
1876 },
1877 encode(e, d) {
1878 ;(Uo.encode(e, d.header), c.encode(e, d.oplog))
1879 },
1880 decode: (e) => ({ header: Uo.decode(e), oplog: c.decode(e) }),
1881 },
1882 zo = oe,
1883 Wo = Oo,
1884 Ho = {
1885 preencode(e, d) {
1886 ;(zo.preencode(e, d.header), c.preencode(e, d.oplog), Wo.preencode(e, d.message))
1887 },
1888 encode(e, d) {
1889 ;(zo.encode(e, d.header), c.encode(e, d.oplog), Wo.encode(e, d.message))
1890 },
1891 decode: (e) => ({ header: zo.decode(e), oplog: c.decode(e), message: Wo.decode(e) }),
1892 },
1893 Go = oe,
1894 Qo = {
1895 preencode(e, d) {
1896 ;(Go.preencode(e, d.header), c.preencode(e, d.oplog), e.end++)
1897 },
1898 encode(d, o) {
1899 const n = o.isPinned ? 1 : 0
1900 ;(Go.encode(d, o.header), c.encode(d, o.oplog), e.uint.encode(d, n))
1901 },
1902 decode: (d) => ({
1903 header: Go.decode(d),
1904 oplog: c.decode(d),
1905 isPinned: !!(1 & e.uint.decode(d)),
1906 }),
1907 },
1908 Xo = { HttpLink: 1, PearLink: 2 },
1909 Yo = {
1910 preencode(e, d) {
1911 e.end++
1912 },
1913 encode(d, o) {
1914 if (o > 2) throw new Error("Unknown enum")
1915 e.uint.encode(d, o)
1916 },
1917 decode: (d) => e.uint.decode(d),
1918 },
1919 Zo = oe,
1920 $o = {
1921 preencode(d, o) {
1922 ;(Zo.preencode(d, o.header),
1923 c.preencode(d, o.oplog),
1924 e.uint.preencode(d, o.index),
1925 Xp.preencode(d, o.preview),
1926 d.end++,
1927 o.displayType && Yo.preencode(d, o.displayType))
1928 },
1929 encode(d, o) {
1930 const n = o.displayType ? 1 : 0
1931 ;(Zo.encode(d, o.header),
1932 c.encode(d, o.oplog),
1933 e.uint.encode(d, o.index),
1934 Xp.encode(d, o.preview),
1935 e.uint.encode(d, n),
1936 o.displayType && Yo.encode(d, o.displayType))
1937 },
1938 decode: (d) => ({
1939 header: Zo.decode(d),
1940 oplog: c.decode(d),
1941 index: e.uint.decode(d),
1942 preview: Xp.decode(d),
1943 displayType: 1 & e.uint.decode(d) ? Yo.decode(d) : 0,
1944 }),
1945 },
1946 _o = {
1947 preencode(d, o) {
1948 ;(qo.preencode(d, o.id),
1949 e.fixed32.preencode(d, o.sender),
1950 e.uint.preencode(d, o.clock),
1951 e.string.preencode(d, o.reaction))
1952 },
1953 encode(d, o) {
1954 ;(qo.encode(d, o.id),
1955 e.fixed32.encode(d, o.sender),
1956 e.uint.encode(d, o.clock),
1957 e.string.encode(d, o.reaction))
1958 },
1959 decode: (d) => ({
1960 id: qo.decode(d),
1961 sender: e.fixed32.decode(d),
1962 clock: e.uint.decode(d),
1963 reaction: e.string.decode(d),
1964 }),
1965 },
1966 en = {
1967 preencode(d, o) {
1968 ;(e.string.preencode(d, o.text), e.uint.preencode(d, o.count))
1969 },
1970 encode(d, o) {
1971 ;(e.string.encode(d, o.text), e.uint.encode(d, o.count))
1972 },
1973 decode: (d) => ({ text: e.string.decode(d), count: e.uint.decode(d) }),
1974 },
1975 dn = e.array(e.frame(en)),
1976 on = {
1977 preencode(d, o) {
1978 ;(qo.preencode(d, o.id),
1979 e.uint.preencode(d, o.total),
1980 dn.preencode(d, o.reactions),
1981 d.end++,
1982 o.editedAt && e.uint.preencode(d, o.editedAt))
1983 },
1984 encode(d, o) {
1985 const n = o.editedAt ? 1 : 0
1986 ;(qo.encode(d, o.id),
1987 e.uint.encode(d, o.total),
1988 dn.encode(d, o.reactions),
1989 e.uint.encode(d, n),
1990 o.editedAt && e.uint.encode(d, o.editedAt))
1991 },
1992 decode: (d) => ({
1993 id: qo.decode(d),
1994 total: e.uint.decode(d),
1995 reactions: dn.decode(d),
1996 editedAt: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
1997 }),
1998 },
1999 nn = oe,
2000 cn = {
2001 preencode(d, o) {
2002 ;(nn.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
2003 },
2004 encode(d, o) {
2005 ;(nn.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
2006 },
2007 decode: (d) => ({ header: nn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
2008 },
2009 rn = oe,
2010 tn = {
2011 preencode(d, o) {
2012 ;(rn.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
2013 },
2014 encode(d, o) {
2015 ;(rn.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
2016 },
2017 decode: (d) => ({ header: rn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
2018 },
2019 an = oe,
2020 sn = e.frame(ee),
2021 pn = {
2022 preencode(d, o) {
2023 ;(an.preencode(d, o.header), e.uint.preencode(d, o.key), sn.preencode(d, o.config))
2024 },
2025 encode(d, o) {
2026 ;(an.encode(d, o.header), e.uint.encode(d, o.key), sn.encode(d, o.config))
2027 },
2028 decode: (d) => ({ header: an.decode(d), key: e.uint.decode(d), config: sn.decode(d) }),
2029 },
2030 un = {
2031 preencode(d, o) {
2032 ;(e.fixed32.preencode(d, o.memberKey),
2033 e.string.preencode(d, o.displayName),
2034 d.end++,
2035 o.avatar && Yp.preencode(d, o.avatar))
2036 },
2037 encode(d, o) {
2038 const n = o.avatar ? 1 : 0
2039 ;(e.fixed32.encode(d, o.memberKey),
2040 e.string.encode(d, o.displayName),
2041 e.uint.encode(d, n),
2042 o.avatar && Yp.encode(d, o.avatar))
2043 },
2044 decode: (d) => ({
2045 memberKey: e.fixed32.decode(d),
2046 displayName: e.string.decode(d),
2047 avatar: 1 & e.uint.decode(d) ? Yp.decode(d) : null,
2048 }),
2049 },
2050 ln = {
2051 preencode(d, o) {
2052 ;(e.fixed32.preencode(d, o.key), d.end++, o.username && e.string.preencode(d, o.username))
2053 },
2054 encode(d, o) {
2055 const n = o.username ? 1 : 0
2056 ;(e.fixed32.encode(d, o.key),
2057 e.uint.encode(d, n),
2058 o.username && e.string.encode(d, o.username))
2059 },
2060 decode: (d) => ({
2061 key: e.fixed32.decode(d),
2062 username: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2063 }),
2064 },
2065 fn = e.frame(ln),
2066 mn = {
2067 preencode(d, o) {
2068 ;(e.fixed32.preencode(d, o.publicKey),
2069 d.end++,
2070 o.discoveryCoreKey && e.fixed32.preencode(d, o.discoveryCoreKey),
2071 o.userRegistry && fn.preencode(d, o.userRegistry))
2072 },
2073 encode(d, o) {
2074 const n = (o.discoveryCoreKey ? 1 : 0) | (o.userRegistry ? 2 : 0)
2075 ;(e.fixed32.encode(d, o.publicKey),
2076 e.uint.encode(d, n),
2077 o.discoveryCoreKey && e.fixed32.encode(d, o.discoveryCoreKey),
2078 o.userRegistry && fn.encode(d, o.userRegistry))
2079 },
2080 decode(d) {
2081 const o = e.fixed32.decode(d),
2082 n = e.uint.decode(d)
2083 return {
2084 publicKey: o,
2085 discoveryCoreKey: 1 & n ? e.fixed32.decode(d) : null,
2086 userRegistry: 2 & n ? fn.decode(d) : null,
2087 }
2088 },
2089 },
2090 yn = oe,
2091 xn = e.frame(G),
2092 bn = e.frame(Q),
2093 vn = sn,
2094 gn = e.frame(mn),
2095 kn = we,
2096 hn = e.array(e.frame(ye)),
2097 Kn = {
2098 preencode(e, d) {
2099 ;(yn.preencode(e, d.header),
2100 xn.preencode(e, d.digest),
2101 bn.preencode(e, d.capabilities),
2102 e.end++,
2103 d.config && vn.preencode(e, d.config),
2104 d.identity && gn.preencode(e, d.identity),
2105 d.bootstrapDevice && kn.preencode(e, d.bootstrapDevice),
2106 d.initialMembers && hn.preencode(e, d.initialMembers))
2107 },
2108 encode(d, o) {
2109 const n =
2110 (o.config ? 1 : 0) |
2111 (o.identity ? 2 : 0) |
2112 (o.bootstrapDevice ? 4 : 0) |
2113 (o.initialMembers ? 8 : 0)
2114 ;(yn.encode(d, o.header),
2115 xn.encode(d, o.digest),
2116 bn.encode(d, o.capabilities),
2117 e.uint.encode(d, n),
2118 o.config && vn.encode(d, o.config),
2119 o.identity && gn.encode(d, o.identity),
2120 o.bootstrapDevice && kn.encode(d, o.bootstrapDevice),
2121 o.initialMembers && hn.encode(d, o.initialMembers))
2122 },
2123 decode(d) {
2124 const o = yn.decode(d),
2125 n = xn.decode(d),
2126 c = bn.decode(d),
2127 r = e.uint.decode(d)
2128 return {
2129 header: o,
2130 digest: n,
2131 capabilities: c,
2132 config: 1 & r ? vn.decode(d) : null,
2133 identity: 2 & r ? gn.decode(d) : null,
2134 bootstrapDevice: 4 & r ? kn.decode(d) : null,
2135 initialMembers: 8 & r ? hn.decode(d) : null,
2136 }
2137 },
2138 },
2139 wn = oe,
2140 Pn = {
2141 preencode(d, o) {
2142 ;(wn.preencode(d, o.header), e.uint.preencode(d, o.version))
2143 },
2144 encode(d, o) {
2145 ;(wn.encode(d, o.header), e.uint.encode(d, o.version))
2146 },
2147 decode: (d) => ({ header: wn.decode(d), version: e.uint.decode(d) }),
2148 },
2149 Rn = oe,
2150 Tn = {
2151 preencode(d, n) {
2152 ;(Rn.preencode(d, n.header),
2153 e.uint.preencode(d, n.from),
2154 e.uint.preencode(d, n.to),
2155 d.end++,
2156 o >= 5 && n.buildType && Fp.preencode(d, n.buildType))
2157 },
2158 encode(d, n) {
2159 const c = o >= 5 && n.buildType ? 1 : 0
2160 ;(Rn.encode(d, n.header),
2161 e.uint.encode(d, n.from),
2162 e.uint.encode(d, n.to),
2163 e.uint.encode(d, c),
2164 o >= 5 && n.buildType && Fp.encode(d, n.buildType))
2165 },
2166 decode(d) {
2167 const n = Rn.decode(d),
2168 c = e.uint.decode(d),
2169 r = e.uint.decode(d),
2170 t = d.start < d.end ? e.uint.decode(d) : 0
2171 return { header: n, from: c, to: r, buildType: o >= 5 && 1 & t ? Fp.decode(d) : null }
2172 },
2173 },
2174 An = {
2175 RoomType: 1,
2176 IsExperimental: 2,
2177 IsJoiningDisabled: 3,
2178 IsAppendingDisabled: 4,
2179 IsCallingDisabled: 5,
2180 IsMembershipEventsDisabled: 6,
2181 IsAttachmentsDisabled: 7,
2182 IsLinksDisabled: 8,
2183 },
2184 qn = {
2185 preencode(e, d) {
2186 e.end++
2187 },
2188 encode(d, o) {
2189 if (o > 8) throw new Error("Unknown enum")
2190 e.uint.encode(d, o)
2191 },
2192 decode: (d) => e.uint.decode(d),
2193 },
2194 Mn = oe,
2195 Cn = H,
2196 Dn = {
2197 preencode(d, o) {
2198 ;(Mn.preencode(d, o.header), e.uint.preencode(d, o.key), Cn.preencode(d, o.settings))
2199 },
2200 encode(d, o) {
2201 ;(Mn.encode(d, o.header), e.uint.encode(d, o.key), Cn.encode(d, o.settings))
2202 },
2203 decode: (d) => ({ header: Mn.decode(d), key: e.uint.decode(d), settings: Cn.decode(d) }),
2204 },
2205 In = oe,
2206 Sn = {
2207 preencode(d, o) {
2208 ;(In.preencode(d, o.header), e.uint.preencode(d, o.value))
2209 },
2210 encode(d, o) {
2211 ;(In.encode(d, o.header), e.uint.encode(d, o.value))
2212 },
2213 decode: (d) => ({ header: In.decode(d), value: e.uint.decode(d) }),
2214 },
2215 Fn = {
2216 preencode(d, o) {
2217 ;(e.uint.preencode(d, o.key), e.uint.preencode(d, o.value))
2218 },
2219 encode(d, o) {
2220 ;(e.uint.encode(d, o.key), e.uint.encode(d, o.value))
2221 },
2222 decode: (d) => ({ key: e.uint.decode(d), value: e.uint.decode(d) }),
2223 },
2224 Ln = { Flag: 1 },
2225 jn = {
2226 preencode(e, d) {
2227 e.end++
2228 },
2229 encode(d, o) {
2230 if (o > 1) throw new Error("Unknown enum")
2231 e.uint.encode(d, o)
2232 },
2233 decode: (d) => e.uint.decode(d),
2234 },
2235 En = {
2236 preencode(d, o) {
2237 ;(qo.preencode(d, o.id),
2238 e.fixed32.preencode(d, o.sender),
2239 e.uint.preencode(d, o.clock),
2240 jn.preencode(d, o.label))
2241 },
2242 encode(d, o) {
2243 ;(qo.encode(d, o.id),
2244 e.fixed32.encode(d, o.sender),
2245 e.uint.encode(d, o.clock),
2246 jn.encode(d, o.label))
2247 },
2248 decode: (d) => ({
2249 id: qo.decode(d),
2250 sender: e.fixed32.decode(d),
2251 clock: e.uint.decode(d),
2252 label: jn.decode(d),
2253 }),
2254 },
2255 Bn = oe,
2256 Nn = {
2257 preencode(e, d) {
2258 ;(Bn.preencode(e, d.header), c.preencode(e, d.oplog), jn.preencode(e, d.label))
2259 },
2260 encode(e, d) {
2261 ;(Bn.encode(e, d.header), c.encode(e, d.oplog), jn.encode(e, d.label))
2262 },
2263 decode: (e) => ({ header: Bn.decode(e), oplog: c.decode(e), label: jn.decode(e) }),
2264 },
2265 On = oe,
2266 Vn = {
2267 preencode(e, d) {
2268 ;(On.preencode(e, d.header), c.preencode(e, d.oplog), jn.preencode(e, d.label))
2269 },
2270 encode(e, d) {
2271 ;(On.encode(e, d.header), c.encode(e, d.oplog), jn.encode(e, d.label))
2272 },
2273 decode: (e) => ({ header: On.decode(e), oplog: c.decode(e), label: jn.decode(e) }),
2274 },
2275 Un = {
2276 preencode(d, o) {
2277 ;(jn.preencode(d, o.label), e.uint.preencode(d, o.count))
2278 },
2279 encode(d, o) {
2280 ;(jn.encode(d, o.label), e.uint.encode(d, o.count))
2281 },
2282 decode: (d) => ({ label: jn.decode(d), count: e.uint.decode(d) }),
2283 },
2284 Jn = e.array(e.frame(Un)),
2285 zn = {
2286 preencode(d, o) {
2287 ;(qo.preencode(d, o.id),
2288 e.uint.preencode(d, o.total),
2289 Jn.preencode(d, o.labels),
2290 e.uint.preencode(d, o.editedAt),
2291 d.end++,
2292 o.flagsClock && e.uint.preencode(d, o.flagsClock),
2293 o.version && e.uint.preencode(d, o.version))
2294 },
2295 encode(d, o) {
2296 const n = (o.flagsClock ? 1 : 0) | (o.version ? 2 : 0) | (o.isDeleted ? 4 : 0)
2297 ;(qo.encode(d, o.id),
2298 e.uint.encode(d, o.total),
2299 Jn.encode(d, o.labels),
2300 e.uint.encode(d, o.editedAt),
2301 e.uint.encode(d, n),
2302 o.flagsClock && e.uint.encode(d, o.flagsClock),
2303 o.version && e.uint.encode(d, o.version))
2304 },
2305 decode(d) {
2306 const o = qo.decode(d),
2307 n = e.uint.decode(d),
2308 c = Jn.decode(d),
2309 r = e.uint.decode(d),
2310 t = e.uint.decode(d)
2311 return {
2312 id: o,
2313 total: n,
2314 labels: c,
2315 editedAt: r,
2316 flagsClock: 1 & t ? e.uint.decode(d) : 0,
2317 version: 2 & t ? e.uint.decode(d) : 0,
2318 isDeleted: !!(4 & t),
2319 }
2320 },
2321 },
2322 Wn = oe,
2323 Hn = {
2324 preencode(d, o) {
2325 ;(Wn.preencode(d, o.header), e.uint.preencode(d, o.length))
2326 },
2327 encode(d, o) {
2328 ;(Wn.encode(d, o.header), e.uint.encode(d, o.length))
2329 },
2330 decode: (d) => ({ header: Wn.decode(d), length: e.uint.decode(d) }),
2331 },
2332 Gn = {
2333 preencode(d, o) {
2334 ;(e.fixed32.preencode(d, o.memberKey), e.uint.preencode(d, o.length))
2335 },
2336 encode(d, o) {
2337 ;(e.fixed32.encode(d, o.memberKey), e.uint.encode(d, o.length))
2338 },
2339 decode: (d) => ({ memberKey: e.fixed32.decode(d), length: e.uint.decode(d) }),
2340 },
2341 Qn = de,
2342 Xn = {
2343 preencode(d, o) {
2344 ;(e.fixed32.preencode(d, o.memberKey),
2345 Zp.preencode(d, o.status),
2346 d.end++,
2347 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2348 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2349 },
2350 encode(d, o) {
2351 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2352 ;(e.fixed32.encode(d, o.memberKey),
2353 Zp.encode(d, o.status),
2354 e.uint.encode(d, n),
2355 o.mailbox && e.fixed32.encode(d, o.mailbox),
2356 o.roomKey && e.fixed32.encode(d, o.roomKey))
2357 },
2358 decode(d) {
2359 const o = e.fixed32.decode(d),
2360 n = Zp.decode(d),
2361 c = e.uint.decode(d)
2362 return {
2363 memberKey: o,
2364 status: n,
2365 mailbox: 1 & c ? e.fixed32.decode(d) : null,
2366 roomKey: 2 & c ? e.fixed32.decode(d) : null,
2367 }
2368 },
2369 },
2370 Yn = {
2371 preencode(d, o) {
2372 ;(e.fixed32.preencode(d, o.roomKey),
2373 e.buffer.preencode(d, o.encryptionKey),
2374 e.fixed32.preencode(d, o.seed),
2375 n.preencode(d, o.initiator),
2376 e.fixed32.preencode(d, o.fastForwardTo))
2377 },
2378 encode(d, o) {
2379 ;(e.fixed32.encode(d, o.roomKey),
2380 e.buffer.encode(d, o.encryptionKey),
2381 e.fixed32.encode(d, o.seed),
2382 n.encode(d, o.initiator),
2383 e.fixed32.encode(d, o.fastForwardTo))
2384 },
2385 decode: (d) => ({
2386 roomKey: e.fixed32.decode(d),
2387 encryptionKey: e.buffer.decode(d),
2388 seed: e.fixed32.decode(d),
2389 initiator: n.decode(d),
2390 fastForwardTo: e.fixed32.decode(d),
2391 }),
2392 },
2393 Zn = e.array(e.frame(Yn)),
2394 $n = _,
2395 _n = {
2396 preencode(e, d) {
2397 ;(Zn.preencode(e, d.sharedRooms), $n.preencode(e, d.blockedContacts))
2398 },
2399 encode(e, d) {
2400 ;(Zn.encode(e, d.sharedRooms), $n.encode(e, d.blockedContacts))
2401 },
2402 decode: (e) => ({ sharedRooms: Zn.decode(e), blockedContacts: $n.decode(e) }),
2403 },
2404 ec = gn,
2405 dc = {
2406 preencode(e, d) {
2407 ec.preencode(e, d.identity)
2408 },
2409 encode(e, d) {
2410 ec.encode(e, d.identity)
2411 },
2412 decode: (e) => ({ identity: ec.decode(e) }),
2413 },
2414 oc = {
2415 preencode(d, o) {
2416 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contacts))
2417 },
2418 encode(d, o) {
2419 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contacts))
2420 },
2421 decode: (d) => ({ rooms: e.uint.decode(d), contacts: e.uint.decode(d) }),
2422 },
2423 nc = {
2424 preencode(d, o) {
2425 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contactRequests))
2426 },
2427 encode(d, o) {
2428 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contactRequests))
2429 },
2430 decode: (d) => ({ rooms: e.uint.decode(d), contactRequests: e.uint.decode(d) }),
2431 },
2432 cc = {
2433 preencode(d, o) {
2434 e.buffer.preencode(d, o.entropy)
2435 },
2436 encode(d, o) {
2437 e.buffer.encode(d, o.entropy)
2438 },
2439 decode: (d) => ({ entropy: e.buffer.decode(d) }),
2440 },
2441 rc = {
2442 preencode(d, o) {
2443 ;(e.fixed32.preencode(d, o.publicKey),
2444 e.fixed32.preencode(d, o.devicePublicKey),
2445 e.fixed32.preencode(d, o.writerKey))
2446 },
2447 encode(d, o) {
2448 ;(e.fixed32.encode(d, o.publicKey),
2449 e.fixed32.encode(d, o.devicePublicKey),
2450 e.fixed32.encode(d, o.writerKey))
2451 },
2452 decode: (d) => ({
2453 publicKey: e.fixed32.decode(d),
2454 devicePublicKey: e.fixed32.decode(d),
2455 writerKey: e.fixed32.decode(d),
2456 }),
2457 },
2458 tc = e.frame(rc),
2459 ic = {
2460 preencode(d, c) {
2461 ;(e.fixed32.preencode(d, c.id),
2462 e.fixed32.preencode(d, c.invitationSeed),
2463 e.fixed32.preencode(d, c.mailbox),
2464 t.preencode(d, c.responseKeyPair),
2465 n.preencode(d, c.initiator),
2466 n.preencode(d, c.inviter),
2467 d.end++,
2468 c.identity && tc.preencode(d, c.identity),
2469 o >= 5 && c.buildType && Fp.preencode(d, c.buildType))
2470 },
2471 encode(d, c) {
2472 const r = (c.identity ? 1 : 0) | (o >= 5 && c.buildType ? 2 : 0)
2473 ;(e.fixed32.encode(d, c.id),
2474 e.fixed32.encode(d, c.invitationSeed),
2475 e.fixed32.encode(d, c.mailbox),
2476 t.encode(d, c.responseKeyPair),
2477 n.encode(d, c.initiator),
2478 n.encode(d, c.inviter),
2479 e.uint.encode(d, r),
2480 c.identity && tc.encode(d, c.identity),
2481 o >= 5 && c.buildType && Fp.encode(d, c.buildType))
2482 },
2483 decode(d) {
2484 const c = e.fixed32.decode(d),
2485 r = e.fixed32.decode(d),
2486 i = e.fixed32.decode(d),
2487 a = t.decode(d),
2488 s = n.decode(d),
2489 p = n.decode(d),
2490 u = e.uint.decode(d)
2491 return {
2492 id: c,
2493 invitationSeed: r,
2494 mailbox: i,
2495 responseKeyPair: a,
2496 initiator: s,
2497 inviter: p,
2498 identity: 1 & u ? tc.decode(d) : null,
2499 buildType: o >= 5 && 2 & u ? Fp.decode(d) : null,
2500 }
2501 },
2502 },
2503 ac = oe,
2504 sc = {
2505 preencode(d, o) {
2506 ;(ac.preencode(d, o.header), e.buffer.preencode(d, o.blindResponse))
2507 },
2508 encode(d, o) {
2509 ;(ac.encode(d, o.header), e.buffer.encode(d, o.blindResponse))
2510 },
2511 decode: (d) => ({ header: ac.decode(d), blindResponse: e.buffer.decode(d) }),
2512 },
2513 pc = oe,
2514 uc = e.frame(ic),
2515 lc = {
2516 preencode(e, d) {
2517 ;(pc.preencode(e, d.header), uc.preencode(e, d.invitation))
2518 },
2519 encode(e, d) {
2520 ;(pc.encode(e, d.header), uc.encode(e, d.invitation))
2521 },
2522 decode: (e) => ({ header: pc.decode(e), invitation: uc.decode(e) }),
2523 },
2524 fc = oe,
2525 mc = {
2526 preencode(d, o) {
2527 ;(fc.preencode(d, o.header), e.fixed32.preencode(d, o.id))
2528 },
2529 encode(d, o) {
2530 ;(fc.encode(d, o.header), e.fixed32.encode(d, o.id))
2531 },
2532 decode: (d) => ({ header: fc.decode(d), id: e.fixed32.decode(d) }),
2533 },
2534 yc = {
2535 preencode(d, o) {
2536 ;(e.fixed32.preencode(d, o.publicKey),
2537 e.fixed32.preencode(d, o.devicePublicKey),
2538 d.end++,
2539 o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey),
2540 o.deviceKeyPair && t.preencode(d, o.deviceKeyPair),
2541 e.buffer.preencode(d, o.deviceProof))
2542 },
2543 encode(d, o) {
2544 const n = (o.privateProfileKey ? 1 : 0) | (o.deviceKeyPair ? 2 : 0)
2545 ;(e.fixed32.encode(d, o.publicKey),
2546 e.fixed32.encode(d, o.devicePublicKey),
2547 e.uint.encode(d, n),
2548 o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey),
2549 o.deviceKeyPair && t.encode(d, o.deviceKeyPair),
2550 e.buffer.encode(d, o.deviceProof))
2551 },
2552 decode(d) {
2553 const o = e.fixed32.decode(d),
2554 n = e.fixed32.decode(d),
2555 c = e.uint.decode(d)
2556 return {
2557 publicKey: o,
2558 devicePublicKey: n,
2559 privateProfileKey: 1 & c ? e.fixed32.decode(d) : null,
2560 deviceKeyPair: 2 & c ? t.decode(d) : null,
2561 deviceProof: e.buffer.decode(d),
2562 }
2563 },
2564 },
2565 xc = {
2566 preencode(d, o) {
2567 ;(e.fixed32.preencode(d, o.publicKey),
2568 e.fixed32.preencode(d, o.writerKey),
2569 e.fixed32.preencode(d, o.devicePublicKey),
2570 d.end++,
2571 o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey))
2572 },
2573 encode(d, o) {
2574 const n = o.privateProfileKey ? 1 : 0
2575 ;(e.fixed32.encode(d, o.publicKey),
2576 e.fixed32.encode(d, o.writerKey),
2577 e.fixed32.encode(d, o.devicePublicKey),
2578 e.uint.encode(d, n),
2579 o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey))
2580 },
2581 decode: (d) => ({
2582 publicKey: e.fixed32.decode(d),
2583 writerKey: e.fixed32.decode(d),
2584 devicePublicKey: e.fixed32.decode(d),
2585 privateProfileKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
2586 }),
2587 },
2588 bc = {
2589 preencode(e, d) {
2590 e.end++
2591 },
2592 encode(d, n) {
2593 const c =
2594 (n.isActive ? 1 : 0) |
2595 (n.isFullyMuted ? 2 : 0) |
2596 (n.isMentionsOnlyMuted ? 4 : 0) |
2597 (n.isReadOnly ? 8 : 0) |
2598 (o >= 3 && n.isFavorite ? 16 : 0)
2599 e.uint.encode(d, c)
2600 },
2601 decode(d) {
2602 const n = e.uint.decode(d)
2603 return {
2604 isActive: !!(1 & n),
2605 isFullyMuted: !!(2 & n),
2606 isMentionsOnlyMuted: !!(4 & n),
2607 isReadOnly: !!(8 & n),
2608 isFavorite: o >= 3 && !!(16 & n),
2609 }
2610 },
2611 },
2612 vc = e.frame(bc),
2613 gc = e.frame(yc),
2614 kc = tc,
2615 hc = {
2616 preencode(d, o) {
2617 ;(e.fixed32.preencode(d, o.roomKey),
2618 e.buffer.preencode(d, o.encryptionKey),
2619 e.fixed32.preencode(d, o.mailbox),
2620 vc.preencode(d, o.status),
2621 e.uint.preencode(d, o.clock),
2622 d.end++,
2623 o.initiator && n.preencode(d, o.initiator),
2624 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2625 o.identitySwap && gc.preencode(d, o.identitySwap),
2626 o.identitySwapV2 && kc.preencode(d, o.identitySwapV2),
2627 o.contact && e.fixed32.preencode(d, o.contact))
2628 },
2629 encode(d, o) {
2630 const c =
2631 (o.initiator ? 1 : 0) |
2632 (o.fastForwardTo ? 2 : 0) |
2633 (o.identitySwap ? 4 : 0) |
2634 (o.identitySwapV2 ? 8 : 0) |
2635 (o.contact ? 16 : 0)
2636 ;(e.fixed32.encode(d, o.roomKey),
2637 e.buffer.encode(d, o.encryptionKey),
2638 e.fixed32.encode(d, o.mailbox),
2639 vc.encode(d, o.status),
2640 e.uint.encode(d, o.clock),
2641 e.uint.encode(d, c),
2642 o.initiator && n.encode(d, o.initiator),
2643 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2644 o.identitySwap && gc.encode(d, o.identitySwap),
2645 o.identitySwapV2 && kc.encode(d, o.identitySwapV2),
2646 o.contact && e.fixed32.encode(d, o.contact))
2647 },
2648 decode(d) {
2649 const o = e.fixed32.decode(d),
2650 c = e.buffer.decode(d),
2651 r = e.fixed32.decode(d),
2652 t = vc.decode(d),
2653 i = e.uint.decode(d),
2654 a = e.uint.decode(d)
2655 return {
2656 roomKey: o,
2657 encryptionKey: c,
2658 mailbox: r,
2659 status: t,
2660 clock: i,
2661 initiator: 1 & a ? n.decode(d) : null,
2662 fastForwardTo: 2 & a ? e.fixed32.decode(d) : null,
2663 identitySwap: 4 & a ? gc.decode(d) : null,
2664 identitySwapV2: 8 & a ? kc.decode(d) : null,
2665 contact: 16 & a ? e.fixed32.decode(d) : null,
2666 }
2667 },
2668 },
2669 Kc = oe,
2670 wc = {
2671 preencode(d, o) {
2672 ;(Kc.preencode(d, o.header),
2673 e.fixed32.preencode(d, o.roomKey),
2674 e.buffer.preencode(d, o.encryptionKey),
2675 e.fixed32.preencode(d, o.mailbox),
2676 d.end++,
2677 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2678 o.initiator && n.preencode(d, o.initiator),
2679 o.dm && e.fixed32.preencode(d, o.dm))
2680 },
2681 encode(d, o) {
2682 const c =
2683 (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0) | (o.dm ? 4 : 0) | (o.isReadOnly ? 8 : 0)
2684 ;(Kc.encode(d, o.header),
2685 e.fixed32.encode(d, o.roomKey),
2686 e.buffer.encode(d, o.encryptionKey),
2687 e.fixed32.encode(d, o.mailbox),
2688 e.uint.encode(d, c),
2689 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2690 o.initiator && n.encode(d, o.initiator),
2691 o.dm && e.fixed32.encode(d, o.dm))
2692 },
2693 decode(d) {
2694 const o = Kc.decode(d),
2695 c = e.fixed32.decode(d),
2696 r = e.buffer.decode(d),
2697 t = e.fixed32.decode(d),
2698 i = e.uint.decode(d)
2699 return {
2700 header: o,
2701 roomKey: c,
2702 encryptionKey: r,
2703 mailbox: t,
2704 fastForwardTo: 1 & i ? e.fixed32.decode(d) : null,
2705 initiator: 2 & i ? n.decode(d) : null,
2706 dm: 4 & i ? e.fixed32.decode(d) : null,
2707 isReadOnly: !!(8 & i),
2708 }
2709 },
2710 },
2711 Pc = oe,
2712 Rc = {
2713 preencode(d, o) {
2714 ;(Pc.preencode(d, o.header), e.fixed32.preencode(d, o.discoveryKey))
2715 },
2716 encode(d, o) {
2717 ;(Pc.encode(d, o.header), e.fixed32.encode(d, o.discoveryKey))
2718 },
2719 decode: (d) => ({ header: Pc.decode(d), discoveryKey: e.fixed32.decode(d) }),
2720 },
2721 Tc = oe,
2722 Ac = vc,
2723 qc = {
2724 preencode(d, o) {
2725 ;(Tc.preencode(d, o.header),
2726 e.fixed32.preencode(d, o.roomKey),
2727 e.uint.preencode(d, o.key),
2728 Ac.preencode(d, o.status))
2729 },
2730 encode(d, o) {
2731 ;(Tc.encode(d, o.header),
2732 e.fixed32.encode(d, o.roomKey),
2733 e.uint.encode(d, o.key),
2734 Ac.encode(d, o.status))
2735 },
2736 decode: (d) => ({
2737 header: Tc.decode(d),
2738 roomKey: e.fixed32.decode(d),
2739 key: e.uint.decode(d),
2740 status: Ac.decode(d),
2741 }),
2742 },
2743 Mc = {
2744 preencode(e, d) {
2745 e.end++
2746 },
2747 encode(d, o) {
2748 const n = o.isBlocked ? 1 : 0
2749 e.uint.encode(d, n)
2750 },
2751 decode: (d) => ({ isBlocked: !!(1 & e.uint.decode(d)) }),
2752 },
2753 Cc = {
2754 preencode(d, o) {
2755 ;(e.fixed32.preencode(d, o.memberKey),
2756 e.uint.preencode(d, o.clock),
2757 $p.preencode(d, o.status),
2758 d.end++,
2759 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2760 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2761 },
2762 encode(d, o) {
2763 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2764 ;(e.fixed32.encode(d, o.memberKey),
2765 e.uint.encode(d, o.clock),
2766 $p.encode(d, o.status),
2767 e.uint.encode(d, n),
2768 o.mailbox && e.fixed32.encode(d, o.mailbox),
2769 o.roomKey && e.fixed32.encode(d, o.roomKey))
2770 },
2771 decode(d) {
2772 const o = e.fixed32.decode(d),
2773 n = e.uint.decode(d),
2774 c = $p.decode(d),
2775 r = e.uint.decode(d)
2776 return {
2777 memberKey: o,
2778 clock: n,
2779 status: c,
2780 mailbox: 1 & r ? e.fixed32.decode(d) : null,
2781 roomKey: 2 & r ? e.fixed32.decode(d) : null,
2782 }
2783 },
2784 },
2785 Dc = oe,
2786 Ic = e.frame(Xn),
2787 Sc = {
2788 preencode(e, d) {
2789 ;(Dc.preencode(e, d.header), Ic.preencode(e, d.contact))
2790 },
2791 encode(e, d) {
2792 ;(Dc.encode(e, d.header), Ic.encode(e, d.contact))
2793 },
2794 decode: (e) => ({ header: Dc.decode(e), contact: Ic.decode(e) }),
2795 },
2796 Fc = oe,
2797 Lc = {
2798 preencode(d, o) {
2799 ;(Fc.preencode(d, o.header),
2800 e.fixed32.preencode(d, o.memberKey),
2801 e.uint.preencode(d, o.key),
2802 _p.preencode(d, o.status))
2803 },
2804 encode(d, o) {
2805 ;(Fc.encode(d, o.header),
2806 e.fixed32.encode(d, o.memberKey),
2807 e.uint.encode(d, o.key),
2808 _p.encode(d, o.status))
2809 },
2810 decode: (d) => ({
2811 header: Fc.decode(d),
2812 memberKey: e.fixed32.decode(d),
2813 key: e.uint.decode(d),
2814 status: _p.decode(d),
2815 }),
2816 },
2817 jc = oe,
2818 Ec = {
2819 preencode(d, o) {
2820 ;(jc.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
2821 },
2822 encode(d, o) {
2823 ;(jc.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
2824 },
2825 decode: (d) => ({ header: jc.decode(d), memberKey: e.fixed32.decode(d) }),
2826 },
2827 Bc = oe,
2828 Nc = {
2829 preencode(d, o) {
2830 ;(Bc.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
2831 },
2832 encode(d, o) {
2833 ;(Bc.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
2834 },
2835 decode: (d) => ({ header: Bc.decode(d), memberKey: e.fixed32.decode(d) }),
2836 },
2837 Oc = {
2838 preencode(e, d) {
2839 e.end++
2840 },
2841 encode(d, o) {
2842 const n =
2843 (o.isPending ? 1 : 0) |
2844 (o.isAccepted ? 2 : 0) |
2845 (o.isRejected ? 4 : 0) |
2846 (o.isDiscarded ? 8 : 0) |
2847 (o.isSeen ? 16 : 0)
2848 e.uint.encode(d, n)
2849 },
2850 decode(d) {
2851 const o = e.uint.decode(d)
2852 return {
2853 isPending: !!(1 & o),
2854 isAccepted: !!(2 & o),
2855 isRejected: !!(4 & o),
2856 isDiscarded: !!(8 & o),
2857 isSeen: !!(16 & o),
2858 }
2859 },
2860 },
2861 Vc = Pe,
2862 Uc = e.frame(i),
2863 Jc = {
2864 preencode(d, o) {
2865 ;(Vc.preencode(d, o.sender),
2866 Uc.preencode(d, o.keys),
2867 e.fixed32.preencode(d, o.mailbox),
2868 d.end++,
2869 o.message && e.string.preencode(d, o.message))
2870 },
2871 encode(d, o) {
2872 const n = o.message ? 1 : 0
2873 ;(Vc.encode(d, o.sender),
2874 Uc.encode(d, o.keys),
2875 e.fixed32.encode(d, o.mailbox),
2876 e.uint.encode(d, n),
2877 o.message && e.string.encode(d, o.message))
2878 },
2879 decode: (d) => ({
2880 sender: Vc.decode(d),
2881 keys: Uc.decode(d),
2882 mailbox: e.fixed32.decode(d),
2883 message: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2884 }),
2885 },
2886 zc = e.frame(Jc),
2887 Wc = {
2888 preencode(e, d) {
2889 ;(zc.preencode(e, d.body), ie.preencode(e, d.attestation))
2890 },
2891 encode(e, d) {
2892 ;(zc.encode(e, d.body), ie.encode(e, d.attestation))
2893 },
2894 decode: (e) => ({ body: zc.decode(e), attestation: ie.decode(e) }),
2895 },
2896 Hc = me,
2897 Gc = e.frame(Oc),
2898 Qc = Uc,
2899 Xc = {
2900 preencode(d, o) {
2901 ;(e.fixed32.preencode(d, o.memberKey),
2902 e.uint.preencode(d, o.clock),
2903 Hc.preencode(d, o.sender),
2904 Gc.preencode(d, o.status),
2905 Qc.preencode(d, o.keys),
2906 e.fixed32.preencode(d, o.mailbox),
2907 d.end++,
2908 o.message && e.string.preencode(d, o.message),
2909 o.sentAt && e.uint.preencode(d, o.sentAt))
2910 },
2911 encode(d, o) {
2912 const n = (o.message ? 1 : 0) | (o.sentAt ? 2 : 0)
2913 ;(e.fixed32.encode(d, o.memberKey),
2914 e.uint.encode(d, o.clock),
2915 Hc.encode(d, o.sender),
2916 Gc.encode(d, o.status),
2917 Qc.encode(d, o.keys),
2918 e.fixed32.encode(d, o.mailbox),
2919 e.uint.encode(d, n),
2920 o.message && e.string.encode(d, o.message),
2921 o.sentAt && e.uint.encode(d, o.sentAt))
2922 },
2923 decode(d) {
2924 const o = e.fixed32.decode(d),
2925 n = e.uint.decode(d),
2926 c = Hc.decode(d),
2927 r = Gc.decode(d),
2928 t = Qc.decode(d),
2929 i = e.fixed32.decode(d),
2930 a = e.uint.decode(d)
2931 return {
2932 memberKey: o,
2933 clock: n,
2934 sender: c,
2935 status: r,
2936 keys: t,
2937 mailbox: i,
2938 message: 1 & a ? e.string.decode(d) : null,
2939 sentAt: 2 & a ? e.uint.decode(d) : 0,
2940 }
2941 },
2942 },
2943 Yc = oe,
2944 Zc = {
2945 preencode(d, o) {
2946 ;(Yc.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
2947 },
2948 encode(d, o) {
2949 ;(Yc.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
2950 },
2951 decode: (d) => ({ header: Yc.decode(d), blindRequest: e.buffer.decode(d) }),
2952 },
2953 $c = oe,
2954 _c = Gc,
2955 er = {
2956 preencode(d, o) {
2957 ;($c.preencode(d, o.header),
2958 e.fixed32.preencode(d, o.memberKey),
2959 e.uint.preencode(d, o.key),
2960 _c.preencode(d, o.status),
2961 d.end++,
2962 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2963 },
2964 encode(d, o) {
2965 const n = o.roomKey ? 1 : 0
2966 ;($c.encode(d, o.header),
2967 e.fixed32.encode(d, o.memberKey),
2968 e.uint.encode(d, o.key),
2969 _c.encode(d, o.status),
2970 e.uint.encode(d, n),
2971 o.roomKey && e.fixed32.encode(d, o.roomKey))
2972 },
2973 decode: (d) => ({
2974 header: $c.decode(d),
2975 memberKey: e.fixed32.decode(d),
2976 key: e.uint.decode(d),
2977 status: _c.decode(d),
2978 roomKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
2979 }),
2980 },
2981 dr = {
2982 preencode(d, o) {
2983 ;(e.uint.preencode(d, o.timestamp),
2984 e.fixed32.preencode(d, o.key),
2985 e.fixed32.preencode(d, o.mailbox))
2986 },
2987 encode(d, o) {
2988 ;(e.uint.encode(d, o.timestamp), e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.mailbox))
2989 },
2990 decode: (d) => ({
2991 version: e.uint.decode(d),
2992 timestamp: e.uint.decode(d),
2993 key: e.fixed32.decode(d),
2994 mailbox: e.fixed32.decode(d),
2995 }),
2996 },
2997 or = {
2998 preencode(d, o) {
2999 switch ((e.uint.preencode(d, o.version), o.version)) {
3000 case 0:
3001 case 1:
3002 dr.preencode(d, o)
3003 break
3004 default:
3005 throw new Error("Unsupported version")
3006 }
3007 },
3008 encode(d, o) {
3009 switch ((e.uint.encode(d, o.version), o.version)) {
3010 case 0:
3011 case 1:
3012 dr.encode(d, o)
3013 break
3014 default:
3015 throw new Error("Unsupported version")
3016 }
3017 },
3018 decode(d) {
3019 const o = d.start,
3020 n = e.uint.decode(d)
3021 switch (((d.start = o), n)) {
3022 case 0:
3023 case 1:
3024 return dr.decode(d)
3025 default:
3026 throw new Error("Unsupported version")
3027 }
3028 },
3029 },
3030 nr = {
3031 preencode(d, o) {
3032 ;(e.fixed32.preencode(d, o.deviceKey), e.fixed32.preencode(d, o.key))
3033 },
3034 encode(d, o) {
3035 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.key))
3036 },
3037 decode: (d) => ({ deviceKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
3038 },
3039 cr = oe,
3040 rr = {
3041 preencode(d, o) {
3042 ;(cr.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3043 },
3044 encode(d, o) {
3045 ;(cr.encode(d, o.header), e.fixed32.encode(d, o.key))
3046 },
3047 decode: (d) => ({ header: cr.decode(d), key: e.fixed32.decode(d) }),
3048 },
3049 tr = oe,
3050 ir = {
3051 preencode(d, o) {
3052 ;(tr.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3053 },
3054 encode(d, o) {
3055 ;(tr.encode(d, o.header), e.fixed32.encode(d, o.key))
3056 },
3057 decode: (d) => ({ header: tr.decode(d), key: e.fixed32.decode(d) }),
3058 },
3059 ar = {
3060 preencode(e, d) {
3061 e.end++
3062 },
3063 encode(d, o) {
3064 const n = o.disableReadReceipts ? 1 : 0
3065 e.uint.encode(d, n)
3066 },
3067 decode: (d) => ({ disableReadReceipts: !!(1 & e.uint.decode(d)) }),
3068 },
3069 sr = { disableReadReceipts: "disableReadReceipts" },
3070 pr = {
3071 preencode(e, d) {
3072 e.end++
3073 },
3074 encode(d, o) {
3075 if ("disableReadReceipts" !== o) throw new Error("Unknown enum")
3076 e.uint.encode(d, 1)
3077 },
3078 decode: (d) => (1 === e.uint.decode(d) ? "disableReadReceipts" : null),
3079 },
3080 ur = oe,
3081 lr = e.frame(ar),
3082 fr = {
3083 preencode(e, d) {
3084 ;(ur.preencode(e, d.header), pr.preencode(e, d.key), lr.preencode(e, d.settings))
3085 },
3086 encode(e, d) {
3087 ;(ur.encode(e, d.header), pr.encode(e, d.key), lr.encode(e, d.settings))
3088 },
3089 decode: (e) => ({ header: ur.decode(e), key: pr.decode(e), settings: lr.decode(e) }),
3090 },
3091 mr = {
3092 preencode(d, o) {
3093 ;(e.fixed32.preencode(d, o.discoveryPublicKey),
3094 e.uint.preencode(d, o.timestamp),
3095 d.end++,
3096 o.lastSynced && e.uint.preencode(d, o.lastSynced))
3097 },
3098 encode(d, o) {
3099 const n = (o.lastSynced ? 1 : 0) | (o.dirty ? 2 : 0)
3100 ;(e.fixed32.encode(d, o.discoveryPublicKey),
3101 e.uint.encode(d, o.timestamp),
3102 e.uint.encode(d, n),
3103 o.lastSynced && e.uint.encode(d, o.lastSynced))
3104 },
3105 decode(d) {
3106 const o = e.fixed32.decode(d),
3107 n = e.uint.decode(d),
3108 c = e.uint.decode(d)
3109 return {
3110 discoveryPublicKey: o,
3111 timestamp: n,
3112 lastSynced: 1 & c ? e.uint.decode(d) : 0,
3113 dirty: !!(2 & c),
3114 }
3115 },
3116 },
3117 yr = {
3118 preencode(d, o) {
3119 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.activeRooms))
3120 },
3121 encode(d, o) {
3122 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.activeRooms))
3123 },
3124 decode: (d) => ({ rooms: e.uint.decode(d), activeRooms: e.uint.decode(d) }),
3125 },
3126 xr = I,
3127 br = _,
3128 vr = {
3129 preencode(e, d) {
3130 ;(e.end++, d.blockedMembers && br.preencode(e, d.blockedMembers))
3131 },
3132 encode(d, o) {
3133 const n = o.blockedMembers ? 1 : 0
3134 ;(e.uint.encode(d, n), o.blockedMembers && br.encode(d, o.blockedMembers))
3135 },
3136 decode: (d) => ({ blockedMembers: 1 & e.uint.decode(d) ? br.decode(d) : null }),
3137 },
3138 gr = e.frame(X),
3139 kr = e.frame(vr),
3140 hr = {
3141 preencode(d, o) {
3142 ;(e.buffer.preencode(d, o.encryptionKey),
3143 e.fixed32.preencode(d, o.seed),
3144 gr.preencode(d, o.capabilities),
3145 n.preencode(d, o.initiator),
3146 e.fixed32.preencode(d, o.fastForwardTo),
3147 d.end++,
3148 o.privateProfile && kr.preencode(d, o.privateProfile))
3149 },
3150 encode(d, o) {
3151 const c = o.privateProfile ? 1 : 0
3152 ;(e.buffer.encode(d, o.encryptionKey),
3153 e.fixed32.encode(d, o.seed),
3154 gr.encode(d, o.capabilities),
3155 n.encode(d, o.initiator),
3156 e.fixed32.encode(d, o.fastForwardTo),
3157 e.uint.encode(d, c),
3158 o.privateProfile && kr.encode(d, o.privateProfile))
3159 },
3160 decode: (d) => ({
3161 encryptionKey: e.buffer.decode(d),
3162 seed: e.fixed32.decode(d),
3163 capabilities: gr.decode(d),
3164 initiator: n.decode(d),
3165 fastForwardTo: e.fixed32.decode(d),
3166 privateProfile: 1 & e.uint.decode(d) ? kr.decode(d) : null,
3167 }),
3168 },
3169 Kr = {
3170 preencode(d, o) {
3171 ;(d.end++, o.count && e.uint.preencode(d, o.count))
3172 },
3173 encode(d, o) {
3174 const n = o.count ? 1 : 0
3175 ;(e.uint.encode(d, n), o.count && e.uint.encode(d, o.count))
3176 },
3177 decode: (d) => ({ count: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0 }),
3178 },
3179 wr = e.frame(hr),
3180 Pr = {
3181 preencode(d, o) {
3182 ;(e.fixed32.preencode(d, o.roomKey),
3183 e.uint.preencode(d, o.priority),
3184 d.end++,
3185 o.v3 && wr.preencode(d, o.v3),
3186 o.timestamp && e.uint.preencode(d, o.timestamp))
3187 },
3188 encode(d, o) {
3189 const n = (o.v3 ? 1 : 0) | (o.errored ? 2 : 0) | (o.timestamp ? 4 : 0)
3190 ;(e.fixed32.encode(d, o.roomKey),
3191 e.uint.encode(d, o.priority),
3192 e.uint.encode(d, n),
3193 o.v3 && wr.encode(d, o.v3),
3194 o.timestamp && e.uint.encode(d, o.timestamp))
3195 },
3196 decode(d) {
3197 const o = e.fixed32.decode(d),
3198 n = e.uint.decode(d),
3199 c = e.uint.decode(d)
3200 return {
3201 roomKey: o,
3202 priority: n,
3203 v3: 1 & c ? wr.decode(d) : null,
3204 errored: !!(2 & c),
3205 timestamp: 4 & c ? e.uint.decode(d) : 0,
3206 }
3207 },
3208 },
3209 Rr = {
3210 preencode(e, d) {
3211 e.end++
3212 },
3213 encode(d, o) {
3214 const n = o.isConfirmed ? 1 : 0
3215 e.uint.encode(d, n)
3216 },
3217 decode: (d) => ({ isConfirmed: !!(1 & e.uint.decode(d)) }),
3218 },
3219 Tr = {
3220 preencode(d, o) {
3221 e.fixed32.preencode(d, o.privateProfileKey)
3222 },
3223 encode(d, o) {
3224 e.fixed32.encode(d, o.privateProfileKey)
3225 },
3226 decode: (d) => ({ privateProfileKey: e.fixed32.decode(d) }),
3227 },
3228 Ar = e.frame(Rr),
3229 qr = gc,
3230 Mr = e.frame(xc),
3231 Cr = {
3232 preencode(d, o) {
3233 ;(e.fixed32.preencode(d, o.publicKey),
3234 e.fixed32.preencode(d, o.privateProfileKey),
3235 t.preencode(d, o.deviceKeyPair),
3236 e.buffer.preencode(d, o.deviceProof),
3237 Ar.preencode(d, o.status),
3238 d.end++,
3239 o.entropy && e.buffer.preencode(d, o.entropy),
3240 o.swap && qr.preencode(d, o.swap),
3241 o.swapV2 && Mr.preencode(d, o.swapV2))
3242 },
3243 encode(d, o) {
3244 const n = (o.entropy ? 1 : 0) | (o.swap ? 2 : 0) | (o.swapV2 ? 4 : 0)
3245 ;(e.fixed32.encode(d, o.publicKey),
3246 e.fixed32.encode(d, o.privateProfileKey),
3247 t.encode(d, o.deviceKeyPair),
3248 e.buffer.encode(d, o.deviceProof),
3249 Ar.encode(d, o.status),
3250 e.uint.encode(d, n),
3251 o.entropy && e.buffer.encode(d, o.entropy),
3252 o.swap && qr.encode(d, o.swap),
3253 o.swapV2 && Mr.encode(d, o.swapV2))
3254 },
3255 decode(d) {
3256 const o = e.fixed32.decode(d),
3257 n = e.fixed32.decode(d),
3258 c = t.decode(d),
3259 r = e.buffer.decode(d),
3260 i = Ar.decode(d),
3261 a = e.uint.decode(d)
3262 return {
3263 publicKey: o,
3264 privateProfileKey: n,
3265 deviceKeyPair: c,
3266 deviceProof: r,
3267 status: i,
3268 entropy: 1 & a ? e.buffer.decode(d) : null,
3269 swap: 2 & a ? qr.decode(d) : null,
3270 swapV2: 4 & a ? Mr.decode(d) : null,
3271 }
3272 },
3273 },
3274 Dr = {
3275 RestoreIdentity: 1,
3276 CreateRoom: 2,
3277 LeaveRoom: 3,
3278 ClearRoom: 4,
3279 JoinRoomInvitation: 5,
3280 JoinRoomKeys: 6,
3281 JoinRoomResponse: 7,
3282 SendContactRequest: 8,
3283 TestFastTask: 9,
3284 TestSlowTask: 10,
3285 TestErrorTask: 11,
3286 },
3287 Ir = {
3288 preencode(e, d) {
3289 e.end++
3290 },
3291 encode(d, o) {
3292 if (o > 11) throw new Error("Unknown enum")
3293 e.uint.encode(d, o)
3294 },
3295 decode: (d) => e.uint.decode(d),
3296 },
3297 Sr = {
3298 preencode(d, o) {
3299 ;(e.fixed32.preencode(d, o.roomKey),
3300 e.buffer.preencode(d, o.encryptionKey),
3301 d.end++,
3302 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
3303 o.initiator && n.preencode(d, o.initiator))
3304 },
3305 encode(d, o) {
3306 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0)
3307 ;(e.fixed32.encode(d, o.roomKey),
3308 e.buffer.encode(d, o.encryptionKey),
3309 e.uint.encode(d, c),
3310 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3311 o.initiator && n.encode(d, o.initiator))
3312 },
3313 decode(d) {
3314 const o = e.fixed32.decode(d),
3315 c = e.buffer.decode(d),
3316 r = e.uint.decode(d)
3317 return {
3318 roomKey: o,
3319 encryptionKey: c,
3320 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3321 initiator: 2 & r ? n.decode(d) : null,
3322 }
3323 },
3324 },
3325 Fr = uc,
3326 Lr = {
3327 preencode(e, d) {
3328 Fr.preencode(e, d.invitation)
3329 },
3330 encode(e, d) {
3331 Fr.encode(e, d.invitation)
3332 },
3333 decode: (e) => ({ invitation: Fr.decode(e) }),
3334 },
3335 jr = {
3336 preencode(d, o) {
3337 ;(e.fixed32.preencode(d, o.mailbox),
3338 t.preencode(d, o.keyPair),
3339 e.buffer.preencode(d, o.response))
3340 },
3341 encode(d, o) {
3342 ;(e.fixed32.encode(d, o.mailbox), t.encode(d, o.keyPair), e.buffer.encode(d, o.response))
3343 },
3344 decode: (d) => ({
3345 mailbox: e.fixed32.decode(d),
3346 keyPair: t.decode(d),
3347 response: e.buffer.decode(d),
3348 }),
3349 },
3350 Er = de,
3351 Br = {
3352 preencode(d, o) {
3353 ;(e.fixed32.preencode(d, o.roomKey),
3354 e.buffer.preencode(d, o.encryptionKey),
3355 d.end++,
3356 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
3357 o.initiator && n.preencode(d, o.initiator),
3358 o.mailbox && e.fixed32.preencode(d, o.mailbox))
3359 },
3360 encode(d, o) {
3361 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0) | (o.mailbox ? 4 : 0)
3362 ;(e.fixed32.encode(d, o.roomKey),
3363 e.buffer.encode(d, o.encryptionKey),
3364 e.uint.encode(d, c),
3365 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3366 o.initiator && n.encode(d, o.initiator),
3367 o.mailbox && e.fixed32.encode(d, o.mailbox))
3368 },
3369 decode(d) {
3370 const o = e.fixed32.decode(d),
3371 c = e.buffer.decode(d),
3372 r = e.uint.decode(d)
3373 return {
3374 roomKey: o,
3375 encryptionKey: c,
3376 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3377 initiator: 2 & r ? n.decode(d) : null,
3378 mailbox: 4 & r ? e.fixed32.decode(d) : null,
3379 }
3380 },
3381 },
3382 Nr = e.frame(Br),
3383 Or = {
3384 preencode(e, d) {
3385 Nr.preencode(e, d.keys)
3386 },
3387 encode(e, d) {
3388 Nr.encode(e, d.keys)
3389 },
3390 decode: (e) => ({ keys: Nr.decode(e) }),
3391 },
3392 Vr = e.frame(Kn),
3393 Ur = {
3394 preencode(d, o) {
3395 ;(e.fixed32.preencode(d, o.roomKey),
3396 e.buffer.preencode(d, o.encryptionKey),
3397 d.end++,
3398 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
3399 o.initiator && n.preencode(d, o.initiator),
3400 o.mailbox && e.fixed32.preencode(d, o.mailbox),
3401 o.keyPair && t.preencode(d, o.keyPair),
3402 o.genesis && Vr.preencode(d, o.genesis))
3403 },
3404 encode(d, o) {
3405 const c =
3406 (o.fastForwardTo ? 1 : 0) |
3407 (o.initiator ? 2 : 0) |
3408 (o.mailbox ? 4 : 0) |
3409 (o.keyPair ? 8 : 0) |
3410 (o.genesis ? 16 : 0) |
3411 (o.isPrivateProfile ? 32 : 0)
3412 ;(e.fixed32.encode(d, o.roomKey),
3413 e.buffer.encode(d, o.encryptionKey),
3414 e.uint.encode(d, c),
3415 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3416 o.initiator && n.encode(d, o.initiator),
3417 o.mailbox && e.fixed32.encode(d, o.mailbox),
3418 o.keyPair && t.encode(d, o.keyPair),
3419 o.genesis && Vr.encode(d, o.genesis))
3420 },
3421 decode(d) {
3422 const o = e.fixed32.decode(d),
3423 c = e.buffer.decode(d),
3424 r = e.uint.decode(d)
3425 return {
3426 roomKey: o,
3427 encryptionKey: c,
3428 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3429 initiator: 2 & r ? n.decode(d) : null,
3430 mailbox: 4 & r ? e.fixed32.decode(d) : null,
3431 keyPair: 8 & r ? t.decode(d) : null,
3432 genesis: 16 & r ? Vr.decode(d) : null,
3433 isPrivateProfile: !!(32 & r),
3434 }
3435 },
3436 },
3437 Jr = {
3438 preencode(d, o) {
3439 ;(e.fixed32.preencode(d, o.roomKey), d.end++)
3440 },
3441 encode(d, o) {
3442 const n = o.isGossiped ? 1 : 0
3443 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, n))
3444 },
3445 decode: (d) => ({ roomKey: e.fixed32.decode(d), isGossiped: !!(1 & e.uint.decode(d)) }),
3446 },
3447 zr = {
3448 preencode(d, o) {
3449 e.fixed32.preencode(d, o.roomKey)
3450 },
3451 encode(d, o) {
3452 e.fixed32.encode(d, o.roomKey)
3453 },
3454 decode: (d) => ({ roomKey: e.fixed32.decode(d) }),
3455 },
3456 Wr = {
3457 preencode(d, o) {
3458 ;(e.string.preencode(d, o.mnemonic),
3459 d.end++,
3460 o.profileDiscoveryTimeout && e.uint.preencode(d, o.profileDiscoveryTimeout))
3461 },
3462 encode(d, o) {
3463 const n = (o.profileDiscoveryTimeout ? 1 : 0) | (o.recover ? 2 : 0)
3464 ;(e.string.encode(d, o.mnemonic),
3465 e.uint.encode(d, n),
3466 o.profileDiscoveryTimeout && e.uint.encode(d, o.profileDiscoveryTimeout))
3467 },
3468 decode(d) {
3469 const o = e.string.decode(d),
3470 n = e.uint.decode(d)
3471 return {
3472 mnemonic: o,
3473 profileDiscoveryTimeout: 1 & n ? e.uint.decode(d) : 0,
3474 recover: !!(2 & n),
3475 }
3476 },
3477 },
3478 Hr = e.frame(ve),
3479 Gr = {
3480 preencode(d, o) {
3481 ;(e.fixed32.preencode(d, o.roomKey),
3482 e.fixed32.preencode(d, o.memberKey),
3483 d.end++,
3484 o.message && e.string.preencode(d, o.message),
3485 o.contactInfo && Hr.preencode(d, o.contactInfo))
3486 },
3487 encode(d, o) {
3488 const n = (o.message ? 1 : 0) | (o.contactInfo ? 2 : 0)
3489 ;(e.fixed32.encode(d, o.roomKey),
3490 e.fixed32.encode(d, o.memberKey),
3491 e.uint.encode(d, n),
3492 o.message && e.string.encode(d, o.message),
3493 o.contactInfo && Hr.encode(d, o.contactInfo))
3494 },
3495 decode(d) {
3496 const o = e.fixed32.decode(d),
3497 n = e.fixed32.decode(d),
3498 c = e.uint.decode(d)
3499 return {
3500 roomKey: o,
3501 memberKey: n,
3502 message: 1 & c ? e.string.decode(d) : null,
3503 contactInfo: 2 & c ? Hr.decode(d) : null,
3504 }
3505 },
3506 },
3507 Qr = {
3508 preencode(d, o) {
3509 ;(e.fixed32.preencode(d, o.key), d.end++)
3510 },
3511 encode(d, o) {
3512 const n = o.isPrivateProfile ? 1 : 0
3513 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, n))
3514 },
3515 decode: (d) => ({ key: e.fixed32.decode(d), isPrivateProfile: !!(1 & e.uint.decode(d)) }),
3516 },
3517 Xr = e.frame(Wr),
3518 Yr = e.frame(Ur),
3519 Zr = e.frame(Jr),
3520 $r = e.frame(zr),
3521 _r = e.frame(Lr),
3522 et = e.frame(Or),
3523 dt = e.frame(jr),
3524 ot = e.frame(Gr),
3525 nt = e.frame(Qr),
3526 ct = {
3527 preencode(d, o) {
3528 const n =
3529 (o.restoreIdentity ? 1 : 0) |
3530 (o.createRoom ? 2 : 0) |
3531 (o.leaveRoom ? 4 : 0) |
3532 (o.clearRoom ? 8 : 0) |
3533 (o.joinRoomInvitation ? 16 : 0) |
3534 (o.joinRoomKeys ? 32 : 0) |
3535 (o.joinRoomResponse ? 64 : 0) |
3536 (o.sendContactRequest ? 128 : 0) |
3537 (o.migrateV2Room ? 256 : 0)
3538 ;(e.fixed32.preencode(d, o.discoveryKey),
3539 e.uint.preencode(d, o.priority),
3540 e.uint.preencode(d, o.timestamp),
3541 e.uint.preencode(d, o.type),
3542 e.uint.preencode(d, n),
3543 o.restoreIdentity && Xr.preencode(d, o.restoreIdentity),
3544 o.createRoom && Yr.preencode(d, o.createRoom),
3545 o.leaveRoom && Zr.preencode(d, o.leaveRoom),
3546 o.clearRoom && $r.preencode(d, o.clearRoom),
3547 o.joinRoomInvitation && _r.preencode(d, o.joinRoomInvitation),
3548 o.joinRoomKeys && et.preencode(d, o.joinRoomKeys),
3549 o.joinRoomResponse && dt.preencode(d, o.joinRoomResponse),
3550 o.sendContactRequest && ot.preencode(d, o.sendContactRequest),
3551 o.migrateV2Room && nt.preencode(d, o.migrateV2Room))
3552 },
3553 encode(d, o) {
3554 const n =
3555 (o.restoreIdentity ? 1 : 0) |
3556 (o.createRoom ? 2 : 0) |
3557 (o.leaveRoom ? 4 : 0) |
3558 (o.clearRoom ? 8 : 0) |
3559 (o.joinRoomInvitation ? 16 : 0) |
3560 (o.joinRoomKeys ? 32 : 0) |
3561 (o.joinRoomResponse ? 64 : 0) |
3562 (o.sendContactRequest ? 128 : 0) |
3563 (o.migrateV2Room ? 256 : 0)
3564 ;(e.fixed32.encode(d, o.discoveryKey),
3565 e.uint.encode(d, o.priority),
3566 e.uint.encode(d, o.timestamp),
3567 e.uint.encode(d, o.type),
3568 e.uint.encode(d, n),
3569 o.restoreIdentity && Xr.encode(d, o.restoreIdentity),
3570 o.createRoom && Yr.encode(d, o.createRoom),
3571 o.leaveRoom && Zr.encode(d, o.leaveRoom),
3572 o.clearRoom && $r.encode(d, o.clearRoom),
3573 o.joinRoomInvitation && _r.encode(d, o.joinRoomInvitation),
3574 o.joinRoomKeys && et.encode(d, o.joinRoomKeys),
3575 o.joinRoomResponse && dt.encode(d, o.joinRoomResponse),
3576 o.sendContactRequest && ot.encode(d, o.sendContactRequest),
3577 o.migrateV2Room && nt.encode(d, o.migrateV2Room))
3578 },
3579 decode(d) {
3580 const o = e.fixed32.decode(d),
3581 n = e.uint.decode(d),
3582 c = e.uint.decode(d),
3583 r = e.uint.decode(d),
3584 t = e.uint.decode(d)
3585 return {
3586 discoveryKey: o,
3587 priority: n,
3588 timestamp: c,
3589 type: r,
3590 restoreIdentity: 1 & t ? Xr.decode(d) : null,
3591 createRoom: 2 & t ? Yr.decode(d) : null,
3592 leaveRoom: 4 & t ? Zr.decode(d) : null,
3593 clearRoom: 8 & t ? $r.decode(d) : null,
3594 joinRoomInvitation: 16 & t ? _r.decode(d) : null,
3595 joinRoomKeys: 32 & t ? et.decode(d) : null,
3596 joinRoomResponse: 64 & t ? dt.decode(d) : null,
3597 sendContactRequest: 128 & t ? ot.decode(d) : null,
3598 migrateV2Room: 256 & t ? nt.decode(d) : null,
3599 }
3600 },
3601 },
3602 rt = Je,
3603 tt = {
3604 preencode(d, o) {
3605 ;(e.buffer.preencode(d, o.seed), rt.preencode(d, o.invitation))
3606 },
3607 encode(d, o) {
3608 ;(e.buffer.encode(d, o.seed), rt.encode(d, o.invitation))
3609 },
3610 decode: (d) => ({ seed: e.buffer.decode(d), invitation: rt.decode(d) }),
3611 },
3612 it = {
3613 preencode(e, d) {
3614 e.end++
3615 },
3616 encode(d, o) {
3617 const n =
3618 (o.isWritable ? 1 : 0) |
3619 (o.isReadable ? 2 : 0) |
3620 (o.isPrivateProfile ? 4 : 0) |
3621 (o.isRemoved ? 8 : 0)
3622 e.uint.encode(d, n)
3623 },
3624 decode(d) {
3625 const o = e.uint.decode(d)
3626 return {
3627 isWritable: !!(1 & o),
3628 isReadable: !!(2 & o),
3629 isPrivateProfile: !!(4 & o),
3630 isRemoved: !!(8 & o),
3631 }
3632 },
3633 },
3634 at = {
3635 preencode(d, o) {
3636 ;(e.uint.preencode(d, o.creation),
3637 e.uint.preencode(d, o.latestSync),
3638 e.uint.preencode(d, o.latestChatMessage))
3639 },
3640 encode(d, o) {
3641 ;(e.uint.encode(d, o.creation),
3642 e.uint.encode(d, o.latestSync),
3643 e.uint.encode(d, o.latestChatMessage))
3644 },
3645 decode: (d) => ({
3646 creation: e.uint.decode(d),
3647 latestSync: e.uint.decode(d),
3648 latestChatMessage: e.uint.decode(d),
3649 }),
3650 },
3651 st = xn,
3652 pt = Mo,
3653 ut = e.frame(at),
3654 lt = gr,
3655 ft = e.frame(it),
3656 mt = e.frame(ue),
3657 yt = e.frame(wd),
3658 xt = sn,
3659 bt = gn,
3660 vt = e.frame(Bo),
3661 gt = _,
3662 kt = e.array(e.frame(Gn)),
3663 ht = e.frame(kd),
3664 Kt = vc,
3665 wt = {
3666 preencode(d, n) {
3667 const c =
3668 (n.selfDevice ? 1 : 0) |
3669 (n.selfMember ? 2 : 0) |
3670 (n.config ? 4 : 0) |
3671 (n.identity ? 8 : 0) |
3672 (n.lastMessage ? 16 : 0) |
3673 (n.dm ? 32 : 0) |
3674 (n.readLengths ? 64 : 0) |
3675 (n.lastMember ? 128 : 0) |
3676 (n.version ? 256 : 0) |
3677 (o >= 3 && n.preferences ? 512 : 0) |
3678 (o >= 4 && n.activeCall ? 1024 : 0)
3679 ;(e.fixed32.preencode(d, n.roomKey),
3680 e.fixed32.preencode(d, n.discoveryKey),
3681 e.buffer.preencode(d, n.encryptionKey),
3682 st.preencode(d, n.digest),
3683 pt.preencode(d, n.stats),
3684 ut.preencode(d, n.timestamps),
3685 e.uint.preencode(d, n.fork),
3686 e.uint.preencode(d, n.length),
3687 e.fixed32.preencode(d, n.seed),
3688 lt.preencode(d, n.capabilities),
3689 ft.preencode(d, n.status),
3690 e.uint.preencode(d, c),
3691 n.selfDevice && mt.preencode(d, n.selfDevice),
3692 n.selfMember && yt.preencode(d, n.selfMember),
3693 n.config && xt.preencode(d, n.config),
3694 n.identity && bt.preencode(d, n.identity),
3695 n.lastMessage && vt.preencode(d, n.lastMessage),
3696 n.dm && gt.preencode(d, n.dm),
3697 n.readLengths && kt.preencode(d, n.readLengths),
3698 n.lastMember && ht.preencode(d, n.lastMember),
3699 n.version && e.uint.preencode(d, n.version),
3700 o >= 3 && n.preferences && Kt.preencode(d, n.preferences),
3701 o >= 4 && n.activeCall && eu.preencode(d, n.activeCall))
3702 },
3703 encode(d, n) {
3704 const c =
3705 (n.selfDevice ? 1 : 0) |
3706 (n.selfMember ? 2 : 0) |
3707 (n.config ? 4 : 0) |
3708 (n.identity ? 8 : 0) |
3709 (n.lastMessage ? 16 : 0) |
3710 (n.dm ? 32 : 0) |
3711 (n.readLengths ? 64 : 0) |
3712 (n.lastMember ? 128 : 0) |
3713 (n.version ? 256 : 0) |
3714 (o >= 3 && n.preferences ? 512 : 0) |
3715 (o >= 4 && n.activeCall ? 1024 : 0)
3716 ;(e.fixed32.encode(d, n.roomKey),
3717 e.fixed32.encode(d, n.discoveryKey),
3718 e.buffer.encode(d, n.encryptionKey),
3719 st.encode(d, n.digest),
3720 pt.encode(d, n.stats),
3721 ut.encode(d, n.timestamps),
3722 e.uint.encode(d, n.fork),
3723 e.uint.encode(d, n.length),
3724 e.fixed32.encode(d, n.seed),
3725 lt.encode(d, n.capabilities),
3726 ft.encode(d, n.status),
3727 e.uint.encode(d, c),
3728 n.selfDevice && mt.encode(d, n.selfDevice),
3729 n.selfMember && yt.encode(d, n.selfMember),
3730 n.config && xt.encode(d, n.config),
3731 n.identity && bt.encode(d, n.identity),
3732 n.lastMessage && vt.encode(d, n.lastMessage),
3733 n.dm && gt.encode(d, n.dm),
3734 n.readLengths && kt.encode(d, n.readLengths),
3735 n.lastMember && ht.encode(d, n.lastMember),
3736 n.version && e.uint.encode(d, n.version),
3737 o >= 3 && n.preferences && Kt.encode(d, n.preferences),
3738 o >= 4 && n.activeCall && eu.encode(d, n.activeCall))
3739 },
3740 decode(d) {
3741 const n = e.fixed32.decode(d),
3742 c = e.fixed32.decode(d),
3743 r = e.buffer.decode(d),
3744 t = st.decode(d),
3745 i = pt.decode(d),
3746 a = ut.decode(d),
3747 s = e.uint.decode(d),
3748 p = e.uint.decode(d),
3749 u = e.fixed32.decode(d),
3750 l = lt.decode(d),
3751 f = ft.decode(d),
3752 m = e.uint.decode(d)
3753 return {
3754 roomKey: n,
3755 discoveryKey: c,
3756 encryptionKey: r,
3757 digest: t,
3758 stats: i,
3759 timestamps: a,
3760 fork: s,
3761 length: p,
3762 seed: u,
3763 capabilities: l,
3764 status: f,
3765 selfDevice: 1 & m ? mt.decode(d) : null,
3766 selfMember: 2 & m ? yt.decode(d) : null,
3767 config: 4 & m ? xt.decode(d) : null,
3768 identity: 8 & m ? bt.decode(d) : null,
3769 lastMessage: 16 & m ? vt.decode(d) : null,
3770 dm: 32 & m ? gt.decode(d) : null,
3771 readLengths: 64 & m ? kt.decode(d) : null,
3772 lastMember: 128 & m ? ht.decode(d) : null,
3773 version: 256 & m ? e.uint.decode(d) : 0,
3774 preferences: o >= 3 && 512 & m ? Kt.decode(d) : null,
3775 activeCall: o >= 4 && 1024 & m ? eu.decode(d) : null,
3776 }
3777 },
3778 },
3779 Pt = vc,
3780 Rt = {
3781 preencode(d, o) {
3782 ;(e.fixed32.preencode(d, o.roomKey), Pt.preencode(d, o.status))
3783 },
3784 encode(d, o) {
3785 ;(e.fixed32.encode(d, o.roomKey), Pt.encode(d, o.status))
3786 },
3787 decode: (d) => ({ roomKey: e.fixed32.decode(d), status: Pt.decode(d) }),
3788 },
3789 Tt = {
3790 preencode(d, o) {
3791 ;(e.fixed32.preencode(d, o.roomKey), d.end++, o.repairs && e.uint.preencode(d, o.repairs))
3792 },
3793 encode(d, o) {
3794 const n = o.repairs ? 1 : 0
3795 ;(e.fixed32.encode(d, o.roomKey),
3796 e.uint.encode(d, n),
3797 o.repairs && e.uint.encode(d, o.repairs))
3798 },
3799 decode: (d) => ({
3800 roomKey: e.fixed32.decode(d),
3801 repairs: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
3802 }),
3803 },
3804 At = {
3805 preencode(d, o) {
3806 ;(e.fixed32.preencode(d, o.mailbox),
3807 e.fixed32.preencode(d, o.key),
3808 d.end++,
3809 o.roomKey && e.fixed32.preencode(d, o.roomKey),
3810 o.keyPair && t.preencode(d, o.keyPair),
3811 o.responseKeyPair && t.preencode(d, o.responseKeyPair))
3812 },
3813 encode(d, o) {
3814 const n = (o.roomKey ? 1 : 0) | (o.keyPair ? 2 : 0) | (o.responseKeyPair ? 4 : 0)
3815 ;(e.fixed32.encode(d, o.mailbox),
3816 e.fixed32.encode(d, o.key),
3817 e.uint.encode(d, n),
3818 o.roomKey && e.fixed32.encode(d, o.roomKey),
3819 o.keyPair && t.encode(d, o.keyPair),
3820 o.responseKeyPair && t.encode(d, o.responseKeyPair))
3821 },
3822 decode(d) {
3823 const o = e.fixed32.decode(d),
3824 n = e.fixed32.decode(d),
3825 c = e.uint.decode(d)
3826 return {
3827 mailbox: o,
3828 key: n,
3829 roomKey: 1 & c ? e.fixed32.decode(d) : null,
3830 keyPair: 2 & c ? t.decode(d) : null,
3831 responseKeyPair: 4 & c ? t.decode(d) : null,
3832 }
3833 },
3834 },
3835 qt = {
3836 preencode(d, o) {
3837 ;(e.fixed32.preencode(d, o.key), e.fixed32.preencode(d, o.responsePublicKey))
3838 },
3839 encode(d, o) {
3840 ;(e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.responsePublicKey))
3841 },
3842 decode: (d) => ({ key: e.fixed32.decode(d), responsePublicKey: e.fixed32.decode(d) }),
3843 },
3844 Mt = me,
3845 Ct = {
3846 preencode(d, o) {
3847 ;(e.fixed32.preencode(d, o.key), Mt.preencode(d, o.profile))
3848 },
3849 encode(d, o) {
3850 ;(e.fixed32.encode(d, o.key), Mt.encode(d, o.profile))
3851 },
3852 decode: (d) => ({ key: e.fixed32.decode(d), profile: Mt.decode(d) }),
3853 },
3854 Dt = mt,
3855 It = {
3856 preencode(d, o) {
3857 ;(e.fixed32.preencode(d, o.roomKey), Dt.preencode(d, o.device))
3858 },
3859 encode(d, o) {
3860 ;(e.fixed32.encode(d, o.roomKey), Dt.encode(d, o.device))
3861 },
3862 decode: (d) => ({ roomKey: e.fixed32.decode(d), device: Dt.decode(d) }),
3863 },
3864 St = h,
3865 Ft = {
3866 preencode(d, n) {
3867 ;(St.preencode(d, n.file),
3868 e.fixed32.preencode(d, n.roomKey),
3869 d.end++,
3870 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
3871 o >= 4 && n.lastAccessed && e.uint.preencode(d, n.lastAccessed),
3872 o >= 4 && n.version && e.uint.preencode(d, n.version))
3873 },
3874 encode(d, n) {
3875 const c =
3876 (n.encryptionKey ? 1 : 0) |
3877 (n.cleared ? 2 : 0) |
3878 (n.own ? 4 : 0) |
3879 (o >= 4 && n.lastAccessed ? 8 : 0) |
3880 (o >= 4 && n.version ? 16 : 0)
3881 ;(St.encode(d, n.file),
3882 e.fixed32.encode(d, n.roomKey),
3883 e.uint.encode(d, c),
3884 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
3885 o >= 4 && n.lastAccessed && e.uint.encode(d, n.lastAccessed),
3886 o >= 4 && n.version && e.uint.encode(d, n.version))
3887 },
3888 decode(d) {
3889 const n = St.decode(d),
3890 c = e.fixed32.decode(d),
3891 r = e.uint.decode(d)
3892 return {
3893 file: n,
3894 roomKey: c,
3895 encryptionKey: 1 & r ? e.buffer.decode(d) : null,
3896 cleared: !!(2 & r),
3897 own: !!(4 & r),
3898 lastAccessed: o >= 4 && 8 & r ? e.uint.decode(d) : 0,
3899 version: o >= 4 && 16 & r ? e.uint.decode(d) : 0,
3900 }
3901 },
3902 },
3903 Lt = {
3904 preencode(d, o) {
3905 ;(d.end++,
3906 o.key && e.string.preencode(d, o.key),
3907 o.description && e.string.preencode(d, o.description))
3908 },
3909 encode(d, o) {
3910 const n = (o.key ? 1 : 0) | (o.value ? 2 : 0) | (o.description ? 4 : 0)
3911 ;(e.uint.encode(d, n),
3912 o.key && e.string.encode(d, o.key),
3913 o.description && e.string.encode(d, o.description))
3914 },
3915 decode(d) {
3916 const o = e.uint.decode(d)
3917 return {
3918 key: 1 & o ? e.string.decode(d) : null,
3919 value: !!(2 & o),
3920 description: 4 & o ? e.string.decode(d) : null,
3921 }
3922 },
3923 },
3924 jt = e.array(e.frame(Lt)),
3925 Et = {
3926 preencode(e, d) {
3927 ;(e.end++, d.flags && jt.preencode(e, d.flags))
3928 },
3929 encode(d, o) {
3930 const n = o.flags ? 1 : 0
3931 ;(e.uint.encode(d, n), o.flags && jt.encode(d, o.flags))
3932 },
3933 decode: (d) => ({ flags: 1 & e.uint.decode(d) ? jt.decode(d) : null }),
3934 },
3935 Bt = dd,
3936 Nt = {
3937 preencode(d, o) {
3938 ;(d.end++,
3939 o.nodes && Bt.preencode(d, o.nodes),
3940 o.concurrency && e.uint.preencode(d, o.concurrency),
3941 o.maxWindow && e.uint.preencode(d, o.maxWindow),
3942 o.randomPunchInterval && e.uint.preencode(d, o.randomPunchInterval),
3943 o.connectionKeepAlive && e.uint.preencode(d, o.connectionKeepAlive))
3944 },
3945 encode(d, o) {
3946 const n =
3947 (o.nodes ? 1 : 0) |
3948 (o.concurrency ? 2 : 0) |
3949 (o.maxWindow ? 4 : 0) |
3950 (o.randomPunchInterval ? 8 : 0) |
3951 (o.connectionKeepAlive ? 16 : 0)
3952 ;(e.uint.encode(d, n),
3953 o.nodes && Bt.encode(d, o.nodes),
3954 o.concurrency && e.uint.encode(d, o.concurrency),
3955 o.maxWindow && e.uint.encode(d, o.maxWindow),
3956 o.randomPunchInterval && e.uint.encode(d, o.randomPunchInterval),
3957 o.connectionKeepAlive && e.uint.encode(d, o.connectionKeepAlive))
3958 },
3959 decode(d) {
3960 const o = e.uint.decode(d)
3961 return {
3962 nodes: 1 & o ? Bt.decode(d) : null,
3963 concurrency: 2 & o ? e.uint.decode(d) : 0,
3964 maxWindow: 4 & o ? e.uint.decode(d) : 0,
3965 randomPunchInterval: 8 & o ? e.uint.decode(d) : 0,
3966 connectionKeepAlive: 16 & o ? e.uint.decode(d) : 0,
3967 }
3968 },
3969 },
3970 Ot = {
3971 preencode(d, o) {
3972 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.count))
3973 },
3974 encode(d, o) {
3975 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.count))
3976 },
3977 decode: (d) => ({ roomKey: e.fixed32.decode(d), count: e.uint.decode(d) }),
3978 },
3979 Vt = {
3980 preencode(d, o) {
3981 ;(d.end++,
3982 o.roomKey && e.fixed32.preencode(d, o.roomKey),
3983 o.coreKey && e.fixed32.preencode(d, o.coreKey))
3984 },
3985 encode(d, o) {
3986 const n = (o.roomKey ? 1 : 0) | (o.coreKey ? 2 : 0)
3987 ;(e.uint.encode(d, n),
3988 o.roomKey && e.fixed32.encode(d, o.roomKey),
3989 o.coreKey && e.fixed32.encode(d, o.coreKey))
3990 },
3991 decode(d) {
3992 const o = e.uint.decode(d)
3993 return {
3994 roomKey: 1 & o ? e.fixed32.decode(d) : null,
3995 coreKey: 2 & o ? e.fixed32.decode(d) : null,
3996 }
3997 },
3998 },
3999 Ut = e.frame(Vt),
4000 Jt = {
4001 preencode(d, o) {
4002 ;(e.string.preencode(d, o.code),
4003 e.string.preencode(d, o.message),
4004 e.string.preencode(d, o.stack),
4005 e.uint.preencode(d, o.timestamp),
4006 d.end++,
4007 o.details && Ut.preencode(d, o.details))
4008 },
4009 encode(d, o) {
4010 const n = o.details ? 1 : 0
4011 ;(e.string.encode(d, o.code),
4012 e.string.encode(d, o.message),
4013 e.string.encode(d, o.stack),
4014 e.uint.encode(d, o.timestamp),
4015 e.uint.encode(d, n),
4016 o.details && Ut.encode(d, o.details))
4017 },
4018 decode: (d) => ({
4019 code: e.string.decode(d),
4020 message: e.string.decode(d),
4021 stack: e.string.decode(d),
4022 timestamp: e.uint.decode(d),
4023 details: 1 & e.uint.decode(d) ? Ut.decode(d) : null,
4024 }),
4025 },
4026 zt = { RESUME: 1, WAKEUP: 2, PRESUSPEND: 3, SUSPEND: 4 },
4027 Wt = {
4028 preencode(e, d) {
4029 e.end++
4030 },
4031 encode(d, o) {
4032 if (o > 4) throw new Error("Unknown enum")
4033 e.uint.encode(d, o)
4034 },
4035 decode: (d) => e.uint.decode(d),
4036 },
4037 Ht = {
4038 preencode(d, o) {
4039 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.total))
4040 },
4041 encode(d, o) {
4042 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.total))
4043 },
4044 decode: (d) => ({ roomKey: e.fixed32.decode(d), total: e.uint.decode(d) }),
4045 },
4046 Gt = a,
4047 Qt = {
4048 preencode(d, o) {
4049 e.uint.preencode(d, o.duration)
4050 },
4051 encode(d, o) {
4052 e.uint.encode(d, o.duration)
4053 },
4054 decode: (d) => ({ duration: e.uint.decode(d) }),
4055 },
4056 Xt = j,
4057 Yt = j,
4058 Zt = e.frame(Gt),
4059 $t = {
4060 preencode(e, d) {
4061 Zt.preencode(e, d.header)
4062 },
4063 encode(e, d) {
4064 Zt.encode(e, d.header)
4065 },
4066 decode: (e) => ({ header: Zt.decode(e) }),
4067 },
4068 _t = e.frame(Qt),
4069 ei = {
4070 preencode(e, d) {
4071 _t.preencode(e, d.header)
4072 },
4073 encode(e, d) {
4074 _t.encode(e, d.header)
4075 },
4076 decode: (e) => ({ header: _t.decode(e) }),
4077 },
4078 di = Zt,
4079 oi = {
4080 preencode(e, d) {
4081 di.preencode(e, d.header)
4082 },
4083 encode(e, d) {
4084 di.encode(e, d.header)
4085 },
4086 decode: (e) => ({ header: di.decode(e) }),
4087 },
4088 ni = j,
4089 ci = Zt,
4090 ri = sn,
4091 ti = H,
4092 ii = {
4093 preencode(e, d) {
4094 ;(ci.preencode(e, d.header),
4095 e.end++,
4096 d.config && ri.preencode(e, d.config),
4097 d.settings && ti.preencode(e, d.settings))
4098 },
4099 encode(d, o) {
4100 const n = (o.config ? 1 : 0) | (o.settings ? 2 : 0)
4101 ;(ci.encode(d, o.header),
4102 e.uint.encode(d, n),
4103 o.config && ri.encode(d, o.config),
4104 o.settings && ti.encode(d, o.settings))
4105 },
4106 decode(d) {
4107 const o = ci.decode(d),
4108 n = e.uint.decode(d)
4109 return {
4110 header: o,
4111 config: 1 & n ? ri.decode(d) : null,
4112 settings: 2 & n ? ti.decode(d) : null,
4113 }
4114 },
4115 },
4116 ai = _t,
4117 si = {
4118 preencode(d, o) {
4119 ;(ai.preencode(d, o.header), d.end++, o.roomKey && e.fixed32.preencode(d, o.roomKey))
4120 },
4121 encode(d, o) {
4122 const n = o.roomKey ? 1 : 0
4123 ;(ai.encode(d, o.header), e.uint.encode(d, n), o.roomKey && e.fixed32.encode(d, o.roomKey))
4124 },
4125 decode: (d) => ({
4126 header: ai.decode(d),
4127 roomKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null,
4128 }),
4129 },
4130 pi = Zt,
4131 ui = {
4132 preencode(d, o) {
4133 ;(pi.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey))
4134 },
4135 encode(d, o) {
4136 ;(pi.encode(d, o.header), e.fixed32.encode(d, o.roomKey))
4137 },
4138 decode: (d) => ({ header: pi.decode(d), roomKey: e.fixed32.decode(d) }),
4139 },
4140 li = Zt,
4141 fi = {
4142 preencode(d, o) {
4143 ;(li.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey))
4144 },
4145 encode(d, o) {
4146 ;(li.encode(d, o.header), e.fixed32.encode(d, o.roomKey))
4147 },
4148 decode: (d) => ({ header: li.decode(d), roomKey: e.fixed32.decode(d) }),
4149 },
4150 mi = Zt,
4151 yi = {
4152 preencode(d, o) {
4153 ;(mi.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey))
4154 },
4155 encode(d, o) {
4156 ;(mi.encode(d, o.header), e.fixed32.encode(d, o.roomKey))
4157 },
4158 decode: (d) => ({ header: mi.decode(d), roomKey: e.fixed32.decode(d) }),
4159 },
4160 xi = _t,
4161 bi = {
4162 preencode(e, d) {
4163 xi.preencode(e, d.header)
4164 },
4165 encode(e, d) {
4166 xi.encode(e, d.header)
4167 },
4168 decode: (e) => ({ header: xi.decode(e) }),
4169 },
4170 vi = Zt,
4171 gi = sn,
4172 ki = {
4173 preencode(d, o) {
4174 ;(vi.preencode(d, o.header),
4175 e.fixed32.preencode(d, o.roomKey),
4176 e.uint.preencode(d, o.key),
4177 gi.preencode(d, o.config))
4178 },
4179 encode(d, o) {
4180 ;(vi.encode(d, o.header),
4181 e.fixed32.encode(d, o.roomKey),
4182 e.uint.encode(d, o.key),
4183 gi.encode(d, o.config))
4184 },
4185 decode: (d) => ({
4186 header: vi.decode(d),
4187 roomKey: e.fixed32.decode(d),
4188 key: e.uint.decode(d),
4189 config: gi.decode(d),
4190 }),
4191 },
4192 hi = Zt,
4193 Ki = H,
4194 wi = {
4195 preencode(d, o) {
4196 ;(hi.preencode(d, o.header),
4197 e.fixed32.preencode(d, o.roomKey),
4198 e.uint.preencode(d, o.key),
4199 Ki.preencode(d, o.settings))
4200 },
4201 encode(d, o) {
4202 ;(hi.encode(d, o.header),
4203 e.fixed32.encode(d, o.roomKey),
4204 e.uint.encode(d, o.key),
4205 Ki.encode(d, o.settings))
4206 },
4207 decode: (d) => ({
4208 header: hi.decode(d),
4209 roomKey: e.fixed32.decode(d),
4210 key: e.uint.decode(d),
4211 settings: Ki.decode(d),
4212 }),
4213 },
4214 Pi = Zt,
4215 Ri = vc,
4216 Ti = {
4217 preencode(d, o) {
4218 ;(Pi.preencode(d, o.header),
4219 e.fixed32.preencode(d, o.roomKey),
4220 e.uint.preencode(d, o.key),
4221 Ri.preencode(d, o.status))
4222 },
4223 encode(d, o) {
4224 ;(Pi.encode(d, o.header),
4225 e.fixed32.encode(d, o.roomKey),
4226 e.uint.encode(d, o.key),
4227 Ri.encode(d, o.status))
4228 },
4229 decode: (d) => ({
4230 header: Pi.decode(d),
4231 roomKey: e.fixed32.decode(d),
4232 key: e.uint.decode(d),
4233 status: Ri.decode(d),
4234 }),
4235 },
4236 Ai = Zt,
4237 qi = Oo,
4238 Mi = {
4239 preencode(d, o) {
4240 ;(Ai.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), qi.preencode(d, o.message))
4241 },
4242 encode(d, o) {
4243 ;(Ai.encode(d, o.header), e.fixed32.encode(d, o.roomKey), qi.encode(d, o.message))
4244 },
4245 decode: (d) => ({ header: Ai.decode(d), roomKey: e.fixed32.decode(d), message: qi.decode(d) }),
4246 },
4247 Ci = _t,
4248 Di = {
4249 preencode(e, d) {
4250 Ci.preencode(e, d.header)
4251 },
4252 encode(e, d) {
4253 Ci.encode(e, d.header)
4254 },
4255 decode: (e) => ({ header: Ci.decode(e) }),
4256 },
4257 Ii = Zt,
4258 Si = Oo,
4259 Fi = {
4260 preencode(d, o) {
4261 ;(Ii.preencode(d, o.header),
4262 e.fixed32.preencode(d, o.roomKey),
4263 c.preencode(d, o.id),
4264 Si.preencode(d, o.message))
4265 },
4266 encode(d, o) {
4267 ;(Ii.encode(d, o.header),
4268 e.fixed32.encode(d, o.roomKey),
4269 c.encode(d, o.id),
4270 Si.encode(d, o.message))
4271 },
4272 decode: (d) => ({
4273 header: Ii.decode(d),
4274 roomKey: e.fixed32.decode(d),
4275 id: c.decode(d),
4276 message: Si.decode(d),
4277 }),
4278 },
4279 Li = _t,
4280 ji = {
4281 preencode(e, d) {
4282 Li.preencode(e, d.header)
4283 },
4284 encode(e, d) {
4285 Li.encode(e, d.header)
4286 },
4287 decode: (e) => ({ header: Li.decode(e) }),
4288 },
4289 Ei = Zt,
4290 Bi = {
4291 preencode(d, o) {
4292 ;(Ei.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), c.preencode(d, o.id))
4293 },
4294 encode(d, o) {
4295 ;(Ei.encode(d, o.header), e.fixed32.encode(d, o.roomKey), c.encode(d, o.id))
4296 },
4297 decode: (d) => ({ header: Ei.decode(d), roomKey: e.fixed32.decode(d), id: c.decode(d) }),
4298 },
4299 Ni = _t,
4300 Oi = {
4301 preencode(e, d) {
4302 Ni.preencode(e, d.header)
4303 },
4304 encode(e, d) {
4305 Ni.encode(e, d.header)
4306 },
4307 decode: (e) => ({ header: Ni.decode(e) }),
4308 },
4309 Vi = Zt,
4310 Ui = {
4311 preencode(d, o) {
4312 ;(Vi.preencode(d, o.header),
4313 e.fixed32.preencode(d, o.roomKey),
4314 c.preencode(d, o.id),
4315 e.string.preencode(d, o.reaction))
4316 },
4317 encode(d, o) {
4318 ;(Vi.encode(d, o.header),
4319 e.fixed32.encode(d, o.roomKey),
4320 c.encode(d, o.id),
4321 e.string.encode(d, o.reaction))
4322 },
4323 decode: (d) => ({
4324 header: Vi.decode(d),
4325 roomKey: e.fixed32.decode(d),
4326 id: c.decode(d),
4327 reaction: e.string.decode(d),
4328 }),
4329 },
4330 Ji = _t,
4331 zi = {
4332 preencode(e, d) {
4333 Ji.preencode(e, d.header)
4334 },
4335 encode(e, d) {
4336 Ji.encode(e, d.header)
4337 },
4338 decode: (e) => ({ header: Ji.decode(e) }),
4339 },
4340 Wi = Zt,
4341 Hi = {
4342 preencode(d, o) {
4343 ;(Wi.preencode(d, o.header),
4344 e.fixed32.preencode(d, o.roomKey),
4345 c.preencode(d, o.id),
4346 e.string.preencode(d, o.reaction))
4347 },
4348 encode(d, o) {
4349 ;(Wi.encode(d, o.header),
4350 e.fixed32.encode(d, o.roomKey),
4351 c.encode(d, o.id),
4352 e.string.encode(d, o.reaction))
4353 },
4354 decode: (d) => ({
4355 header: Wi.decode(d),
4356 roomKey: e.fixed32.decode(d),
4357 id: c.decode(d),
4358 reaction: e.string.decode(d),
4359 }),
4360 },
4361 Gi = _t,
4362 Qi = {
4363 preencode(e, d) {
4364 Gi.preencode(e, d.header)
4365 },
4366 encode(e, d) {
4367 Gi.encode(e, d.header)
4368 },
4369 decode: (e) => ({ header: Gi.decode(e) }),
4370 },
4371 Xi = {
4372 preencode(d, o) {
4373 ;(e.uint.preencode(d, o.clock), e.uint.preencode(d, o.start), e.uint.preencode(d, o.end))
4374 },
4375 encode(d, o) {
4376 ;(e.uint.encode(d, o.clock), e.uint.encode(d, o.start), e.uint.encode(d, o.end))
4377 },
4378 decode: (d) => ({ clock: e.uint.decode(d), start: e.uint.decode(d), end: e.uint.decode(d) }),
4379 },
4380 Yi = j,
4381 Zi = _,
4382 $i = {
4383 preencode(d, o) {
4384 ;(e.uint.preencode(d, o.clock), Zi.preencode(d, o.keys))
4385 },
4386 encode(d, o) {
4387 ;(e.uint.encode(d, o.clock), Zi.encode(d, o.keys))
4388 },
4389 decode: (d) => ({ clock: e.uint.decode(d), keys: Zi.decode(d) }),
4390 },
4391 _i = {
4392 preencode(d, o) {
4393 ;(e.uint.preencode(d, o.clock),
4394 e.fixed32.preencode(d, o.roomKey),
4395 d.end++,
4396 o.start && e.uint.preencode(d, o.start),
4397 o.size && e.uint.preencode(d, o.size))
4398 },
4399 encode(d, o) {
4400 const n = (o.start ? 1 : 0) | (o.size ? 2 : 0) | (o.isBottom ? 4 : 0)
4401 ;(e.uint.encode(d, o.clock),
4402 e.fixed32.encode(d, o.roomKey),
4403 e.uint.encode(d, n),
4404 o.start && e.uint.encode(d, o.start),
4405 o.size && e.uint.encode(d, o.size))
4406 },
4407 decode(d) {
4408 const o = e.uint.decode(d),
4409 n = e.fixed32.decode(d),
4410 c = e.uint.decode(d)
4411 return {
4412 clock: o,
4413 roomKey: n,
4414 start: 1 & c ? e.uint.decode(d) : 0,
4415 size: 2 & c ? e.uint.decode(d) : 0,
4416 isBottom: !!(4 & c),
4417 }
4418 },
4419 },
4420 ea = j,
4421 da = {
4422 preencode(d, o) {
4423 ;(e.uint.preencode(d, o.clock),
4424 e.fixed32.preencode(d, o.roomKey),
4425 d.end++,
4426 o.offset && e.fixed32.preencode(d, o.offset),
4427 o.count && e.uint.preencode(d, o.count))
4428 },
4429 encode(d, o) {
4430 const n = (o.offset ? 1 : 0) | (o.count ? 2 : 0)
4431 ;(e.uint.encode(d, o.clock),
4432 e.fixed32.encode(d, o.roomKey),
4433 e.uint.encode(d, n),
4434 o.offset && e.fixed32.encode(d, o.offset),
4435 o.count && e.uint.encode(d, o.count))
4436 },
4437 decode(d) {
4438 const o = e.uint.decode(d),
4439 n = e.fixed32.decode(d),
4440 c = e.uint.decode(d)
4441 return {
4442 clock: o,
4443 roomKey: n,
4444 offset: 1 & c ? e.fixed32.decode(d) : null,
4445 count: 2 & c ? e.uint.decode(d) : 0,
4446 }
4447 },
4448 },
4449 oa = j,
4450 na = {
4451 preencode(d, o) {
4452 ;(e.uint.preencode(d, o.timestamp), e.fixed32.preencode(d, o.id))
4453 },
4454 encode(d, o) {
4455 ;(e.uint.encode(d, o.timestamp), e.fixed32.encode(d, o.id))
4456 },
4457 decode: (d) => ({ timestamp: e.uint.decode(d), id: e.fixed32.decode(d) }),
4458 },
4459 ca = { Changed: 1, Removed: 2 },
4460 ra = {
4461 preencode(e, d) {
4462 e.end++
4463 },
4464 encode(d, o) {
4465 if (o > 2) throw new Error("Unknown enum")
4466 e.uint.encode(d, o)
4467 },
4468 decode: (d) => e.uint.decode(d),
4469 },
4470 ta = _,
4471 ia = {
4472 preencode(d, o) {
4473 ;(ta.preencode(d, o.keys),
4474 e.uint.preencode(d, o.start),
4475 e.uint.preencode(d, o.end),
4476 e.uint.preencode(d, o.total))
4477 },
4478 encode(d, o) {
4479 ;(ta.encode(d, o.keys),
4480 e.uint.encode(d, o.start),
4481 e.uint.encode(d, o.end),
4482 e.uint.encode(d, o.total))
4483 },
4484 decode: (d) => ({
4485 keys: ta.decode(d),
4486 start: e.uint.decode(d),
4487 end: e.uint.decode(d),
4488 total: e.uint.decode(d),
4489 }),
4490 },
4491 aa = {
4492 preencode(e, d) {
4493 ;(ra.preencode(e, d.type), na.preencode(e, d.room))
4494 },
4495 encode(e, d) {
4496 ;(ra.encode(e, d.type), na.encode(e, d.room))
4497 },
4498 decode: (e) => ({ type: ra.decode(e), room: na.decode(e) }),
4499 },
4500 sa = ft,
4501 pa = vd,
4502 ua = {
4503 preencode(e, d) {
4504 ;(sa.preencode(e, d.device), e.end++, d.member && pa.preencode(e, d.member))
4505 },
4506 encode(d, o) {
4507 const n = o.member ? 1 : 0
4508 ;(sa.encode(d, o.device), e.uint.encode(d, n), o.member && pa.encode(d, o.member))
4509 },
4510 decode: (d) => ({ device: sa.decode(d), member: 1 & e.uint.decode(d) ? pa.decode(d) : null }),
4511 },
4512 la = e.frame(ua),
4513 fa = xn,
4514 ma = sn,
4515 ya = {
4516 preencode(d, o) {
4517 ;(e.fixed32.preencode(d, o.id),
4518 la.preencode(d, o.role),
4519 fa.preencode(d, o.digest),
4520 ma.preencode(d, o.config),
4521 d.end++,
4522 o.messageId && c.preencode(d, o.messageId))
4523 },
4524 encode(d, o) {
4525 const n = o.messageId ? 1 : 0
4526 ;(e.fixed32.encode(d, o.id),
4527 la.encode(d, o.role),
4528 fa.encode(d, o.digest),
4529 ma.encode(d, o.config),
4530 e.uint.encode(d, n),
4531 o.messageId && c.encode(d, o.messageId))
4532 },
4533 decode: (d) => ({
4534 id: e.fixed32.decode(d),
4535 role: la.decode(d),
4536 digest: fa.decode(d),
4537 config: ma.decode(d),
4538 messageId: 1 & e.uint.decode(d) ? c.decode(d) : null,
4539 }),
4540 },
4541 xa = ft,
4542 ba = {
4543 preencode(d, o) {
4544 ;(e.fixed32.preencode(d, o.id), xa.preencode(d, o.status))
4545 },
4546 encode(d, o) {
4547 ;(e.fixed32.encode(d, o.id), xa.encode(d, o.status))
4548 },
4549 decode: (d) => ({ id: e.fixed32.decode(d), status: xa.decode(d) }),
4550 },
4551 va = xn,
4552 ga = {
4553 preencode(d, o) {
4554 ;(e.fixed32.preencode(d, o.id), va.preencode(d, o.digest))
4555 },
4556 encode(d, o) {
4557 ;(e.fixed32.encode(d, o.id), va.encode(d, o.digest))
4558 },
4559 decode: (d) => ({ id: e.fixed32.decode(d), digest: va.decode(d) }),
4560 },
4561 ka = sn,
4562 ha = {
4563 preencode(d, o) {
4564 ;(e.fixed32.preencode(d, o.id), ka.preencode(d, o.config))
4565 },
4566 encode(d, o) {
4567 ;(e.fixed32.encode(d, o.id), ka.encode(d, o.config))
4568 },
4569 decode: (d) => ({ id: e.fixed32.decode(d), config: ka.decode(d) }),
4570 },
4571 Ka = la,
4572 wa = {
4573 preencode(d, o) {
4574 ;(e.fixed32.preencode(d, o.id), d.end++, o.role && Ka.preencode(d, o.role))
4575 },
4576 encode(d, o) {
4577 const n = o.role ? 1 : 0
4578 ;(e.fixed32.encode(d, o.id), e.uint.encode(d, n), o.role && Ka.encode(d, o.role))
4579 },
4580 decode: (d) => ({ id: e.fixed32.decode(d), role: 1 & e.uint.decode(d) ? Ka.decode(d) : null }),
4581 },
4582 Pa = {
4583 preencode(d, o) {
4584 ;(e.fixed32.preencode(d, o.id), c.preencode(d, o.lastMessage))
4585 },
4586 encode(d, o) {
4587 ;(e.fixed32.encode(d, o.id), c.encode(d, o.lastMessage))
4588 },
4589 decode: (d) => ({ id: e.fixed32.decode(d), lastMessage: c.decode(d) }),
4590 },
4591 Ra = me,
4592 Ta = {
4593 preencode(d, o) {
4594 ;(e.fixed32.preencode(d, o.key), Ra.preencode(d, o.profile))
4595 },
4596 encode(d, o) {
4597 ;(e.fixed32.encode(d, o.key), Ra.encode(d, o.profile))
4598 },
4599 decode: (d) => ({ key: e.fixed32.decode(d), profile: Ra.decode(d) }),
4600 },
4601 Aa = se,
4602 qa = {
4603 preencode(d, o) {
4604 ;(e.fixed32.preencode(d, o.key), Aa.preencode(d, o.status), du.preencode(d, o.profile))
4605 },
4606 encode(d, o) {
4607 ;(e.fixed32.encode(d, o.key), Aa.encode(d, o.status), du.encode(d, o.profile))
4608 },
4609 decode: (d) => ({ key: e.fixed32.decode(d), status: Aa.decode(d), profile: du.decode(d) }),
4610 },
4611 Ma = {
4612 preencode(d, o) {
4613 ;(e.fixed32.preencode(d, o.roomKey), e.fixed32.preencode(d, o.key))
4614 },
4615 encode(d, o) {
4616 ;(e.fixed32.encode(d, o.roomKey), e.fixed32.encode(d, o.key))
4617 },
4618 decode: (d) => ({ roomKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
4619 },
4620 Ca = Ma,
4621 Da = e.array(c),
4622 Ia = {
4623 preencode(d, o) {
4624 ;(e.fixed32.preencode(d, o.roomKey),
4625 e.uint.preencode(d, o.start),
4626 e.uint.preencode(d, o.size),
4627 e.uint.preencode(d, o.total),
4628 Da.preencode(d, o.ids),
4629 d.end++)
4630 },
4631 encode(d, o) {
4632 const n = o.isBottom ? 1 : 0
4633 ;(e.fixed32.encode(d, o.roomKey),
4634 e.uint.encode(d, o.start),
4635 e.uint.encode(d, o.size),
4636 e.uint.encode(d, o.total),
4637 Da.encode(d, o.ids),
4638 e.uint.encode(d, n))
4639 },
4640 decode: (d) => ({
4641 roomKey: e.fixed32.decode(d),
4642 start: e.uint.decode(d),
4643 size: e.uint.decode(d),
4644 total: e.uint.decode(d),
4645 ids: Da.decode(d),
4646 isBottom: !!(1 & e.uint.decode(d)),
4647 }),
4648 },
4649 Sa = {
4650 preencode(d, o) {
4651 ;(e.uint.preencode(d, o.sent), d.end++, o.edited && e.uint.preencode(d, o.edited))
4652 },
4653 encode(d, o) {
4654 const n = o.edited ? 1 : 0
4655 ;(e.uint.encode(d, o.sent), e.uint.encode(d, n), o.edited && e.uint.encode(d, o.edited))
4656 },
4657 decode: (d) => ({
4658 sent: e.uint.decode(d),
4659 edited: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0,
4660 }),
4661 },
4662 Fa = e.frame(Sa),
4663 La = Do,
4664 ja = Io,
4665 Ea = So,
4666 Ba = {
4667 preencode(d, o) {
4668 ;(c.preencode(d, o.id),
4669 e.uint.preencode(d, o.clock),
4670 Fa.preencode(d, o.timestamps),
4671 La.preencode(d, o.status),
4672 d.end++,
4673 o.message && ja.preencode(d, o.message),
4674 o.event && Ea.preencode(d, o.event))
4675 },
4676 encode(d, o) {
4677 const n = (o.message ? 1 : 0) | (o.event ? 2 : 0)
4678 ;(c.encode(d, o.id),
4679 e.uint.encode(d, o.clock),
4680 Fa.encode(d, o.timestamps),
4681 La.encode(d, o.status),
4682 e.uint.encode(d, n),
4683 o.message && ja.encode(d, o.message),
4684 o.event && Ea.encode(d, o.event))
4685 },
4686 decode(d) {
4687 const o = c.decode(d),
4688 n = e.uint.decode(d),
4689 r = Fa.decode(d),
4690 t = La.decode(d),
4691 i = e.uint.decode(d)
4692 return {
4693 id: o,
4694 clock: n,
4695 timestamps: r,
4696 status: t,
4697 message: 1 & i ? ja.decode(d) : null,
4698 event: 2 & i ? Ea.decode(d) : null,
4699 }
4700 },
4701 },
4702 Na = e.frame(Ba),
4703 Oa = vd,
4704 Va = {
4705 preencode(d, o) {
4706 ;(Na.preencode(d, o.chat), e.fixed32.preencode(d, o.memberKey), Oa.preencode(d, o.role))
4707 },
4708 encode(d, o) {
4709 ;(Na.encode(d, o.chat), e.fixed32.encode(d, o.memberKey), Oa.encode(d, o.role))
4710 },
4711 decode: (d) => ({ chat: Na.decode(d), memberKey: e.fixed32.decode(d), role: Oa.decode(d) }),
4712 },
4713 Ua = Na,
4714 Ja = {
4715 preencode(e, d) {
4716 Ua.preencode(e, d.chat)
4717 },
4718 encode(e, d) {
4719 Ua.encode(e, d.chat)
4720 },
4721 decode: (e) => ({ chat: Ua.decode(e) }),
4722 },
4723 za = Da,
4724 Wa = {
4725 preencode(d, o) {
4726 ;(za.preencode(d, o.ids), e.fixed32.preencode(d, o.memberKey))
4727 },
4728 encode(d, o) {
4729 ;(za.encode(d, o.ids), e.fixed32.encode(d, o.memberKey))
4730 },
4731 decode: (d) => ({ ids: za.decode(d), memberKey: e.fixed32.decode(d) }),
4732 },
4733 Ha = Da,
4734 Ga = vd,
4735 Qa = {
4736 preencode(e, d) {
4737 ;(Ha.preencode(e, d.ids), Ga.preencode(e, d.role))
4738 },
4739 encode(e, d) {
4740 ;(Ha.encode(e, d.ids), Ga.encode(e, d.role))
4741 },
4742 decode: (e) => ({ ids: Ha.decode(e), role: Ga.decode(e) }),
4743 },
4744 Xa = e.frame(on),
4745 Ya = {
4746 preencode(e, d) {
4747 ;(c.preencode(e, d.id), Xa.preencode(e, d.reactions))
4748 },
4749 encode(e, d) {
4750 ;(c.encode(e, d.id), Xa.encode(e, d.reactions))
4751 },
4752 decode: (e) => ({ id: c.decode(e), reactions: Xa.decode(e) }),
4753 },
4754 Za = Xa,
4755 $a = {
4756 preencode(e, d) {
4757 ;(c.preencode(e, d.id), Za.preencode(e, d.digest))
4758 },
4759 encode(e, d) {
4760 ;(c.encode(e, d.id), Za.encode(e, d.digest))
4761 },
4762 decode: (e) => ({ id: c.decode(e), digest: Za.decode(e) }),
4763 },
4764 _a = j,
4765 es = j,
4766 ds = e.array(e.frame(ic)),
4767 os = {
4768 preencode(e, d) {
4769 ds.preencode(e, d.invitations)
4770 },
4771 encode(e, d) {
4772 ds.encode(e, d.invitations)
4773 },
4774 decode: (e) => ({ invitations: ds.decode(e) }),
4775 },
4776 ns = e.frame(ld),
4777 cs = {
4778 preencode(d, o) {
4779 ;(e.fixed32.preencode(d, o.roomKey), ns.preencode(d, o.request))
4780 },
4781 encode(d, o) {
4782 ;(e.fixed32.encode(d, o.roomKey), ns.encode(d, o.request))
4783 },
4784 decode: (d) => ({ roomKey: e.fixed32.decode(d), request: ns.decode(d) }),
4785 },
4786 rs = e.array(e.frame(cs)),
4787 ts = {
4788 preencode(e, d) {
4789 rs.preencode(e, d.requests)
4790 },
4791 encode(e, d) {
4792 rs.encode(e, d.requests)
4793 },
4794 decode: (e) => ({ requests: rs.decode(e) }),
4795 },
4796 is = ds,
4797 as = e.array(e.frame(ld)),
4798 ss = {
4799 preencode(e, d) {
4800 ;(is.preencode(e, d.pendingInvitations), as.preencode(e, d.identityJoinRequests))
4801 },
4802 encode(e, d) {
4803 ;(is.encode(e, d.pendingInvitations), as.encode(e, d.identityJoinRequests))
4804 },
4805 decode: (e) => ({ pendingInvitations: is.decode(e), identityJoinRequests: as.decode(e) }),
4806 },
4807 ps = Zt,
4808 us = {
4809 preencode(d, o) {
4810 ;(ps.preencode(d, o.header), e.string.preencode(d, o.invitation), d.end++)
4811 },
4812 encode(d, o) {
4813 const n = o.isIdentity ? 1 : 0
4814 ;(ps.encode(d, o.header), e.string.encode(d, o.invitation), e.uint.encode(d, n))
4815 },
4816 decode: (d) => ({
4817 header: ps.decode(d),
4818 invitation: e.string.decode(d),
4819 isIdentity: !!(1 & e.uint.decode(d)),
4820 }),
4821 },
4822 ls = _t,
4823 fs = {
4824 preencode(e, d) {
4825 ls.preencode(e, d.header)
4826 },
4827 encode(e, d) {
4828 ls.encode(e, d.header)
4829 },
4830 decode: (e) => ({ header: ls.decode(e) }),
4831 },
4832 ms = {
4833 preencode(e, d) {
4834 e.end++
4835 },
4836 encode(d, o) {
4837 const n =
4838 (o.canModerate ? 1 : 0) |
4839 (o.canAdmin ? 2 : 0) |
4840 (o.requiresConfirmation ? 4 : 0) |
4841 (o.isReadOnly ? 8 : 0)
4842 e.uint.encode(d, n)
4843 },
4844 decode(d) {
4845 const o = e.uint.decode(d)
4846 return {
4847 canModerate: !!(1 & o),
4848 canAdmin: !!(2 & o),
4849 requiresConfirmation: !!(4 & o),
4850 isReadOnly: !!(8 & o),
4851 }
4852 },
4853 },
4854 ys = Zt,
4855 xs = e.frame(ms),
4856 bs = {
4857 preencode(d, o) {
4858 ;(ys.preencode(d, o.header),
4859 e.fixed32.preencode(d, o.roomKey),
4860 d.end++,
4861 o.permissions && xs.preencode(d, o.permissions),
4862 o.expiration && e.uint.preencode(d, o.expiration))
4863 },
4864 encode(d, o) {
4865 const n = (o.permissions ? 1 : 0) | (o.expiration ? 2 : 0)
4866 ;(ys.encode(d, o.header),
4867 e.fixed32.encode(d, o.roomKey),
4868 e.uint.encode(d, n),
4869 o.permissions && xs.encode(d, o.permissions),
4870 o.expiration && e.uint.encode(d, o.expiration))
4871 },
4872 decode(d) {
4873 const o = ys.decode(d),
4874 n = e.fixed32.decode(d),
4875 c = e.uint.decode(d)
4876 return {
4877 header: o,
4878 roomKey: n,
4879 permissions: 1 & c ? xs.decode(d) : null,
4880 expiration: 2 & c ? e.uint.decode(d) : 0,
4881 }
4882 },
4883 },
4884 vs = _t,
4885 gs = {
4886 preencode(d, o) {
4887 ;(vs.preencode(d, o.header), e.string.preencode(d, o.invitation))
4888 },
4889 encode(d, o) {
4890 ;(vs.encode(d, o.header), e.string.encode(d, o.invitation))
4891 },
4892 decode: (d) => ({ header: vs.decode(d), invitation: e.string.decode(d) }),
4893 },
4894 ks = Zt,
4895 hs = {
4896 preencode(e, d) {
4897 ks.preencode(e, d.header)
4898 },
4899 encode(e, d) {
4900 ks.encode(e, d.header)
4901 },
4902 decode: (e) => ({ header: ks.decode(e) }),
4903 },
4904 Ks = _t,
4905 ws = {
4906 preencode(d, o) {
4907 ;(Ks.preencode(d, o.header), e.string.preencode(d, o.invitation))
4908 },
4909 encode(d, o) {
4910 ;(Ks.encode(d, o.header), e.string.encode(d, o.invitation))
4911 },
4912 decode: (d) => ({ header: Ks.decode(d), invitation: e.string.decode(d) }),
4913 },
4914 Ps = Zt,
4915 Rs = ns,
4916 Ts = {
4917 preencode(d, o) {
4918 ;(Ps.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), Rs.preencode(d, o.request))
4919 },
4920 encode(d, o) {
4921 ;(Ps.encode(d, o.header), e.fixed32.encode(d, o.roomKey), Rs.encode(d, o.request))
4922 },
4923 decode: (d) => ({ header: Ps.decode(d), roomKey: e.fixed32.decode(d), request: Rs.decode(d) }),
4924 },
4925 As = _t,
4926 qs = {
4927 preencode(e, d) {
4928 As.preencode(e, d.header)
4929 },
4930 encode(e, d) {
4931 As.encode(e, d.header)
4932 },
4933 decode: (e) => ({ header: As.decode(e) }),
4934 },
4935 Ms = Zt,
4936 Cs = ns,
4937 Ds = {
4938 preencode(d, o) {
4939 ;(Ms.preencode(d, o.header), e.fixed32.preencode(d, o.roomKey), Cs.preencode(d, o.request))
4940 },
4941 encode(d, o) {
4942 ;(Ms.encode(d, o.header), e.fixed32.encode(d, o.roomKey), Cs.encode(d, o.request))
4943 },
4944 decode: (d) => ({ header: Ms.decode(d), roomKey: e.fixed32.decode(d), request: Cs.decode(d) }),
4945 },
4946 Is = _t,
4947 Ss = {
4948 preencode(e, d) {
4949 Is.preencode(e, d.header)
4950 },
4951 encode(e, d) {
4952 Is.encode(e, d.header)
4953 },
4954 decode: (e) => ({ header: Is.decode(e) }),
4955 },
4956 Fs = Zt,
4957 Ls = {
4958 preencode(d, o) {
4959 ;(Fs.preencode(d, o.header), e.fixed32.preencode(d, o.id))
4960 },
4961 encode(d, o) {
4962 ;(Fs.encode(d, o.header), e.fixed32.encode(d, o.id))
4963 },
4964 decode: (d) => ({ header: Fs.decode(d), id: e.fixed32.decode(d) }),
4965 },
4966 js = _t,
4967 Es = {
4968 preencode(e, d) {
4969 js.preencode(e, d.header)
4970 },
4971 encode(e, d) {
4972 js.encode(e, d.header)
4973 },
4974 decode: (e) => ({ header: js.decode(e) }),
4975 },
4976 Bs = Zt,
4977 Ns = {
4978 preencode(d, o) {
4979 ;(Bs.preencode(d, o.header),
4980 e.string.preencode(d, o.displayName),
4981 d.end++,
4982 o.avatar && e.buffer.preencode(d, o.avatar))
4983 },
4984 encode(d, o) {
4985 const n = o.avatar ? 1 : 0
4986 ;(Bs.encode(d, o.header),
4987 e.string.encode(d, o.displayName),
4988 e.uint.encode(d, n),
4989 o.avatar && e.buffer.encode(d, o.avatar))
4990 },
4991 decode: (d) => ({
4992 header: Bs.decode(d),
4993 displayName: e.string.decode(d),
4994 avatar: 1 & e.uint.decode(d) ? e.buffer.decode(d) : null,
4995 }),
4996 },
4997 Os = j,
4998 Vs = j,
4999 Us = {
5000 preencode(e, d) {
5001 e.end++
5002 },
5003 encode(d, o) {
5004 const n = (o.isConfirmed ? 1 : 0) | (o.isLoggedOut ? 2 : 0)
5005 e.uint.encode(d, n)
5006 },
5007 decode(d) {
5008 const o = e.uint.decode(d)
5009 return { isConfirmed: !!(1 & o), isLoggedOut: !!(2 & o) }
5010 },
5011 },
5012 Js = e.frame(Us),
5013 zs = _,
5014 Ws = {
5015 preencode(d, o) {
5016 ;(e.fixed32.preencode(d, o.memberKey),
5017 Js.preencode(d, o.status),
5018 zs.preencode(d, o.deviceKeys))
5019 },
5020 encode(d, o) {
5021 ;(e.fixed32.encode(d, o.memberKey), Js.encode(d, o.status), zs.encode(d, o.deviceKeys))
5022 },
5023 decode: (d) => ({
5024 memberKey: e.fixed32.decode(d),
5025 status: Js.decode(d),
5026 deviceKeys: zs.decode(d),
5027 }),
5028 },
5029 Hs = {
5030 preencode(d, o) {
5031 e.fixed32.preencode(d, o.memberKey)
5032 },
5033 encode(d, o) {
5034 e.fixed32.encode(d, o.memberKey)
5035 },
5036 decode: (d) => ({ memberKey: e.fixed32.decode(d) }),
5037 },
5038 Gs = {
5039 preencode(d, o) {
5040 e.fixed32.preencode(d, o.deviceKey)
5041 },
5042 encode(d, o) {
5043 e.fixed32.encode(d, o.deviceKey)
5044 },
5045 decode: (d) => ({ deviceKey: e.fixed32.decode(d) }),
5046 },
5047 Qs = Zt,
5048 Xs = {
5049 preencode(d, o) {
5050 ;(Qs.preencode(d, o.header), e.string.preencode(d, o.password))
5051 },
5052 encode(d, o) {
5053 ;(Qs.encode(d, o.header), e.string.encode(d, o.password))
5054 },
5055 decode: (d) => ({ header: Qs.decode(d), password: e.string.decode(d) }),
5056 },
5057 Ys = _t,
5058 Zs = {
5059 preencode(d, o) {
5060 ;(Ys.preencode(d, o.header), e.string.preencode(d, o.inspector))
5061 },
5062 encode(d, o) {
5063 ;(Ys.encode(d, o.header), e.string.encode(d, o.inspector))
5064 },
5065 decode: (d) => ({ header: Ys.decode(d), inspector: e.string.decode(d) }),
5066 },
5067 $s = _t,
5068 _s = {
5069 preencode(e, d) {
5070 $s.preencode(e, d.header)
5071 },
5072 encode(e, d) {
5073 $s.encode(e, d.header)
5074 },
5075 decode: (e) => ({ header: $s.decode(e) }),
5076 },
5077 ep = _t,
5078 dp = {
5079 preencode(e, d) {
5080 ep.preencode(e, d.header)
5081 },
5082 encode(e, d) {
5083 ep.encode(e, d.header)
5084 },
5085 decode: (e) => ({ header: ep.decode(e) }),
5086 },
5087 op = { Flag: 1 },
5088 np = {
5089 preencode(e, d) {
5090 e.end++
5091 },
5092 encode(d, o) {
5093 if (o > 1) throw new Error("Unknown enum")
5094 e.uint.encode(d, o)
5095 },
5096 decode: (d) => e.uint.decode(d),
5097 },
5098 cp = {
5099 preencode(d, o) {
5100 ;(e.fixed32.preencode(d, o.key),
5101 e.fixed32.preencode(d, o.sender),
5102 e.uint.preencode(d, o.clock),
5103 np.preencode(d, o.label))
5104 },
5105 encode(d, o) {
5106 ;(e.fixed32.encode(d, o.key),
5107 e.fixed32.encode(d, o.sender),
5108 e.uint.encode(d, o.clock),
5109 np.encode(d, o.label))
5110 },
5111 decode: (d) => ({
5112 key: e.fixed32.decode(d),
5113 sender: e.fixed32.decode(d),
5114 clock: e.uint.decode(d),
5115 label: np.decode(d),
5116 }),
5117 },
5118 rp = oe,
5119 tp = {
5120 preencode(d, o) {
5121 ;(rp.preencode(d, o.header), e.fixed32.preencode(d, o.key), np.preencode(d, o.label))
5122 },
5123 encode(d, o) {
5124 ;(rp.encode(d, o.header), e.fixed32.encode(d, o.key), np.encode(d, o.label))
5125 },
5126 decode: (d) => ({ header: rp.decode(d), key: e.fixed32.decode(d), label: np.decode(d) }),
5127 },
5128 ip = {
5129 preencode(d, o) {
5130 ;(np.preencode(d, o.label), e.uint.preencode(d, o.count))
5131 },
5132 encode(d, o) {
5133 ;(np.encode(d, o.label), e.uint.encode(d, o.count))
5134 },
5135 decode: (d) => ({ label: np.decode(d), count: e.uint.decode(d) }),
5136 },
5137 ap = e.array(e.frame(ip)),
5138 sp = {
5139 preencode(d, o) {
5140 ;(e.fixed32.preencode(d, o.key),
5141 e.uint.preencode(d, o.total),
5142 ap.preencode(d, o.labels),
5143 e.uint.preencode(d, o.editedAt),
5144 e.uint.preencode(d, o.flagsClock))
5145 },
5146 encode(d, o) {
5147 ;(e.fixed32.encode(d, o.key),
5148 e.uint.encode(d, o.total),
5149 ap.encode(d, o.labels),
5150 e.uint.encode(d, o.editedAt),
5151 e.uint.encode(d, o.flagsClock))
5152 },
5153 decode: (d) => ({
5154 key: e.fixed32.decode(d),
5155 total: e.uint.decode(d),
5156 labels: ap.decode(d),
5157 editedAt: e.uint.decode(d),
5158 flagsClock: e.uint.decode(d),
5159 }),
5160 },
5161 pp = oe,
5162 up = {
5163 preencode(d, o) {
5164 ;(pp.preencode(d, o.header),
5165 e.fixed32.preencode(d, o.deviceKey),
5166 e.fixed32.preencode(d, o.fromDeviceKey))
5167 },
5168 encode(d, o) {
5169 ;(pp.encode(d, o.header),
5170 e.fixed32.encode(d, o.deviceKey),
5171 e.fixed32.encode(d, o.fromDeviceKey))
5172 },
5173 decode: (d) => ({
5174 header: pp.decode(d),
5175 deviceKey: e.fixed32.decode(d),
5176 fromDeviceKey: e.fixed32.decode(d),
5177 }),
5178 },
5179 lp = {
5180 preencode(d, o) {
5181 ;(e.float64.preencode(d, o.latitude), e.float64.preencode(d, o.longitude))
5182 },
5183 encode(d, o) {
5184 ;(e.float64.encode(d, o.latitude), e.float64.encode(d, o.longitude))
5185 },
5186 decode: (d) => ({ latitude: e.float64.decode(d), longitude: e.float64.decode(d) }),
5187 },
5188 fp = oe,
5189 mp = _,
5190 yp = {
5191 preencode(d, n) {
5192 ;(fp.preencode(d, n.header),
5193 e.fixed32.preencode(d, n.callKey),
5194 e.buffer.preencode(d, n.encryptionKey),
5195 d.end++,
5196 o >= 4 && n.streams && mp.preencode(d, n.streams),
5197 o >= 4 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
5198 o >= 4 && n.version && e.uint.preencode(d, n.version))
5199 },
5200 encode(d, n) {
5201 const c =
5202 (o >= 4 && n.streams ? 1 : 0) |
5203 (o >= 4 && n.discoveryKey ? 2 : 0) |
5204 (o >= 4 && n.version ? 4 : 0)
5205 ;(fp.encode(d, n.header),
5206 e.fixed32.encode(d, n.callKey),
5207 e.buffer.encode(d, n.encryptionKey),
5208 e.uint.encode(d, c),
5209 o >= 4 && n.streams && mp.encode(d, n.streams),
5210 o >= 4 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
5211 o >= 4 && n.version && e.uint.encode(d, n.version))
5212 },
5213 decode(d) {
5214 const n = fp.decode(d),
5215 c = e.fixed32.decode(d),
5216 r = e.buffer.decode(d),
5217 t = e.uint.decode(d)
5218 return {
5219 header: n,
5220 callKey: c,
5221 encryptionKey: r,
5222 streams: o >= 4 && 1 & t ? mp.decode(d) : null,
5223 discoveryKey: o >= 4 && 2 & t ? e.fixed32.decode(d) : null,
5224 version: o >= 4 && 4 & t ? e.uint.decode(d) : 0,
5225 }
5226 },
5227 },
5228 xp = oe,
5229 bp = _,
5230 vp = {
5231 preencode(d, n) {
5232 ;(xp.preencode(d, n.header),
5233 e.fixed32.preencode(d, n.callKey),
5234 d.end++,
5235 o >= 4 && n.streams && bp.preencode(d, n.streams))
5236 },
5237 encode(d, n) {
5238 const c = o >= 4 && n.streams ? 1 : 0
5239 ;(xp.encode(d, n.header),
5240 e.fixed32.encode(d, n.callKey),
5241 e.uint.encode(d, c),
5242 o >= 4 && n.streams && bp.encode(d, n.streams))
5243 },
5244 decode(d) {
5245 const n = xp.decode(d),
5246 c = e.fixed32.decode(d),
5247 r = e.uint.decode(d)
5248 return { header: n, callKey: c, streams: o >= 4 && 1 & r ? bp.decode(d) : null }
5249 },
5250 },
5251 gp = oe,
5252 kp = {
5253 preencode(d, o) {
5254 ;(gp.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
5255 },
5256 encode(d, o) {
5257 ;(gp.encode(d, o.header), e.fixed32.encode(d, o.callKey))
5258 },
5259 decode: (d) => ({ header: gp.decode(d), callKey: e.fixed32.decode(d) }),
5260 },
5261 hp = oe,
5262 Kp = {
5263 preencode(d, o) {
5264 ;(hp.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
5265 },
5266 encode(d, o) {
5267 ;(hp.encode(d, o.header), e.fixed32.encode(d, o.callKey))
5268 },
5269 decode: (d) => ({ header: hp.decode(d), callKey: e.fixed32.decode(d) }),
5270 },
5271 wp = oe,
5272 Pp = {
5273 preencode(d, o) {
5274 ;(wp.preencode(d, o.header),
5275 e.fixed32.preencode(d, o.callKey),
5276 e.fixed32.preencode(d, o.streamKey))
5277 },
5278 encode(d, o) {
5279 ;(wp.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
5280 },
5281 decode: (d) => ({
5282 header: wp.decode(d),
5283 callKey: e.fixed32.decode(d),
5284 streamKey: e.fixed32.decode(d),
5285 }),
5286 },
5287 Rp = oe,
5288 Tp = {
5289 preencode(d, o) {
5290 ;(Rp.preencode(d, o.header),
5291 e.fixed32.preencode(d, o.callKey),
5292 e.fixed32.preencode(d, o.streamKey))
5293 },
5294 encode(d, o) {
5295 ;(Rp.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
5296 },
5297 decode: (d) => ({
5298 header: Rp.decode(d),
5299 callKey: e.fixed32.decode(d),
5300 streamKey: e.fixed32.decode(d),
5301 }),
5302 },
5303 Ap = {
5304 preencode(d, n) {
5305 ;(e.fixed32.preencode(d, n.callKey),
5306 e.buffer.preencode(d, n.encryptionKey),
5307 e.uint.preencode(d, n.createdAt),
5308 d.end++,
5309 o >= 4 && n.endedAt && e.uint.preencode(d, n.endedAt),
5310 o >= 4 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
5311 o >= 4 && n.version && e.uint.preencode(d, n.version))
5312 },
5313 encode(d, n) {
5314 const c =
5315 (o >= 4 && n.endedAt ? 1 : 0) |
5316 (o >= 4 && n.discoveryKey ? 2 : 0) |
5317 (o >= 4 && n.version ? 4 : 0)
5318 ;(e.fixed32.encode(d, n.callKey),
5319 e.buffer.encode(d, n.encryptionKey),
5320 e.uint.encode(d, n.createdAt),
5321 e.uint.encode(d, c),
5322 o >= 4 && n.endedAt && e.uint.encode(d, n.endedAt),
5323 o >= 4 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
5324 o >= 4 && n.version && e.uint.encode(d, n.version))
5325 },
5326 decode(d) {
5327 const n = e.fixed32.decode(d),
5328 c = e.buffer.decode(d),
5329 r = e.uint.decode(d),
5330 t = e.uint.decode(d)
5331 return {
5332 callKey: n,
5333 encryptionKey: c,
5334 createdAt: r,
5335 endedAt: o >= 4 && 1 & t ? e.uint.decode(d) : 0,
5336 discoveryKey: o >= 4 && 2 & t ? e.fixed32.decode(d) : null,
5337 version: o >= 4 && 4 & t ? e.uint.decode(d) : 0,
5338 }
5339 },
5340 },
5341 qp = {
5342 preencode(d, o) {
5343 ;(e.fixed32.preencode(d, o.callKey),
5344 e.fixed32.preencode(d, o.memberKey),
5345 e.uint.preencode(d, o.createdAt))
5346 },
5347 encode(d, o) {
5348 ;(e.fixed32.encode(d, o.callKey),
5349 e.fixed32.encode(d, o.memberKey),
5350 e.uint.encode(d, o.createdAt))
5351 },
5352 decode: (d) => ({
5353 callKey: e.fixed32.decode(d),
5354 memberKey: e.fixed32.decode(d),
5355 createdAt: e.uint.decode(d),
5356 }),
5357 },
5358 Mp = {
5359 preencode(d, n) {
5360 ;(e.fixed32.preencode(d, n.callKey),
5361 e.fixed32.preencode(d, n.deviceKey),
5362 e.fixed32.preencode(d, n.memberKey),
5363 e.uint.preencode(d, n.createdAt),
5364 d.end++,
5365 o >= 4 && n.swarmKey && e.fixed32.preencode(d, n.swarmKey))
5366 },
5367 encode(d, n) {
5368 const c = o >= 4 && n.swarmKey ? 1 : 0
5369 ;(e.fixed32.encode(d, n.callKey),
5370 e.fixed32.encode(d, n.deviceKey),
5371 e.fixed32.encode(d, n.memberKey),
5372 e.uint.encode(d, n.createdAt),
5373 e.uint.encode(d, c),
5374 o >= 4 && n.swarmKey && e.fixed32.encode(d, n.swarmKey))
5375 },
5376 decode(d) {
5377 const n = e.fixed32.decode(d),
5378 c = e.fixed32.decode(d),
5379 r = e.fixed32.decode(d),
5380 t = e.uint.decode(d),
5381 i = e.uint.decode(d)
5382 return {
5383 callKey: n,
5384 deviceKey: c,
5385 memberKey: r,
5386 createdAt: t,
5387 swarmKey: o >= 4 && 1 & i ? e.fixed32.decode(d) : null,
5388 }
5389 },
5390 },
5391 Cp = {
5392 preencode(d, o) {
5393 ;(e.fixed32.preencode(d, o.callKey),
5394 e.fixed32.preencode(d, o.deviceKey),
5395 e.buffer.preencode(d, o.streamKey),
5396 e.uint.preencode(d, o.createdAt))
5397 },
5398 encode(d, o) {
5399 ;(e.fixed32.encode(d, o.callKey),
5400 e.fixed32.encode(d, o.deviceKey),
5401 e.buffer.encode(d, o.streamKey),
5402 e.uint.encode(d, o.createdAt))
5403 },
5404 decode: (d) => ({
5405 callKey: e.fixed32.decode(d),
5406 deviceKey: e.fixed32.decode(d),
5407 streamKey: e.buffer.decode(d),
5408 createdAt: e.uint.decode(d),
5409 }),
5410 },
5411 Dp = {
5412 preencode(d, n) {
5413 ;(e.fixed32.preencode(d, n.callKey),
5414 d.end++,
5415 o >= 4 && n.selfDeviceKey && e.fixed32.preencode(d, n.selfDeviceKey))
5416 },
5417 encode(d, n) {
5418 const c = o >= 4 && n.selfDeviceKey ? 1 : 0
5419 ;(e.fixed32.encode(d, n.callKey),
5420 e.uint.encode(d, c),
5421 o >= 4 && n.selfDeviceKey && e.fixed32.encode(d, n.selfDeviceKey))
5422 },
5423 decode(d) {
5424 const n = e.fixed32.decode(d),
5425 c = e.uint.decode(d)
5426 return { callKey: n, selfDeviceKey: o >= 4 && 1 & c ? e.fixed32.decode(d) : null }
5427 },
5428 },
5429 Ip = {
5430 preencode(d, o) {
5431 e.uint.preencode(d, o.lastCleared)
5432 },
5433 encode(d, o) {
5434 e.uint.encode(d, o.lastCleared)
5435 },
5436 decode: (d) => ({ lastCleared: e.uint.decode(d) }),
5437 },
5438 Sp = { Nightly: "Nightly", Internal: "Internal", Production: "Production" },
5439 Fp = {
5440 preencode(e, d) {
5441 e.end++
5442 },
5443 encode(d, o) {
5444 switch (o) {
5445 case "Nightly":
5446 e.uint.encode(d, 1)
5447 break
5448 case "Internal":
5449 e.uint.encode(d, 2)
5450 break
5451 case "Production":
5452 e.uint.encode(d, 3)
5453 break
5454 default:
5455 throw new Error("Unknown enum")
5456 }
5457 },
5458 decode(d) {
5459 switch (e.uint.decode(d)) {
5460 case 1:
5461 return "Nightly"
5462 case 2:
5463 return "Internal"
5464 case 3:
5465 return "Production"
5466 default:
5467 return null
5468 }
5469 },
5470 },
5471 Lp = oe,
5472 jp = {
5473 preencode(e, d) {
5474 Lp.preencode(e, d.header)
5475 },
5476 encode(e, d) {
5477 Lp.encode(e, d.header)
5478 },
5479 decode: (e) => ({ header: Lp.decode(e) }),
5480 },
5481 Ep = oe,
5482 Bp = {
5483 preencode(e, d) {
5484 Ep.preencode(e, d.header)
5485 },
5486 encode(e, d) {
5487 Ep.encode(e, d.header)
5488 },
5489 decode: (e) => ({ header: Ep.decode(e) }),
5490 },
5491 Np = {
5492 preencode(d, n) {
5493 ;(Fp.preencode(d, n.buildType),
5494 d.end++,
5495 o >= 6 && n.latestOfflineAbi && e.uint.preencode(d, n.latestOfflineAbi))
5496 },
5497 encode(d, n) {
5498 const c = o >= 6 && n.latestOfflineAbi ? 1 : 0
5499 ;(Fp.encode(d, n.buildType),
5500 e.uint.encode(d, c),
5501 o >= 6 && n.latestOfflineAbi && e.uint.encode(d, n.latestOfflineAbi))
5502 },
5503 decode(d) {
5504 const n = Fp.decode(d),
5505 c = d.start < d.end ? e.uint.decode(d) : 0
5506 return { buildType: n, latestOfflineAbi: o >= 6 && 1 & c ? e.uint.decode(d) : 0 }
5507 },
5508 },
5509 Op = e.frame(P),
5510 Vp = Op,
5511 Up = e.frame(fe),
5512 Jp = Op,
5513 zp = Up,
5514 Wp = Up,
5515 Hp = e.frame(Pd),
5516 Gp = e.frame(lp),
5517 Qp = Gp,
5518 Xp = Op,
5519 Yp = Op,
5520 Zp = e.frame(Mc),
5521 $p = Zp,
5522 _p = Zp,
5523 eu = e.frame(Dp),
5524 du = Up
5525function ou(e) {
5526 o = e
5527}
5528function nu(d, n, c = 6) {
5529 return ((o = c), e.encode(tu(d), n))
5530}
5531function cu(d, n, c = 6) {
5532 return ((o = c), e.decode(tu(d), n))
5533}
5534function ru(e) {
5535 switch (e) {
5536 case "@keet/room-type":
5537 return U
5538 case "@keet/room-supported-language":
5539 return Y
5540 case "@keet/display-type":
5541 return Xo
5542 case "@keet/system-settings-keys":
5543 return An
5544 case "@keet/label-type":
5545 return Ln
5546 case "@keet-private-id/user-settings-key":
5547 return sr
5548 case "@local/tasks":
5549 return Dr
5550 case "@local/keet-state":
5551 return zt
5552 case "@api/core/lobby-record-change-type":
5553 return ca
5554 case "@keet/member-label-type":
5555 return op
5556 case "@keet/build-type":
5557 return Sp
5558 default:
5559 throw new Error("Enum not found " + e)
5560 }
5561}
5562function tu(e) {
5563 switch (e) {
5564 case "@keet/head":
5565 return n
5566 case "@keet/oplog-id":
5567 return c
5568 case "@keet/encryption-keypair":
5569 return r
5570 case "@keet/signing-keypair":
5571 return t
5572 case "@keet/room-keys":
5573 return i
5574 case "@keet/operation-header":
5575 return a
5576 case "@keet/blob-pointer":
5577 return s
5578 case "@keet/file-dimensions":
5579 return p
5580 case "@keet/file-metadata":
5581 return l
5582 case "@keet/external-drive-pointer":
5583 return f
5584 case "@keet/external-blob-pointer":
5585 return m
5586 case "@keet/file-pointer":
5587 return b
5588 case "@keet/file":
5589 return k
5590 case "@keet/image-file":
5591 return P
5592 case "@keet/file-status":
5593 return R
5594 case "@keet/file-record":
5595 return q
5596 case "@keet/device-status":
5597 return M
5598 case "@keet/member-status":
5599 return C
5600 case "@keet/member-moderation-status":
5601 return D
5602 case "@keet/abi":
5603 return I
5604 case "@keet/device-stats":
5605 return S
5606 case "@keet/member-stats":
5607 return F
5608 case "@keet/chat-stats":
5609 return L
5610 case "@keet/file-stats":
5611 return j
5612 case "@keet/stats":
5613 return V
5614 case "@keet/room-type":
5615 return J
5616 case "@keet/system-settings":
5617 return z
5618 case "@keet/system-digest":
5619 return G
5620 case "@keet/room-seed":
5621 return Q
5622 case "@keet/room-capabilities":
5623 return X
5624 case "@keet/room-supported-language":
5625 return Z
5626 case "@keet/room-config":
5627 return ee
5628 case "@keet/blind-peer":
5629 return de
5630 case "@keet/add-blind-peer-operation":
5631 return ce
5632 case "@keet/remove-blind-peer-operation":
5633 return te
5634 case "@keet/identity-attestation":
5635 return ie
5636 case "@keet/device-invitation":
5637 return ae
5638 case "@keet/device":
5639 return ue
5640 case "@keet/member-profile":
5641 return le
5642 case "@keet/device-profile":
5643 return fe
5644 case "@keet/member-update":
5645 return ye
5646 case "@keet/device-update":
5647 return xe
5648 case "@keet/member-contact-info":
5649 return ve
5650 case "@keet/signed-pairing-data":
5651 return ge
5652 case "@keet/device-request-identity":
5653 return ke
5654 case "@keet/device-response-identity":
5655 return he
5656 case "@keet/device-identity":
5657 return Ke
5658 case "@keet/device-request-with-invitation":
5659 return Te
5660 case "@keet/device-request-with-invitation-and-proof":
5661 return qe
5662 case "@keet/device-request-with-member-proof":
5663 return De
5664 case "@keet/device-request":
5665 return Fe
5666 case "@keet/device-response":
5667 return Ee
5668 case "@keet/invitation-metadata":
5669 return Be
5670 case "@keet/invitation":
5671 return Ve
5672 case "@keet/add-invitation-operation":
5673 return ze
5674 case "@keet/remove-invitation-operation":
5675 return He
5676 case "@keet/sendable-room-invitation":
5677 return Ge
5678 case "@keet/readonly-room-invitation":
5679 return Qe
5680 case "@keet/sendable-identity-invitation":
5681 return Xe
5682 case "@keet/sendable-contact-invitation":
5683 return Ye
5684 case "@keet/sendable-invitation":
5685 return od
5686 case "@keet/add-device-operation":
5687 return cd
5688 case "@keet/update-device-operation":
5689 return td
5690 case "@keet/remove-device-operation":
5691 return ad
5692 case "@keet/start-indexing-operation":
5693 return sd
5694 case "@keet/stop-indexing-operation":
5695 return pd
5696 case "@keet/join-request":
5697 return ld
5698 case "@keet/accept-join-request-operation":
5699 return yd
5700 case "@keet/reject-join-request-operation":
5701 return bd
5702 case "@keet/member":
5703 return kd
5704 case "@keet/full-member":
5705 return wd
5706 case "@keet/member-proofs":
5707 return Pd
5708 case "@keet/update-member-operation":
5709 return Ad
5710 case "@keet/change-member-status-operation":
5711 return Cd
5712 case "@keet/change-member-role-operation":
5713 return Id
5714 case "@keet/remove-member-operation":
5715 return Fd
5716 case "@keet/member-activity":
5717 return Ld
5718 case "@keet/member-joined-event":
5719 return jd
5720 case "@keet/member-left-event":
5721 return Ed
5722 case "@keet/member-removed-event":
5723 return Bd
5724 case "@keet/title-changed-chat-event":
5725 return Nd
5726 case "@keet/chat-event":
5727 return zd
5728 case "@keet/sendable-event":
5729 return Wd
5730 case "@keet/display-range":
5731 return Hd
5732 case "@keet/display-content-range":
5733 return Qd
5734 case "@keet/mention-display-item":
5735 return Yd
5736 case "@keet/translation-display-item":
5737 return $d
5738 case "@keet/link-preview":
5739 return oo
5740 case "@keet/display-link-item":
5741 return ro
5742 case "@keet/display":
5743 return xo
5744 case "@keet/oplog-message":
5745 return ko
5746 case "@keet/index-message":
5747 return wo
5748 case "@keet/full-index-message":
5749 return To
5750 case "@keet/message-status":
5751 return Ao
5752 case "@keet/message-index-id":
5753 return qo
5754 case "@keet/thread":
5755 return Co
5756 case "@keet/chat-message-record":
5757 return Fo
5758 case "@keet/full-chat-message-record":
5759 return Bo
5760 case "@keet/add-chat-message-operation":
5761 return Vo
5762 case "@keet/remove-chat-message-operation":
5763 return Jo
5764 case "@keet/update-chat-message-operation":
5765 return Ho
5766 case "@keet/pin-chat-message-operation":
5767 return Qo
5768 case "@keet/display-type":
5769 return Yo
5770 case "@keet/add-file-preview-operation":
5771 return $o
5772 case "@keet/reaction":
5773 return _o
5774 case "@keet/reactions-summary":
5775 return en
5776 case "@keet/reactions-digest":
5777 return on
5778 case "@keet/add-reaction-operation":
5779 return cn
5780 case "@keet/remove-reaction-operation":
5781 return tn
5782 case "@keet/update-room-config-operation":
5783 return pn
5784 case "@keet/group-member":
5785 return un
5786 case "@keet/user-registry-info":
5787 return ln
5788 case "@keet/room-identity":
5789 return mn
5790 case "@keet/genesis-operation":
5791 return Kn
5792 case "@keet/upgrade-operation":
5793 return Pn
5794 case "@keet/migrate-abi-operation":
5795 return Tn
5796 case "@keet/system-settings-keys":
5797 return qn
5798 case "@keet/update-system-settings-operation":
5799 return Dn
5800 case "@keet/test-increment-operation":
5801 return Sn
5802 case "@keet/test-collection-record-1":
5803 return Fn
5804 case "@keet/label-type":
5805 return jn
5806 case "@keet/chat-label":
5807 return En
5808 case "@keet/add-chat-label-operation":
5809 return Nn
5810 case "@keet/remove-chat-label-operation":
5811 return Vn
5812 case "@keet/chat-label-summary":
5813 return Un
5814 case "@keet/chat-label-digest":
5815 return zn
5816 case "@keet/update-read-length-operation":
5817 return Hn
5818 case "@keet/read-length":
5819 return Gn
5820 case "@keet/tmp-removed-member":
5821 return Qn
5822 case "@keet-private-id/contact":
5823 return Xn
5824 case "@keet-private-id/v3-room-migration-info":
5825 return Yn
5826 case "@keet-private-id/run-v3-migration-operation":
5827 return _n
5828 case "@keet-private-id/update-identity-operation":
5829 return dc
5830 case "@keet-private-id/counters":
5831 return oc
5832 case "@keet-private-id/stats":
5833 return nc
5834 case "@keet-private-id/add-entropy-operation":
5835 return cc
5836 case "@keet-private-id/pending-invitation-identity":
5837 return rc
5838 case "@keet-private-id/pending-invitation":
5839 return ic
5840 case "@keet-private-id/resolve-pending-invitation-operation":
5841 return sc
5842 case "@keet-private-id/add-pending-invitation-operation":
5843 return lc
5844 case "@keet-private-id/remove-pending-invitation-operation":
5845 return mc
5846 case "@keet-private-id/identity-swap":
5847 return yc
5848 case "@keet-private-id/identity-swap-v2":
5849 return xc
5850 case "@keet-private-id/room-status":
5851 return bc
5852 case "@keet-private-id/room":
5853 return hc
5854 case "@keet-private-id/add-room-operation":
5855 return wc
5856 case "@keet-private-id/remove-room-operation":
5857 return Rc
5858 case "@keet-private-id/update-room-status-operation":
5859 return qc
5860 case "@keet-private-id/contact-status":
5861 return Mc
5862 case "@keet-private-id/contact-record":
5863 return Cc
5864 case "@keet-private-id/add-contact-operation":
5865 return Sc
5866 case "@keet-private-id/update-contact-status-operation":
5867 return Lc
5868 case "@keet-private-id/remove-contact-operation":
5869 return Ec
5870 case "@keet-private-id/activate-contact-room-operation":
5871 return Nc
5872 case "@keet-private-id/contact-request-status":
5873 return Oc
5874 case "@keet-private-id/contact-request-body":
5875 return Jc
5876 case "@keet-private-id/contact-request":
5877 return Wc
5878 case "@keet-private-id/contact-request-record":
5879 return Xc
5880 case "@keet-private-id/add-contact-request-operation":
5881 return Zc
5882 case "@keet-private-id/update-contact-request-status-operation":
5883 return er
5884 case "@keet-private-id/profile-discovery-record-v1":
5885 return dr
5886 case "@keet-private-id/profile-discovery-record":
5887 return or
5888 case "@keet-private-id/unreads":
5889 return nr
5890 case "@keet-private-id/add-unreads-key-operation":
5891 return rr
5892 case "@keet-private-id/remove-unreads-key-operation":
5893 return ir
5894 case "@keet-private-id/settings":
5895 return ar
5896 case "@keet-private-id/user-settings-key":
5897 return pr
5898 case "@keet-private-id/update-settings-operation":
5899 return fr
5900 case "@local/background-sync-room":
5901 return mr
5902 case "@local/stats":
5903 return yr
5904 case "@local/migration-status":
5905 return xr
5906 case "@local/v3-private-profile-migration":
5907 return vr
5908 case "@local/v3-room-migration":
5909 return hr
5910 case "@local/room-migration-stats":
5911 return Kr
5912 case "@local/room-migration":
5913 return Pr
5914 case "@local/identity-status":
5915 return Rr
5916 case "@local/identity-swap":
5917 return Tr
5918 case "@local/identity-record":
5919 return Cr
5920 case "@local/tasks":
5921 return Ir
5922 case "@local/room-keys":
5923 return Sr
5924 case "@local/join-room-invitation-task":
5925 return Lr
5926 case "@local/join-room-response-task":
5927 return jr
5928 case "@local/fast-forward-to":
5929 return Er
5930 case "@local/add-room-fields":
5931 return Br
5932 case "@local/join-room-keys-task":
5933 return Or
5934 case "@local/create-room-task":
5935 return Ur
5936 case "@local/leave-room-task":
5937 return Jr
5938 case "@local/clear-room-task":
5939 return zr
5940 case "@local/restore-identity-task":
5941 return Wr
5942 case "@local/send-contact-request-task":
5943 return Gr
5944 case "@local/migrate-v2-room-task":
5945 return Qr
5946 case "@local/task":
5947 return ct
5948 case "@local/shared-invitation":
5949 return tt
5950 case "@local/room-status":
5951 return it
5952 case "@local/room-timestamps":
5953 return at
5954 case "@local/room":
5955 return wt
5956 case "@local/room-preferences":
5957 return Rt
5958 case "@local/room-metadata":
5959 return Tt
5960 case "@local/writer":
5961 return At
5962 case "@local/writer-append":
5963 return qt
5964 case "@local/member":
5965 return Ct
5966 case "@local/device":
5967 return It
5968 case "@local/file":
5969 return Ft
5970 case "@local/debug-flag":
5971 return Lt
5972 case "@local/debug":
5973 return Et
5974 case "@local/hyperdht-record":
5975 return Nt
5976 case "@local/unread":
5977 return Ot
5978 case "@local/error-record-details":
5979 return Vt
5980 case "@local/error-record":
5981 return Jt
5982 case "@local/keet-state":
5983 return Wt
5984 case "@local/file-stats":
5985 return Ht
5986 case "@api/request-header":
5987 return Gt
5988 case "@api/response-header":
5989 return Qt
5990 case "@api/subscription-request-header":
5991 return Xt
5992 case "@api/subscription-response-header":
5993 return Yt
5994 case "@api/boot-request":
5995 return $t
5996 case "@api/boot-response":
5997 return ei
5998 case "@api/self-destruct-request":
5999 return oi
6000 case "@api/core/have":
6001 return ni
6002 case "@api/core/create-room-request":
6003 return ii
6004 case "@api/core/create-room-response":
6005 return si
6006 case "@api/core/activate-room-request":
6007 return ui
6008 case "@api/core/deactivate-room-request":
6009 return fi
6010 case "@api/core/leave-room-request":
6011 return yi
6012 case "@api/core/leave-room-response":
6013 return bi
6014 case "@api/core/update-room-config-request":
6015 return ki
6016 case "@api/core/update-room-settings-request":
6017 return wi
6018 case "@api/core/update-room-status-request":
6019 return Ti
6020 case "@api/core/add-chat-message-request":
6021 return Mi
6022 case "@api/core/add-chat-message-response":
6023 return Di
6024 case "@api/core/edit-chat-message-request":
6025 return Fi
6026 case "@api/core/edit-chat-message-response":
6027 return ji
6028 case "@api/core/remove-chat-message-request":
6029 return Bi
6030 case "@api/core/remove-chat-message-response":
6031 return Oi
6032 case "@api/core/add-chat-reaction-request":
6033 return Ui
6034 case "@api/core/add-chat-reaction-response":
6035 return zi
6036 case "@api/core/remove-chat-reaction-request":
6037 return Hi
6038 case "@api/core/remove-chat-reaction-response":
6039 return Qi
6040 case "@api/core/want-lobby":
6041 return Xi
6042 case "@api/core/unwant-lobby":
6043 return Yi
6044 case "@api/core/want-room-info":
6045 return $i
6046 case "@api/core/want-chat":
6047 return _i
6048 case "@api/core/unwant-chat":
6049 return ea
6050 case "@api/core/want-members":
6051 return da
6052 case "@api/core/unwant-members":
6053 return oa
6054 case "@api/core/lobby-record":
6055 return na
6056 case "@api/core/lobby-record-change-type":
6057 return ra
6058 case "@api/core/lobby":
6059 return ia
6060 case "@api/core/lobby-room":
6061 return aa
6062 case "@api/core/room-role":
6063 return ua
6064 case "@api/core/room-info":
6065 return ya
6066 case "@api/core/room-info-status":
6067 return ba
6068 case "@api/core/room-info-digest":
6069 return ga
6070 case "@api/core/room-info-config":
6071 return ha
6072 case "@api/core/room-info-role":
6073 return wa
6074 case "@api/core/room-info-last-message":
6075 return Pa
6076 case "@api/core/member":
6077 return Ta
6078 case "@api/core/device":
6079 return qa
6080 case "@api/core/member-list-add":
6081 return Ma
6082 case "@api/core/member-list-remove":
6083 return Ca
6084 case "@api/core/chat-reset":
6085 return Ia
6086 case "@api/core/message-timestamps":
6087 return Sa
6088 case "@api/core/message":
6089 return Ba
6090 case "@api/core/message-info":
6091 return Va
6092 case "@api/core/message-info-chat":
6093 return Ja
6094 case "@api/core/message-info-member":
6095 return Wa
6096 case "@api/core/message-info-role":
6097 return Qa
6098 case "@api/core/message-info-reactions":
6099 return Ya
6100 case "@api/core/reactions":
6101 return $a
6102 case "@api/core/want-pairing":
6103 return _a
6104 case "@api/core/unwant-pairing":
6105 return es
6106 case "@api/core/pending-invitations":
6107 return os
6108 case "@api/core/join-request":
6109 return cs
6110 case "@api/core/join-requests":
6111 return ts
6112 case "@api/core/pairing":
6113 return ss
6114 case "@api/core/start-pairing-request":
6115 return us
6116 case "@api/core/start-pairing-response":
6117 return fs
6118 case "@api/core/invitation-permissions":
6119 return ms
6120 case "@api/core/create-room-invitation-request":
6121 return bs
6122 case "@api/core/create-room-invitation-response":
6123 return gs
6124 case "@api/core/create-identity-invitation-request":
6125 return hs
6126 case "@api/core/create-identity-invitation-response":
6127 return ws
6128 case "@api/core/accept-join-request-request":
6129 return Ts
6130 case "@api/core/accept-join-request-response":
6131 return qs
6132 case "@api/core/reject-join-request-request":
6133 return Ds
6134 case "@api/core/reject-join-request-response":
6135 return Ss
6136 case "@api/core/stop-pairing-request":
6137 return Ls
6138 case "@api/core/stop-pairing-response":
6139 return Es
6140 case "@api/core/update-profile-request":
6141 return Ns
6142 case "@api/core/want-identity":
6143 return Os
6144 case "@api/core/unwant-identity":
6145 return Vs
6146 case "@api/core/identity-status":
6147 return Us
6148 case "@api/core/identity":
6149 return Ws
6150 case "@api/core/identity-member":
6151 return Hs
6152 case "@api/core/identity-device":
6153 return Gs
6154 case "@api/debug/enable-request":
6155 return Xs
6156 case "@api/debug/enable-response":
6157 return Zs
6158 case "@api/debug/disable-request":
6159 return _s
6160 case "@api/debug/disable-response":
6161 return dp
6162 case "@keet/member-label-type":
6163 return np
6164 case "@keet/member-label":
6165 return cp
6166 case "@keet/add-member-label-operation":
6167 return tp
6168 case "@keet/member-label-summary":
6169 return ip
6170 case "@keet/member-label-digest":
6171 return sp
6172 case "@keet/move-indexer-operation":
6173 return up
6174 case "@keet/location-shared-event":
6175 return lp
6176 case "@keet/start-call":
6177 return yp
6178 case "@keet/join-call":
6179 return vp
6180 case "@keet/leave-call":
6181 return kp
6182 case "@keet/end-call":
6183 return Kp
6184 case "@keet/add-call-stream":
6185 return Pp
6186 case "@keet/remove-call-stream":
6187 return Tp
6188 case "@keet/call-record":
6189 return Ap
6190 case "@keet/call-member-record":
6191 return qp
6192 case "@keet/call-device-record":
6193 return Mp
6194 case "@keet/call-stream-record":
6195 return Cp
6196 case "@local/active-call":
6197 return Dp
6198 case "@local/file-gc-info":
6199 return Ip
6200 case "@keet/build-type":
6201 return Fp
6202 case "@keet/test-crash-operation":
6203 return jp
6204 case "@keet/test-dispatch-error-operation":
6205 return Bp
6206 case "@local/environment-record":
6207 return Np
6208 default:
6209 throw new Error("Encoder not found " + e)
6210 }
6211}
6212function iu(e, d = 6) {
6213 const n = tu(e)
6214 return {
6215 preencode(e, c) {
6216 ;((o = d), n.preencode(e, c))
6217 },
6218 encode(e, c) {
6219 ;((o = d), n.encode(e, c))
6220 },
6221 decode: (e) => ((o = d), n.decode(e)),
6222 }
6223}
6224const au = iu
6225module.exports = {
6226 resolveStruct: au,
6227 getStruct: iu,
6228 getEnum: ru,
6229 getEncoding: tu,
6230 encode: nu,
6231 decode: cu,
6232 setVersion: ou,
6233 version: o,
6234}
keet-core-4.14.4-pretty/schema/spec/api/hyperschema/schema.json +8085 -0
……@@ -0,0 +1,8085 @@
1{
2 "version": 6,
3 "schema": [
4 {
5 "name": "public-key",
6 "namespace": "keet",
7 "alias": "fixed32",
8 "version": 1
9 },
10 {
11 "name": "secret-key",
12 "namespace": "keet",
13 "alias": "buffer",
14 "version": 1
15 },
16 {
17 "name": "room-key",
18 "namespace": "keet",
19 "alias": "fixed32",
20 "version": 1
21 },
22 {
23 "name": "encryption-key",
24 "namespace": "keet",
25 "alias": "buffer",
26 "version": 1
27 },
28 {
29 "name": "room-discovery-key",
30 "namespace": "keet",
31 "alias": "fixed32",
32 "version": 1
33 },
34 {
35 "name": "core-key",
36 "namespace": "keet",
37 "alias": "fixed32",
38 "version": 1
39 },
40 {
41 "name": "device-key",
42 "namespace": "keet",
43 "alias": "fixed32",
44 "version": 1
45 },
46 {
47 "name": "invitation-id",
48 "namespace": "keet",
49 "alias": "fixed32",
50 "version": 1
51 },
52 {
53 "name": "member-key",
54 "namespace": "keet",
55 "alias": "fixed32",
56 "version": 1
57 },
58 {
59 "name": "swarm-key",
60 "namespace": "keet",
61 "alias": "fixed32",
62 "version": 1
63 },
64 {
65 "name": "core-seq",
66 "namespace": "keet",
67 "alias": "uint",
68 "version": 1
69 },
70 {
71 "name": "head",
72 "namespace": "keet",
73 "compact": true,
74 "flagsPosition": -1,
75 "fields": [
76 {
77 "name": "key",
78 "required": true,
79 "type": "@keet/device-key",
80 "version": 1
81 },
82 {
83 "name": "length",
84 "required": true,
85 "type": "uint",
86 "version": 1
87 }
88 ]
89 },
90 {
91 "name": "oplog-id",
92 "namespace": "keet",
93 "compact": true,
94 "flagsPosition": -1,
95 "fields": [
96 {
97 "name": "key",
98 "required": true,
99 "type": "@keet/device-key",
100 "version": 1
101 },
102 {
103 "name": "seq",
104 "required": true,
105 "type": "@keet/core-seq",
106 "version": 1
107 }
108 ]
109 },
110 {
111 "name": "encryption-keypair",
112 "namespace": "keet",
113 "compact": true,
114 "flagsPosition": -1,
115 "fields": [
116 {
117 "name": "publicKey",
118 "required": true,
119 "type": "fixed32",
120 "version": 1
121 },
122 {
123 "name": "secretKey",
124 "required": true,
125 "type": "fixed32",
126 "version": 1
127 }
128 ]
129 },
130 {
131 "name": "signing-keypair",
132 "namespace": "keet",
133 "compact": true,
134 "flagsPosition": -1,
135 "fields": [
136 {
137 "name": "publicKey",
138 "required": true,
139 "type": "fixed32",
140 "version": 1
141 },
142 {
143 "name": "secretKey",
144 "required": true,
145 "type": "fixed64",
146 "version": 1
147 }
148 ]
149 },
150 {
151 "name": "room-keys",
152 "namespace": "keet",
153 "compact": false,
154 "flagsPosition": 1,
155 "fields": [
156 {
157 "name": "key",
158 "required": true,
159 "type": "@keet/room-key",
160 "version": 1
161 },
162 {
163 "name": "encryptionKey",
164 "type": "@keet/encryption-key",
165 "version": 1
166 },
167 {
168 "name": "fastForwardTo",
169 "type": "fixed32",
170 "version": 1
171 }
172 ]
173 },
174 {
175 "name": "operation-header",
176 "namespace": "keet",
177 "compact": false,
178 "flagsPosition": -1,
179 "fields": [
180 {
181 "name": "timestamp",
182 "required": true,
183 "type": "uint",
184 "version": 1
185 }
186 ]
187 },
188 {
189 "name": "blob-pointer",
190 "namespace": "keet",
191 "compact": true,
192 "flagsPosition": -1,
193 "fields": [
194 {
195 "name": "blockOffset",
196 "required": true,
197 "type": "uint",
198 "version": 1
199 },
200 {
201 "name": "blockLength",
202 "required": true,
203 "type": "uint",
204 "version": 1
205 },
206 {
207 "name": "byteOffset",
208 "required": true,
209 "type": "uint",
210 "version": 1
211 },
212 {
213 "name": "byteLength",
214 "required": true,
215 "type": "uint",
216 "version": 1
217 }
218 ]
219 },
220 {
221 "name": "file-dimensions",
222 "namespace": "keet",
223 "compact": false,
224 "flagsPosition": -1,
225 "fields": [
226 {
227 "name": "width",
228 "required": true,
229 "type": "uint",
230 "version": 1
231 },
232 {
233 "name": "height",
234 "required": true,
235 "type": "uint",
236 "version": 1
237 }
238 ]
239 },
240 {
241 "name": "file-metadata",
242 "namespace": "keet",
243 "compact": false,
244 "flagsPosition": 0,
245 "fields": [
246 {
247 "name": "name",
248 "type": "string",
249 "version": 1
250 },
251 {
252 "name": "mimetype",
253 "type": "string",
254 "version": 1
255 },
256 {
257 "name": "dimensions",
258 "type": "@keet/file-dimensions",
259 "version": 1
260 },
261 {
262 "name": "userdata",
263 "type": "buffer",
264 "version": 1
265 },
266 {
267 "name": "duration",
268 "type": "uint",
269 "version": 1
270 },
271 {
272 "name": "isPreview",
273 "type": "bool",
274 "version": 1
275 }
276 ]
277 },
278 {
279 "name": "external-drive-pointer",
280 "namespace": "keet",
281 "compact": false,
282 "flagsPosition": -1,
283 "fields": [
284 {
285 "name": "key",
286 "required": true,
287 "type": "@keet/core-key",
288 "version": 1
289 },
290 {
291 "name": "path",
292 "required": true,
293 "type": "string",
294 "version": 1
295 },
296 {
297 "name": "version",
298 "required": true,
299 "type": "uint",
300 "version": 1
301 },
302 {
303 "name": "size",
304 "required": true,
305 "type": "uint",
306 "version": 1
307 }
308 ]
309 },
310 {
311 "name": "external-blob-pointer",
312 "namespace": "keet",
313 "compact": false,
314 "flagsPosition": -1,
315 "fields": [
316 {
317 "name": "key",
318 "required": true,
319 "type": "@keet/core-key",
320 "version": 1
321 },
322 {
323 "name": "blob",
324 "required": true,
325 "type": "@keet/blob-pointer",
326 "version": 1
327 }
328 ]
329 },
330 {
331 "name": "file-pointer",
332 "namespace": "keet",
333 "compact": false,
334 "flagsPosition": 0,
335 "fields": [
336 {
337 "name": "inlined",
338 "type": "buffer",
339 "version": 1
340 },
341 {
342 "name": "blob",
343 "type": "@keet/blob-pointer",
344 "version": 1
345 },
346 {
347 "name": "externalBlob",
348 "type": "@keet/external-blob-pointer",
349 "version": 1
350 },
351 {
352 "name": "externalDrive",
353 "type": "@keet/external-drive-pointer",
354 "version": 1
355 }
356 ]
357 },
358 {
359 "name": "file",
360 "namespace": "keet",
361 "compact": false,
362 "flagsPosition": 1,
363 "fields": [
364 {
365 "name": "pointer",
366 "required": true,
367 "type": "@keet/file-pointer",
368 "version": 1
369 },
370 {
371 "name": "metadata",
372 "type": "@keet/file-metadata",
373 "version": 1
374 },
375 {
376 "name": "preview",
377 "type": "@keet/image-file",
378 "version": 1
379 },
380 {
381 "name": "hash",
382 "type": "fixed32",
383 "version": 1
384 }
385 ]
386 },
387 {
388 "name": "image-file",
389 "namespace": "keet",
390 "compact": false,
391 "flagsPosition": 0,
392 "fields": [
393 {
394 "name": "small",
395 "type": "@keet/file",
396 "version": 1
397 },
398 {
399 "name": "medium",
400 "type": "@keet/file",
401 "version": 1
402 },
403 {
404 "name": "large",
405 "type": "@keet/file",
406 "version": 1
407 }
408 ]
409 },
410 {
411 "name": "file-status",
412 "namespace": "keet",
413 "compact": false,
414 "flagsPosition": 0,
415 "fields": [
416 {
417 "name": "isDeleted",
418 "type": "bool",
419 "version": 1
420 }
421 ]
422 },
423 {
424 "name": "file-record",
425 "namespace": "keet",
426 "compact": false,
427 "flagsPosition": 4,
428 "fields": [
429 {
430 "name": "id",
431 "required": true,
432 "type": "uint",
433 "version": 1
434 },
435 {
436 "name": "oplog",
437 "required": true,
438 "type": "@keet/oplog-id",
439 "version": 1
440 },
441 {
442 "name": "status",
443 "required": true,
444 "type": "@keet/file-status",
445 "version": 1
446 },
447 {
448 "name": "file",
449 "required": true,
450 "type": "@keet/file",
451 "version": 1
452 },
453 {
454 "name": "version",
455 "type": "uint",
456 "version": 1
457 }
458 ]
459 },
460 {
461 "name": "device-status",
462 "namespace": "keet",
463 "compact": false,
464 "flagsPosition": 0,
465 "fields": [
466 {
467 "name": "isActive",
468 "type": "bool",
469 "version": 1
470 },
471 {
472 "name": "isIndexing",
473 "type": "bool",
474 "version": 1
475 }
476 ]
477 },
478 {
479 "name": "member-status",
480 "namespace": "keet",
481 "compact": false,
482 "flagsPosition": 0,
483 "fields": [
484 {
485 "name": "isAdmin",
486 "type": "bool",
487 "version": 1
488 },
489 {
490 "name": "isModerator",
491 "type": "bool",
492 "version": 1
493 },
494 {
495 "name": "isPending",
496 "type": "bool",
497 "version": 1
498 },
499 {
500 "name": "isActive",
501 "type": "bool",
502 "version": 1
503 },
504 {
505 "name": "isMuted",
506 "type": "bool",
507 "version": 1
508 },
509 {
510 "name": "isBanned",
511 "type": "bool",
512 "version": 1
513 },
514 {
515 "name": "isShadowBanned",
516 "type": "bool",
517 "version": 1
518 },
519 {
520 "name": "isRemoved",
521 "type": "bool",
522 "version": 1
523 }
524 ]
525 },
526 {
527 "name": "member-moderation-status",
528 "namespace": "keet",
529 "compact": false,
530 "flagsPosition": 0,
531 "fields": [
532 {
533 "name": "isMuted",
534 "type": "bool",
535 "version": 1
536 },
537 {
538 "name": "isBanned",
539 "type": "bool",
540 "version": 1
541 },
542 {
543 "name": "isShadowBanned",
544 "type": "bool",
545 "version": 1
546 }
547 ]
548 },
549 {
550 "name": "abi",
551 "namespace": "keet",
552 "compact": false,
553 "flagsPosition": -1,
554 "fields": [
555 {
556 "name": "version",
557 "required": true,
558 "type": "uint",
559 "version": 1
560 }
561 ]
562 },
563 {
564 "name": "device-stats",
565 "namespace": "keet",
566 "compact": false,
567 "flagsPosition": -1,
568 "fields": [
569 {
570 "name": "total",
571 "required": true,
572 "type": "uint",
573 "version": 1
574 },
575 {
576 "name": "active",
577 "required": true,
578 "type": "uint",
579 "version": 1
580 }
581 ]
582 },
583 {
584 "name": "member-stats",
585 "namespace": "keet",
586 "compact": false,
587 "flagsPosition": -1,
588 "fields": [
589 {
590 "name": "total",
591 "required": true,
592 "type": "uint",
593 "version": 1
594 },
595 {
596 "name": "active",
597 "required": true,
598 "type": "uint",
599 "version": 1
600 },
601 {
602 "name": "pending",
603 "required": true,
604 "type": "uint",
605 "version": 1
606 }
607 ]
608 },
609 {
610 "name": "chat-stats",
611 "namespace": "keet",
612 "compact": false,
613 "flagsPosition": 4,
614 "fields": [
615 {
616 "name": "clock",
617 "required": true,
618 "type": "uint",
619 "version": 1
620 },
621 {
622 "name": "pinned",
623 "required": true,
624 "type": "uint",
625 "version": 1
626 },
627 {
628 "name": "threads",
629 "required": true,
630 "type": "uint",
631 "version": 1
632 },
633 {
634 "name": "timestamp",
635 "required": true,
636 "type": "uint",
637 "version": 1
638 },
639 {
640 "name": "flagsClock",
641 "type": "uint",
642 "version": 1
643 }
644 ]
645 },
646 {
647 "name": "file-stats",
648 "namespace": "keet",
649 "compact": false,
650 "flagsPosition": -1,
651 "fields": [
652 {
653 "name": "clock",
654 "required": true,
655 "type": "uint",
656 "version": 1
657 }
658 ]
659 },
660 {
661 "name": "stats",
662 "namespace": "keet",
663 "compact": false,
664 "flagsPosition": -1,
665 "fields": [
666 {
667 "name": "devices",
668 "required": true,
669 "type": "@keet/device-stats",
670 "version": 1
671 },
672 {
673 "name": "members",
674 "required": true,
675 "type": "@keet/member-stats",
676 "version": 1
677 },
678 {
679 "name": "chat",
680 "required": true,
681 "type": "@keet/chat-stats",
682 "version": 1
683 },
684 {
685 "name": "files",
686 "required": true,
687 "type": "@keet/file-stats",
688 "version": 1
689 }
690 ]
691 },
692 {
693 "name": "room-type",
694 "namespace": "keet",
695 "offset": 1,
696 "enum": [
697 {
698 "key": "Default",
699 "version": 1
700 },
701 {
702 "key": "Broadcast",
703 "version": 1
704 },
705 {
706 "key": "DirectMessage",
707 "version": 1
708 }
709 ],
710 "strings": false
711 },
712 {
713 "name": "system-settings",
714 "namespace": "keet",
715 "compact": false,
716 "flagsPosition": 0,
717 "fields": [
718 {
719 "name": "roomType",
720 "type": "@keet/room-type",
721 "version": 1
722 },
723 {
724 "name": "isExperimental",
725 "type": "bool",
726 "version": 1
727 },
728 {
729 "name": "isJoiningDisabled",
730 "type": "bool",
731 "version": 1
732 },
733 {
734 "name": "isAppendingDisabled",
735 "type": "bool",
736 "version": 1
737 },
738 {
739 "name": "isCallingDisabled",
740 "type": "bool",
741 "version": 1
742 },
743 {
744 "name": "isMembershipEventsDisabled",
745 "type": "bool",
746 "version": 1
747 },
748 {
749 "name": "isAttachmentsDisabled",
750 "type": "bool",
751 "version": 4
752 },
753 {
754 "name": "isLinksDisabled",
755 "type": "bool",
756 "version": 4
757 },
758 {
759 "name": "buildType",
760 "type": "@keet/build-type",
761 "version": 5
762 }
763 ]
764 },
765 {
766 "name": "system-digest",
767 "namespace": "keet",
768 "compact": false,
769 "flagsPosition": -1,
770 "fields": [
771 {
772 "name": "abi",
773 "required": true,
774 "type": "@keet/abi",
775 "version": 1
776 },
777 {
778 "name": "settings",
779 "required": true,
780 "type": "@keet/system-settings",
781 "version": 1
782 },
783 {
784 "name": "creationTime",
785 "required": true,
786 "type": "uint",
787 "version": 1
788 }
789 ]
790 },
791 {
792 "name": "room-seed",
793 "namespace": "keet",
794 "compact": false,
795 "flagsPosition": -1,
796 "fields": [
797 {
798 "name": "seed",
799 "required": true,
800 "type": "fixed32",
801 "version": 1
802 }
803 ]
804 },
805 {
806 "name": "room-capabilities",
807 "namespace": "keet",
808 "compact": false,
809 "flagsPosition": -1,
810 "fields": [
811 {
812 "name": "mailboxKeyPair",
813 "required": true,
814 "type": "@keet/encryption-keypair",
815 "version": 1
816 },
817 {
818 "name": "discoveryKeyPair",
819 "required": true,
820 "type": "@keet/signing-keypair",
821 "version": 1
822 },
823 {
824 "name": "wakeupTopic",
825 "required": true,
826 "type": "@keet/room-discovery-key",
827 "version": 1
828 },
829 {
830 "name": "swarmTopic",
831 "required": true,
832 "type": "@keet/room-discovery-key",
833 "version": 1
834 }
835 ]
836 },
837 {
838 "name": "room-supported-language",
839 "namespace": "keet",
840 "offset": 1,
841 "enum": [
842 {
843 "key": "en",
844 "version": 1
845 },
846 {
847 "key": "it",
848 "version": 1
849 },
850 {
851 "key": "ru",
852 "version": 1
853 },
854 {
855 "key": "es",
856 "version": 1
857 },
858 {
859 "key": "de",
860 "version": 1
861 }
862 ],
863 "strings": true
864 },
865 {
866 "name": "room-config",
867 "namespace": "keet",
868 "compact": false,
869 "flagsPosition": 0,
870 "fields": [
871 {
872 "name": "title",
873 "type": "string",
874 "version": 1
875 },
876 {
877 "name": "avatar",
878 "type": "@keet/image-file",
879 "version": 1
880 },
881 {
882 "name": "description",
883 "type": "string",
884 "version": 1
885 },
886 {
887 "name": "supportedLanguages",
888 "array": true,
889 "type": "@keet/room-supported-language",
890 "version": 1
891 },
892 {
893 "name": "blindPeers",
894 "array": true,
895 "type": "fixed32",
896 "version": 1
897 }
898 ]
899 },
900 {
901 "name": "blind-peer",
902 "namespace": "keet",
903 "compact": false,
904 "flagsPosition": -1,
905 "fields": [
906 {
907 "name": "key",
908 "required": true,
909 "type": "@keet/public-key",
910 "version": 1
911 }
912 ]
913 },
914 {
915 "name": "add-blind-peer-operation",
916 "namespace": "keet",
917 "compact": false,
918 "flagsPosition": -1,
919 "fields": [
920 {
921 "name": "header",
922 "required": true,
923 "type": "@keet/operation-header",
924 "version": 1
925 },
926 {
927 "name": "peer",
928 "required": true,
929 "type": "@keet/blind-peer",
930 "version": 1
931 }
932 ]
933 },
934 {
935 "name": "remove-blind-peer-operation",
936 "namespace": "keet",
937 "compact": false,
938 "flagsPosition": -1,
939 "fields": [
940 {
941 "name": "header",
942 "required": true,
943 "type": "@keet/operation-header",
944 "version": 1
945 },
946 {
947 "name": "key",
948 "required": true,
949 "type": "@keet/public-key",
950 "version": 1
951 }
952 ]
953 },
954 {
955 "name": "identity-attestation",
956 "namespace": "keet",
957 "compact": true,
958 "flagsPosition": -1,
959 "fields": [
960 {
961 "name": "memberKey",
962 "required": true,
963 "type": "@keet/member-key",
964 "version": 1
965 },
966 {
967 "name": "proof",
968 "required": true,
969 "type": "buffer",
970 "version": 1
971 }
972 ]
973 },
974 {
975 "name": "device-invitation",
976 "namespace": "keet",
977 "compact": false,
978 "flagsPosition": -1,
979 "fields": [
980 {
981 "name": "id",
982 "required": true,
983 "type": "@keet/invitation-id",
984 "version": 1
985 },
986 {
987 "name": "response",
988 "required": true,
989 "type": "buffer",
990 "version": 1
991 }
992 ]
993 },
994 {
995 "name": "device",
996 "namespace": "keet",
997 "compact": false,
998 "flagsPosition": 4,
999 "fields": [
1000 {
1001 "name": "key",
1002 "required": true,
1003 "type": "@keet/device-key",
1004 "version": 1
1005 },
1006 {
1007 "name": "memberKey",
1008 "required": true,
1009 "type": "@keet/member-key",
1010 "version": 1
1011 },
1012 {
1013 "name": "status",
1014 "required": true,
1015 "type": "@keet/device-status",
1016 "version": 1
1017 },
1018 {
1019 "name": "profile",
1020 "required": true,
1021 "type": "@keet/device-profile",
1022 "version": 1
1023 },
1024 {
1025 "name": "invitation",
1026 "type": "@keet/device-invitation",
1027 "version": 1
1028 }
1029 ]
1030 },
1031 {
1032 "name": "member-profile",
1033 "namespace": "keet",
1034 "compact": false,
1035 "flagsPosition": 1,
1036 "fields": [
1037 {
1038 "name": "timestamp",
1039 "required": true,
1040 "type": "uint",
1041 "version": 1
1042 },
1043 {
1044 "name": "mailbox",
1045 "type": "@keet/public-key",
1046 "version": 1
1047 },
1048 {
1049 "name": "displayName",
1050 "type": "string",
1051 "version": 1
1052 },
1053 {
1054 "name": "avatar",
1055 "type": "@keet/image-file",
1056 "version": 1
1057 },
1058 {
1059 "name": "username",
1060 "type": "string",
1061 "version": 1
1062 }
1063 ]
1064 },
1065 {
1066 "name": "device-profile",
1067 "namespace": "keet",
1068 "compact": false,
1069 "flagsPosition": 0,
1070 "fields": [
1071 {
1072 "name": "swarmKey",
1073 "type": "@keet/swarm-key",
1074 "version": 1
1075 },
1076 {
1077 "name": "name",
1078 "type": "string",
1079 "version": 1
1080 },
1081 {
1082 "name": "isMobile",
1083 "type": "bool",
1084 "version": 1
1085 },
1086 {
1087 "name": "buildType",
1088 "type": "@keet/build-type",
1089 "version": 5
1090 }
1091 ]
1092 },
1093 {
1094 "name": "member-update",
1095 "namespace": "keet",
1096 "compact": false,
1097 "flagsPosition": -1,
1098 "fields": [
1099 {
1100 "name": "profile",
1101 "required": true,
1102 "type": "@keet/member-profile",
1103 "version": 1
1104 },
1105 {
1106 "name": "attestation",
1107 "required": true,
1108 "type": "@keet/identity-attestation",
1109 "version": 1
1110 }
1111 ]
1112 },
1113 {
1114 "name": "device-update",
1115 "namespace": "keet",
1116 "compact": false,
1117 "flagsPosition": -1,
1118 "fields": [
1119 {
1120 "name": "profile",
1121 "required": true,
1122 "type": "@keet/device-profile",
1123 "version": 1
1124 },
1125 {
1126 "name": "attestation",
1127 "required": true,
1128 "type": "@keet/identity-attestation",
1129 "version": 1
1130 }
1131 ]
1132 },
1133 {
1134 "name": "member-contact-info",
1135 "namespace": "keet",
1136 "compact": false,
1137 "flagsPosition": -1,
1138 "fields": [
1139 {
1140 "name": "profile",
1141 "required": true,
1142 "type": "@keet/member-profile",
1143 "version": 1
1144 },
1145 {
1146 "name": "attestation",
1147 "required": true,
1148 "type": "@keet/identity-attestation",
1149 "version": 1
1150 }
1151 ]
1152 },
1153 {
1154 "name": "signed-pairing-data",
1155 "namespace": "keet",
1156 "compact": false,
1157 "flagsPosition": -1,
1158 "fields": [
1159 {
1160 "name": "id",
1161 "required": true,
1162 "type": "@keet/invitation-id",
1163 "version": 1
1164 },
1165 {
1166 "name": "data",
1167 "required": true,
1168 "type": "buffer",
1169 "version": 1
1170 },
1171 {
1172 "name": "signature",
1173 "required": true,
1174 "type": "buffer",
1175 "version": 1
1176 }
1177 ]
1178 },
1179 {
1180 "name": "device-request-identity",
1181 "namespace": "keet",
1182 "compact": false,
1183 "flagsPosition": -1,
1184 "fields": [
1185 {
1186 "name": "devicePublicKey",
1187 "required": true,
1188 "type": "@keet/public-key",
1189 "version": 1
1190 }
1191 ]
1192 },
1193 {
1194 "name": "device-response-identity",
1195 "namespace": "keet",
1196 "compact": false,
1197 "flagsPosition": -1,
1198 "fields": [
1199 {
1200 "name": "privateProfileIdentity",
1201 "required": true,
1202 "type": "@keet/identity-attestation",
1203 "version": 1
1204 },
1205 {
1206 "name": "deviceProof",
1207 "required": true,
1208 "type": "buffer",
1209 "version": 1
1210 }
1211 ]
1212 },
1213 {
1214 "name": "device-identity",
1215 "namespace": "keet",
1216 "compact": false,
1217 "flagsPosition": -1,
1218 "fields": [
1219 {
1220 "name": "deviceKey",
1221 "required": true,
1222 "type": "@keet/device-key",
1223 "version": 1
1224 },
1225 {
1226 "name": "privateProfileIdentity",
1227 "required": true,
1228 "type": "@keet/identity-attestation",
1229 "version": 1
1230 },
1231 {
1232 "name": "deviceProof",
1233 "required": true,
1234 "type": "buffer",
1235 "version": 1
1236 }
1237 ]
1238 },
1239 {
1240 "name": "device-request-with-invitation",
1241 "namespace": "keet",
1242 "compact": false,
1243 "flagsPosition": 4,
1244 "fields": [
1245 {
1246 "name": "deviceKey",
1247 "required": true,
1248 "type": "@keet/device-key",
1249 "version": 1
1250 },
1251 {
1252 "name": "keyPair",
1253 "required": true,
1254 "type": "@keet/signing-keypair",
1255 "version": 1
1256 },
1257 {
1258 "name": "device",
1259 "required": true,
1260 "type": "@keet/device-update",
1261 "version": 1
1262 },
1263 {
1264 "name": "member",
1265 "required": true,
1266 "type": "@keet/member-update",
1267 "version": 1
1268 },
1269 {
1270 "name": "identity",
1271 "type": "@keet/device-request-identity",
1272 "version": 1
1273 }
1274 ]
1275 },
1276 {
1277 "name": "device-request-with-invitation-and-proof",
1278 "namespace": "keet",
1279 "compact": false,
1280 "flagsPosition": -1,
1281 "fields": [
1282 {
1283 "name": "id",
1284 "required": true,
1285 "type": "@keet/invitation-id",
1286 "version": 1
1287 },
1288 {
1289 "name": "request",
1290 "required": true,
1291 "type": "@keet/device-request-with-invitation",
1292 "version": 1
1293 },
1294 {
1295 "name": "signature",
1296 "required": true,
1297 "type": "buffer",
1298 "version": 1
1299 }
1300 ]
1301 },
1302 {
1303 "name": "device-request-with-member-proof",
1304 "namespace": "keet",
1305 "compact": false,
1306 "flagsPosition": 1,
1307 "fields": [
1308 {
1309 "name": "device",
1310 "required": true,
1311 "type": "@keet/device-update",
1312 "version": 1
1313 },
1314 {
1315 "name": "member",
1316 "type": "@keet/member-update",
1317 "version": 1
1318 }
1319 ]
1320 },
1321 {
1322 "name": "device-request",
1323 "namespace": "keet",
1324 "compact": false,
1325 "flagsPosition": 0,
1326 "fields": [
1327 {
1328 "name": "withInvitation",
1329 "type": "@keet/device-request-with-invitation-and-proof",
1330 "version": 1
1331 },
1332 {
1333 "name": "withMemberProof",
1334 "type": "@keet/device-request-with-member-proof",
1335 "version": 1
1336 }
1337 ]
1338 },
1339 {
1340 "name": "device-response",
1341 "namespace": "keet",
1342 "compact": false,
1343 "flagsPosition": 1,
1344 "fields": [
1345 {
1346 "name": "signedKeys",
1347 "required": true,
1348 "type": "@keet/signed-pairing-data",
1349 "version": 1
1350 },
1351 {
1352 "name": "identity",
1353 "type": "@keet/device-response-identity",
1354 "version": 1
1355 }
1356 ]
1357 },
1358 {
1359 "name": "invitation-metadata",
1360 "namespace": "keet",
1361 "compact": false,
1362 "flagsPosition": 0,
1363 "fields": [
1364 {
1365 "name": "expiration",
1366 "type": "uint",
1367 "version": 1
1368 },
1369 {
1370 "name": "requiresConfirmation",
1371 "type": "bool",
1372 "version": 1
1373 },
1374 {
1375 "name": "canModerate",
1376 "type": "bool",
1377 "version": 1
1378 },
1379 {
1380 "name": "canAdmin",
1381 "type": "bool",
1382 "version": 1
1383 },
1384 {
1385 "name": "buildType",
1386 "type": "@keet/build-type",
1387 "version": 5
1388 }
1389 ]
1390 },
1391 {
1392 "name": "invitation",
1393 "namespace": "keet",
1394 "compact": false,
1395 "flagsPosition": 3,
1396 "fields": [
1397 {
1398 "name": "id",
1399 "required": true,
1400 "type": "@keet/invitation-id",
1401 "version": 1
1402 },
1403 {
1404 "name": "response",
1405 "required": true,
1406 "type": "@keet/signed-pairing-data",
1407 "version": 1
1408 },
1409 {
1410 "name": "metadata",
1411 "required": true,
1412 "type": "@keet/invitation-metadata",
1413 "version": 1
1414 },
1415 {
1416 "name": "anchor",
1417 "type": "@keet/head",
1418 "version": 1
1419 },
1420 {
1421 "name": "isActive",
1422 "type": "bool",
1423 "version": 1
1424 }
1425 ]
1426 },
1427 {
1428 "name": "add-invitation-operation",
1429 "namespace": "keet",
1430 "compact": false,
1431 "flagsPosition": -1,
1432 "fields": [
1433 {
1434 "name": "header",
1435 "required": true,
1436 "type": "@keet/operation-header",
1437 "version": 1
1438 },
1439 {
1440 "name": "invitation",
1441 "required": true,
1442 "type": "@keet/invitation",
1443 "version": 1
1444 }
1445 ]
1446 },
1447 {
1448 "name": "remove-invitation-operation",
1449 "namespace": "keet",
1450 "compact": false,
1451 "flagsPosition": -1,
1452 "fields": [
1453 {
1454 "name": "header",
1455 "required": true,
1456 "type": "@keet/operation-header",
1457 "version": 1
1458 },
1459 {
1460 "name": "id",
1461 "required": true,
1462 "type": "fixed32",
1463 "version": 1
1464 }
1465 ]
1466 },
1467 {
1468 "name": "sendable-room-invitation",
1469 "namespace": "keet",
1470 "compact": false,
1471 "flagsPosition": -1,
1472 "fields": [
1473 {
1474 "name": "mailbox",
1475 "required": true,
1476 "type": "fixed32",
1477 "version": 1
1478 },
1479 {
1480 "name": "invitationSeed",
1481 "required": true,
1482 "type": "fixed32",
1483 "version": 1
1484 },
1485 {
1486 "name": "anchor",
1487 "required": true,
1488 "type": "@keet/head",
1489 "version": 1
1490 }
1491 ]
1492 },
1493 {
1494 "name": "readonly-room-invitation",
1495 "namespace": "keet",
1496 "compact": false,
1497 "flagsPosition": 3,
1498 "fields": [
1499 {
1500 "name": "roomKey",
1501 "required": true,
1502 "type": "fixed32",
1503 "version": 1
1504 },
1505 {
1506 "name": "encryptionKey",
1507 "required": true,
1508 "type": "fixed32",
1509 "version": 1
1510 },
1511 {
1512 "name": "seed",
1513 "required": true,
1514 "type": "fixed32",
1515 "version": 1
1516 },
1517 {
1518 "name": "fastForwardTo",
1519 "type": "fixed32",
1520 "version": 1
1521 }
1522 ]
1523 },
1524 {
1525 "name": "sendable-identity-invitation",
1526 "namespace": "keet",
1527 "compact": false,
1528 "flagsPosition": -1,
1529 "fields": [
1530 {
1531 "name": "mailbox",
1532 "required": true,
1533 "type": "fixed32",
1534 "version": 1
1535 },
1536 {
1537 "name": "invitationSeed",
1538 "required": true,
1539 "type": "fixed32",
1540 "version": 1
1541 },
1542 {
1543 "name": "anchor",
1544 "required": true,
1545 "type": "@keet/head",
1546 "version": 1
1547 },
1548 {
1549 "name": "identityPublicKey",
1550 "required": true,
1551 "type": "@keet/member-key",
1552 "version": 1
1553 }
1554 ]
1555 },
1556 {
1557 "name": "sendable-contact-invitation",
1558 "namespace": "keet",
1559 "compact": false,
1560 "flagsPosition": -1,
1561 "fields": [
1562 {
1563 "name": "mailbox",
1564 "required": true,
1565 "type": "fixed32",
1566 "version": 1
1567 }
1568 ]
1569 },
1570 {
1571 "name": "sendable-invitation",
1572 "namespace": "keet",
1573 "compact": false,
1574 "flagsPosition": 0,
1575 "fields": [
1576 {
1577 "name": "room",
1578 "type": "@keet/sendable-room-invitation",
1579 "version": 1
1580 },
1581 {
1582 "name": "identity",
1583 "type": "@keet/sendable-identity-invitation",
1584 "version": 1
1585 },
1586 {
1587 "name": "contact",
1588 "type": "@keet/sendable-contact-invitation",
1589 "version": 1
1590 },
1591 {
1592 "name": "readonly",
1593 "type": "@keet/readonly-room-invitation",
1594 "version": 1
1595 },
1596 {
1597 "name": "additionalNodes",
1598 "array": true,
1599 "type": "ipv4Address",
1600 "version": 1
1601 },
1602 {
1603 "name": "buildType",
1604 "type": "@keet/build-type",
1605 "version": 5
1606 }
1607 ]
1608 },
1609 {
1610 "name": "add-device-operation",
1611 "namespace": "keet",
1612 "compact": false,
1613 "flagsPosition": -1,
1614 "fields": [
1615 {
1616 "name": "header",
1617 "required": true,
1618 "type": "@keet/operation-header",
1619 "version": 1
1620 },
1621 {
1622 "name": "blindRequest",
1623 "required": true,
1624 "type": "buffer",
1625 "version": 1
1626 }
1627 ]
1628 },
1629 {
1630 "name": "update-device-operation",
1631 "namespace": "keet",
1632 "compact": false,
1633 "flagsPosition": 1,
1634 "fields": [
1635 {
1636 "name": "header",
1637 "required": true,
1638 "type": "@keet/operation-header",
1639 "version": 1
1640 },
1641 {
1642 "name": "profile",
1643 "type": "@keet/device-profile",
1644 "version": 1
1645 }
1646 ]
1647 },
1648 {
1649 "name": "remove-device-operation",
1650 "namespace": "keet",
1651 "compact": false,
1652 "flagsPosition": -1,
1653 "fields": [
1654 {
1655 "name": "header",
1656 "required": true,
1657 "type": "@keet/operation-header",
1658 "version": 1
1659 },
1660 {
1661 "name": "key",
1662 "required": true,
1663 "type": "@keet/device-key",
1664 "version": 1
1665 }
1666 ]
1667 },
1668 {
1669 "name": "start-indexing-operation",
1670 "namespace": "keet",
1671 "compact": false,
1672 "flagsPosition": -1,
1673 "fields": []
1674 },
1675 {
1676 "name": "stop-indexing-operation",
1677 "namespace": "keet",
1678 "compact": false,
1679 "flagsPosition": -1,
1680 "fields": []
1681 },
1682 {
1683 "name": "join-request",
1684 "namespace": "keet",
1685 "compact": false,
1686 "flagsPosition": -1,
1687 "fields": [
1688 {
1689 "name": "deviceKey",
1690 "required": true,
1691 "type": "@keet/device-key",
1692 "version": 1
1693 },
1694 {
1695 "name": "id",
1696 "required": true,
1697 "type": "@keet/invitation-id",
1698 "version": 1
1699 },
1700 {
1701 "name": "request",
1702 "required": true,
1703 "type": "@keet/device-request-with-invitation",
1704 "version": 1
1705 }
1706 ]
1707 },
1708 {
1709 "name": "accept-join-request-operation",
1710 "namespace": "keet",
1711 "compact": false,
1712 "flagsPosition": 2,
1713 "fields": [
1714 {
1715 "name": "header",
1716 "required": true,
1717 "type": "@keet/operation-header",
1718 "version": 1
1719 },
1720 {
1721 "name": "deviceKey",
1722 "required": true,
1723 "type": "@keet/device-key",
1724 "version": 1
1725 },
1726 {
1727 "name": "identity",
1728 "type": "@keet/device-response-identity",
1729 "version": 1
1730 }
1731 ]
1732 },
1733 {
1734 "name": "reject-join-request-operation",
1735 "namespace": "keet",
1736 "compact": false,
1737 "flagsPosition": -1,
1738 "fields": [
1739 {
1740 "name": "header",
1741 "required": true,
1742 "type": "@keet/operation-header",
1743 "version": 1
1744 },
1745 {
1746 "name": "deviceKey",
1747 "required": true,
1748 "type": "@keet/device-key",
1749 "version": 1
1750 }
1751 ]
1752 },
1753 {
1754 "name": "member",
1755 "namespace": "keet",
1756 "compact": false,
1757 "flagsPosition": -1,
1758 "fields": [
1759 {
1760 "name": "key",
1761 "required": true,
1762 "type": "@keet/member-key",
1763 "version": 1
1764 },
1765 {
1766 "name": "status",
1767 "required": true,
1768 "type": "@keet/member-status",
1769 "version": 1
1770 },
1771 {
1772 "name": "profile",
1773 "required": true,
1774 "type": "@keet/member-profile",
1775 "version": 1
1776 }
1777 ]
1778 },
1779 {
1780 "name": "full-member",
1781 "namespace": "keet",
1782 "compact": false,
1783 "flagsPosition": 3,
1784 "fields": [
1785 {
1786 "name": "key",
1787 "required": true,
1788 "type": "@keet/member-key",
1789 "version": 1
1790 },
1791 {
1792 "name": "status",
1793 "required": true,
1794 "type": "@keet/member-status",
1795 "version": 1
1796 },
1797 {
1798 "name": "profile",
1799 "required": true,
1800 "type": "@keet/member-profile",
1801 "version": 1
1802 },
1803 {
1804 "name": "proofs",
1805 "type": "@keet/member-proofs",
1806 "version": 1
1807 }
1808 ]
1809 },
1810 {
1811 "name": "member-proofs",
1812 "namespace": "keet",
1813 "compact": false,
1814 "flagsPosition": 1,
1815 "fields": [
1816 {
1817 "name": "key",
1818 "required": true,
1819 "type": "@keet/member-key",
1820 "version": 1
1821 },
1822 {
1823 "name": "profileAttestation",
1824 "type": "buffer",
1825 "version": 1
1826 },
1827 {
1828 "name": "latestReceipt",
1829 "type": "buffer",
1830 "version": 1
1831 }
1832 ]
1833 },
1834 {
1835 "name": "update-member-operation",
1836 "namespace": "keet",
1837 "compact": false,
1838 "flagsPosition": -1,
1839 "fields": [
1840 {
1841 "name": "header",
1842 "required": true,
1843 "type": "@keet/operation-header",
1844 "version": 1
1845 },
1846 {
1847 "name": "member",
1848 "required": true,
1849 "type": "@keet/member-update",
1850 "version": 1
1851 }
1852 ]
1853 },
1854 {
1855 "name": "change-member-status-operation",
1856 "namespace": "keet",
1857 "compact": false,
1858 "flagsPosition": -1,
1859 "fields": [
1860 {
1861 "name": "header",
1862 "required": true,
1863 "type": "@keet/operation-header",
1864 "version": 1
1865 },
1866 {
1867 "name": "memberKey",
1868 "required": true,
1869 "type": "@keet/member-key",
1870 "version": 1
1871 },
1872 {
1873 "name": "key",
1874 "required": true,
1875 "type": "uint",
1876 "version": 1
1877 },
1878 {
1879 "name": "status",
1880 "required": true,
1881 "type": "@keet/member-moderation-status",
1882 "version": 1
1883 }
1884 ]
1885 },
1886 {
1887 "name": "change-member-role-operation",
1888 "namespace": "keet",
1889 "compact": false,
1890 "flagsPosition": 2,
1891 "fields": [
1892 {
1893 "name": "header",
1894 "required": true,
1895 "type": "@keet/operation-header",
1896 "version": 1
1897 },
1898 {
1899 "name": "key",
1900 "required": true,
1901 "type": "@keet/member-key",
1902 "version": 1
1903 },
1904 {
1905 "name": "isModerator",
1906 "type": "bool",
1907 "version": 1
1908 },
1909 {
1910 "name": "isAdmin",
1911 "type": "bool",
1912 "version": 1
1913 }
1914 ]
1915 },
1916 {
1917 "name": "remove-member-operation",
1918 "namespace": "keet",
1919 "compact": false,
1920 "flagsPosition": -1,
1921 "fields": [
1922 {
1923 "name": "header",
1924 "required": true,
1925 "type": "@keet/operation-header",
1926 "version": 1
1927 },
1928 {
1929 "name": "key",
1930 "required": true,
1931 "type": "@keet/member-key",
1932 "version": 1
1933 }
1934 ]
1935 },
1936 {
1937 "name": "member-activity",
1938 "namespace": "keet",
1939 "compact": false,
1940 "flagsPosition": -1,
1941 "fields": [
1942 {
1943 "name": "key",
1944 "required": true,
1945 "type": "@keet/member-key",
1946 "version": 1
1947 },
1948 {
1949 "name": "mentions",
1950 "required": true,
1951 "type": "uint",
1952 "version": 1
1953 }
1954 ]
1955 },
1956 {
1957 "name": "member-joined-event",
1958 "namespace": "keet",
1959 "compact": false,
1960 "flagsPosition": 0,
1961 "fields": [
1962 {
1963 "name": "memberKey",
1964 "type": "@keet/member-key",
1965 "version": 1
1966 }
1967 ]
1968 },
1969 {
1970 "name": "member-left-event",
1971 "namespace": "keet",
1972 "compact": false,
1973 "flagsPosition": 0,
1974 "fields": [
1975 {
1976 "name": "memberKey",
1977 "type": "@keet/member-key",
1978 "version": 1
1979 }
1980 ]
1981 },
1982 {
1983 "name": "member-removed-event",
1984 "namespace": "keet",
1985 "compact": false,
1986 "flagsPosition": 0,
1987 "fields": [
1988 {
1989 "name": "memberKey",
1990 "type": "@keet/member-key",
1991 "version": 1
1992 }
1993 ]
1994 },
1995 {
1996 "name": "title-changed-chat-event",
1997 "namespace": "keet",
1998 "compact": false,
1999 "flagsPosition": 0,
2000 "fields": [
2001 {
2002 "name": "from",
2003 "type": "string",
2004 "version": 1
2005 },
2006 {
2007 "name": "to",
2008 "type": "string",
2009 "version": 1
2010 }
2011 ]
2012 },
2013 {
2014 "name": "chat-event",
2015 "namespace": "keet",
2016 "compact": false,
2017 "flagsPosition": 0,
2018 "fields": [
2019 {
2020 "name": "memberJoined",
2021 "type": "@keet/member-joined-event",
2022 "version": 1
2023 },
2024 {
2025 "name": "memberLeft",
2026 "type": "@keet/member-left-event",
2027 "version": 1
2028 },
2029 {
2030 "name": "titleChanged",
2031 "type": "@keet/title-changed-chat-event",
2032 "version": 1
2033 },
2034 {
2035 "name": "callStarted",
2036 "type": "bool",
2037 "version": 1
2038 },
2039 {
2040 "name": "callHangup",
2041 "type": "bool",
2042 "version": 1
2043 },
2044 {
2045 "name": "callMissed",
2046 "type": "bool",
2047 "version": 1
2048 },
2049 {
2050 "name": "roomAvatarChanged",
2051 "type": "bool",
2052 "version": 1
2053 },
2054 {
2055 "name": "invitationCreated",
2056 "type": "bool",
2057 "version": 1
2058 },
2059 {
2060 "name": "memberRemoved",
2061 "type": "@keet/member-removed-event",
2062 "version": 1
2063 },
2064 {
2065 "name": "locationShared",
2066 "type": "@keet/location-shared-event",
2067 "version": 3
2068 }
2069 ]
2070 },
2071 {
2072 "name": "sendable-event",
2073 "namespace": "keet",
2074 "compact": false,
2075 "flagsPosition": 0,
2076 "fields": [
2077 {
2078 "name": "callStarted",
2079 "type": "bool",
2080 "version": 1
2081 },
2082 {
2083 "name": "callHangup",
2084 "type": "bool",
2085 "version": 1
2086 },
2087 {
2088 "name": "callMissed",
2089 "type": "bool",
2090 "version": 1
2091 },
2092 {
2093 "name": "locationShared",
2094 "type": "@keet/location-shared-event",
2095 "version": 3
2096 }
2097 ]
2098 },
2099 {
2100 "name": "display-range",
2101 "namespace": "keet",
2102 "compact": false,
2103 "flagsPosition": -1,
2104 "fields": [
2105 {
2106 "name": "start",
2107 "required": true,
2108 "type": "uint",
2109 "version": 1
2110 },
2111 {
2112 "name": "length",
2113 "required": true,
2114 "type": "uint",
2115 "version": 1
2116 }
2117 ]
2118 },
2119 {
2120 "name": "display-content-range",
2121 "namespace": "keet",
2122 "compact": false,
2123 "flagsPosition": -1,
2124 "fields": [
2125 {
2126 "name": "range",
2127 "required": true,
2128 "type": "@keet/display-range",
2129 "version": 1
2130 },
2131 {
2132 "name": "content",
2133 "required": true,
2134 "type": "string",
2135 "version": 1
2136 }
2137 ]
2138 },
2139 {
2140 "name": "mention-display-item",
2141 "namespace": "keet",
2142 "compact": false,
2143 "flagsPosition": -1,
2144 "fields": [
2145 {
2146 "name": "range",
2147 "required": true,
2148 "type": "@keet/display-range",
2149 "version": 1
2150 },
2151 {
2152 "name": "memberKey",
2153 "required": true,
2154 "type": "@keet/member-key",
2155 "version": 1
2156 }
2157 ]
2158 },
2159 {
2160 "name": "translation-display-item",
2161 "namespace": "keet",
2162 "compact": false,
2163 "flagsPosition": -1,
2164 "fields": [
2165 {
2166 "name": "range",
2167 "required": true,
2168 "type": "@keet/display-range",
2169 "version": 1
2170 },
2171 {
2172 "name": "language",
2173 "required": true,
2174 "type": "@keet/room-supported-language",
2175 "version": 1
2176 },
2177 {
2178 "name": "text",
2179 "required": true,
2180 "type": "string",
2181 "version": 1
2182 }
2183 ]
2184 },
2185 {
2186 "name": "link-preview",
2187 "namespace": "keet",
2188 "compact": false,
2189 "flagsPosition": 0,
2190 "fields": [
2191 {
2192 "name": "title",
2193 "type": "string",
2194 "version": 1
2195 },
2196 {
2197 "name": "description",
2198 "type": "string",
2199 "version": 1
2200 },
2201 {
2202 "name": "file",
2203 "type": "@keet/file",
2204 "version": 1
2205 },
2206 {
2207 "name": "files",
2208 "array": true,
2209 "type": "uint",
2210 "version": 1
2211 }
2212 ]
2213 },
2214 {
2215 "name": "display-link-item",
2216 "namespace": "keet",
2217 "compact": false,
2218 "flagsPosition": 2,
2219 "fields": [
2220 {
2221 "name": "range",
2222 "required": true,
2223 "type": "@keet/display-range",
2224 "version": 1
2225 },
2226 {
2227 "name": "url",
2228 "required": true,
2229 "type": "string",
2230 "version": 1
2231 },
2232 {
2233 "name": "preview",
2234 "type": "@keet/link-preview",
2235 "version": 1
2236 }
2237 ]
2238 },
2239 {
2240 "name": "display",
2241 "namespace": "keet",
2242 "compact": false,
2243 "flagsPosition": 0,
2244 "fields": [
2245 {
2246 "name": "mention",
2247 "array": true,
2248 "type": "@keet/mention-display-item",
2249 "version": 1
2250 },
2251 {
2252 "name": "httpLink",
2253 "array": true,
2254 "type": "@keet/display-link-item",
2255 "version": 1
2256 },
2257 {
2258 "name": "pearLink",
2259 "array": true,
2260 "type": "@keet/display-link-item",
2261 "version": 1
2262 },
2263 {
2264 "name": "bold",
2265 "array": true,
2266 "type": "@keet/display-range",
2267 "version": 1
2268 },
2269 {
2270 "name": "italic",
2271 "array": true,
2272 "type": "@keet/display-range",
2273 "version": 1
2274 },
2275 {
2276 "name": "code",
2277 "array": true,
2278 "type": "@keet/display-range",
2279 "version": 1
2280 },
2281 {
2282 "name": "emoji",
2283 "array": true,
2284 "type": "@keet/display-content-range",
2285 "version": 1
2286 },
2287 {
2288 "name": "codeBlock",
2289 "array": true,
2290 "type": "@keet/display-range",
2291 "version": 1
2292 },
2293 {
2294 "name": "strike",
2295 "array": true,
2296 "type": "@keet/display-range",
2297 "version": 1
2298 },
2299 {
2300 "name": "translation",
2301 "array": true,
2302 "type": "@keet/translation-display-item",
2303 "version": 1
2304 }
2305 ]
2306 },
2307 {
2308 "name": "oplog-message",
2309 "namespace": "keet",
2310 "compact": false,
2311 "flagsPosition": 0,
2312 "fields": [
2313 {
2314 "name": "text",
2315 "type": "string",
2316 "version": 1
2317 },
2318 {
2319 "name": "files",
2320 "array": true,
2321 "type": "@keet/file",
2322 "version": 1
2323 },
2324 {
2325 "name": "display",
2326 "type": "@keet/display",
2327 "version": 1
2328 },
2329 {
2330 "name": "replyTo",
2331 "type": "@keet/oplog-id",
2332 "version": 1
2333 },
2334 {
2335 "name": "parent",
2336 "type": "@keet/oplog-id",
2337 "version": 1
2338 },
2339 {
2340 "name": "event",
2341 "type": "@keet/sendable-event",
2342 "version": 1
2343 },
2344 {
2345 "name": "forwarded",
2346 "type": "bool",
2347 "version": 3
2348 }
2349 ]
2350 },
2351 {
2352 "name": "index-message",
2353 "namespace": "keet",
2354 "compact": false,
2355 "flagsPosition": 0,
2356 "fields": [
2357 {
2358 "name": "text",
2359 "type": "string",
2360 "version": 1
2361 },
2362 {
2363 "name": "files",
2364 "array": true,
2365 "type": "uint",
2366 "version": 1
2367 },
2368 {
2369 "name": "display",
2370 "type": "@keet/display",
2371 "version": 1
2372 },
2373 {
2374 "name": "replyTo",
2375 "type": "@keet/oplog-id",
2376 "version": 1
2377 },
2378 {
2379 "name": "parent",
2380 "type": "@keet/oplog-id",
2381 "version": 1
2382 },
2383 {
2384 "name": "forwarded",
2385 "type": "bool",
2386 "version": 3
2387 }
2388 ]
2389 },
2390 {
2391 "name": "full-index-message",
2392 "namespace": "keet",
2393 "compact": false,
2394 "flagsPosition": 0,
2395 "fields": [
2396 {
2397 "name": "text",
2398 "type": "string",
2399 "version": 1
2400 },
2401 {
2402 "name": "files",
2403 "array": true,
2404 "type": "@keet/file",
2405 "version": 1
2406 },
2407 {
2408 "name": "display",
2409 "type": "@keet/display",
2410 "version": 1
2411 },
2412 {
2413 "name": "replyTo",
2414 "type": "@keet/oplog-id",
2415 "version": 1
2416 },
2417 {
2418 "name": "parent",
2419 "type": "@keet/oplog-id",
2420 "version": 1
2421 },
2422 {
2423 "name": "forwarded",
2424 "type": "bool",
2425 "version": 3
2426 }
2427 ]
2428 },
2429 {
2430 "name": "message-status",
2431 "namespace": "keet",
2432 "compact": false,
2433 "flagsPosition": 0,
2434 "fields": [
2435 {
2436 "name": "isEdited",
2437 "type": "bool",
2438 "version": 1
2439 },
2440 {
2441 "name": "isDeleted",
2442 "type": "bool",
2443 "version": 1
2444 },
2445 {
2446 "name": "isPinned",
2447 "type": "bool",
2448 "version": 1
2449 }
2450 ]
2451 },
2452 {
2453 "name": "message-index-id",
2454 "namespace": "keet",
2455 "compact": true,
2456 "flagsPosition": -1,
2457 "fields": [
2458 {
2459 "name": "thread",
2460 "required": true,
2461 "type": "uint",
2462 "version": 1
2463 },
2464 {
2465 "name": "index",
2466 "required": true,
2467 "type": "uint",
2468 "version": 1
2469 }
2470 ]
2471 },
2472 {
2473 "name": "thread",
2474 "namespace": "keet",
2475 "compact": false,
2476 "flagsPosition": 2,
2477 "fields": [
2478 {
2479 "name": "id",
2480 "required": true,
2481 "type": "uint",
2482 "version": 1
2483 },
2484 {
2485 "name": "count",
2486 "required": true,
2487 "type": "uint",
2488 "version": 1
2489 },
2490 {
2491 "name": "parent",
2492 "type": "@keet/oplog-id",
2493 "version": 1
2494 },
2495 {
2496 "name": "stats",
2497 "type": "@keet/stats",
2498 "version": 1
2499 }
2500 ]
2501 },
2502 {
2503 "name": "chat-message-record",
2504 "namespace": "keet",
2505 "compact": false,
2506 "flagsPosition": 4,
2507 "fields": [
2508 {
2509 "name": "id",
2510 "required": true,
2511 "type": "@keet/message-index-id",
2512 "version": 1
2513 },
2514 {
2515 "name": "oplog",
2516 "required": true,
2517 "type": "@keet/oplog-id",
2518 "version": 1
2519 },
2520 {
2521 "name": "clock",
2522 "required": true,
2523 "type": "uint",
2524 "version": 1
2525 },
2526 {
2527 "name": "timestamp",
2528 "required": true,
2529 "type": "uint",
2530 "version": 1
2531 },
2532 {
2533 "name": "editedAt",
2534 "type": "uint",
2535 "version": 1
2536 },
2537 {
2538 "name": "status",
2539 "required": true,
2540 "type": "@keet/message-status",
2541 "version": 1
2542 },
2543 {
2544 "name": "message",
2545 "type": "@keet/index-message",
2546 "version": 1
2547 },
2548 {
2549 "name": "event",
2550 "type": "@keet/chat-event",
2551 "version": 1
2552 }
2553 ]
2554 },
2555 {
2556 "name": "full-chat-message-record",
2557 "namespace": "keet",
2558 "compact": false,
2559 "flagsPosition": 4,
2560 "fields": [
2561 {
2562 "name": "id",
2563 "required": true,
2564 "type": "@keet/message-index-id",
2565 "version": 1
2566 },
2567 {
2568 "name": "oplog",
2569 "required": true,
2570 "type": "@keet/oplog-id",
2571 "version": 1
2572 },
2573 {
2574 "name": "clock",
2575 "required": true,
2576 "type": "uint",
2577 "version": 1
2578 },
2579 {
2580 "name": "timestamp",
2581 "required": true,
2582 "type": "uint",
2583 "version": 1
2584 },
2585 {
2586 "name": "editedAt",
2587 "type": "uint",
2588 "version": 1
2589 },
2590 {
2591 "name": "status",
2592 "required": true,
2593 "type": "@keet/message-status",
2594 "version": 1
2595 },
2596 {
2597 "name": "message",
2598 "type": "@keet/full-index-message",
2599 "version": 1
2600 },
2601 {
2602 "name": "event",
2603 "type": "@keet/chat-event",
2604 "version": 1
2605 }
2606 ]
2607 },
2608 {
2609 "name": "add-chat-message-operation",
2610 "namespace": "keet",
2611 "compact": false,
2612 "flagsPosition": -1,
2613 "fields": [
2614 {
2615 "name": "header",
2616 "required": true,
2617 "type": "@keet/operation-header",
2618 "version": 1
2619 },
2620 {
2621 "name": "message",
2622 "required": true,
2623 "type": "@keet/oplog-message",
2624 "version": 1
2625 }
2626 ]
2627 },
2628 {
2629 "name": "remove-chat-message-operation",
2630 "namespace": "keet",
2631 "compact": false,
2632 "flagsPosition": -1,
2633 "fields": [
2634 {
2635 "name": "header",
2636 "required": true,
2637 "type": "@keet/operation-header",
2638 "version": 1
2639 },
2640 {
2641 "name": "oplog",
2642 "required": true,
2643 "type": "@keet/oplog-id",
2644 "version": 1
2645 }
2646 ]
2647 },
2648 {
2649 "name": "update-chat-message-operation",
2650 "namespace": "keet",
2651 "compact": false,
2652 "flagsPosition": -1,
2653 "fields": [
2654 {
2655 "name": "header",
2656 "required": true,
2657 "type": "@keet/operation-header",
2658 "version": 1
2659 },
2660 {
2661 "name": "oplog",
2662 "required": true,
2663 "type": "@keet/oplog-id",
2664 "version": 1
2665 },
2666 {
2667 "name": "message",
2668 "required": true,
2669 "type": "@keet/oplog-message",
2670 "version": 1
2671 }
2672 ]
2673 },
2674 {
2675 "name": "pin-chat-message-operation",
2676 "namespace": "keet",
2677 "compact": false,
2678 "flagsPosition": 2,
2679 "fields": [
2680 {
2681 "name": "header",
2682 "required": true,
2683 "type": "@keet/operation-header",
2684 "version": 1
2685 },
2686 {
2687 "name": "oplog",
2688 "required": true,
2689 "type": "@keet/oplog-id",
2690 "version": 1
2691 },
2692 {
2693 "name": "isPinned",
2694 "type": "bool",
2695 "version": 1
2696 }
2697 ]
2698 },
2699 {
2700 "name": "display-type",
2701 "namespace": "keet",
2702 "offset": 1,
2703 "enum": [
2704 {
2705 "key": "HttpLink",
2706 "version": 1
2707 },
2708 {
2709 "key": "PearLink",
2710 "version": 1
2711 }
2712 ],
2713 "strings": false
2714 },
2715 {
2716 "name": "add-file-preview-operation",
2717 "namespace": "keet",
2718 "compact": false,
2719 "flagsPosition": 4,
2720 "fields": [
2721 {
2722 "name": "header",
2723 "required": true,
2724 "type": "@keet/operation-header",
2725 "version": 1
2726 },
2727 {
2728 "name": "oplog",
2729 "required": true,
2730 "type": "@keet/oplog-id",
2731 "version": 1
2732 },
2733 {
2734 "name": "index",
2735 "required": true,
2736 "type": "uint",
2737 "version": 1
2738 },
2739 {
2740 "name": "preview",
2741 "required": true,
2742 "type": "@keet/image-file",
2743 "version": 1
2744 },
2745 {
2746 "name": "displayType",
2747 "type": "@keet/display-type",
2748 "version": 1
2749 }
2750 ]
2751 },
2752 {
2753 "name": "reaction",
2754 "namespace": "keet",
2755 "compact": false,
2756 "flagsPosition": -1,
2757 "fields": [
2758 {
2759 "name": "id",
2760 "required": true,
2761 "type": "@keet/message-index-id",
2762 "version": 1
2763 },
2764 {
2765 "name": "sender",
2766 "required": true,
2767 "type": "@keet/member-key",
2768 "version": 1
2769 },
2770 {
2771 "name": "clock",
2772 "required": true,
2773 "type": "uint",
2774 "version": 1
2775 },
2776 {
2777 "name": "reaction",
2778 "required": true,
2779 "type": "string",
2780 "version": 1
2781 }
2782 ]
2783 },
2784 {
2785 "name": "reactions-summary",
2786 "namespace": "keet",
2787 "compact": false,
2788 "flagsPosition": -1,
2789 "fields": [
2790 {
2791 "name": "text",
2792 "required": true,
2793 "type": "string",
2794 "version": 1
2795 },
2796 {
2797 "name": "count",
2798 "required": true,
2799 "type": "uint",
2800 "version": 1
2801 }
2802 ]
2803 },
2804 {
2805 "name": "reactions-digest",
2806 "namespace": "keet",
2807 "compact": false,
2808 "flagsPosition": 3,
2809 "fields": [
2810 {
2811 "name": "id",
2812 "required": true,
2813 "type": "@keet/message-index-id",
2814 "version": 1
2815 },
2816 {
2817 "name": "total",
2818 "required": true,
2819 "type": "uint",
2820 "version": 1
2821 },
2822 {
2823 "name": "reactions",
2824 "required": true,
2825 "array": true,
2826 "type": "@keet/reactions-summary",
2827 "version": 1
2828 },
2829 {
2830 "name": "editedAt",
2831 "type": "uint",
2832 "version": 1
2833 }
2834 ]
2835 },
2836 {
2837 "name": "add-reaction-operation",
2838 "namespace": "keet",
2839 "compact": false,
2840 "flagsPosition": -1,
2841 "fields": [
2842 {
2843 "name": "header",
2844 "required": true,
2845 "type": "@keet/operation-header",
2846 "version": 1
2847 },
2848 {
2849 "name": "oplog",
2850 "required": true,
2851 "type": "@keet/oplog-id",
2852 "version": 1
2853 },
2854 {
2855 "name": "reaction",
2856 "required": true,
2857 "type": "string",
2858 "version": 1
2859 }
2860 ]
2861 },
2862 {
2863 "name": "remove-reaction-operation",
2864 "namespace": "keet",
2865 "compact": false,
2866 "flagsPosition": -1,
2867 "fields": [
2868 {
2869 "name": "header",
2870 "required": true,
2871 "type": "@keet/operation-header",
2872 "version": 1
2873 },
2874 {
2875 "name": "oplog",
2876 "required": true,
2877 "type": "@keet/oplog-id",
2878 "version": 1
2879 },
2880 {
2881 "name": "reaction",
2882 "required": true,
2883 "type": "string",
2884 "version": 1
2885 }
2886 ]
2887 },
2888 {
2889 "name": "update-room-config-operation",
2890 "namespace": "keet",
2891 "compact": false,
2892 "flagsPosition": -1,
2893 "fields": [
2894 {
2895 "name": "header",
2896 "required": true,
2897 "type": "@keet/operation-header",
2898 "version": 1
2899 },
2900 {
2901 "name": "key",
2902 "required": true,
2903 "type": "uint",
2904 "version": 1
2905 },
2906 {
2907 "name": "config",
2908 "required": true,
2909 "type": "@keet/room-config",
2910 "version": 1
2911 }
2912 ]
2913 },
2914 {
2915 "name": "group-member",
2916 "namespace": "keet",
2917 "compact": false,
2918 "flagsPosition": 2,
2919 "fields": [
2920 {
2921 "name": "memberKey",
2922 "required": true,
2923 "type": "@keet/member-key",
2924 "version": 1
2925 },
2926 {
2927 "name": "displayName",
2928 "required": true,
2929 "type": "string",
2930 "version": 1
2931 },
2932 {
2933 "name": "avatar",
2934 "type": "@keet/image-file",
2935 "version": 1
2936 }
2937 ]
2938 },
2939 {
2940 "name": "user-registry-info",
2941 "namespace": "keet",
2942 "compact": false,
2943 "flagsPosition": 1,
2944 "fields": [
2945 {
2946 "name": "key",
2947 "required": true,
2948 "type": "@keet/core-key",
2949 "version": 1
2950 },
2951 {
2952 "name": "username",
2953 "type": "string",
2954 "version": 1
2955 }
2956 ]
2957 },
2958 {
2959 "name": "room-identity",
2960 "namespace": "keet",
2961 "compact": false,
2962 "flagsPosition": 1,
2963 "fields": [
2964 {
2965 "name": "publicKey",
2966 "required": true,
2967 "type": "@keet/member-key",
2968 "version": 1
2969 },
2970 {
2971 "name": "discoveryCoreKey",
2972 "type": "@keet/core-key",
2973 "version": 1
2974 },
2975 {
2976 "name": "userRegistry",
2977 "type": "@keet/user-registry-info",
2978 "version": 1
2979 }
2980 ]
2981 },
2982 {
2983 "name": "genesis-operation",
2984 "namespace": "keet",
2985 "compact": false,
2986 "flagsPosition": 3,
2987 "fields": [
2988 {
2989 "name": "header",
2990 "required": true,
2991 "type": "@keet/operation-header",
2992 "version": 1
2993 },
2994 {
2995 "name": "digest",
2996 "required": true,
2997 "type": "@keet/system-digest",
2998 "version": 1
2999 },
3000 {
3001 "name": "capabilities",
3002 "required": true,
3003 "type": "@keet/room-seed",
3004 "version": 1
3005 },
3006 {
3007 "name": "config",
3008 "type": "@keet/room-config",
3009 "version": 1
3010 },
3011 {
3012 "name": "identity",
3013 "type": "@keet/room-identity",
3014 "version": 1
3015 },
3016 {
3017 "name": "bootstrapDevice",
3018 "type": "@keet/device-update",
3019 "version": 1
3020 },
3021 {
3022 "name": "initialMembers",
3023 "array": true,
3024 "type": "@keet/member-update",
3025 "version": 1
3026 }
3027 ]
3028 },
3029 {
3030 "name": "upgrade-operation",
3031 "namespace": "keet",
3032 "compact": false,
3033 "flagsPosition": -1,
3034 "fields": [
3035 {
3036 "name": "header",
3037 "required": true,
3038 "type": "@keet/operation-header",
3039 "version": 1
3040 },
3041 {
3042 "name": "version",
3043 "required": true,
3044 "type": "uint",
3045 "version": 1
3046 }
3047 ]
3048 },
3049 {
3050 "name": "migrate-abi-operation",
3051 "namespace": "keet",
3052 "compact": false,
3053 "flagsPosition": 3,
3054 "fields": [
3055 {
3056 "name": "header",
3057 "required": true,
3058 "type": "@keet/operation-header",
3059 "version": 1
3060 },
3061 {
3062 "name": "from",
3063 "required": true,
3064 "type": "uint",
3065 "version": 1
3066 },
3067 {
3068 "name": "to",
3069 "required": true,
3070 "type": "uint",
3071 "version": 1
3072 },
3073 {
3074 "name": "buildType",
3075 "type": "@keet/build-type",
3076 "version": 5
3077 }
3078 ]
3079 },
3080 {
3081 "name": "system-settings-keys",
3082 "namespace": "keet",
3083 "offset": 1,
3084 "enum": [
3085 {
3086 "key": "RoomType",
3087 "version": 1
3088 },
3089 {
3090 "key": "IsExperimental",
3091 "version": 1
3092 },
3093 {
3094 "key": "IsJoiningDisabled",
3095 "version": 1
3096 },
3097 {
3098 "key": "IsAppendingDisabled",
3099 "version": 1
3100 },
3101 {
3102 "key": "IsCallingDisabled",
3103 "version": 1
3104 },
3105 {
3106 "key": "IsMembershipEventsDisabled",
3107 "version": 1
3108 },
3109 {
3110 "key": "IsAttachmentsDisabled",
3111 "version": 4
3112 },
3113 {
3114 "key": "IsLinksDisabled",
3115 "version": 4
3116 }
3117 ],
3118 "strings": false
3119 },
3120 {
3121 "name": "update-system-settings-operation",
3122 "namespace": "keet",
3123 "compact": false,
3124 "flagsPosition": -1,
3125 "fields": [
3126 {
3127 "name": "header",
3128 "required": true,
3129 "type": "@keet/operation-header",
3130 "version": 1
3131 },
3132 {
3133 "name": "key",
3134 "required": true,
3135 "type": "uint",
3136 "version": 1
3137 },
3138 {
3139 "name": "settings",
3140 "required": true,
3141 "type": "@keet/system-settings",
3142 "version": 1
3143 }
3144 ]
3145 },
3146 {
3147 "name": "test-increment-operation",
3148 "namespace": "keet",
3149 "compact": false,
3150 "flagsPosition": -1,
3151 "fields": [
3152 {
3153 "name": "header",
3154 "required": true,
3155 "type": "@keet/operation-header",
3156 "version": 1
3157 },
3158 {
3159 "name": "value",
3160 "required": true,
3161 "type": "uint",
3162 "version": 1
3163 }
3164 ]
3165 },
3166 {
3167 "name": "test-collection-record-1",
3168 "namespace": "keet",
3169 "compact": false,
3170 "flagsPosition": -1,
3171 "fields": [
3172 {
3173 "name": "key",
3174 "required": true,
3175 "type": "uint",
3176 "version": 1
3177 },
3178 {
3179 "name": "value",
3180 "required": true,
3181 "type": "uint",
3182 "version": 1
3183 }
3184 ]
3185 },
3186 {
3187 "name": "label-type",
3188 "namespace": "keet",
3189 "offset": 1,
3190 "enum": [
3191 {
3192 "key": "Flag",
3193 "version": 1
3194 }
3195 ],
3196 "strings": false
3197 },
3198 {
3199 "name": "chat-label",
3200 "namespace": "keet",
3201 "compact": false,
3202 "flagsPosition": -1,
3203 "fields": [
3204 {
3205 "name": "id",
3206 "required": true,
3207 "type": "@keet/message-index-id",
3208 "version": 1
3209 },
3210 {
3211 "name": "sender",
3212 "required": true,
3213 "type": "@keet/member-key",
3214 "version": 1
3215 },
3216 {
3217 "name": "clock",
3218 "required": true,
3219 "type": "uint",
3220 "version": 1
3221 },
3222 {
3223 "name": "label",
3224 "required": true,
3225 "type": "@keet/label-type",
3226 "version": 1
3227 }
3228 ]
3229 },
3230 {
3231 "name": "add-chat-label-operation",
3232 "namespace": "keet",
3233 "compact": false,
3234 "flagsPosition": -1,
3235 "fields": [
3236 {
3237 "name": "header",
3238 "required": true,
3239 "type": "@keet/operation-header",
3240 "version": 1
3241 },
3242 {
3243 "name": "oplog",
3244 "required": true,
3245 "type": "@keet/oplog-id",
3246 "version": 1
3247 },
3248 {
3249 "name": "label",
3250 "required": true,
3251 "type": "@keet/label-type",
3252 "version": 1
3253 }
3254 ]
3255 },
3256 {
3257 "name": "remove-chat-label-operation",
3258 "namespace": "keet",
3259 "compact": false,
3260 "flagsPosition": -1,
3261 "fields": [
3262 {
3263 "name": "header",
3264 "required": true,
3265 "type": "@keet/operation-header",
3266 "version": 1
3267 },
3268 {
3269 "name": "oplog",
3270 "required": true,
3271 "type": "@keet/oplog-id",
3272 "version": 1
3273 },
3274 {
3275 "name": "label",
3276 "required": true,
3277 "type": "@keet/label-type",
3278 "version": 1
3279 }
3280 ]
3281 },
3282 {
3283 "name": "chat-label-summary",
3284 "namespace": "keet",
3285 "compact": false,
3286 "flagsPosition": -1,
3287 "fields": [
3288 {
3289 "name": "label",
3290 "required": true,
3291 "type": "@keet/label-type",
3292 "version": 1
3293 },
3294 {
3295 "name": "count",
3296 "required": true,
3297 "type": "uint",
3298 "version": 1
3299 }
3300 ]
3301 },
3302 {
3303 "name": "chat-label-digest",
3304 "namespace": "keet",
3305 "compact": false,
3306 "flagsPosition": 4,
3307 "fields": [
3308 {
3309 "name": "id",
3310 "required": true,
3311 "type": "@keet/message-index-id",
3312 "version": 1
3313 },
3314 {
3315 "name": "total",
3316 "required": true,
3317 "type": "uint",
3318 "version": 1
3319 },
3320 {
3321 "name": "labels",
3322 "required": true,
3323 "array": true,
3324 "type": "@keet/chat-label-summary",
3325 "version": 1
3326 },
3327 {
3328 "name": "editedAt",
3329 "required": true,
3330 "type": "uint",
3331 "version": 1
3332 },
3333 {
3334 "name": "flagsClock",
3335 "type": "uint",
3336 "version": 1
3337 },
3338 {
3339 "name": "version",
3340 "type": "uint",
3341 "version": 1
3342 },
3343 {
3344 "name": "isDeleted",
3345 "type": "bool",
3346 "version": 1
3347 }
3348 ]
3349 },
3350 {
3351 "name": "update-read-length-operation",
3352 "namespace": "keet",
3353 "compact": false,
3354 "flagsPosition": -1,
3355 "fields": [
3356 {
3357 "name": "header",
3358 "required": true,
3359 "type": "@keet/operation-header",
3360 "version": 1
3361 },
3362 {
3363 "name": "length",
3364 "required": true,
3365 "type": "uint",
3366 "version": 1
3367 }
3368 ]
3369 },
3370 {
3371 "name": "read-length",
3372 "namespace": "keet",
3373 "compact": false,
3374 "flagsPosition": -1,
3375 "fields": [
3376 {
3377 "name": "memberKey",
3378 "required": true,
3379 "type": "@keet/member-key",
3380 "version": 1
3381 },
3382 {
3383 "name": "length",
3384 "required": true,
3385 "type": "uint",
3386 "version": 1
3387 }
3388 ]
3389 },
3390 {
3391 "name": "tmp-removed-member",
3392 "namespace": "keet",
3393 "compact": false,
3394 "flagsPosition": -1,
3395 "fields": [
3396 {
3397 "name": "key",
3398 "required": true,
3399 "type": "@keet/member-key",
3400 "version": 1
3401 }
3402 ]
3403 },
3404 {
3405 "name": "contact",
3406 "namespace": "keet-private-id",
3407 "compact": false,
3408 "flagsPosition": 2,
3409 "fields": [
3410 {
3411 "name": "memberKey",
3412 "required": true,
3413 "type": "@keet/member-key",
3414 "version": 1
3415 },
3416 {
3417 "name": "status",
3418 "required": true,
3419 "type": "@keet-private-id/contact-status",
3420 "version": 1
3421 },
3422 {
3423 "name": "mailbox",
3424 "type": "@keet/public-key",
3425 "version": 1
3426 },
3427 {
3428 "name": "roomKey",
3429 "type": "@keet/room-key",
3430 "version": 1
3431 }
3432 ]
3433 },
3434 {
3435 "name": "v3-room-migration-info",
3436 "namespace": "keet-private-id",
3437 "compact": false,
3438 "flagsPosition": -1,
3439 "fields": [
3440 {
3441 "name": "roomKey",
3442 "required": true,
3443 "type": "@keet/room-key",
3444 "version": 1
3445 },
3446 {
3447 "name": "encryptionKey",
3448 "required": true,
3449 "type": "@keet/encryption-key",
3450 "version": 1
3451 },
3452 {
3453 "name": "seed",
3454 "required": true,
3455 "type": "fixed32",
3456 "version": 1
3457 },
3458 {
3459 "name": "initiator",
3460 "required": true,
3461 "type": "@keet/head",
3462 "version": 1
3463 },
3464 {
3465 "name": "fastForwardTo",
3466 "required": true,
3467 "type": "fixed32",
3468 "version": 1
3469 }
3470 ]
3471 },
3472 {
3473 "name": "run-v3-migration-operation",
3474 "namespace": "keet-private-id",
3475 "compact": false,
3476 "flagsPosition": -1,
3477 "fields": [
3478 {
3479 "name": "sharedRooms",
3480 "required": true,
3481 "array": true,
3482 "type": "@keet-private-id/v3-room-migration-info",
3483 "version": 1
3484 },
3485 {
3486 "name": "blockedContacts",
3487 "required": true,
3488 "array": true,
3489 "type": "@keet/member-key",
3490 "version": 1
3491 }
3492 ]
3493 },
3494 {
3495 "name": "update-identity-operation",
3496 "namespace": "keet-private-id",
3497 "compact": false,
3498 "flagsPosition": -1,
3499 "fields": [
3500 {
3501 "name": "identity",
3502 "required": true,
3503 "type": "@keet/room-identity",
3504 "version": 1
3505 }
3506 ]
3507 },
3508 {
3509 "name": "counters",
3510 "namespace": "keet-private-id",
3511 "compact": false,
3512 "flagsPosition": -1,
3513 "fields": [
3514 {
3515 "name": "rooms",
3516 "required": true,
3517 "type": "uint",
3518 "version": 1
3519 },
3520 {
3521 "name": "contacts",
3522 "required": true,
3523 "type": "uint",
3524 "version": 1
3525 }
3526 ]
3527 },
3528 {
3529 "name": "stats",
3530 "namespace": "keet-private-id",
3531 "compact": false,
3532 "flagsPosition": -1,
3533 "fields": [
3534 {
3535 "name": "rooms",
3536 "required": true,
3537 "type": "uint",
3538 "version": 1
3539 },
3540 {
3541 "name": "contactRequests",
3542 "required": true,
3543 "type": "uint",
3544 "version": 1
3545 }
3546 ]
3547 },
3548 {
3549 "name": "add-entropy-operation",
3550 "namespace": "keet-private-id",
3551 "compact": false,
3552 "flagsPosition": -1,
3553 "fields": [
3554 {
3555 "name": "entropy",
3556 "required": true,
3557 "type": "buffer",
3558 "version": 1
3559 }
3560 ]
3561 },
3562 {
3563 "name": "pending-invitation-identity",
3564 "namespace": "keet-private-id",
3565 "compact": false,
3566 "flagsPosition": -1,
3567 "fields": [
3568 {
3569 "name": "publicKey",
3570 "required": true,
3571 "type": "@keet/member-key",
3572 "version": 1
3573 },
3574 {
3575 "name": "devicePublicKey",
3576 "required": true,
3577 "type": "@keet/public-key",
3578 "version": 1
3579 },
3580 {
3581 "name": "writerKey",
3582 "required": true,
3583 "type": "@keet/device-key",
3584 "version": 1
3585 }
3586 ]
3587 },
3588 {
3589 "name": "pending-invitation",
3590 "namespace": "keet-private-id",
3591 "compact": false,
3592 "flagsPosition": 6,
3593 "fields": [
3594 {
3595 "name": "id",
3596 "required": true,
3597 "type": "fixed32",
3598 "version": 1
3599 },
3600 {
3601 "name": "invitationSeed",
3602 "required": true,
3603 "type": "fixed32",
3604 "version": 1
3605 },
3606 {
3607 "name": "mailbox",
3608 "required": true,
3609 "type": "fixed32",
3610 "version": 1
3611 },
3612 {
3613 "name": "responseKeyPair",
3614 "required": true,
3615 "type": "@keet/signing-keypair",
3616 "version": 1
3617 },
3618 {
3619 "name": "initiator",
3620 "required": true,
3621 "type": "@keet/head",
3622 "version": 1
3623 },
3624 {
3625 "name": "inviter",
3626 "required": true,
3627 "type": "@keet/head",
3628 "version": 1
3629 },
3630 {
3631 "name": "identity",
3632 "type": "@keet-private-id/pending-invitation-identity",
3633 "version": 1
3634 },
3635 {
3636 "name": "buildType",
3637 "type": "@keet/build-type",
3638 "version": 5
3639 }
3640 ]
3641 },
3642 {
3643 "name": "resolve-pending-invitation-operation",
3644 "namespace": "keet-private-id",
3645 "compact": false,
3646 "flagsPosition": -1,
3647 "fields": [
3648 {
3649 "name": "header",
3650 "required": true,
3651 "type": "@keet/operation-header",
3652 "version": 1
3653 },
3654 {
3655 "name": "blindResponse",
3656 "required": true,
3657 "type": "buffer",
3658 "version": 1
3659 }
3660 ]
3661 },
3662 {
3663 "name": "add-pending-invitation-operation",
3664 "namespace": "keet-private-id",
3665 "compact": false,
3666 "flagsPosition": -1,
3667 "fields": [
3668 {
3669 "name": "header",
3670 "required": true,
3671 "type": "@keet/operation-header",
3672 "version": 1
3673 },
3674 {
3675 "name": "invitation",
3676 "required": true,
3677 "type": "@keet-private-id/pending-invitation",
3678 "version": 1
3679 }
3680 ]
3681 },
3682 {
3683 "name": "remove-pending-invitation-operation",
3684 "namespace": "keet-private-id",
3685 "compact": false,
3686 "flagsPosition": -1,
3687 "fields": [
3688 {
3689 "name": "header",
3690 "required": true,
3691 "type": "@keet/operation-header",
3692 "version": 1
3693 },
3694 {
3695 "name": "id",
3696 "required": true,
3697 "type": "fixed32",
3698 "version": 1
3699 }
3700 ]
3701 },
3702 {
3703 "name": "identity-swap",
3704 "namespace": "keet-private-id",
3705 "compact": false,
3706 "flagsPosition": 2,
3707 "fields": [
3708 {
3709 "name": "publicKey",
3710 "required": true,
3711 "type": "@keet/member-key",
3712 "version": 1
3713 },
3714 {
3715 "name": "devicePublicKey",
3716 "required": true,
3717 "type": "@keet/public-key",
3718 "version": 1
3719 },
3720 {
3721 "name": "privateProfileKey",
3722 "type": "@keet/room-key",
3723 "version": 1
3724 },
3725 {
3726 "name": "deviceKeyPair",
3727 "type": "@keet/signing-keypair",
3728 "version": 1
3729 },
3730 {
3731 "name": "deviceProof",
3732 "required": true,
3733 "type": "buffer",
3734 "version": 1
3735 }
3736 ]
3737 },
3738 {
3739 "name": "identity-swap-v2",
3740 "namespace": "keet-private-id",
3741 "compact": false,
3742 "flagsPosition": 3,
3743 "fields": [
3744 {
3745 "name": "publicKey",
3746 "required": true,
3747 "type": "@keet/member-key",
3748 "version": 1
3749 },
3750 {
3751 "name": "writerKey",
3752 "required": true,
3753 "type": "@keet/core-key",
3754 "version": 1
3755 },
3756 {
3757 "name": "devicePublicKey",
3758 "required": true,
3759 "type": "@keet/public-key",
3760 "version": 1
3761 },
3762 {
3763 "name": "privateProfileKey",
3764 "type": "@keet/room-key",
3765 "version": 1
3766 }
3767 ]
3768 },
3769 {
3770 "name": "room-status",
3771 "namespace": "keet-private-id",
3772 "compact": false,
3773 "flagsPosition": 0,
3774 "fields": [
3775 {
3776 "name": "isActive",
3777 "type": "bool",
3778 "version": 1
3779 },
3780 {
3781 "name": "isFullyMuted",
3782 "type": "bool",
3783 "version": 1
3784 },
3785 {
3786 "name": "isMentionsOnlyMuted",
3787 "type": "bool",
3788 "version": 1
3789 },
3790 {
3791 "name": "isReadOnly",
3792 "type": "bool",
3793 "version": 1
3794 },
3795 {
3796 "name": "isFavorite",
3797 "type": "bool",
3798 "version": 3
3799 }
3800 ]
3801 },
3802 {
3803 "name": "room",
3804 "namespace": "keet-private-id",
3805 "compact": false,
3806 "flagsPosition": 5,
3807 "fields": [
3808 {
3809 "name": "roomKey",
3810 "required": true,
3811 "type": "@keet/room-key",
3812 "version": 1
3813 },
3814 {
3815 "name": "encryptionKey",
3816 "required": true,
3817 "type": "@keet/encryption-key",
3818 "version": 1
3819 },
3820 {
3821 "name": "mailbox",
3822 "required": true,
3823 "type": "@keet/public-key",
3824 "version": 1
3825 },
3826 {
3827 "name": "status",
3828 "required": true,
3829 "type": "@keet-private-id/room-status",
3830 "version": 1
3831 },
3832 {
3833 "name": "clock",
3834 "required": true,
3835 "type": "uint",
3836 "version": 1
3837 },
3838 {
3839 "name": "initiator",
3840 "type": "@keet/head",
3841 "version": 1
3842 },
3843 {
3844 "name": "fastForwardTo",
3845 "type": "fixed32",
3846 "version": 1
3847 },
3848 {
3849 "name": "identitySwap",
3850 "type": "@keet-private-id/identity-swap",
3851 "version": 1
3852 },
3853 {
3854 "name": "identitySwapV2",
3855 "type": "@keet-private-id/pending-invitation-identity",
3856 "version": 1
3857 },
3858 {
3859 "name": "contact",
3860 "type": "@keet/member-key",
3861 "version": 1
3862 }
3863 ]
3864 },
3865 {
3866 "name": "add-room-operation",
3867 "namespace": "keet-private-id",
3868 "compact": false,
3869 "flagsPosition": 4,
3870 "fields": [
3871 {
3872 "name": "header",
3873 "required": true,
3874 "type": "@keet/operation-header",
3875 "version": 1
3876 },
3877 {
3878 "name": "roomKey",
3879 "required": true,
3880 "type": "@keet/room-key",
3881 "version": 1
3882 },
3883 {
3884 "name": "encryptionKey",
3885 "required": true,
3886 "type": "@keet/encryption-key",
3887 "version": 1
3888 },
3889 {
3890 "name": "mailbox",
3891 "required": true,
3892 "type": "@keet/public-key",
3893 "version": 1
3894 },
3895 {
3896 "name": "fastForwardTo",
3897 "type": "fixed32",
3898 "version": 1
3899 },
3900 {
3901 "name": "initiator",
3902 "type": "@keet/head",
3903 "version": 1
3904 },
3905 {
3906 "name": "dm",
3907 "type": "@keet/member-key",
3908 "version": 1
3909 },
3910 {
3911 "name": "isReadOnly",
3912 "type": "bool",
3913 "version": 1
3914 }
3915 ]
3916 },
3917 {
3918 "name": "remove-room-operation",
3919 "namespace": "keet-private-id",
3920 "compact": false,
3921 "flagsPosition": -1,
3922 "fields": [
3923 {
3924 "name": "header",
3925 "required": true,
3926 "type": "@keet/operation-header",
3927 "version": 1
3928 },
3929 {
3930 "name": "discoveryKey",
3931 "required": true,
3932 "type": "@keet/room-discovery-key",
3933 "version": 1
3934 }
3935 ]
3936 },
3937 {
3938 "name": "update-room-status-operation",
3939 "namespace": "keet-private-id",
3940 "compact": false,
3941 "flagsPosition": -1,
3942 "fields": [
3943 {
3944 "name": "header",
3945 "required": true,
3946 "type": "@keet/operation-header",
3947 "version": 1
3948 },
3949 {
3950 "name": "roomKey",
3951 "required": true,
3952 "type": "@keet/room-key",
3953 "version": 1
3954 },
3955 {
3956 "name": "key",
3957 "required": true,
3958 "type": "uint",
3959 "version": 1
3960 },
3961 {
3962 "name": "status",
3963 "required": true,
3964 "type": "@keet-private-id/room-status",
3965 "version": 1
3966 }
3967 ]
3968 },
3969 {
3970 "name": "contact-status",
3971 "namespace": "keet-private-id",
3972 "compact": false,
3973 "flagsPosition": 0,
3974 "fields": [
3975 {
3976 "name": "isBlocked",
3977 "type": "bool",
3978 "version": 1
3979 }
3980 ]
3981 },
3982 {
3983 "name": "contact-record",
3984 "namespace": "keet-private-id",
3985 "compact": false,
3986 "flagsPosition": 3,
3987 "fields": [
3988 {
3989 "name": "memberKey",
3990 "required": true,
3991 "type": "@keet/member-key",
3992 "version": 1
3993 },
3994 {
3995 "name": "clock",
3996 "required": true,
3997 "type": "uint",
3998 "version": 1
3999 },
4000 {
4001 "name": "status",
4002 "required": true,
4003 "type": "@keet-private-id/contact-status",
4004 "version": 1
4005 },
4006 {
4007 "name": "mailbox",
4008 "type": "@keet/public-key",
4009 "version": 1
4010 },
4011 {
4012 "name": "roomKey",
4013 "type": "@keet/room-key",
4014 "version": 1
4015 }
4016 ]
4017 },
4018 {
4019 "name": "add-contact-operation",
4020 "namespace": "keet-private-id",
4021 "compact": false,
4022 "flagsPosition": -1,
4023 "fields": [
4024 {
4025 "name": "header",
4026 "required": true,
4027 "type": "@keet/operation-header",
4028 "version": 1
4029 },
4030 {
4031 "name": "contact",
4032 "required": true,
4033 "type": "@keet-private-id/contact",
4034 "version": 1
4035 }
4036 ]
4037 },
4038 {
4039 "name": "update-contact-status-operation",
4040 "namespace": "keet-private-id",
4041 "compact": false,
4042 "flagsPosition": -1,
4043 "fields": [
4044 {
4045 "name": "header",
4046 "required": true,
4047 "type": "@keet/operation-header",
4048 "version": 1
4049 },
4050 {
4051 "name": "memberKey",
4052 "required": true,
4053 "type": "@keet/member-key",
4054 "version": 1
4055 },
4056 {
4057 "name": "key",
4058 "required": true,
4059 "type": "uint",
4060 "version": 1
4061 },
4062 {
4063 "name": "status",
4064 "required": true,
4065 "type": "@keet-private-id/contact-status",
4066 "version": 1
4067 }
4068 ]
4069 },
4070 {
4071 "name": "remove-contact-operation",
4072 "namespace": "keet-private-id",
4073 "compact": false,
4074 "flagsPosition": -1,
4075 "fields": [
4076 {
4077 "name": "header",
4078 "required": true,
4079 "type": "@keet/operation-header",
4080 "version": 1
4081 },
4082 {
4083 "name": "memberKey",
4084 "required": true,
4085 "type": "@keet/member-key",
4086 "version": 1
4087 }
4088 ]
4089 },
4090 {
4091 "name": "activate-contact-room-operation",
4092 "namespace": "keet-private-id",
4093 "compact": false,
4094 "flagsPosition": -1,
4095 "fields": [
4096 {
4097 "name": "header",
4098 "required": true,
4099 "type": "@keet/operation-header",
4100 "version": 1
4101 },
4102 {
4103 "name": "memberKey",
4104 "required": true,
4105 "type": "@keet/member-key",
4106 "version": 1
4107 }
4108 ]
4109 },
4110 {
4111 "name": "contact-request-status",
4112 "namespace": "keet-private-id",
4113 "compact": false,
4114 "flagsPosition": 0,
4115 "fields": [
4116 {
4117 "name": "isPending",
4118 "type": "bool",
4119 "version": 1
4120 },
4121 {
4122 "name": "isAccepted",
4123 "type": "bool",
4124 "version": 1
4125 },
4126 {
4127 "name": "isRejected",
4128 "type": "bool",
4129 "version": 1
4130 },
4131 {
4132 "name": "isDiscarded",
4133 "type": "bool",
4134 "version": 1
4135 },
4136 {
4137 "name": "isSeen",
4138 "type": "bool",
4139 "version": 1
4140 }
4141 ]
4142 },
4143 {
4144 "name": "contact-request-body",
4145 "namespace": "keet-private-id",
4146 "compact": false,
4147 "flagsPosition": 3,
4148 "fields": [
4149 {
4150 "name": "sender",
4151 "required": true,
4152 "type": "@keet/member-update",
4153 "version": 1
4154 },
4155 {
4156 "name": "keys",
4157 "required": true,
4158 "type": "@keet/room-keys",
4159 "version": 1
4160 },
4161 {
4162 "name": "mailbox",
4163 "required": true,
4164 "type": "@keet/public-key",
4165 "version": 1
4166 },
4167 {
4168 "name": "message",
4169 "type": "string",
4170 "version": 1
4171 }
4172 ]
4173 },
4174 {
4175 "name": "contact-request",
4176 "namespace": "keet-private-id",
4177 "compact": false,
4178 "flagsPosition": -1,
4179 "fields": [
4180 {
4181 "name": "body",
4182 "required": true,
4183 "type": "@keet-private-id/contact-request-body",
4184 "version": 1
4185 },
4186 {
4187 "name": "attestation",
4188 "required": true,
4189 "type": "@keet/identity-attestation",
4190 "version": 1
4191 }
4192 ]
4193 },
4194 {
4195 "name": "contact-request-record",
4196 "namespace": "keet-private-id",
4197 "compact": false,
4198 "flagsPosition": 6,
4199 "fields": [
4200 {
4201 "name": "memberKey",
4202 "required": true,
4203 "type": "@keet/member-key",
4204 "version": 1
4205 },
4206 {
4207 "name": "clock",
4208 "required": true,
4209 "type": "uint",
4210 "version": 1
4211 },
4212 {
4213 "name": "sender",
4214 "required": true,
4215 "type": "@keet/member-profile",
4216 "version": 1
4217 },
4218 {
4219 "name": "status",
4220 "required": true,
4221 "type": "@keet-private-id/contact-request-status",
4222 "version": 1
4223 },
4224 {
4225 "name": "keys",
4226 "required": true,
4227 "type": "@keet/room-keys",
4228 "version": 1
4229 },
4230 {
4231 "name": "mailbox",
4232 "required": true,
4233 "type": "@keet/public-key",
4234 "version": 1
4235 },
4236 {
4237 "name": "message",
4238 "type": "string",
4239 "version": 1
4240 },
4241 {
4242 "name": "sentAt",
4243 "type": "uint",
4244 "version": 1
4245 }
4246 ]
4247 },
4248 {
4249 "name": "add-contact-request-operation",
4250 "namespace": "keet-private-id",
4251 "compact": false,
4252 "flagsPosition": -1,
4253 "fields": [
4254 {
4255 "name": "header",
4256 "required": true,
4257 "type": "@keet/operation-header",
4258 "version": 1
4259 },
4260 {
4261 "name": "blindRequest",
4262 "required": true,
4263 "type": "buffer",
4264 "version": 1
4265 }
4266 ]
4267 },
4268 {
4269 "name": "update-contact-request-status-operation",
4270 "namespace": "keet-private-id",
4271 "compact": false,
4272 "flagsPosition": 4,
4273 "fields": [
4274 {
4275 "name": "header",
4276 "required": true,
4277 "type": "@keet/operation-header",
4278 "version": 1
4279 },
4280 {
4281 "name": "memberKey",
4282 "required": true,
4283 "type": "@keet/member-key",
4284 "version": 1
4285 },
4286 {
4287 "name": "key",
4288 "required": true,
4289 "type": "uint",
4290 "version": 1
4291 },
4292 {
4293 "name": "status",
4294 "required": true,
4295 "type": "@keet-private-id/contact-request-status",
4296 "version": 1
4297 },
4298 {
4299 "name": "roomKey",
4300 "type": "@keet/room-key",
4301 "version": 1
4302 }
4303 ]
4304 },
4305 {
4306 "name": "profile-discovery-record-v1",
4307 "namespace": "keet-private-id",
4308 "compact": false,
4309 "flagsPosition": -1,
4310 "fields": [
4311 {
4312 "name": "timestamp",
4313 "required": true,
4314 "type": "uint",
4315 "version": 1
4316 },
4317 {
4318 "name": "key",
4319 "required": true,
4320 "type": "@keet/core-key",
4321 "version": 1
4322 },
4323 {
4324 "name": "mailbox",
4325 "required": true,
4326 "type": "@keet/public-key",
4327 "version": 1
4328 }
4329 ]
4330 },
4331 {
4332 "name": "profile-discovery-record",
4333 "namespace": "keet-private-id",
4334 "versions": [
4335 {
4336 "type": "@keet-private-id/profile-discovery-record-v1",
4337 "map": null,
4338 "version": 1
4339 }
4340 ]
4341 },
4342 {
4343 "name": "unreads",
4344 "namespace": "keet-private-id",
4345 "compact": false,
4346 "flagsPosition": -1,
4347 "fields": [
4348 {
4349 "name": "deviceKey",
4350 "required": true,
4351 "type": "@keet/device-key",
4352 "version": 1
4353 },
4354 {
4355 "name": "key",
4356 "required": true,
4357 "type": "@keet/core-key",
4358 "version": 1
4359 }
4360 ]
4361 },
4362 {
4363 "name": "add-unreads-key-operation",
4364 "namespace": "keet-private-id",
4365 "compact": false,
4366 "flagsPosition": -1,
4367 "fields": [
4368 {
4369 "name": "header",
4370 "required": true,
4371 "type": "@keet/operation-header",
4372 "version": 1
4373 },
4374 {
4375 "name": "key",
4376 "required": true,
4377 "type": "@keet/core-key",
4378 "version": 1
4379 }
4380 ]
4381 },
4382 {
4383 "name": "remove-unreads-key-operation",
4384 "namespace": "keet-private-id",
4385 "compact": false,
4386 "flagsPosition": -1,
4387 "fields": [
4388 {
4389 "name": "header",
4390 "required": true,
4391 "type": "@keet/operation-header",
4392 "version": 1
4393 },
4394 {
4395 "name": "key",
4396 "required": true,
4397 "type": "@keet/core-key",
4398 "version": 1
4399 }
4400 ]
4401 },
4402 {
4403 "name": "settings",
4404 "namespace": "keet-private-id",
4405 "compact": false,
4406 "flagsPosition": 0,
4407 "fields": [
4408 {
4409 "name": "disableReadReceipts",
4410 "type": "bool",
4411 "version": 1
4412 }
4413 ]
4414 },
4415 {
4416 "name": "user-settings-key",
4417 "namespace": "keet-private-id",
4418 "offset": 1,
4419 "enum": [
4420 {
4421 "key": "disableReadReceipts",
4422 "version": 1
4423 }
4424 ],
4425 "strings": true
4426 },
4427 {
4428 "name": "update-settings-operation",
4429 "namespace": "keet-private-id",
4430 "compact": false,
4431 "flagsPosition": -1,
4432 "fields": [
4433 {
4434 "name": "header",
4435 "required": true,
4436 "type": "@keet/operation-header",
4437 "version": 1
4438 },
4439 {
4440 "name": "key",
4441 "required": true,
4442 "type": "@keet-private-id/user-settings-key",
4443 "version": 1
4444 },
4445 {
4446 "name": "settings",
4447 "required": true,
4448 "type": "@keet-private-id/settings",
4449 "version": 1
4450 }
4451 ]
4452 },
4453 {
4454 "name": "background-sync-room",
4455 "namespace": "local",
4456 "compact": false,
4457 "flagsPosition": 2,
4458 "fields": [
4459 {
4460 "name": "discoveryPublicKey",
4461 "required": true,
4462 "type": "@keet/room-discovery-key",
4463 "version": 1
4464 },
4465 {
4466 "name": "timestamp",
4467 "required": true,
4468 "type": "uint",
4469 "version": 1
4470 },
4471 {
4472 "name": "lastSynced",
4473 "type": "uint",
4474 "version": 1
4475 },
4476 {
4477 "name": "dirty",
4478 "type": "bool",
4479 "version": 1
4480 }
4481 ]
4482 },
4483 {
4484 "name": "stats",
4485 "namespace": "local",
4486 "compact": false,
4487 "flagsPosition": -1,
4488 "fields": [
4489 {
4490 "name": "rooms",
4491 "required": true,
4492 "type": "uint",
4493 "version": 1
4494 },
4495 {
4496 "name": "activeRooms",
4497 "required": true,
4498 "type": "uint",
4499 "version": 1
4500 }
4501 ]
4502 },
4503 {
4504 "name": "migration-status",
4505 "namespace": "local",
4506 "compact": false,
4507 "flagsPosition": -1,
4508 "fields": [
4509 {
4510 "name": "version",
4511 "required": true,
4512 "type": "uint",
4513 "version": 1
4514 }
4515 ]
4516 },
4517 {
4518 "name": "v3-private-profile-migration",
4519 "namespace": "local",
4520 "compact": false,
4521 "flagsPosition": 0,
4522 "fields": [
4523 {
4524 "name": "blockedMembers",
4525 "array": true,
4526 "type": "@keet/member-key",
4527 "version": 1
4528 }
4529 ]
4530 },
4531 {
4532 "name": "v3-room-migration",
4533 "namespace": "local",
4534 "compact": false,
4535 "flagsPosition": 5,
4536 "fields": [
4537 {
4538 "name": "encryptionKey",
4539 "required": true,
4540 "type": "@keet/encryption-key",
4541 "version": 1
4542 },
4543 {
4544 "name": "seed",
4545 "required": true,
4546 "type": "fixed32",
4547 "version": 1
4548 },
4549 {
4550 "name": "capabilities",
4551 "required": true,
4552 "type": "@keet/room-capabilities",
4553 "version": 1
4554 },
4555 {
4556 "name": "initiator",
4557 "required": true,
4558 "type": "@keet/head",
4559 "version": 1
4560 },
4561 {
4562 "name": "fastForwardTo",
4563 "required": true,
4564 "type": "fixed32",
4565 "version": 1
4566 },
4567 {
4568 "name": "privateProfile",
4569 "type": "@local/v3-private-profile-migration",
4570 "version": 1
4571 }
4572 ]
4573 },
4574 {
4575 "name": "room-migration-stats",
4576 "namespace": "local",
4577 "compact": false,
4578 "flagsPosition": 0,
4579 "fields": [
4580 {
4581 "name": "count",
4582 "type": "uint",
4583 "version": 1
4584 }
4585 ]
4586 },
4587 {
4588 "name": "room-migration",
4589 "namespace": "local",
4590 "compact": false,
4591 "flagsPosition": 2,
4592 "fields": [
4593 {
4594 "name": "roomKey",
4595 "required": true,
4596 "type": "@keet/room-key",
4597 "version": 1
4598 },
4599 {
4600 "name": "priority",
4601 "required": true,
4602 "type": "uint",
4603 "version": 1
4604 },
4605 {
4606 "name": "v3",
4607 "type": "@local/v3-room-migration",
4608 "version": 1
4609 },
4610 {
4611 "name": "errored",
4612 "type": "bool",
4613 "version": 1
4614 },
4615 {
4616 "name": "timestamp",
4617 "type": "uint",
4618 "version": 1
4619 }
4620 ]
4621 },
4622 {
4623 "name": "identity-status",
4624 "namespace": "local",
4625 "compact": false,
4626 "flagsPosition": 0,
4627 "fields": [
4628 {
4629 "name": "isConfirmed",
4630 "type": "bool",
4631 "version": 1
4632 }
4633 ]
4634 },
4635 {
4636 "name": "identity-swap",
4637 "namespace": "local",
4638 "compact": false,
4639 "flagsPosition": -1,
4640 "fields": [
4641 {
4642 "name": "privateProfileKey",
4643 "required": true,
4644 "type": "@keet/room-key",
4645 "version": 1
4646 }
4647 ]
4648 },
4649 {
4650 "name": "identity-record",
4651 "namespace": "local",
4652 "compact": false,
4653 "flagsPosition": 5,
4654 "fields": [
4655 {
4656 "name": "publicKey",
4657 "required": true,
4658 "type": "@keet/public-key",
4659 "version": 1
4660 },
4661 {
4662 "name": "privateProfileKey",
4663 "required": true,
4664 "type": "@keet/room-key",
4665 "version": 1
4666 },
4667 {
4668 "name": "deviceKeyPair",
4669 "required": true,
4670 "type": "@keet/signing-keypair",
4671 "version": 1
4672 },
4673 {
4674 "name": "deviceProof",
4675 "required": true,
4676 "type": "buffer",
4677 "version": 1
4678 },
4679 {
4680 "name": "status",
4681 "required": true,
4682 "type": "@local/identity-status",
4683 "version": 1
4684 },
4685 {
4686 "name": "entropy",
4687 "type": "buffer",
4688 "version": 1
4689 },
4690 {
4691 "name": "swap",
4692 "type": "@keet-private-id/identity-swap",
4693 "version": 1
4694 },
4695 {
4696 "name": "swapV2",
4697 "type": "@keet-private-id/identity-swap-v2",
4698 "version": 1
4699 }
4700 ]
4701 },
4702 {
4703 "name": "tasks",
4704 "namespace": "local",
4705 "offset": 1,
4706 "enum": [
4707 {
4708 "key": "RestoreIdentity",
4709 "version": 1
4710 },
4711 {
4712 "key": "CreateRoom",
4713 "version": 1
4714 },
4715 {
4716 "key": "LeaveRoom",
4717 "version": 1
4718 },
4719 {
4720 "key": "ClearRoom",
4721 "version": 1
4722 },
4723 {
4724 "key": "JoinRoomInvitation",
4725 "version": 1
4726 },
4727 {
4728 "key": "JoinRoomKeys",
4729 "version": 1
4730 },
4731 {
4732 "key": "JoinRoomResponse",
4733 "version": 1
4734 },
4735 {
4736 "key": "SendContactRequest",
4737 "version": 1
4738 },
4739 {
4740 "key": "TestFastTask",
4741 "version": 1
4742 },
4743 {
4744 "key": "TestSlowTask",
4745 "version": 1
4746 },
4747 {
4748 "key": "TestErrorTask",
4749 "version": 1
4750 }
4751 ],
4752 "strings": false
4753 },
4754 {
4755 "name": "room-keys",
4756 "namespace": "local",
4757 "compact": false,
4758 "flagsPosition": 2,
4759 "fields": [
4760 {
4761 "name": "roomKey",
4762 "required": true,
4763 "type": "@keet/room-key",
4764 "version": 1
4765 },
4766 {
4767 "name": "encryptionKey",
4768 "required": true,
4769 "type": "@keet/encryption-key",
4770 "version": 1
4771 },
4772 {
4773 "name": "fastForwardTo",
4774 "type": "fixed32",
4775 "version": 1
4776 },
4777 {
4778 "name": "initiator",
4779 "type": "@keet/head",
4780 "version": 1
4781 }
4782 ]
4783 },
4784 {
4785 "name": "join-room-invitation-task",
4786 "namespace": "local",
4787 "compact": false,
4788 "flagsPosition": -1,
4789 "fields": [
4790 {
4791 "name": "invitation",
4792 "required": true,
4793 "type": "@keet-private-id/pending-invitation",
4794 "version": 1
4795 }
4796 ]
4797 },
4798 {
4799 "name": "join-room-response-task",
4800 "namespace": "local",
4801 "compact": false,
4802 "flagsPosition": -1,
4803 "fields": [
4804 {
4805 "name": "mailbox",
4806 "required": true,
4807 "type": "@keet/public-key",
4808 "version": 1
4809 },
4810 {
4811 "name": "keyPair",
4812 "required": true,
4813 "type": "@keet/signing-keypair",
4814 "version": 1
4815 },
4816 {
4817 "name": "response",
4818 "required": true,
4819 "type": "buffer",
4820 "version": 1
4821 }
4822 ]
4823 },
4824 {
4825 "name": "fast-forward-to",
4826 "namespace": "local",
4827 "compact": false,
4828 "flagsPosition": -1,
4829 "fields": [
4830 {
4831 "name": "key",
4832 "required": true,
4833 "type": "@keet/core-key",
4834 "version": 1
4835 }
4836 ]
4837 },
4838 {
4839 "name": "add-room-fields",
4840 "namespace": "local",
4841 "compact": false,
4842 "flagsPosition": 2,
4843 "fields": [
4844 {
4845 "name": "roomKey",
4846 "required": true,
4847 "type": "@keet/room-key",
4848 "version": 1
4849 },
4850 {
4851 "name": "encryptionKey",
4852 "required": true,
4853 "type": "@keet/encryption-key",
4854 "version": 1
4855 },
4856 {
4857 "name": "fastForwardTo",
4858 "type": "fixed32",
4859 "version": 1
4860 },
4861 {
4862 "name": "initiator",
4863 "type": "@keet/head",
4864 "version": 1
4865 },
4866 {
4867 "name": "mailbox",
4868 "type": "@keet/public-key",
4869 "version": 1
4870 }
4871 ]
4872 },
4873 {
4874 "name": "join-room-keys-task",
4875 "namespace": "local",
4876 "compact": false,
4877 "flagsPosition": -1,
4878 "fields": [
4879 {
4880 "name": "keys",
4881 "required": true,
4882 "type": "@local/add-room-fields",
4883 "version": 1
4884 }
4885 ]
4886 },
4887 {
4888 "name": "create-room-task",
4889 "namespace": "local",
4890 "compact": false,
4891 "flagsPosition": 2,
4892 "fields": [
4893 {
4894 "name": "roomKey",
4895 "required": true,
4896 "type": "@keet/room-key",
4897 "version": 1
4898 },
4899 {
4900 "name": "encryptionKey",
4901 "required": true,
4902 "type": "@keet/encryption-key",
4903 "version": 1
4904 },
4905 {
4906 "name": "fastForwardTo",
4907 "type": "fixed32",
4908 "version": 1
4909 },
4910 {
4911 "name": "initiator",
4912 "type": "@keet/head",
4913 "version": 1
4914 },
4915 {
4916 "name": "mailbox",
4917 "type": "@keet/public-key",
4918 "version": 1
4919 },
4920 {
4921 "name": "keyPair",
4922 "type": "@keet/signing-keypair",
4923 "version": 1
4924 },
4925 {
4926 "name": "genesis",
4927 "type": "@keet/genesis-operation",
4928 "version": 1
4929 },
4930 {
4931 "name": "isPrivateProfile",
4932 "type": "bool",
4933 "version": 1
4934 }
4935 ]
4936 },
4937 {
4938 "name": "leave-room-task",
4939 "namespace": "local",
4940 "compact": false,
4941 "flagsPosition": 1,
4942 "fields": [
4943 {
4944 "name": "roomKey",
4945 "required": true,
4946 "type": "@keet/room-key",
4947 "version": 1
4948 },
4949 {
4950 "name": "isGossiped",
4951 "type": "bool",
4952 "version": 1
4953 }
4954 ]
4955 },
4956 {
4957 "name": "clear-room-task",
4958 "namespace": "local",
4959 "compact": false,
4960 "flagsPosition": -1,
4961 "fields": [
4962 {
4963 "name": "roomKey",
4964 "required": true,
4965 "type": "@keet/room-key",
4966 "version": 1
4967 }
4968 ]
4969 },
4970 {
4971 "name": "restore-identity-task",
4972 "namespace": "local",
4973 "compact": false,
4974 "flagsPosition": 1,
4975 "fields": [
4976 {
4977 "name": "mnemonic",
4978 "required": true,
4979 "type": "string",
4980 "version": 1
4981 },
4982 {
4983 "name": "profileDiscoveryTimeout",
4984 "type": "uint",
4985 "version": 1
4986 },
4987 {
4988 "name": "recover",
4989 "type": "bool",
4990 "version": 1
4991 }
4992 ]
4993 },
4994 {
4995 "name": "send-contact-request-task",
4996 "namespace": "local",
4997 "compact": false,
4998 "flagsPosition": 2,
4999 "fields": [
5000 {
5001 "name": "roomKey",
5002 "required": true,
5003 "type": "@keet/room-key",
5004 "version": 1
5005 },
5006 {
5007 "name": "memberKey",
5008 "required": true,
5009 "type": "@keet/member-key",
5010 "version": 1
5011 },
5012 {
5013 "name": "message",
5014 "type": "string",
5015 "version": 1
5016 },
5017 {
5018 "name": "contactInfo",
5019 "type": "@keet/member-contact-info",
5020 "version": 1
5021 }
5022 ]
5023 },
5024 {
5025 "name": "migrate-v2-room-task",
5026 "namespace": "local",
5027 "compact": false,
5028 "flagsPosition": 1,
5029 "fields": [
5030 {
5031 "name": "key",
5032 "required": true,
5033 "type": "@keet/room-key",
5034 "version": 1
5035 },
5036 {
5037 "name": "isPrivateProfile",
5038 "type": "bool",
5039 "version": 1
5040 }
5041 ]
5042 },
5043 {
5044 "name": "task",
5045 "namespace": "local",
5046 "compact": false,
5047 "flagsPosition": 4,
5048 "fields": [
5049 {
5050 "name": "discoveryKey",
5051 "required": true,
5052 "type": "@keet/room-discovery-key",
5053 "version": 1
5054 },
5055 {
5056 "name": "priority",
5057 "required": true,
5058 "type": "uint",
5059 "version": 1
5060 },
5061 {
5062 "name": "timestamp",
5063 "required": true,
5064 "type": "uint",
5065 "version": 1
5066 },
5067 {
5068 "name": "type",
5069 "required": true,
5070 "type": "uint",
5071 "version": 1
5072 },
5073 {
5074 "name": "restoreIdentity",
5075 "type": "@local/restore-identity-task",
5076 "version": 1
5077 },
5078 {
5079 "name": "createRoom",
5080 "type": "@local/create-room-task",
5081 "version": 1
5082 },
5083 {
5084 "name": "leaveRoom",
5085 "type": "@local/leave-room-task",
5086 "version": 1
5087 },
5088 {
5089 "name": "clearRoom",
5090 "type": "@local/clear-room-task",
5091 "version": 1
5092 },
5093 {
5094 "name": "joinRoomInvitation",
5095 "type": "@local/join-room-invitation-task",
5096 "version": 1
5097 },
5098 {
5099 "name": "joinRoomKeys",
5100 "type": "@local/join-room-keys-task",
5101 "version": 1
5102 },
5103 {
5104 "name": "joinRoomResponse",
5105 "type": "@local/join-room-response-task",
5106 "version": 1
5107 },
5108 {
5109 "name": "sendContactRequest",
5110 "type": "@local/send-contact-request-task",
5111 "version": 1
5112 },
5113 {
5114 "name": "migrateV2Room",
5115 "type": "@local/migrate-v2-room-task",
5116 "version": 1
5117 }
5118 ]
5119 },
5120 {
5121 "name": "shared-invitation",
5122 "namespace": "local",
5123 "compact": false,
5124 "flagsPosition": -1,
5125 "fields": [
5126 {
5127 "name": "seed",
5128 "required": true,
5129 "type": "buffer",
5130 "version": 1
5131 },
5132 {
5133 "name": "invitation",
5134 "required": true,
5135 "type": "@keet/invitation",
5136 "version": 1
5137 }
5138 ]
5139 },
5140 {
5141 "name": "room-status",
5142 "namespace": "local",
5143 "compact": false,
5144 "flagsPosition": 0,
5145 "fields": [
5146 {
5147 "name": "isWritable",
5148 "type": "bool",
5149 "version": 1
5150 },
5151 {
5152 "name": "isReadable",
5153 "type": "bool",
5154 "version": 1
5155 },
5156 {
5157 "name": "isPrivateProfile",
5158 "type": "bool",
5159 "version": 1
5160 },
5161 {
5162 "name": "isRemoved",
5163 "type": "bool",
5164 "version": 1
5165 }
5166 ]
5167 },
5168 {
5169 "name": "room-timestamps",
5170 "namespace": "local",
5171 "compact": false,
5172 "flagsPosition": -1,
5173 "fields": [
5174 {
5175 "name": "creation",
5176 "required": true,
5177 "type": "uint",
5178 "version": 1
5179 },
5180 {
5181 "name": "latestSync",
5182 "required": true,
5183 "type": "uint",
5184 "version": 1
5185 },
5186 {
5187 "name": "latestChatMessage",
5188 "required": true,
5189 "type": "uint",
5190 "version": 1
5191 }
5192 ]
5193 },
5194 {
5195 "name": "room",
5196 "namespace": "local",
5197 "compact": false,
5198 "flagsPosition": 11,
5199 "fields": [
5200 {
5201 "name": "roomKey",
5202 "required": true,
5203 "type": "@keet/room-key",
5204 "version": 1
5205 },
5206 {
5207 "name": "discoveryKey",
5208 "required": true,
5209 "type": "@keet/room-discovery-key",
5210 "version": 1
5211 },
5212 {
5213 "name": "encryptionKey",
5214 "required": true,
5215 "type": "@keet/encryption-key",
5216 "version": 1
5217 },
5218 {
5219 "name": "digest",
5220 "required": true,
5221 "type": "@keet/system-digest",
5222 "version": 1
5223 },
5224 {
5225 "name": "stats",
5226 "required": true,
5227 "type": "@keet/stats",
5228 "version": 1
5229 },
5230 {
5231 "name": "timestamps",
5232 "required": true,
5233 "type": "@local/room-timestamps",
5234 "version": 1
5235 },
5236 {
5237 "name": "fork",
5238 "required": true,
5239 "type": "uint",
5240 "version": 1
5241 },
5242 {
5243 "name": "length",
5244 "required": true,
5245 "type": "uint",
5246 "version": 1
5247 },
5248 {
5249 "name": "seed",
5250 "required": true,
5251 "type": "fixed32",
5252 "version": 1
5253 },
5254 {
5255 "name": "capabilities",
5256 "required": true,
5257 "type": "@keet/room-capabilities",
5258 "version": 1
5259 },
5260 {
5261 "name": "status",
5262 "required": true,
5263 "type": "@local/room-status",
5264 "version": 1
5265 },
5266 {
5267 "name": "selfDevice",
5268 "type": "@keet/device",
5269 "version": 1
5270 },
5271 {
5272 "name": "selfMember",
5273 "type": "@keet/full-member",
5274 "version": 1
5275 },
5276 {
5277 "name": "config",
5278 "type": "@keet/room-config",
5279 "version": 1
5280 },
5281 {
5282 "name": "identity",
5283 "type": "@keet/room-identity",
5284 "version": 1
5285 },
5286 {
5287 "name": "lastMessage",
5288 "type": "@keet/full-chat-message-record",
5289 "version": 1
5290 },
5291 {
5292 "name": "dm",
5293 "array": true,
5294 "type": "@keet/member-key",
5295 "version": 1
5296 },
5297 {
5298 "name": "readLengths",
5299 "array": true,
5300 "type": "@keet/read-length",
5301 "version": 1
5302 },
5303 {
5304 "name": "lastMember",
5305 "type": "@keet/member",
5306 "version": 1
5307 },
5308 {
5309 "name": "version",
5310 "type": "uint",
5311 "version": 1
5312 },
5313 {
5314 "name": "preferences",
5315 "type": "@keet-private-id/room-status",
5316 "version": 3
5317 },
5318 {
5319 "name": "activeCall",
5320 "type": "@local/active-call",
5321 "version": 4
5322 }
5323 ]
5324 },
5325 {
5326 "name": "room-preferences",
5327 "namespace": "local",
5328 "compact": false,
5329 "flagsPosition": -1,
5330 "fields": [
5331 {
5332 "name": "roomKey",
5333 "required": true,
5334 "type": "@keet/room-key",
5335 "version": 1
5336 },
5337 {
5338 "name": "status",
5339 "required": true,
5340 "type": "@keet-private-id/room-status",
5341 "version": 1
5342 }
5343 ]
5344 },
5345 {
5346 "name": "room-metadata",
5347 "namespace": "local",
5348 "compact": false,
5349 "flagsPosition": 1,
5350 "fields": [
5351 {
5352 "name": "roomKey",
5353 "required": true,
5354 "type": "@keet/room-key",
5355 "version": 1
5356 },
5357 {
5358 "name": "repairs",
5359 "type": "uint",
5360 "version": 1
5361 }
5362 ]
5363 },
5364 {
5365 "name": "writer",
5366 "namespace": "local",
5367 "compact": false,
5368 "flagsPosition": 2,
5369 "fields": [
5370 {
5371 "name": "mailbox",
5372 "required": true,
5373 "type": "@keet/public-key",
5374 "version": 1
5375 },
5376 {
5377 "name": "key",
5378 "required": true,
5379 "type": "@keet/core-key",
5380 "version": 1
5381 },
5382 {
5383 "name": "roomKey",
5384 "type": "@keet/room-key",
5385 "version": 1
5386 },
5387 {
5388 "name": "keyPair",
5389 "type": "@keet/signing-keypair",
5390 "version": 1
5391 },
5392 {
5393 "name": "responseKeyPair",
5394 "type": "@keet/signing-keypair",
5395 "version": 1
5396 }
5397 ]
5398 },
5399 {
5400 "name": "writer-append",
5401 "namespace": "local",
5402 "compact": false,
5403 "flagsPosition": -1,
5404 "fields": [
5405 {
5406 "name": "key",
5407 "required": true,
5408 "type": "@keet/core-key",
5409 "version": 1
5410 },
5411 {
5412 "name": "responsePublicKey",
5413 "required": true,
5414 "type": "fixed32",
5415 "version": 1
5416 }
5417 ]
5418 },
5419 {
5420 "name": "member",
5421 "namespace": "local",
5422 "compact": false,
5423 "flagsPosition": -1,
5424 "fields": [
5425 {
5426 "name": "key",
5427 "required": true,
5428 "type": "@keet/member-key",
5429 "version": 1
5430 },
5431 {
5432 "name": "profile",
5433 "required": true,
5434 "type": "@keet/member-profile",
5435 "version": 1
5436 }
5437 ]
5438 },
5439 {
5440 "name": "device",
5441 "namespace": "local",
5442 "compact": false,
5443 "flagsPosition": -1,
5444 "fields": [
5445 {
5446 "name": "roomKey",
5447 "required": true,
5448 "type": "@keet/room-key",
5449 "version": 1
5450 },
5451 {
5452 "name": "device",
5453 "required": true,
5454 "type": "@keet/device",
5455 "version": 1
5456 }
5457 ]
5458 },
5459 {
5460 "name": "file",
5461 "namespace": "local",
5462 "compact": false,
5463 "flagsPosition": 2,
5464 "fields": [
5465 {
5466 "name": "file",
5467 "required": true,
5468 "type": "@keet/file",
5469 "version": 1
5470 },
5471 {
5472 "name": "roomKey",
5473 "required": true,
5474 "type": "@keet/room-key",
5475 "version": 1
5476 },
5477 {
5478 "name": "encryptionKey",
5479 "type": "@keet/encryption-key",
5480 "version": 1
5481 },
5482 {
5483 "name": "cleared",
5484 "type": "bool",
5485 "version": 1
5486 },
5487 {
5488 "name": "own",
5489 "type": "bool",
5490 "version": 1
5491 },
5492 {
5493 "name": "lastAccessed",
5494 "type": "uint",
5495 "version": 4
5496 },
5497 {
5498 "name": "version",
5499 "type": "uint",
5500 "version": 4
5501 }
5502 ]
5503 },
5504 {
5505 "name": "debug-flag",
5506 "namespace": "local",
5507 "compact": false,
5508 "flagsPosition": 0,
5509 "fields": [
5510 {
5511 "name": "key",
5512 "type": "string",
5513 "version": 1
5514 },
5515 {
5516 "name": "value",
5517 "type": "bool",
5518 "version": 1
5519 },
5520 {
5521 "name": "description",
5522 "type": "string",
5523 "version": 1
5524 }
5525 ]
5526 },
5527 {
5528 "name": "debug",
5529 "namespace": "local",
5530 "compact": false,
5531 "flagsPosition": 0,
5532 "fields": [
5533 {
5534 "name": "flags",
5535 "array": true,
5536 "type": "@local/debug-flag",
5537 "version": 1
5538 }
5539 ]
5540 },
5541 {
5542 "name": "hyperdht-record",
5543 "namespace": "local",
5544 "compact": false,
5545 "flagsPosition": 0,
5546 "fields": [
5547 {
5548 "name": "nodes",
5549 "array": true,
5550 "type": "ipv4Address",
5551 "version": 1
5552 },
5553 {
5554 "name": "concurrency",
5555 "type": "uint",
5556 "version": 1
5557 },
5558 {
5559 "name": "maxWindow",
5560 "type": "uint",
5561 "version": 1
5562 },
5563 {
5564 "name": "randomPunchInterval",
5565 "type": "uint",
5566 "version": 1
5567 },
5568 {
5569 "name": "connectionKeepAlive",
5570 "type": "uint",
5571 "version": 1
5572 }
5573 ]
5574 },
5575 {
5576 "name": "unread",
5577 "namespace": "local",
5578 "compact": false,
5579 "flagsPosition": -1,
5580 "fields": [
5581 {
5582 "name": "roomKey",
5583 "required": true,
5584 "type": "@keet/room-key",
5585 "version": 1
5586 },
5587 {
5588 "name": "count",
5589 "required": true,
5590 "type": "uint",
5591 "version": 1
5592 }
5593 ]
5594 },
5595 {
5596 "name": "error-record-details",
5597 "namespace": "local",
5598 "compact": false,
5599 "flagsPosition": 0,
5600 "fields": [
5601 {
5602 "name": "roomKey",
5603 "type": "@keet/room-key",
5604 "version": 1
5605 },
5606 {
5607 "name": "coreKey",
5608 "type": "@keet/core-key",
5609 "version": 1
5610 }
5611 ]
5612 },
5613 {
5614 "name": "error-record",
5615 "namespace": "local",
5616 "compact": false,
5617 "flagsPosition": 4,
5618 "fields": [
5619 {
5620 "name": "code",
5621 "required": true,
5622 "type": "string",
5623 "version": 1
5624 },
5625 {
5626 "name": "message",
5627 "required": true,
5628 "type": "string",
5629 "version": 1
5630 },
5631 {
5632 "name": "stack",
5633 "required": true,
5634 "type": "string",
5635 "version": 1
5636 },
5637 {
5638 "name": "timestamp",
5639 "required": true,
5640 "type": "uint",
5641 "version": 1
5642 },
5643 {
5644 "name": "details",
5645 "type": "@local/error-record-details",
5646 "version": 1
5647 }
5648 ]
5649 },
5650 {
5651 "name": "keet-state",
5652 "namespace": "local",
5653 "offset": 1,
5654 "enum": [
5655 {
5656 "key": "RESUME",
5657 "version": 1
5658 },
5659 {
5660 "key": "WAKEUP",
5661 "version": 1
5662 },
5663 {
5664 "key": "PRESUSPEND",
5665 "version": 1
5666 },
5667 {
5668 "key": "SUSPEND",
5669 "version": 1
5670 }
5671 ],
5672 "strings": false
5673 },
5674 {
5675 "name": "file-stats",
5676 "namespace": "local",
5677 "compact": false,
5678 "flagsPosition": -1,
5679 "fields": [
5680 {
5681 "name": "roomKey",
5682 "required": true,
5683 "type": "@keet/room-key",
5684 "version": 1
5685 },
5686 {
5687 "name": "total",
5688 "required": true,
5689 "type": "uint",
5690 "version": 1
5691 }
5692 ]
5693 },
5694 {
5695 "name": "request-header",
5696 "namespace": "api",
5697 "compact": false,
5698 "flagsPosition": -1,
5699 "fields": [
5700 {
5701 "name": "timestamp",
5702 "required": true,
5703 "type": "uint",
5704 "version": 1
5705 }
5706 ]
5707 },
5708 {
5709 "name": "response-header",
5710 "namespace": "api",
5711 "compact": false,
5712 "flagsPosition": -1,
5713 "fields": [
5714 {
5715 "name": "duration",
5716 "required": true,
5717 "type": "uint",
5718 "version": 1
5719 }
5720 ]
5721 },
5722 {
5723 "name": "subscription-request-header",
5724 "namespace": "api",
5725 "compact": false,
5726 "flagsPosition": -1,
5727 "fields": [
5728 {
5729 "name": "clock",
5730 "required": true,
5731 "type": "uint",
5732 "version": 1
5733 }
5734 ]
5735 },
5736 {
5737 "name": "subscription-response-header",
5738 "namespace": "api",
5739 "compact": false,
5740 "flagsPosition": -1,
5741 "fields": [
5742 {
5743 "name": "clock",
5744 "required": true,
5745 "type": "uint",
5746 "version": 1
5747 }
5748 ]
5749 },
5750 {
5751 "name": "boot-request",
5752 "namespace": "api",
5753 "compact": false,
5754 "flagsPosition": -1,
5755 "fields": [
5756 {
5757 "name": "header",
5758 "required": true,
5759 "type": "@api/request-header",
5760 "version": 1
5761 }
5762 ]
5763 },
5764 {
5765 "name": "boot-response",
5766 "namespace": "api",
5767 "compact": false,
5768 "flagsPosition": -1,
5769 "fields": [
5770 {
5771 "name": "header",
5772 "required": true,
5773 "type": "@api/response-header",
5774 "version": 1
5775 }
5776 ]
5777 },
5778 {
5779 "name": "self-destruct-request",
5780 "namespace": "api",
5781 "compact": false,
5782 "flagsPosition": -1,
5783 "fields": [
5784 {
5785 "name": "header",
5786 "required": true,
5787 "type": "@api/request-header",
5788 "version": 1
5789 }
5790 ]
5791 },
5792 {
5793 "name": "inline-avatar",
5794 "namespace": "api/core",
5795 "alias": "buffer",
5796 "version": 1
5797 },
5798 {
5799 "name": "have",
5800 "namespace": "api/core",
5801 "compact": true,
5802 "flagsPosition": -1,
5803 "fields": [
5804 {
5805 "name": "clock",
5806 "required": true,
5807 "type": "uint",
5808 "version": 1
5809 }
5810 ]
5811 },
5812 {
5813 "name": "create-room-request",
5814 "namespace": "api/core",
5815 "compact": false,
5816 "flagsPosition": 1,
5817 "fields": [
5818 {
5819 "name": "header",
5820 "required": true,
5821 "type": "@api/request-header",
5822 "version": 1
5823 },
5824 {
5825 "name": "config",
5826 "type": "@keet/room-config",
5827 "version": 1
5828 },
5829 {
5830 "name": "settings",
5831 "type": "@keet/system-settings",
5832 "version": 1
5833 }
5834 ]
5835 },
5836 {
5837 "name": "create-room-response",
5838 "namespace": "api/core",
5839 "compact": false,
5840 "flagsPosition": 1,
5841 "fields": [
5842 {
5843 "name": "header",
5844 "required": true,
5845 "type": "@api/response-header",
5846 "version": 1
5847 },
5848 {
5849 "name": "roomKey",
5850 "type": "@keet/room-key",
5851 "version": 1
5852 }
5853 ]
5854 },
5855 {
5856 "name": "activate-room-request",
5857 "namespace": "api/core",
5858 "compact": false,
5859 "flagsPosition": -1,
5860 "fields": [
5861 {
5862 "name": "header",
5863 "required": true,
5864 "type": "@api/request-header",
5865 "version": 1
5866 },
5867 {
5868 "name": "roomKey",
5869 "required": true,
5870 "type": "@keet/room-key",
5871 "version": 1
5872 }
5873 ]
5874 },
5875 {
5876 "name": "deactivate-room-request",
5877 "namespace": "api/core",
5878 "compact": false,
5879 "flagsPosition": -1,
5880 "fields": [
5881 {
5882 "name": "header",
5883 "required": true,
5884 "type": "@api/request-header",
5885 "version": 1
5886 },
5887 {
5888 "name": "roomKey",
5889 "required": true,
5890 "type": "@keet/room-key",
5891 "version": 1
5892 }
5893 ]
5894 },
5895 {
5896 "name": "leave-room-request",
5897 "namespace": "api/core",
5898 "compact": false,
5899 "flagsPosition": -1,
5900 "fields": [
5901 {
5902 "name": "header",
5903 "required": true,
5904 "type": "@api/request-header",
5905 "version": 1
5906 },
5907 {
5908 "name": "roomKey",
5909 "required": true,
5910 "type": "@keet/room-key",
5911 "version": 1
5912 }
5913 ]
5914 },
5915 {
5916 "name": "leave-room-response",
5917 "namespace": "api/core",
5918 "compact": false,
5919 "flagsPosition": -1,
5920 "fields": [
5921 {
5922 "name": "header",
5923 "required": true,
5924 "type": "@api/response-header",
5925 "version": 1
5926 }
5927 ]
5928 },
5929 {
5930 "name": "update-room-config-request",
5931 "namespace": "api/core",
5932 "compact": false,
5933 "flagsPosition": -1,
5934 "fields": [
5935 {
5936 "name": "header",
5937 "required": true,
5938 "type": "@api/request-header",
5939 "version": 1
5940 },
5941 {
5942 "name": "roomKey",
5943 "required": true,
5944 "type": "@keet/room-key",
5945 "version": 1
5946 },
5947 {
5948 "name": "key",
5949 "required": true,
5950 "type": "uint",
5951 "version": 1
5952 },
5953 {
5954 "name": "config",
5955 "required": true,
5956 "type": "@keet/room-config",
5957 "version": 1
5958 }
5959 ]
5960 },
5961 {
5962 "name": "update-room-settings-request",
5963 "namespace": "api/core",
5964 "compact": false,
5965 "flagsPosition": -1,
5966 "fields": [
5967 {
5968 "name": "header",
5969 "required": true,
5970 "type": "@api/request-header",
5971 "version": 1
5972 },
5973 {
5974 "name": "roomKey",
5975 "required": true,
5976 "type": "@keet/room-key",
5977 "version": 1
5978 },
5979 {
5980 "name": "key",
5981 "required": true,
5982 "type": "uint",
5983 "version": 1
5984 },
5985 {
5986 "name": "settings",
5987 "required": true,
5988 "type": "@keet/system-settings",
5989 "version": 1
5990 }
5991 ]
5992 },
5993 {
5994 "name": "update-room-status-request",
5995 "namespace": "api/core",
5996 "compact": false,
5997 "flagsPosition": -1,
5998 "fields": [
5999 {
6000 "name": "header",
6001 "required": true,
6002 "type": "@api/request-header",
6003 "version": 1
6004 },
6005 {
6006 "name": "roomKey",
6007 "required": true,
6008 "type": "@keet/room-key",
6009 "version": 1
6010 },
6011 {
6012 "name": "key",
6013 "required": true,
6014 "type": "uint",
6015 "version": 1
6016 },
6017 {
6018 "name": "status",
6019 "required": true,
6020 "type": "@keet-private-id/room-status",
6021 "version": 1
6022 }
6023 ]
6024 },
6025 {
6026 "name": "add-chat-message-request",
6027 "namespace": "api/core",
6028 "compact": false,
6029 "flagsPosition": -1,
6030 "fields": [
6031 {
6032 "name": "header",
6033 "required": true,
6034 "type": "@api/request-header",
6035 "version": 1
6036 },
6037 {
6038 "name": "roomKey",
6039 "required": true,
6040 "type": "@keet/room-key",
6041 "version": 1
6042 },
6043 {
6044 "name": "message",
6045 "required": true,
6046 "type": "@keet/oplog-message",
6047 "version": 1
6048 }
6049 ]
6050 },
6051 {
6052 "name": "add-chat-message-response",
6053 "namespace": "api/core",
6054 "compact": false,
6055 "flagsPosition": -1,
6056 "fields": [
6057 {
6058 "name": "header",
6059 "required": true,
6060 "type": "@api/response-header",
6061 "version": 1
6062 }
6063 ]
6064 },
6065 {
6066 "name": "edit-chat-message-request",
6067 "namespace": "api/core",
6068 "compact": false,
6069 "flagsPosition": -1,
6070 "fields": [
6071 {
6072 "name": "header",
6073 "required": true,
6074 "type": "@api/request-header",
6075 "version": 1
6076 },
6077 {
6078 "name": "roomKey",
6079 "required": true,
6080 "type": "@keet/room-key",
6081 "version": 1
6082 },
6083 {
6084 "name": "id",
6085 "required": true,
6086 "type": "@keet/oplog-id",
6087 "version": 1
6088 },
6089 {
6090 "name": "message",
6091 "required": true,
6092 "type": "@keet/oplog-message",
6093 "version": 1
6094 }
6095 ]
6096 },
6097 {
6098 "name": "edit-chat-message-response",
6099 "namespace": "api/core",
6100 "compact": false,
6101 "flagsPosition": -1,
6102 "fields": [
6103 {
6104 "name": "header",
6105 "required": true,
6106 "type": "@api/response-header",
6107 "version": 1
6108 }
6109 ]
6110 },
6111 {
6112 "name": "remove-chat-message-request",
6113 "namespace": "api/core",
6114 "compact": false,
6115 "flagsPosition": -1,
6116 "fields": [
6117 {
6118 "name": "header",
6119 "required": true,
6120 "type": "@api/request-header",
6121 "version": 1
6122 },
6123 {
6124 "name": "roomKey",
6125 "required": true,
6126 "type": "@keet/room-key",
6127 "version": 1
6128 },
6129 {
6130 "name": "id",
6131 "required": true,
6132 "type": "@keet/oplog-id",
6133 "version": 1
6134 }
6135 ]
6136 },
6137 {
6138 "name": "remove-chat-message-response",
6139 "namespace": "api/core",
6140 "compact": false,
6141 "flagsPosition": -1,
6142 "fields": [
6143 {
6144 "name": "header",
6145 "required": true,
6146 "type": "@api/response-header",
6147 "version": 1
6148 }
6149 ]
6150 },
6151 {
6152 "name": "add-chat-reaction-request",
6153 "namespace": "api/core",
6154 "compact": false,
6155 "flagsPosition": -1,
6156 "fields": [
6157 {
6158 "name": "header",
6159 "required": true,
6160 "type": "@api/request-header",
6161 "version": 1
6162 },
6163 {
6164 "name": "roomKey",
6165 "required": true,
6166 "type": "@keet/room-key",
6167 "version": 1
6168 },
6169 {
6170 "name": "id",
6171 "required": true,
6172 "type": "@keet/oplog-id",
6173 "version": 1
6174 },
6175 {
6176 "name": "reaction",
6177 "required": true,
6178 "type": "string",
6179 "version": 1
6180 }
6181 ]
6182 },
6183 {
6184 "name": "add-chat-reaction-response",
6185 "namespace": "api/core",
6186 "compact": false,
6187 "flagsPosition": -1,
6188 "fields": [
6189 {
6190 "name": "header",
6191 "required": true,
6192 "type": "@api/response-header",
6193 "version": 1
6194 }
6195 ]
6196 },
6197 {
6198 "name": "remove-chat-reaction-request",
6199 "namespace": "api/core",
6200 "compact": false,
6201 "flagsPosition": -1,
6202 "fields": [
6203 {
6204 "name": "header",
6205 "required": true,
6206 "type": "@api/request-header",
6207 "version": 1
6208 },
6209 {
6210 "name": "roomKey",
6211 "required": true,
6212 "type": "@keet/room-key",
6213 "version": 1
6214 },
6215 {
6216 "name": "id",
6217 "required": true,
6218 "type": "@keet/oplog-id",
6219 "version": 1
6220 },
6221 {
6222 "name": "reaction",
6223 "required": true,
6224 "type": "string",
6225 "version": 1
6226 }
6227 ]
6228 },
6229 {
6230 "name": "remove-chat-reaction-response",
6231 "namespace": "api/core",
6232 "compact": false,
6233 "flagsPosition": -1,
6234 "fields": [
6235 {
6236 "name": "header",
6237 "required": true,
6238 "type": "@api/response-header",
6239 "version": 1
6240 }
6241 ]
6242 },
6243 {
6244 "name": "want-lobby",
6245 "namespace": "api/core",
6246 "compact": false,
6247 "flagsPosition": -1,
6248 "fields": [
6249 {
6250 "name": "clock",
6251 "required": true,
6252 "type": "uint",
6253 "version": 1
6254 },
6255 {
6256 "name": "start",
6257 "required": true,
6258 "type": "uint",
6259 "version": 1
6260 },
6261 {
6262 "name": "end",
6263 "required": true,
6264 "type": "uint",
6265 "version": 1
6266 }
6267 ]
6268 },
6269 {
6270 "name": "unwant-lobby",
6271 "namespace": "api/core",
6272 "compact": false,
6273 "flagsPosition": -1,
6274 "fields": [
6275 {
6276 "name": "clock",
6277 "required": true,
6278 "type": "uint",
6279 "version": 1
6280 }
6281 ]
6282 },
6283 {
6284 "name": "want-room-info",
6285 "namespace": "api/core",
6286 "compact": false,
6287 "flagsPosition": -1,
6288 "fields": [
6289 {
6290 "name": "clock",
6291 "required": true,
6292 "type": "uint",
6293 "version": 1
6294 },
6295 {
6296 "name": "keys",
6297 "required": true,
6298 "array": true,
6299 "type": "@keet/room-key",
6300 "version": 1
6301 }
6302 ]
6303 },
6304 {
6305 "name": "want-chat",
6306 "namespace": "api/core",
6307 "compact": false,
6308 "flagsPosition": 2,
6309 "fields": [
6310 {
6311 "name": "clock",
6312 "required": true,
6313 "type": "uint",
6314 "version": 1
6315 },
6316 {
6317 "name": "roomKey",
6318 "required": true,
6319 "type": "@keet/room-key",
6320 "version": 1
6321 },
6322 {
6323 "name": "start",
6324 "type": "uint",
6325 "version": 1
6326 },
6327 {
6328 "name": "size",
6329 "type": "uint",
6330 "version": 1
6331 },
6332 {
6333 "name": "isBottom",
6334 "type": "bool",
6335 "version": 1
6336 }
6337 ]
6338 },
6339 {
6340 "name": "unwant-chat",
6341 "namespace": "api/core",
6342 "compact": false,
6343 "flagsPosition": -1,
6344 "fields": [
6345 {
6346 "name": "clock",
6347 "required": true,
6348 "type": "uint",
6349 "version": 1
6350 }
6351 ]
6352 },
6353 {
6354 "name": "want-members",
6355 "namespace": "api/core",
6356 "compact": false,
6357 "flagsPosition": 2,
6358 "fields": [
6359 {
6360 "name": "clock",
6361 "required": true,
6362 "type": "uint",
6363 "version": 1
6364 },
6365 {
6366 "name": "roomKey",
6367 "required": true,
6368 "type": "@keet/room-key",
6369 "version": 1
6370 },
6371 {
6372 "name": "offset",
6373 "type": "@keet/member-key",
6374 "version": 1
6375 },
6376 {
6377 "name": "count",
6378 "type": "uint",
6379 "version": 1
6380 }
6381 ]
6382 },
6383 {
6384 "name": "unwant-members",
6385 "namespace": "api/core",
6386 "compact": false,
6387 "flagsPosition": -1,
6388 "fields": [
6389 {
6390 "name": "clock",
6391 "required": true,
6392 "type": "uint",
6393 "version": 1
6394 }
6395 ]
6396 },
6397 {
6398 "name": "lobby-record",
6399 "namespace": "api/core",
6400 "compact": true,
6401 "flagsPosition": -1,
6402 "fields": [
6403 {
6404 "name": "timestamp",
6405 "required": true,
6406 "type": "uint",
6407 "version": 1
6408 },
6409 {
6410 "name": "id",
6411 "required": true,
6412 "type": "@keet/room-key",
6413 "version": 1
6414 }
6415 ]
6416 },
6417 {
6418 "name": "lobby-record-change-type",
6419 "namespace": "api/core",
6420 "offset": 1,
6421 "enum": [
6422 {
6423 "key": "Changed",
6424 "version": 1
6425 },
6426 {
6427 "key": "Removed",
6428 "version": 1
6429 }
6430 ],
6431 "strings": false
6432 },
6433 {
6434 "name": "lobby",
6435 "namespace": "api/core",
6436 "compact": false,
6437 "flagsPosition": -1,
6438 "fields": [
6439 {
6440 "name": "keys",
6441 "required": true,
6442 "array": true,
6443 "type": "@keet/room-key",
6444 "version": 1
6445 },
6446 {
6447 "name": "start",
6448 "required": true,
6449 "type": "uint",
6450 "version": 1
6451 },
6452 {
6453 "name": "end",
6454 "required": true,
6455 "type": "uint",
6456 "version": 1
6457 },
6458 {
6459 "name": "total",
6460 "required": true,
6461 "type": "uint",
6462 "version": 1
6463 }
6464 ]
6465 },
6466 {
6467 "name": "lobby-room",
6468 "namespace": "api/core",
6469 "compact": false,
6470 "flagsPosition": -1,
6471 "fields": [
6472 {
6473 "name": "type",
6474 "required": true,
6475 "type": "@api/core/lobby-record-change-type",
6476 "version": 1
6477 },
6478 {
6479 "name": "room",
6480 "required": true,
6481 "type": "@api/core/lobby-record",
6482 "version": 1
6483 }
6484 ]
6485 },
6486 {
6487 "name": "room-role",
6488 "namespace": "api/core",
6489 "compact": false,
6490 "flagsPosition": 1,
6491 "fields": [
6492 {
6493 "name": "device",
6494 "required": true,
6495 "type": "@local/room-status",
6496 "version": 1
6497 },
6498 {
6499 "name": "member",
6500 "type": "@keet/member-status",
6501 "version": 1
6502 }
6503 ]
6504 },
6505 {
6506 "name": "room-info",
6507 "namespace": "api/core",
6508 "compact": false,
6509 "flagsPosition": 4,
6510 "fields": [
6511 {
6512 "name": "id",
6513 "required": true,
6514 "type": "@keet/room-key",
6515 "version": 1
6516 },
6517 {
6518 "name": "role",
6519 "required": true,
6520 "type": "@api/core/room-role",
6521 "version": 1
6522 },
6523 {
6524 "name": "digest",
6525 "required": true,
6526 "type": "@keet/system-digest",
6527 "version": 1
6528 },
6529 {
6530 "name": "config",
6531 "required": true,
6532 "type": "@keet/room-config",
6533 "version": 1
6534 },
6535 {
6536 "name": "messageId",
6537 "type": "@keet/oplog-id",
6538 "version": 1
6539 }
6540 ]
6541 },
6542 {
6543 "name": "room-info-status",
6544 "namespace": "api/core",
6545 "compact": false,
6546 "flagsPosition": -1,
6547 "fields": [
6548 {
6549 "name": "id",
6550 "required": true,
6551 "type": "@keet/room-key",
6552 "version": 1
6553 },
6554 {
6555 "name": "status",
6556 "required": true,
6557 "type": "@local/room-status",
6558 "version": 1
6559 }
6560 ]
6561 },
6562 {
6563 "name": "room-info-digest",
6564 "namespace": "api/core",
6565 "compact": false,
6566 "flagsPosition": -1,
6567 "fields": [
6568 {
6569 "name": "id",
6570 "required": true,
6571 "type": "@keet/room-key",
6572 "version": 1
6573 },
6574 {
6575 "name": "digest",
6576 "required": true,
6577 "type": "@keet/system-digest",
6578 "version": 1
6579 }
6580 ]
6581 },
6582 {
6583 "name": "room-info-config",
6584 "namespace": "api/core",
6585 "compact": false,
6586 "flagsPosition": -1,
6587 "fields": [
6588 {
6589 "name": "id",
6590 "required": true,
6591 "type": "@keet/room-key",
6592 "version": 1
6593 },
6594 {
6595 "name": "config",
6596 "required": true,
6597 "type": "@keet/room-config",
6598 "version": 1
6599 }
6600 ]
6601 },
6602 {
6603 "name": "room-info-role",
6604 "namespace": "api/core",
6605 "compact": false,
6606 "flagsPosition": 1,
6607 "fields": [
6608 {
6609 "name": "id",
6610 "required": true,
6611 "type": "@keet/room-key",
6612 "version": 1
6613 },
6614 {
6615 "name": "role",
6616 "type": "@api/core/room-role",
6617 "version": 1
6618 }
6619 ]
6620 },
6621 {
6622 "name": "room-info-last-message",
6623 "namespace": "api/core",
6624 "compact": false,
6625 "flagsPosition": -1,
6626 "fields": [
6627 {
6628 "name": "id",
6629 "required": true,
6630 "type": "@keet/room-key",
6631 "version": 1
6632 },
6633 {
6634 "name": "lastMessage",
6635 "required": true,
6636 "type": "@keet/oplog-id",
6637 "version": 1
6638 }
6639 ]
6640 },
6641 {
6642 "name": "member",
6643 "namespace": "api/core",
6644 "compact": false,
6645 "flagsPosition": -1,
6646 "fields": [
6647 {
6648 "name": "key",
6649 "required": true,
6650 "type": "@keet/member-key",
6651 "version": 1
6652 },
6653 {
6654 "name": "profile",
6655 "required": true,
6656 "type": "@keet/member-profile",
6657 "version": 1
6658 }
6659 ]
6660 },
6661 {
6662 "name": "device",
6663 "namespace": "api/core",
6664 "compact": false,
6665 "flagsPosition": -1,
6666 "fields": [
6667 {
6668 "name": "key",
6669 "required": true,
6670 "type": "@keet/device-key",
6671 "version": 1
6672 },
6673 {
6674 "name": "status",
6675 "required": true,
6676 "type": "@keet/device-status",
6677 "version": 1
6678 },
6679 {
6680 "name": "profile",
6681 "required": true,
6682 "type": "@keet/device-profile",
6683 "version": 1
6684 }
6685 ]
6686 },
6687 {
6688 "name": "member-list-add",
6689 "namespace": "api/core",
6690 "compact": false,
6691 "flagsPosition": -1,
6692 "fields": [
6693 {
6694 "name": "roomKey",
6695 "required": true,
6696 "type": "@keet/room-key",
6697 "version": 1
6698 },
6699 {
6700 "name": "key",
6701 "required": true,
6702 "type": "@keet/member-key",
6703 "version": 1
6704 }
6705 ]
6706 },
6707 {
6708 "name": "member-list-remove",
6709 "namespace": "api/core",
6710 "compact": false,
6711 "flagsPosition": -1,
6712 "fields": [
6713 {
6714 "name": "roomKey",
6715 "required": true,
6716 "type": "@keet/room-key",
6717 "version": 1
6718 },
6719 {
6720 "name": "key",
6721 "required": true,
6722 "type": "@keet/member-key",
6723 "version": 1
6724 }
6725 ]
6726 },
6727 {
6728 "name": "chat-reset",
6729 "namespace": "api/core",
6730 "compact": false,
6731 "flagsPosition": 5,
6732 "fields": [
6733 {
6734 "name": "roomKey",
6735 "required": true,
6736 "type": "@keet/room-key",
6737 "version": 1
6738 },
6739 {
6740 "name": "start",
6741 "required": true,
6742 "type": "uint",
6743 "version": 1
6744 },
6745 {
6746 "name": "size",
6747 "required": true,
6748 "type": "uint",
6749 "version": 1
6750 },
6751 {
6752 "name": "total",
6753 "required": true,
6754 "type": "uint",
6755 "version": 1
6756 },
6757 {
6758 "name": "ids",
6759 "required": true,
6760 "array": true,
6761 "type": "@keet/oplog-id",
6762 "version": 1
6763 },
6764 {
6765 "name": "isBottom",
6766 "type": "bool",
6767 "version": 1
6768 }
6769 ]
6770 },
6771 {
6772 "name": "message-timestamps",
6773 "namespace": "api/core",
6774 "compact": false,
6775 "flagsPosition": 1,
6776 "fields": [
6777 {
6778 "name": "sent",
6779 "required": true,
6780 "type": "uint",
6781 "version": 1
6782 },
6783 {
6784 "name": "edited",
6785 "type": "uint",
6786 "version": 1
6787 }
6788 ]
6789 },
6790 {
6791 "name": "message",
6792 "namespace": "api/core",
6793 "compact": false,
6794 "flagsPosition": 4,
6795 "fields": [
6796 {
6797 "name": "id",
6798 "required": true,
6799 "type": "@keet/oplog-id",
6800 "version": 1
6801 },
6802 {
6803 "name": "clock",
6804 "required": true,
6805 "type": "uint",
6806 "version": 1
6807 },
6808 {
6809 "name": "timestamps",
6810 "required": true,
6811 "type": "@api/core/message-timestamps",
6812 "version": 1
6813 },
6814 {
6815 "name": "status",
6816 "required": true,
6817 "type": "@keet/message-status",
6818 "version": 1
6819 },
6820 {
6821 "name": "message",
6822 "type": "@keet/index-message",
6823 "version": 1
6824 },
6825 {
6826 "name": "event",
6827 "type": "@keet/chat-event",
6828 "version": 1
6829 }
6830 ]
6831 },
6832 {
6833 "name": "message-info",
6834 "namespace": "api/core",
6835 "compact": false,
6836 "flagsPosition": -1,
6837 "fields": [
6838 {
6839 "name": "chat",
6840 "required": true,
6841 "type": "@api/core/message",
6842 "version": 1
6843 },
6844 {
6845 "name": "memberKey",
6846 "required": true,
6847 "type": "@keet/member-key",
6848 "version": 1
6849 },
6850 {
6851 "name": "role",
6852 "required": true,
6853 "type": "@keet/member-status",
6854 "version": 1
6855 }
6856 ]
6857 },
6858 {
6859 "name": "message-info-chat",
6860 "namespace": "api/core",
6861 "compact": false,
6862 "flagsPosition": -1,
6863 "fields": [
6864 {
6865 "name": "chat",
6866 "required": true,
6867 "type": "@api/core/message",
6868 "version": 1
6869 }
6870 ]
6871 },
6872 {
6873 "name": "message-info-member",
6874 "namespace": "api/core",
6875 "compact": false,
6876 "flagsPosition": -1,
6877 "fields": [
6878 {
6879 "name": "ids",
6880 "required": true,
6881 "array": true,
6882 "type": "@keet/oplog-id",
6883 "version": 1
6884 },
6885 {
6886 "name": "memberKey",
6887 "required": true,
6888 "type": "@keet/member-key",
6889 "version": 1
6890 }
6891 ]
6892 },
6893 {
6894 "name": "message-info-role",
6895 "namespace": "api/core",
6896 "compact": false,
6897 "flagsPosition": -1,
6898 "fields": [
6899 {
6900 "name": "ids",
6901 "required": true,
6902 "array": true,
6903 "type": "@keet/oplog-id",
6904 "version": 1
6905 },
6906 {
6907 "name": "role",
6908 "required": true,
6909 "type": "@keet/member-status",
6910 "version": 1
6911 }
6912 ]
6913 },
6914 {
6915 "name": "message-info-reactions",
6916 "namespace": "api/core",
6917 "compact": false,
6918 "flagsPosition": -1,
6919 "fields": [
6920 {
6921 "name": "id",
6922 "required": true,
6923 "type": "@keet/oplog-id",
6924 "version": 1
6925 },
6926 {
6927 "name": "reactions",
6928 "required": true,
6929 "type": "@keet/reactions-digest",
6930 "version": 1
6931 }
6932 ]
6933 },
6934 {
6935 "name": "reactions",
6936 "namespace": "api/core",
6937 "compact": false,
6938 "flagsPosition": -1,
6939 "fields": [
6940 {
6941 "name": "id",
6942 "required": true,
6943 "type": "@keet/oplog-id",
6944 "version": 1
6945 },
6946 {
6947 "name": "digest",
6948 "required": true,
6949 "type": "@keet/reactions-digest",
6950 "version": 1
6951 }
6952 ]
6953 },
6954 {
6955 "name": "want-pairing",
6956 "namespace": "api/core",
6957 "compact": false,
6958 "flagsPosition": -1,
6959 "fields": [
6960 {
6961 "name": "clock",
6962 "required": true,
6963 "type": "uint",
6964 "version": 1
6965 }
6966 ]
6967 },
6968 {
6969 "name": "unwant-pairing",
6970 "namespace": "api/core",
6971 "compact": false,
6972 "flagsPosition": -1,
6973 "fields": [
6974 {
6975 "name": "clock",
6976 "required": true,
6977 "type": "uint",
6978 "version": 1
6979 }
6980 ]
6981 },
6982 {
6983 "name": "pending-invitations",
6984 "namespace": "api/core",
6985 "compact": false,
6986 "flagsPosition": -1,
6987 "fields": [
6988 {
6989 "name": "invitations",
6990 "required": true,
6991 "array": true,
6992 "type": "@keet-private-id/pending-invitation",
6993 "version": 1
6994 }
6995 ]
6996 },
6997 {
6998 "name": "join-request",
6999 "namespace": "api/core",
7000 "compact": false,
7001 "flagsPosition": -1,
7002 "fields": [
7003 {
7004 "name": "roomKey",
7005 "required": true,
7006 "type": "@keet/room-key",
7007 "version": 1
7008 },
7009 {
7010 "name": "request",
7011 "required": true,
7012 "type": "@keet/join-request",
7013 "version": 1
7014 }
7015 ]
7016 },
7017 {
7018 "name": "join-requests",
7019 "namespace": "api/core",
7020 "compact": false,
7021 "flagsPosition": -1,
7022 "fields": [
7023 {
7024 "name": "requests",
7025 "required": true,
7026 "array": true,
7027 "type": "@api/core/join-request",
7028 "version": 1
7029 }
7030 ]
7031 },
7032 {
7033 "name": "pairing",
7034 "namespace": "api/core",
7035 "compact": false,
7036 "flagsPosition": -1,
7037 "fields": [
7038 {
7039 "name": "pendingInvitations",
7040 "required": true,
7041 "array": true,
7042 "type": "@keet-private-id/pending-invitation",
7043 "version": 1
7044 },
7045 {
7046 "name": "identityJoinRequests",
7047 "required": true,
7048 "array": true,
7049 "type": "@keet/join-request",
7050 "version": 1
7051 }
7052 ]
7053 },
7054 {
7055 "name": "start-pairing-request",
7056 "namespace": "api/core",
7057 "compact": false,
7058 "flagsPosition": 2,
7059 "fields": [
7060 {
7061 "name": "header",
7062 "required": true,
7063 "type": "@api/request-header",
7064 "version": 1
7065 },
7066 {
7067 "name": "invitation",
7068 "required": true,
7069 "type": "string",
7070 "version": 1
7071 },
7072 {
7073 "name": "isIdentity",
7074 "type": "bool",
7075 "version": 1
7076 }
7077 ]
7078 },
7079 {
7080 "name": "start-pairing-response",
7081 "namespace": "api/core",
7082 "compact": false,
7083 "flagsPosition": -1,
7084 "fields": [
7085 {
7086 "name": "header",
7087 "required": true,
7088 "type": "@api/response-header",
7089 "version": 1
7090 }
7091 ]
7092 },
7093 {
7094 "name": "invitation-permissions",
7095 "namespace": "api/core",
7096 "compact": false,
7097 "flagsPosition": 0,
7098 "fields": [
7099 {
7100 "name": "canModerate",
7101 "type": "bool",
7102 "version": 1
7103 },
7104 {
7105 "name": "canAdmin",
7106 "type": "bool",
7107 "version": 1
7108 },
7109 {
7110 "name": "requiresConfirmation",
7111 "type": "bool",
7112 "version": 1
7113 },
7114 {
7115 "name": "isReadOnly",
7116 "type": "bool",
7117 "version": 1
7118 }
7119 ]
7120 },
7121 {
7122 "name": "create-room-invitation-request",
7123 "namespace": "api/core",
7124 "compact": false,
7125 "flagsPosition": 2,
7126 "fields": [
7127 {
7128 "name": "header",
7129 "required": true,
7130 "type": "@api/request-header",
7131 "version": 1
7132 },
7133 {
7134 "name": "roomKey",
7135 "required": true,
7136 "type": "@keet/room-key",
7137 "version": 1
7138 },
7139 {
7140 "name": "permissions",
7141 "type": "@api/core/invitation-permissions",
7142 "version": 1
7143 },
7144 {
7145 "name": "expiration",
7146 "type": "uint",
7147 "version": 1
7148 }
7149 ]
7150 },
7151 {
7152 "name": "create-room-invitation-response",
7153 "namespace": "api/core",
7154 "compact": false,
7155 "flagsPosition": -1,
7156 "fields": [
7157 {
7158 "name": "header",
7159 "required": true,
7160 "type": "@api/response-header",
7161 "version": 1
7162 },
7163 {
7164 "name": "invitation",
7165 "required": true,
7166 "type": "string",
7167 "version": 1
7168 }
7169 ]
7170 },
7171 {
7172 "name": "create-identity-invitation-request",
7173 "namespace": "api/core",
7174 "compact": false,
7175 "flagsPosition": -1,
7176 "fields": [
7177 {
7178 "name": "header",
7179 "required": true,
7180 "type": "@api/request-header",
7181 "version": 1
7182 }
7183 ]
7184 },
7185 {
7186 "name": "create-identity-invitation-response",
7187 "namespace": "api/core",
7188 "compact": false,
7189 "flagsPosition": -1,
7190 "fields": [
7191 {
7192 "name": "header",
7193 "required": true,
7194 "type": "@api/response-header",
7195 "version": 1
7196 },
7197 {
7198 "name": "invitation",
7199 "required": true,
7200 "type": "string",
7201 "version": 1
7202 }
7203 ]
7204 },
7205 {
7206 "name": "accept-join-request-request",
7207 "namespace": "api/core",
7208 "compact": false,
7209 "flagsPosition": -1,
7210 "fields": [
7211 {
7212 "name": "header",
7213 "required": true,
7214 "type": "@api/request-header",
7215 "version": 1
7216 },
7217 {
7218 "name": "roomKey",
7219 "required": true,
7220 "type": "@keet/room-key",
7221 "version": 1
7222 },
7223 {
7224 "name": "request",
7225 "required": true,
7226 "type": "@keet/join-request",
7227 "version": 1
7228 }
7229 ]
7230 },
7231 {
7232 "name": "accept-join-request-response",
7233 "namespace": "api/core",
7234 "compact": false,
7235 "flagsPosition": -1,
7236 "fields": [
7237 {
7238 "name": "header",
7239 "required": true,
7240 "type": "@api/response-header",
7241 "version": 1
7242 }
7243 ]
7244 },
7245 {
7246 "name": "reject-join-request-request",
7247 "namespace": "api/core",
7248 "compact": false,
7249 "flagsPosition": -1,
7250 "fields": [
7251 {
7252 "name": "header",
7253 "required": true,
7254 "type": "@api/request-header",
7255 "version": 1
7256 },
7257 {
7258 "name": "roomKey",
7259 "required": true,
7260 "type": "@keet/room-key",
7261 "version": 1
7262 },
7263 {
7264 "name": "request",
7265 "required": true,
7266 "type": "@keet/join-request",
7267 "version": 1
7268 }
7269 ]
7270 },
7271 {
7272 "name": "reject-join-request-response",
7273 "namespace": "api/core",
7274 "compact": false,
7275 "flagsPosition": -1,
7276 "fields": [
7277 {
7278 "name": "header",
7279 "required": true,
7280 "type": "@api/response-header",
7281 "version": 1
7282 }
7283 ]
7284 },
7285 {
7286 "name": "stop-pairing-request",
7287 "namespace": "api/core",
7288 "compact": false,
7289 "flagsPosition": -1,
7290 "fields": [
7291 {
7292 "name": "header",
7293 "required": true,
7294 "type": "@api/request-header",
7295 "version": 1
7296 },
7297 {
7298 "name": "id",
7299 "required": true,
7300 "type": "@keet/invitation-id",
7301 "version": 1
7302 }
7303 ]
7304 },
7305 {
7306 "name": "stop-pairing-response",
7307 "namespace": "api/core",
7308 "compact": false,
7309 "flagsPosition": -1,
7310 "fields": [
7311 {
7312 "name": "header",
7313 "required": true,
7314 "type": "@api/response-header",
7315 "version": 1
7316 }
7317 ]
7318 },
7319 {
7320 "name": "update-profile-request",
7321 "namespace": "api/core",
7322 "compact": false,
7323 "flagsPosition": 2,
7324 "fields": [
7325 {
7326 "name": "header",
7327 "required": true,
7328 "type": "@api/request-header",
7329 "version": 1
7330 },
7331 {
7332 "name": "displayName",
7333 "required": true,
7334 "type": "string",
7335 "version": 1
7336 },
7337 {
7338 "name": "avatar",
7339 "type": "@api/core/inline-avatar",
7340 "version": 1
7341 }
7342 ]
7343 },
7344 {
7345 "name": "want-identity",
7346 "namespace": "api/core",
7347 "compact": false,
7348 "flagsPosition": -1,
7349 "fields": [
7350 {
7351 "name": "clock",
7352 "required": true,
7353 "type": "uint",
7354 "version": 1
7355 }
7356 ]
7357 },
7358 {
7359 "name": "unwant-identity",
7360 "namespace": "api/core",
7361 "compact": false,
7362 "flagsPosition": -1,
7363 "fields": [
7364 {
7365 "name": "clock",
7366 "required": true,
7367 "type": "uint",
7368 "version": 1
7369 }
7370 ]
7371 },
7372 {
7373 "name": "identity-status",
7374 "namespace": "api/core",
7375 "compact": false,
7376 "flagsPosition": 0,
7377 "fields": [
7378 {
7379 "name": "isConfirmed",
7380 "type": "bool",
7381 "version": 1
7382 },
7383 {
7384 "name": "isLoggedOut",
7385 "type": "bool",
7386 "version": 1
7387 }
7388 ]
7389 },
7390 {
7391 "name": "identity",
7392 "namespace": "api/core",
7393 "compact": false,
7394 "flagsPosition": -1,
7395 "fields": [
7396 {
7397 "name": "memberKey",
7398 "required": true,
7399 "type": "@keet/member-key",
7400 "version": 1
7401 },
7402 {
7403 "name": "status",
7404 "required": true,
7405 "type": "@api/core/identity-status",
7406 "version": 1
7407 },
7408 {
7409 "name": "deviceKeys",
7410 "required": true,
7411 "array": true,
7412 "type": "@keet/device-key",
7413 "version": 1
7414 }
7415 ]
7416 },
7417 {
7418 "name": "identity-member",
7419 "namespace": "api/core",
7420 "compact": false,
7421 "flagsPosition": -1,
7422 "fields": [
7423 {
7424 "name": "memberKey",
7425 "required": true,
7426 "type": "@keet/member-key",
7427 "version": 1
7428 }
7429 ]
7430 },
7431 {
7432 "name": "identity-device",
7433 "namespace": "api/core",
7434 "compact": false,
7435 "flagsPosition": -1,
7436 "fields": [
7437 {
7438 "name": "deviceKey",
7439 "required": true,
7440 "type": "@keet/device-key",
7441 "version": 1
7442 }
7443 ]
7444 },
7445 {
7446 "name": "enable-request",
7447 "namespace": "api/debug",
7448 "compact": false,
7449 "flagsPosition": -1,
7450 "fields": [
7451 {
7452 "name": "header",
7453 "required": true,
7454 "type": "@api/request-header",
7455 "version": 1
7456 },
7457 {
7458 "name": "password",
7459 "required": true,
7460 "type": "string",
7461 "version": 1
7462 }
7463 ]
7464 },
7465 {
7466 "name": "enable-response",
7467 "namespace": "api/debug",
7468 "compact": false,
7469 "flagsPosition": -1,
7470 "fields": [
7471 {
7472 "name": "header",
7473 "required": true,
7474 "type": "@api/response-header",
7475 "version": 1
7476 },
7477 {
7478 "name": "inspector",
7479 "required": true,
7480 "type": "string",
7481 "version": 1
7482 }
7483 ]
7484 },
7485 {
7486 "name": "disable-request",
7487 "namespace": "api/debug",
7488 "compact": false,
7489 "flagsPosition": -1,
7490 "fields": [
7491 {
7492 "name": "header",
7493 "required": true,
7494 "type": "@api/response-header",
7495 "version": 1
7496 }
7497 ]
7498 },
7499 {
7500 "name": "disable-response",
7501 "namespace": "api/debug",
7502 "compact": false,
7503 "flagsPosition": -1,
7504 "fields": [
7505 {
7506 "name": "header",
7507 "required": true,
7508 "type": "@api/response-header",
7509 "version": 1
7510 }
7511 ]
7512 },
7513 {
7514 "name": "member-label-type",
7515 "namespace": "keet",
7516 "offset": 1,
7517 "enum": [
7518 {
7519 "key": "Flag",
7520 "version": 2
7521 }
7522 ],
7523 "strings": false
7524 },
7525 {
7526 "name": "member-label",
7527 "namespace": "keet",
7528 "compact": false,
7529 "flagsPosition": -1,
7530 "fields": [
7531 {
7532 "name": "key",
7533 "required": true,
7534 "type": "@keet/member-key",
7535 "version": 2
7536 },
7537 {
7538 "name": "sender",
7539 "required": true,
7540 "type": "@keet/member-key",
7541 "version": 2
7542 },
7543 {
7544 "name": "clock",
7545 "required": true,
7546 "type": "uint",
7547 "version": 2
7548 },
7549 {
7550 "name": "label",
7551 "required": true,
7552 "type": "@keet/member-label-type",
7553 "version": 2
7554 }
7555 ]
7556 },
7557 {
7558 "name": "add-member-label-operation",
7559 "namespace": "keet",
7560 "compact": false,
7561 "flagsPosition": -1,
7562 "fields": [
7563 {
7564 "name": "header",
7565 "required": true,
7566 "type": "@keet/operation-header",
7567 "version": 2
7568 },
7569 {
7570 "name": "key",
7571 "required": true,
7572 "type": "@keet/member-key",
7573 "version": 2
7574 },
7575 {
7576 "name": "label",
7577 "required": true,
7578 "type": "@keet/member-label-type",
7579 "version": 2
7580 }
7581 ]
7582 },
7583 {
7584 "name": "member-label-summary",
7585 "namespace": "keet",
7586 "compact": false,
7587 "flagsPosition": -1,
7588 "fields": [
7589 {
7590 "name": "label",
7591 "required": true,
7592 "type": "@keet/member-label-type",
7593 "version": 2
7594 },
7595 {
7596 "name": "count",
7597 "required": true,
7598 "type": "uint",
7599 "version": 2
7600 }
7601 ]
7602 },
7603 {
7604 "name": "member-label-digest",
7605 "namespace": "keet",
7606 "compact": false,
7607 "flagsPosition": -1,
7608 "fields": [
7609 {
7610 "name": "key",
7611 "required": true,
7612 "type": "@keet/member-key",
7613 "version": 2
7614 },
7615 {
7616 "name": "total",
7617 "required": true,
7618 "type": "uint",
7619 "version": 2
7620 },
7621 {
7622 "name": "labels",
7623 "required": true,
7624 "array": true,
7625 "type": "@keet/member-label-summary",
7626 "version": 2
7627 },
7628 {
7629 "name": "editedAt",
7630 "required": true,
7631 "type": "uint",
7632 "version": 2
7633 },
7634 {
7635 "name": "flagsClock",
7636 "required": true,
7637 "type": "uint",
7638 "version": 2
7639 }
7640 ]
7641 },
7642 {
7643 "name": "move-indexer-operation",
7644 "namespace": "keet",
7645 "compact": false,
7646 "flagsPosition": -1,
7647 "fields": [
7648 {
7649 "name": "header",
7650 "required": true,
7651 "type": "@keet/operation-header",
7652 "version": 2
7653 },
7654 {
7655 "name": "deviceKey",
7656 "required": true,
7657 "type": "@keet/device-key",
7658 "version": 2
7659 },
7660 {
7661 "name": "fromDeviceKey",
7662 "required": true,
7663 "type": "@keet/device-key",
7664 "version": 3
7665 }
7666 ]
7667 },
7668 {
7669 "name": "location-shared-event",
7670 "namespace": "keet",
7671 "compact": false,
7672 "flagsPosition": -1,
7673 "fields": [
7674 {
7675 "name": "latitude",
7676 "required": true,
7677 "type": "float64",
7678 "version": 3
7679 },
7680 {
7681 "name": "longitude",
7682 "required": true,
7683 "type": "float64",
7684 "version": 3
7685 }
7686 ]
7687 },
7688 {
7689 "name": "start-call",
7690 "namespace": "keet",
7691 "compact": false,
7692 "flagsPosition": 3,
7693 "fields": [
7694 {
7695 "name": "header",
7696 "required": true,
7697 "type": "@keet/operation-header",
7698 "version": 4
7699 },
7700 {
7701 "name": "callKey",
7702 "required": true,
7703 "type": "fixed32",
7704 "version": 4
7705 },
7706 {
7707 "name": "encryptionKey",
7708 "required": true,
7709 "type": "@keet/encryption-key",
7710 "version": 4
7711 },
7712 {
7713 "name": "streams",
7714 "array": true,
7715 "type": "@keet/core-key",
7716 "version": 4
7717 },
7718 {
7719 "name": "discoveryKey",
7720 "type": "@keet/room-discovery-key",
7721 "version": 4
7722 },
7723 {
7724 "name": "version",
7725 "type": "uint",
7726 "version": 4
7727 }
7728 ]
7729 },
7730 {
7731 "name": "join-call",
7732 "namespace": "keet",
7733 "compact": false,
7734 "flagsPosition": 2,
7735 "fields": [
7736 {
7737 "name": "header",
7738 "required": true,
7739 "type": "@keet/operation-header",
7740 "version": 4
7741 },
7742 {
7743 "name": "callKey",
7744 "required": true,
7745 "type": "fixed32",
7746 "version": 4
7747 },
7748 {
7749 "name": "streams",
7750 "array": true,
7751 "type": "@keet/core-key",
7752 "version": 4
7753 }
7754 ]
7755 },
7756 {
7757 "name": "leave-call",
7758 "namespace": "keet",
7759 "compact": false,
7760 "flagsPosition": -1,
7761 "fields": [
7762 {
7763 "name": "header",
7764 "required": true,
7765 "type": "@keet/operation-header",
7766 "version": 4
7767 },
7768 {
7769 "name": "callKey",
7770 "required": true,
7771 "type": "fixed32",
7772 "version": 4
7773 }
7774 ]
7775 },
7776 {
7777 "name": "end-call",
7778 "namespace": "keet",
7779 "compact": false,
7780 "flagsPosition": -1,
7781 "fields": [
7782 {
7783 "name": "header",
7784 "required": true,
7785 "type": "@keet/operation-header",
7786 "version": 4
7787 },
7788 {
7789 "name": "callKey",
7790 "required": true,
7791 "type": "fixed32",
7792 "version": 4
7793 }
7794 ]
7795 },
7796 {
7797 "name": "add-call-stream",
7798 "namespace": "keet",
7799 "compact": false,
7800 "flagsPosition": -1,
7801 "fields": [
7802 {
7803 "name": "header",
7804 "required": true,
7805 "type": "@keet/operation-header",
7806 "version": 4
7807 },
7808 {
7809 "name": "callKey",
7810 "required": true,
7811 "type": "fixed32",
7812 "version": 4
7813 },
7814 {
7815 "name": "streamKey",
7816 "required": true,
7817 "type": "@keet/core-key",
7818 "version": 4
7819 }
7820 ]
7821 },
7822 {
7823 "name": "remove-call-stream",
7824 "namespace": "keet",
7825 "compact": false,
7826 "flagsPosition": -1,
7827 "fields": [
7828 {
7829 "name": "header",
7830 "required": true,
7831 "type": "@keet/operation-header",
7832 "version": 4
7833 },
7834 {
7835 "name": "callKey",
7836 "required": true,
7837 "type": "fixed32",
7838 "version": 4
7839 },
7840 {
7841 "name": "streamKey",
7842 "required": true,
7843 "type": "@keet/core-key",
7844 "version": 4
7845 }
7846 ]
7847 },
7848 {
7849 "name": "call-record",
7850 "namespace": "keet",
7851 "compact": false,
7852 "flagsPosition": 3,
7853 "fields": [
7854 {
7855 "name": "callKey",
7856 "required": true,
7857 "type": "fixed32",
7858 "version": 4
7859 },
7860 {
7861 "name": "encryptionKey",
7862 "required": true,
7863 "type": "@keet/encryption-key",
7864 "version": 4
7865 },
7866 {
7867 "name": "createdAt",
7868 "required": true,
7869 "type": "uint",
7870 "version": 4
7871 },
7872 {
7873 "name": "endedAt",
7874 "type": "uint",
7875 "version": 4
7876 },
7877 {
7878 "name": "discoveryKey",
7879 "type": "@keet/room-discovery-key",
7880 "version": 4
7881 },
7882 {
7883 "name": "version",
7884 "type": "uint",
7885 "version": 4
7886 }
7887 ]
7888 },
7889 {
7890 "name": "call-member-record",
7891 "namespace": "keet",
7892 "compact": false,
7893 "flagsPosition": -1,
7894 "fields": [
7895 {
7896 "name": "callKey",
7897 "required": true,
7898 "type": "fixed32",
7899 "version": 4
7900 },
7901 {
7902 "name": "memberKey",
7903 "required": true,
7904 "type": "@keet/member-key",
7905 "version": 4
7906 },
7907 {
7908 "name": "createdAt",
7909 "required": true,
7910 "type": "uint",
7911 "version": 4
7912 }
7913 ]
7914 },
7915 {
7916 "name": "call-device-record",
7917 "namespace": "keet",
7918 "compact": false,
7919 "flagsPosition": 4,
7920 "fields": [
7921 {
7922 "name": "callKey",
7923 "required": true,
7924 "type": "fixed32",
7925 "version": 4
7926 },
7927 {
7928 "name": "deviceKey",
7929 "required": true,
7930 "type": "@keet/device-key",
7931 "version": 4
7932 },
7933 {
7934 "name": "memberKey",
7935 "required": true,
7936 "type": "@keet/member-key",
7937 "version": 4
7938 },
7939 {
7940 "name": "createdAt",
7941 "required": true,
7942 "type": "uint",
7943 "version": 4
7944 },
7945 {
7946 "name": "swarmKey",
7947 "type": "@keet/swarm-key",
7948 "version": 4
7949 }
7950 ]
7951 },
7952 {
7953 "name": "call-stream-record",
7954 "namespace": "keet",
7955 "compact": false,
7956 "flagsPosition": -1,
7957 "fields": [
7958 {
7959 "name": "callKey",
7960 "required": true,
7961 "type": "fixed32",
7962 "version": 4
7963 },
7964 {
7965 "name": "deviceKey",
7966 "required": true,
7967 "type": "@keet/device-key",
7968 "version": 4
7969 },
7970 {
7971 "name": "streamKey",
7972 "required": true,
7973 "type": "buffer",
7974 "version": 4
7975 },
7976 {
7977 "name": "createdAt",
7978 "required": true,
7979 "type": "uint",
7980 "version": 4
7981 }
7982 ]
7983 },
7984 {
7985 "name": "active-call",
7986 "namespace": "local",
7987 "compact": false,
7988 "flagsPosition": 1,
7989 "fields": [
7990 {
7991 "name": "callKey",
7992 "required": true,
7993 "type": "fixed32",
7994 "version": 4
7995 },
7996 {
7997 "name": "selfDeviceKey",
7998 "type": "@keet/device-key",
7999 "version": 4
8000 }
8001 ]
8002 },
8003 {
8004 "name": "file-gc-info",
8005 "namespace": "local",
8006 "compact": false,
8007 "flagsPosition": -1,
8008 "fields": [
8009 {
8010 "name": "lastCleared",
8011 "required": true,
8012 "type": "uint",
8013 "version": 4
8014 }
8015 ]
8016 },
8017 {
8018 "name": "build-type",
8019 "namespace": "keet",
8020 "offset": 1,
8021 "enum": [
8022 {
8023 "key": "Nightly",
8024 "version": 5
8025 },
8026 {
8027 "key": "Internal",
8028 "version": 5
8029 },
8030 {
8031 "key": "Production",
8032 "version": 5
8033 }
8034 ],
8035 "strings": true
8036 },
8037 {
8038 "name": "test-crash-operation",
8039 "namespace": "keet",
8040 "compact": false,
8041 "flagsPosition": -1,
8042 "fields": [
8043 {
8044 "name": "header",
8045 "required": true,
8046 "type": "@keet/operation-header",
8047 "version": 5
8048 }
8049 ]
8050 },
8051 {
8052 "name": "test-dispatch-error-operation",
8053 "namespace": "keet",
8054 "compact": false,
8055 "flagsPosition": -1,
8056 "fields": [
8057 {
8058 "name": "header",
8059 "required": true,
8060 "type": "@keet/operation-header",
8061 "version": 5
8062 }
8063 ]
8064 },
8065 {
8066 "name": "environment-record",
8067 "namespace": "local",
8068 "compact": false,
8069 "flagsPosition": 1,
8070 "fields": [
8071 {
8072 "name": "buildType",
8073 "required": true,
8074 "type": "@keet/build-type",
8075 "version": 5
8076 },
8077 {
8078 "name": "latestOfflineAbi",
8079 "type": "uint",
8080 "version": 6
8081 }
8082 ]
8083 }
8084 ]
8085}
keet-core-4.14.4-pretty/schema/spec/config/hyperconf/index.js +22 -0
……@@ -0,0 +1,22 @@
1const o = require("../hyperschema"),
2 U = require("hyperconf/runtime"),
3 d = o.getEncoding("@config/keet-config"),
4 s = e(
5 d,
6 U.b4a.from(
7 "CA4HFwEDBAwDC/2IAz8Bwdf7MOoNiStwh63v4euvhB1sw4cMcwo40mS9JJ/f/7ABQhRuwr3PX8TvUmi1ybxJTO7ToKjLiyn/ap0g7YbbLJLkVobzZEaSwMoXDf2jR2df2WqVskOkG+QlPuL1XDxSUwPNk2Sd+XmE6wXbzAErGnCEO8wASM5KT3vuT/gihUsC09MeR6o2SxeeKfOvILau/u2lPAxfiw1reo00DWfQyJnA2z96XG0uEWnh1UFTqConLdHUGrD2y8DDVF2e+dwU7xMMQ3QXuEqwUVU1LP/VUNeZloucwf7WZHNA1+s2TGmoY5wWCYAuNsdgE+ws43F7d8NzkFsydXQ8wb6OAqfTBL/NWkoJL8z7HUKWDwHjCRkZHLkjN+mYhbbd4ckqW0zgDhKIlLDCpyuB35aR2dHQcs514Hk8KCje32iAKtYVGZPDNgfp3uq3HlcTcNJlTk9UwWdZ/mv2bPvhD+a0zWsMNkwFs5ZzFvJ5l5RjJa7PIYUs2mLSQKjS0iT7iqlxgjH4A7cqnXXUTgD09mPjDx6+/Y/GgiRq+/PF8/mb/Lg223je7d7B/oJzQVrzKppRFrbFmJMvbLqLafulJqv5Q4YhhY/9KNMz8WfUPyGjujNzDTmdtJhn6HHk1R0kvcnoycdpOUD5c3To3MVEF/BMEyM+3adgOZa0oKY1yBns13oo1LTw2pzobtxhPYPaPZSYm0RgJE6WAkTXA8bvvtTZOXIvECOYiGXMQdX6AnMfYyQIeV4TxGixlh3o2gJKUPVRMGUBUKvUB0WuQpMY8UYybd2ycWhTLHxrIcrP3UpD1Tnga9UYp4k6JuskyX5T+U05KEKzwLP93LkDoIg6xWkeZ+TJ02nvIzJcTuLQFAZwtDPA+ET+OCZMAihCzZt2tdKHZ7RiUx3+so4qaRpuCw7eZr1FdSsBZVFPvsiERyHrA4+8xBKvDraRdL2IgGH0GXRb0BE2dxDgupjg2wovsSrhohui0T11owwd/6/7fP4ICxWu+uX6GMK3rUP6zIiCtdYU/UUmLzPpyfEVS+bcxPmPOKtNv+dRRXkHsU2sPHbR7WVKplxpDCloATlyAlbp1RvoUK/oWWwqyoxK0eLVOaFsFHBlJ5G3vi0QASxk6bqnUpUYk3xUFWfLKg2jcSOZN6uc0ahcNywYs5byBfHslhGKAZ0aAr6nUnRdR7aoxWKso8tl1rp2oWQfyDsiAQHmif3c+Rw8sq2lt7U0d03jP8IwKPjY6gG4tF2d1O/jcyEBzyWoHGWLqPMhjXEwrYJD8EqaJLzUbzAsncqVWrOsFaU=",
8 "base64",
9 ),
10 ),
11 w = o.getEncoding("@config/keet-config"),
12 c = e(
13 w,
14 U.b4a.from(
15 "CA4HGgEDBAwDC/2IAz8BwWgTaeAmuPfSLEPTf7BNfdT1SwdR30VrxZMU50LQ6wv8G8jcXqQ3BvaYClXfUjuYUkkLuK2I8LZHi1tVCl49OJzd9q27SePd1zGsb/rHzXd/eB8k8G7Og0o4ja5tYcCLoAOGa8TwJ0Nk3lTya0m43RmXxbh4m/hhHdn/KM1tY+B2CBVhxCMFAowShkuoLFRzv1AzKjpqtXQPlKTB8n0cUHGOnlfvXt5S2oiOMxee8ZjqY78a4gVkijLZJURVITqLlsQMQ3QXuEqwUVU1LP/VUNeZloucwf7WZHNA1+s2TGmoY5wWCYAuNsdgE+ws43F7d8NzkFsydXQ8wb6OAqfTBL/NWkoJL8z7HUKWDwHjCRkZHLkjN+mYhbbd4ckqW0zgDhKIlLDCpyuB35aR2dHQcs514Hk8KCje32iAKtYVGZPDNgfp3uq3HlcTcNJlTk9UwWdZ/mv2bPvhD+a0zWsMNkwFs5ZzFvJ5l5RjJa7PIYUs2mLSQKjS0iT7iqlxgjH4A7cqnXXUTgD09mPjDx6+/Y/GgiRq+/PF8/mb/Lg223je7d7B/oJzQVrzKppRFrbFmJMvbLqLafulJqv5Q4YhhY/9KNMz8WfUPyGjujNzDTmdtJhn6HHk1R0kvcnoycdpOUD5c3To3MVEF/BMEyM+3adgOZa0oKY1yBns13oo1LTw2pzobtxhPYPaPZSYm0RgJE6WAkTXA8bvvtTZOXIvECOYiGXMQdX6AnMfYyQIeV4TxGixlh3o2gJKUPVRMGUBUKvUB0WuQpMY8UYybd2ycWhTLHxrIcrP3UpD1Tnga9UYp4k6JuskyX5T+U05KEKzwLP93LkDoIg6xWkeZ+TJ02nvIzJcTuLQFAZwtDPA+ET+OCZMAihCzZt2tdKHZ7RiUx3+so4qaRpuCw7eZr1FdSsBZVFPvsiERyHrA4+8xBKvDraRdL2IgGH0GXRb0BE2dxDgupjg2wovsSrhohui0T11owwd/6/7fP4ICxWu+uX6GMK3rUP6zIiCtdYU/UUmLzPpyfEVS+bcxPmPOKtNv+dRRXkHsU2sPHbR7WVKplxpDCloATlyAlbp1RvoUK/oWWwqyoxK0eLVOaFsFHBlJ5G3vi0QASxk6bqnUpUYk3xUFWfLKg2jcSOZN6uc0ahcNywYs5byBfHslhGKAZ0aAr6nUnRdR7aoxWKso8tl1rp2oWQfyDsiAQHmif3c+Rw8sq2lt7U0d03jP8IwKPjY6gG4tF2d1O/jcyEBzyWoHGWLqPMhjXEwrYJD8EqaJLzUbzAsncqVWrOsFaU=",
16 "base64",
17 ),
18 )
19function e(o, U) {
20 return o.decode({ start: 0, end: U.byteLength, buffer: U })
21}
22module.exports = { production: s, development: c, productionEncoding: d, developmentEncoding: w }
keet-core-4.14.4-pretty/schema/spec/config/hyperschema/index.js +251 -0
……@@ -0,0 +1,251 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 6
3let n = 6
4const o = {
5 preencode(d, o) {
6 ;(e.uint.preencode(d, o.minimum),
7 d.end++,
8 o.autoupgrade && e.uint.preencode(d, o.autoupgrade),
9 n >= 3 && o.forceUpdate && e.uint.preencode(d, o.forceUpdate),
10 n >= 4 && o.minVersion && R.preencode(d, o.minVersion))
11 },
12 encode(d, o) {
13 const c =
14 (o.autoupgrade ? 1 : 0) |
15 (n >= 3 && o.forceUpdate ? 2 : 0) |
16 (n >= 4 && o.minVersion ? 4 : 0)
17 ;(e.uint.encode(d, o.minimum),
18 e.uint.encode(d, c),
19 o.autoupgrade && e.uint.encode(d, o.autoupgrade),
20 n >= 3 && o.forceUpdate && e.uint.encode(d, o.forceUpdate),
21 n >= 4 && o.minVersion && R.encode(d, o.minVersion))
22 },
23 decode(d) {
24 const o = e.uint.decode(d),
25 c = e.uint.decode(d)
26 return {
27 minimum: o,
28 autoupgrade: 1 & c ? e.uint.decode(d) : 0,
29 forceUpdate: n >= 3 && 2 & c ? e.uint.decode(d) : 0,
30 minVersion: n >= 4 && 4 & c ? R.decode(d) : null,
31 }
32 },
33 },
34 c = e.array(e.fixed32),
35 r = {
36 preencode(d, n) {
37 ;(e.fixed32.preencode(d, n.db),
38 e.fixed32.preencode(d, n.reserved),
39 e.fixed32.preencode(d, n.blobs),
40 c.preencode(d, n.rpc))
41 },
42 encode(d, n) {
43 ;(e.fixed32.encode(d, n.db),
44 e.fixed32.encode(d, n.reserved),
45 e.fixed32.encode(d, n.blobs),
46 c.encode(d, n.rpc))
47 },
48 decode: (d) => ({
49 db: e.fixed32.decode(d),
50 reserved: e.fixed32.decode(d),
51 blobs: e.fixed32.decode(d),
52 rpc: c.decode(d),
53 }),
54 },
55 i = e.array(e.frame(r)),
56 s = c,
57 t = c,
58 u = c,
59 a = c,
60 l = {
61 preencode(d, n) {
62 ;(d.end++,
63 n.userRegistries && i.preencode(d, n.userRegistries),
64 n.blindPeers && s.preencode(d, n.blindPeers),
65 n.blindRelays && t.preencode(d, n.blindRelays),
66 n.gatekeepers && u.preencode(d, n.gatekeepers),
67 n.discovery && a.preencode(d, n.discovery),
68 n.feedback && e.fixed32.preencode(d, n.feedback))
69 },
70 encode(d, n) {
71 const o =
72 (n.userRegistries ? 1 : 0) |
73 (n.blindPeers ? 2 : 0) |
74 (n.blindRelays ? 4 : 0) |
75 (n.gatekeepers ? 8 : 0) |
76 (n.discovery ? 16 : 0) |
77 (n.feedback ? 32 : 0)
78 ;(e.uint.encode(d, o),
79 n.userRegistries && i.encode(d, n.userRegistries),
80 n.blindPeers && s.encode(d, n.blindPeers),
81 n.blindRelays && t.encode(d, n.blindRelays),
82 n.gatekeepers && u.encode(d, n.gatekeepers),
83 n.discovery && a.encode(d, n.discovery),
84 n.feedback && e.fixed32.encode(d, n.feedback))
85 },
86 decode(d) {
87 const n = e.uint.decode(d)
88 return {
89 userRegistries: 1 & n ? i.decode(d) : null,
90 blindPeers: 2 & n ? s.decode(d) : null,
91 blindRelays: 4 & n ? t.decode(d) : null,
92 gatekeepers: 8 & n ? u.decode(d) : null,
93 discovery: 16 & n ? a.decode(d) : null,
94 feedback: 32 & n ? e.fixed32.decode(d) : null,
95 }
96 },
97 },
98 p = c,
99 f = c,
100 b = {
101 preencode(e, d) {
102 ;(e.end++,
103 d.disabled && p.preencode(e, d.disabled),
104 n >= 6 && d.verified && f.preencode(e, d.verified))
105 },
106 encode(d, o) {
107 const c = (o.disabled ? 1 : 0) | (n >= 6 && o.verified ? 2 : 0)
108 ;(e.uint.encode(d, c),
109 o.disabled && p.encode(d, o.disabled),
110 n >= 6 && o.verified && f.encode(d, o.verified))
111 },
112 decode(d) {
113 const o = e.uint.decode(d)
114 return {
115 disabled: 1 & o ? p.decode(d) : null,
116 verified: n >= 6 && 2 & o ? f.decode(d) : null,
117 }
118 },
119 },
120 m = e.frame(o),
121 g = e.frame(l),
122 v = e.frame(b),
123 k = {
124 preencode(e, d) {
125 ;(m.preencode(e, d.versions),
126 e.end++,
127 d.services && g.preencode(e, d.services),
128 d.rooms && v.preencode(e, d.rooms),
129 n >= 2 && d.profile && U.preencode(e, d.profile),
130 n >= 5 && d.debug && V.preencode(e, d.debug))
131 },
132 encode(d, o) {
133 const c =
134 (o.services ? 1 : 0) |
135 (o.rooms ? 2 : 0) |
136 (n >= 2 && o.profile ? 4 : 0) |
137 (n >= 5 && o.debug ? 8 : 0)
138 ;(m.encode(d, o.versions),
139 e.uint.encode(d, c),
140 o.services && g.encode(d, o.services),
141 o.rooms && v.encode(d, o.rooms),
142 n >= 2 && o.profile && U.encode(d, o.profile),
143 n >= 5 && o.debug && V.encode(d, o.debug))
144 },
145 decode(d) {
146 const o = m.decode(d),
147 c = e.uint.decode(d)
148 return {
149 versions: o,
150 services: 1 & c ? g.decode(d) : null,
151 rooms: 2 & c ? v.decode(d) : null,
152 profile: n >= 2 && 4 & c ? U.decode(d) : null,
153 debug: n >= 5 && 8 & c ? V.decode(d) : null,
154 }
155 },
156 },
157 y = {
158 preencode(e, d) {
159 e.end++
160 },
161 encode(d, o) {
162 const c = n >= 2 && o.disableUnreadSync ? 1 : 0
163 e.uint.encode(d, c)
164 },
165 decode(d) {
166 const o = e.uint.decode(d)
167 return { disableUnreadSync: n >= 2 && !!(1 & o) }
168 },
169 },
170 x = {
171 preencode(d, n) {
172 ;(e.uint.preencode(d, n.major), e.uint.preencode(d, n.minor), e.uint.preencode(d, n.patch))
173 },
174 encode(d, n) {
175 ;(e.uint.encode(d, n.major), e.uint.encode(d, n.minor), e.uint.encode(d, n.patch))
176 },
177 decode: (d) => ({ major: e.uint.decode(d), minor: e.uint.decode(d), patch: e.uint.decode(d) }),
178 },
179 h = {
180 preencode(d, o) {
181 ;(d.end++, n >= 5 && o.unlockHash && e.fixed32.preencode(d, o.unlockHash))
182 },
183 encode(d, o) {
184 const c = n >= 5 && o.unlockHash ? 1 : 0
185 ;(e.uint.encode(d, c), n >= 5 && o.unlockHash && e.fixed32.encode(d, o.unlockHash))
186 },
187 decode(d) {
188 const o = e.uint.decode(d)
189 return { unlockHash: n >= 5 && 1 & o ? e.fixed32.decode(d) : null }
190 },
191 },
192 R = e.frame(x),
193 U = e.frame(y),
194 V = e.frame(h)
195function E(e) {
196 n = e
197}
198function H(d, o, c = 6) {
199 return ((n = c), e.encode(S(d), o))
200}
201function P(d, o, c = 6) {
202 return ((n = c), e.decode(S(d), o))
203}
204function w(e) {
205 throw new Error("Enum not found " + e)
206}
207function S(e) {
208 switch (e) {
209 case "@config/versions":
210 return o
211 case "@config/user-registry":
212 return r
213 case "@config/services":
214 return l
215 case "@config/rooms":
216 return b
217 case "@config/keet-config":
218 return k
219 case "@config/profile":
220 return y
221 case "@config/semver":
222 return x
223 case "@config/debug":
224 return h
225 default:
226 throw new Error("Encoder not found " + e)
227 }
228}
229function j(e, d = 6) {
230 const o = S(e)
231 return {
232 preencode(e, c) {
233 ;((n = d), o.preencode(e, c))
234 },
235 encode(e, c) {
236 ;((n = d), o.encode(e, c))
237 },
238 decode: (e) => ((n = d), o.decode(e)),
239 }
240}
241const q = j
242module.exports = {
243 resolveStruct: q,
244 getStruct: j,
245 getEnum: w,
246 getEncoding: S,
247 encode: H,
248 decode: P,
249 setVersion: E,
250 version: n,
251}
keet-core-4.14.4-pretty/schema/spec/config/hyperschema/schema.json +216 -0
……@@ -0,0 +1,216 @@
1{
2 "version": 6,
3 "schema": [
4 {
5 "name": "versions",
6 "namespace": "config",
7 "compact": false,
8 "flagsPosition": 1,
9 "fields": [
10 {
11 "name": "minimum",
12 "required": true,
13 "type": "uint",
14 "version": 1
15 },
16 {
17 "name": "autoupgrade",
18 "type": "uint",
19 "version": 1
20 },
21 {
22 "name": "forceUpdate",
23 "type": "uint",
24 "version": 3
25 },
26 {
27 "name": "minVersion",
28 "type": "@config/semver",
29 "version": 4
30 }
31 ]
32 },
33 {
34 "name": "user-registry",
35 "namespace": "config",
36 "compact": false,
37 "flagsPosition": -1,
38 "fields": [
39 {
40 "name": "db",
41 "required": true,
42 "type": "fixed32",
43 "version": 1
44 },
45 {
46 "name": "reserved",
47 "required": true,
48 "type": "fixed32",
49 "version": 1
50 },
51 {
52 "name": "blobs",
53 "required": true,
54 "type": "fixed32",
55 "version": 1
56 },
57 {
58 "name": "rpc",
59 "required": true,
60 "array": true,
61 "type": "fixed32",
62 "version": 1
63 }
64 ]
65 },
66 {
67 "name": "services",
68 "namespace": "config",
69 "compact": false,
70 "flagsPosition": 0,
71 "fields": [
72 {
73 "name": "userRegistries",
74 "array": true,
75 "type": "@config/user-registry",
76 "version": 1
77 },
78 {
79 "name": "blindPeers",
80 "array": true,
81 "type": "fixed32",
82 "version": 1
83 },
84 {
85 "name": "blindRelays",
86 "array": true,
87 "type": "fixed32",
88 "version": 1
89 },
90 {
91 "name": "gatekeepers",
92 "array": true,
93 "type": "fixed32",
94 "version": 1
95 },
96 {
97 "name": "discovery",
98 "array": true,
99 "type": "fixed32",
100 "version": 1
101 },
102 {
103 "name": "feedback",
104 "type": "fixed32",
105 "version": 1
106 }
107 ]
108 },
109 {
110 "name": "rooms",
111 "namespace": "config",
112 "compact": false,
113 "flagsPosition": 0,
114 "fields": [
115 {
116 "name": "disabled",
117 "array": true,
118 "type": "fixed32",
119 "version": 1
120 },
121 {
122 "name": "verified",
123 "array": true,
124 "type": "fixed32",
125 "version": 6
126 }
127 ]
128 },
129 {
130 "name": "keet-config",
131 "namespace": "config",
132 "compact": false,
133 "flagsPosition": 1,
134 "fields": [
135 {
136 "name": "versions",
137 "required": true,
138 "type": "@config/versions",
139 "version": 1
140 },
141 {
142 "name": "services",
143 "type": "@config/services",
144 "version": 1
145 },
146 {
147 "name": "rooms",
148 "type": "@config/rooms",
149 "version": 1
150 },
151 {
152 "name": "profile",
153 "type": "@config/profile",
154 "version": 2
155 },
156 {
157 "name": "debug",
158 "type": "@config/debug",
159 "version": 5
160 }
161 ]
162 },
163 {
164 "name": "profile",
165 "namespace": "config",
166 "compact": false,
167 "flagsPosition": 0,
168 "fields": [
169 {
170 "name": "disableUnreadSync",
171 "type": "bool",
172 "version": 2
173 }
174 ]
175 },
176 {
177 "name": "semver",
178 "namespace": "config",
179 "compact": false,
180 "flagsPosition": -1,
181 "fields": [
182 {
183 "name": "major",
184 "required": true,
185 "type": "uint",
186 "version": 4
187 },
188 {
189 "name": "minor",
190 "required": true,
191 "type": "uint",
192 "version": 4
193 },
194 {
195 "name": "patch",
196 "required": true,
197 "type": "uint",
198 "version": 4
199 }
200 ]
201 },
202 {
203 "name": "debug",
204 "namespace": "config",
205 "compact": false,
206 "flagsPosition": 0,
207 "fields": [
208 {
209 "name": "unlockHash",
210 "type": "fixed32",
211 "version": 5
212 }
213 ]
214 }
215 ]
216}
keet-core-4.14.4-pretty/schema/spec/contract/hyperdb/db.json +1404 -0
……@@ -0,0 +1,1404 @@
1{
2 "version": 5,
3 "offset": 0,
4 "schema": [
5 {
6 "name": "system-digest",
7 "namespace": "keet",
8 "id": 0,
9 "type": 1,
10 "version": 0,
11 "versionField": null,
12 "indexes": [],
13 "schema": "@keet/system-digest",
14 "derived": false,
15 "key": [],
16 "trigger": null
17 },
18 {
19 "name": "blind-peers",
20 "namespace": "keet",
21 "id": 1,
22 "type": 1,
23 "version": 0,
24 "versionField": null,
25 "indexes": [],
26 "schema": "@keet/blind-peer",
27 "derived": false,
28 "key": [
29 "key"
30 ],
31 "trigger": null
32 },
33 {
34 "name": "room-config",
35 "namespace": "keet",
36 "id": 2,
37 "type": 1,
38 "version": 0,
39 "versionField": null,
40 "indexes": [],
41 "schema": "@keet/room-config",
42 "derived": false,
43 "key": [],
44 "trigger": null
45 },
46 {
47 "name": "room-capabilities",
48 "namespace": "keet",
49 "id": 3,
50 "type": 1,
51 "version": 0,
52 "versionField": null,
53 "indexes": [],
54 "schema": "@keet/room-seed",
55 "derived": false,
56 "key": [],
57 "trigger": null
58 },
59 {
60 "name": "join-requests",
61 "namespace": "keet",
62 "id": 4,
63 "type": 1,
64 "version": 0,
65 "versionField": null,
66 "indexes": [],
67 "schema": "@keet/join-request",
68 "derived": false,
69 "key": [
70 "deviceKey"
71 ],
72 "trigger": null
73 },
74 {
75 "name": "devices",
76 "namespace": "keet",
77 "id": 5,
78 "type": 1,
79 "version": 0,
80 "versionField": null,
81 "indexes": [
82 "@keet/devices-by-member-key",
83 "@keet/devices-by-swarm-key",
84 "@keet/active-devices-by-member-key",
85 "@keet/active-devices"
86 ],
87 "schema": "@keet/device",
88 "derived": false,
89 "key": [
90 "key"
91 ],
92 "trigger": "devicesTrigger"
93 },
94 {
95 "name": "devices-by-member-key",
96 "namespace": "keet",
97 "id": 6,
98 "type": 2,
99 "version": 0,
100 "collection": "@keet/devices",
101 "unique": false,
102 "deprecated": false,
103 "key": [
104 "memberKey"
105 ]
106 },
107 {
108 "name": "devices-by-swarm-key",
109 "namespace": "keet",
110 "id": 7,
111 "type": 2,
112 "version": 0,
113 "collection": "@keet/devices",
114 "unique": true,
115 "deprecated": false,
116 "key": [
117 "profile.swarmKey"
118 ]
119 },
120 {
121 "name": "active-devices-by-member-key",
122 "namespace": "keet",
123 "id": 8,
124 "type": 2,
125 "version": 0,
126 "collection": "@keet/devices",
127 "unique": false,
128 "deprecated": false,
129 "key": {
130 "type": {
131 "fields": [
132 {
133 "name": "memberKey",
134 "type": "@keet/member-key"
135 }
136 ]
137 },
138 "map": "activeDevicesByMemberKeyMap"
139 }
140 },
141 {
142 "name": "active-devices",
143 "namespace": "keet",
144 "id": 9,
145 "type": 2,
146 "version": 0,
147 "collection": "@keet/devices",
148 "unique": true,
149 "deprecated": false,
150 "key": {
151 "type": {
152 "fields": [
153 {
154 "name": "key",
155 "type": "@keet/device-key"
156 }
157 ]
158 },
159 "map": "activeDevicesMap"
160 }
161 },
162 {
163 "name": "member-proofs",
164 "namespace": "keet",
165 "id": 10,
166 "type": 1,
167 "version": 0,
168 "versionField": null,
169 "indexes": [],
170 "schema": "@keet/member-proofs",
171 "derived": false,
172 "key": [
173 "key"
174 ],
175 "trigger": null
176 },
177 {
178 "name": "members",
179 "namespace": "keet",
180 "id": 11,
181 "type": 1,
182 "version": 0,
183 "versionField": null,
184 "indexes": [
185 "@keet/moderators",
186 "@keet/admins",
187 "@keet/active-members",
188 "@keet/muted-members",
189 "@keet/members-by-member-name"
190 ],
191 "schema": "@keet/member",
192 "derived": false,
193 "key": [
194 "key"
195 ],
196 "trigger": "membersTrigger"
197 },
198 {
199 "name": "moderators",
200 "namespace": "keet",
201 "id": 12,
202 "type": 2,
203 "version": 0,
204 "collection": "@keet/members",
205 "unique": true,
206 "deprecated": false,
207 "key": {
208 "type": {
209 "fields": [
210 {
211 "name": "key",
212 "type": "@keet/member-key"
213 }
214 ]
215 },
216 "map": "moderatorsMap"
217 }
218 },
219 {
220 "name": "admins",
221 "namespace": "keet",
222 "id": 13,
223 "type": 2,
224 "version": 0,
225 "collection": "@keet/members",
226 "unique": true,
227 "deprecated": false,
228 "key": {
229 "type": {
230 "fields": [
231 {
232 "name": "key",
233 "type": "@keet/member-key"
234 }
235 ]
236 },
237 "map": "adminsMap"
238 }
239 },
240 {
241 "name": "active-members",
242 "namespace": "keet",
243 "id": 14,
244 "type": 2,
245 "version": 0,
246 "collection": "@keet/members",
247 "unique": true,
248 "deprecated": false,
249 "key": {
250 "type": {
251 "fields": [
252 {
253 "name": "key",
254 "type": "@keet/member-key"
255 }
256 ]
257 },
258 "map": "activeMembersMap"
259 }
260 },
261 {
262 "name": "muted-members",
263 "namespace": "keet",
264 "id": 15,
265 "type": 2,
266 "version": 0,
267 "collection": "@keet/members",
268 "unique": true,
269 "deprecated": false,
270 "key": {
271 "type": {
272 "fields": [
273 {
274 "name": "key",
275 "type": "@keet/member-key"
276 }
277 ]
278 },
279 "map": "mutedMembersMap"
280 }
281 },
282 {
283 "name": "members-by-member-name",
284 "namespace": "keet",
285 "id": 16,
286 "type": 2,
287 "version": 0,
288 "collection": "@keet/members",
289 "unique": false,
290 "deprecated": false,
291 "key": {
292 "type": {
293 "fields": [
294 {
295 "name": "name",
296 "type": "string"
297 }
298 ]
299 },
300 "map": "membersByMemberNameMap"
301 }
302 },
303 {
304 "name": "member-activity",
305 "namespace": "keet",
306 "id": 17,
307 "type": 1,
308 "version": 0,
309 "versionField": null,
310 "indexes": [],
311 "schema": "@keet/member-activity",
312 "derived": false,
313 "key": [
314 "key"
315 ],
316 "trigger": null
317 },
318 {
319 "name": "invitations",
320 "namespace": "keet",
321 "id": 18,
322 "type": 1,
323 "version": 0,
324 "versionField": null,
325 "indexes": [],
326 "schema": "@keet/invitation",
327 "derived": false,
328 "key": [
329 "id"
330 ],
331 "trigger": null
332 },
333 {
334 "name": "threads",
335 "namespace": "keet",
336 "id": 19,
337 "type": 1,
338 "version": 0,
339 "versionField": null,
340 "indexes": [
341 "@keet/threads-by-parent"
342 ],
343 "schema": "@keet/thread",
344 "derived": false,
345 "key": [
346 "id"
347 ],
348 "trigger": null
349 },
350 {
351 "name": "threads-by-parent",
352 "namespace": "keet",
353 "id": 20,
354 "type": 2,
355 "version": 0,
356 "collection": "@keet/threads",
357 "unique": true,
358 "deprecated": false,
359 "key": {
360 "type": {
361 "fields": [
362 {
363 "name": "key",
364 "type": "@keet/member-key"
365 },
366 {
367 "name": "seq",
368 "type": "uint"
369 }
370 ]
371 },
372 "map": "threadsByParentMap"
373 }
374 },
375 {
376 "name": "chat",
377 "namespace": "keet",
378 "id": 21,
379 "type": 1,
380 "version": 0,
381 "versionField": null,
382 "indexes": [
383 "@keet/chat-by-message-id",
384 "@keet/chat-mentions-by-member-id",
385 "@keet/pinned-chat-messages"
386 ],
387 "schema": "@keet/chat-message-record",
388 "derived": false,
389 "key": [
390 "id.thread",
391 "id.index"
392 ],
393 "trigger": "chatTrigger"
394 },
395 {
396 "name": "chat-by-message-id",
397 "namespace": "keet",
398 "id": 22,
399 "type": 2,
400 "version": 0,
401 "collection": "@keet/chat",
402 "unique": true,
403 "deprecated": false,
404 "key": [
405 "oplog.key",
406 "oplog.seq"
407 ]
408 },
409 {
410 "name": "chat-mentions-by-member-id",
411 "namespace": "keet",
412 "id": 23,
413 "type": 2,
414 "version": 0,
415 "collection": "@keet/chat",
416 "unique": false,
417 "deprecated": false,
418 "key": {
419 "type": {
420 "fields": [
421 {
422 "name": "key",
423 "type": "@keet/member-key"
424 },
425 {
426 "name": "clock",
427 "type": "uint"
428 }
429 ]
430 },
431 "map": "chatMentionsByMemberIdMap"
432 }
433 },
434 {
435 "name": "pinned-chat-messages",
436 "namespace": "keet",
437 "id": 24,
438 "type": 2,
439 "version": 0,
440 "collection": "@keet/chat",
441 "unique": false,
442 "deprecated": false,
443 "key": {
444 "type": {
445 "fields": [
446 {
447 "name": "thread",
448 "type": "uint"
449 },
450 {
451 "name": "index",
452 "type": "uint"
453 }
454 ]
455 },
456 "map": "pinnedChatMessagesMap"
457 }
458 },
459 {
460 "name": "reaction-digests",
461 "namespace": "keet",
462 "id": 25,
463 "type": 1,
464 "version": 0,
465 "versionField": null,
466 "indexes": [],
467 "schema": "@keet/reactions-digest",
468 "derived": false,
469 "key": [
470 "id.thread",
471 "id.index"
472 ],
473 "trigger": null
474 },
475 {
476 "name": "reactions",
477 "namespace": "keet",
478 "id": 26,
479 "type": 1,
480 "version": 0,
481 "versionField": null,
482 "indexes": [
483 "@keet/reactions-by-clock"
484 ],
485 "schema": "@keet/reaction",
486 "derived": false,
487 "key": [
488 "id.thread",
489 "id.index",
490 "sender",
491 "reaction"
492 ],
493 "trigger": "reactionsTrigger"
494 },
495 {
496 "name": "reactions-by-clock",
497 "namespace": "keet",
498 "id": 27,
499 "type": 2,
500 "version": 0,
501 "collection": "@keet/reactions",
502 "unique": false,
503 "deprecated": false,
504 "key": [
505 "id.thread",
506 "id.index",
507 "reaction",
508 "clock",
509 "sender"
510 ]
511 },
512 {
513 "name": "files",
514 "namespace": "keet",
515 "id": 28,
516 "type": 1,
517 "version": 1,
518 "versionField": "version",
519 "indexes": [
520 "@keet/files-by-message-id",
521 "@keet/files-by-type",
522 "@keet/deleted-files",
523 "@keet/files-by-major-type",
524 "@keet/active-files"
525 ],
526 "schema": "@keet/file-record",
527 "derived": false,
528 "key": [
529 "id"
530 ],
531 "trigger": "filesTrigger"
532 },
533 {
534 "name": "files-by-message-id",
535 "namespace": "keet",
536 "id": 29,
537 "type": 2,
538 "version": 0,
539 "collection": "@keet/files",
540 "unique": false,
541 "deprecated": false,
542 "key": [
543 "oplog.key",
544 "oplog.seq"
545 ]
546 },
547 {
548 "name": "files-by-type",
549 "namespace": "keet",
550 "id": 30,
551 "type": 2,
552 "version": 0,
553 "collection": "@keet/files",
554 "unique": false,
555 "deprecated": true,
556 "key": {
557 "type": {
558 "fields": [
559 {
560 "name": "type",
561 "type": "string"
562 },
563 {
564 "name": "id",
565 "type": "uint"
566 }
567 ]
568 },
569 "map": "filesByTypeMap"
570 }
571 },
572 {
573 "name": "deleted-files",
574 "namespace": "keet",
575 "id": 31,
576 "type": 2,
577 "version": 0,
578 "collection": "@keet/files",
579 "unique": false,
580 "deprecated": true,
581 "key": {
582 "type": {
583 "fields": [
584 {
585 "name": "id",
586 "type": "uint"
587 }
588 ]
589 },
590 "map": "deletedFilesMap"
591 }
592 },
593 {
594 "name": "identity",
595 "namespace": "keet-private-id",
596 "id": 32,
597 "type": 1,
598 "version": 0,
599 "versionField": null,
600 "indexes": [],
601 "schema": "@keet/room-identity",
602 "derived": false,
603 "key": [],
604 "trigger": null
605 },
606 {
607 "name": "stats",
608 "namespace": "keet-private-id",
609 "id": 33,
610 "type": 1,
611 "version": 0,
612 "versionField": null,
613 "indexes": [],
614 "schema": "@keet-private-id/stats",
615 "derived": false,
616 "key": [],
617 "trigger": null
618 },
619 {
620 "name": "counters",
621 "namespace": "keet-private-id",
622 "id": 34,
623 "type": 1,
624 "version": 0,
625 "versionField": null,
626 "indexes": [],
627 "schema": "@keet-private-id/counters",
628 "derived": false,
629 "key": [],
630 "trigger": null
631 },
632 {
633 "name": "pending-invitations",
634 "namespace": "keet-private-id",
635 "id": 35,
636 "type": 1,
637 "version": 0,
638 "versionField": null,
639 "indexes": [],
640 "schema": "@keet-private-id/pending-invitation",
641 "derived": false,
642 "key": [
643 "id"
644 ],
645 "trigger": null
646 },
647 {
648 "name": "rooms",
649 "namespace": "keet-private-id",
650 "id": 36,
651 "type": 1,
652 "version": 0,
653 "versionField": null,
654 "indexes": [
655 "@keet-private-id/rooms-by-clock",
656 "@keet-private-id/rooms-by-contact"
657 ],
658 "schema": "@keet-private-id/room",
659 "derived": false,
660 "key": [
661 "roomKey"
662 ],
663 "trigger": "roomsTrigger"
664 },
665 {
666 "name": "rooms-by-clock",
667 "namespace": "keet-private-id",
668 "id": 37,
669 "type": 2,
670 "version": 0,
671 "collection": "@keet-private-id/rooms",
672 "unique": false,
673 "deprecated": false,
674 "key": [
675 "clock"
676 ]
677 },
678 {
679 "name": "contacts",
680 "namespace": "keet-private-id",
681 "id": 38,
682 "type": 1,
683 "version": 0,
684 "versionField": null,
685 "indexes": [
686 "@keet-private-id/contacts-by-clock"
687 ],
688 "schema": "@keet-private-id/contact-record",
689 "derived": false,
690 "key": [
691 "memberKey"
692 ],
693 "trigger": "contactsTrigger"
694 },
695 {
696 "name": "contacts-by-clock",
697 "namespace": "keet-private-id",
698 "id": 39,
699 "type": 2,
700 "version": 0,
701 "collection": "@keet-private-id/contacts",
702 "unique": false,
703 "deprecated": false,
704 "key": [
705 "clock"
706 ]
707 },
708 {
709 "name": "contact-requests",
710 "namespace": "keet-private-id",
711 "id": 40,
712 "type": 1,
713 "version": 0,
714 "versionField": null,
715 "indexes": [
716 "@keet-private-id/contact-requests-by-clock",
717 "@keet-private-id/pending-contact-requests",
718 "@keet-private-id/accepted-contact-requests",
719 "@keet-private-id/rejected-contact-requests",
720 "@keet-private-id/discarded-contact-requests"
721 ],
722 "schema": "@keet-private-id/contact-request-record",
723 "derived": false,
724 "key": [
725 "memberKey"
726 ],
727 "trigger": "contactRequestsTrigger"
728 },
729 {
730 "name": "contact-requests-by-clock",
731 "namespace": "keet-private-id",
732 "id": 41,
733 "type": 2,
734 "version": 0,
735 "collection": "@keet-private-id/contact-requests",
736 "unique": false,
737 "deprecated": false,
738 "key": [
739 "clock"
740 ]
741 },
742 {
743 "name": "pending-contact-requests",
744 "namespace": "keet-private-id",
745 "id": 42,
746 "type": 2,
747 "version": 0,
748 "collection": "@keet-private-id/contact-requests",
749 "unique": false,
750 "deprecated": false,
751 "key": {
752 "type": {
753 "fields": [
754 {
755 "name": "clock",
756 "type": "uint"
757 }
758 ]
759 },
760 "map": "pendingContactRequestsMap"
761 }
762 },
763 {
764 "name": "accepted-contact-requests",
765 "namespace": "keet-private-id",
766 "id": 43,
767 "type": 2,
768 "version": 0,
769 "collection": "@keet-private-id/contact-requests",
770 "unique": false,
771 "deprecated": false,
772 "key": {
773 "type": {
774 "fields": [
775 {
776 "name": "clock",
777 "type": "uint"
778 }
779 ]
780 },
781 "map": "acceptedContactRequestsMap"
782 }
783 },
784 {
785 "name": "rejected-contact-requests",
786 "namespace": "keet-private-id",
787 "id": 44,
788 "type": 2,
789 "version": 0,
790 "collection": "@keet-private-id/contact-requests",
791 "unique": false,
792 "deprecated": false,
793 "key": {
794 "type": {
795 "fields": [
796 {
797 "name": "clock",
798 "type": "uint"
799 }
800 ]
801 },
802 "map": "rejectedContactRequestsMap"
803 }
804 },
805 {
806 "name": "discarded-contact-requests",
807 "namespace": "keet-private-id",
808 "id": 45,
809 "type": 2,
810 "version": 0,
811 "collection": "@keet-private-id/contact-requests",
812 "unique": false,
813 "deprecated": false,
814 "key": {
815 "type": {
816 "fields": [
817 {
818 "name": "clock",
819 "type": "uint"
820 }
821 ]
822 },
823 "map": "discardedContactRequestsMap"
824 }
825 },
826 {
827 "name": "test-collection-1",
828 "namespace": "keet",
829 "id": 46,
830 "type": 1,
831 "version": 0,
832 "versionField": null,
833 "indexes": [],
834 "schema": "@keet/test-collection-record-1",
835 "derived": false,
836 "key": [
837 "key"
838 ],
839 "trigger": null
840 },
841 {
842 "name": "files-by-major-type",
843 "namespace": "keet",
844 "id": 47,
845 "type": 2,
846 "version": 1,
847 "collection": "@keet/files",
848 "unique": false,
849 "deprecated": false,
850 "key": {
851 "type": {
852 "fields": [
853 {
854 "name": "type",
855 "type": "string"
856 },
857 {
858 "name": "id",
859 "type": "uint"
860 }
861 ]
862 },
863 "map": "filesByMajorTypeMap"
864 }
865 },
866 {
867 "name": "active-files",
868 "namespace": "keet",
869 "id": 48,
870 "type": 2,
871 "version": 1,
872 "collection": "@keet/files",
873 "unique": false,
874 "deprecated": false,
875 "key": {
876 "type": {
877 "fields": [
878 {
879 "name": "id",
880 "type": "uint"
881 }
882 ]
883 },
884 "map": "activeFilesMap"
885 }
886 },
887 {
888 "name": "rooms-by-contact",
889 "namespace": "keet-private-id",
890 "id": 49,
891 "type": 2,
892 "version": 0,
893 "collection": "@keet-private-id/rooms",
894 "unique": false,
895 "deprecated": false,
896 "key": {
897 "type": {
898 "fields": [
899 {
900 "name": "contact",
901 "type": "@keet/member-key"
902 }
903 ]
904 },
905 "map": "roomsByContactMap"
906 }
907 },
908 {
909 "name": "device-identities",
910 "namespace": "keet-private-id",
911 "id": 50,
912 "type": 1,
913 "version": 0,
914 "versionField": null,
915 "indexes": [],
916 "schema": "@keet/device-identity",
917 "derived": false,
918 "key": [
919 "deviceKey"
920 ],
921 "trigger": null
922 },
923 {
924 "name": "contact-requests-v2",
925 "namespace": "keet-private-id",
926 "id": 51,
927 "type": 1,
928 "version": 0,
929 "versionField": null,
930 "indexes": [
931 "@keet-private-id/contact-requests-by-member",
932 "@keet-private-id/contact-requests-by-clock-v2",
933 "@keet-private-id/pending-contact-requests-v2",
934 "@keet-private-id/pending-contact-requests-by-member",
935 "@keet-private-id/accepted-contact-requests-v2",
936 "@keet-private-id/rejected-contact-requests-v2",
937 "@keet-private-id/discarded-contact-requests-v2"
938 ],
939 "schema": "@keet-private-id/contact-request-record",
940 "derived": false,
941 "key": [
942 "memberKey",
943 "keys.key"
944 ],
945 "trigger": "contactRequestsTrigger"
946 },
947 {
948 "name": "contact-requests-by-member",
949 "namespace": "keet-private-id",
950 "id": 52,
951 "type": 2,
952 "version": 0,
953 "collection": "@keet-private-id/contact-requests-v2",
954 "unique": false,
955 "deprecated": false,
956 "key": [
957 "memberKey"
958 ]
959 },
960 {
961 "name": "contact-requests-by-clock-v2",
962 "namespace": "keet-private-id",
963 "id": 53,
964 "type": 2,
965 "version": 0,
966 "collection": "@keet-private-id/contact-requests-v2",
967 "unique": false,
968 "deprecated": false,
969 "key": [
970 "clock"
971 ]
972 },
973 {
974 "name": "pending-contact-requests-v2",
975 "namespace": "keet-private-id",
976 "id": 54,
977 "type": 2,
978 "version": 0,
979 "collection": "@keet-private-id/contact-requests-v2",
980 "unique": false,
981 "deprecated": false,
982 "key": {
983 "type": {
984 "fields": [
985 {
986 "name": "clock",
987 "type": "uint"
988 }
989 ]
990 },
991 "map": "pendingContactRequestsMap"
992 }
993 },
994 {
995 "name": "pending-contact-requests-by-member",
996 "namespace": "keet-private-id",
997 "id": 55,
998 "type": 2,
999 "version": 0,
1000 "collection": "@keet-private-id/contact-requests-v2",
1001 "unique": false,
1002 "deprecated": false,
1003 "key": {
1004 "type": {
1005 "fields": [
1006 {
1007 "name": "memberKey",
1008 "type": "@keet/member-key"
1009 }
1010 ]
1011 },
1012 "map": "pendingContactRequestsByMemberMap"
1013 }
1014 },
1015 {
1016 "name": "accepted-contact-requests-v2",
1017 "namespace": "keet-private-id",
1018 "id": 56,
1019 "type": 2,
1020 "version": 0,
1021 "collection": "@keet-private-id/contact-requests-v2",
1022 "unique": false,
1023 "deprecated": false,
1024 "key": {
1025 "type": {
1026 "fields": [
1027 {
1028 "name": "clock",
1029 "type": "uint"
1030 }
1031 ]
1032 },
1033 "map": "acceptedContactRequestsMap"
1034 }
1035 },
1036 {
1037 "name": "rejected-contact-requests-v2",
1038 "namespace": "keet-private-id",
1039 "id": 57,
1040 "type": 2,
1041 "version": 0,
1042 "collection": "@keet-private-id/contact-requests-v2",
1043 "unique": false,
1044 "deprecated": false,
1045 "key": {
1046 "type": {
1047 "fields": [
1048 {
1049 "name": "clock",
1050 "type": "uint"
1051 }
1052 ]
1053 },
1054 "map": "rejectedContactRequestsMap"
1055 }
1056 },
1057 {
1058 "name": "discarded-contact-requests-v2",
1059 "namespace": "keet-private-id",
1060 "id": 58,
1061 "type": 2,
1062 "version": 0,
1063 "collection": "@keet-private-id/contact-requests-v2",
1064 "unique": false,
1065 "deprecated": false,
1066 "key": {
1067 "type": {
1068 "fields": [
1069 {
1070 "name": "clock",
1071 "type": "uint"
1072 }
1073 ]
1074 },
1075 "map": "discardedContactRequestsMap"
1076 }
1077 },
1078 {
1079 "name": "unreads",
1080 "namespace": "keet-private-id",
1081 "id": 59,
1082 "type": 1,
1083 "version": 0,
1084 "versionField": null,
1085 "indexes": [],
1086 "schema": "@keet-private-id/unreads",
1087 "derived": false,
1088 "key": [
1089 "deviceKey"
1090 ],
1091 "trigger": null
1092 },
1093 {
1094 "name": "chat-labels",
1095 "namespace": "keet",
1096 "id": 60,
1097 "type": 1,
1098 "version": 0,
1099 "versionField": null,
1100 "indexes": [],
1101 "schema": "@keet/chat-label",
1102 "derived": false,
1103 "key": [
1104 "id.thread",
1105 "id.index",
1106 "sender",
1107 "label"
1108 ],
1109 "trigger": "chatLabelTrigger"
1110 },
1111 {
1112 "name": "chat-label-digests",
1113 "namespace": "keet",
1114 "id": 61,
1115 "type": 1,
1116 "version": 2,
1117 "versionField": "version",
1118 "indexes": [
1119 "@keet/chat-label-digests-by-clock"
1120 ],
1121 "schema": "@keet/chat-label-digest",
1122 "derived": false,
1123 "key": [
1124 "id.thread",
1125 "id.index"
1126 ],
1127 "trigger": null
1128 },
1129 {
1130 "name": "read-lengths",
1131 "namespace": "keet",
1132 "id": 62,
1133 "type": 1,
1134 "version": 0,
1135 "versionField": null,
1136 "indexes": [],
1137 "schema": "@keet/read-length",
1138 "derived": false,
1139 "key": [
1140 "memberKey"
1141 ],
1142 "trigger": null
1143 },
1144 {
1145 "name": "tmp-removed-members",
1146 "namespace": "keet",
1147 "id": 63,
1148 "type": 1,
1149 "version": 0,
1150 "versionField": null,
1151 "indexes": [],
1152 "schema": "@keet/tmp-removed-member",
1153 "derived": false,
1154 "key": [
1155 "key"
1156 ],
1157 "trigger": null
1158 },
1159 {
1160 "name": "settings",
1161 "namespace": "keet-private-id",
1162 "id": 64,
1163 "type": 1,
1164 "version": 0,
1165 "versionField": null,
1166 "indexes": [],
1167 "schema": "@keet-private-id/settings",
1168 "derived": false,
1169 "key": [],
1170 "trigger": null
1171 },
1172 {
1173 "name": "chat-label-digests-by-clock",
1174 "namespace": "keet",
1175 "id": 65,
1176 "type": 2,
1177 "version": 2,
1178 "collection": "@keet/chat-label-digests",
1179 "unique": false,
1180 "deprecated": false,
1181 "key": {
1182 "type": {
1183 "fields": [
1184 {
1185 "name": "label",
1186 "type": "@keet/label-type"
1187 },
1188 {
1189 "name": "clock",
1190 "type": "uint"
1191 }
1192 ]
1193 },
1194 "map": "chatLabelDigestFlagMap"
1195 }
1196 },
1197 {
1198 "name": "member-labels",
1199 "namespace": "keet",
1200 "id": 66,
1201 "type": 1,
1202 "version": 3,
1203 "versionField": null,
1204 "indexes": [],
1205 "schema": "@keet/member-label",
1206 "derived": false,
1207 "key": [
1208 "key",
1209 "sender",
1210 "label"
1211 ],
1212 "trigger": null
1213 },
1214 {
1215 "name": "member-label-digests",
1216 "namespace": "keet",
1217 "id": 67,
1218 "type": 1,
1219 "version": 3,
1220 "versionField": null,
1221 "indexes": [
1222 "@keet/member-label-digests-by-clock"
1223 ],
1224 "schema": "@keet/member-label-digest",
1225 "derived": false,
1226 "key": [
1227 "key"
1228 ],
1229 "trigger": null
1230 },
1231 {
1232 "name": "member-label-digests-by-clock",
1233 "namespace": "keet",
1234 "id": 68,
1235 "type": 2,
1236 "version": 3,
1237 "collection": "@keet/member-label-digests",
1238 "unique": false,
1239 "deprecated": false,
1240 "key": {
1241 "type": {
1242 "fields": [
1243 {
1244 "name": "label",
1245 "type": "@keet/member-label-type"
1246 },
1247 {
1248 "name": "clock",
1249 "type": "uint"
1250 }
1251 ]
1252 },
1253 "map": "memberLabelDigestFlagMap"
1254 }
1255 },
1256 {
1257 "name": "calls",
1258 "namespace": "keet",
1259 "id": 69,
1260 "type": 1,
1261 "version": 4,
1262 "versionField": null,
1263 "indexes": [
1264 "@keet/calls-by-timestamp",
1265 "@keet/active-calls-by-timestamp"
1266 ],
1267 "schema": "@keet/call-record",
1268 "derived": false,
1269 "key": [
1270 "callKey"
1271 ],
1272 "trigger": null
1273 },
1274 {
1275 "name": "calls-by-timestamp",
1276 "namespace": "keet",
1277 "id": 70,
1278 "type": 2,
1279 "version": 4,
1280 "collection": "@keet/calls",
1281 "unique": false,
1282 "deprecated": false,
1283 "key": [
1284 "createdAt"
1285 ]
1286 },
1287 {
1288 "name": "active-calls-by-timestamp",
1289 "namespace": "keet",
1290 "id": 71,
1291 "type": 2,
1292 "version": 4,
1293 "collection": "@keet/calls",
1294 "unique": false,
1295 "deprecated": false,
1296 "key": {
1297 "type": {
1298 "fields": [
1299 {
1300 "name": "createdAt",
1301 "type": "uint"
1302 }
1303 ]
1304 },
1305 "map": "activeCallsMap"
1306 }
1307 },
1308 {
1309 "name": "call-members",
1310 "namespace": "keet",
1311 "id": 72,
1312 "type": 1,
1313 "version": 4,
1314 "versionField": null,
1315 "indexes": [],
1316 "schema": "@keet/call-member-record",
1317 "derived": false,
1318 "key": [
1319 "callKey",
1320 "memberKey"
1321 ],
1322 "trigger": null
1323 },
1324 {
1325 "name": "call-devices",
1326 "namespace": "keet",
1327 "id": 73,
1328 "type": 1,
1329 "version": 4,
1330 "versionField": null,
1331 "indexes": [
1332 "@keet/call-devices-by-member-key"
1333 ],
1334 "schema": "@keet/call-device-record",
1335 "derived": false,
1336 "key": [
1337 "callKey",
1338 "deviceKey"
1339 ],
1340 "trigger": null
1341 },
1342 {
1343 "name": "call-devices-by-member-key",
1344 "namespace": "keet",
1345 "id": 74,
1346 "type": 2,
1347 "version": 4,
1348 "collection": "@keet/call-devices",
1349 "unique": false,
1350 "deprecated": false,
1351 "key": [
1352 "callKey",
1353 "memberKey"
1354 ]
1355 },
1356 {
1357 "name": "call-streams",
1358 "namespace": "keet",
1359 "id": 75,
1360 "type": 1,
1361 "version": 4,
1362 "versionField": null,
1363 "indexes": [
1364 "@keet/call-streams-by-device-key"
1365 ],
1366 "schema": "@keet/call-stream-record",
1367 "derived": false,
1368 "key": [
1369 "callKey",
1370 "streamKey"
1371 ],
1372 "trigger": null
1373 },
1374 {
1375 "name": "call-streams-by-device-key",
1376 "namespace": "keet",
1377 "id": 76,
1378 "type": 2,
1379 "version": 4,
1380 "collection": "@keet/call-streams",
1381 "unique": false,
1382 "deprecated": false,
1383 "key": [
1384 "callKey",
1385 "deviceKey"
1386 ]
1387 },
1388 {
1389 "name": "unreads-v2",
1390 "namespace": "keet-private-id",
1391 "id": 77,
1392 "type": 1,
1393 "version": 5,
1394 "versionField": null,
1395 "indexes": [],
1396 "schema": "@keet-private-id/unreads",
1397 "derived": false,
1398 "key": [
1399 "deviceKey"
1400 ],
1401 "trigger": null
1402 }
1403 ]
1404}
keet-core-4.14.4-pretty/schema/spec/contract/hyperdb/index.js +3301 -0
……@@ -0,0 +1,3301 @@
1const { IndexEncoder: e, c: n, b4a: t } = require("hyperdb/runtime"),
2 { version: c, getEncoding: o, setVersion: r } = require("./messages.js"),
3 d = { schema: c, db: 5 },
4 l = require("../../../../lib/core/hyperdb/contract/keet.js"),
5 s = require("../../../../lib/core/hyperdb/contract/keet-private-id.js"),
6 u = new e([], { prefix: 0 })
7function i(e) {
8 return []
9}
10const a = o("@keet/system-digest")
11function f(e, n, t) {
12 r(e)
13 const c = { start: 0, end: t.byteLength, buffer: t }
14 return a.decode(c)
15}
16function g(e) {
17 return {}
18}
19const y = {
20 name: "@keet/system-digest",
21 id: 0,
22 version: 0,
23 encodeKey: (e) => u.encode([]),
24 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
25 u.encodeRange({
26 gt: e ? i(e) : null,
27 lt: n ? i(n) : null,
28 gte: t ? i(t) : null,
29 lte: c ? i(c) : null,
30 }),
31 encodeValue(e, n, c) {
32 r(e)
33 const o = { start: 0, end: 0, buffer: null }
34 return (a.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), a.encode(o, c), o.buffer)
35 },
36 trigger: null,
37 reconstruct: f,
38 reconstructKey: g,
39 indexes: [],
40 decodedVersion: 0,
41 },
42 b = new e([e.BUFFER], { prefix: 1 })
43function p(e) {
44 const n = e.key
45 return void 0 === n ? [] : [n]
46}
47const K = o("@keet/blind-peer/hyperdb#1")
48function v(e, n, t) {
49 const c = b.decode(n)
50 r(e)
51 const o = { start: 0, end: t.byteLength, buffer: t },
52 d = K.decode(o)
53 return ((d.key = c[0]), d)
54}
55function m(e) {
56 return { key: b.decode(e)[0] }
57}
58const h = {
59 name: "@keet/blind-peers",
60 id: 1,
61 version: 0,
62 encodeKey(e) {
63 const n = [e.key]
64 return b.encode(n)
65 },
66 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
67 b.encodeRange({
68 gt: e ? p(e) : null,
69 lt: n ? p(n) : null,
70 gte: t ? p(t) : null,
71 lte: c ? p(c) : null,
72 }),
73 encodeValue(e, n, c) {
74 r(e)
75 const o = { start: 0, end: 0, buffer: null }
76 return (K.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), K.encode(o, c), o.buffer)
77 },
78 trigger: null,
79 reconstruct: v,
80 reconstructKey: m,
81 indexes: [],
82 decodedVersion: 0,
83 },
84 k = new e([], { prefix: 2 })
85function x(e) {
86 return []
87}
88const R = o("@keet/room-config")
89function U(e, n, t) {
90 r(e)
91 const c = { start: 0, end: t.byteLength, buffer: t }
92 return R.decode(c)
93}
94function F(e) {
95 return {}
96}
97const w = {
98 name: "@keet/room-config",
99 id: 2,
100 version: 0,
101 encodeKey: (e) => k.encode([]),
102 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
103 k.encodeRange({
104 gt: e ? x(e) : null,
105 lt: n ? x(n) : null,
106 gte: t ? x(t) : null,
107 lte: c ? x(c) : null,
108 }),
109 encodeValue(e, n, c) {
110 r(e)
111 const o = { start: 0, end: 0, buffer: null }
112 return (R.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), R.encode(o, c), o.buffer)
113 },
114 trigger: null,
115 reconstruct: U,
116 reconstructKey: F,
117 indexes: [],
118 decodedVersion: 0,
119 },
120 V = new e([], { prefix: 3 })
121function I(e) {
122 return []
123}
124const E = o("@keet/room-seed")
125function B(e, n, t) {
126 r(e)
127 const c = { start: 0, end: t.byteLength, buffer: t }
128 return E.decode(c)
129}
130function T(e) {
131 return {}
132}
133const N = {
134 name: "@keet/room-capabilities",
135 id: 3,
136 version: 0,
137 encodeKey: (e) => V.encode([]),
138 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
139 V.encodeRange({
140 gt: e ? I(e) : null,
141 lt: n ? I(n) : null,
142 gte: t ? I(t) : null,
143 lte: c ? I(c) : null,
144 }),
145 encodeValue(e, n, c) {
146 r(e)
147 const o = { start: 0, end: 0, buffer: null }
148 return (E.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), E.encode(o, c), o.buffer)
149 },
150 trigger: null,
151 reconstruct: B,
152 reconstructKey: T,
153 indexes: [],
154 decodedVersion: 0,
155 },
156 q = new e([e.BUFFER], { prefix: 4 })
157function L(e) {
158 const n = e.deviceKey
159 return void 0 === n ? [] : [n]
160}
161const M = o("@keet/join-request/hyperdb#4")
162function A(e, n, t) {
163 const c = q.decode(n)
164 r(e)
165 const o = { start: 0, end: t.byteLength, buffer: t },
166 d = M.decode(o)
167 return ((d.deviceKey = c[0]), d)
168}
169function j(e) {
170 return { deviceKey: q.decode(e)[0] }
171}
172const C = {
173 name: "@keet/join-requests",
174 id: 4,
175 version: 0,
176 encodeKey(e) {
177 const n = [e.deviceKey]
178 return q.encode(n)
179 },
180 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
181 q.encodeRange({
182 gt: e ? L(e) : null,
183 lt: n ? L(n) : null,
184 gte: t ? L(t) : null,
185 lte: c ? L(c) : null,
186 }),
187 encodeValue(e, n, c) {
188 r(e)
189 const o = { start: 0, end: 0, buffer: null }
190 return (M.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), M.encode(o, c), o.buffer)
191 },
192 trigger: null,
193 reconstruct: A,
194 reconstructKey: j,
195 indexes: [],
196 decodedVersion: 0,
197 },
198 G = new e([e.BUFFER], { prefix: 5 })
199function S(e) {
200 const n = e.key
201 return void 0 === n ? [] : [n]
202}
203const D = o("@keet/device/hyperdb#5"),
204 P = l.devicesTrigger
205function z(e, n, t) {
206 const c = G.decode(n)
207 r(e)
208 const o = { start: 0, end: t.byteLength, buffer: t },
209 d = D.decode(o)
210 return ((d.key = c[0]), d)
211}
212function H(e) {
213 return { key: G.decode(e)[0] }
214}
215const J = {
216 name: "@keet/devices",
217 id: 5,
218 version: 0,
219 encodeKey(e) {
220 const n = [e.key]
221 return G.encode(n)
222 },
223 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
224 G.encodeRange({
225 gt: e ? S(e) : null,
226 lt: n ? S(n) : null,
227 gte: t ? S(t) : null,
228 lte: c ? S(c) : null,
229 }),
230 encodeValue(e, n, c) {
231 r(e)
232 const o = { start: 0, end: 0, buffer: null }
233 return (D.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), D.encode(o, c), o.buffer)
234 },
235 trigger: P,
236 reconstruct: z,
237 reconstructKey: H,
238 indexes: [],
239 decodedVersion: 0,
240 },
241 O = new e([e.BUFFER, e.BUFFER], { prefix: 6 })
242function Q(e) {
243 const n = [],
244 t = e.memberKey
245 if (void 0 === t) return n
246 n.push(t)
247 const c = e.key
248 return (void 0 === c || n.push(c), n)
249}
250const W = {
251 name: "@keet/devices-by-member-key",
252 version: 0,
253 id: 6,
254 encodeKey: (e) => O.encode(Q(e)),
255 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
256 O.encodeRange({
257 gt: e ? Q(e) : null,
258 lt: n ? Q(n) : null,
259 gte: t ? Q(t) : null,
260 lte: c ? Q(c) : null,
261 }),
262 encodeValue: (e) => W.collection.encodeKey(e),
263 encodeIndexKeys: (e, n) => [O.encode([e.memberKey, e.key])],
264 reconstruct: (e, n) => n,
265 offset: J.indexes.length,
266 collection: J,
267}
268J.indexes.push(W)
269const X = new e([e.BUFFER], { prefix: 7 })
270function Y(e) {
271 const n = e.profile?.swarmKey
272 return void 0 === n ? [] : [n]
273}
274const Z = {
275 name: "@keet/devices-by-swarm-key",
276 version: 0,
277 id: 7,
278 encodeKey: (e) => X.encode(Y(e)),
279 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
280 X.encodeRange({
281 gt: e ? Y(e) : null,
282 lt: n ? Y(n) : null,
283 gte: t ? Y(t) : null,
284 lte: c ? Y(c) : null,
285 }),
286 encodeValue: (e) => Z.collection.encodeKey(e),
287 encodeIndexKeys: (e, n) => [X.encode([e.profile.swarmKey])],
288 reconstruct: (e, n) => n,
289 offset: J.indexes.length,
290 collection: J,
291}
292J.indexes.push(Z)
293const $ = new e([e.BUFFER, e.BUFFER], { prefix: 8 }),
294 _ = l.activeDevicesByMemberKeyMap
295function ee(e) {
296 const n = e.memberKey
297 return void 0 === n ? [] : [n]
298}
299const ne = {
300 name: "@keet/active-devices-by-member-key",
301 version: 0,
302 id: 8,
303 encodeKey: (e) => $.encode(ee(e)),
304 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
305 $.encodeRange({
306 gt: e ? ee(e) : null,
307 lt: n ? ee(n) : null,
308 gte: t ? ee(t) : null,
309 lte: c ? ee(c) : null,
310 }),
311 encodeValue: (e) => ne.collection.encodeKey(e),
312 encodeIndexKeys(e, n) {
313 const t = _(e, n),
314 c = new Array(t.length)
315 for (let n = 0; n < t.length; n++) {
316 const o = t[n]
317 c[n] = $.encode([o.memberKey, e.key])
318 }
319 return c
320 },
321 reconstruct: (e, n) => n,
322 offset: J.indexes.length,
323 collection: J,
324}
325J.indexes.push(ne)
326const te = new e([e.BUFFER], { prefix: 9 }),
327 ce = l.activeDevicesMap
328function oe(e) {
329 const n = e.key
330 return void 0 === n ? [] : [n]
331}
332const re = {
333 name: "@keet/active-devices",
334 version: 0,
335 id: 9,
336 encodeKey: (e) => te.encode(oe(e)),
337 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
338 te.encodeRange({
339 gt: e ? oe(e) : null,
340 lt: n ? oe(n) : null,
341 gte: t ? oe(t) : null,
342 lte: c ? oe(c) : null,
343 }),
344 encodeValue: (e) => re.collection.encodeKey(e),
345 encodeIndexKeys(e, n) {
346 const t = ce(e, n),
347 c = new Array(t.length)
348 for (let e = 0; e < t.length; e++) {
349 const n = t[e]
350 c[e] = te.encode([n.key])
351 }
352 return c
353 },
354 reconstruct: (e, n) => n,
355 offset: J.indexes.length,
356 collection: J,
357}
358J.indexes.push(re)
359const de = new e([e.BUFFER], { prefix: 10 })
360function le(e) {
361 const n = e.key
362 return void 0 === n ? [] : [n]
363}
364const se = o("@keet/member-proofs/hyperdb#10")
365function ue(e, n, t) {
366 const c = de.decode(n)
367 r(e)
368 const o = { start: 0, end: t.byteLength, buffer: t },
369 d = se.decode(o)
370 return ((d.key = c[0]), d)
371}
372function ie(e) {
373 return { key: de.decode(e)[0] }
374}
375const ae = {
376 name: "@keet/member-proofs",
377 id: 10,
378 version: 0,
379 encodeKey(e) {
380 const n = [e.key]
381 return de.encode(n)
382 },
383 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
384 de.encodeRange({
385 gt: e ? le(e) : null,
386 lt: n ? le(n) : null,
387 gte: t ? le(t) : null,
388 lte: c ? le(c) : null,
389 }),
390 encodeValue(e, n, c) {
391 r(e)
392 const o = { start: 0, end: 0, buffer: null }
393 return (se.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), se.encode(o, c), o.buffer)
394 },
395 trigger: null,
396 reconstruct: ue,
397 reconstructKey: ie,
398 indexes: [],
399 decodedVersion: 0,
400 },
401 fe = new e([e.BUFFER], { prefix: 11 })
402function ge(e) {
403 const n = e.key
404 return void 0 === n ? [] : [n]
405}
406const ye = o("@keet/member/hyperdb#11"),
407 be = l.membersTrigger
408function pe(e, n, t) {
409 const c = fe.decode(n)
410 r(e)
411 const o = { start: 0, end: t.byteLength, buffer: t },
412 d = ye.decode(o)
413 return ((d.key = c[0]), d)
414}
415function Ke(e) {
416 return { key: fe.decode(e)[0] }
417}
418const ve = {
419 name: "@keet/members",
420 id: 11,
421 version: 0,
422 encodeKey(e) {
423 const n = [e.key]
424 return fe.encode(n)
425 },
426 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
427 fe.encodeRange({
428 gt: e ? ge(e) : null,
429 lt: n ? ge(n) : null,
430 gte: t ? ge(t) : null,
431 lte: c ? ge(c) : null,
432 }),
433 encodeValue(e, n, c) {
434 r(e)
435 const o = { start: 0, end: 0, buffer: null }
436 return (ye.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), ye.encode(o, c), o.buffer)
437 },
438 trigger: be,
439 reconstruct: pe,
440 reconstructKey: Ke,
441 indexes: [],
442 decodedVersion: 0,
443 },
444 me = new e([e.BUFFER], { prefix: 12 }),
445 he = l.moderatorsMap
446function ke(e) {
447 const n = e.key
448 return void 0 === n ? [] : [n]
449}
450const xe = {
451 name: "@keet/moderators",
452 version: 0,
453 id: 12,
454 encodeKey: (e) => me.encode(ke(e)),
455 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
456 me.encodeRange({
457 gt: e ? ke(e) : null,
458 lt: n ? ke(n) : null,
459 gte: t ? ke(t) : null,
460 lte: c ? ke(c) : null,
461 }),
462 encodeValue: (e) => xe.collection.encodeKey(e),
463 encodeIndexKeys(e, n) {
464 const t = he(e, n),
465 c = new Array(t.length)
466 for (let e = 0; e < t.length; e++) {
467 const n = t[e]
468 c[e] = me.encode([n.key])
469 }
470 return c
471 },
472 reconstruct: (e, n) => n,
473 offset: ve.indexes.length,
474 collection: ve,
475}
476ve.indexes.push(xe)
477const Re = new e([e.BUFFER], { prefix: 13 }),
478 Ue = l.adminsMap
479function Fe(e) {
480 const n = e.key
481 return void 0 === n ? [] : [n]
482}
483const we = {
484 name: "@keet/admins",
485 version: 0,
486 id: 13,
487 encodeKey: (e) => Re.encode(Fe(e)),
488 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
489 Re.encodeRange({
490 gt: e ? Fe(e) : null,
491 lt: n ? Fe(n) : null,
492 gte: t ? Fe(t) : null,
493 lte: c ? Fe(c) : null,
494 }),
495 encodeValue: (e) => we.collection.encodeKey(e),
496 encodeIndexKeys(e, n) {
497 const t = Ue(e, n),
498 c = new Array(t.length)
499 for (let e = 0; e < t.length; e++) {
500 const n = t[e]
501 c[e] = Re.encode([n.key])
502 }
503 return c
504 },
505 reconstruct: (e, n) => n,
506 offset: ve.indexes.length,
507 collection: ve,
508}
509ve.indexes.push(we)
510const Ve = new e([e.BUFFER], { prefix: 14 }),
511 Ie = l.activeMembersMap
512function Ee(e) {
513 const n = e.key
514 return void 0 === n ? [] : [n]
515}
516const Be = {
517 name: "@keet/active-members",
518 version: 0,
519 id: 14,
520 encodeKey: (e) => Ve.encode(Ee(e)),
521 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
522 Ve.encodeRange({
523 gt: e ? Ee(e) : null,
524 lt: n ? Ee(n) : null,
525 gte: t ? Ee(t) : null,
526 lte: c ? Ee(c) : null,
527 }),
528 encodeValue: (e) => Be.collection.encodeKey(e),
529 encodeIndexKeys(e, n) {
530 const t = Ie(e, n),
531 c = new Array(t.length)
532 for (let e = 0; e < t.length; e++) {
533 const n = t[e]
534 c[e] = Ve.encode([n.key])
535 }
536 return c
537 },
538 reconstruct: (e, n) => n,
539 offset: ve.indexes.length,
540 collection: ve,
541}
542ve.indexes.push(Be)
543const Te = new e([e.BUFFER], { prefix: 15 }),
544 Ne = l.mutedMembersMap
545function qe(e) {
546 const n = e.key
547 return void 0 === n ? [] : [n]
548}
549const Le = {
550 name: "@keet/muted-members",
551 version: 0,
552 id: 15,
553 encodeKey: (e) => Te.encode(qe(e)),
554 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
555 Te.encodeRange({
556 gt: e ? qe(e) : null,
557 lt: n ? qe(n) : null,
558 gte: t ? qe(t) : null,
559 lte: c ? qe(c) : null,
560 }),
561 encodeValue: (e) => Le.collection.encodeKey(e),
562 encodeIndexKeys(e, n) {
563 const t = Ne(e, n),
564 c = new Array(t.length)
565 for (let e = 0; e < t.length; e++) {
566 const n = t[e]
567 c[e] = Te.encode([n.key])
568 }
569 return c
570 },
571 reconstruct: (e, n) => n,
572 offset: ve.indexes.length,
573 collection: ve,
574}
575ve.indexes.push(Le)
576const Me = new e([e.STRING, e.BUFFER], { prefix: 16 }),
577 Ae = l.membersByMemberNameMap
578function je(e) {
579 const n = e.name
580 return void 0 === n ? [] : [n]
581}
582const Ce = {
583 name: "@keet/members-by-member-name",
584 version: 0,
585 id: 16,
586 encodeKey: (e) => Me.encode(je(e)),
587 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
588 Me.encodeRange({
589 gt: e ? je(e) : null,
590 lt: n ? je(n) : null,
591 gte: t ? je(t) : null,
592 lte: c ? je(c) : null,
593 }),
594 encodeValue: (e) => Ce.collection.encodeKey(e),
595 encodeIndexKeys(e, n) {
596 const t = Ae(e, n),
597 c = new Array(t.length)
598 for (let n = 0; n < t.length; n++) {
599 const o = t[n]
600 c[n] = Me.encode([o.name, e.key])
601 }
602 return c
603 },
604 reconstruct: (e, n) => n,
605 offset: ve.indexes.length,
606 collection: ve,
607}
608ve.indexes.push(Ce)
609const Ge = new e([e.BUFFER], { prefix: 17 })
610function Se(e) {
611 const n = e.key
612 return void 0 === n ? [] : [n]
613}
614const De = o("@keet/member-activity/hyperdb#17")
615function Pe(e, n, t) {
616 const c = Ge.decode(n)
617 r(e)
618 const o = { start: 0, end: t.byteLength, buffer: t },
619 d = De.decode(o)
620 return ((d.key = c[0]), d)
621}
622function ze(e) {
623 return { key: Ge.decode(e)[0] }
624}
625const He = {
626 name: "@keet/member-activity",
627 id: 17,
628 version: 0,
629 encodeKey(e) {
630 const n = [e.key]
631 return Ge.encode(n)
632 },
633 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
634 Ge.encodeRange({
635 gt: e ? Se(e) : null,
636 lt: n ? Se(n) : null,
637 gte: t ? Se(t) : null,
638 lte: c ? Se(c) : null,
639 }),
640 encodeValue(e, n, c) {
641 r(e)
642 const o = { start: 0, end: 0, buffer: null }
643 return (De.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), De.encode(o, c), o.buffer)
644 },
645 trigger: null,
646 reconstruct: Pe,
647 reconstructKey: ze,
648 indexes: [],
649 decodedVersion: 0,
650 },
651 Je = new e([e.BUFFER], { prefix: 18 })
652function Oe(e) {
653 const n = e.id
654 return void 0 === n ? [] : [n]
655}
656const Qe = o("@keet/invitation/hyperdb#18")
657function We(e, n, t) {
658 const c = Je.decode(n)
659 r(e)
660 const o = { start: 0, end: t.byteLength, buffer: t },
661 d = Qe.decode(o)
662 return ((d.id = c[0]), d)
663}
664function Xe(e) {
665 return { id: Je.decode(e)[0] }
666}
667const Ye = {
668 name: "@keet/invitations",
669 id: 18,
670 version: 0,
671 encodeKey(e) {
672 const n = [e.id]
673 return Je.encode(n)
674 },
675 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
676 Je.encodeRange({
677 gt: e ? Oe(e) : null,
678 lt: n ? Oe(n) : null,
679 gte: t ? Oe(t) : null,
680 lte: c ? Oe(c) : null,
681 }),
682 encodeValue(e, n, c) {
683 r(e)
684 const o = { start: 0, end: 0, buffer: null }
685 return (Qe.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Qe.encode(o, c), o.buffer)
686 },
687 trigger: null,
688 reconstruct: We,
689 reconstructKey: Xe,
690 indexes: [],
691 decodedVersion: 0,
692 },
693 Ze = new e([e.UINT], { prefix: 19 })
694function $e(e) {
695 const n = e.id
696 return void 0 === n ? [] : [n]
697}
698const _e = o("@keet/thread/hyperdb#19")
699function en(e, n, t) {
700 const c = Ze.decode(n)
701 r(e)
702 const o = { start: 0, end: t.byteLength, buffer: t },
703 d = _e.decode(o)
704 return ((d.id = c[0]), d)
705}
706function nn(e) {
707 return { id: Ze.decode(e)[0] }
708}
709const tn = {
710 name: "@keet/threads",
711 id: 19,
712 version: 0,
713 encodeKey(e) {
714 const n = [e.id]
715 return Ze.encode(n)
716 },
717 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
718 Ze.encodeRange({
719 gt: e ? $e(e) : null,
720 lt: n ? $e(n) : null,
721 gte: t ? $e(t) : null,
722 lte: c ? $e(c) : null,
723 }),
724 encodeValue(e, n, c) {
725 r(e)
726 const o = { start: 0, end: 0, buffer: null }
727 return (_e.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), _e.encode(o, c), o.buffer)
728 },
729 trigger: null,
730 reconstruct: en,
731 reconstructKey: nn,
732 indexes: [],
733 decodedVersion: 0,
734 },
735 cn = new e([e.BUFFER, e.UINT], { prefix: 20 }),
736 on = l.threadsByParentMap
737function rn(e) {
738 const n = [],
739 t = e.key
740 if (void 0 === t) return n
741 n.push(t)
742 const c = e.seq
743 return (void 0 === c || n.push(c), n)
744}
745const dn = {
746 name: "@keet/threads-by-parent",
747 version: 0,
748 id: 20,
749 encodeKey: (e) => cn.encode(rn(e)),
750 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
751 cn.encodeRange({
752 gt: e ? rn(e) : null,
753 lt: n ? rn(n) : null,
754 gte: t ? rn(t) : null,
755 lte: c ? rn(c) : null,
756 }),
757 encodeValue: (e) => dn.collection.encodeKey(e),
758 encodeIndexKeys(e, n) {
759 const t = on(e, n),
760 c = new Array(t.length)
761 for (let e = 0; e < t.length; e++) {
762 const n = t[e]
763 c[e] = cn.encode([n.key, n.seq])
764 }
765 return c
766 },
767 reconstruct: (e, n) => n,
768 offset: tn.indexes.length,
769 collection: tn,
770}
771tn.indexes.push(dn)
772const ln = new e([e.UINT, e.UINT], { prefix: 21 })
773function sn(e) {
774 const n = [],
775 t = e.id?.thread
776 if (void 0 === t) return n
777 n.push(t)
778 const c = e.id?.index
779 return (void 0 === c || n.push(c), n)
780}
781const un = o("@keet/chat-message-record/hyperdb#21"),
782 an = l.chatTrigger
783function fn(e, n, t) {
784 const c = ln.decode(n)
785 r(e)
786 const o = { start: 0, end: t.byteLength, buffer: t },
787 d = un.decode(o)
788 return ((d.id.thread = c[0]), (d.id.index = c[1]), d)
789}
790function gn(e) {
791 return { id: { index: ln.decode(e)[1] } }
792}
793const yn = {
794 name: "@keet/chat",
795 id: 21,
796 version: 0,
797 encodeKey(e) {
798 const n = [e.id.thread, e.id.index]
799 return ln.encode(n)
800 },
801 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
802 ln.encodeRange({
803 gt: e ? sn(e) : null,
804 lt: n ? sn(n) : null,
805 gte: t ? sn(t) : null,
806 lte: c ? sn(c) : null,
807 }),
808 encodeValue(e, n, c) {
809 r(e)
810 const o = { start: 0, end: 0, buffer: null }
811 return (un.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), un.encode(o, c), o.buffer)
812 },
813 trigger: an,
814 reconstruct: fn,
815 reconstructKey: gn,
816 indexes: [],
817 decodedVersion: 0,
818 },
819 bn = new e([e.BUFFER, e.UINT], { prefix: 22 })
820function pn(e) {
821 const n = [],
822 t = e.oplog?.key
823 if (void 0 === t) return n
824 n.push(t)
825 const c = e.oplog?.seq
826 return (void 0 === c || n.push(c), n)
827}
828const Kn = {
829 name: "@keet/chat-by-message-id",
830 version: 0,
831 id: 22,
832 encodeKey: (e) => bn.encode(pn(e)),
833 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
834 bn.encodeRange({
835 gt: e ? pn(e) : null,
836 lt: n ? pn(n) : null,
837 gte: t ? pn(t) : null,
838 lte: c ? pn(c) : null,
839 }),
840 encodeValue: (e) => Kn.collection.encodeKey(e),
841 encodeIndexKeys: (e, n) => [bn.encode([e.oplog.key, e.oplog.seq])],
842 reconstruct: (e, n) => n,
843 offset: yn.indexes.length,
844 collection: yn,
845}
846yn.indexes.push(Kn)
847const vn = new e([e.BUFFER, e.UINT, e.UINT, e.UINT], { prefix: 23 }),
848 mn = l.chatMentionsByMemberIdMap
849function hn(e) {
850 const n = [],
851 t = e.key
852 if (void 0 === t) return n
853 n.push(t)
854 const c = e.clock
855 return (void 0 === c || n.push(c), n)
856}
857const kn = {
858 name: "@keet/chat-mentions-by-member-id",
859 version: 0,
860 id: 23,
861 encodeKey: (e) => vn.encode(hn(e)),
862 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
863 vn.encodeRange({
864 gt: e ? hn(e) : null,
865 lt: n ? hn(n) : null,
866 gte: t ? hn(t) : null,
867 lte: c ? hn(c) : null,
868 }),
869 encodeValue: (e) => kn.collection.encodeKey(e),
870 encodeIndexKeys(e, n) {
871 const t = mn(e, n),
872 c = new Array(t.length)
873 for (let n = 0; n < t.length; n++) {
874 const o = t[n]
875 c[n] = vn.encode([o.key, o.clock, e.id.thread, e.id.index])
876 }
877 return c
878 },
879 reconstruct: (e, n) => n,
880 offset: yn.indexes.length,
881 collection: yn,
882}
883yn.indexes.push(kn)
884const xn = new e([e.UINT, e.UINT, e.UINT, e.UINT], { prefix: 24 }),
885 Rn = l.pinnedChatMessagesMap
886function Un(e) {
887 const n = [],
888 t = e.thread
889 if (void 0 === t) return n
890 n.push(t)
891 const c = e.index
892 return (void 0 === c || n.push(c), n)
893}
894const Fn = {
895 name: "@keet/pinned-chat-messages",
896 version: 0,
897 id: 24,
898 encodeKey: (e) => xn.encode(Un(e)),
899 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
900 xn.encodeRange({
901 gt: e ? Un(e) : null,
902 lt: n ? Un(n) : null,
903 gte: t ? Un(t) : null,
904 lte: c ? Un(c) : null,
905 }),
906 encodeValue: (e) => Fn.collection.encodeKey(e),
907 encodeIndexKeys(e, n) {
908 const t = Rn(e, n),
909 c = new Array(t.length)
910 for (let n = 0; n < t.length; n++) {
911 const o = t[n]
912 c[n] = xn.encode([o.thread, o.index, e.id.thread, e.id.index])
913 }
914 return c
915 },
916 reconstruct: (e, n) => n,
917 offset: yn.indexes.length,
918 collection: yn,
919}
920yn.indexes.push(Fn)
921const wn = new e([e.UINT, e.UINT], { prefix: 25 })
922function Vn(e) {
923 const n = [],
924 t = e.id?.thread
925 if (void 0 === t) return n
926 n.push(t)
927 const c = e.id?.index
928 return (void 0 === c || n.push(c), n)
929}
930const In = o("@keet/reactions-digest/hyperdb#25")
931function En(e, n, t) {
932 const c = wn.decode(n)
933 r(e)
934 const o = { start: 0, end: t.byteLength, buffer: t },
935 d = In.decode(o)
936 return ((d.id.thread = c[0]), (d.id.index = c[1]), d)
937}
938function Bn(e) {
939 return { id: { index: wn.decode(e)[1] } }
940}
941const Tn = {
942 name: "@keet/reaction-digests",
943 id: 25,
944 version: 0,
945 encodeKey(e) {
946 const n = [e.id.thread, e.id.index]
947 return wn.encode(n)
948 },
949 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
950 wn.encodeRange({
951 gt: e ? Vn(e) : null,
952 lt: n ? Vn(n) : null,
953 gte: t ? Vn(t) : null,
954 lte: c ? Vn(c) : null,
955 }),
956 encodeValue(e, n, c) {
957 r(e)
958 const o = { start: 0, end: 0, buffer: null }
959 return (In.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), In.encode(o, c), o.buffer)
960 },
961 trigger: null,
962 reconstruct: En,
963 reconstructKey: Bn,
964 indexes: [],
965 decodedVersion: 0,
966 },
967 Nn = new e([e.UINT, e.UINT, e.BUFFER, e.STRING], { prefix: 26 })
968function qn(e) {
969 const n = [],
970 t = e.id?.thread
971 if (void 0 === t) return n
972 n.push(t)
973 const c = e.id?.index
974 if (void 0 === c) return n
975 n.push(c)
976 const o = e.sender
977 if (void 0 === o) return n
978 n.push(o)
979 const r = e.reaction
980 return (void 0 === r || n.push(r), n)
981}
982const Ln = o("@keet/reaction/hyperdb#26"),
983 Mn = l.reactionsTrigger
984function An(e, n, t) {
985 const c = Nn.decode(n)
986 r(e)
987 const o = { start: 0, end: t.byteLength, buffer: t },
988 d = Ln.decode(o)
989 return ((d.id.thread = c[0]), (d.id.index = c[1]), (d.sender = c[2]), (d.reaction = c[3]), d)
990}
991function jn(e) {
992 const n = Nn.decode(e)
993 return { id: { index: n[1] }, sender: n[2], reaction: n[3] }
994}
995const Cn = {
996 name: "@keet/reactions",
997 id: 26,
998 version: 0,
999 encodeKey(e) {
1000 const n = [e.id.thread, e.id.index, e.sender, e.reaction]
1001 return Nn.encode(n)
1002 },
1003 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1004 Nn.encodeRange({
1005 gt: e ? qn(e) : null,
1006 lt: n ? qn(n) : null,
1007 gte: t ? qn(t) : null,
1008 lte: c ? qn(c) : null,
1009 }),
1010 encodeValue(e, n, c) {
1011 r(e)
1012 const o = { start: 0, end: 0, buffer: null }
1013 return (Ln.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Ln.encode(o, c), o.buffer)
1014 },
1015 trigger: Mn,
1016 reconstruct: An,
1017 reconstructKey: jn,
1018 indexes: [],
1019 decodedVersion: 0,
1020 },
1021 Gn = new e([e.UINT, e.UINT, e.STRING, e.UINT, e.BUFFER, e.UINT, e.UINT, e.BUFFER, e.STRING], {
1022 prefix: 27,
1023 })
1024function Sn(e) {
1025 const n = [],
1026 t = e.id?.thread
1027 if (void 0 === t) return n
1028 n.push(t)
1029 const c = e.id?.index
1030 if (void 0 === c) return n
1031 n.push(c)
1032 const o = e.reaction
1033 if (void 0 === o) return n
1034 n.push(o)
1035 const r = e.clock
1036 if (void 0 === r) return n
1037 n.push(r)
1038 const d = e.sender
1039 if (void 0 === d) return n
1040 n.push(d)
1041 const l = e.id?.thread
1042 if (void 0 === l) return n
1043 n.push(l)
1044 const s = e.id?.index
1045 if (void 0 === s) return n
1046 n.push(s)
1047 const u = e.sender
1048 if (void 0 === u) return n
1049 n.push(u)
1050 const i = e.reaction
1051 return (void 0 === i || n.push(i), n)
1052}
1053const Dn = {
1054 name: "@keet/reactions-by-clock",
1055 version: 0,
1056 id: 27,
1057 encodeKey: (e) => Gn.encode(Sn(e)),
1058 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1059 Gn.encodeRange({
1060 gt: e ? Sn(e) : null,
1061 lt: n ? Sn(n) : null,
1062 gte: t ? Sn(t) : null,
1063 lte: c ? Sn(c) : null,
1064 }),
1065 encodeValue: (e) => Dn.collection.encodeKey(e),
1066 encodeIndexKeys: (e, n) => [
1067 Gn.encode([
1068 e.id.thread,
1069 e.id.index,
1070 e.reaction,
1071 e.clock,
1072 e.sender,
1073 e.id.thread,
1074 e.id.index,
1075 e.sender,
1076 e.reaction,
1077 ]),
1078 ],
1079 reconstruct: (e, n) => n,
1080 offset: Cn.indexes.length,
1081 collection: Cn,
1082}
1083Cn.indexes.push(Dn)
1084const Pn = new e([e.UINT], { prefix: 28 })
1085function zn(e) {
1086 const n = e.id
1087 return void 0 === n ? [] : [n]
1088}
1089const Hn = o("@keet/file-record/hyperdb#28"),
1090 Jn = l.filesTrigger
1091function On(e, n, t) {
1092 const c = Pn.decode(n)
1093 r(e)
1094 const o = { start: 0, end: t.byteLength, buffer: t },
1095 d = Hn.decode(o)
1096 return ((d.id = c[0]), (Wn.decodedVersion = d.version), d)
1097}
1098function Qn(e) {
1099 return { id: Pn.decode(e)[0] }
1100}
1101const Wn = {
1102 name: "@keet/files",
1103 id: 28,
1104 version: 1,
1105 encodeKey(e) {
1106 const n = [e.id]
1107 return Pn.encode(n)
1108 },
1109 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1110 Pn.encodeRange({
1111 gt: e ? zn(e) : null,
1112 lt: n ? zn(n) : null,
1113 gte: t ? zn(t) : null,
1114 lte: c ? zn(c) : null,
1115 }),
1116 encodeValue(e, n, c) {
1117 r(e)
1118 const o = { start: 0, end: 0, buffer: null }
1119 return (
1120 (c.version = n),
1121 Hn.preencode(o, c),
1122 (o.buffer = t.allocUnsafe(o.end)),
1123 Hn.encode(o, c),
1124 o.buffer
1125 )
1126 },
1127 trigger: Jn,
1128 reconstruct: On,
1129 reconstructKey: Qn,
1130 indexes: [],
1131 decodedVersion: 0,
1132 },
1133 Xn = new e([e.BUFFER, e.UINT, e.UINT], { prefix: 29 })
1134function Yn(e) {
1135 const n = [],
1136 t = e.oplog?.key
1137 if (void 0 === t) return n
1138 n.push(t)
1139 const c = e.oplog?.seq
1140 if (void 0 === c) return n
1141 n.push(c)
1142 const o = e.id
1143 return (void 0 === o || n.push(o), n)
1144}
1145const Zn = {
1146 name: "@keet/files-by-message-id",
1147 version: 0,
1148 id: 29,
1149 encodeKey: (e) => Xn.encode(Yn(e)),
1150 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1151 Xn.encodeRange({
1152 gt: e ? Yn(e) : null,
1153 lt: n ? Yn(n) : null,
1154 gte: t ? Yn(t) : null,
1155 lte: c ? Yn(c) : null,
1156 }),
1157 encodeValue: (e) => Zn.collection.encodeKey(e),
1158 encodeIndexKeys: (e, n) => [Xn.encode([e.oplog.key, e.oplog.seq, e.id])],
1159 reconstruct: (e, n) => n,
1160 offset: Wn.indexes.length,
1161 collection: Wn,
1162}
1163Wn.indexes.push(Zn)
1164const $n = new e([e.STRING, e.UINT, e.UINT], { prefix: 30 }),
1165 _n = l.filesByTypeMap
1166function et(e) {
1167 const n = [],
1168 t = e.type
1169 if (void 0 === t) return n
1170 n.push(t)
1171 const c = e.id
1172 return (void 0 === c || n.push(c), n)
1173}
1174const nt = {
1175 name: "@keet/files-by-type",
1176 version: 0,
1177 id: 30,
1178 encodeKey: (e) => $n.encode(et(e)),
1179 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1180 $n.encodeRange({
1181 gt: e ? et(e) : null,
1182 lt: n ? et(n) : null,
1183 gte: t ? et(t) : null,
1184 lte: c ? et(c) : null,
1185 }),
1186 encodeValue: (e) => nt.collection.encodeKey(e),
1187 encodeIndexKeys(e, n) {
1188 const t = _n(e, n),
1189 c = new Array(t.length)
1190 for (let n = 0; n < t.length; n++) {
1191 const o = t[n]
1192 c[n] = $n.encode([o.type, o.id, e.id])
1193 }
1194 return c
1195 },
1196 reconstruct: (e, n) => n,
1197 offset: -1,
1198 collection: Wn,
1199 },
1200 tt = new e([e.UINT, e.UINT], { prefix: 31 }),
1201 ct = l.deletedFilesMap
1202function ot(e) {
1203 const n = e.id
1204 return void 0 === n ? [] : [n]
1205}
1206const rt = {
1207 name: "@keet/deleted-files",
1208 version: 0,
1209 id: 31,
1210 encodeKey: (e) => tt.encode(ot(e)),
1211 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1212 tt.encodeRange({
1213 gt: e ? ot(e) : null,
1214 lt: n ? ot(n) : null,
1215 gte: t ? ot(t) : null,
1216 lte: c ? ot(c) : null,
1217 }),
1218 encodeValue: (e) => rt.collection.encodeKey(e),
1219 encodeIndexKeys(e, n) {
1220 const t = ct(e, n),
1221 c = new Array(t.length)
1222 for (let n = 0; n < t.length; n++) {
1223 const o = t[n]
1224 c[n] = tt.encode([o.id, e.id])
1225 }
1226 return c
1227 },
1228 reconstruct: (e, n) => n,
1229 offset: -1,
1230 collection: Wn,
1231 },
1232 dt = new e([], { prefix: 32 })
1233function lt(e) {
1234 return []
1235}
1236const st = o("@keet/room-identity")
1237function ut(e, n, t) {
1238 r(e)
1239 const c = { start: 0, end: t.byteLength, buffer: t }
1240 return st.decode(c)
1241}
1242function it(e) {
1243 return {}
1244}
1245const at = {
1246 name: "@keet-private-id/identity",
1247 id: 32,
1248 version: 0,
1249 encodeKey: (e) => dt.encode([]),
1250 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1251 dt.encodeRange({
1252 gt: e ? lt(e) : null,
1253 lt: n ? lt(n) : null,
1254 gte: t ? lt(t) : null,
1255 lte: c ? lt(c) : null,
1256 }),
1257 encodeValue(e, n, c) {
1258 r(e)
1259 const o = { start: 0, end: 0, buffer: null }
1260 return (st.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), st.encode(o, c), o.buffer)
1261 },
1262 trigger: null,
1263 reconstruct: ut,
1264 reconstructKey: it,
1265 indexes: [],
1266 decodedVersion: 0,
1267 },
1268 ft = new e([], { prefix: 33 })
1269function gt(e) {
1270 return []
1271}
1272const yt = o("@keet-private-id/stats")
1273function bt(e, n, t) {
1274 r(e)
1275 const c = { start: 0, end: t.byteLength, buffer: t }
1276 return yt.decode(c)
1277}
1278function pt(e) {
1279 return {}
1280}
1281const Kt = {
1282 name: "@keet-private-id/stats",
1283 id: 33,
1284 version: 0,
1285 encodeKey: (e) => ft.encode([]),
1286 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1287 ft.encodeRange({
1288 gt: e ? gt(e) : null,
1289 lt: n ? gt(n) : null,
1290 gte: t ? gt(t) : null,
1291 lte: c ? gt(c) : null,
1292 }),
1293 encodeValue(e, n, c) {
1294 r(e)
1295 const o = { start: 0, end: 0, buffer: null }
1296 return (yt.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), yt.encode(o, c), o.buffer)
1297 },
1298 trigger: null,
1299 reconstruct: bt,
1300 reconstructKey: pt,
1301 indexes: [],
1302 decodedVersion: 0,
1303 },
1304 vt = new e([], { prefix: 34 })
1305function mt(e) {
1306 return []
1307}
1308const ht = o("@keet-private-id/counters")
1309function kt(e, n, t) {
1310 r(e)
1311 const c = { start: 0, end: t.byteLength, buffer: t }
1312 return ht.decode(c)
1313}
1314function xt(e) {
1315 return {}
1316}
1317const Rt = {
1318 name: "@keet-private-id/counters",
1319 id: 34,
1320 version: 0,
1321 encodeKey: (e) => vt.encode([]),
1322 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1323 vt.encodeRange({
1324 gt: e ? mt(e) : null,
1325 lt: n ? mt(n) : null,
1326 gte: t ? mt(t) : null,
1327 lte: c ? mt(c) : null,
1328 }),
1329 encodeValue(e, n, c) {
1330 r(e)
1331 const o = { start: 0, end: 0, buffer: null }
1332 return (ht.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), ht.encode(o, c), o.buffer)
1333 },
1334 trigger: null,
1335 reconstruct: kt,
1336 reconstructKey: xt,
1337 indexes: [],
1338 decodedVersion: 0,
1339 },
1340 Ut = new e([e.BUFFER], { prefix: 35 })
1341function Ft(e) {
1342 const n = e.id
1343 return void 0 === n ? [] : [n]
1344}
1345const wt = o("@keet-private-id/pending-invitation/hyperdb#35")
1346function Vt(e, n, t) {
1347 const c = Ut.decode(n)
1348 r(e)
1349 const o = { start: 0, end: t.byteLength, buffer: t },
1350 d = wt.decode(o)
1351 return ((d.id = c[0]), d)
1352}
1353function It(e) {
1354 return { id: Ut.decode(e)[0] }
1355}
1356const Et = {
1357 name: "@keet-private-id/pending-invitations",
1358 id: 35,
1359 version: 0,
1360 encodeKey(e) {
1361 const n = [e.id]
1362 return Ut.encode(n)
1363 },
1364 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1365 Ut.encodeRange({
1366 gt: e ? Ft(e) : null,
1367 lt: n ? Ft(n) : null,
1368 gte: t ? Ft(t) : null,
1369 lte: c ? Ft(c) : null,
1370 }),
1371 encodeValue(e, n, c) {
1372 r(e)
1373 const o = { start: 0, end: 0, buffer: null }
1374 return (wt.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), wt.encode(o, c), o.buffer)
1375 },
1376 trigger: null,
1377 reconstruct: Vt,
1378 reconstructKey: It,
1379 indexes: [],
1380 decodedVersion: 0,
1381 },
1382 Bt = new e([e.BUFFER], { prefix: 36 })
1383function Tt(e) {
1384 const n = e.roomKey
1385 return void 0 === n ? [] : [n]
1386}
1387const Nt = o("@keet-private-id/room/hyperdb#36"),
1388 qt = s.roomsTrigger
1389function Lt(e, n, t) {
1390 const c = Bt.decode(n)
1391 r(e)
1392 const o = { start: 0, end: t.byteLength, buffer: t },
1393 d = Nt.decode(o)
1394 return ((d.roomKey = c[0]), d)
1395}
1396function Mt(e) {
1397 return { roomKey: Bt.decode(e)[0] }
1398}
1399const At = {
1400 name: "@keet-private-id/rooms",
1401 id: 36,
1402 version: 0,
1403 encodeKey(e) {
1404 const n = [e.roomKey]
1405 return Bt.encode(n)
1406 },
1407 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1408 Bt.encodeRange({
1409 gt: e ? Tt(e) : null,
1410 lt: n ? Tt(n) : null,
1411 gte: t ? Tt(t) : null,
1412 lte: c ? Tt(c) : null,
1413 }),
1414 encodeValue(e, n, c) {
1415 r(e)
1416 const o = { start: 0, end: 0, buffer: null }
1417 return (Nt.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Nt.encode(o, c), o.buffer)
1418 },
1419 trigger: qt,
1420 reconstruct: Lt,
1421 reconstructKey: Mt,
1422 indexes: [],
1423 decodedVersion: 0,
1424 },
1425 jt = new e([e.UINT, e.BUFFER], { prefix: 37 })
1426function Ct(e) {
1427 const n = [],
1428 t = e.clock
1429 if (void 0 === t) return n
1430 n.push(t)
1431 const c = e.roomKey
1432 return (void 0 === c || n.push(c), n)
1433}
1434const Gt = {
1435 name: "@keet-private-id/rooms-by-clock",
1436 version: 0,
1437 id: 37,
1438 encodeKey: (e) => jt.encode(Ct(e)),
1439 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1440 jt.encodeRange({
1441 gt: e ? Ct(e) : null,
1442 lt: n ? Ct(n) : null,
1443 gte: t ? Ct(t) : null,
1444 lte: c ? Ct(c) : null,
1445 }),
1446 encodeValue: (e) => Gt.collection.encodeKey(e),
1447 encodeIndexKeys: (e, n) => [jt.encode([e.clock, e.roomKey])],
1448 reconstruct: (e, n) => n,
1449 offset: At.indexes.length,
1450 collection: At,
1451}
1452At.indexes.push(Gt)
1453const St = new e([e.BUFFER], { prefix: 38 })
1454function Dt(e) {
1455 const n = e.memberKey
1456 return void 0 === n ? [] : [n]
1457}
1458const Pt = o("@keet-private-id/contact-record/hyperdb#38"),
1459 zt = s.contactsTrigger
1460function Ht(e, n, t) {
1461 const c = St.decode(n)
1462 r(e)
1463 const o = { start: 0, end: t.byteLength, buffer: t },
1464 d = Pt.decode(o)
1465 return ((d.memberKey = c[0]), d)
1466}
1467function Jt(e) {
1468 return { memberKey: St.decode(e)[0] }
1469}
1470const Ot = {
1471 name: "@keet-private-id/contacts",
1472 id: 38,
1473 version: 0,
1474 encodeKey(e) {
1475 const n = [e.memberKey]
1476 return St.encode(n)
1477 },
1478 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1479 St.encodeRange({
1480 gt: e ? Dt(e) : null,
1481 lt: n ? Dt(n) : null,
1482 gte: t ? Dt(t) : null,
1483 lte: c ? Dt(c) : null,
1484 }),
1485 encodeValue(e, n, c) {
1486 r(e)
1487 const o = { start: 0, end: 0, buffer: null }
1488 return (Pt.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Pt.encode(o, c), o.buffer)
1489 },
1490 trigger: zt,
1491 reconstruct: Ht,
1492 reconstructKey: Jt,
1493 indexes: [],
1494 decodedVersion: 0,
1495 },
1496 Qt = new e([e.UINT, e.BUFFER], { prefix: 39 })
1497function Wt(e) {
1498 const n = [],
1499 t = e.clock
1500 if (void 0 === t) return n
1501 n.push(t)
1502 const c = e.memberKey
1503 return (void 0 === c || n.push(c), n)
1504}
1505const Xt = {
1506 name: "@keet-private-id/contacts-by-clock",
1507 version: 0,
1508 id: 39,
1509 encodeKey: (e) => Qt.encode(Wt(e)),
1510 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1511 Qt.encodeRange({
1512 gt: e ? Wt(e) : null,
1513 lt: n ? Wt(n) : null,
1514 gte: t ? Wt(t) : null,
1515 lte: c ? Wt(c) : null,
1516 }),
1517 encodeValue: (e) => Xt.collection.encodeKey(e),
1518 encodeIndexKeys: (e, n) => [Qt.encode([e.clock, e.memberKey])],
1519 reconstruct: (e, n) => n,
1520 offset: Ot.indexes.length,
1521 collection: Ot,
1522}
1523Ot.indexes.push(Xt)
1524const Yt = new e([e.BUFFER], { prefix: 40 })
1525function Zt(e) {
1526 const n = e.memberKey
1527 return void 0 === n ? [] : [n]
1528}
1529const $t = o("@keet-private-id/contact-request-record/hyperdb#40"),
1530 _t = s.contactRequestsTrigger
1531function ec(e, n, t) {
1532 const c = Yt.decode(n)
1533 r(e)
1534 const o = { start: 0, end: t.byteLength, buffer: t },
1535 d = $t.decode(o)
1536 return ((d.memberKey = c[0]), d)
1537}
1538function nc(e) {
1539 return { memberKey: Yt.decode(e)[0] }
1540}
1541const tc = {
1542 name: "@keet-private-id/contact-requests",
1543 id: 40,
1544 version: 0,
1545 encodeKey(e) {
1546 const n = [e.memberKey]
1547 return Yt.encode(n)
1548 },
1549 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1550 Yt.encodeRange({
1551 gt: e ? Zt(e) : null,
1552 lt: n ? Zt(n) : null,
1553 gte: t ? Zt(t) : null,
1554 lte: c ? Zt(c) : null,
1555 }),
1556 encodeValue(e, n, c) {
1557 r(e)
1558 const o = { start: 0, end: 0, buffer: null }
1559 return ($t.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), $t.encode(o, c), o.buffer)
1560 },
1561 trigger: _t,
1562 reconstruct: ec,
1563 reconstructKey: nc,
1564 indexes: [],
1565 decodedVersion: 0,
1566 },
1567 cc = new e([e.UINT, e.BUFFER], { prefix: 41 })
1568function oc(e) {
1569 const n = [],
1570 t = e.clock
1571 if (void 0 === t) return n
1572 n.push(t)
1573 const c = e.memberKey
1574 return (void 0 === c || n.push(c), n)
1575}
1576const rc = {
1577 name: "@keet-private-id/contact-requests-by-clock",
1578 version: 0,
1579 id: 41,
1580 encodeKey: (e) => cc.encode(oc(e)),
1581 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1582 cc.encodeRange({
1583 gt: e ? oc(e) : null,
1584 lt: n ? oc(n) : null,
1585 gte: t ? oc(t) : null,
1586 lte: c ? oc(c) : null,
1587 }),
1588 encodeValue: (e) => rc.collection.encodeKey(e),
1589 encodeIndexKeys: (e, n) => [cc.encode([e.clock, e.memberKey])],
1590 reconstruct: (e, n) => n,
1591 offset: tc.indexes.length,
1592 collection: tc,
1593}
1594tc.indexes.push(rc)
1595const dc = new e([e.UINT, e.BUFFER], { prefix: 42 }),
1596 lc = s.pendingContactRequestsMap
1597function sc(e) {
1598 const n = e.clock
1599 return void 0 === n ? [] : [n]
1600}
1601const uc = {
1602 name: "@keet-private-id/pending-contact-requests",
1603 version: 0,
1604 id: 42,
1605 encodeKey: (e) => dc.encode(sc(e)),
1606 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1607 dc.encodeRange({
1608 gt: e ? sc(e) : null,
1609 lt: n ? sc(n) : null,
1610 gte: t ? sc(t) : null,
1611 lte: c ? sc(c) : null,
1612 }),
1613 encodeValue: (e) => uc.collection.encodeKey(e),
1614 encodeIndexKeys(e, n) {
1615 const t = lc(e, n),
1616 c = new Array(t.length)
1617 for (let n = 0; n < t.length; n++) {
1618 const o = t[n]
1619 c[n] = dc.encode([o.clock, e.memberKey])
1620 }
1621 return c
1622 },
1623 reconstruct: (e, n) => n,
1624 offset: tc.indexes.length,
1625 collection: tc,
1626}
1627tc.indexes.push(uc)
1628const ic = new e([e.UINT, e.BUFFER], { prefix: 43 }),
1629 ac = s.acceptedContactRequestsMap
1630function fc(e) {
1631 const n = e.clock
1632 return void 0 === n ? [] : [n]
1633}
1634const gc = {
1635 name: "@keet-private-id/accepted-contact-requests",
1636 version: 0,
1637 id: 43,
1638 encodeKey: (e) => ic.encode(fc(e)),
1639 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1640 ic.encodeRange({
1641 gt: e ? fc(e) : null,
1642 lt: n ? fc(n) : null,
1643 gte: t ? fc(t) : null,
1644 lte: c ? fc(c) : null,
1645 }),
1646 encodeValue: (e) => gc.collection.encodeKey(e),
1647 encodeIndexKeys(e, n) {
1648 const t = ac(e, n),
1649 c = new Array(t.length)
1650 for (let n = 0; n < t.length; n++) {
1651 const o = t[n]
1652 c[n] = ic.encode([o.clock, e.memberKey])
1653 }
1654 return c
1655 },
1656 reconstruct: (e, n) => n,
1657 offset: tc.indexes.length,
1658 collection: tc,
1659}
1660tc.indexes.push(gc)
1661const yc = new e([e.UINT, e.BUFFER], { prefix: 44 }),
1662 bc = s.rejectedContactRequestsMap
1663function pc(e) {
1664 const n = e.clock
1665 return void 0 === n ? [] : [n]
1666}
1667const Kc = {
1668 name: "@keet-private-id/rejected-contact-requests",
1669 version: 0,
1670 id: 44,
1671 encodeKey: (e) => yc.encode(pc(e)),
1672 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1673 yc.encodeRange({
1674 gt: e ? pc(e) : null,
1675 lt: n ? pc(n) : null,
1676 gte: t ? pc(t) : null,
1677 lte: c ? pc(c) : null,
1678 }),
1679 encodeValue: (e) => Kc.collection.encodeKey(e),
1680 encodeIndexKeys(e, n) {
1681 const t = bc(e, n),
1682 c = new Array(t.length)
1683 for (let n = 0; n < t.length; n++) {
1684 const o = t[n]
1685 c[n] = yc.encode([o.clock, e.memberKey])
1686 }
1687 return c
1688 },
1689 reconstruct: (e, n) => n,
1690 offset: tc.indexes.length,
1691 collection: tc,
1692}
1693tc.indexes.push(Kc)
1694const vc = new e([e.UINT, e.BUFFER], { prefix: 45 }),
1695 mc = s.discardedContactRequestsMap
1696function hc(e) {
1697 const n = e.clock
1698 return void 0 === n ? [] : [n]
1699}
1700const kc = {
1701 name: "@keet-private-id/discarded-contact-requests",
1702 version: 0,
1703 id: 45,
1704 encodeKey: (e) => vc.encode(hc(e)),
1705 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1706 vc.encodeRange({
1707 gt: e ? hc(e) : null,
1708 lt: n ? hc(n) : null,
1709 gte: t ? hc(t) : null,
1710 lte: c ? hc(c) : null,
1711 }),
1712 encodeValue: (e) => kc.collection.encodeKey(e),
1713 encodeIndexKeys(e, n) {
1714 const t = mc(e, n),
1715 c = new Array(t.length)
1716 for (let n = 0; n < t.length; n++) {
1717 const o = t[n]
1718 c[n] = vc.encode([o.clock, e.memberKey])
1719 }
1720 return c
1721 },
1722 reconstruct: (e, n) => n,
1723 offset: tc.indexes.length,
1724 collection: tc,
1725}
1726tc.indexes.push(kc)
1727const xc = new e([e.UINT], { prefix: 46 })
1728function Rc(e) {
1729 const n = e.key
1730 return void 0 === n ? [] : [n]
1731}
1732const Uc = o("@keet/test-collection-record-1/hyperdb#46")
1733function Fc(e, n, t) {
1734 const c = xc.decode(n)
1735 r(e)
1736 const o = { start: 0, end: t.byteLength, buffer: t },
1737 d = Uc.decode(o)
1738 return ((d.key = c[0]), d)
1739}
1740function wc(e) {
1741 return { key: xc.decode(e)[0] }
1742}
1743const Vc = {
1744 name: "@keet/test-collection-1",
1745 id: 46,
1746 version: 0,
1747 encodeKey(e) {
1748 const n = [e.key]
1749 return xc.encode(n)
1750 },
1751 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1752 xc.encodeRange({
1753 gt: e ? Rc(e) : null,
1754 lt: n ? Rc(n) : null,
1755 gte: t ? Rc(t) : null,
1756 lte: c ? Rc(c) : null,
1757 }),
1758 encodeValue(e, n, c) {
1759 r(e)
1760 const o = { start: 0, end: 0, buffer: null }
1761 return (Uc.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Uc.encode(o, c), o.buffer)
1762 },
1763 trigger: null,
1764 reconstruct: Fc,
1765 reconstructKey: wc,
1766 indexes: [],
1767 decodedVersion: 0,
1768 },
1769 Ic = new e([e.STRING, e.UINT, e.UINT], { prefix: 47 }),
1770 Ec = l.filesByMajorTypeMap
1771function Bc(e) {
1772 const n = [],
1773 t = e.type
1774 if (void 0 === t) return n
1775 n.push(t)
1776 const c = e.id
1777 return (void 0 === c || n.push(c), n)
1778}
1779const Tc = {
1780 name: "@keet/files-by-major-type",
1781 version: 1,
1782 id: 47,
1783 encodeKey: (e) => Ic.encode(Bc(e)),
1784 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1785 Ic.encodeRange({
1786 gt: e ? Bc(e) : null,
1787 lt: n ? Bc(n) : null,
1788 gte: t ? Bc(t) : null,
1789 lte: c ? Bc(c) : null,
1790 }),
1791 encodeValue: (e) => Tc.collection.encodeKey(e),
1792 encodeIndexKeys(e, n) {
1793 const t = Ec(e, n),
1794 c = new Array(t.length)
1795 for (let n = 0; n < t.length; n++) {
1796 const o = t[n]
1797 c[n] = Ic.encode([o.type, o.id, e.id])
1798 }
1799 return c
1800 },
1801 reconstruct: (e, n) => n,
1802 offset: Wn.indexes.length,
1803 collection: Wn,
1804}
1805Wn.indexes.push(Tc)
1806const Nc = new e([e.UINT, e.UINT], { prefix: 48 }),
1807 qc = l.activeFilesMap
1808function Lc(e) {
1809 const n = e.id
1810 return void 0 === n ? [] : [n]
1811}
1812const Mc = {
1813 name: "@keet/active-files",
1814 version: 1,
1815 id: 48,
1816 encodeKey: (e) => Nc.encode(Lc(e)),
1817 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1818 Nc.encodeRange({
1819 gt: e ? Lc(e) : null,
1820 lt: n ? Lc(n) : null,
1821 gte: t ? Lc(t) : null,
1822 lte: c ? Lc(c) : null,
1823 }),
1824 encodeValue: (e) => Mc.collection.encodeKey(e),
1825 encodeIndexKeys(e, n) {
1826 const t = qc(e, n),
1827 c = new Array(t.length)
1828 for (let n = 0; n < t.length; n++) {
1829 const o = t[n]
1830 c[n] = Nc.encode([o.id, e.id])
1831 }
1832 return c
1833 },
1834 reconstruct: (e, n) => n,
1835 offset: Wn.indexes.length,
1836 collection: Wn,
1837}
1838Wn.indexes.push(Mc)
1839const Ac = new e([e.BUFFER, e.BUFFER], { prefix: 49 }),
1840 jc = s.roomsByContactMap
1841function Cc(e) {
1842 const n = e.contact
1843 return void 0 === n ? [] : [n]
1844}
1845const Gc = {
1846 name: "@keet-private-id/rooms-by-contact",
1847 version: 0,
1848 id: 49,
1849 encodeKey: (e) => Ac.encode(Cc(e)),
1850 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1851 Ac.encodeRange({
1852 gt: e ? Cc(e) : null,
1853 lt: n ? Cc(n) : null,
1854 gte: t ? Cc(t) : null,
1855 lte: c ? Cc(c) : null,
1856 }),
1857 encodeValue: (e) => Gc.collection.encodeKey(e),
1858 encodeIndexKeys(e, n) {
1859 const t = jc(e, n),
1860 c = new Array(t.length)
1861 for (let n = 0; n < t.length; n++) {
1862 const o = t[n]
1863 c[n] = Ac.encode([o.contact, e.roomKey])
1864 }
1865 return c
1866 },
1867 reconstruct: (e, n) => n,
1868 offset: At.indexes.length,
1869 collection: At,
1870}
1871At.indexes.push(Gc)
1872const Sc = new e([e.BUFFER], { prefix: 50 })
1873function Dc(e) {
1874 const n = e.deviceKey
1875 return void 0 === n ? [] : [n]
1876}
1877const Pc = o("@keet/device-identity/hyperdb#50")
1878function zc(e, n, t) {
1879 const c = Sc.decode(n)
1880 r(e)
1881 const o = { start: 0, end: t.byteLength, buffer: t },
1882 d = Pc.decode(o)
1883 return ((d.deviceKey = c[0]), d)
1884}
1885function Hc(e) {
1886 return { deviceKey: Sc.decode(e)[0] }
1887}
1888const Jc = {
1889 name: "@keet-private-id/device-identities",
1890 id: 50,
1891 version: 0,
1892 encodeKey(e) {
1893 const n = [e.deviceKey]
1894 return Sc.encode(n)
1895 },
1896 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1897 Sc.encodeRange({
1898 gt: e ? Dc(e) : null,
1899 lt: n ? Dc(n) : null,
1900 gte: t ? Dc(t) : null,
1901 lte: c ? Dc(c) : null,
1902 }),
1903 encodeValue(e, n, c) {
1904 r(e)
1905 const o = { start: 0, end: 0, buffer: null }
1906 return (Pc.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Pc.encode(o, c), o.buffer)
1907 },
1908 trigger: null,
1909 reconstruct: zc,
1910 reconstructKey: Hc,
1911 indexes: [],
1912 decodedVersion: 0,
1913 },
1914 Oc = new e([e.BUFFER, e.BUFFER], { prefix: 51 })
1915function Qc(e) {
1916 const n = [],
1917 t = e.memberKey
1918 if (void 0 === t) return n
1919 n.push(t)
1920 const c = e.keys?.key
1921 return (void 0 === c || n.push(c), n)
1922}
1923const Wc = o("@keet-private-id/contact-request-record/hyperdb#51"),
1924 Xc = s.contactRequestsTrigger
1925function Yc(e, n, t) {
1926 const c = Oc.decode(n)
1927 r(e)
1928 const o = { start: 0, end: t.byteLength, buffer: t },
1929 d = Wc.decode(o)
1930 return ((d.memberKey = c[0]), (d.keys.key = c[1]), d)
1931}
1932function Zc(e) {
1933 const n = Oc.decode(e)
1934 return { memberKey: n[0], keys: { key: n[1] } }
1935}
1936const $c = {
1937 name: "@keet-private-id/contact-requests-v2",
1938 id: 51,
1939 version: 0,
1940 encodeKey(e) {
1941 const n = [e.memberKey, e.keys.key]
1942 return Oc.encode(n)
1943 },
1944 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1945 Oc.encodeRange({
1946 gt: e ? Qc(e) : null,
1947 lt: n ? Qc(n) : null,
1948 gte: t ? Qc(t) : null,
1949 lte: c ? Qc(c) : null,
1950 }),
1951 encodeValue(e, n, c) {
1952 r(e)
1953 const o = { start: 0, end: 0, buffer: null }
1954 return (Wc.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Wc.encode(o, c), o.buffer)
1955 },
1956 trigger: Xc,
1957 reconstruct: Yc,
1958 reconstructKey: Zc,
1959 indexes: [],
1960 decodedVersion: 0,
1961 },
1962 _c = new e([e.BUFFER, e.BUFFER, e.BUFFER], { prefix: 52 })
1963function eo(e) {
1964 const n = [],
1965 t = e.memberKey
1966 if (void 0 === t) return n
1967 n.push(t)
1968 const c = e.memberKey
1969 if (void 0 === c) return n
1970 n.push(c)
1971 const o = e.keys?.key
1972 return (void 0 === o || n.push(o), n)
1973}
1974const no = {
1975 name: "@keet-private-id/contact-requests-by-member",
1976 version: 0,
1977 id: 52,
1978 encodeKey: (e) => _c.encode(eo(e)),
1979 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
1980 _c.encodeRange({
1981 gt: e ? eo(e) : null,
1982 lt: n ? eo(n) : null,
1983 gte: t ? eo(t) : null,
1984 lte: c ? eo(c) : null,
1985 }),
1986 encodeValue: (e) => no.collection.encodeKey(e),
1987 encodeIndexKeys: (e, n) => [_c.encode([e.memberKey, e.memberKey, e.keys.key])],
1988 reconstruct: (e, n) => n,
1989 offset: $c.indexes.length,
1990 collection: $c,
1991}
1992$c.indexes.push(no)
1993const to = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 53 })
1994function co(e) {
1995 const n = [],
1996 t = e.clock
1997 if (void 0 === t) return n
1998 n.push(t)
1999 const c = e.memberKey
2000 if (void 0 === c) return n
2001 n.push(c)
2002 const o = e.keys?.key
2003 return (void 0 === o || n.push(o), n)
2004}
2005const oo = {
2006 name: "@keet-private-id/contact-requests-by-clock-v2",
2007 version: 0,
2008 id: 53,
2009 encodeKey: (e) => to.encode(co(e)),
2010 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2011 to.encodeRange({
2012 gt: e ? co(e) : null,
2013 lt: n ? co(n) : null,
2014 gte: t ? co(t) : null,
2015 lte: c ? co(c) : null,
2016 }),
2017 encodeValue: (e) => oo.collection.encodeKey(e),
2018 encodeIndexKeys: (e, n) => [to.encode([e.clock, e.memberKey, e.keys.key])],
2019 reconstruct: (e, n) => n,
2020 offset: $c.indexes.length,
2021 collection: $c,
2022}
2023$c.indexes.push(oo)
2024const ro = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 54 }),
2025 lo = s.pendingContactRequestsMap
2026function so(e) {
2027 const n = e.clock
2028 return void 0 === n ? [] : [n]
2029}
2030const uo = {
2031 name: "@keet-private-id/pending-contact-requests-v2",
2032 version: 0,
2033 id: 54,
2034 encodeKey: (e) => ro.encode(so(e)),
2035 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2036 ro.encodeRange({
2037 gt: e ? so(e) : null,
2038 lt: n ? so(n) : null,
2039 gte: t ? so(t) : null,
2040 lte: c ? so(c) : null,
2041 }),
2042 encodeValue: (e) => uo.collection.encodeKey(e),
2043 encodeIndexKeys(e, n) {
2044 const t = lo(e, n),
2045 c = new Array(t.length)
2046 for (let n = 0; n < t.length; n++) {
2047 const o = t[n]
2048 c[n] = ro.encode([o.clock, e.memberKey, e.keys.key])
2049 }
2050 return c
2051 },
2052 reconstruct: (e, n) => n,
2053 offset: $c.indexes.length,
2054 collection: $c,
2055}
2056$c.indexes.push(uo)
2057const io = new e([e.BUFFER, e.BUFFER, e.BUFFER], { prefix: 55 }),
2058 ao = s.pendingContactRequestsByMemberMap
2059function fo(e) {
2060 const n = e.memberKey
2061 return void 0 === n ? [] : [n]
2062}
2063const go = {
2064 name: "@keet-private-id/pending-contact-requests-by-member",
2065 version: 0,
2066 id: 55,
2067 encodeKey: (e) => io.encode(fo(e)),
2068 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2069 io.encodeRange({
2070 gt: e ? fo(e) : null,
2071 lt: n ? fo(n) : null,
2072 gte: t ? fo(t) : null,
2073 lte: c ? fo(c) : null,
2074 }),
2075 encodeValue: (e) => go.collection.encodeKey(e),
2076 encodeIndexKeys(e, n) {
2077 const t = ao(e, n),
2078 c = new Array(t.length)
2079 for (let n = 0; n < t.length; n++) {
2080 const o = t[n]
2081 c[n] = io.encode([o.memberKey, e.memberKey, e.keys.key])
2082 }
2083 return c
2084 },
2085 reconstruct: (e, n) => n,
2086 offset: $c.indexes.length,
2087 collection: $c,
2088}
2089$c.indexes.push(go)
2090const yo = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 56 }),
2091 bo = s.acceptedContactRequestsMap
2092function po(e) {
2093 const n = e.clock
2094 return void 0 === n ? [] : [n]
2095}
2096const Ko = {
2097 name: "@keet-private-id/accepted-contact-requests-v2",
2098 version: 0,
2099 id: 56,
2100 encodeKey: (e) => yo.encode(po(e)),
2101 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2102 yo.encodeRange({
2103 gt: e ? po(e) : null,
2104 lt: n ? po(n) : null,
2105 gte: t ? po(t) : null,
2106 lte: c ? po(c) : null,
2107 }),
2108 encodeValue: (e) => Ko.collection.encodeKey(e),
2109 encodeIndexKeys(e, n) {
2110 const t = bo(e, n),
2111 c = new Array(t.length)
2112 for (let n = 0; n < t.length; n++) {
2113 const o = t[n]
2114 c[n] = yo.encode([o.clock, e.memberKey, e.keys.key])
2115 }
2116 return c
2117 },
2118 reconstruct: (e, n) => n,
2119 offset: $c.indexes.length,
2120 collection: $c,
2121}
2122$c.indexes.push(Ko)
2123const vo = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 57 }),
2124 mo = s.rejectedContactRequestsMap
2125function ho(e) {
2126 const n = e.clock
2127 return void 0 === n ? [] : [n]
2128}
2129const ko = {
2130 name: "@keet-private-id/rejected-contact-requests-v2",
2131 version: 0,
2132 id: 57,
2133 encodeKey: (e) => vo.encode(ho(e)),
2134 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2135 vo.encodeRange({
2136 gt: e ? ho(e) : null,
2137 lt: n ? ho(n) : null,
2138 gte: t ? ho(t) : null,
2139 lte: c ? ho(c) : null,
2140 }),
2141 encodeValue: (e) => ko.collection.encodeKey(e),
2142 encodeIndexKeys(e, n) {
2143 const t = mo(e, n),
2144 c = new Array(t.length)
2145 for (let n = 0; n < t.length; n++) {
2146 const o = t[n]
2147 c[n] = vo.encode([o.clock, e.memberKey, e.keys.key])
2148 }
2149 return c
2150 },
2151 reconstruct: (e, n) => n,
2152 offset: $c.indexes.length,
2153 collection: $c,
2154}
2155$c.indexes.push(ko)
2156const xo = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 58 }),
2157 Ro = s.discardedContactRequestsMap
2158function Uo(e) {
2159 const n = e.clock
2160 return void 0 === n ? [] : [n]
2161}
2162const Fo = {
2163 name: "@keet-private-id/discarded-contact-requests-v2",
2164 version: 0,
2165 id: 58,
2166 encodeKey: (e) => xo.encode(Uo(e)),
2167 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2168 xo.encodeRange({
2169 gt: e ? Uo(e) : null,
2170 lt: n ? Uo(n) : null,
2171 gte: t ? Uo(t) : null,
2172 lte: c ? Uo(c) : null,
2173 }),
2174 encodeValue: (e) => Fo.collection.encodeKey(e),
2175 encodeIndexKeys(e, n) {
2176 const t = Ro(e, n),
2177 c = new Array(t.length)
2178 for (let n = 0; n < t.length; n++) {
2179 const o = t[n]
2180 c[n] = xo.encode([o.clock, e.memberKey, e.keys.key])
2181 }
2182 return c
2183 },
2184 reconstruct: (e, n) => n,
2185 offset: $c.indexes.length,
2186 collection: $c,
2187}
2188$c.indexes.push(Fo)
2189const wo = new e([e.BUFFER], { prefix: 59 })
2190function Vo(e) {
2191 const n = e.deviceKey
2192 return void 0 === n ? [] : [n]
2193}
2194const Io = o("@keet-private-id/unreads/hyperdb#59")
2195function Eo(e, n, t) {
2196 const c = wo.decode(n)
2197 r(e)
2198 const o = { start: 0, end: t.byteLength, buffer: t },
2199 d = Io.decode(o)
2200 return ((d.deviceKey = c[0]), d)
2201}
2202function Bo(e) {
2203 return { deviceKey: wo.decode(e)[0] }
2204}
2205const To = {
2206 name: "@keet-private-id/unreads",
2207 id: 59,
2208 version: 0,
2209 encodeKey(e) {
2210 const n = [e.deviceKey]
2211 return wo.encode(n)
2212 },
2213 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2214 wo.encodeRange({
2215 gt: e ? Vo(e) : null,
2216 lt: n ? Vo(n) : null,
2217 gte: t ? Vo(t) : null,
2218 lte: c ? Vo(c) : null,
2219 }),
2220 encodeValue(e, n, c) {
2221 r(e)
2222 const o = { start: 0, end: 0, buffer: null }
2223 return (Io.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Io.encode(o, c), o.buffer)
2224 },
2225 trigger: null,
2226 reconstruct: Eo,
2227 reconstructKey: Bo,
2228 indexes: [],
2229 decodedVersion: 0,
2230 },
2231 No = new e([e.UINT, e.UINT, e.BUFFER, e.UINT], { prefix: 60 })
2232function qo(e) {
2233 const n = [],
2234 t = e.id?.thread
2235 if (void 0 === t) return n
2236 n.push(t)
2237 const c = e.id?.index
2238 if (void 0 === c) return n
2239 n.push(c)
2240 const o = e.sender
2241 if (void 0 === o) return n
2242 n.push(o)
2243 const r = e.label
2244 return (void 0 === r || n.push(r), n)
2245}
2246const Lo = o("@keet/chat-label/hyperdb#60"),
2247 Mo = l.chatLabelTrigger
2248function Ao(e, n, t) {
2249 const c = No.decode(n)
2250 r(e)
2251 const o = { start: 0, end: t.byteLength, buffer: t },
2252 d = Lo.decode(o)
2253 return ((d.id.thread = c[0]), (d.id.index = c[1]), (d.sender = c[2]), (d.label = c[3]), d)
2254}
2255function jo(e) {
2256 const n = No.decode(e)
2257 return { id: { index: n[1] }, sender: n[2], label: n[3] }
2258}
2259const Co = {
2260 name: "@keet/chat-labels",
2261 id: 60,
2262 version: 0,
2263 encodeKey(e) {
2264 const n = [e.id.thread, e.id.index, e.sender, e.label]
2265 return No.encode(n)
2266 },
2267 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2268 No.encodeRange({
2269 gt: e ? qo(e) : null,
2270 lt: n ? qo(n) : null,
2271 gte: t ? qo(t) : null,
2272 lte: c ? qo(c) : null,
2273 }),
2274 encodeValue(e, n, c) {
2275 r(e)
2276 const o = { start: 0, end: 0, buffer: null }
2277 return (Lo.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Lo.encode(o, c), o.buffer)
2278 },
2279 trigger: Mo,
2280 reconstruct: Ao,
2281 reconstructKey: jo,
2282 indexes: [],
2283 decodedVersion: 0,
2284 },
2285 Go = new e([e.UINT, e.UINT], { prefix: 61 })
2286function So(e) {
2287 const n = [],
2288 t = e.id?.thread
2289 if (void 0 === t) return n
2290 n.push(t)
2291 const c = e.id?.index
2292 return (void 0 === c || n.push(c), n)
2293}
2294const Do = o("@keet/chat-label-digest/hyperdb#61")
2295function Po(e, n, t) {
2296 const c = Go.decode(n)
2297 r(e)
2298 const o = { start: 0, end: t.byteLength, buffer: t },
2299 d = Do.decode(o)
2300 return ((d.id.thread = c[0]), (d.id.index = c[1]), (Ho.decodedVersion = d.version), d)
2301}
2302function zo(e) {
2303 return { id: { index: Go.decode(e)[1] } }
2304}
2305const Ho = {
2306 name: "@keet/chat-label-digests",
2307 id: 61,
2308 version: 2,
2309 encodeKey(e) {
2310 const n = [e.id.thread, e.id.index]
2311 return Go.encode(n)
2312 },
2313 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2314 Go.encodeRange({
2315 gt: e ? So(e) : null,
2316 lt: n ? So(n) : null,
2317 gte: t ? So(t) : null,
2318 lte: c ? So(c) : null,
2319 }),
2320 encodeValue(e, n, c) {
2321 r(e)
2322 const o = { start: 0, end: 0, buffer: null }
2323 return (
2324 (c.version = n),
2325 Do.preencode(o, c),
2326 (o.buffer = t.allocUnsafe(o.end)),
2327 Do.encode(o, c),
2328 o.buffer
2329 )
2330 },
2331 trigger: null,
2332 reconstruct: Po,
2333 reconstructKey: zo,
2334 indexes: [],
2335 decodedVersion: 0,
2336 },
2337 Jo = new e([e.BUFFER], { prefix: 62 })
2338function Oo(e) {
2339 const n = e.memberKey
2340 return void 0 === n ? [] : [n]
2341}
2342const Qo = o("@keet/read-length/hyperdb#62")
2343function Wo(e, n, t) {
2344 const c = Jo.decode(n)
2345 r(e)
2346 const o = { start: 0, end: t.byteLength, buffer: t },
2347 d = Qo.decode(o)
2348 return ((d.memberKey = c[0]), d)
2349}
2350function Xo(e) {
2351 return { memberKey: Jo.decode(e)[0] }
2352}
2353const Yo = {
2354 name: "@keet/read-lengths",
2355 id: 62,
2356 version: 0,
2357 encodeKey(e) {
2358 const n = [e.memberKey]
2359 return Jo.encode(n)
2360 },
2361 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2362 Jo.encodeRange({
2363 gt: e ? Oo(e) : null,
2364 lt: n ? Oo(n) : null,
2365 gte: t ? Oo(t) : null,
2366 lte: c ? Oo(c) : null,
2367 }),
2368 encodeValue(e, n, c) {
2369 r(e)
2370 const o = { start: 0, end: 0, buffer: null }
2371 return (Qo.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), Qo.encode(o, c), o.buffer)
2372 },
2373 trigger: null,
2374 reconstruct: Wo,
2375 reconstructKey: Xo,
2376 indexes: [],
2377 decodedVersion: 0,
2378 },
2379 Zo = new e([e.BUFFER], { prefix: 63 })
2380function $o(e) {
2381 const n = e.key
2382 return void 0 === n ? [] : [n]
2383}
2384const _o = o("@keet/tmp-removed-member/hyperdb#63")
2385function er(e, n, t) {
2386 const c = Zo.decode(n)
2387 r(e)
2388 const o = { start: 0, end: t.byteLength, buffer: t },
2389 d = _o.decode(o)
2390 return ((d.key = c[0]), d)
2391}
2392function nr(e) {
2393 return { key: Zo.decode(e)[0] }
2394}
2395const tr = {
2396 name: "@keet/tmp-removed-members",
2397 id: 63,
2398 version: 0,
2399 encodeKey(e) {
2400 const n = [e.key]
2401 return Zo.encode(n)
2402 },
2403 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2404 Zo.encodeRange({
2405 gt: e ? $o(e) : null,
2406 lt: n ? $o(n) : null,
2407 gte: t ? $o(t) : null,
2408 lte: c ? $o(c) : null,
2409 }),
2410 encodeValue(e, n, c) {
2411 r(e)
2412 const o = { start: 0, end: 0, buffer: null }
2413 return (_o.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), _o.encode(o, c), o.buffer)
2414 },
2415 trigger: null,
2416 reconstruct: er,
2417 reconstructKey: nr,
2418 indexes: [],
2419 decodedVersion: 0,
2420 },
2421 cr = new e([], { prefix: 64 })
2422function or(e) {
2423 return []
2424}
2425const rr = o("@keet-private-id/settings")
2426function dr(e, n, t) {
2427 r(e)
2428 const c = { start: 0, end: t.byteLength, buffer: t }
2429 return rr.decode(c)
2430}
2431function lr(e) {
2432 return {}
2433}
2434const sr = {
2435 name: "@keet-private-id/settings",
2436 id: 64,
2437 version: 0,
2438 encodeKey: (e) => cr.encode([]),
2439 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2440 cr.encodeRange({
2441 gt: e ? or(e) : null,
2442 lt: n ? or(n) : null,
2443 gte: t ? or(t) : null,
2444 lte: c ? or(c) : null,
2445 }),
2446 encodeValue(e, n, c) {
2447 r(e)
2448 const o = { start: 0, end: 0, buffer: null }
2449 return (rr.preencode(o, c), (o.buffer = t.allocUnsafe(o.end)), rr.encode(o, c), o.buffer)
2450 },
2451 trigger: null,
2452 reconstruct: dr,
2453 reconstructKey: lr,
2454 indexes: [],
2455 decodedVersion: 0,
2456 },
2457 ur = new e([e.UINT, e.UINT, e.UINT, e.UINT], { prefix: 65 }),
2458 ir = l.chatLabelDigestFlagMap
2459function ar(e) {
2460 const n = [],
2461 t = e.label
2462 if (void 0 === t) return n
2463 n.push(t)
2464 const c = e.clock
2465 return (void 0 === c || n.push(c), n)
2466}
2467const fr = {
2468 name: "@keet/chat-label-digests-by-clock",
2469 version: 2,
2470 id: 65,
2471 encodeKey: (e) => ur.encode(ar(e)),
2472 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2473 ur.encodeRange({
2474 gt: e ? ar(e) : null,
2475 lt: n ? ar(n) : null,
2476 gte: t ? ar(t) : null,
2477 lte: c ? ar(c) : null,
2478 }),
2479 encodeValue: (e) => fr.collection.encodeKey(e),
2480 encodeIndexKeys(e, n) {
2481 const t = ir(e, n),
2482 c = new Array(t.length)
2483 for (let n = 0; n < t.length; n++) {
2484 const o = t[n]
2485 c[n] = ur.encode([o.label, o.clock, e.id.thread, e.id.index])
2486 }
2487 return c
2488 },
2489 reconstruct: (e, n) => n,
2490 offset: Ho.indexes.length,
2491 collection: Ho,
2492}
2493Ho.indexes.push(fr)
2494const gr = new e([e.BUFFER, e.BUFFER, e.UINT], { prefix: 66 })
2495function yr(e) {
2496 const n = [],
2497 t = e.key
2498 if (void 0 === t) return n
2499 n.push(t)
2500 const c = e.sender
2501 if (void 0 === c) return n
2502 n.push(c)
2503 const o = e.label
2504 return (void 0 === o || n.push(o), n)
2505}
2506const br = o("@keet/member-label/hyperdb#66")
2507function pr(e, t, c) {
2508 const o = gr.decode(t)
2509 r(e)
2510 const d = { start: 0, end: c.byteLength, buffer: c },
2511 l = n.uint.decode(d)
2512 if (0 !== l) throw new Error("Unknown collection type: " + l)
2513 vr.decodedVersion = n.uint.decode(d)
2514 const s = br.decode(d)
2515 return ((s.key = o[0]), (s.sender = o[1]), (s.label = o[2]), s)
2516}
2517function Kr(e) {
2518 const n = gr.decode(e)
2519 return { key: n[0], sender: n[1], label: n[2] }
2520}
2521const vr = {
2522 name: "@keet/member-labels",
2523 id: 66,
2524 version: 3,
2525 encodeKey(e) {
2526 const n = [e.key, e.sender, e.label]
2527 return gr.encode(n)
2528 },
2529 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2530 gr.encodeRange({
2531 gt: e ? yr(e) : null,
2532 lt: n ? yr(n) : null,
2533 gte: t ? yr(t) : null,
2534 lte: c ? yr(c) : null,
2535 }),
2536 encodeValue(e, n, c) {
2537 r(e)
2538 const o = { start: 0, end: 2, buffer: null }
2539 return (
2540 br.preencode(o, c),
2541 (o.buffer = t.allocUnsafe(o.end)),
2542 (o.buffer[o.start++] = 0),
2543 (o.buffer[o.start++] = n),
2544 br.encode(o, c),
2545 o.buffer
2546 )
2547 },
2548 trigger: null,
2549 reconstruct: pr,
2550 reconstructKey: Kr,
2551 indexes: [],
2552 decodedVersion: 0,
2553 },
2554 mr = new e([e.BUFFER], { prefix: 67 })
2555function hr(e) {
2556 const n = e.key
2557 return void 0 === n ? [] : [n]
2558}
2559const kr = o("@keet/member-label-digest/hyperdb#67")
2560function xr(e, t, c) {
2561 const o = mr.decode(t)
2562 r(e)
2563 const d = { start: 0, end: c.byteLength, buffer: c },
2564 l = n.uint.decode(d)
2565 if (0 !== l) throw new Error("Unknown collection type: " + l)
2566 Ur.decodedVersion = n.uint.decode(d)
2567 const s = kr.decode(d)
2568 return ((s.key = o[0]), s)
2569}
2570function Rr(e) {
2571 return { key: mr.decode(e)[0] }
2572}
2573const Ur = {
2574 name: "@keet/member-label-digests",
2575 id: 67,
2576 version: 3,
2577 encodeKey(e) {
2578 const n = [e.key]
2579 return mr.encode(n)
2580 },
2581 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2582 mr.encodeRange({
2583 gt: e ? hr(e) : null,
2584 lt: n ? hr(n) : null,
2585 gte: t ? hr(t) : null,
2586 lte: c ? hr(c) : null,
2587 }),
2588 encodeValue(e, n, c) {
2589 r(e)
2590 const o = { start: 0, end: 2, buffer: null }
2591 return (
2592 kr.preencode(o, c),
2593 (o.buffer = t.allocUnsafe(o.end)),
2594 (o.buffer[o.start++] = 0),
2595 (o.buffer[o.start++] = n),
2596 kr.encode(o, c),
2597 o.buffer
2598 )
2599 },
2600 trigger: null,
2601 reconstruct: xr,
2602 reconstructKey: Rr,
2603 indexes: [],
2604 decodedVersion: 0,
2605 },
2606 Fr = new e([e.UINT, e.UINT, e.BUFFER], { prefix: 68 }),
2607 wr = l.memberLabelDigestFlagMap
2608function Vr(e) {
2609 const n = [],
2610 t = e.label
2611 if (void 0 === t) return n
2612 n.push(t)
2613 const c = e.clock
2614 return (void 0 === c || n.push(c), n)
2615}
2616const Ir = {
2617 name: "@keet/member-label-digests-by-clock",
2618 version: 3,
2619 id: 68,
2620 encodeKey: (e) => Fr.encode(Vr(e)),
2621 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2622 Fr.encodeRange({
2623 gt: e ? Vr(e) : null,
2624 lt: n ? Vr(n) : null,
2625 gte: t ? Vr(t) : null,
2626 lte: c ? Vr(c) : null,
2627 }),
2628 encodeValue: (e) => Ir.collection.encodeKey(e),
2629 encodeIndexKeys(e, n) {
2630 const t = wr(e, n),
2631 c = new Array(t.length)
2632 for (let n = 0; n < t.length; n++) {
2633 const o = t[n]
2634 c[n] = Fr.encode([o.label, o.clock, e.key])
2635 }
2636 return c
2637 },
2638 reconstruct: (e, n) => n,
2639 offset: Ur.indexes.length,
2640 collection: Ur,
2641}
2642Ur.indexes.push(Ir)
2643const Er = new e([e.BUFFER], { prefix: 69 })
2644function Br(e) {
2645 const n = e.callKey
2646 return void 0 === n ? [] : [n]
2647}
2648const Tr = o("@keet/call-record/hyperdb#69")
2649function Nr(e, t, c) {
2650 const o = Er.decode(t)
2651 r(e)
2652 const d = { start: 0, end: c.byteLength, buffer: c },
2653 l = n.uint.decode(d)
2654 if (0 !== l) throw new Error("Unknown collection type: " + l)
2655 Lr.decodedVersion = n.uint.decode(d)
2656 const s = Tr.decode(d)
2657 return ((s.callKey = o[0]), s)
2658}
2659function qr(e) {
2660 return { callKey: Er.decode(e)[0] }
2661}
2662const Lr = {
2663 name: "@keet/calls",
2664 id: 69,
2665 version: 4,
2666 encodeKey(e) {
2667 const n = [e.callKey]
2668 return Er.encode(n)
2669 },
2670 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2671 Er.encodeRange({
2672 gt: e ? Br(e) : null,
2673 lt: n ? Br(n) : null,
2674 gte: t ? Br(t) : null,
2675 lte: c ? Br(c) : null,
2676 }),
2677 encodeValue(e, n, c) {
2678 r(e)
2679 const o = { start: 0, end: 2, buffer: null }
2680 return (
2681 Tr.preencode(o, c),
2682 (o.buffer = t.allocUnsafe(o.end)),
2683 (o.buffer[o.start++] = 0),
2684 (o.buffer[o.start++] = n),
2685 Tr.encode(o, c),
2686 o.buffer
2687 )
2688 },
2689 trigger: null,
2690 reconstruct: Nr,
2691 reconstructKey: qr,
2692 indexes: [],
2693 decodedVersion: 0,
2694 },
2695 Mr = new e([e.UINT, e.BUFFER], { prefix: 70 })
2696function Ar(e) {
2697 const n = [],
2698 t = e.createdAt
2699 if (void 0 === t) return n
2700 n.push(t)
2701 const c = e.callKey
2702 return (void 0 === c || n.push(c), n)
2703}
2704const jr = {
2705 name: "@keet/calls-by-timestamp",
2706 version: 4,
2707 id: 70,
2708 encodeKey: (e) => Mr.encode(Ar(e)),
2709 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2710 Mr.encodeRange({
2711 gt: e ? Ar(e) : null,
2712 lt: n ? Ar(n) : null,
2713 gte: t ? Ar(t) : null,
2714 lte: c ? Ar(c) : null,
2715 }),
2716 encodeValue: (e) => jr.collection.encodeKey(e),
2717 encodeIndexKeys: (e, n) => [Mr.encode([e.createdAt, e.callKey])],
2718 reconstruct: (e, n) => n,
2719 offset: Lr.indexes.length,
2720 collection: Lr,
2721}
2722Lr.indexes.push(jr)
2723const Cr = new e([e.UINT, e.BUFFER], { prefix: 71 }),
2724 Gr = l.activeCallsMap
2725function Sr(e) {
2726 const n = e.createdAt
2727 return void 0 === n ? [] : [n]
2728}
2729const Dr = {
2730 name: "@keet/active-calls-by-timestamp",
2731 version: 4,
2732 id: 71,
2733 encodeKey: (e) => Cr.encode(Sr(e)),
2734 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2735 Cr.encodeRange({
2736 gt: e ? Sr(e) : null,
2737 lt: n ? Sr(n) : null,
2738 gte: t ? Sr(t) : null,
2739 lte: c ? Sr(c) : null,
2740 }),
2741 encodeValue: (e) => Dr.collection.encodeKey(e),
2742 encodeIndexKeys(e, n) {
2743 const t = Gr(e, n),
2744 c = new Array(t.length)
2745 for (let n = 0; n < t.length; n++) {
2746 const o = t[n]
2747 c[n] = Cr.encode([o.createdAt, e.callKey])
2748 }
2749 return c
2750 },
2751 reconstruct: (e, n) => n,
2752 offset: Lr.indexes.length,
2753 collection: Lr,
2754}
2755Lr.indexes.push(Dr)
2756const Pr = new e([e.BUFFER, e.BUFFER], { prefix: 72 })
2757function zr(e) {
2758 const n = [],
2759 t = e.callKey
2760 if (void 0 === t) return n
2761 n.push(t)
2762 const c = e.memberKey
2763 return (void 0 === c || n.push(c), n)
2764}
2765const Hr = o("@keet/call-member-record/hyperdb#72")
2766function Jr(e, t, c) {
2767 const o = Pr.decode(t)
2768 r(e)
2769 const d = { start: 0, end: c.byteLength, buffer: c },
2770 l = n.uint.decode(d)
2771 if (0 !== l) throw new Error("Unknown collection type: " + l)
2772 Qr.decodedVersion = n.uint.decode(d)
2773 const s = Hr.decode(d)
2774 return ((s.callKey = o[0]), (s.memberKey = o[1]), s)
2775}
2776function Or(e) {
2777 const n = Pr.decode(e)
2778 return { callKey: n[0], memberKey: n[1] }
2779}
2780const Qr = {
2781 name: "@keet/call-members",
2782 id: 72,
2783 version: 4,
2784 encodeKey(e) {
2785 const n = [e.callKey, e.memberKey]
2786 return Pr.encode(n)
2787 },
2788 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2789 Pr.encodeRange({
2790 gt: e ? zr(e) : null,
2791 lt: n ? zr(n) : null,
2792 gte: t ? zr(t) : null,
2793 lte: c ? zr(c) : null,
2794 }),
2795 encodeValue(e, n, c) {
2796 r(e)
2797 const o = { start: 0, end: 2, buffer: null }
2798 return (
2799 Hr.preencode(o, c),
2800 (o.buffer = t.allocUnsafe(o.end)),
2801 (o.buffer[o.start++] = 0),
2802 (o.buffer[o.start++] = n),
2803 Hr.encode(o, c),
2804 o.buffer
2805 )
2806 },
2807 trigger: null,
2808 reconstruct: Jr,
2809 reconstructKey: Or,
2810 indexes: [],
2811 decodedVersion: 0,
2812 },
2813 Wr = new e([e.BUFFER, e.BUFFER], { prefix: 73 })
2814function Xr(e) {
2815 const n = [],
2816 t = e.callKey
2817 if (void 0 === t) return n
2818 n.push(t)
2819 const c = e.deviceKey
2820 return (void 0 === c || n.push(c), n)
2821}
2822const Yr = o("@keet/call-device-record/hyperdb#73")
2823function Zr(e, t, c) {
2824 const o = Wr.decode(t)
2825 r(e)
2826 const d = { start: 0, end: c.byteLength, buffer: c },
2827 l = n.uint.decode(d)
2828 if (0 !== l) throw new Error("Unknown collection type: " + l)
2829 _r.decodedVersion = n.uint.decode(d)
2830 const s = Yr.decode(d)
2831 return ((s.callKey = o[0]), (s.deviceKey = o[1]), s)
2832}
2833function $r(e) {
2834 const n = Wr.decode(e)
2835 return { callKey: n[0], deviceKey: n[1] }
2836}
2837const _r = {
2838 name: "@keet/call-devices",
2839 id: 73,
2840 version: 4,
2841 encodeKey(e) {
2842 const n = [e.callKey, e.deviceKey]
2843 return Wr.encode(n)
2844 },
2845 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2846 Wr.encodeRange({
2847 gt: e ? Xr(e) : null,
2848 lt: n ? Xr(n) : null,
2849 gte: t ? Xr(t) : null,
2850 lte: c ? Xr(c) : null,
2851 }),
2852 encodeValue(e, n, c) {
2853 r(e)
2854 const o = { start: 0, end: 2, buffer: null }
2855 return (
2856 Yr.preencode(o, c),
2857 (o.buffer = t.allocUnsafe(o.end)),
2858 (o.buffer[o.start++] = 0),
2859 (o.buffer[o.start++] = n),
2860 Yr.encode(o, c),
2861 o.buffer
2862 )
2863 },
2864 trigger: null,
2865 reconstruct: Zr,
2866 reconstructKey: $r,
2867 indexes: [],
2868 decodedVersion: 0,
2869 },
2870 ed = new e([e.BUFFER, e.BUFFER, e.BUFFER, e.BUFFER], { prefix: 74 })
2871function nd(e) {
2872 const n = [],
2873 t = e.callKey
2874 if (void 0 === t) return n
2875 n.push(t)
2876 const c = e.memberKey
2877 if (void 0 === c) return n
2878 n.push(c)
2879 const o = e.callKey
2880 if (void 0 === o) return n
2881 n.push(o)
2882 const r = e.deviceKey
2883 return (void 0 === r || n.push(r), n)
2884}
2885const td = {
2886 name: "@keet/call-devices-by-member-key",
2887 version: 4,
2888 id: 74,
2889 encodeKey: (e) => ed.encode(nd(e)),
2890 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2891 ed.encodeRange({
2892 gt: e ? nd(e) : null,
2893 lt: n ? nd(n) : null,
2894 gte: t ? nd(t) : null,
2895 lte: c ? nd(c) : null,
2896 }),
2897 encodeValue: (e) => td.collection.encodeKey(e),
2898 encodeIndexKeys: (e, n) => [ed.encode([e.callKey, e.memberKey, e.callKey, e.deviceKey])],
2899 reconstruct: (e, n) => n,
2900 offset: _r.indexes.length,
2901 collection: _r,
2902}
2903_r.indexes.push(td)
2904const cd = new e([e.BUFFER, e.BUFFER], { prefix: 75 })
2905function od(e) {
2906 const n = [],
2907 t = e.callKey
2908 if (void 0 === t) return n
2909 n.push(t)
2910 const c = e.streamKey
2911 return (void 0 === c || n.push(c), n)
2912}
2913const rd = o("@keet/call-stream-record/hyperdb#75")
2914function dd(e, t, c) {
2915 const o = cd.decode(t)
2916 r(e)
2917 const d = { start: 0, end: c.byteLength, buffer: c },
2918 l = n.uint.decode(d)
2919 if (0 !== l) throw new Error("Unknown collection type: " + l)
2920 sd.decodedVersion = n.uint.decode(d)
2921 const s = rd.decode(d)
2922 return ((s.callKey = o[0]), (s.streamKey = o[1]), s)
2923}
2924function ld(e) {
2925 const n = cd.decode(e)
2926 return { callKey: n[0], streamKey: n[1] }
2927}
2928const sd = {
2929 name: "@keet/call-streams",
2930 id: 75,
2931 version: 4,
2932 encodeKey(e) {
2933 const n = [e.callKey, e.streamKey]
2934 return cd.encode(n)
2935 },
2936 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2937 cd.encodeRange({
2938 gt: e ? od(e) : null,
2939 lt: n ? od(n) : null,
2940 gte: t ? od(t) : null,
2941 lte: c ? od(c) : null,
2942 }),
2943 encodeValue(e, n, c) {
2944 r(e)
2945 const o = { start: 0, end: 2, buffer: null }
2946 return (
2947 rd.preencode(o, c),
2948 (o.buffer = t.allocUnsafe(o.end)),
2949 (o.buffer[o.start++] = 0),
2950 (o.buffer[o.start++] = n),
2951 rd.encode(o, c),
2952 o.buffer
2953 )
2954 },
2955 trigger: null,
2956 reconstruct: dd,
2957 reconstructKey: ld,
2958 indexes: [],
2959 decodedVersion: 0,
2960 },
2961 ud = new e([e.BUFFER, e.BUFFER, e.BUFFER, e.BUFFER], { prefix: 76 })
2962function id(e) {
2963 const n = [],
2964 t = e.callKey
2965 if (void 0 === t) return n
2966 n.push(t)
2967 const c = e.deviceKey
2968 if (void 0 === c) return n
2969 n.push(c)
2970 const o = e.callKey
2971 if (void 0 === o) return n
2972 n.push(o)
2973 const r = e.streamKey
2974 return (void 0 === r || n.push(r), n)
2975}
2976const ad = {
2977 name: "@keet/call-streams-by-device-key",
2978 version: 4,
2979 id: 76,
2980 encodeKey: (e) => ud.encode(id(e)),
2981 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
2982 ud.encodeRange({
2983 gt: e ? id(e) : null,
2984 lt: n ? id(n) : null,
2985 gte: t ? id(t) : null,
2986 lte: c ? id(c) : null,
2987 }),
2988 encodeValue: (e) => ad.collection.encodeKey(e),
2989 encodeIndexKeys: (e, n) => [ud.encode([e.callKey, e.deviceKey, e.callKey, e.streamKey])],
2990 reconstruct: (e, n) => n,
2991 offset: sd.indexes.length,
2992 collection: sd,
2993}
2994sd.indexes.push(ad)
2995const fd = new e([e.BUFFER], { prefix: 77 })
2996function gd(e) {
2997 const n = e.deviceKey
2998 return void 0 === n ? [] : [n]
2999}
3000const yd = o("@keet-private-id/unreads/hyperdb#77")
3001function bd(e, t, c) {
3002 const o = fd.decode(t)
3003 r(e)
3004 const d = { start: 0, end: c.byteLength, buffer: c },
3005 l = n.uint.decode(d)
3006 if (0 !== l) throw new Error("Unknown collection type: " + l)
3007 Kd.decodedVersion = n.uint.decode(d)
3008 const s = yd.decode(d)
3009 return ((s.deviceKey = o[0]), s)
3010}
3011function pd(e) {
3012 return { deviceKey: fd.decode(e)[0] }
3013}
3014const Kd = {
3015 name: "@keet-private-id/unreads-v2",
3016 id: 77,
3017 version: 5,
3018 encodeKey(e) {
3019 const n = [e.deviceKey]
3020 return fd.encode(n)
3021 },
3022 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: c } = {}) =>
3023 fd.encodeRange({
3024 gt: e ? gd(e) : null,
3025 lt: n ? gd(n) : null,
3026 gte: t ? gd(t) : null,
3027 lte: c ? gd(c) : null,
3028 }),
3029 encodeValue(e, n, c) {
3030 r(e)
3031 const o = { start: 0, end: 2, buffer: null }
3032 return (
3033 yd.preencode(o, c),
3034 (o.buffer = t.allocUnsafe(o.end)),
3035 (o.buffer[o.start++] = 0),
3036 (o.buffer[o.start++] = n),
3037 yd.encode(o, c),
3038 o.buffer
3039 )
3040 },
3041 trigger: null,
3042 reconstruct: bd,
3043 reconstructKey: pd,
3044 indexes: [],
3045 decodedVersion: 0,
3046 },
3047 vd = [
3048 y,
3049 h,
3050 w,
3051 N,
3052 C,
3053 J,
3054 ae,
3055 ve,
3056 He,
3057 Ye,
3058 tn,
3059 yn,
3060 Tn,
3061 Cn,
3062 Wn,
3063 at,
3064 Kt,
3065 Rt,
3066 Et,
3067 At,
3068 Ot,
3069 tc,
3070 Vc,
3071 Jc,
3072 $c,
3073 To,
3074 Co,
3075 Ho,
3076 Yo,
3077 tr,
3078 sr,
3079 vr,
3080 Ur,
3081 Lr,
3082 Qr,
3083 _r,
3084 sd,
3085 Kd,
3086 ],
3087 md = [
3088 W,
3089 Z,
3090 ne,
3091 re,
3092 xe,
3093 we,
3094 Be,
3095 Le,
3096 Ce,
3097 dn,
3098 Kn,
3099 kn,
3100 Fn,
3101 Dn,
3102 Zn,
3103 Gt,
3104 Xt,
3105 rc,
3106 uc,
3107 gc,
3108 Kc,
3109 kc,
3110 Tc,
3111 Mc,
3112 Gc,
3113 no,
3114 oo,
3115 uo,
3116 go,
3117 Ko,
3118 ko,
3119 Fo,
3120 fr,
3121 Ir,
3122 jr,
3123 Dr,
3124 td,
3125 ad,
3126 ]
3127function hd(e) {
3128 switch (e) {
3129 case "@keet/system-digest":
3130 return y
3131 case "@keet/blind-peers":
3132 return h
3133 case "@keet/room-config":
3134 return w
3135 case "@keet/room-capabilities":
3136 return N
3137 case "@keet/join-requests":
3138 return C
3139 case "@keet/devices":
3140 return J
3141 case "@keet/member-proofs":
3142 return ae
3143 case "@keet/members":
3144 return ve
3145 case "@keet/member-activity":
3146 return He
3147 case "@keet/invitations":
3148 return Ye
3149 case "@keet/threads":
3150 return tn
3151 case "@keet/chat":
3152 return yn
3153 case "@keet/reaction-digests":
3154 return Tn
3155 case "@keet/reactions":
3156 return Cn
3157 case "@keet/files":
3158 return Wn
3159 case "@keet-private-id/identity":
3160 return at
3161 case "@keet-private-id/stats":
3162 return Kt
3163 case "@keet-private-id/counters":
3164 return Rt
3165 case "@keet-private-id/pending-invitations":
3166 return Et
3167 case "@keet-private-id/rooms":
3168 return At
3169 case "@keet-private-id/contacts":
3170 return Ot
3171 case "@keet-private-id/contact-requests":
3172 return tc
3173 case "@keet/test-collection-1":
3174 return Vc
3175 case "@keet-private-id/device-identities":
3176 return Jc
3177 case "@keet-private-id/contact-requests-v2":
3178 return $c
3179 case "@keet-private-id/unreads":
3180 return To
3181 case "@keet/chat-labels":
3182 return Co
3183 case "@keet/chat-label-digests":
3184 return Ho
3185 case "@keet/read-lengths":
3186 return Yo
3187 case "@keet/tmp-removed-members":
3188 return tr
3189 case "@keet-private-id/settings":
3190 return sr
3191 case "@keet/member-labels":
3192 return vr
3193 case "@keet/member-label-digests":
3194 return Ur
3195 case "@keet/calls":
3196 return Lr
3197 case "@keet/call-members":
3198 return Qr
3199 case "@keet/call-devices":
3200 return _r
3201 case "@keet/call-streams":
3202 return sd
3203 case "@keet-private-id/unreads-v2":
3204 return Kd
3205 default:
3206 return null
3207 }
3208}
3209function kd(e) {
3210 switch (e) {
3211 case "@keet/devices-by-member-key":
3212 return W
3213 case "@keet/devices-by-swarm-key":
3214 return Z
3215 case "@keet/active-devices-by-member-key":
3216 return ne
3217 case "@keet/active-devices":
3218 return re
3219 case "@keet/moderators":
3220 return xe
3221 case "@keet/admins":
3222 return we
3223 case "@keet/active-members":
3224 return Be
3225 case "@keet/muted-members":
3226 return Le
3227 case "@keet/members-by-member-name":
3228 return Ce
3229 case "@keet/threads-by-parent":
3230 return dn
3231 case "@keet/chat-by-message-id":
3232 return Kn
3233 case "@keet/chat-mentions-by-member-id":
3234 return kn
3235 case "@keet/pinned-chat-messages":
3236 return Fn
3237 case "@keet/reactions-by-clock":
3238 return Dn
3239 case "@keet/files-by-message-id":
3240 return Zn
3241 case "@keet/files-by-type":
3242 return nt
3243 case "@keet/deleted-files":
3244 return rt
3245 case "@keet-private-id/rooms-by-clock":
3246 return Gt
3247 case "@keet-private-id/contacts-by-clock":
3248 return Xt
3249 case "@keet-private-id/contact-requests-by-clock":
3250 return rc
3251 case "@keet-private-id/pending-contact-requests":
3252 return uc
3253 case "@keet-private-id/accepted-contact-requests":
3254 return gc
3255 case "@keet-private-id/rejected-contact-requests":
3256 return Kc
3257 case "@keet-private-id/discarded-contact-requests":
3258 return kc
3259 case "@keet/files-by-major-type":
3260 return Tc
3261 case "@keet/active-files":
3262 return Mc
3263 case "@keet-private-id/rooms-by-contact":
3264 return Gc
3265 case "@keet-private-id/contact-requests-by-member":
3266 return no
3267 case "@keet-private-id/contact-requests-by-clock-v2":
3268 return oo
3269 case "@keet-private-id/pending-contact-requests-v2":
3270 return uo
3271 case "@keet-private-id/pending-contact-requests-by-member":
3272 return go
3273 case "@keet-private-id/accepted-contact-requests-v2":
3274 return Ko
3275 case "@keet-private-id/rejected-contact-requests-v2":
3276 return ko
3277 case "@keet-private-id/discarded-contact-requests-v2":
3278 return Fo
3279 case "@keet/chat-label-digests-by-clock":
3280 return fr
3281 case "@keet/member-label-digests-by-clock":
3282 return Ir
3283 case "@keet/calls-by-timestamp":
3284 return jr
3285 case "@keet/active-calls-by-timestamp":
3286 return Dr
3287 case "@keet/call-devices-by-member-key":
3288 return td
3289 case "@keet/call-streams-by-device-key":
3290 return ad
3291 default:
3292 return null
3293 }
3294}
3295module.exports = {
3296 versions: d,
3297 collections: vd,
3298 indexes: md,
3299 resolveCollection: hd,
3300 resolveIndex: kd,
3301}
keet-core-4.14.4-pretty/schema/spec/contract/hyperdb/messages.js +4747 -0
……@@ -0,0 +1,4747 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 20
3let n = d
4const o = {
5 preencode(d, n) {
6 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.length))
7 },
8 encode(d, n) {
9 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.length))
10 },
11 decode: (d) => ({ key: e.fixed32.decode(d), length: e.uint.decode(d) }),
12 },
13 c = {
14 preencode(d, n) {
15 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.seq))
16 },
17 encode(d, n) {
18 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.seq))
19 },
20 decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
21 },
22 t = {
23 preencode(d, n) {
24 ;(e.fixed32.preencode(d, n.publicKey), e.fixed32.preencode(d, n.secretKey))
25 },
26 encode(d, n) {
27 ;(e.fixed32.encode(d, n.publicKey), e.fixed32.encode(d, n.secretKey))
28 },
29 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed32.decode(d) }),
30 },
31 r = {
32 preencode(d, n) {
33 ;(e.fixed32.preencode(d, n.publicKey), e.fixed64.preencode(d, n.secretKey))
34 },
35 encode(d, n) {
36 ;(e.fixed32.encode(d, n.publicKey), e.fixed64.encode(d, n.secretKey))
37 },
38 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed64.decode(d) }),
39 },
40 i = {
41 preencode(d, n) {
42 ;(e.fixed32.preencode(d, n.key),
43 d.end++,
44 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
45 n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo))
46 },
47 encode(d, n) {
48 const o = (n.encryptionKey ? 1 : 0) | (n.fastForwardTo ? 2 : 0)
49 ;(e.fixed32.encode(d, n.key),
50 e.uint.encode(d, o),
51 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
52 n.fastForwardTo && e.fixed32.encode(d, n.fastForwardTo))
53 },
54 decode(d) {
55 const n = e.fixed32.decode(d),
56 o = e.uint.decode(d)
57 return {
58 key: n,
59 encryptionKey: 1 & o ? e.buffer.decode(d) : null,
60 fastForwardTo: 2 & o ? e.fixed32.decode(d) : null,
61 }
62 },
63 },
64 a = {
65 preencode(d, n) {
66 e.uint.preencode(d, n.timestamp)
67 },
68 encode(d, n) {
69 e.uint.encode(d, n.timestamp)
70 },
71 decode: (d) => ({ timestamp: e.uint.decode(d) }),
72 },
73 s = {
74 preencode(d, n) {
75 ;(e.uint.preencode(d, n.blockOffset),
76 e.uint.preencode(d, n.blockLength),
77 e.uint.preencode(d, n.byteOffset),
78 e.uint.preencode(d, n.byteLength))
79 },
80 encode(d, n) {
81 ;(e.uint.encode(d, n.blockOffset),
82 e.uint.encode(d, n.blockLength),
83 e.uint.encode(d, n.byteOffset),
84 e.uint.encode(d, n.byteLength))
85 },
86 decode: (d) => ({
87 blockOffset: e.uint.decode(d),
88 blockLength: e.uint.decode(d),
89 byteOffset: e.uint.decode(d),
90 byteLength: e.uint.decode(d),
91 }),
92 },
93 p = {
94 preencode(d, n) {
95 ;(e.uint.preencode(d, n.width), e.uint.preencode(d, n.height))
96 },
97 encode(d, n) {
98 ;(e.uint.encode(d, n.width), e.uint.encode(d, n.height))
99 },
100 decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
101 },
102 u = e.frame(p),
103 l = {
104 preencode(d, n) {
105 ;(d.end++,
106 n.name && e.string.preencode(d, n.name),
107 n.mimetype && e.string.preencode(d, n.mimetype),
108 n.dimensions && u.preencode(d, n.dimensions),
109 n.userdata && e.buffer.preencode(d, n.userdata),
110 n.duration && e.uint.preencode(d, n.duration))
111 },
112 encode(d, n) {
113 const o =
114 (n.name ? 1 : 0) |
115 (n.mimetype ? 2 : 0) |
116 (n.dimensions ? 4 : 0) |
117 (n.userdata ? 8 : 0) |
118 (n.duration ? 16 : 0) |
119 (n.isPreview ? 32 : 0)
120 ;(e.uint.encode(d, o),
121 n.name && e.string.encode(d, n.name),
122 n.mimetype && e.string.encode(d, n.mimetype),
123 n.dimensions && u.encode(d, n.dimensions),
124 n.userdata && e.buffer.encode(d, n.userdata),
125 n.duration && e.uint.encode(d, n.duration))
126 },
127 decode(d) {
128 const n = e.uint.decode(d)
129 return {
130 name: 1 & n ? e.string.decode(d) : null,
131 mimetype: 2 & n ? e.string.decode(d) : null,
132 dimensions: 4 & n ? u.decode(d) : null,
133 userdata: 8 & n ? e.buffer.decode(d) : null,
134 duration: 16 & n ? e.uint.decode(d) : 0,
135 isPreview: !!(32 & n),
136 }
137 },
138 },
139 f = {
140 preencode(d, n) {
141 ;(e.fixed32.preencode(d, n.key),
142 e.string.preencode(d, n.path),
143 e.uint.preencode(d, n.version),
144 e.uint.preencode(d, n.size))
145 },
146 encode(d, n) {
147 ;(e.fixed32.encode(d, n.key),
148 e.string.encode(d, n.path),
149 e.uint.encode(d, n.version),
150 e.uint.encode(d, n.size))
151 },
152 decode: (d) => ({
153 key: e.fixed32.decode(d),
154 path: e.string.decode(d),
155 version: e.uint.decode(d),
156 size: e.uint.decode(d),
157 }),
158 },
159 m = {
160 preencode(d, n) {
161 ;(e.fixed32.preencode(d, n.key), s.preencode(d, n.blob))
162 },
163 encode(d, n) {
164 ;(e.fixed32.encode(d, n.key), s.encode(d, n.blob))
165 },
166 decode: (d) => ({ key: e.fixed32.decode(d), blob: s.decode(d) }),
167 },
168 y = e.frame(m),
169 b = e.frame(f),
170 x = {
171 preencode(d, n) {
172 ;(d.end++,
173 n.inlined && e.buffer.preencode(d, n.inlined),
174 n.blob && s.preencode(d, n.blob),
175 n.externalBlob && y.preencode(d, n.externalBlob),
176 n.externalDrive && b.preencode(d, n.externalDrive))
177 },
178 encode(d, n) {
179 const o =
180 (n.inlined ? 1 : 0) |
181 (n.blob ? 2 : 0) |
182 (n.externalBlob ? 4 : 0) |
183 (n.externalDrive ? 8 : 0)
184 ;(e.uint.encode(d, o),
185 n.inlined && e.buffer.encode(d, n.inlined),
186 n.blob && s.encode(d, n.blob),
187 n.externalBlob && y.encode(d, n.externalBlob),
188 n.externalDrive && b.encode(d, n.externalDrive))
189 },
190 decode(d) {
191 const n = e.uint.decode(d)
192 return {
193 inlined: 1 & n ? e.buffer.decode(d) : null,
194 blob: 2 & n ? s.decode(d) : null,
195 externalBlob: 4 & n ? y.decode(d) : null,
196 externalDrive: 8 & n ? b.decode(d) : null,
197 }
198 },
199 },
200 k = e.frame(x),
201 v = e.frame(l),
202 g = {
203 preencode(d, n) {
204 ;(k.preencode(d, n.pointer),
205 d.end++,
206 n.metadata && v.preencode(d, n.metadata),
207 n.preview && ei.preencode(d, n.preview),
208 n.hash && e.fixed32.preencode(d, n.hash))
209 },
210 encode(d, n) {
211 const o = (n.metadata ? 1 : 0) | (n.preview ? 2 : 0) | (n.hash ? 4 : 0)
212 ;(k.encode(d, n.pointer),
213 e.uint.encode(d, o),
214 n.metadata && v.encode(d, n.metadata),
215 n.preview && ei.encode(d, n.preview),
216 n.hash && e.fixed32.encode(d, n.hash))
217 },
218 decode(d) {
219 const n = k.decode(d),
220 o = e.uint.decode(d)
221 return {
222 pointer: n,
223 metadata: 1 & o ? v.decode(d) : null,
224 preview: 2 & o ? ei.decode(d) : null,
225 hash: 4 & o ? e.fixed32.decode(d) : null,
226 }
227 },
228 },
229 h = e.frame(g),
230 K = h,
231 w = h,
232 A = {
233 preencode(e, d) {
234 ;(e.end++,
235 d.small && h.preencode(e, d.small),
236 d.medium && K.preencode(e, d.medium),
237 d.large && w.preencode(e, d.large))
238 },
239 encode(d, n) {
240 const o = (n.small ? 1 : 0) | (n.medium ? 2 : 0) | (n.large ? 4 : 0)
241 ;(e.uint.encode(d, o),
242 n.small && h.encode(d, n.small),
243 n.medium && K.encode(d, n.medium),
244 n.large && w.encode(d, n.large))
245 },
246 decode(d) {
247 const n = e.uint.decode(d)
248 return {
249 small: 1 & n ? h.decode(d) : null,
250 medium: 2 & n ? K.decode(d) : null,
251 large: 4 & n ? w.decode(d) : null,
252 }
253 },
254 },
255 T = {
256 preencode(e, d) {
257 e.end++
258 },
259 encode(d, n) {
260 const o = n.isDeleted ? 1 : 0
261 e.uint.encode(d, o)
262 },
263 decode: (d) => ({ isDeleted: !!(1 & e.uint.decode(d)) }),
264 },
265 P = e.frame(T),
266 S = h,
267 R = {
268 preencode(d, o) {
269 ;(e.uint.preencode(d, o.id),
270 c.preencode(d, o.oplog),
271 P.preencode(d, o.status),
272 S.preencode(d, o.file),
273 d.end++,
274 n >= 14 && o.version && e.uint.preencode(d, o.version))
275 },
276 encode(d, o) {
277 const t = n >= 14 && o.version ? 1 : 0
278 ;(e.uint.encode(d, o.id),
279 c.encode(d, o.oplog),
280 P.encode(d, o.status),
281 S.encode(d, o.file),
282 e.uint.encode(d, t),
283 n >= 14 && o.version && e.uint.encode(d, o.version))
284 },
285 decode(d) {
286 const o = e.uint.decode(d),
287 t = c.decode(d),
288 r = P.decode(d),
289 i = S.decode(d),
290 a = d.start < d.end ? e.uint.decode(d) : 0
291 return {
292 id: o,
293 oplog: t,
294 status: r,
295 file: i,
296 version: n >= 14 && 1 & a ? e.uint.decode(d) : 0,
297 }
298 },
299 },
300 C = {
301 preencode(e, d) {
302 e.end++
303 },
304 encode(d, n) {
305 const o = (n.isActive ? 1 : 0) | (n.isIndexing ? 2 : 0)
306 e.uint.encode(d, o)
307 },
308 decode(d) {
309 const n = e.uint.decode(d)
310 return { isActive: !!(1 & n), isIndexing: !!(2 & n) }
311 },
312 },
313 D = {
314 preencode(d, o) {
315 const c =
316 (o.isAdmin ? 1 : 0) |
317 (o.isModerator ? 2 : 0) |
318 (o.isPending ? 4 : 0) |
319 (o.isActive ? 8 : 0) |
320 (o.isMuted ? 16 : 0) |
321 (o.isBanned ? 32 : 0) |
322 (o.isShadowBanned ? 64 : 0) |
323 (n >= 13 && o.isRemoved ? 128 : 0)
324 e.uint.preencode(d, c)
325 },
326 encode(d, o) {
327 const c =
328 (o.isAdmin ? 1 : 0) |
329 (o.isModerator ? 2 : 0) |
330 (o.isPending ? 4 : 0) |
331 (o.isActive ? 8 : 0) |
332 (o.isMuted ? 16 : 0) |
333 (o.isBanned ? 32 : 0) |
334 (o.isShadowBanned ? 64 : 0) |
335 (n >= 13 && o.isRemoved ? 128 : 0)
336 e.uint.encode(d, c)
337 },
338 decode(d) {
339 const o = e.uint.decode(d)
340 return {
341 isAdmin: !!(1 & o),
342 isModerator: !!(2 & o),
343 isPending: !!(4 & o),
344 isActive: !!(8 & o),
345 isMuted: !!(16 & o),
346 isBanned: !!(32 & o),
347 isShadowBanned: !!(64 & o),
348 isRemoved: n >= 13 && !!(128 & o),
349 }
350 },
351 },
352 F = {
353 preencode(e, d) {
354 e.end++
355 },
356 encode(d, n) {
357 const o = (n.isMuted ? 1 : 0) | (n.isBanned ? 2 : 0) | (n.isShadowBanned ? 4 : 0)
358 e.uint.encode(d, o)
359 },
360 decode(d) {
361 const n = e.uint.decode(d)
362 return { isMuted: !!(1 & n), isBanned: !!(2 & n), isShadowBanned: !!(4 & n) }
363 },
364 },
365 M = {
366 preencode(d, n) {
367 e.uint.preencode(d, n.version)
368 },
369 encode(d, n) {
370 e.uint.encode(d, n.version)
371 },
372 decode: (d) => ({ version: e.uint.decode(d) }),
373 },
374 q = {
375 preencode(d, n) {
376 ;(e.uint.preencode(d, n.total), e.uint.preencode(d, n.active))
377 },
378 encode(d, n) {
379 ;(e.uint.encode(d, n.total), e.uint.encode(d, n.active))
380 },
381 decode: (d) => ({ total: e.uint.decode(d), active: e.uint.decode(d) }),
382 },
383 L = {
384 preencode(d, n) {
385 ;(e.uint.preencode(d, n.total), e.uint.preencode(d, n.active), e.uint.preencode(d, n.pending))
386 },
387 encode(d, n) {
388 ;(e.uint.encode(d, n.total), e.uint.encode(d, n.active), e.uint.encode(d, n.pending))
389 },
390 decode: (d) => ({
391 total: e.uint.decode(d),
392 active: e.uint.decode(d),
393 pending: e.uint.decode(d),
394 }),
395 },
396 I = {
397 preencode(d, o) {
398 ;(e.uint.preencode(d, o.clock),
399 e.uint.preencode(d, o.pinned),
400 e.uint.preencode(d, o.threads),
401 e.uint.preencode(d, o.timestamp),
402 d.end++,
403 n >= 15 && o.flagsClock && e.uint.preencode(d, o.flagsClock))
404 },
405 encode(d, o) {
406 const c = n >= 15 && o.flagsClock ? 1 : 0
407 ;(e.uint.encode(d, o.clock),
408 e.uint.encode(d, o.pinned),
409 e.uint.encode(d, o.threads),
410 e.uint.encode(d, o.timestamp),
411 e.uint.encode(d, c),
412 n >= 15 && o.flagsClock && e.uint.encode(d, o.flagsClock))
413 },
414 decode(d) {
415 const o = e.uint.decode(d),
416 c = e.uint.decode(d),
417 t = e.uint.decode(d),
418 r = e.uint.decode(d),
419 i = d.start < d.end ? e.uint.decode(d) : 0
420 return {
421 clock: o,
422 pinned: c,
423 threads: t,
424 timestamp: r,
425 flagsClock: n >= 15 && 1 & i ? e.uint.decode(d) : 0,
426 }
427 },
428 },
429 E = {
430 preencode(d, n) {
431 e.uint.preencode(d, n.clock)
432 },
433 encode(d, n) {
434 e.uint.encode(d, n.clock)
435 },
436 decode: (d) => ({ clock: e.uint.decode(d) }),
437 },
438 B = e.frame(q),
439 N = e.frame(L),
440 j = e.frame(I),
441 V = e.frame(E),
442 O = {
443 preencode(e, d) {
444 ;(B.preencode(e, d.devices),
445 N.preencode(e, d.members),
446 j.preencode(e, d.chat),
447 V.preencode(e, d.files))
448 },
449 encode(e, d) {
450 ;(B.encode(e, d.devices), N.encode(e, d.members), j.encode(e, d.chat), V.encode(e, d.files))
451 },
452 decode: (e) => ({
453 devices: B.decode(e),
454 members: N.decode(e),
455 chat: j.decode(e),
456 files: V.decode(e),
457 }),
458 },
459 J = { Default: 1, Broadcast: 2, DirectMessage: 3 },
460 U = {
461 preencode(e, d) {
462 e.end++
463 },
464 encode(d, n) {
465 if (n > 3) throw new Error("Unknown enum")
466 e.uint.encode(d, n)
467 },
468 decode: (d) => e.uint.decode(d),
469 },
470 H = {
471 preencode(d, o) {
472 const c =
473 (o.roomType ? 1 : 0) |
474 (o.isExperimental ? 2 : 0) |
475 (o.isJoiningDisabled ? 4 : 0) |
476 (o.isAppendingDisabled ? 8 : 0) |
477 (o.isCallingDisabled ? 16 : 0) |
478 (o.isMembershipEventsDisabled ? 32 : 0) |
479 (n >= 19 && o.isAttachmentsDisabled ? 64 : 0) |
480 (n >= 19 && o.isLinksDisabled ? 128 : 0) |
481 (n >= 20 && o.buildType ? 256 : 0)
482 ;(e.uint.preencode(d, c),
483 o.roomType && U.preencode(d, o.roomType),
484 n >= 20 && o.buildType && Vt.preencode(d, o.buildType))
485 },
486 encode(d, o) {
487 const c =
488 (o.roomType ? 1 : 0) |
489 (o.isExperimental ? 2 : 0) |
490 (o.isJoiningDisabled ? 4 : 0) |
491 (o.isAppendingDisabled ? 8 : 0) |
492 (o.isCallingDisabled ? 16 : 0) |
493 (o.isMembershipEventsDisabled ? 32 : 0) |
494 (n >= 19 && o.isAttachmentsDisabled ? 64 : 0) |
495 (n >= 19 && o.isLinksDisabled ? 128 : 0) |
496 (n >= 20 && o.buildType ? 256 : 0)
497 ;(e.uint.encode(d, c),
498 o.roomType && U.encode(d, o.roomType),
499 n >= 20 && o.buildType && Vt.encode(d, o.buildType))
500 },
501 decode(d) {
502 const o = e.uint.decode(d)
503 return {
504 roomType: 1 & o ? U.decode(d) : 0,
505 isExperimental: !!(2 & o),
506 isJoiningDisabled: !!(4 & o),
507 isAppendingDisabled: !!(8 & o),
508 isCallingDisabled: !!(16 & o),
509 isMembershipEventsDisabled: !!(32 & o),
510 isAttachmentsDisabled: n >= 19 && !!(64 & o),
511 isLinksDisabled: n >= 19 && !!(128 & o),
512 buildType: n >= 20 && 256 & o ? Vt.decode(d) : null,
513 }
514 },
515 },
516 z = e.frame(M),
517 G = e.frame(H),
518 Q = {
519 preencode(d, n) {
520 ;(z.preencode(d, n.abi), G.preencode(d, n.settings), e.uint.preencode(d, n.creationTime))
521 },
522 encode(d, n) {
523 ;(z.encode(d, n.abi), G.encode(d, n.settings), e.uint.encode(d, n.creationTime))
524 },
525 decode: (d) => ({ abi: z.decode(d), settings: G.decode(d), creationTime: e.uint.decode(d) }),
526 },
527 W = {
528 preencode(d, n) {
529 e.fixed32.preencode(d, n.seed)
530 },
531 encode(d, n) {
532 e.fixed32.encode(d, n.seed)
533 },
534 decode: (d) => ({ seed: e.fixed32.decode(d) }),
535 },
536 X = {
537 preencode(d, n) {
538 ;(t.preencode(d, n.mailboxKeyPair),
539 r.preencode(d, n.discoveryKeyPair),
540 e.fixed32.preencode(d, n.wakeupTopic),
541 e.fixed32.preencode(d, n.swarmTopic))
542 },
543 encode(d, n) {
544 ;(t.encode(d, n.mailboxKeyPair),
545 r.encode(d, n.discoveryKeyPair),
546 e.fixed32.encode(d, n.wakeupTopic),
547 e.fixed32.encode(d, n.swarmTopic))
548 },
549 decode: (d) => ({
550 mailboxKeyPair: t.decode(d),
551 discoveryKeyPair: r.decode(d),
552 wakeupTopic: e.fixed32.decode(d),
553 swarmTopic: e.fixed32.decode(d),
554 }),
555 },
556 Y = e.array(e.fixed32),
557 Z = {
558 preencode(d, o) {
559 ;(d.end++,
560 o.title && e.string.preencode(d, o.title),
561 o.avatar && di.preencode(d, o.avatar),
562 o.description && e.string.preencode(d, o.description),
563 n >= 11 && o.supportedLanguages && ni.preencode(d, o.supportedLanguages),
564 n >= 13 && o.blindPeers && Y.preencode(d, o.blindPeers))
565 },
566 encode(d, o) {
567 const c =
568 (o.title ? 1 : 0) |
569 (o.avatar ? 2 : 0) |
570 (o.description ? 4 : 0) |
571 (n >= 11 && o.supportedLanguages ? 8 : 0) |
572 (n >= 13 && o.blindPeers ? 16 : 0)
573 ;(e.uint.encode(d, c),
574 o.title && e.string.encode(d, o.title),
575 o.avatar && di.encode(d, o.avatar),
576 o.description && e.string.encode(d, o.description),
577 n >= 11 && o.supportedLanguages && ni.encode(d, o.supportedLanguages),
578 n >= 13 && o.blindPeers && Y.encode(d, o.blindPeers))
579 },
580 decode(d) {
581 const o = e.uint.decode(d)
582 return {
583 title: 1 & o ? e.string.decode(d) : null,
584 avatar: 2 & o ? di.decode(d) : null,
585 description: 4 & o ? e.string.decode(d) : null,
586 supportedLanguages: n >= 11 && 8 & o ? ni.decode(d) : null,
587 blindPeers: n >= 13 && 16 & o ? Y.decode(d) : null,
588 }
589 },
590 },
591 $ = {
592 preencode(d, n) {
593 e.fixed32.preencode(d, n.key)
594 },
595 encode(d, n) {
596 e.fixed32.encode(d, n.key)
597 },
598 decode: (d) => ({ key: e.fixed32.decode(d) }),
599 },
600 _ = e.frame(a),
601 ee = e.frame($),
602 de = {
603 preencode(e, d) {
604 ;(_.preencode(e, d.header), ee.preencode(e, d.peer))
605 },
606 encode(e, d) {
607 ;(_.encode(e, d.header), ee.encode(e, d.peer))
608 },
609 decode: (e) => ({ header: _.decode(e), peer: ee.decode(e) }),
610 },
611 ne = _,
612 oe = {
613 preencode(d, n) {
614 ;(ne.preencode(d, n.header), e.fixed32.preencode(d, n.key))
615 },
616 encode(d, n) {
617 ;(ne.encode(d, n.header), e.fixed32.encode(d, n.key))
618 },
619 decode: (d) => ({ header: ne.decode(d), key: e.fixed32.decode(d) }),
620 },
621 ce = {
622 preencode(d, n) {
623 ;(e.fixed32.preencode(d, n.memberKey), e.buffer.preencode(d, n.proof))
624 },
625 encode(d, n) {
626 ;(e.fixed32.encode(d, n.memberKey), e.buffer.encode(d, n.proof))
627 },
628 decode: (d) => ({ memberKey: e.fixed32.decode(d), proof: e.buffer.decode(d) }),
629 },
630 te = {
631 preencode(d, n) {
632 ;(e.fixed32.preencode(d, n.id), e.buffer.preencode(d, n.response))
633 },
634 encode(d, n) {
635 ;(e.fixed32.encode(d, n.id), e.buffer.encode(d, n.response))
636 },
637 decode: (d) => ({ id: e.fixed32.decode(d), response: e.buffer.decode(d) }),
638 },
639 re = e.frame(C),
640 ie = e.frame(te),
641 ae = {
642 preencode(d, n) {
643 ;(e.fixed32.preencode(d, n.key),
644 e.fixed32.preencode(d, n.memberKey),
645 re.preencode(d, n.status),
646 oi.preencode(d, n.profile),
647 d.end++,
648 n.invitation && ie.preencode(d, n.invitation))
649 },
650 encode(d, n) {
651 const o = n.invitation ? 1 : 0
652 ;(e.fixed32.encode(d, n.key),
653 e.fixed32.encode(d, n.memberKey),
654 re.encode(d, n.status),
655 oi.encode(d, n.profile),
656 e.uint.encode(d, o),
657 n.invitation && ie.encode(d, n.invitation))
658 },
659 decode: (d) => ({
660 key: e.fixed32.decode(d),
661 memberKey: e.fixed32.decode(d),
662 status: re.decode(d),
663 profile: oi.decode(d),
664 invitation: 1 & e.uint.decode(d) ? ie.decode(d) : null,
665 }),
666 },
667 se = {
668 preencode(d, n) {
669 ;(e.uint.preencode(d, n.timestamp),
670 d.end++,
671 n.mailbox && e.fixed32.preencode(d, n.mailbox),
672 n.displayName && e.string.preencode(d, n.displayName),
673 n.avatar && ci.preencode(d, n.avatar),
674 n.username && e.string.preencode(d, n.username))
675 },
676 encode(d, n) {
677 const o =
678 (n.mailbox ? 1 : 0) | (n.displayName ? 2 : 0) | (n.avatar ? 4 : 0) | (n.username ? 8 : 0)
679 ;(e.uint.encode(d, n.timestamp),
680 e.uint.encode(d, o),
681 n.mailbox && e.fixed32.encode(d, n.mailbox),
682 n.displayName && e.string.encode(d, n.displayName),
683 n.avatar && ci.encode(d, n.avatar),
684 n.username && e.string.encode(d, n.username))
685 },
686 decode(d) {
687 const n = e.uint.decode(d),
688 o = e.uint.decode(d)
689 return {
690 timestamp: n,
691 mailbox: 1 & o ? e.fixed32.decode(d) : null,
692 displayName: 2 & o ? e.string.decode(d) : null,
693 avatar: 4 & o ? ci.decode(d) : null,
694 username: 8 & o ? e.string.decode(d) : null,
695 }
696 },
697 },
698 pe = {
699 preencode(d, o) {
700 ;(d.end++,
701 o.swarmKey && e.fixed32.preencode(d, o.swarmKey),
702 o.name && e.string.preencode(d, o.name),
703 n >= 20 && o.buildType && Vt.preencode(d, o.buildType))
704 },
705 encode(d, o) {
706 const c =
707 (o.swarmKey ? 1 : 0) |
708 (o.name ? 2 : 0) |
709 (o.isMobile ? 4 : 0) |
710 (n >= 20 && o.buildType ? 8 : 0)
711 ;(e.uint.encode(d, c),
712 o.swarmKey && e.fixed32.encode(d, o.swarmKey),
713 o.name && e.string.encode(d, o.name),
714 n >= 20 && o.buildType && Vt.encode(d, o.buildType))
715 },
716 decode(d) {
717 const o = e.uint.decode(d)
718 return {
719 swarmKey: 1 & o ? e.fixed32.decode(d) : null,
720 name: 2 & o ? e.string.decode(d) : null,
721 isMobile: !!(4 & o),
722 buildType: n >= 20 && 8 & o ? Vt.decode(d) : null,
723 }
724 },
725 },
726 ue = e.frame(se),
727 le = {
728 preencode(e, d) {
729 ;(ue.preencode(e, d.profile), ce.preencode(e, d.attestation))
730 },
731 encode(e, d) {
732 ;(ue.encode(e, d.profile), ce.encode(e, d.attestation))
733 },
734 decode: (e) => ({ profile: ue.decode(e), attestation: ce.decode(e) }),
735 },
736 fe = {
737 preencode(e, d) {
738 ;(ti.preencode(e, d.profile), ce.preencode(e, d.attestation))
739 },
740 encode(e, d) {
741 ;(ti.encode(e, d.profile), ce.encode(e, d.attestation))
742 },
743 decode: (e) => ({ profile: ti.decode(e), attestation: ce.decode(e) }),
744 },
745 me = {
746 preencode(d, n) {
747 ;(e.fixed32.preencode(d, n.id),
748 e.buffer.preencode(d, n.data),
749 e.buffer.preencode(d, n.signature))
750 },
751 encode(d, n) {
752 ;(e.fixed32.encode(d, n.id), e.buffer.encode(d, n.data), e.buffer.encode(d, n.signature))
753 },
754 decode: (d) => ({
755 id: e.fixed32.decode(d),
756 data: e.buffer.decode(d),
757 signature: e.buffer.decode(d),
758 }),
759 },
760 ye = {
761 preencode(d, n) {
762 e.fixed32.preencode(d, n.devicePublicKey)
763 },
764 encode(d, n) {
765 e.fixed32.encode(d, n.devicePublicKey)
766 },
767 decode: (d) => ({ devicePublicKey: e.fixed32.decode(d) }),
768 },
769 be = {
770 preencode(d, n) {
771 ;(ce.preencode(d, n.privateProfileIdentity), e.buffer.preencode(d, n.deviceProof))
772 },
773 encode(d, n) {
774 ;(ce.encode(d, n.privateProfileIdentity), e.buffer.encode(d, n.deviceProof))
775 },
776 decode: (d) => ({ privateProfileIdentity: ce.decode(d), deviceProof: e.buffer.decode(d) }),
777 },
778 xe = e.frame(fe),
779 ke = e.frame(le),
780 ve = e.frame(ye),
781 ge = {
782 preencode(d, n) {
783 ;(e.fixed32.preencode(d, n.deviceKey),
784 r.preencode(d, n.keyPair),
785 xe.preencode(d, n.device),
786 ke.preencode(d, n.member),
787 d.end++,
788 n.identity && ve.preencode(d, n.identity))
789 },
790 encode(d, n) {
791 const o = n.identity ? 1 : 0
792 ;(e.fixed32.encode(d, n.deviceKey),
793 r.encode(d, n.keyPair),
794 xe.encode(d, n.device),
795 ke.encode(d, n.member),
796 e.uint.encode(d, o),
797 n.identity && ve.encode(d, n.identity))
798 },
799 decode: (d) => ({
800 deviceKey: e.fixed32.decode(d),
801 keyPair: r.decode(d),
802 device: xe.decode(d),
803 member: ke.decode(d),
804 identity: 1 & e.uint.decode(d) ? ve.decode(d) : null,
805 }),
806 },
807 he = e.frame(ge),
808 Ke = {
809 preencode(d, n) {
810 ;(e.fixed32.preencode(d, n.id),
811 he.preencode(d, n.request),
812 e.buffer.preencode(d, n.signature))
813 },
814 encode(d, n) {
815 ;(e.fixed32.encode(d, n.id), he.encode(d, n.request), e.buffer.encode(d, n.signature))
816 },
817 decode: (d) => ({
818 id: e.fixed32.decode(d),
819 request: he.decode(d),
820 signature: e.buffer.decode(d),
821 }),
822 },
823 we = xe,
824 Ae = ke,
825 Te = {
826 preencode(e, d) {
827 ;(we.preencode(e, d.device), e.end++, d.member && Ae.preencode(e, d.member))
828 },
829 encode(d, n) {
830 const o = n.member ? 1 : 0
831 ;(we.encode(d, n.device), e.uint.encode(d, o), n.member && Ae.encode(d, n.member))
832 },
833 decode: (d) => ({ device: we.decode(d), member: 1 & e.uint.decode(d) ? Ae.decode(d) : null }),
834 },
835 Pe = e.frame(Ke),
836 Se = e.frame(Te),
837 Re = {
838 preencode(e, d) {
839 ;(e.end++,
840 d.withInvitation && Pe.preencode(e, d.withInvitation),
841 d.withMemberProof && Se.preencode(e, d.withMemberProof))
842 },
843 encode(d, n) {
844 const o = (n.withInvitation ? 1 : 0) | (n.withMemberProof ? 2 : 0)
845 ;(e.uint.encode(d, o),
846 n.withInvitation && Pe.encode(d, n.withInvitation),
847 n.withMemberProof && Se.encode(d, n.withMemberProof))
848 },
849 decode(d) {
850 const n = e.uint.decode(d)
851 return {
852 withInvitation: 1 & n ? Pe.decode(d) : null,
853 withMemberProof: 2 & n ? Se.decode(d) : null,
854 }
855 },
856 },
857 Ce = e.frame(me),
858 De = e.frame(be),
859 Fe = {
860 preencode(e, d) {
861 ;(Ce.preencode(e, d.signedKeys), e.end++, d.identity && De.preencode(e, d.identity))
862 },
863 encode(d, n) {
864 const o = n.identity ? 1 : 0
865 ;(Ce.encode(d, n.signedKeys), e.uint.encode(d, o), n.identity && De.encode(d, n.identity))
866 },
867 decode: (d) => ({
868 signedKeys: Ce.decode(d),
869 identity: 1 & e.uint.decode(d) ? De.decode(d) : null,
870 }),
871 },
872 Me = {
873 preencode(d, o) {
874 ;(d.end++,
875 o.expiration && e.uint.preencode(d, o.expiration),
876 n >= 20 && o.buildType && Vt.preencode(d, o.buildType))
877 },
878 encode(d, o) {
879 const c =
880 (o.expiration ? 1 : 0) |
881 (o.requiresConfirmation ? 2 : 0) |
882 (o.canModerate ? 4 : 0) |
883 (o.canAdmin ? 8 : 0) |
884 (n >= 20 && o.buildType ? 16 : 0)
885 ;(e.uint.encode(d, c),
886 o.expiration && e.uint.encode(d, o.expiration),
887 n >= 20 && o.buildType && Vt.encode(d, o.buildType))
888 },
889 decode(d) {
890 const o = e.uint.decode(d)
891 return {
892 expiration: 1 & o ? e.uint.decode(d) : 0,
893 requiresConfirmation: !!(2 & o),
894 canModerate: !!(4 & o),
895 canAdmin: !!(8 & o),
896 buildType: n >= 20 && 16 & o ? Vt.decode(d) : null,
897 }
898 },
899 },
900 qe = Ce,
901 Le = e.frame(Me),
902 Ie = {
903 preencode(d, n) {
904 ;(e.fixed32.preencode(d, n.id),
905 qe.preencode(d, n.response),
906 Le.preencode(d, n.metadata),
907 d.end++,
908 n.anchor && o.preencode(d, n.anchor))
909 },
910 encode(d, n) {
911 const c = (n.anchor ? 1 : 0) | (n.isActive ? 2 : 0)
912 ;(e.fixed32.encode(d, n.id),
913 qe.encode(d, n.response),
914 Le.encode(d, n.metadata),
915 e.uint.encode(d, c),
916 n.anchor && o.encode(d, n.anchor))
917 },
918 decode(d) {
919 const n = e.fixed32.decode(d),
920 c = qe.decode(d),
921 t = Le.decode(d),
922 r = e.uint.decode(d)
923 return {
924 id: n,
925 response: c,
926 metadata: t,
927 anchor: 1 & r ? o.decode(d) : null,
928 isActive: !!(2 & r),
929 }
930 },
931 },
932 Ee = _,
933 Be = e.frame(Ie),
934 Ne = {
935 preencode(e, d) {
936 ;(Ee.preencode(e, d.header), Be.preencode(e, d.invitation))
937 },
938 encode(e, d) {
939 ;(Ee.encode(e, d.header), Be.encode(e, d.invitation))
940 },
941 decode: (e) => ({ header: Ee.decode(e), invitation: Be.decode(e) }),
942 },
943 je = _,
944 Ve = {
945 preencode(d, n) {
946 ;(je.preencode(d, n.header), e.fixed32.preencode(d, n.id))
947 },
948 encode(d, n) {
949 ;(je.encode(d, n.header), e.fixed32.encode(d, n.id))
950 },
951 decode: (d) => ({ header: je.decode(d), id: e.fixed32.decode(d) }),
952 },
953 Oe = {
954 preencode(d, n) {
955 ;(e.fixed32.preencode(d, n.mailbox),
956 e.fixed32.preencode(d, n.invitationSeed),
957 o.preencode(d, n.anchor))
958 },
959 encode(d, n) {
960 ;(e.fixed32.encode(d, n.mailbox),
961 e.fixed32.encode(d, n.invitationSeed),
962 o.encode(d, n.anchor))
963 },
964 decode: (d) => ({
965 mailbox: e.fixed32.decode(d),
966 invitationSeed: e.fixed32.decode(d),
967 anchor: o.decode(d),
968 }),
969 },
970 Je = {
971 preencode(d, n) {
972 ;(e.fixed32.preencode(d, n.mailbox),
973 e.fixed32.preencode(d, n.invitationSeed),
974 o.preencode(d, n.anchor),
975 e.fixed32.preencode(d, n.identityPublicKey))
976 },
977 encode(d, n) {
978 ;(e.fixed32.encode(d, n.mailbox),
979 e.fixed32.encode(d, n.invitationSeed),
980 o.encode(d, n.anchor),
981 e.fixed32.encode(d, n.identityPublicKey))
982 },
983 decode: (d) => ({
984 mailbox: e.fixed32.decode(d),
985 invitationSeed: e.fixed32.decode(d),
986 anchor: o.decode(d),
987 identityPublicKey: e.fixed32.decode(d),
988 }),
989 },
990 Ue = {
991 preencode(d, n) {
992 e.fixed32.preencode(d, n.mailbox)
993 },
994 encode(d, n) {
995 e.fixed32.encode(d, n.mailbox)
996 },
997 decode: (d) => ({ mailbox: e.fixed32.decode(d) }),
998 },
999 He = e.frame(Oe),
1000 ze = e.frame(Je),
1001 Ge = e.frame(Ue),
1002 Qe = e.array(e.ipv4Address),
1003 We = {
1004 preencode(e, d) {
1005 ;(e.end++,
1006 d.room && He.preencode(e, d.room),
1007 d.identity && ze.preencode(e, d.identity),
1008 d.contact && Ge.preencode(e, d.contact),
1009 n >= 6 && d.readonly && ri.preencode(e, d.readonly),
1010 n >= 11 && d.additionalNodes && Qe.preencode(e, d.additionalNodes),
1011 n >= 20 && d.buildType && Vt.preencode(e, d.buildType))
1012 },
1013 encode(d, o) {
1014 const c =
1015 (o.room ? 1 : 0) |
1016 (o.identity ? 2 : 0) |
1017 (o.contact ? 4 : 0) |
1018 (n >= 6 && o.readonly ? 8 : 0) |
1019 (n >= 11 && o.additionalNodes ? 16 : 0) |
1020 (n >= 20 && o.buildType ? 32 : 0)
1021 ;(e.uint.encode(d, c),
1022 o.room && He.encode(d, o.room),
1023 o.identity && ze.encode(d, o.identity),
1024 o.contact && Ge.encode(d, o.contact),
1025 n >= 6 && o.readonly && ri.encode(d, o.readonly),
1026 n >= 11 && o.additionalNodes && Qe.encode(d, o.additionalNodes),
1027 n >= 20 && o.buildType && Vt.encode(d, o.buildType))
1028 },
1029 decode(d) {
1030 const o = e.uint.decode(d)
1031 return {
1032 room: 1 & o ? He.decode(d) : null,
1033 identity: 2 & o ? ze.decode(d) : null,
1034 contact: 4 & o ? Ge.decode(d) : null,
1035 readonly: n >= 6 && 8 & o ? ri.decode(d) : null,
1036 additionalNodes: n >= 11 && 16 & o ? Qe.decode(d) : null,
1037 buildType: n >= 20 && 32 & o ? Vt.decode(d) : null,
1038 }
1039 },
1040 },
1041 Xe = _,
1042 Ye = {
1043 preencode(d, n) {
1044 ;(Xe.preencode(d, n.header), e.buffer.preencode(d, n.blindRequest))
1045 },
1046 encode(d, n) {
1047 ;(Xe.encode(d, n.header), e.buffer.encode(d, n.blindRequest))
1048 },
1049 decode: (d) => ({ header: Xe.decode(d), blindRequest: e.buffer.decode(d) }),
1050 },
1051 Ze = _,
1052 $e = {
1053 preencode(e, d) {
1054 ;(Ze.preencode(e, d.header), e.end++, d.profile && ii.preencode(e, d.profile))
1055 },
1056 encode(d, n) {
1057 const o = n.profile ? 1 : 0
1058 ;(Ze.encode(d, n.header), e.uint.encode(d, o), n.profile && ii.encode(d, n.profile))
1059 },
1060 decode: (d) => ({ header: Ze.decode(d), profile: 1 & e.uint.decode(d) ? ii.decode(d) : null }),
1061 },
1062 _e = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({}) },
1063 ed = _e,
1064 dd = he,
1065 nd = {
1066 preencode(d, n) {
1067 ;(e.fixed32.preencode(d, n.deviceKey),
1068 e.fixed32.preencode(d, n.id),
1069 dd.preencode(d, n.request))
1070 },
1071 encode(d, n) {
1072 ;(e.fixed32.encode(d, n.deviceKey), e.fixed32.encode(d, n.id), dd.encode(d, n.request))
1073 },
1074 decode: (d) => ({
1075 deviceKey: e.fixed32.decode(d),
1076 id: e.fixed32.decode(d),
1077 request: dd.decode(d),
1078 }),
1079 },
1080 od = _,
1081 cd = De,
1082 td = {
1083 preencode(d, n) {
1084 ;(od.preencode(d, n.header),
1085 e.fixed32.preencode(d, n.deviceKey),
1086 d.end++,
1087 n.identity && cd.preencode(d, n.identity))
1088 },
1089 encode(d, n) {
1090 const o = n.identity ? 1 : 0
1091 ;(od.encode(d, n.header),
1092 e.fixed32.encode(d, n.deviceKey),
1093 e.uint.encode(d, o),
1094 n.identity && cd.encode(d, n.identity))
1095 },
1096 decode: (d) => ({
1097 header: od.decode(d),
1098 deviceKey: e.fixed32.decode(d),
1099 identity: 1 & e.uint.decode(d) ? cd.decode(d) : null,
1100 }),
1101 },
1102 rd = _,
1103 id = {
1104 preencode(d, n) {
1105 ;(rd.preencode(d, n.header), e.fixed32.preencode(d, n.deviceKey))
1106 },
1107 encode(d, n) {
1108 ;(rd.encode(d, n.header), e.fixed32.encode(d, n.deviceKey))
1109 },
1110 decode: (d) => ({ header: rd.decode(d), deviceKey: e.fixed32.decode(d) }),
1111 },
1112 ad = e.frame(D),
1113 sd = ue,
1114 pd = {
1115 preencode(d, n) {
1116 ;(e.fixed32.preencode(d, n.key), ad.preencode(d, n.status), sd.preencode(d, n.profile))
1117 },
1118 encode(d, n) {
1119 ;(e.fixed32.encode(d, n.key), ad.encode(d, n.status), sd.encode(d, n.profile))
1120 },
1121 decode: (d) => ({ key: e.fixed32.decode(d), status: ad.decode(d), profile: sd.decode(d) }),
1122 },
1123 ud = ad,
1124 ld = ue,
1125 fd = {
1126 preencode(d, n) {
1127 ;(e.fixed32.preencode(d, n.key),
1128 ud.preencode(d, n.status),
1129 ld.preencode(d, n.profile),
1130 d.end++,
1131 n.proofs && ai.preencode(d, n.proofs))
1132 },
1133 encode(d, n) {
1134 const o = n.proofs ? 1 : 0
1135 ;(e.fixed32.encode(d, n.key),
1136 ud.encode(d, n.status),
1137 ld.encode(d, n.profile),
1138 e.uint.encode(d, o),
1139 n.proofs && ai.encode(d, n.proofs))
1140 },
1141 decode: (d) => ({
1142 key: e.fixed32.decode(d),
1143 status: ud.decode(d),
1144 profile: ld.decode(d),
1145 proofs: 1 & e.uint.decode(d) ? ai.decode(d) : null,
1146 }),
1147 },
1148 md = {
1149 preencode(d, n) {
1150 ;(e.fixed32.preencode(d, n.key),
1151 d.end++,
1152 n.profileAttestation && e.buffer.preencode(d, n.profileAttestation),
1153 n.latestReceipt && e.buffer.preencode(d, n.latestReceipt))
1154 },
1155 encode(d, n) {
1156 const o = (n.profileAttestation ? 1 : 0) | (n.latestReceipt ? 2 : 0)
1157 ;(e.fixed32.encode(d, n.key),
1158 e.uint.encode(d, o),
1159 n.profileAttestation && e.buffer.encode(d, n.profileAttestation),
1160 n.latestReceipt && e.buffer.encode(d, n.latestReceipt))
1161 },
1162 decode(d) {
1163 const n = e.fixed32.decode(d),
1164 o = e.uint.decode(d)
1165 return {
1166 key: n,
1167 profileAttestation: 1 & o ? e.buffer.decode(d) : null,
1168 latestReceipt: 2 & o ? e.buffer.decode(d) : null,
1169 }
1170 },
1171 },
1172 yd = _,
1173 bd = ke,
1174 xd = {
1175 preencode(e, d) {
1176 ;(yd.preencode(e, d.header), bd.preencode(e, d.member))
1177 },
1178 encode(e, d) {
1179 ;(yd.encode(e, d.header), bd.encode(e, d.member))
1180 },
1181 decode: (e) => ({ header: yd.decode(e), member: bd.decode(e) }),
1182 },
1183 kd = _,
1184 vd = e.frame(F),
1185 gd = {
1186 preencode(d, n) {
1187 ;(kd.preencode(d, n.header),
1188 e.fixed32.preencode(d, n.memberKey),
1189 e.uint.preencode(d, n.key),
1190 vd.preencode(d, n.status))
1191 },
1192 encode(d, n) {
1193 ;(kd.encode(d, n.header),
1194 e.fixed32.encode(d, n.memberKey),
1195 e.uint.encode(d, n.key),
1196 vd.encode(d, n.status))
1197 },
1198 decode: (d) => ({
1199 header: kd.decode(d),
1200 memberKey: e.fixed32.decode(d),
1201 key: e.uint.decode(d),
1202 status: vd.decode(d),
1203 }),
1204 },
1205 hd = _,
1206 Kd = {
1207 preencode(d, n) {
1208 ;(hd.preencode(d, n.header), e.fixed32.preencode(d, n.key), d.end++)
1209 },
1210 encode(d, n) {
1211 const o = (n.isModerator ? 1 : 0) | (n.isAdmin ? 2 : 0)
1212 ;(hd.encode(d, n.header), e.fixed32.encode(d, n.key), e.uint.encode(d, o))
1213 },
1214 decode(d) {
1215 const n = hd.decode(d),
1216 o = e.fixed32.decode(d),
1217 c = e.uint.decode(d)
1218 return { header: n, key: o, isModerator: !!(1 & c), isAdmin: !!(2 & c) }
1219 },
1220 },
1221 wd = _,
1222 Ad = {
1223 preencode(d, n) {
1224 ;(wd.preencode(d, n.header), e.fixed32.preencode(d, n.key))
1225 },
1226 encode(d, n) {
1227 ;(wd.encode(d, n.header), e.fixed32.encode(d, n.key))
1228 },
1229 decode: (d) => ({ header: wd.decode(d), key: e.fixed32.decode(d) }),
1230 },
1231 Td = {
1232 preencode(d, n) {
1233 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.mentions))
1234 },
1235 encode(d, n) {
1236 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.mentions))
1237 },
1238 decode: (d) => ({ key: e.fixed32.decode(d), mentions: e.uint.decode(d) }),
1239 },
1240 Pd = {
1241 preencode(d, n) {
1242 ;(d.end++, n.memberKey && e.fixed32.preencode(d, n.memberKey))
1243 },
1244 encode(d, n) {
1245 const o = n.memberKey ? 1 : 0
1246 ;(e.uint.encode(d, o), n.memberKey && e.fixed32.encode(d, n.memberKey))
1247 },
1248 decode: (d) => ({ memberKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null }),
1249 },
1250 Sd = Pd,
1251 Rd = {
1252 preencode(d, n) {
1253 ;(d.end++, n.from && e.string.preencode(d, n.from), n.to && e.string.preencode(d, n.to))
1254 },
1255 encode(d, n) {
1256 const o = (n.from ? 1 : 0) | (n.to ? 2 : 0)
1257 ;(e.uint.encode(d, o), n.from && e.string.encode(d, n.from), n.to && e.string.encode(d, n.to))
1258 },
1259 decode(d) {
1260 const n = e.uint.decode(d)
1261 return { from: 1 & n ? e.string.decode(d) : null, to: 2 & n ? e.string.decode(d) : null }
1262 },
1263 },
1264 Cd = e.frame(Pd),
1265 Dd = e.frame(Sd),
1266 Fd = e.frame(Rd),
1267 Md = {
1268 preencode(d, o) {
1269 const c =
1270 (o.memberJoined ? 1 : 0) |
1271 (o.memberLeft ? 2 : 0) |
1272 (o.titleChanged ? 4 : 0) |
1273 (o.callStarted ? 8 : 0) |
1274 (o.callHangup ? 16 : 0) |
1275 (o.callMissed ? 32 : 0) |
1276 (n >= 3 && o.roomAvatarChanged ? 64 : 0) |
1277 (n >= 3 && o.invitationCreated ? 128 : 0) |
1278 (n >= 3 && o.memberRemoved ? 256 : 0) |
1279 (n >= 18 && o.locationShared ? 512 : 0)
1280 ;(e.uint.preencode(d, c),
1281 o.memberJoined && Cd.preencode(d, o.memberJoined),
1282 o.memberLeft && Dd.preencode(d, o.memberLeft),
1283 o.titleChanged && Fd.preencode(d, o.titleChanged),
1284 n >= 3 && o.memberRemoved && si.preencode(d, o.memberRemoved),
1285 n >= 18 && o.locationShared && pi.preencode(d, o.locationShared))
1286 },
1287 encode(d, o) {
1288 const c =
1289 (o.memberJoined ? 1 : 0) |
1290 (o.memberLeft ? 2 : 0) |
1291 (o.titleChanged ? 4 : 0) |
1292 (o.callStarted ? 8 : 0) |
1293 (o.callHangup ? 16 : 0) |
1294 (o.callMissed ? 32 : 0) |
1295 (n >= 3 && o.roomAvatarChanged ? 64 : 0) |
1296 (n >= 3 && o.invitationCreated ? 128 : 0) |
1297 (n >= 3 && o.memberRemoved ? 256 : 0) |
1298 (n >= 18 && o.locationShared ? 512 : 0)
1299 ;(e.uint.encode(d, c),
1300 o.memberJoined && Cd.encode(d, o.memberJoined),
1301 o.memberLeft && Dd.encode(d, o.memberLeft),
1302 o.titleChanged && Fd.encode(d, o.titleChanged),
1303 n >= 3 && o.memberRemoved && si.encode(d, o.memberRemoved),
1304 n >= 18 && o.locationShared && pi.encode(d, o.locationShared))
1305 },
1306 decode(d) {
1307 const o = e.uint.decode(d)
1308 return {
1309 memberJoined: 1 & o ? Cd.decode(d) : null,
1310 memberLeft: 2 & o ? Dd.decode(d) : null,
1311 titleChanged: 4 & o ? Fd.decode(d) : null,
1312 callStarted: !!(8 & o),
1313 callHangup: !!(16 & o),
1314 callMissed: !!(32 & o),
1315 roomAvatarChanged: n >= 3 && !!(64 & o),
1316 invitationCreated: n >= 3 && !!(128 & o),
1317 memberRemoved: n >= 3 && 256 & o ? si.decode(d) : null,
1318 locationShared: n >= 18 && 512 & o ? pi.decode(d) : null,
1319 }
1320 },
1321 },
1322 qd = {
1323 preencode(e, d) {
1324 ;(e.end++, n >= 18 && d.locationShared && ui.preencode(e, d.locationShared))
1325 },
1326 encode(d, o) {
1327 const c =
1328 (o.callStarted ? 1 : 0) |
1329 (o.callHangup ? 2 : 0) |
1330 (o.callMissed ? 4 : 0) |
1331 (n >= 18 && o.locationShared ? 8 : 0)
1332 ;(e.uint.encode(d, c), n >= 18 && o.locationShared && ui.encode(d, o.locationShared))
1333 },
1334 decode(d) {
1335 const o = e.uint.decode(d)
1336 return {
1337 callStarted: !!(1 & o),
1338 callHangup: !!(2 & o),
1339 callMissed: !!(4 & o),
1340 locationShared: n >= 18 && 8 & o ? ui.decode(d) : null,
1341 }
1342 },
1343 },
1344 Ld = {
1345 preencode(d, n) {
1346 ;(e.uint.preencode(d, n.start), e.uint.preencode(d, n.length))
1347 },
1348 encode(d, n) {
1349 ;(e.uint.encode(d, n.start), e.uint.encode(d, n.length))
1350 },
1351 decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
1352 },
1353 Id = e.frame(Ld),
1354 Ed = {
1355 preencode(d, n) {
1356 ;(Id.preencode(d, n.range), e.string.preencode(d, n.content))
1357 },
1358 encode(d, n) {
1359 ;(Id.encode(d, n.range), e.string.encode(d, n.content))
1360 },
1361 decode: (d) => ({ range: Id.decode(d), content: e.string.decode(d) }),
1362 },
1363 Bd = Id,
1364 Nd = {
1365 preencode(d, n) {
1366 ;(Bd.preencode(d, n.range), e.fixed32.preencode(d, n.memberKey))
1367 },
1368 encode(d, n) {
1369 ;(Bd.encode(d, n.range), e.fixed32.encode(d, n.memberKey))
1370 },
1371 decode: (d) => ({ range: Bd.decode(d), memberKey: e.fixed32.decode(d) }),
1372 },
1373 jd = h,
1374 Vd = e.array(e.uint),
1375 Od = {
1376 preencode(d, o) {
1377 ;(d.end++,
1378 o.title && e.string.preencode(d, o.title),
1379 o.description && e.string.preencode(d, o.description),
1380 o.file && jd.preencode(d, o.file),
1381 n >= 7 && o.files && Vd.preencode(d, o.files))
1382 },
1383 encode(d, o) {
1384 const c =
1385 (o.title ? 1 : 0) | (o.description ? 2 : 0) | (o.file ? 4 : 0) | (n >= 7 && o.files ? 8 : 0)
1386 ;(e.uint.encode(d, c),
1387 o.title && e.string.encode(d, o.title),
1388 o.description && e.string.encode(d, o.description),
1389 o.file && jd.encode(d, o.file),
1390 n >= 7 && o.files && Vd.encode(d, o.files))
1391 },
1392 decode(d) {
1393 const o = e.uint.decode(d)
1394 return {
1395 title: 1 & o ? e.string.decode(d) : null,
1396 description: 2 & o ? e.string.decode(d) : null,
1397 file: 4 & o ? jd.decode(d) : null,
1398 files: n >= 7 && 8 & o ? Vd.decode(d) : null,
1399 }
1400 },
1401 },
1402 Jd = Id,
1403 Ud = e.frame(Od),
1404 Hd = {
1405 preencode(d, n) {
1406 ;(Jd.preencode(d, n.range),
1407 e.string.preencode(d, n.url),
1408 d.end++,
1409 n.preview && Ud.preencode(d, n.preview))
1410 },
1411 encode(d, n) {
1412 const o = n.preview ? 1 : 0
1413 ;(Jd.encode(d, n.range),
1414 e.string.encode(d, n.url),
1415 e.uint.encode(d, o),
1416 n.preview && Ud.encode(d, n.preview))
1417 },
1418 decode: (d) => ({
1419 range: Jd.decode(d),
1420 url: e.string.decode(d),
1421 preview: 1 & e.uint.decode(d) ? Ud.decode(d) : null,
1422 }),
1423 },
1424 zd = e.array(e.frame(Nd)),
1425 Gd = e.array(e.frame(Hd)),
1426 Qd = Gd,
1427 Wd = e.array(e.frame(Ld)),
1428 Xd = Wd,
1429 Yd = Wd,
1430 Zd = e.array(e.frame(Ed)),
1431 $d = Wd,
1432 _d = Wd,
1433 en = {
1434 preencode(d, o) {
1435 const c =
1436 (o.mention ? 1 : 0) |
1437 (o.httpLink ? 2 : 0) |
1438 (o.pearLink ? 4 : 0) |
1439 (o.bold ? 8 : 0) |
1440 (o.italic ? 16 : 0) |
1441 (o.code ? 32 : 0) |
1442 (o.emoji ? 64 : 0) |
1443 (o.codeBlock ? 128 : 0) |
1444 (o.strike ? 256 : 0) |
1445 (n >= 11 && o.translation ? 512 : 0)
1446 ;(e.uint.preencode(d, c),
1447 o.mention && zd.preencode(d, o.mention),
1448 o.httpLink && Gd.preencode(d, o.httpLink),
1449 o.pearLink && Qd.preencode(d, o.pearLink),
1450 o.bold && Wd.preencode(d, o.bold),
1451 o.italic && Xd.preencode(d, o.italic),
1452 o.code && Yd.preencode(d, o.code),
1453 o.emoji && Zd.preencode(d, o.emoji),
1454 o.codeBlock && $d.preencode(d, o.codeBlock),
1455 o.strike && _d.preencode(d, o.strike),
1456 n >= 11 && o.translation && li.preencode(d, o.translation))
1457 },
1458 encode(d, o) {
1459 const c =
1460 (o.mention ? 1 : 0) |
1461 (o.httpLink ? 2 : 0) |
1462 (o.pearLink ? 4 : 0) |
1463 (o.bold ? 8 : 0) |
1464 (o.italic ? 16 : 0) |
1465 (o.code ? 32 : 0) |
1466 (o.emoji ? 64 : 0) |
1467 (o.codeBlock ? 128 : 0) |
1468 (o.strike ? 256 : 0) |
1469 (n >= 11 && o.translation ? 512 : 0)
1470 ;(e.uint.encode(d, c),
1471 o.mention && zd.encode(d, o.mention),
1472 o.httpLink && Gd.encode(d, o.httpLink),
1473 o.pearLink && Qd.encode(d, o.pearLink),
1474 o.bold && Wd.encode(d, o.bold),
1475 o.italic && Xd.encode(d, o.italic),
1476 o.code && Yd.encode(d, o.code),
1477 o.emoji && Zd.encode(d, o.emoji),
1478 o.codeBlock && $d.encode(d, o.codeBlock),
1479 o.strike && _d.encode(d, o.strike),
1480 n >= 11 && o.translation && li.encode(d, o.translation))
1481 },
1482 decode(d) {
1483 const o = e.uint.decode(d)
1484 return {
1485 mention: 1 & o ? zd.decode(d) : null,
1486 httpLink: 2 & o ? Gd.decode(d) : null,
1487 pearLink: 4 & o ? Qd.decode(d) : null,
1488 bold: 8 & o ? Wd.decode(d) : null,
1489 italic: 16 & o ? Xd.decode(d) : null,
1490 code: 32 & o ? Yd.decode(d) : null,
1491 emoji: 64 & o ? Zd.decode(d) : null,
1492 codeBlock: 128 & o ? $d.decode(d) : null,
1493 strike: 256 & o ? _d.decode(d) : null,
1494 translation: n >= 11 && 512 & o ? li.decode(d) : null,
1495 }
1496 },
1497 },
1498 dn = e.array(e.frame(g)),
1499 nn = e.frame(en),
1500 on = e.frame(qd),
1501 cn = {
1502 preencode(d, n) {
1503 ;(d.end++,
1504 n.text && e.string.preencode(d, n.text),
1505 n.files && dn.preencode(d, n.files),
1506 n.display && nn.preencode(d, n.display),
1507 n.replyTo && c.preencode(d, n.replyTo),
1508 n.parent && c.preencode(d, n.parent),
1509 n.event && on.preencode(d, n.event))
1510 },
1511 encode(d, o) {
1512 const t =
1513 (o.text ? 1 : 0) |
1514 (o.files ? 2 : 0) |
1515 (o.display ? 4 : 0) |
1516 (o.replyTo ? 8 : 0) |
1517 (o.parent ? 16 : 0) |
1518 (o.event ? 32 : 0) |
1519 (n >= 18 && o.forwarded ? 64 : 0)
1520 ;(e.uint.encode(d, t),
1521 o.text && e.string.encode(d, o.text),
1522 o.files && dn.encode(d, o.files),
1523 o.display && nn.encode(d, o.display),
1524 o.replyTo && c.encode(d, o.replyTo),
1525 o.parent && c.encode(d, o.parent),
1526 o.event && on.encode(d, o.event))
1527 },
1528 decode(d) {
1529 const o = e.uint.decode(d)
1530 return {
1531 text: 1 & o ? e.string.decode(d) : null,
1532 files: 2 & o ? dn.decode(d) : null,
1533 display: 4 & o ? nn.decode(d) : null,
1534 replyTo: 8 & o ? c.decode(d) : null,
1535 parent: 16 & o ? c.decode(d) : null,
1536 event: 32 & o ? on.decode(d) : null,
1537 forwarded: n >= 18 && !!(64 & o),
1538 }
1539 },
1540 },
1541 tn = Vd,
1542 rn = nn,
1543 an = {
1544 preencode(d, n) {
1545 ;(d.end++,
1546 n.text && e.string.preencode(d, n.text),
1547 n.files && tn.preencode(d, n.files),
1548 n.display && rn.preencode(d, n.display),
1549 n.replyTo && c.preencode(d, n.replyTo),
1550 n.parent && c.preencode(d, n.parent))
1551 },
1552 encode(d, o) {
1553 const t =
1554 (o.text ? 1 : 0) |
1555 (o.files ? 2 : 0) |
1556 (o.display ? 4 : 0) |
1557 (o.replyTo ? 8 : 0) |
1558 (o.parent ? 16 : 0) |
1559 (n >= 18 && o.forwarded ? 32 : 0)
1560 ;(e.uint.encode(d, t),
1561 o.text && e.string.encode(d, o.text),
1562 o.files && tn.encode(d, o.files),
1563 o.display && rn.encode(d, o.display),
1564 o.replyTo && c.encode(d, o.replyTo),
1565 o.parent && c.encode(d, o.parent))
1566 },
1567 decode(d) {
1568 const o = e.uint.decode(d)
1569 return {
1570 text: 1 & o ? e.string.decode(d) : null,
1571 files: 2 & o ? tn.decode(d) : null,
1572 display: 4 & o ? rn.decode(d) : null,
1573 replyTo: 8 & o ? c.decode(d) : null,
1574 parent: 16 & o ? c.decode(d) : null,
1575 forwarded: n >= 18 && !!(32 & o),
1576 }
1577 },
1578 },
1579 sn = dn,
1580 pn = nn,
1581 un = {
1582 preencode(d, n) {
1583 ;(d.end++,
1584 n.text && e.string.preencode(d, n.text),
1585 n.files && sn.preencode(d, n.files),
1586 n.display && pn.preencode(d, n.display),
1587 n.replyTo && c.preencode(d, n.replyTo),
1588 n.parent && c.preencode(d, n.parent))
1589 },
1590 encode(d, o) {
1591 const t =
1592 (o.text ? 1 : 0) |
1593 (o.files ? 2 : 0) |
1594 (o.display ? 4 : 0) |
1595 (o.replyTo ? 8 : 0) |
1596 (o.parent ? 16 : 0) |
1597 (n >= 18 && o.forwarded ? 32 : 0)
1598 ;(e.uint.encode(d, t),
1599 o.text && e.string.encode(d, o.text),
1600 o.files && sn.encode(d, o.files),
1601 o.display && pn.encode(d, o.display),
1602 o.replyTo && c.encode(d, o.replyTo),
1603 o.parent && c.encode(d, o.parent))
1604 },
1605 decode(d) {
1606 const o = e.uint.decode(d)
1607 return {
1608 text: 1 & o ? e.string.decode(d) : null,
1609 files: 2 & o ? sn.decode(d) : null,
1610 display: 4 & o ? pn.decode(d) : null,
1611 replyTo: 8 & o ? c.decode(d) : null,
1612 parent: 16 & o ? c.decode(d) : null,
1613 forwarded: n >= 18 && !!(32 & o),
1614 }
1615 },
1616 },
1617 ln = {
1618 preencode(e, d) {
1619 e.end++
1620 },
1621 encode(d, n) {
1622 const o = (n.isEdited ? 1 : 0) | (n.isDeleted ? 2 : 0) | (n.isPinned ? 4 : 0)
1623 e.uint.encode(d, o)
1624 },
1625 decode(d) {
1626 const n = e.uint.decode(d)
1627 return { isEdited: !!(1 & n), isDeleted: !!(2 & n), isPinned: !!(4 & n) }
1628 },
1629 },
1630 fn = {
1631 preencode(d, n) {
1632 ;(e.uint.preencode(d, n.thread), e.uint.preencode(d, n.index))
1633 },
1634 encode(d, n) {
1635 ;(e.uint.encode(d, n.thread), e.uint.encode(d, n.index))
1636 },
1637 decode: (d) => ({ thread: e.uint.decode(d), index: e.uint.decode(d) }),
1638 },
1639 mn = e.frame(O),
1640 yn = {
1641 preencode(d, n) {
1642 ;(e.uint.preencode(d, n.id),
1643 e.uint.preencode(d, n.count),
1644 d.end++,
1645 n.parent && c.preencode(d, n.parent),
1646 n.stats && mn.preencode(d, n.stats))
1647 },
1648 encode(d, n) {
1649 const o = (n.parent ? 1 : 0) | (n.stats ? 2 : 0)
1650 ;(e.uint.encode(d, n.id),
1651 e.uint.encode(d, n.count),
1652 e.uint.encode(d, o),
1653 n.parent && c.encode(d, n.parent),
1654 n.stats && mn.encode(d, n.stats))
1655 },
1656 decode(d) {
1657 const n = e.uint.decode(d),
1658 o = e.uint.decode(d),
1659 t = e.uint.decode(d)
1660 return {
1661 id: n,
1662 count: o,
1663 parent: 1 & t ? c.decode(d) : null,
1664 stats: 2 & t ? mn.decode(d) : null,
1665 }
1666 },
1667 },
1668 bn = e.frame(ln),
1669 xn = e.frame(an),
1670 kn = e.frame(Md),
1671 vn = {
1672 preencode(d, n) {
1673 ;(fn.preencode(d, n.id),
1674 c.preencode(d, n.oplog),
1675 e.uint.preencode(d, n.clock),
1676 e.uint.preencode(d, n.timestamp),
1677 d.end++,
1678 n.editedAt && e.uint.preencode(d, n.editedAt),
1679 bn.preencode(d, n.status),
1680 n.message && xn.preencode(d, n.message),
1681 n.event && kn.preencode(d, n.event))
1682 },
1683 encode(d, n) {
1684 const o = (n.editedAt ? 1 : 0) | (n.message ? 2 : 0) | (n.event ? 4 : 0)
1685 ;(fn.encode(d, n.id),
1686 c.encode(d, n.oplog),
1687 e.uint.encode(d, n.clock),
1688 e.uint.encode(d, n.timestamp),
1689 e.uint.encode(d, o),
1690 n.editedAt && e.uint.encode(d, n.editedAt),
1691 bn.encode(d, n.status),
1692 n.message && xn.encode(d, n.message),
1693 n.event && kn.encode(d, n.event))
1694 },
1695 decode(d) {
1696 const n = fn.decode(d),
1697 o = c.decode(d),
1698 t = e.uint.decode(d),
1699 r = e.uint.decode(d),
1700 i = e.uint.decode(d)
1701 return {
1702 id: n,
1703 oplog: o,
1704 clock: t,
1705 timestamp: r,
1706 editedAt: 1 & i ? e.uint.decode(d) : 0,
1707 status: bn.decode(d),
1708 message: 2 & i ? xn.decode(d) : null,
1709 event: 4 & i ? kn.decode(d) : null,
1710 }
1711 },
1712 },
1713 gn = bn,
1714 hn = e.frame(un),
1715 Kn = kn,
1716 wn = {
1717 preencode(d, n) {
1718 ;(fn.preencode(d, n.id),
1719 c.preencode(d, n.oplog),
1720 e.uint.preencode(d, n.clock),
1721 e.uint.preencode(d, n.timestamp),
1722 d.end++,
1723 n.editedAt && e.uint.preencode(d, n.editedAt),
1724 gn.preencode(d, n.status),
1725 n.message && hn.preencode(d, n.message),
1726 n.event && Kn.preencode(d, n.event))
1727 },
1728 encode(d, n) {
1729 const o = (n.editedAt ? 1 : 0) | (n.message ? 2 : 0) | (n.event ? 4 : 0)
1730 ;(fn.encode(d, n.id),
1731 c.encode(d, n.oplog),
1732 e.uint.encode(d, n.clock),
1733 e.uint.encode(d, n.timestamp),
1734 e.uint.encode(d, o),
1735 n.editedAt && e.uint.encode(d, n.editedAt),
1736 gn.encode(d, n.status),
1737 n.message && hn.encode(d, n.message),
1738 n.event && Kn.encode(d, n.event))
1739 },
1740 decode(d) {
1741 const n = fn.decode(d),
1742 o = c.decode(d),
1743 t = e.uint.decode(d),
1744 r = e.uint.decode(d),
1745 i = e.uint.decode(d)
1746 return {
1747 id: n,
1748 oplog: o,
1749 clock: t,
1750 timestamp: r,
1751 editedAt: 1 & i ? e.uint.decode(d) : 0,
1752 status: gn.decode(d),
1753 message: 2 & i ? hn.decode(d) : null,
1754 event: 4 & i ? Kn.decode(d) : null,
1755 }
1756 },
1757 },
1758 An = _,
1759 Tn = e.frame(cn),
1760 Pn = {
1761 preencode(e, d) {
1762 ;(An.preencode(e, d.header), Tn.preencode(e, d.message))
1763 },
1764 encode(e, d) {
1765 ;(An.encode(e, d.header), Tn.encode(e, d.message))
1766 },
1767 decode: (e) => ({ header: An.decode(e), message: Tn.decode(e) }),
1768 },
1769 Sn = _,
1770 Rn = {
1771 preencode(e, d) {
1772 ;(Sn.preencode(e, d.header), c.preencode(e, d.oplog))
1773 },
1774 encode(e, d) {
1775 ;(Sn.encode(e, d.header), c.encode(e, d.oplog))
1776 },
1777 decode: (e) => ({ header: Sn.decode(e), oplog: c.decode(e) }),
1778 },
1779 Cn = _,
1780 Dn = Tn,
1781 Fn = {
1782 preencode(e, d) {
1783 ;(Cn.preencode(e, d.header), c.preencode(e, d.oplog), Dn.preencode(e, d.message))
1784 },
1785 encode(e, d) {
1786 ;(Cn.encode(e, d.header), c.encode(e, d.oplog), Dn.encode(e, d.message))
1787 },
1788 decode: (e) => ({ header: Cn.decode(e), oplog: c.decode(e), message: Dn.decode(e) }),
1789 },
1790 Mn = _,
1791 qn = {
1792 preencode(e, d) {
1793 ;(Mn.preencode(e, d.header), c.preencode(e, d.oplog), e.end++)
1794 },
1795 encode(d, n) {
1796 const o = n.isPinned ? 1 : 0
1797 ;(Mn.encode(d, n.header), c.encode(d, n.oplog), e.uint.encode(d, o))
1798 },
1799 decode: (d) => ({
1800 header: Mn.decode(d),
1801 oplog: c.decode(d),
1802 isPinned: !!(1 & e.uint.decode(d)),
1803 }),
1804 },
1805 Ln = {
1806 preencode(d, n) {
1807 ;(fn.preencode(d, n.id),
1808 e.fixed32.preencode(d, n.sender),
1809 e.uint.preencode(d, n.clock),
1810 e.string.preencode(d, n.reaction))
1811 },
1812 encode(d, n) {
1813 ;(fn.encode(d, n.id),
1814 e.fixed32.encode(d, n.sender),
1815 e.uint.encode(d, n.clock),
1816 e.string.encode(d, n.reaction))
1817 },
1818 decode: (d) => ({
1819 id: fn.decode(d),
1820 sender: e.fixed32.decode(d),
1821 clock: e.uint.decode(d),
1822 reaction: e.string.decode(d),
1823 }),
1824 },
1825 In = {
1826 preencode(d, n) {
1827 ;(e.string.preencode(d, n.text), e.uint.preencode(d, n.count))
1828 },
1829 encode(d, n) {
1830 ;(e.string.encode(d, n.text), e.uint.encode(d, n.count))
1831 },
1832 decode: (d) => ({ text: e.string.decode(d), count: e.uint.decode(d) }),
1833 },
1834 En = e.array(e.frame(In)),
1835 Bn = {
1836 preencode(d, o) {
1837 ;(fn.preencode(d, o.id),
1838 e.uint.preencode(d, o.total),
1839 En.preencode(d, o.reactions),
1840 d.end++,
1841 n >= 11 && o.editedAt && e.uint.preencode(d, o.editedAt))
1842 },
1843 encode(d, o) {
1844 const c = n >= 11 && o.editedAt ? 1 : 0
1845 ;(fn.encode(d, o.id),
1846 e.uint.encode(d, o.total),
1847 En.encode(d, o.reactions),
1848 e.uint.encode(d, c),
1849 n >= 11 && o.editedAt && e.uint.encode(d, o.editedAt))
1850 },
1851 decode(d) {
1852 const o = fn.decode(d),
1853 c = e.uint.decode(d),
1854 t = En.decode(d),
1855 r = d.start < d.end ? e.uint.decode(d) : 0
1856 return { id: o, total: c, reactions: t, editedAt: n >= 11 && 1 & r ? e.uint.decode(d) : 0 }
1857 },
1858 },
1859 Nn = _,
1860 jn = {
1861 preencode(d, n) {
1862 ;(Nn.preencode(d, n.header), c.preencode(d, n.oplog), e.string.preencode(d, n.reaction))
1863 },
1864 encode(d, n) {
1865 ;(Nn.encode(d, n.header), c.encode(d, n.oplog), e.string.encode(d, n.reaction))
1866 },
1867 decode: (d) => ({ header: Nn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1868 },
1869 Vn = _,
1870 On = {
1871 preencode(d, n) {
1872 ;(Vn.preencode(d, n.header), c.preencode(d, n.oplog), e.string.preencode(d, n.reaction))
1873 },
1874 encode(d, n) {
1875 ;(Vn.encode(d, n.header), c.encode(d, n.oplog), e.string.encode(d, n.reaction))
1876 },
1877 decode: (d) => ({ header: Vn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1878 },
1879 Jn = _,
1880 Un = e.frame(Z),
1881 Hn = {
1882 preencode(d, n) {
1883 ;(Jn.preencode(d, n.header), e.uint.preencode(d, n.key), Un.preencode(d, n.config))
1884 },
1885 encode(d, n) {
1886 ;(Jn.encode(d, n.header), e.uint.encode(d, n.key), Un.encode(d, n.config))
1887 },
1888 decode: (d) => ({ header: Jn.decode(d), key: e.uint.decode(d), config: Un.decode(d) }),
1889 },
1890 zn = {
1891 preencode(d, n) {
1892 ;(e.fixed32.preencode(d, n.memberKey),
1893 e.string.preencode(d, n.displayName),
1894 d.end++,
1895 n.avatar && fi.preencode(d, n.avatar))
1896 },
1897 encode(d, n) {
1898 const o = n.avatar ? 1 : 0
1899 ;(e.fixed32.encode(d, n.memberKey),
1900 e.string.encode(d, n.displayName),
1901 e.uint.encode(d, o),
1902 n.avatar && fi.encode(d, n.avatar))
1903 },
1904 decode: (d) => ({
1905 memberKey: e.fixed32.decode(d),
1906 displayName: e.string.decode(d),
1907 avatar: 1 & e.uint.decode(d) ? fi.decode(d) : null,
1908 }),
1909 },
1910 Gn = {
1911 preencode(d, n) {
1912 ;(e.fixed32.preencode(d, n.key), d.end++, n.username && e.string.preencode(d, n.username))
1913 },
1914 encode(d, n) {
1915 const o = n.username ? 1 : 0
1916 ;(e.fixed32.encode(d, n.key),
1917 e.uint.encode(d, o),
1918 n.username && e.string.encode(d, n.username))
1919 },
1920 decode: (d) => ({
1921 key: e.fixed32.decode(d),
1922 username: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
1923 }),
1924 },
1925 Qn = e.frame(Gn),
1926 Wn = {
1927 preencode(d, n) {
1928 ;(e.fixed32.preencode(d, n.publicKey),
1929 d.end++,
1930 n.discoveryCoreKey && e.fixed32.preencode(d, n.discoveryCoreKey),
1931 n.userRegistry && Qn.preencode(d, n.userRegistry))
1932 },
1933 encode(d, n) {
1934 const o = (n.discoveryCoreKey ? 1 : 0) | (n.userRegistry ? 2 : 0)
1935 ;(e.fixed32.encode(d, n.publicKey),
1936 e.uint.encode(d, o),
1937 n.discoveryCoreKey && e.fixed32.encode(d, n.discoveryCoreKey),
1938 n.userRegistry && Qn.encode(d, n.userRegistry))
1939 },
1940 decode(d) {
1941 const n = e.fixed32.decode(d),
1942 o = e.uint.decode(d)
1943 return {
1944 publicKey: n,
1945 discoveryCoreKey: 1 & o ? e.fixed32.decode(d) : null,
1946 userRegistry: 2 & o ? Qn.decode(d) : null,
1947 }
1948 },
1949 },
1950 Xn = _,
1951 Yn = e.frame(Q),
1952 Zn = e.frame(W),
1953 $n = Un,
1954 _n = e.frame(Wn),
1955 eo = xe,
1956 no = e.array(e.frame(le)),
1957 oo = {
1958 preencode(e, d) {
1959 ;(Xn.preencode(e, d.header),
1960 Yn.preencode(e, d.digest),
1961 Zn.preencode(e, d.capabilities),
1962 e.end++,
1963 d.config && $n.preencode(e, d.config),
1964 d.identity && _n.preencode(e, d.identity),
1965 d.bootstrapDevice && eo.preencode(e, d.bootstrapDevice),
1966 d.initialMembers && no.preencode(e, d.initialMembers))
1967 },
1968 encode(d, n) {
1969 const o =
1970 (n.config ? 1 : 0) |
1971 (n.identity ? 2 : 0) |
1972 (n.bootstrapDevice ? 4 : 0) |
1973 (n.initialMembers ? 8 : 0)
1974 ;(Xn.encode(d, n.header),
1975 Yn.encode(d, n.digest),
1976 Zn.encode(d, n.capabilities),
1977 e.uint.encode(d, o),
1978 n.config && $n.encode(d, n.config),
1979 n.identity && _n.encode(d, n.identity),
1980 n.bootstrapDevice && eo.encode(d, n.bootstrapDevice),
1981 n.initialMembers && no.encode(d, n.initialMembers))
1982 },
1983 decode(d) {
1984 const n = Xn.decode(d),
1985 o = Yn.decode(d),
1986 c = Zn.decode(d),
1987 t = e.uint.decode(d)
1988 return {
1989 header: n,
1990 digest: o,
1991 capabilities: c,
1992 config: 1 & t ? $n.decode(d) : null,
1993 identity: 2 & t ? _n.decode(d) : null,
1994 bootstrapDevice: 4 & t ? eo.decode(d) : null,
1995 initialMembers: 8 & t ? no.decode(d) : null,
1996 }
1997 },
1998 },
1999 co = _,
2000 to = {
2001 preencode(d, n) {
2002 ;(co.preencode(d, n.header), e.uint.preencode(d, n.version))
2003 },
2004 encode(d, n) {
2005 ;(co.encode(d, n.header), e.uint.encode(d, n.version))
2006 },
2007 decode: (d) => ({ header: co.decode(d), version: e.uint.decode(d) }),
2008 },
2009 ro = _,
2010 io = G,
2011 ao = {
2012 preencode(d, n) {
2013 ;(ro.preencode(d, n.header), e.uint.preencode(d, n.key), io.preencode(d, n.settings))
2014 },
2015 encode(d, n) {
2016 ;(ro.encode(d, n.header), e.uint.encode(d, n.key), io.encode(d, n.settings))
2017 },
2018 decode: (d) => ({ header: ro.decode(d), key: e.uint.decode(d), settings: io.decode(d) }),
2019 },
2020 so = {
2021 preencode(d, n) {
2022 ;(e.fixed32.preencode(d, n.memberKey),
2023 mi.preencode(d, n.status),
2024 d.end++,
2025 n.mailbox && e.fixed32.preencode(d, n.mailbox),
2026 n.roomKey && e.fixed32.preencode(d, n.roomKey))
2027 },
2028 encode(d, n) {
2029 const o = (n.mailbox ? 1 : 0) | (n.roomKey ? 2 : 0)
2030 ;(e.fixed32.encode(d, n.memberKey),
2031 mi.encode(d, n.status),
2032 e.uint.encode(d, o),
2033 n.mailbox && e.fixed32.encode(d, n.mailbox),
2034 n.roomKey && e.fixed32.encode(d, n.roomKey))
2035 },
2036 decode(d) {
2037 const n = e.fixed32.decode(d),
2038 o = mi.decode(d),
2039 c = e.uint.decode(d)
2040 return {
2041 memberKey: n,
2042 status: o,
2043 mailbox: 1 & c ? e.fixed32.decode(d) : null,
2044 roomKey: 2 & c ? e.fixed32.decode(d) : null,
2045 }
2046 },
2047 },
2048 po = {
2049 preencode(d, n) {
2050 ;(e.fixed32.preencode(d, n.roomKey),
2051 e.buffer.preencode(d, n.encryptionKey),
2052 e.fixed32.preencode(d, n.seed),
2053 o.preencode(d, n.initiator),
2054 e.fixed32.preencode(d, n.fastForwardTo))
2055 },
2056 encode(d, n) {
2057 ;(e.fixed32.encode(d, n.roomKey),
2058 e.buffer.encode(d, n.encryptionKey),
2059 e.fixed32.encode(d, n.seed),
2060 o.encode(d, n.initiator),
2061 e.fixed32.encode(d, n.fastForwardTo))
2062 },
2063 decode: (d) => ({
2064 roomKey: e.fixed32.decode(d),
2065 encryptionKey: e.buffer.decode(d),
2066 seed: e.fixed32.decode(d),
2067 initiator: o.decode(d),
2068 fastForwardTo: e.fixed32.decode(d),
2069 }),
2070 },
2071 uo = e.array(e.frame(po)),
2072 lo = Y,
2073 fo = {
2074 preencode(e, d) {
2075 ;(uo.preencode(e, d.sharedRooms), lo.preencode(e, d.blockedContacts))
2076 },
2077 encode(e, d) {
2078 ;(uo.encode(e, d.sharedRooms), lo.encode(e, d.blockedContacts))
2079 },
2080 decode: (e) => ({ sharedRooms: uo.decode(e), blockedContacts: lo.decode(e) }),
2081 },
2082 mo = _n,
2083 yo = {
2084 preencode(e, d) {
2085 mo.preencode(e, d.identity)
2086 },
2087 encode(e, d) {
2088 mo.encode(e, d.identity)
2089 },
2090 decode: (e) => ({ identity: mo.decode(e) }),
2091 },
2092 bo = {
2093 preencode(d, n) {
2094 ;(e.uint.preencode(d, n.rooms), e.uint.preencode(d, n.contacts))
2095 },
2096 encode(d, n) {
2097 ;(e.uint.encode(d, n.rooms), e.uint.encode(d, n.contacts))
2098 },
2099 decode: (d) => ({ rooms: e.uint.decode(d), contacts: e.uint.decode(d) }),
2100 },
2101 xo = {
2102 preencode(d, n) {
2103 ;(e.uint.preencode(d, n.rooms), e.uint.preencode(d, n.contactRequests))
2104 },
2105 encode(d, n) {
2106 ;(e.uint.encode(d, n.rooms), e.uint.encode(d, n.contactRequests))
2107 },
2108 decode: (d) => ({ rooms: e.uint.decode(d), contactRequests: e.uint.decode(d) }),
2109 },
2110 ko = {
2111 preencode(d, n) {
2112 e.buffer.preencode(d, n.entropy)
2113 },
2114 encode(d, n) {
2115 e.buffer.encode(d, n.entropy)
2116 },
2117 decode: (d) => ({ entropy: e.buffer.decode(d) }),
2118 },
2119 vo = {
2120 preencode(d, n) {
2121 ;(e.fixed32.preencode(d, n.publicKey),
2122 e.fixed32.preencode(d, n.devicePublicKey),
2123 e.fixed32.preencode(d, n.writerKey))
2124 },
2125 encode(d, n) {
2126 ;(e.fixed32.encode(d, n.publicKey),
2127 e.fixed32.encode(d, n.devicePublicKey),
2128 e.fixed32.encode(d, n.writerKey))
2129 },
2130 decode: (d) => ({
2131 publicKey: e.fixed32.decode(d),
2132 devicePublicKey: e.fixed32.decode(d),
2133 writerKey: e.fixed32.decode(d),
2134 }),
2135 },
2136 go = e.frame(vo),
2137 ho = {
2138 preencode(d, c) {
2139 ;(e.fixed32.preencode(d, c.id),
2140 e.fixed32.preencode(d, c.invitationSeed),
2141 e.fixed32.preencode(d, c.mailbox),
2142 r.preencode(d, c.responseKeyPair),
2143 o.preencode(d, c.initiator),
2144 o.preencode(d, c.inviter),
2145 d.end++,
2146 c.identity && go.preencode(d, c.identity),
2147 n >= 20 && c.buildType && Vt.preencode(d, c.buildType))
2148 },
2149 encode(d, c) {
2150 const t = (c.identity ? 1 : 0) | (n >= 20 && c.buildType ? 2 : 0)
2151 ;(e.fixed32.encode(d, c.id),
2152 e.fixed32.encode(d, c.invitationSeed),
2153 e.fixed32.encode(d, c.mailbox),
2154 r.encode(d, c.responseKeyPair),
2155 o.encode(d, c.initiator),
2156 o.encode(d, c.inviter),
2157 e.uint.encode(d, t),
2158 c.identity && go.encode(d, c.identity),
2159 n >= 20 && c.buildType && Vt.encode(d, c.buildType))
2160 },
2161 decode(d) {
2162 const c = e.fixed32.decode(d),
2163 t = e.fixed32.decode(d),
2164 i = e.fixed32.decode(d),
2165 a = r.decode(d),
2166 s = o.decode(d),
2167 p = o.decode(d),
2168 u = e.uint.decode(d)
2169 return {
2170 id: c,
2171 invitationSeed: t,
2172 mailbox: i,
2173 responseKeyPair: a,
2174 initiator: s,
2175 inviter: p,
2176 identity: 1 & u ? go.decode(d) : null,
2177 buildType: n >= 20 && 2 & u ? Vt.decode(d) : null,
2178 }
2179 },
2180 },
2181 Ko = _,
2182 wo = {
2183 preencode(d, n) {
2184 ;(Ko.preencode(d, n.header), e.buffer.preencode(d, n.blindResponse))
2185 },
2186 encode(d, n) {
2187 ;(Ko.encode(d, n.header), e.buffer.encode(d, n.blindResponse))
2188 },
2189 decode: (d) => ({ header: Ko.decode(d), blindResponse: e.buffer.decode(d) }),
2190 },
2191 Ao = _,
2192 To = e.frame(ho),
2193 Po = {
2194 preencode(e, d) {
2195 ;(Ao.preencode(e, d.header), To.preencode(e, d.invitation))
2196 },
2197 encode(e, d) {
2198 ;(Ao.encode(e, d.header), To.encode(e, d.invitation))
2199 },
2200 decode: (e) => ({ header: Ao.decode(e), invitation: To.decode(e) }),
2201 },
2202 So = _,
2203 Ro = {
2204 preencode(d, n) {
2205 ;(So.preencode(d, n.header), e.fixed32.preencode(d, n.id))
2206 },
2207 encode(d, n) {
2208 ;(So.encode(d, n.header), e.fixed32.encode(d, n.id))
2209 },
2210 decode: (d) => ({ header: So.decode(d), id: e.fixed32.decode(d) }),
2211 },
2212 Co = {
2213 preencode(d, n) {
2214 ;(e.fixed32.preencode(d, n.publicKey),
2215 e.fixed32.preencode(d, n.devicePublicKey),
2216 d.end++,
2217 n.privateProfileKey && e.fixed32.preencode(d, n.privateProfileKey),
2218 n.deviceKeyPair && r.preencode(d, n.deviceKeyPair),
2219 e.buffer.preencode(d, n.deviceProof))
2220 },
2221 encode(d, n) {
2222 const o = (n.privateProfileKey ? 1 : 0) | (n.deviceKeyPair ? 2 : 0)
2223 ;(e.fixed32.encode(d, n.publicKey),
2224 e.fixed32.encode(d, n.devicePublicKey),
2225 e.uint.encode(d, o),
2226 n.privateProfileKey && e.fixed32.encode(d, n.privateProfileKey),
2227 n.deviceKeyPair && r.encode(d, n.deviceKeyPair),
2228 e.buffer.encode(d, n.deviceProof))
2229 },
2230 decode(d) {
2231 const n = e.fixed32.decode(d),
2232 o = e.fixed32.decode(d),
2233 c = e.uint.decode(d)
2234 return {
2235 publicKey: n,
2236 devicePublicKey: o,
2237 privateProfileKey: 1 & c ? e.fixed32.decode(d) : null,
2238 deviceKeyPair: 2 & c ? r.decode(d) : null,
2239 deviceProof: e.buffer.decode(d),
2240 }
2241 },
2242 },
2243 Do = {
2244 preencode(e, d) {
2245 e.end++
2246 },
2247 encode(d, o) {
2248 const c =
2249 (o.isActive ? 1 : 0) |
2250 (o.isFullyMuted ? 2 : 0) |
2251 (o.isMentionsOnlyMuted ? 4 : 0) |
2252 (n >= 9 && o.isReadOnly ? 8 : 0) |
2253 (n >= 18 && o.isFavorite ? 16 : 0)
2254 e.uint.encode(d, c)
2255 },
2256 decode(d) {
2257 const o = e.uint.decode(d)
2258 return {
2259 isActive: !!(1 & o),
2260 isFullyMuted: !!(2 & o),
2261 isMentionsOnlyMuted: !!(4 & o),
2262 isReadOnly: n >= 9 && !!(8 & o),
2263 isFavorite: n >= 18 && !!(16 & o),
2264 }
2265 },
2266 },
2267 Fo = e.frame(Do),
2268 Mo = e.frame(Co),
2269 qo = go,
2270 Lo = {
2271 preencode(d, c) {
2272 ;(e.fixed32.preencode(d, c.roomKey),
2273 e.buffer.preencode(d, c.encryptionKey),
2274 e.fixed32.preencode(d, c.mailbox),
2275 Fo.preencode(d, c.status),
2276 e.uint.preencode(d, c.clock),
2277 d.end++,
2278 c.initiator && o.preencode(d, c.initiator),
2279 c.fastForwardTo && e.fixed32.preencode(d, c.fastForwardTo),
2280 c.identitySwap && Mo.preencode(d, c.identitySwap),
2281 n >= 6 && c.identitySwapV2 && qo.preencode(d, c.identitySwapV2),
2282 n >= 10 && c.contact && e.fixed32.preencode(d, c.contact))
2283 },
2284 encode(d, c) {
2285 const t =
2286 (c.initiator ? 1 : 0) |
2287 (c.fastForwardTo ? 2 : 0) |
2288 (c.identitySwap ? 4 : 0) |
2289 (n >= 6 && c.identitySwapV2 ? 8 : 0) |
2290 (n >= 10 && c.contact ? 16 : 0)
2291 ;(e.fixed32.encode(d, c.roomKey),
2292 e.buffer.encode(d, c.encryptionKey),
2293 e.fixed32.encode(d, c.mailbox),
2294 Fo.encode(d, c.status),
2295 e.uint.encode(d, c.clock),
2296 e.uint.encode(d, t),
2297 c.initiator && o.encode(d, c.initiator),
2298 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2299 c.identitySwap && Mo.encode(d, c.identitySwap),
2300 n >= 6 && c.identitySwapV2 && qo.encode(d, c.identitySwapV2),
2301 n >= 10 && c.contact && e.fixed32.encode(d, c.contact))
2302 },
2303 decode(d) {
2304 const c = e.fixed32.decode(d),
2305 t = e.buffer.decode(d),
2306 r = e.fixed32.decode(d),
2307 i = Fo.decode(d),
2308 a = e.uint.decode(d),
2309 s = e.uint.decode(d)
2310 return {
2311 roomKey: c,
2312 encryptionKey: t,
2313 mailbox: r,
2314 status: i,
2315 clock: a,
2316 initiator: 1 & s ? o.decode(d) : null,
2317 fastForwardTo: 2 & s ? e.fixed32.decode(d) : null,
2318 identitySwap: 4 & s ? Mo.decode(d) : null,
2319 identitySwapV2: n >= 6 && 8 & s ? qo.decode(d) : null,
2320 contact: n >= 10 && 16 & s ? e.fixed32.decode(d) : null,
2321 }
2322 },
2323 },
2324 Io = _,
2325 Eo = {
2326 preencode(d, n) {
2327 ;(Io.preencode(d, n.header),
2328 e.fixed32.preencode(d, n.roomKey),
2329 e.buffer.preencode(d, n.encryptionKey),
2330 e.fixed32.preencode(d, n.mailbox),
2331 d.end++,
2332 n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo),
2333 n.initiator && o.preencode(d, n.initiator),
2334 n.dm && e.fixed32.preencode(d, n.dm))
2335 },
2336 encode(d, c) {
2337 const t =
2338 (c.fastForwardTo ? 1 : 0) |
2339 (c.initiator ? 2 : 0) |
2340 (c.dm ? 4 : 0) |
2341 (n >= 9 && c.isReadOnly ? 8 : 0)
2342 ;(Io.encode(d, c.header),
2343 e.fixed32.encode(d, c.roomKey),
2344 e.buffer.encode(d, c.encryptionKey),
2345 e.fixed32.encode(d, c.mailbox),
2346 e.uint.encode(d, t),
2347 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2348 c.initiator && o.encode(d, c.initiator),
2349 c.dm && e.fixed32.encode(d, c.dm))
2350 },
2351 decode(d) {
2352 const c = Io.decode(d),
2353 t = e.fixed32.decode(d),
2354 r = e.buffer.decode(d),
2355 i = e.fixed32.decode(d),
2356 a = e.uint.decode(d)
2357 return {
2358 header: c,
2359 roomKey: t,
2360 encryptionKey: r,
2361 mailbox: i,
2362 fastForwardTo: 1 & a ? e.fixed32.decode(d) : null,
2363 initiator: 2 & a ? o.decode(d) : null,
2364 dm: 4 & a ? e.fixed32.decode(d) : null,
2365 isReadOnly: n >= 9 && !!(8 & a),
2366 }
2367 },
2368 },
2369 Bo = _,
2370 No = {
2371 preencode(d, n) {
2372 ;(Bo.preencode(d, n.header), e.fixed32.preencode(d, n.discoveryKey))
2373 },
2374 encode(d, n) {
2375 ;(Bo.encode(d, n.header), e.fixed32.encode(d, n.discoveryKey))
2376 },
2377 decode: (d) => ({ header: Bo.decode(d), discoveryKey: e.fixed32.decode(d) }),
2378 },
2379 jo = _,
2380 Vo = Fo,
2381 Oo = {
2382 preencode(d, n) {
2383 ;(jo.preencode(d, n.header),
2384 e.fixed32.preencode(d, n.roomKey),
2385 e.uint.preencode(d, n.key),
2386 Vo.preencode(d, n.status))
2387 },
2388 encode(d, n) {
2389 ;(jo.encode(d, n.header),
2390 e.fixed32.encode(d, n.roomKey),
2391 e.uint.encode(d, n.key),
2392 Vo.encode(d, n.status))
2393 },
2394 decode: (d) => ({
2395 header: jo.decode(d),
2396 roomKey: e.fixed32.decode(d),
2397 key: e.uint.decode(d),
2398 status: Vo.decode(d),
2399 }),
2400 },
2401 Jo = {
2402 preencode(e, d) {
2403 e.end++
2404 },
2405 encode(d, n) {
2406 const o = n.isBlocked ? 1 : 0
2407 e.uint.encode(d, o)
2408 },
2409 decode: (d) => ({ isBlocked: !!(1 & e.uint.decode(d)) }),
2410 },
2411 Uo = {
2412 preencode(d, n) {
2413 ;(e.fixed32.preencode(d, n.memberKey),
2414 e.uint.preencode(d, n.clock),
2415 yi.preencode(d, n.status),
2416 d.end++,
2417 n.mailbox && e.fixed32.preencode(d, n.mailbox),
2418 n.roomKey && e.fixed32.preencode(d, n.roomKey))
2419 },
2420 encode(d, n) {
2421 const o = (n.mailbox ? 1 : 0) | (n.roomKey ? 2 : 0)
2422 ;(e.fixed32.encode(d, n.memberKey),
2423 e.uint.encode(d, n.clock),
2424 yi.encode(d, n.status),
2425 e.uint.encode(d, o),
2426 n.mailbox && e.fixed32.encode(d, n.mailbox),
2427 n.roomKey && e.fixed32.encode(d, n.roomKey))
2428 },
2429 decode(d) {
2430 const n = e.fixed32.decode(d),
2431 o = e.uint.decode(d),
2432 c = yi.decode(d),
2433 t = e.uint.decode(d)
2434 return {
2435 memberKey: n,
2436 clock: o,
2437 status: c,
2438 mailbox: 1 & t ? e.fixed32.decode(d) : null,
2439 roomKey: 2 & t ? e.fixed32.decode(d) : null,
2440 }
2441 },
2442 },
2443 Ho = _,
2444 zo = e.frame(so),
2445 Go = {
2446 preencode(e, d) {
2447 ;(Ho.preencode(e, d.header), zo.preencode(e, d.contact))
2448 },
2449 encode(e, d) {
2450 ;(Ho.encode(e, d.header), zo.encode(e, d.contact))
2451 },
2452 decode: (e) => ({ header: Ho.decode(e), contact: zo.decode(e) }),
2453 },
2454 Qo = _,
2455 Wo = {
2456 preencode(d, n) {
2457 ;(Qo.preencode(d, n.header),
2458 e.fixed32.preencode(d, n.memberKey),
2459 e.uint.preencode(d, n.key),
2460 bi.preencode(d, n.status))
2461 },
2462 encode(d, n) {
2463 ;(Qo.encode(d, n.header),
2464 e.fixed32.encode(d, n.memberKey),
2465 e.uint.encode(d, n.key),
2466 bi.encode(d, n.status))
2467 },
2468 decode: (d) => ({
2469 header: Qo.decode(d),
2470 memberKey: e.fixed32.decode(d),
2471 key: e.uint.decode(d),
2472 status: bi.decode(d),
2473 }),
2474 },
2475 Xo = _,
2476 Yo = {
2477 preencode(d, n) {
2478 ;(Xo.preencode(d, n.header), e.fixed32.preencode(d, n.memberKey))
2479 },
2480 encode(d, n) {
2481 ;(Xo.encode(d, n.header), e.fixed32.encode(d, n.memberKey))
2482 },
2483 decode: (d) => ({ header: Xo.decode(d), memberKey: e.fixed32.decode(d) }),
2484 },
2485 Zo = {
2486 preencode(e, d) {
2487 e.end++
2488 },
2489 encode(d, n) {
2490 const o =
2491 (n.isPending ? 1 : 0) |
2492 (n.isAccepted ? 2 : 0) |
2493 (n.isRejected ? 4 : 0) |
2494 (n.isDiscarded ? 8 : 0) |
2495 (n.isSeen ? 16 : 0)
2496 e.uint.encode(d, o)
2497 },
2498 decode(d) {
2499 const n = e.uint.decode(d)
2500 return {
2501 isPending: !!(1 & n),
2502 isAccepted: !!(2 & n),
2503 isRejected: !!(4 & n),
2504 isDiscarded: !!(8 & n),
2505 isSeen: !!(16 & n),
2506 }
2507 },
2508 },
2509 $o = ke,
2510 _o = e.frame(i),
2511 ec = {
2512 preencode(d, n) {
2513 ;($o.preencode(d, n.sender),
2514 _o.preencode(d, n.keys),
2515 e.fixed32.preencode(d, n.mailbox),
2516 d.end++,
2517 n.message && e.string.preencode(d, n.message))
2518 },
2519 encode(d, n) {
2520 const o = n.message ? 1 : 0
2521 ;($o.encode(d, n.sender),
2522 _o.encode(d, n.keys),
2523 e.fixed32.encode(d, n.mailbox),
2524 e.uint.encode(d, o),
2525 n.message && e.string.encode(d, n.message))
2526 },
2527 decode: (d) => ({
2528 sender: $o.decode(d),
2529 keys: _o.decode(d),
2530 mailbox: e.fixed32.decode(d),
2531 message: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2532 }),
2533 },
2534 dc = e.frame(ec),
2535 nc = {
2536 preencode(e, d) {
2537 ;(dc.preencode(e, d.body), ce.preencode(e, d.attestation))
2538 },
2539 encode(e, d) {
2540 ;(dc.encode(e, d.body), ce.encode(e, d.attestation))
2541 },
2542 decode: (e) => ({ body: dc.decode(e), attestation: ce.decode(e) }),
2543 },
2544 oc = ue,
2545 cc = e.frame(Zo),
2546 tc = _o,
2547 rc = {
2548 preencode(d, o) {
2549 ;(e.fixed32.preencode(d, o.memberKey),
2550 e.uint.preencode(d, o.clock),
2551 oc.preencode(d, o.sender),
2552 cc.preencode(d, o.status),
2553 tc.preencode(d, o.keys),
2554 e.fixed32.preencode(d, o.mailbox),
2555 d.end++,
2556 o.message && e.string.preencode(d, o.message),
2557 n >= 11 && o.sentAt && e.uint.preencode(d, o.sentAt))
2558 },
2559 encode(d, o) {
2560 const c = (o.message ? 1 : 0) | (n >= 11 && o.sentAt ? 2 : 0)
2561 ;(e.fixed32.encode(d, o.memberKey),
2562 e.uint.encode(d, o.clock),
2563 oc.encode(d, o.sender),
2564 cc.encode(d, o.status),
2565 tc.encode(d, o.keys),
2566 e.fixed32.encode(d, o.mailbox),
2567 e.uint.encode(d, c),
2568 o.message && e.string.encode(d, o.message),
2569 n >= 11 && o.sentAt && e.uint.encode(d, o.sentAt))
2570 },
2571 decode(d) {
2572 const o = e.fixed32.decode(d),
2573 c = e.uint.decode(d),
2574 t = oc.decode(d),
2575 r = cc.decode(d),
2576 i = tc.decode(d),
2577 a = e.fixed32.decode(d),
2578 s = e.uint.decode(d)
2579 return {
2580 memberKey: o,
2581 clock: c,
2582 sender: t,
2583 status: r,
2584 keys: i,
2585 mailbox: a,
2586 message: 1 & s ? e.string.decode(d) : null,
2587 sentAt: n >= 11 && 2 & s ? e.uint.decode(d) : 0,
2588 }
2589 },
2590 },
2591 ic = _,
2592 ac = {
2593 preencode(d, n) {
2594 ;(ic.preencode(d, n.header), e.buffer.preencode(d, n.blindRequest))
2595 },
2596 encode(d, n) {
2597 ;(ic.encode(d, n.header), e.buffer.encode(d, n.blindRequest))
2598 },
2599 decode: (d) => ({ header: ic.decode(d), blindRequest: e.buffer.decode(d) }),
2600 },
2601 sc = _,
2602 pc = cc,
2603 uc = {
2604 preencode(d, o) {
2605 ;(sc.preencode(d, o.header),
2606 e.fixed32.preencode(d, o.memberKey),
2607 e.uint.preencode(d, o.key),
2608 pc.preencode(d, o.status),
2609 d.end++,
2610 n >= 10 && o.roomKey && e.fixed32.preencode(d, o.roomKey))
2611 },
2612 encode(d, o) {
2613 const c = n >= 10 && o.roomKey ? 1 : 0
2614 ;(sc.encode(d, o.header),
2615 e.fixed32.encode(d, o.memberKey),
2616 e.uint.encode(d, o.key),
2617 pc.encode(d, o.status),
2618 e.uint.encode(d, c),
2619 n >= 10 && o.roomKey && e.fixed32.encode(d, o.roomKey))
2620 },
2621 decode(d) {
2622 const o = sc.decode(d),
2623 c = e.fixed32.decode(d),
2624 t = e.uint.decode(d),
2625 r = pc.decode(d),
2626 i = d.start < d.end ? e.uint.decode(d) : 0
2627 return {
2628 header: o,
2629 memberKey: c,
2630 key: t,
2631 status: r,
2632 roomKey: n >= 10 && 1 & i ? e.fixed32.decode(d) : null,
2633 }
2634 },
2635 },
2636 lc = {
2637 preencode(d, n) {
2638 ;(e.uint.preencode(d, n.timestamp),
2639 e.fixed32.preencode(d, n.key),
2640 e.fixed32.preencode(d, n.mailbox))
2641 },
2642 encode(d, n) {
2643 ;(e.uint.encode(d, n.timestamp), e.fixed32.encode(d, n.key), e.fixed32.encode(d, n.mailbox))
2644 },
2645 decode: (d) => ({
2646 version: e.uint.decode(d),
2647 timestamp: e.uint.decode(d),
2648 key: e.fixed32.decode(d),
2649 mailbox: e.fixed32.decode(d),
2650 }),
2651 },
2652 fc = {
2653 preencode(d, n) {
2654 switch ((e.uint.preencode(d, n.version), n.version)) {
2655 case 0:
2656 case 1:
2657 lc.preencode(d, n)
2658 break
2659 default:
2660 throw new Error("Unsupported version")
2661 }
2662 },
2663 encode(d, n) {
2664 switch ((e.uint.encode(d, n.version), n.version)) {
2665 case 0:
2666 case 1:
2667 lc.encode(d, n)
2668 break
2669 default:
2670 throw new Error("Unsupported version")
2671 }
2672 },
2673 decode(d) {
2674 const n = d.start,
2675 o = e.uint.decode(d)
2676 switch (((d.start = n), o)) {
2677 case 0:
2678 case 1:
2679 return lc.decode(d)
2680 default:
2681 throw new Error("Unsupported version")
2682 }
2683 },
2684 },
2685 mc = _,
2686 yc = {
2687 preencode(d, o) {
2688 ;(mc.preencode(d, o.header),
2689 c.preencode(d, o.oplog),
2690 e.uint.preencode(d, o.index),
2691 xi.preencode(d, o.preview),
2692 d.end++,
2693 n >= 7 && o.displayType && Sc.preencode(d, o.displayType))
2694 },
2695 encode(d, o) {
2696 const t = n >= 7 && o.displayType ? 1 : 0
2697 ;(mc.encode(d, o.header),
2698 c.encode(d, o.oplog),
2699 e.uint.encode(d, o.index),
2700 xi.encode(d, o.preview),
2701 e.uint.encode(d, t),
2702 n >= 7 && o.displayType && Sc.encode(d, o.displayType))
2703 },
2704 decode(d) {
2705 const o = mc.decode(d),
2706 t = c.decode(d),
2707 r = e.uint.decode(d),
2708 i = xi.decode(d),
2709 a = d.start < d.end ? e.uint.decode(d) : 0
2710 return {
2711 header: o,
2712 oplog: t,
2713 index: r,
2714 preview: i,
2715 displayType: n >= 7 && 1 & a ? Sc.decode(d) : 0,
2716 }
2717 },
2718 },
2719 bc = {
2720 preencode(d, o) {
2721 ;(d.end++, n >= 3 && o.memberKey && e.fixed32.preencode(d, o.memberKey))
2722 },
2723 encode(d, o) {
2724 const c = n >= 3 && o.memberKey ? 1 : 0
2725 ;(e.uint.encode(d, c), n >= 3 && o.memberKey && e.fixed32.encode(d, o.memberKey))
2726 },
2727 decode(d) {
2728 const o = e.uint.decode(d)
2729 return { memberKey: n >= 3 && 1 & o ? e.fixed32.decode(d) : null }
2730 },
2731 },
2732 xc = ue,
2733 kc = {
2734 preencode(e, d) {
2735 ;(xc.preencode(e, d.profile), ce.preencode(e, d.attestation))
2736 },
2737 encode(e, d) {
2738 ;(xc.encode(e, d.profile), ce.encode(e, d.attestation))
2739 },
2740 decode: (e) => ({ profile: xc.decode(e), attestation: ce.decode(e) }),
2741 },
2742 vc = _,
2743 gc = {
2744 preencode(d, n) {
2745 ;(vc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2746 },
2747 encode(d, n) {
2748 ;(vc.encode(d, n.header), e.fixed32.encode(d, n.key))
2749 },
2750 decode: (d) => ({ header: vc.decode(d), key: e.fixed32.decode(d) }),
2751 },
2752 hc = {
2753 preencode(d, n) {
2754 ;(e.fixed32.preencode(d, n.deviceKey),
2755 ce.preencode(d, n.privateProfileIdentity),
2756 e.buffer.preencode(d, n.deviceProof))
2757 },
2758 encode(d, n) {
2759 ;(e.fixed32.encode(d, n.deviceKey),
2760 ce.encode(d, n.privateProfileIdentity),
2761 e.buffer.encode(d, n.deviceProof))
2762 },
2763 decode: (d) => ({
2764 deviceKey: e.fixed32.decode(d),
2765 privateProfileIdentity: ce.decode(d),
2766 deviceProof: e.buffer.decode(d),
2767 }),
2768 },
2769 Kc = {
2770 preencode(d, o) {
2771 ;(e.fixed32.preencode(d, o.roomKey),
2772 e.fixed32.preencode(d, o.encryptionKey),
2773 e.fixed32.preencode(d, o.seed),
2774 d.end++,
2775 n >= 6 && o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
2776 },
2777 encode(d, o) {
2778 const c = n >= 6 && o.fastForwardTo ? 1 : 0
2779 ;(e.fixed32.encode(d, o.roomKey),
2780 e.fixed32.encode(d, o.encryptionKey),
2781 e.fixed32.encode(d, o.seed),
2782 e.uint.encode(d, c),
2783 n >= 6 && o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
2784 },
2785 decode(d) {
2786 const o = e.fixed32.decode(d),
2787 c = e.fixed32.decode(d),
2788 t = e.fixed32.decode(d),
2789 r = e.uint.decode(d)
2790 return {
2791 roomKey: o,
2792 encryptionKey: c,
2793 seed: t,
2794 fastForwardTo: n >= 6 && 1 & r ? e.fixed32.decode(d) : null,
2795 }
2796 },
2797 },
2798 wc = {
2799 preencode(d, o) {
2800 ;(e.fixed32.preencode(d, o.publicKey),
2801 e.fixed32.preencode(d, o.writerKey),
2802 e.fixed32.preencode(d, o.devicePublicKey),
2803 d.end++,
2804 n >= 6 && o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey))
2805 },
2806 encode(d, o) {
2807 const c = n >= 6 && o.privateProfileKey ? 1 : 0
2808 ;(e.fixed32.encode(d, o.publicKey),
2809 e.fixed32.encode(d, o.writerKey),
2810 e.fixed32.encode(d, o.devicePublicKey),
2811 e.uint.encode(d, c),
2812 n >= 6 && o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey))
2813 },
2814 decode(d) {
2815 const o = e.fixed32.decode(d),
2816 c = e.fixed32.decode(d),
2817 t = e.fixed32.decode(d),
2818 r = e.uint.decode(d)
2819 return {
2820 publicKey: o,
2821 writerKey: c,
2822 devicePublicKey: t,
2823 privateProfileKey: n >= 6 && 1 & r ? e.fixed32.decode(d) : null,
2824 }
2825 },
2826 },
2827 Ac = _,
2828 Tc = {
2829 preencode(d, n) {
2830 ;(Ac.preencode(d, n.header), e.fixed32.preencode(d, n.memberKey))
2831 },
2832 encode(d, n) {
2833 ;(Ac.encode(d, n.header), e.fixed32.encode(d, n.memberKey))
2834 },
2835 decode: (d) => ({ header: Ac.decode(d), memberKey: e.fixed32.decode(d) }),
2836 },
2837 Pc = { HttpLink: 1, PearLink: 2 },
2838 Sc = {
2839 preencode(e, d) {
2840 e.end++
2841 },
2842 encode(d, n) {
2843 if (n > 2) throw new Error("Unknown enum")
2844 e.uint.encode(d, n)
2845 },
2846 decode: (d) => e.uint.decode(d),
2847 },
2848 Rc = _,
2849 Cc = {
2850 preencode(d, n) {
2851 ;(Rc.preencode(d, n.header), e.uint.preencode(d, n.value))
2852 },
2853 encode(d, n) {
2854 ;(Rc.encode(d, n.header), e.uint.encode(d, n.value))
2855 },
2856 decode: (d) => ({ header: Rc.decode(d), value: e.uint.decode(d) }),
2857 },
2858 Dc = {
2859 preencode(d, n) {
2860 ;(e.uint.preencode(d, n.key), e.uint.preencode(d, n.value))
2861 },
2862 encode(d, n) {
2863 ;(e.uint.encode(d, n.key), e.uint.encode(d, n.value))
2864 },
2865 decode: (d) => ({ key: e.uint.decode(d), value: e.uint.decode(d) }),
2866 },
2867 Fc = _,
2868 Mc = {
2869 preencode(d, o) {
2870 ;(Fc.preencode(d, o.header),
2871 e.uint.preencode(d, o.from),
2872 e.uint.preencode(d, o.to),
2873 d.end++,
2874 n >= 20 && o.buildType && Vt.preencode(d, o.buildType))
2875 },
2876 encode(d, o) {
2877 const c = n >= 20 && o.buildType ? 1 : 0
2878 ;(Fc.encode(d, o.header),
2879 e.uint.encode(d, o.from),
2880 e.uint.encode(d, o.to),
2881 e.uint.encode(d, c),
2882 n >= 20 && o.buildType && Vt.encode(d, o.buildType))
2883 },
2884 decode(d) {
2885 const o = Fc.decode(d),
2886 c = e.uint.decode(d),
2887 t = e.uint.decode(d),
2888 r = d.start < d.end ? e.uint.decode(d) : 0
2889 return { header: o, from: c, to: t, buildType: n >= 20 && 1 & r ? Vt.decode(d) : null }
2890 },
2891 },
2892 qc = {
2893 RoomType: 1,
2894 IsExperimental: 2,
2895 IsJoiningDisabled: 3,
2896 IsAppendingDisabled: 4,
2897 IsCallingDisabled: 5,
2898 IsMembershipEventsDisabled: 6,
2899 IsAttachmentsDisabled: 7,
2900 IsLinksDisabled: 8,
2901 },
2902 Lc = {
2903 preencode(e, d) {
2904 e.end++
2905 },
2906 encode(d, n) {
2907 if (n > 8) throw new Error("Unknown enum")
2908 e.uint.encode(d, n)
2909 },
2910 decode: (d) => e.uint.decode(d),
2911 },
2912 Ic = { en: "en", it: "it", ru: "ru", es: "es", de: "de" },
2913 Ec = {
2914 preencode(e, d) {
2915 e.end++
2916 },
2917 encode(d, n) {
2918 switch (n) {
2919 case "en":
2920 e.uint.encode(d, 1)
2921 break
2922 case "it":
2923 e.uint.encode(d, 2)
2924 break
2925 case "ru":
2926 e.uint.encode(d, 3)
2927 break
2928 case "es":
2929 e.uint.encode(d, 4)
2930 break
2931 case "de":
2932 e.uint.encode(d, 5)
2933 break
2934 default:
2935 throw new Error("Unknown enum")
2936 }
2937 },
2938 decode(d) {
2939 switch (e.uint.decode(d)) {
2940 case 1:
2941 return "en"
2942 case 2:
2943 return "it"
2944 case 3:
2945 return "ru"
2946 case 4:
2947 return "es"
2948 case 5:
2949 return "de"
2950 default:
2951 return null
2952 }
2953 },
2954 },
2955 Bc = Id,
2956 Nc = {
2957 preencode(d, n) {
2958 ;(Bc.preencode(d, n.range), Ec.preencode(d, n.language), e.string.preencode(d, n.text))
2959 },
2960 encode(d, n) {
2961 ;(Bc.encode(d, n.range), Ec.encode(d, n.language), e.string.encode(d, n.text))
2962 },
2963 decode: (d) => ({ range: Bc.decode(d), language: Ec.decode(d), text: e.string.decode(d) }),
2964 },
2965 jc = {
2966 preencode(d, n) {
2967 ;(e.fixed32.preencode(d, n.deviceKey), e.fixed32.preencode(d, n.key))
2968 },
2969 encode(d, n) {
2970 ;(e.fixed32.encode(d, n.deviceKey), e.fixed32.encode(d, n.key))
2971 },
2972 decode: (d) => ({ deviceKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
2973 },
2974 Vc = _,
2975 Oc = {
2976 preencode(d, n) {
2977 ;(Vc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2978 },
2979 encode(d, n) {
2980 ;(Vc.encode(d, n.header), e.fixed32.encode(d, n.key))
2981 },
2982 decode: (d) => ({ header: Vc.decode(d), key: e.fixed32.decode(d) }),
2983 },
2984 Jc = _,
2985 Uc = {
2986 preencode(d, n) {
2987 ;(Jc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2988 },
2989 encode(d, n) {
2990 ;(Jc.encode(d, n.header), e.fixed32.encode(d, n.key))
2991 },
2992 decode: (d) => ({ header: Jc.decode(d), key: e.fixed32.decode(d) }),
2993 },
2994 Hc = { Flag: 1 },
2995 zc = {
2996 preencode(e, d) {
2997 e.end++
2998 },
2999 encode(d, n) {
3000 if (n > 1) throw new Error("Unknown enum")
3001 e.uint.encode(d, n)
3002 },
3003 decode: (d) => e.uint.decode(d),
3004 },
3005 Gc = {
3006 preencode(d, n) {
3007 ;(fn.preencode(d, n.id),
3008 e.fixed32.preencode(d, n.sender),
3009 e.uint.preencode(d, n.clock),
3010 zc.preencode(d, n.label))
3011 },
3012 encode(d, n) {
3013 ;(fn.encode(d, n.id),
3014 e.fixed32.encode(d, n.sender),
3015 e.uint.encode(d, n.clock),
3016 zc.encode(d, n.label))
3017 },
3018 decode: (d) => ({
3019 id: fn.decode(d),
3020 sender: e.fixed32.decode(d),
3021 clock: e.uint.decode(d),
3022 label: zc.decode(d),
3023 }),
3024 },
3025 Qc = _,
3026 Wc = {
3027 preencode(e, d) {
3028 ;(Qc.preencode(e, d.header), c.preencode(e, d.oplog), zc.preencode(e, d.label))
3029 },
3030 encode(e, d) {
3031 ;(Qc.encode(e, d.header), c.encode(e, d.oplog), zc.encode(e, d.label))
3032 },
3033 decode: (e) => ({ header: Qc.decode(e), oplog: c.decode(e), label: zc.decode(e) }),
3034 },
3035 Xc = _,
3036 Yc = {
3037 preencode(e, d) {
3038 ;(Xc.preencode(e, d.header), c.preencode(e, d.oplog), zc.preencode(e, d.label))
3039 },
3040 encode(e, d) {
3041 ;(Xc.encode(e, d.header), c.encode(e, d.oplog), zc.encode(e, d.label))
3042 },
3043 decode: (e) => ({ header: Xc.decode(e), oplog: c.decode(e), label: zc.decode(e) }),
3044 },
3045 Zc = {
3046 preencode(d, n) {
3047 ;(zc.preencode(d, n.label), e.uint.preencode(d, n.count))
3048 },
3049 encode(d, n) {
3050 ;(zc.encode(d, n.label), e.uint.encode(d, n.count))
3051 },
3052 decode: (d) => ({ label: zc.decode(d), count: e.uint.decode(d) }),
3053 },
3054 $c = e.array(e.frame(Zc)),
3055 _c = {
3056 preencode(d, o) {
3057 ;(fn.preencode(d, o.id),
3058 e.uint.preencode(d, o.total),
3059 $c.preencode(d, o.labels),
3060 e.uint.preencode(d, o.editedAt),
3061 d.end++,
3062 n >= 15 && o.flagsClock && e.uint.preencode(d, o.flagsClock),
3063 n >= 15 && o.version && e.uint.preencode(d, o.version))
3064 },
3065 encode(d, o) {
3066 const c =
3067 (n >= 15 && o.flagsClock ? 1 : 0) |
3068 (n >= 15 && o.version ? 2 : 0) |
3069 (n >= 16 && o.isDeleted ? 4 : 0)
3070 ;(fn.encode(d, o.id),
3071 e.uint.encode(d, o.total),
3072 $c.encode(d, o.labels),
3073 e.uint.encode(d, o.editedAt),
3074 e.uint.encode(d, c),
3075 n >= 15 && o.flagsClock && e.uint.encode(d, o.flagsClock),
3076 n >= 15 && o.version && e.uint.encode(d, o.version))
3077 },
3078 decode(d) {
3079 const o = fn.decode(d),
3080 c = e.uint.decode(d),
3081 t = $c.decode(d),
3082 r = e.uint.decode(d),
3083 i = d.start < d.end ? e.uint.decode(d) : 0
3084 return {
3085 id: o,
3086 total: c,
3087 labels: t,
3088 editedAt: r,
3089 flagsClock: n >= 15 && 1 & i ? e.uint.decode(d) : 0,
3090 version: n >= 15 && 2 & i ? e.uint.decode(d) : 0,
3091 isDeleted: n >= 16 && !!(4 & i),
3092 }
3093 },
3094 },
3095 et = _,
3096 dt = {
3097 preencode(d, n) {
3098 ;(et.preencode(d, n.header), e.uint.preencode(d, n.length))
3099 },
3100 encode(d, n) {
3101 ;(et.encode(d, n.header), e.uint.encode(d, n.length))
3102 },
3103 decode: (d) => ({ header: et.decode(d), length: e.uint.decode(d) }),
3104 },
3105 nt = {
3106 preencode(d, n) {
3107 ;(e.fixed32.preencode(d, n.memberKey), e.uint.preencode(d, n.length))
3108 },
3109 encode(d, n) {
3110 ;(e.fixed32.encode(d, n.memberKey), e.uint.encode(d, n.length))
3111 },
3112 decode: (d) => ({ memberKey: e.fixed32.decode(d), length: e.uint.decode(d) }),
3113 },
3114 ot = $,
3115 ct = {
3116 preencode(e, d) {
3117 e.end++
3118 },
3119 encode(d, o) {
3120 const c = n >= 13 && o.disableReadReceipts ? 1 : 0
3121 e.uint.encode(d, c)
3122 },
3123 decode(d) {
3124 const o = e.uint.decode(d)
3125 return { disableReadReceipts: n >= 13 && !!(1 & o) }
3126 },
3127 },
3128 tt = { disableReadReceipts: "disableReadReceipts" },
3129 rt = {
3130 preencode(e, d) {
3131 e.end++
3132 },
3133 encode(d, n) {
3134 if ("disableReadReceipts" !== n) throw new Error("Unknown enum")
3135 e.uint.encode(d, 1)
3136 },
3137 decode: (d) => (1 === e.uint.decode(d) ? "disableReadReceipts" : null),
3138 },
3139 it = _,
3140 at = e.frame(ct),
3141 st = {
3142 preencode(e, d) {
3143 ;(it.preencode(e, d.header), rt.preencode(e, d.key), at.preencode(e, d.settings))
3144 },
3145 encode(e, d) {
3146 ;(it.encode(e, d.header), rt.encode(e, d.key), at.encode(e, d.settings))
3147 },
3148 decode: (e) => ({ header: it.decode(e), key: rt.decode(e), settings: at.decode(e) }),
3149 },
3150 pt = { Flag: 1 },
3151 ut = {
3152 preencode(e, d) {
3153 e.end++
3154 },
3155 encode(d, n) {
3156 if (n > 1) throw new Error("Unknown enum")
3157 e.uint.encode(d, n)
3158 },
3159 decode: (d) => e.uint.decode(d),
3160 },
3161 lt = {
3162 preencode(d, n) {
3163 ;(e.fixed32.preencode(d, n.key),
3164 e.fixed32.preencode(d, n.sender),
3165 e.uint.preencode(d, n.clock),
3166 ut.preencode(d, n.label))
3167 },
3168 encode(d, n) {
3169 ;(e.fixed32.encode(d, n.key),
3170 e.fixed32.encode(d, n.sender),
3171 e.uint.encode(d, n.clock),
3172 ut.encode(d, n.label))
3173 },
3174 decode: (d) => ({
3175 key: e.fixed32.decode(d),
3176 sender: e.fixed32.decode(d),
3177 clock: e.uint.decode(d),
3178 label: ut.decode(d),
3179 }),
3180 },
3181 ft = _,
3182 mt = {
3183 preencode(d, n) {
3184 ;(ft.preencode(d, n.header), e.fixed32.preencode(d, n.key), ut.preencode(d, n.label))
3185 },
3186 encode(d, n) {
3187 ;(ft.encode(d, n.header), e.fixed32.encode(d, n.key), ut.encode(d, n.label))
3188 },
3189 decode: (d) => ({ header: ft.decode(d), key: e.fixed32.decode(d), label: ut.decode(d) }),
3190 },
3191 yt = {
3192 preencode(d, n) {
3193 ;(ut.preencode(d, n.label), e.uint.preencode(d, n.count))
3194 },
3195 encode(d, n) {
3196 ;(ut.encode(d, n.label), e.uint.encode(d, n.count))
3197 },
3198 decode: (d) => ({ label: ut.decode(d), count: e.uint.decode(d) }),
3199 },
3200 bt = e.array(e.frame(yt)),
3201 xt = {
3202 preencode(d, n) {
3203 ;(e.fixed32.preencode(d, n.key),
3204 e.uint.preencode(d, n.total),
3205 bt.preencode(d, n.labels),
3206 e.uint.preencode(d, n.editedAt),
3207 e.uint.preencode(d, n.flagsClock))
3208 },
3209 encode(d, n) {
3210 ;(e.fixed32.encode(d, n.key),
3211 e.uint.encode(d, n.total),
3212 bt.encode(d, n.labels),
3213 e.uint.encode(d, n.editedAt),
3214 e.uint.encode(d, n.flagsClock))
3215 },
3216 decode: (d) => ({
3217 key: e.fixed32.decode(d),
3218 total: e.uint.decode(d),
3219 labels: bt.decode(d),
3220 editedAt: e.uint.decode(d),
3221 flagsClock: e.uint.decode(d),
3222 }),
3223 },
3224 kt = {
3225 preencode(d, n) {
3226 ;(e.float64.preencode(d, n.latitude), e.float64.preencode(d, n.longitude))
3227 },
3228 encode(d, n) {
3229 ;(e.float64.encode(d, n.latitude), e.float64.encode(d, n.longitude))
3230 },
3231 decode: (d) => ({ latitude: e.float64.decode(d), longitude: e.float64.decode(d) }),
3232 },
3233 vt = _,
3234 gt = {
3235 preencode(d, n) {
3236 ;(vt.preencode(d, n.header),
3237 e.fixed32.preencode(d, n.deviceKey),
3238 e.fixed32.preencode(d, n.fromDeviceKey))
3239 },
3240 encode(d, n) {
3241 ;(vt.encode(d, n.header),
3242 e.fixed32.encode(d, n.deviceKey),
3243 e.fixed32.encode(d, n.fromDeviceKey))
3244 },
3245 decode: (d) => ({
3246 header: vt.decode(d),
3247 deviceKey: e.fixed32.decode(d),
3248 fromDeviceKey: e.fixed32.decode(d),
3249 }),
3250 },
3251 ht = _,
3252 Kt = Y,
3253 wt = {
3254 preencode(d, o) {
3255 ;(ht.preencode(d, o.header),
3256 e.fixed32.preencode(d, o.callKey),
3257 e.buffer.preencode(d, o.encryptionKey),
3258 d.end++,
3259 n >= 19 && o.streams && Kt.preencode(d, o.streams),
3260 n >= 19 && o.discoveryKey && e.fixed32.preencode(d, o.discoveryKey),
3261 n >= 19 && o.version && e.uint.preencode(d, o.version))
3262 },
3263 encode(d, o) {
3264 const c =
3265 (n >= 19 && o.streams ? 1 : 0) |
3266 (n >= 19 && o.discoveryKey ? 2 : 0) |
3267 (n >= 19 && o.version ? 4 : 0)
3268 ;(ht.encode(d, o.header),
3269 e.fixed32.encode(d, o.callKey),
3270 e.buffer.encode(d, o.encryptionKey),
3271 e.uint.encode(d, c),
3272 n >= 19 && o.streams && Kt.encode(d, o.streams),
3273 n >= 19 && o.discoveryKey && e.fixed32.encode(d, o.discoveryKey),
3274 n >= 19 && o.version && e.uint.encode(d, o.version))
3275 },
3276 decode(d) {
3277 const o = ht.decode(d),
3278 c = e.fixed32.decode(d),
3279 t = e.buffer.decode(d),
3280 r = e.uint.decode(d)
3281 return {
3282 header: o,
3283 callKey: c,
3284 encryptionKey: t,
3285 streams: n >= 19 && 1 & r ? Kt.decode(d) : null,
3286 discoveryKey: n >= 19 && 2 & r ? e.fixed32.decode(d) : null,
3287 version: n >= 19 && 4 & r ? e.uint.decode(d) : 0,
3288 }
3289 },
3290 },
3291 At = _,
3292 Tt = Y,
3293 Pt = {
3294 preencode(d, o) {
3295 ;(At.preencode(d, o.header),
3296 e.fixed32.preencode(d, o.callKey),
3297 d.end++,
3298 n >= 19 && o.streams && Tt.preencode(d, o.streams))
3299 },
3300 encode(d, o) {
3301 const c = n >= 19 && o.streams ? 1 : 0
3302 ;(At.encode(d, o.header),
3303 e.fixed32.encode(d, o.callKey),
3304 e.uint.encode(d, c),
3305 n >= 19 && o.streams && Tt.encode(d, o.streams))
3306 },
3307 decode(d) {
3308 const o = At.decode(d),
3309 c = e.fixed32.decode(d),
3310 t = e.uint.decode(d)
3311 return { header: o, callKey: c, streams: n >= 19 && 1 & t ? Tt.decode(d) : null }
3312 },
3313 },
3314 St = _,
3315 Rt = {
3316 preencode(d, n) {
3317 ;(St.preencode(d, n.header), e.fixed32.preencode(d, n.callKey))
3318 },
3319 encode(d, n) {
3320 ;(St.encode(d, n.header), e.fixed32.encode(d, n.callKey))
3321 },
3322 decode: (d) => ({ header: St.decode(d), callKey: e.fixed32.decode(d) }),
3323 },
3324 Ct = _,
3325 Dt = {
3326 preencode(d, n) {
3327 ;(Ct.preencode(d, n.header), e.fixed32.preencode(d, n.callKey))
3328 },
3329 encode(d, n) {
3330 ;(Ct.encode(d, n.header), e.fixed32.encode(d, n.callKey))
3331 },
3332 decode: (d) => ({ header: Ct.decode(d), callKey: e.fixed32.decode(d) }),
3333 },
3334 Ft = _,
3335 Mt = {
3336 preencode(d, n) {
3337 ;(Ft.preencode(d, n.header),
3338 e.fixed32.preencode(d, n.callKey),
3339 e.fixed32.preencode(d, n.streamKey))
3340 },
3341 encode(d, n) {
3342 ;(Ft.encode(d, n.header), e.fixed32.encode(d, n.callKey), e.fixed32.encode(d, n.streamKey))
3343 },
3344 decode: (d) => ({
3345 header: Ft.decode(d),
3346 callKey: e.fixed32.decode(d),
3347 streamKey: e.fixed32.decode(d),
3348 }),
3349 },
3350 qt = _,
3351 Lt = {
3352 preencode(d, n) {
3353 ;(qt.preencode(d, n.header),
3354 e.fixed32.preencode(d, n.callKey),
3355 e.fixed32.preencode(d, n.streamKey))
3356 },
3357 encode(d, n) {
3358 ;(qt.encode(d, n.header), e.fixed32.encode(d, n.callKey), e.fixed32.encode(d, n.streamKey))
3359 },
3360 decode: (d) => ({
3361 header: qt.decode(d),
3362 callKey: e.fixed32.decode(d),
3363 streamKey: e.fixed32.decode(d),
3364 }),
3365 },
3366 It = {
3367 preencode(d, o) {
3368 ;(e.fixed32.preencode(d, o.callKey),
3369 e.buffer.preencode(d, o.encryptionKey),
3370 e.uint.preencode(d, o.createdAt),
3371 d.end++,
3372 n >= 19 && o.endedAt && e.uint.preencode(d, o.endedAt),
3373 n >= 19 && o.discoveryKey && e.fixed32.preencode(d, o.discoveryKey),
3374 n >= 19 && o.version && e.uint.preencode(d, o.version))
3375 },
3376 encode(d, o) {
3377 const c =
3378 (n >= 19 && o.endedAt ? 1 : 0) |
3379 (n >= 19 && o.discoveryKey ? 2 : 0) |
3380 (n >= 19 && o.version ? 4 : 0)
3381 ;(e.fixed32.encode(d, o.callKey),
3382 e.buffer.encode(d, o.encryptionKey),
3383 e.uint.encode(d, o.createdAt),
3384 e.uint.encode(d, c),
3385 n >= 19 && o.endedAt && e.uint.encode(d, o.endedAt),
3386 n >= 19 && o.discoveryKey && e.fixed32.encode(d, o.discoveryKey),
3387 n >= 19 && o.version && e.uint.encode(d, o.version))
3388 },
3389 decode(d) {
3390 const o = e.fixed32.decode(d),
3391 c = e.buffer.decode(d),
3392 t = e.uint.decode(d),
3393 r = e.uint.decode(d)
3394 return {
3395 callKey: o,
3396 encryptionKey: c,
3397 createdAt: t,
3398 endedAt: n >= 19 && 1 & r ? e.uint.decode(d) : 0,
3399 discoveryKey: n >= 19 && 2 & r ? e.fixed32.decode(d) : null,
3400 version: n >= 19 && 4 & r ? e.uint.decode(d) : 0,
3401 }
3402 },
3403 },
3404 Et = {
3405 preencode(d, n) {
3406 ;(e.fixed32.preencode(d, n.callKey),
3407 e.fixed32.preencode(d, n.memberKey),
3408 e.uint.preencode(d, n.createdAt))
3409 },
3410 encode(d, n) {
3411 ;(e.fixed32.encode(d, n.callKey),
3412 e.fixed32.encode(d, n.memberKey),
3413 e.uint.encode(d, n.createdAt))
3414 },
3415 decode: (d) => ({
3416 callKey: e.fixed32.decode(d),
3417 memberKey: e.fixed32.decode(d),
3418 createdAt: e.uint.decode(d),
3419 }),
3420 },
3421 Bt = {
3422 preencode(d, o) {
3423 ;(e.fixed32.preencode(d, o.callKey),
3424 e.fixed32.preencode(d, o.deviceKey),
3425 e.fixed32.preencode(d, o.memberKey),
3426 e.uint.preencode(d, o.createdAt),
3427 d.end++,
3428 n >= 19 && o.swarmKey && e.fixed32.preencode(d, o.swarmKey))
3429 },
3430 encode(d, o) {
3431 const c = n >= 19 && o.swarmKey ? 1 : 0
3432 ;(e.fixed32.encode(d, o.callKey),
3433 e.fixed32.encode(d, o.deviceKey),
3434 e.fixed32.encode(d, o.memberKey),
3435 e.uint.encode(d, o.createdAt),
3436 e.uint.encode(d, c),
3437 n >= 19 && o.swarmKey && e.fixed32.encode(d, o.swarmKey))
3438 },
3439 decode(d) {
3440 const o = e.fixed32.decode(d),
3441 c = e.fixed32.decode(d),
3442 t = e.fixed32.decode(d),
3443 r = e.uint.decode(d),
3444 i = e.uint.decode(d)
3445 return {
3446 callKey: o,
3447 deviceKey: c,
3448 memberKey: t,
3449 createdAt: r,
3450 swarmKey: n >= 19 && 1 & i ? e.fixed32.decode(d) : null,
3451 }
3452 },
3453 },
3454 Nt = {
3455 preencode(d, n) {
3456 ;(e.fixed32.preencode(d, n.callKey),
3457 e.fixed32.preencode(d, n.deviceKey),
3458 e.buffer.preencode(d, n.streamKey),
3459 e.uint.preencode(d, n.createdAt))
3460 },
3461 encode(d, n) {
3462 ;(e.fixed32.encode(d, n.callKey),
3463 e.fixed32.encode(d, n.deviceKey),
3464 e.buffer.encode(d, n.streamKey),
3465 e.uint.encode(d, n.createdAt))
3466 },
3467 decode: (d) => ({
3468 callKey: e.fixed32.decode(d),
3469 deviceKey: e.fixed32.decode(d),
3470 streamKey: e.buffer.decode(d),
3471 createdAt: e.uint.decode(d),
3472 }),
3473 },
3474 jt = { Nightly: "Nightly", Internal: "Internal", Production: "Production" },
3475 Vt = {
3476 preencode(e, d) {
3477 e.end++
3478 },
3479 encode(d, n) {
3480 switch (n) {
3481 case "Nightly":
3482 e.uint.encode(d, 1)
3483 break
3484 case "Internal":
3485 e.uint.encode(d, 2)
3486 break
3487 case "Production":
3488 e.uint.encode(d, 3)
3489 break
3490 default:
3491 throw new Error("Unknown enum")
3492 }
3493 },
3494 decode(d) {
3495 switch (e.uint.decode(d)) {
3496 case 1:
3497 return "Nightly"
3498 case 2:
3499 return "Internal"
3500 case 3:
3501 return "Production"
3502 default:
3503 return null
3504 }
3505 },
3506 },
3507 Ot = _,
3508 Jt = {
3509 preencode(e, d) {
3510 Ot.preencode(e, d.header)
3511 },
3512 encode(e, d) {
3513 Ot.encode(e, d.header)
3514 },
3515 decode: (e) => ({ header: Ot.decode(e) }),
3516 },
3517 Ut = _,
3518 Ht = {
3519 preencode(e, d) {
3520 Ut.preencode(e, d.header)
3521 },
3522 encode(e, d) {
3523 Ut.encode(e, d.header)
3524 },
3525 decode: (e) => ({ header: Ut.decode(e) }),
3526 },
3527 zt = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({ key: null }) },
3528 Gt = he,
3529 Qt = {
3530 preencode(d, n) {
3531 ;(e.fixed32.preencode(d, n.id), Gt.preencode(d, n.request))
3532 },
3533 encode(d, n) {
3534 ;(e.fixed32.encode(d, n.id), Gt.encode(d, n.request))
3535 },
3536 decode: (d) => ({ deviceKey: null, id: e.fixed32.decode(d), request: Gt.decode(d) }),
3537 },
3538 Wt = re,
3539 Xt = ie,
3540 Yt = {
3541 preencode(d, n) {
3542 ;(e.fixed32.preencode(d, n.memberKey),
3543 Wt.preencode(d, n.status),
3544 ki.preencode(d, n.profile),
3545 d.end++,
3546 n.invitation && Xt.preencode(d, n.invitation))
3547 },
3548 encode(d, n) {
3549 const o = n.invitation ? 1 : 0
3550 ;(e.fixed32.encode(d, n.memberKey),
3551 Wt.encode(d, n.status),
3552 ki.encode(d, n.profile),
3553 e.uint.encode(d, o),
3554 n.invitation && Xt.encode(d, n.invitation))
3555 },
3556 decode: (d) => ({
3557 key: null,
3558 memberKey: e.fixed32.decode(d),
3559 status: Wt.decode(d),
3560 profile: ki.decode(d),
3561 invitation: 1 & e.uint.decode(d) ? Xt.decode(d) : null,
3562 }),
3563 },
3564 Zt = {
3565 preencode(d, n) {
3566 ;(d.end++,
3567 n.profileAttestation && e.buffer.preencode(d, n.profileAttestation),
3568 n.latestReceipt && e.buffer.preencode(d, n.latestReceipt))
3569 },
3570 encode(d, n) {
3571 const o = (n.profileAttestation ? 1 : 0) | (n.latestReceipt ? 2 : 0)
3572 ;(e.uint.encode(d, o),
3573 n.profileAttestation && e.buffer.encode(d, n.profileAttestation),
3574 n.latestReceipt && e.buffer.encode(d, n.latestReceipt))
3575 },
3576 decode(d) {
3577 const n = e.uint.decode(d)
3578 return {
3579 key: null,
3580 profileAttestation: 1 & n ? e.buffer.decode(d) : null,
3581 latestReceipt: 2 & n ? e.buffer.decode(d) : null,
3582 }
3583 },
3584 },
3585 $t = ad,
3586 _t = ue,
3587 er = {
3588 preencode(e, d) {
3589 ;($t.preencode(e, d.status), _t.preencode(e, d.profile))
3590 },
3591 encode(e, d) {
3592 ;($t.encode(e, d.status), _t.encode(e, d.profile))
3593 },
3594 decode: (e) => ({ key: null, status: $t.decode(e), profile: _t.decode(e) }),
3595 },
3596 dr = {
3597 preencode(d, n) {
3598 e.uint.preencode(d, n.mentions)
3599 },
3600 encode(d, n) {
3601 e.uint.encode(d, n.mentions)
3602 },
3603 decode: (d) => ({ key: null, mentions: e.uint.decode(d) }),
3604 },
3605 nr = Ce,
3606 or = Le,
3607 cr = {
3608 preencode(e, d) {
3609 ;(nr.preencode(e, d.response),
3610 or.preencode(e, d.metadata),
3611 e.end++,
3612 d.anchor && o.preencode(e, d.anchor))
3613 },
3614 encode(d, n) {
3615 const c = (n.anchor ? 1 : 0) | (n.isActive ? 2 : 0)
3616 ;(nr.encode(d, n.response),
3617 or.encode(d, n.metadata),
3618 e.uint.encode(d, c),
3619 n.anchor && o.encode(d, n.anchor))
3620 },
3621 decode(d) {
3622 const n = nr.decode(d),
3623 c = or.decode(d),
3624 t = e.uint.decode(d)
3625 return {
3626 id: null,
3627 response: n,
3628 metadata: c,
3629 anchor: 1 & t ? o.decode(d) : null,
3630 isActive: !!(2 & t),
3631 }
3632 },
3633 },
3634 tr = mn,
3635 rr = {
3636 preencode(d, n) {
3637 ;(e.uint.preencode(d, n.count),
3638 d.end++,
3639 n.parent && c.preencode(d, n.parent),
3640 n.stats && tr.preencode(d, n.stats))
3641 },
3642 encode(d, n) {
3643 const o = (n.parent ? 1 : 0) | (n.stats ? 2 : 0)
3644 ;(e.uint.encode(d, n.count),
3645 e.uint.encode(d, o),
3646 n.parent && c.encode(d, n.parent),
3647 n.stats && tr.encode(d, n.stats))
3648 },
3649 decode(d) {
3650 const n = e.uint.decode(d),
3651 o = e.uint.decode(d)
3652 return {
3653 id: 0,
3654 count: n,
3655 parent: 1 & o ? c.decode(d) : null,
3656 stats: 2 & o ? tr.decode(d) : null,
3657 }
3658 },
3659 },
3660 ir = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({ thread: 0, index: 0 }) },
3661 ar = bn,
3662 sr = xn,
3663 pr = kn,
3664 ur = {
3665 preencode(d, n) {
3666 ;(fn.preencode(d, n.id),
3667 c.preencode(d, n.oplog),
3668 e.uint.preencode(d, n.clock),
3669 e.uint.preencode(d, n.timestamp),
3670 d.end++,
3671 n.editedAt && e.uint.preencode(d, n.editedAt),
3672 ar.preencode(d, n.status),
3673 n.message && sr.preencode(d, n.message),
3674 n.event && pr.preencode(d, n.event))
3675 },
3676 encode(d, n) {
3677 const o = (n.editedAt ? 1 : 0) | (n.message ? 2 : 0) | (n.event ? 4 : 0)
3678 ;(fn.encode(d, n.id),
3679 c.encode(d, n.oplog),
3680 e.uint.encode(d, n.clock),
3681 e.uint.encode(d, n.timestamp),
3682 e.uint.encode(d, o),
3683 n.editedAt && e.uint.encode(d, n.editedAt),
3684 ar.encode(d, n.status),
3685 n.message && sr.encode(d, n.message),
3686 n.event && pr.encode(d, n.event))
3687 },
3688 decode(d) {
3689 const n = fn.decode(d),
3690 o = c.decode(d),
3691 t = e.uint.decode(d),
3692 r = e.uint.decode(d),
3693 i = e.uint.decode(d)
3694 return {
3695 id: n,
3696 oplog: o,
3697 clock: t,
3698 timestamp: r,
3699 editedAt: 1 & i ? e.uint.decode(d) : 0,
3700 status: ar.decode(d),
3701 message: 2 & i ? sr.decode(d) : null,
3702 event: 4 & i ? pr.decode(d) : null,
3703 }
3704 },
3705 },
3706 lr = ir,
3707 fr = En,
3708 mr = {
3709 preencode(d, o) {
3710 ;(fn.preencode(d, o.id),
3711 e.uint.preencode(d, o.total),
3712 fr.preencode(d, o.reactions),
3713 d.end++,
3714 n >= 11 && o.editedAt && e.uint.preencode(d, o.editedAt))
3715 },
3716 encode(d, o) {
3717 const c = n >= 11 && o.editedAt ? 1 : 0
3718 ;(fn.encode(d, o.id),
3719 e.uint.encode(d, o.total),
3720 fr.encode(d, o.reactions),
3721 e.uint.encode(d, c),
3722 n >= 11 && o.editedAt && e.uint.encode(d, o.editedAt))
3723 },
3724 decode(d) {
3725 const o = fn.decode(d),
3726 c = e.uint.decode(d),
3727 t = fr.decode(d),
3728 r = d.start < d.end ? e.uint.decode(d) : 0
3729 return { id: o, total: c, reactions: t, editedAt: n >= 11 && 1 & r ? e.uint.decode(d) : 0 }
3730 },
3731 },
3732 yr = ir,
3733 br = {
3734 preencode(d, n) {
3735 ;(fn.preencode(d, n.id), e.uint.preencode(d, n.clock))
3736 },
3737 encode(d, n) {
3738 ;(fn.encode(d, n.id), e.uint.encode(d, n.clock))
3739 },
3740 decode: (d) => ({ id: fn.decode(d), sender: null, clock: e.uint.decode(d), reaction: null }),
3741 },
3742 xr = P,
3743 kr = h,
3744 vr = {
3745 preencode(d, o) {
3746 ;(c.preencode(d, o.oplog),
3747 xr.preencode(d, o.status),
3748 kr.preencode(d, o.file),
3749 d.end++,
3750 n >= 14 && o.version && e.uint.preencode(d, o.version))
3751 },
3752 encode(d, o) {
3753 const t = n >= 14 && o.version ? 1 : 0
3754 ;(c.encode(d, o.oplog),
3755 xr.encode(d, o.status),
3756 kr.encode(d, o.file),
3757 e.uint.encode(d, t),
3758 n >= 14 && o.version && e.uint.encode(d, o.version))
3759 },
3760 decode(d) {
3761 const o = c.decode(d),
3762 t = xr.decode(d),
3763 r = kr.decode(d),
3764 i = d.start < d.end ? e.uint.decode(d) : 0
3765 return {
3766 id: 0,
3767 oplog: o,
3768 status: t,
3769 file: r,
3770 version: n >= 14 && 1 & i ? e.uint.decode(d) : 0,
3771 }
3772 },
3773 },
3774 gr = go,
3775 hr = {
3776 preencode(d, c) {
3777 ;(e.fixed32.preencode(d, c.invitationSeed),
3778 e.fixed32.preencode(d, c.mailbox),
3779 r.preencode(d, c.responseKeyPair),
3780 o.preencode(d, c.initiator),
3781 o.preencode(d, c.inviter),
3782 d.end++,
3783 c.identity && gr.preencode(d, c.identity),
3784 n >= 20 && c.buildType && Vt.preencode(d, c.buildType))
3785 },
3786 encode(d, c) {
3787 const t = (c.identity ? 1 : 0) | (n >= 20 && c.buildType ? 2 : 0)
3788 ;(e.fixed32.encode(d, c.invitationSeed),
3789 e.fixed32.encode(d, c.mailbox),
3790 r.encode(d, c.responseKeyPair),
3791 o.encode(d, c.initiator),
3792 o.encode(d, c.inviter),
3793 e.uint.encode(d, t),
3794 c.identity && gr.encode(d, c.identity),
3795 n >= 20 && c.buildType && Vt.encode(d, c.buildType))
3796 },
3797 decode(d) {
3798 const c = e.fixed32.decode(d),
3799 t = e.fixed32.decode(d),
3800 i = r.decode(d),
3801 a = o.decode(d),
3802 s = o.decode(d),
3803 p = e.uint.decode(d)
3804 return {
3805 id: null,
3806 invitationSeed: c,
3807 mailbox: t,
3808 responseKeyPair: i,
3809 initiator: a,
3810 inviter: s,
3811 identity: 1 & p ? gr.decode(d) : null,
3812 buildType: n >= 20 && 2 & p ? Vt.decode(d) : null,
3813 }
3814 },
3815 },
3816 Kr = Fo,
3817 wr = Mo,
3818 Ar = go,
3819 Tr = {
3820 preencode(d, c) {
3821 ;(e.buffer.preencode(d, c.encryptionKey),
3822 e.fixed32.preencode(d, c.mailbox),
3823 Kr.preencode(d, c.status),
3824 e.uint.preencode(d, c.clock),
3825 d.end++,
3826 c.initiator && o.preencode(d, c.initiator),
3827 c.fastForwardTo && e.fixed32.preencode(d, c.fastForwardTo),
3828 c.identitySwap && wr.preencode(d, c.identitySwap),
3829 n >= 6 && c.identitySwapV2 && Ar.preencode(d, c.identitySwapV2),
3830 n >= 10 && c.contact && e.fixed32.preencode(d, c.contact))
3831 },
3832 encode(d, c) {
3833 const t =
3834 (c.initiator ? 1 : 0) |
3835 (c.fastForwardTo ? 2 : 0) |
3836 (c.identitySwap ? 4 : 0) |
3837 (n >= 6 && c.identitySwapV2 ? 8 : 0) |
3838 (n >= 10 && c.contact ? 16 : 0)
3839 ;(e.buffer.encode(d, c.encryptionKey),
3840 e.fixed32.encode(d, c.mailbox),
3841 Kr.encode(d, c.status),
3842 e.uint.encode(d, c.clock),
3843 e.uint.encode(d, t),
3844 c.initiator && o.encode(d, c.initiator),
3845 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
3846 c.identitySwap && wr.encode(d, c.identitySwap),
3847 n >= 6 && c.identitySwapV2 && Ar.encode(d, c.identitySwapV2),
3848 n >= 10 && c.contact && e.fixed32.encode(d, c.contact))
3849 },
3850 decode(d) {
3851 const c = e.buffer.decode(d),
3852 t = e.fixed32.decode(d),
3853 r = Kr.decode(d),
3854 i = e.uint.decode(d),
3855 a = e.uint.decode(d)
3856 return {
3857 roomKey: null,
3858 encryptionKey: c,
3859 mailbox: t,
3860 status: r,
3861 clock: i,
3862 initiator: 1 & a ? o.decode(d) : null,
3863 fastForwardTo: 2 & a ? e.fixed32.decode(d) : null,
3864 identitySwap: 4 & a ? wr.decode(d) : null,
3865 identitySwapV2: n >= 6 && 8 & a ? Ar.decode(d) : null,
3866 contact: n >= 10 && 16 & a ? e.fixed32.decode(d) : null,
3867 }
3868 },
3869 },
3870 Pr = {
3871 preencode(d, n) {
3872 ;(e.uint.preencode(d, n.clock),
3873 vi.preencode(d, n.status),
3874 d.end++,
3875 n.mailbox && e.fixed32.preencode(d, n.mailbox),
3876 n.roomKey && e.fixed32.preencode(d, n.roomKey))
3877 },
3878 encode(d, n) {
3879 const o = (n.mailbox ? 1 : 0) | (n.roomKey ? 2 : 0)
3880 ;(e.uint.encode(d, n.clock),
3881 vi.encode(d, n.status),
3882 e.uint.encode(d, o),
3883 n.mailbox && e.fixed32.encode(d, n.mailbox),
3884 n.roomKey && e.fixed32.encode(d, n.roomKey))
3885 },
3886 decode(d) {
3887 const n = e.uint.decode(d),
3888 o = vi.decode(d),
3889 c = e.uint.decode(d)
3890 return {
3891 memberKey: null,
3892 clock: n,
3893 status: o,
3894 mailbox: 1 & c ? e.fixed32.decode(d) : null,
3895 roomKey: 2 & c ? e.fixed32.decode(d) : null,
3896 }
3897 },
3898 },
3899 Sr = ue,
3900 Rr = cc,
3901 Cr = _o,
3902 Dr = {
3903 preencode(d, o) {
3904 ;(e.uint.preencode(d, o.clock),
3905 Sr.preencode(d, o.sender),
3906 Rr.preencode(d, o.status),
3907 Cr.preencode(d, o.keys),
3908 e.fixed32.preencode(d, o.mailbox),
3909 d.end++,
3910 o.message && e.string.preencode(d, o.message),
3911 n >= 11 && o.sentAt && e.uint.preencode(d, o.sentAt))
3912 },
3913 encode(d, o) {
3914 const c = (o.message ? 1 : 0) | (n >= 11 && o.sentAt ? 2 : 0)
3915 ;(e.uint.encode(d, o.clock),
3916 Sr.encode(d, o.sender),
3917 Rr.encode(d, o.status),
3918 Cr.encode(d, o.keys),
3919 e.fixed32.encode(d, o.mailbox),
3920 e.uint.encode(d, c),
3921 o.message && e.string.encode(d, o.message),
3922 n >= 11 && o.sentAt && e.uint.encode(d, o.sentAt))
3923 },
3924 decode(d) {
3925 const o = e.uint.decode(d),
3926 c = Sr.decode(d),
3927 t = Rr.decode(d),
3928 r = Cr.decode(d),
3929 i = e.fixed32.decode(d),
3930 a = e.uint.decode(d)
3931 return {
3932 memberKey: null,
3933 clock: o,
3934 sender: c,
3935 status: t,
3936 keys: r,
3937 mailbox: i,
3938 message: 1 & a ? e.string.decode(d) : null,
3939 sentAt: n >= 11 && 2 & a ? e.uint.decode(d) : 0,
3940 }
3941 },
3942 },
3943 Fr = {
3944 preencode(d, n) {
3945 e.uint.preencode(d, n.value)
3946 },
3947 encode(d, n) {
3948 e.uint.encode(d, n.value)
3949 },
3950 decode: (d) => ({ key: 0, value: e.uint.decode(d) }),
3951 },
3952 Mr = {
3953 preencode(d, n) {
3954 ;(ce.preencode(d, n.privateProfileIdentity), e.buffer.preencode(d, n.deviceProof))
3955 },
3956 encode(d, n) {
3957 ;(ce.encode(d, n.privateProfileIdentity), e.buffer.encode(d, n.deviceProof))
3958 },
3959 decode: (d) => ({
3960 deviceKey: null,
3961 privateProfileIdentity: ce.decode(d),
3962 deviceProof: e.buffer.decode(d),
3963 }),
3964 },
3965 qr = {
3966 preencode(d, n) {
3967 ;(d.end++,
3968 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
3969 n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo))
3970 },
3971 encode(d, n) {
3972 const o = (n.encryptionKey ? 1 : 0) | (n.fastForwardTo ? 2 : 0)
3973 ;(e.uint.encode(d, o),
3974 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
3975 n.fastForwardTo && e.fixed32.encode(d, n.fastForwardTo))
3976 },
3977 decode(d) {
3978 const n = e.uint.decode(d)
3979 return {
3980 key: null,
3981 encryptionKey: 1 & n ? e.buffer.decode(d) : null,
3982 fastForwardTo: 2 & n ? e.fixed32.decode(d) : null,
3983 }
3984 },
3985 },
3986 Lr = ue,
3987 Ir = cc,
3988 Er = _o,
3989 Br = {
3990 preencode(d, o) {
3991 ;(e.uint.preencode(d, o.clock),
3992 Lr.preencode(d, o.sender),
3993 Ir.preencode(d, o.status),
3994 Er.preencode(d, o.keys),
3995 e.fixed32.preencode(d, o.mailbox),
3996 d.end++,
3997 o.message && e.string.preencode(d, o.message),
3998 n >= 11 && o.sentAt && e.uint.preencode(d, o.sentAt))
3999 },
4000 encode(d, o) {
4001 const c = (o.message ? 1 : 0) | (n >= 11 && o.sentAt ? 2 : 0)
4002 ;(e.uint.encode(d, o.clock),
4003 Lr.encode(d, o.sender),
4004 Ir.encode(d, o.status),
4005 Er.encode(d, o.keys),
4006 e.fixed32.encode(d, o.mailbox),
4007 e.uint.encode(d, c),
4008 o.message && e.string.encode(d, o.message),
4009 n >= 11 && o.sentAt && e.uint.encode(d, o.sentAt))
4010 },
4011 decode(d) {
4012 const o = e.uint.decode(d),
4013 c = Lr.decode(d),
4014 t = Ir.decode(d),
4015 r = Er.decode(d),
4016 i = e.fixed32.decode(d),
4017 a = e.uint.decode(d)
4018 return {
4019 memberKey: null,
4020 clock: o,
4021 sender: c,
4022 status: t,
4023 keys: r,
4024 mailbox: i,
4025 message: 1 & a ? e.string.decode(d) : null,
4026 sentAt: n >= 11 && 2 & a ? e.uint.decode(d) : 0,
4027 }
4028 },
4029 },
4030 Nr = {
4031 preencode(d, n) {
4032 e.fixed32.preencode(d, n.key)
4033 },
4034 encode(d, n) {
4035 e.fixed32.encode(d, n.key)
4036 },
4037 decode: (d) => ({ deviceKey: null, key: e.fixed32.decode(d) }),
4038 },
4039 jr = ir,
4040 Vr = {
4041 preencode(d, n) {
4042 ;(fn.preencode(d, n.id), e.uint.preencode(d, n.clock))
4043 },
4044 encode(d, n) {
4045 ;(fn.encode(d, n.id), e.uint.encode(d, n.clock))
4046 },
4047 decode: (d) => ({ id: fn.decode(d), sender: null, clock: e.uint.decode(d), label: 0 }),
4048 },
4049 Or = ir,
4050 Jr = $c,
4051 Ur = {
4052 preencode(d, o) {
4053 ;(fn.preencode(d, o.id),
4054 e.uint.preencode(d, o.total),
4055 Jr.preencode(d, o.labels),
4056 e.uint.preencode(d, o.editedAt),
4057 d.end++,
4058 n >= 15 && o.flagsClock && e.uint.preencode(d, o.flagsClock),
4059 n >= 15 && o.version && e.uint.preencode(d, o.version))
4060 },
4061 encode(d, o) {
4062 const c =
4063 (n >= 15 && o.flagsClock ? 1 : 0) |
4064 (n >= 15 && o.version ? 2 : 0) |
4065 (n >= 16 && o.isDeleted ? 4 : 0)
4066 ;(fn.encode(d, o.id),
4067 e.uint.encode(d, o.total),
4068 Jr.encode(d, o.labels),
4069 e.uint.encode(d, o.editedAt),
4070 e.uint.encode(d, c),
4071 n >= 15 && o.flagsClock && e.uint.encode(d, o.flagsClock),
4072 n >= 15 && o.version && e.uint.encode(d, o.version))
4073 },
4074 decode(d) {
4075 const o = fn.decode(d),
4076 c = e.uint.decode(d),
4077 t = Jr.decode(d),
4078 r = e.uint.decode(d),
4079 i = d.start < d.end ? e.uint.decode(d) : 0
4080 return {
4081 id: o,
4082 total: c,
4083 labels: t,
4084 editedAt: r,
4085 flagsClock: n >= 15 && 1 & i ? e.uint.decode(d) : 0,
4086 version: n >= 15 && 2 & i ? e.uint.decode(d) : 0,
4087 isDeleted: n >= 16 && !!(4 & i),
4088 }
4089 },
4090 },
4091 Hr = {
4092 preencode(d, n) {
4093 e.uint.preencode(d, n.length)
4094 },
4095 encode(d, n) {
4096 e.uint.encode(d, n.length)
4097 },
4098 decode: (d) => ({ memberKey: null, length: e.uint.decode(d) }),
4099 },
4100 zr = zt,
4101 Gr = {
4102 preencode(d, n) {
4103 e.uint.preencode(d, n.clock)
4104 },
4105 encode(d, n) {
4106 e.uint.encode(d, n.clock)
4107 },
4108 decode: (d) => ({ key: null, sender: null, clock: e.uint.decode(d), label: 0 }),
4109 },
4110 Qr = bt,
4111 Wr = {
4112 preencode(d, n) {
4113 ;(e.uint.preencode(d, n.total),
4114 Qr.preencode(d, n.labels),
4115 e.uint.preencode(d, n.editedAt),
4116 e.uint.preencode(d, n.flagsClock))
4117 },
4118 encode(d, n) {
4119 ;(e.uint.encode(d, n.total),
4120 Qr.encode(d, n.labels),
4121 e.uint.encode(d, n.editedAt),
4122 e.uint.encode(d, n.flagsClock))
4123 },
4124 decode: (d) => ({
4125 key: null,
4126 total: e.uint.decode(d),
4127 labels: Qr.decode(d),
4128 editedAt: e.uint.decode(d),
4129 flagsClock: e.uint.decode(d),
4130 }),
4131 },
4132 Xr = {
4133 preencode(d, o) {
4134 ;(e.buffer.preencode(d, o.encryptionKey),
4135 e.uint.preencode(d, o.createdAt),
4136 d.end++,
4137 n >= 19 && o.endedAt && e.uint.preencode(d, o.endedAt),
4138 n >= 19 && o.discoveryKey && e.fixed32.preencode(d, o.discoveryKey),
4139 n >= 19 && o.version && e.uint.preencode(d, o.version))
4140 },
4141 encode(d, o) {
4142 const c =
4143 (n >= 19 && o.endedAt ? 1 : 0) |
4144 (n >= 19 && o.discoveryKey ? 2 : 0) |
4145 (n >= 19 && o.version ? 4 : 0)
4146 ;(e.buffer.encode(d, o.encryptionKey),
4147 e.uint.encode(d, o.createdAt),
4148 e.uint.encode(d, c),
4149 n >= 19 && o.endedAt && e.uint.encode(d, o.endedAt),
4150 n >= 19 && o.discoveryKey && e.fixed32.encode(d, o.discoveryKey),
4151 n >= 19 && o.version && e.uint.encode(d, o.version))
4152 },
4153 decode(d) {
4154 const o = e.buffer.decode(d),
4155 c = e.uint.decode(d),
4156 t = e.uint.decode(d)
4157 return {
4158 callKey: null,
4159 encryptionKey: o,
4160 createdAt: c,
4161 endedAt: n >= 19 && 1 & t ? e.uint.decode(d) : 0,
4162 discoveryKey: n >= 19 && 2 & t ? e.fixed32.decode(d) : null,
4163 version: n >= 19 && 4 & t ? e.uint.decode(d) : 0,
4164 }
4165 },
4166 },
4167 Yr = {
4168 preencode(d, n) {
4169 e.uint.preencode(d, n.createdAt)
4170 },
4171 encode(d, n) {
4172 e.uint.encode(d, n.createdAt)
4173 },
4174 decode: (d) => ({ callKey: null, memberKey: null, createdAt: e.uint.decode(d) }),
4175 },
4176 Zr = {
4177 preencode(d, o) {
4178 ;(e.fixed32.preencode(d, o.memberKey),
4179 e.uint.preencode(d, o.createdAt),
4180 d.end++,
4181 n >= 19 && o.swarmKey && e.fixed32.preencode(d, o.swarmKey))
4182 },
4183 encode(d, o) {
4184 const c = n >= 19 && o.swarmKey ? 1 : 0
4185 ;(e.fixed32.encode(d, o.memberKey),
4186 e.uint.encode(d, o.createdAt),
4187 e.uint.encode(d, c),
4188 n >= 19 && o.swarmKey && e.fixed32.encode(d, o.swarmKey))
4189 },
4190 decode(d) {
4191 const o = e.fixed32.decode(d),
4192 c = e.uint.decode(d),
4193 t = e.uint.decode(d)
4194 return {
4195 callKey: null,
4196 deviceKey: null,
4197 memberKey: o,
4198 createdAt: c,
4199 swarmKey: n >= 19 && 1 & t ? e.fixed32.decode(d) : null,
4200 }
4201 },
4202 },
4203 $r = {
4204 preencode(d, n) {
4205 ;(e.fixed32.preencode(d, n.deviceKey), e.uint.preencode(d, n.createdAt))
4206 },
4207 encode(d, n) {
4208 ;(e.fixed32.encode(d, n.deviceKey), e.uint.encode(d, n.createdAt))
4209 },
4210 decode: (d) => ({
4211 callKey: null,
4212 deviceKey: e.fixed32.decode(d),
4213 streamKey: null,
4214 createdAt: e.uint.decode(d),
4215 }),
4216 },
4217 _r = Nr,
4218 ei = e.frame(A),
4219 di = ei,
4220 ni = e.array(Ec),
4221 oi = e.frame(pe),
4222 ci = ei,
4223 ti = oi,
4224 ri = e.frame(Kc),
4225 ii = oi,
4226 ai = e.frame(md),
4227 si = e.frame(bc),
4228 pi = e.frame(kt),
4229 ui = pi,
4230 li = e.array(e.frame(Nc)),
4231 fi = ei,
4232 mi = e.frame(Jo),
4233 yi = mi,
4234 bi = mi,
4235 xi = ei,
4236 ki = oi,
4237 vi = mi
4238function gi(e) {
4239 n = e
4240}
4241function hi(d, o, c = 20) {
4242 return ((n = c), e.encode(Ai(d), o))
4243}
4244function Ki(d, o, c = 20) {
4245 return ((n = c), e.decode(Ai(d), o))
4246}
4247function wi(e) {
4248 switch (e) {
4249 case "@keet/room-type":
4250 return J
4251 case "@keet/display-type":
4252 return Pc
4253 case "@keet/system-settings-keys":
4254 return qc
4255 case "@keet/room-supported-language":
4256 return Ic
4257 case "@keet/label-type":
4258 return Hc
4259 case "@keet-private-id/user-settings-key":
4260 return tt
4261 case "@keet/member-label-type":
4262 return pt
4263 case "@keet/build-type":
4264 return jt
4265 default:
4266 throw new Error("Enum not found " + e)
4267 }
4268}
4269function Ai(e) {
4270 switch (e) {
4271 case "@keet/head":
4272 return o
4273 case "@keet/oplog-id":
4274 return c
4275 case "@keet/encryption-keypair":
4276 return t
4277 case "@keet/signing-keypair":
4278 return r
4279 case "@keet/room-keys":
4280 return i
4281 case "@keet/operation-header":
4282 return a
4283 case "@keet/blob-pointer":
4284 return s
4285 case "@keet/file-dimensions":
4286 return p
4287 case "@keet/file-metadata":
4288 return l
4289 case "@keet/external-drive-pointer":
4290 return f
4291 case "@keet/external-blob-pointer":
4292 return m
4293 case "@keet/file-pointer":
4294 return x
4295 case "@keet/file":
4296 return g
4297 case "@keet/image-file":
4298 return A
4299 case "@keet/file-status":
4300 return T
4301 case "@keet/file-record":
4302 return R
4303 case "@keet/device-status":
4304 return C
4305 case "@keet/member-status":
4306 return D
4307 case "@keet/member-moderation-status":
4308 return F
4309 case "@keet/abi":
4310 return M
4311 case "@keet/device-stats":
4312 return q
4313 case "@keet/member-stats":
4314 return L
4315 case "@keet/chat-stats":
4316 return I
4317 case "@keet/file-stats":
4318 return E
4319 case "@keet/stats":
4320 return O
4321 case "@keet/room-type":
4322 return U
4323 case "@keet/system-settings":
4324 return H
4325 case "@keet/system-digest":
4326 return Q
4327 case "@keet/room-seed":
4328 return W
4329 case "@keet/room-capabilities":
4330 return X
4331 case "@keet/room-config":
4332 return Z
4333 case "@keet/blind-peer":
4334 return $
4335 case "@keet/add-blind-peer-operation":
4336 return de
4337 case "@keet/remove-blind-peer-operation":
4338 return oe
4339 case "@keet/identity-attestation":
4340 return ce
4341 case "@keet/device-invitation":
4342 return te
4343 case "@keet/device":
4344 return ae
4345 case "@keet/member-profile":
4346 return se
4347 case "@keet/device-profile":
4348 return pe
4349 case "@keet/member-update":
4350 return le
4351 case "@keet/device-update":
4352 return fe
4353 case "@keet/signed-pairing-data":
4354 return me
4355 case "@keet/device-request-identity":
4356 return ye
4357 case "@keet/device-response-identity":
4358 return be
4359 case "@keet/device-request-with-invitation":
4360 return ge
4361 case "@keet/device-request-with-invitation-and-proof":
4362 return Ke
4363 case "@keet/device-request-with-member-proof":
4364 return Te
4365 case "@keet/device-request":
4366 return Re
4367 case "@keet/device-response":
4368 return Fe
4369 case "@keet/invitation-metadata":
4370 return Me
4371 case "@keet/invitation":
4372 return Ie
4373 case "@keet/add-invitation-operation":
4374 return Ne
4375 case "@keet/remove-invitation-operation":
4376 return Ve
4377 case "@keet/sendable-room-invitation":
4378 return Oe
4379 case "@keet/sendable-identity-invitation":
4380 return Je
4381 case "@keet/sendable-contact-invitation":
4382 return Ue
4383 case "@keet/sendable-invitation":
4384 return We
4385 case "@keet/add-device-operation":
4386 return Ye
4387 case "@keet/update-device-operation":
4388 return $e
4389 case "@keet/start-indexing-operation":
4390 return _e
4391 case "@keet/stop-indexing-operation":
4392 return ed
4393 case "@keet/join-request":
4394 return nd
4395 case "@keet/accept-join-request-operation":
4396 return td
4397 case "@keet/reject-join-request-operation":
4398 return id
4399 case "@keet/member":
4400 return pd
4401 case "@keet/full-member":
4402 return fd
4403 case "@keet/member-proofs":
4404 return md
4405 case "@keet/update-member-operation":
4406 return xd
4407 case "@keet/change-member-status-operation":
4408 return gd
4409 case "@keet/change-member-role-operation":
4410 return Kd
4411 case "@keet/remove-member-operation":
4412 return Ad
4413 case "@keet/member-activity":
4414 return Td
4415 case "@keet/member-joined-event":
4416 return Pd
4417 case "@keet/member-left-event":
4418 return Sd
4419 case "@keet/title-changed-chat-event":
4420 return Rd
4421 case "@keet/chat-event":
4422 return Md
4423 case "@keet/sendable-event":
4424 return qd
4425 case "@keet/display-range":
4426 return Ld
4427 case "@keet/display-content-range":
4428 return Ed
4429 case "@keet/mention-display-item":
4430 return Nd
4431 case "@keet/link-preview":
4432 return Od
4433 case "@keet/display-link-item":
4434 return Hd
4435 case "@keet/display":
4436 return en
4437 case "@keet/oplog-message":
4438 return cn
4439 case "@keet/index-message":
4440 return an
4441 case "@keet/full-index-message":
4442 return un
4443 case "@keet/message-status":
4444 return ln
4445 case "@keet/message-index-id":
4446 return fn
4447 case "@keet/thread":
4448 return yn
4449 case "@keet/chat-message-record":
4450 return vn
4451 case "@keet/full-chat-message-record":
4452 return wn
4453 case "@keet/add-chat-message-operation":
4454 return Pn
4455 case "@keet/remove-chat-message-operation":
4456 return Rn
4457 case "@keet/update-chat-message-operation":
4458 return Fn
4459 case "@keet/pin-chat-message-operation":
4460 return qn
4461 case "@keet/reaction":
4462 return Ln
4463 case "@keet/reactions-summary":
4464 return In
4465 case "@keet/reactions-digest":
4466 return Bn
4467 case "@keet/add-reaction-operation":
4468 return jn
4469 case "@keet/remove-reaction-operation":
4470 return On
4471 case "@keet/update-room-config-operation":
4472 return Hn
4473 case "@keet/group-member":
4474 return zn
4475 case "@keet/user-registry-info":
4476 return Gn
4477 case "@keet/room-identity":
4478 return Wn
4479 case "@keet/genesis-operation":
4480 return oo
4481 case "@keet/upgrade-operation":
4482 return to
4483 case "@keet/update-system-settings-operation":
4484 return ao
4485 case "@keet-private-id/contact":
4486 return so
4487 case "@keet-private-id/v3-room-migration-info":
4488 return po
4489 case "@keet-private-id/run-v3-migration-operation":
4490 return fo
4491 case "@keet-private-id/update-identity-operation":
4492 return yo
4493 case "@keet-private-id/counters":
4494 return bo
4495 case "@keet-private-id/stats":
4496 return xo
4497 case "@keet-private-id/add-entropy-operation":
4498 return ko
4499 case "@keet-private-id/pending-invitation-identity":
4500 return vo
4501 case "@keet-private-id/pending-invitation":
4502 return ho
4503 case "@keet-private-id/resolve-pending-invitation-operation":
4504 return wo
4505 case "@keet-private-id/add-pending-invitation-operation":
4506 return Po
4507 case "@keet-private-id/remove-pending-invitation-operation":
4508 return Ro
4509 case "@keet-private-id/identity-swap":
4510 return Co
4511 case "@keet-private-id/room-status":
4512 return Do
4513 case "@keet-private-id/room":
4514 return Lo
4515 case "@keet-private-id/add-room-operation":
4516 return Eo
4517 case "@keet-private-id/remove-room-operation":
4518 return No
4519 case "@keet-private-id/update-room-status-operation":
4520 return Oo
4521 case "@keet-private-id/contact-status":
4522 return Jo
4523 case "@keet-private-id/contact-record":
4524 return Uo
4525 case "@keet-private-id/add-contact-operation":
4526 return Go
4527 case "@keet-private-id/update-contact-status-operation":
4528 return Wo
4529 case "@keet-private-id/remove-contact-operation":
4530 return Yo
4531 case "@keet-private-id/contact-request-status":
4532 return Zo
4533 case "@keet-private-id/contact-request-body":
4534 return ec
4535 case "@keet-private-id/contact-request":
4536 return nc
4537 case "@keet-private-id/contact-request-record":
4538 return rc
4539 case "@keet-private-id/add-contact-request-operation":
4540 return ac
4541 case "@keet-private-id/update-contact-request-status-operation":
4542 return uc
4543 case "@keet-private-id/profile-discovery-record-v1":
4544 return lc
4545 case "@keet-private-id/profile-discovery-record":
4546 return fc
4547 case "@keet/add-file-preview-operation":
4548 return yc
4549 case "@keet/member-removed-event":
4550 return bc
4551 case "@keet/member-contact-info":
4552 return kc
4553 case "@keet/remove-device-operation":
4554 return gc
4555 case "@keet/device-identity":
4556 return hc
4557 case "@keet/readonly-room-invitation":
4558 return Kc
4559 case "@keet-private-id/identity-swap-v2":
4560 return wc
4561 case "@keet-private-id/activate-contact-room-operation":
4562 return Tc
4563 case "@keet/display-type":
4564 return Sc
4565 case "@keet/test-increment-operation":
4566 return Cc
4567 case "@keet/test-collection-record-1":
4568 return Dc
4569 case "@keet/migrate-abi-operation":
4570 return Mc
4571 case "@keet/system-settings-keys":
4572 return Lc
4573 case "@keet/room-supported-language":
4574 return Ec
4575 case "@keet/translation-display-item":
4576 return Nc
4577 case "@keet-private-id/unreads":
4578 return jc
4579 case "@keet-private-id/add-unreads-key-operation":
4580 return Oc
4581 case "@keet-private-id/remove-unreads-key-operation":
4582 return Uc
4583 case "@keet/label-type":
4584 return zc
4585 case "@keet/chat-label":
4586 return Gc
4587 case "@keet/add-chat-label-operation":
4588 return Wc
4589 case "@keet/remove-chat-label-operation":
4590 return Yc
4591 case "@keet/chat-label-summary":
4592 return Zc
4593 case "@keet/chat-label-digest":
4594 return _c
4595 case "@keet/update-read-length-operation":
4596 return dt
4597 case "@keet/read-length":
4598 return nt
4599 case "@keet/tmp-removed-member":
4600 return ot
4601 case "@keet-private-id/settings":
4602 return ct
4603 case "@keet-private-id/user-settings-key":
4604 return rt
4605 case "@keet-private-id/update-settings-operation":
4606 return st
4607 case "@keet/member-label-type":
4608 return ut
4609 case "@keet/member-label":
4610 return lt
4611 case "@keet/add-member-label-operation":
4612 return mt
4613 case "@keet/member-label-summary":
4614 return yt
4615 case "@keet/member-label-digest":
4616 return xt
4617 case "@keet/location-shared-event":
4618 return kt
4619 case "@keet/move-indexer-operation":
4620 return gt
4621 case "@keet/start-call":
4622 return wt
4623 case "@keet/join-call":
4624 return Pt
4625 case "@keet/leave-call":
4626 return Rt
4627 case "@keet/end-call":
4628 return Dt
4629 case "@keet/add-call-stream":
4630 return Mt
4631 case "@keet/remove-call-stream":
4632 return Lt
4633 case "@keet/call-record":
4634 return It
4635 case "@keet/call-member-record":
4636 return Et
4637 case "@keet/call-device-record":
4638 return Bt
4639 case "@keet/call-stream-record":
4640 return Nt
4641 case "@keet/build-type":
4642 return Vt
4643 case "@keet/test-crash-operation":
4644 return Jt
4645 case "@keet/test-dispatch-error-operation":
4646 return Ht
4647 case "@keet/blind-peer/hyperdb#1":
4648 return zt
4649 case "@keet/join-request/hyperdb#4":
4650 return Qt
4651 case "@keet/device/hyperdb#5":
4652 return Yt
4653 case "@keet/member-proofs/hyperdb#10":
4654 return Zt
4655 case "@keet/member/hyperdb#11":
4656 return er
4657 case "@keet/member-activity/hyperdb#17":
4658 return dr
4659 case "@keet/invitation/hyperdb#18":
4660 return cr
4661 case "@keet/thread/hyperdb#19":
4662 return rr
4663 case "@keet/message-index-id/hyperdb#21":
4664 return ir
4665 case "@keet/chat-message-record/hyperdb#21":
4666 return ur
4667 case "@keet/message-index-id/hyperdb#25":
4668 return lr
4669 case "@keet/reactions-digest/hyperdb#25":
4670 return mr
4671 case "@keet/message-index-id/hyperdb#26":
4672 return yr
4673 case "@keet/reaction/hyperdb#26":
4674 return br
4675 case "@keet/file-record/hyperdb#28":
4676 return vr
4677 case "@keet-private-id/pending-invitation/hyperdb#35":
4678 return hr
4679 case "@keet-private-id/room/hyperdb#36":
4680 return Tr
4681 case "@keet-private-id/contact-record/hyperdb#38":
4682 return Pr
4683 case "@keet-private-id/contact-request-record/hyperdb#40":
4684 return Dr
4685 case "@keet/test-collection-record-1/hyperdb#46":
4686 return Fr
4687 case "@keet/device-identity/hyperdb#50":
4688 return Mr
4689 case "@keet/room-keys/hyperdb#51":
4690 return qr
4691 case "@keet-private-id/contact-request-record/hyperdb#51":
4692 return Br
4693 case "@keet-private-id/unreads/hyperdb#59":
4694 return Nr
4695 case "@keet/message-index-id/hyperdb#60":
4696 return jr
4697 case "@keet/chat-label/hyperdb#60":
4698 return Vr
4699 case "@keet/message-index-id/hyperdb#61":
4700 return Or
4701 case "@keet/chat-label-digest/hyperdb#61":
4702 return Ur
4703 case "@keet/read-length/hyperdb#62":
4704 return Hr
4705 case "@keet/tmp-removed-member/hyperdb#63":
4706 return zr
4707 case "@keet/member-label/hyperdb#66":
4708 return Gr
4709 case "@keet/member-label-digest/hyperdb#67":
4710 return Wr
4711 case "@keet/call-record/hyperdb#69":
4712 return Xr
4713 case "@keet/call-member-record/hyperdb#72":
4714 return Yr
4715 case "@keet/call-device-record/hyperdb#73":
4716 return Zr
4717 case "@keet/call-stream-record/hyperdb#75":
4718 return $r
4719 case "@keet-private-id/unreads/hyperdb#77":
4720 return _r
4721 default:
4722 throw new Error("Encoder not found " + e)
4723 }
4724}
4725function Ti(e, d = 20) {
4726 const o = Ai(e)
4727 return {
4728 preencode(e, c) {
4729 ;((n = d), o.preencode(e, c))
4730 },
4731 encode(e, c) {
4732 ;((n = d), o.encode(e, c))
4733 },
4734 decode: (e) => ((n = d), o.decode(e)),
4735 }
4736}
4737const Pi = Ti
4738module.exports = {
4739 resolveStruct: Pi,
4740 getStruct: Ti,
4741 getEnum: wi,
4742 getEncoding: Ai,
4743 encode: hi,
4744 decode: Ki,
4745 setVersion: gi,
4746 version: n,
4747}
keet-core-4.14.4-pretty/schema/spec/contract/hyperdispatch/dispatch.json +354 -0
……@@ -0,0 +1,354 @@
1{
2 "version": 12,
3 "offset": 2,
4 "schema": [
5 {
6 "id": 2,
7 "name": "@keet/genesis",
8 "requestType": "@keet/genesis-operation",
9 "version": 1
10 },
11 {
12 "id": 3,
13 "name": "@keet/upgrade",
14 "requestType": "@keet/upgrade-operation",
15 "version": 1
16 },
17 {
18 "id": 4,
19 "name": "@keet/update-system-settings",
20 "requestType": "@keet/update-system-settings-operation",
21 "version": 1
22 },
23 {
24 "id": 5,
25 "name": "@keet/add-blind-peer",
26 "requestType": "@keet/add-blind-peer-operation",
27 "version": 1
28 },
29 {
30 "id": 6,
31 "name": "@keet/remove-blind-peer",
32 "requestType": "@keet/remove-blind-peer-operation",
33 "version": 1
34 },
35 {
36 "id": 7,
37 "name": "@keet/add-device",
38 "requestType": "@keet/add-device-operation",
39 "version": 1
40 },
41 {
42 "id": 8,
43 "name": "@keet/update-device",
44 "requestType": "@keet/update-device-operation",
45 "version": 1
46 },
47 {
48 "id": 9,
49 "name": "@keet/start-indexing",
50 "requestType": "@keet/start-indexing-operation",
51 "version": 1
52 },
53 {
54 "id": 10,
55 "name": "@keet/stop-indexing",
56 "requestType": "@keet/stop-indexing-operation",
57 "version": 1
58 },
59 {
60 "id": 11,
61 "name": "@keet/accept-join-request",
62 "requestType": "@keet/accept-join-request-operation",
63 "version": 1
64 },
65 {
66 "id": 12,
67 "name": "@keet/reject-join-request",
68 "requestType": "@keet/reject-join-request-operation",
69 "version": 1
70 },
71 {
72 "id": 13,
73 "name": "@keet/update-member",
74 "requestType": "@keet/update-member-operation",
75 "version": 1
76 },
77 {
78 "id": 14,
79 "name": "@keet/change-member-role",
80 "requestType": "@keet/change-member-role-operation",
81 "version": 1
82 },
83 {
84 "id": 15,
85 "name": "@keet/change-member-status",
86 "requestType": "@keet/change-member-status-operation",
87 "version": 1
88 },
89 {
90 "id": 16,
91 "name": "@keet/remove-member",
92 "requestType": "@keet/remove-member-operation",
93 "version": 1
94 },
95 {
96 "id": 17,
97 "name": "@keet/add-invitation",
98 "requestType": "@keet/add-invitation-operation",
99 "version": 1
100 },
101 {
102 "id": 18,
103 "name": "@keet/remove-invitation",
104 "requestType": "@keet/remove-invitation-operation",
105 "version": 1
106 },
107 {
108 "id": 19,
109 "name": "@keet/add-chat-message",
110 "requestType": "@keet/add-chat-message-operation",
111 "version": 1
112 },
113 {
114 "id": 20,
115 "name": "@keet/remove-chat-message",
116 "requestType": "@keet/remove-chat-message-operation",
117 "version": 1
118 },
119 {
120 "id": 21,
121 "name": "@keet/update-chat-message",
122 "requestType": "@keet/update-chat-message-operation",
123 "version": 1
124 },
125 {
126 "id": 22,
127 "name": "@keet/pin-chat-message",
128 "requestType": "@keet/pin-chat-message-operation",
129 "version": 1
130 },
131 {
132 "id": 23,
133 "name": "@keet/add-reaction",
134 "requestType": "@keet/add-reaction-operation",
135 "version": 1
136 },
137 {
138 "id": 24,
139 "name": "@keet/remove-reaction",
140 "requestType": "@keet/remove-reaction-operation",
141 "version": 1
142 },
143 {
144 "id": 25,
145 "name": "@keet/update-room-config",
146 "requestType": "@keet/update-room-config-operation",
147 "version": 1
148 },
149 {
150 "id": 26,
151 "name": "@keet-private-id/run-v3-migration",
152 "requestType": "@keet-private-id/run-v3-migration-operation",
153 "version": 1
154 },
155 {
156 "id": 27,
157 "name": "@keet-private-id/update-identity",
158 "requestType": "@keet-private-id/update-identity-operation",
159 "version": 1
160 },
161 {
162 "id": 28,
163 "name": "@keet-private-id/resolve-pending-invitation",
164 "requestType": "@keet-private-id/resolve-pending-invitation-operation",
165 "version": 1
166 },
167 {
168 "id": 29,
169 "name": "@keet-private-id/add-pending-invitation",
170 "requestType": "@keet-private-id/add-pending-invitation-operation",
171 "version": 1
172 },
173 {
174 "id": 30,
175 "name": "@keet-private-id/remove-pending-invitation",
176 "requestType": "@keet-private-id/remove-pending-invitation-operation",
177 "version": 1
178 },
179 {
180 "id": 31,
181 "name": "@keet-private-id/add-room",
182 "requestType": "@keet-private-id/add-room-operation",
183 "version": 1
184 },
185 {
186 "id": 32,
187 "name": "@keet-private-id/remove-room",
188 "requestType": "@keet-private-id/remove-room-operation",
189 "version": 1
190 },
191 {
192 "id": 33,
193 "name": "@keet-private-id/update-room-status",
194 "requestType": "@keet-private-id/update-room-status-operation",
195 "version": 1
196 },
197 {
198 "id": 34,
199 "name": "@keet-private-id/add-contact",
200 "requestType": "@keet-private-id/add-contact-operation",
201 "version": 1
202 },
203 {
204 "id": 35,
205 "name": "@keet-private-id/update-contact-status",
206 "requestType": "@keet-private-id/update-contact-status-operation",
207 "version": 1
208 },
209 {
210 "id": 36,
211 "name": "@keet-private-id/remove-contact",
212 "requestType": "@keet-private-id/remove-contact-operation",
213 "version": 1
214 },
215 {
216 "id": 37,
217 "name": "@keet-private-id/add-contact-request",
218 "requestType": "@keet-private-id/add-contact-request-operation",
219 "version": 1
220 },
221 {
222 "id": 38,
223 "name": "@keet-private-id/update-contact-request-status",
224 "requestType": "@keet-private-id/update-contact-request-status-operation",
225 "version": 1
226 },
227 {
228 "id": 39,
229 "name": "@keet/add-file-preview",
230 "requestType": "@keet/add-file-preview-operation",
231 "version": 2
232 },
233 {
234 "id": 40,
235 "name": "@keet/remove-device",
236 "requestType": "@keet/remove-device-operation",
237 "version": 3
238 },
239 {
240 "id": 41,
241 "name": "@keet-private-id/activate-contact-room",
242 "requestType": "@keet-private-id/activate-contact-room-operation",
243 "version": 4
244 },
245 {
246 "id": 42,
247 "name": "@keet/test-increment",
248 "requestType": "@keet/test-increment-operation",
249 "version": 5
250 },
251 {
252 "id": 43,
253 "name": "@keet/migrate-abi",
254 "requestType": "@keet/migrate-abi-operation",
255 "version": 6
256 },
257 {
258 "id": 44,
259 "name": "@keet-private-id/add-unreads-key",
260 "requestType": "@keet-private-id/add-unreads-key-operation",
261 "version": 7
262 },
263 {
264 "id": 45,
265 "name": "@keet-private-id/remove-unreads-key",
266 "requestType": "@keet-private-id/remove-unreads-key-operation",
267 "version": 7
268 },
269 {
270 "id": 46,
271 "name": "@keet/add-chat-label",
272 "requestType": "@keet/add-chat-label-operation",
273 "version": 8
274 },
275 {
276 "id": 47,
277 "name": "@keet/remove-chat-label",
278 "requestType": "@keet/remove-chat-label-operation",
279 "version": 8
280 },
281 {
282 "id": 48,
283 "name": "@keet/update-read-length",
284 "requestType": "@keet/update-read-length-operation",
285 "version": 8
286 },
287 {
288 "id": 49,
289 "name": "@keet-private-id/update-settings",
290 "requestType": "@keet-private-id/update-settings-operation",
291 "version": 8
292 },
293 {
294 "id": 50,
295 "name": "@keet/add-member-label",
296 "requestType": "@keet/add-member-label-operation",
297 "version": 9
298 },
299 {
300 "id": 51,
301 "name": "@keet/move-indexer",
302 "requestType": "@keet/move-indexer-operation",
303 "version": 10
304 },
305 {
306 "id": 52,
307 "name": "@keet/start-call",
308 "requestType": "@keet/start-call",
309 "version": 11
310 },
311 {
312 "id": 53,
313 "name": "@keet/join-call",
314 "requestType": "@keet/join-call",
315 "version": 11
316 },
317 {
318 "id": 54,
319 "name": "@keet/leave-call",
320 "requestType": "@keet/leave-call",
321 "version": 11
322 },
323 {
324 "id": 55,
325 "name": "@keet/end-call",
326 "requestType": "@keet/end-call",
327 "version": 11
328 },
329 {
330 "id": 56,
331 "name": "@keet/add-call-stream",
332 "requestType": "@keet/add-call-stream",
333 "version": 11
334 },
335 {
336 "id": 57,
337 "name": "@keet/remove-call-stream",
338 "requestType": "@keet/remove-call-stream",
339 "version": 11
340 },
341 {
342 "id": 58,
343 "name": "@keet/test-crash",
344 "requestType": "@keet/test-crash-operation",
345 "version": 12
346 },
347 {
348 "id": 59,
349 "name": "@keet/test-dispatch-error",
350 "requestType": "@keet/test-dispatch-error-operation",
351 "version": 12
352 }
353 ]
354}
keet-core-4.14.4-pretty/schema/spec/contract/hyperdispatch/index.js +836 -0
……@@ -0,0 +1,836 @@
1const { c: e, b4a: t, assert: a, DispatchError: r, ERRORS: n } = require("hyperdispatch/runtime"),
2 { version: i, getEncoding: s, setVersion: d } = require("./messages.js"),
3 l = i
4class h {
5 constructor() {
6 ;((this._handler2 = null),
7 (this._handler3 = null),
8 (this._handler4 = null),
9 (this._handler5 = null),
10 (this._handler6 = null),
11 (this._handler7 = null),
12 (this._handler8 = null),
13 (this._handler9 = null),
14 (this._handler10 = null),
15 (this._handler11 = null),
16 (this._handler12 = null),
17 (this._handler13 = null),
18 (this._handler14 = null),
19 (this._handler15 = null),
20 (this._handler16 = null),
21 (this._handler17 = null),
22 (this._handler18 = null),
23 (this._handler19 = null),
24 (this._handler20 = null),
25 (this._handler21 = null),
26 (this._handler22 = null),
27 (this._handler23 = null),
28 (this._handler24 = null),
29 (this._handler25 = null),
30 (this._handler26 = null),
31 (this._handler27 = null),
32 (this._handler28 = null),
33 (this._handler29 = null),
34 (this._handler30 = null),
35 (this._handler31 = null),
36 (this._handler32 = null),
37 (this._handler33 = null),
38 (this._handler34 = null),
39 (this._handler35 = null),
40 (this._handler36 = null),
41 (this._handler37 = null),
42 (this._handler38 = null),
43 (this._handler39 = null),
44 (this._handler40 = null),
45 (this._handler41 = null),
46 (this._handler42 = null),
47 (this._handler43 = null),
48 (this._handler44 = null),
49 (this._handler45 = null),
50 (this._handler46 = null),
51 (this._handler47 = null),
52 (this._handler48 = null),
53 (this._handler49 = null),
54 (this._handler50 = null),
55 (this._handler51 = null),
56 (this._handler52 = null),
57 (this._handler53 = null),
58 (this._handler54 = null),
59 (this._handler55 = null),
60 (this._handler56 = null),
61 (this._handler57 = null),
62 (this._handler58 = null),
63 (this._handler59 = null),
64 (this._missing = 58))
65 }
66 add(e, t) {
67 switch (e) {
68 case "@keet/genesis":
69 this._handler2 = t
70 break
71 case "@keet/upgrade":
72 this._handler3 = t
73 break
74 case "@keet/update-system-settings":
75 this._handler4 = t
76 break
77 case "@keet/add-blind-peer":
78 this._handler5 = t
79 break
80 case "@keet/remove-blind-peer":
81 this._handler6 = t
82 break
83 case "@keet/add-device":
84 this._handler7 = t
85 break
86 case "@keet/update-device":
87 this._handler8 = t
88 break
89 case "@keet/start-indexing":
90 this._handler9 = t
91 break
92 case "@keet/stop-indexing":
93 this._handler10 = t
94 break
95 case "@keet/accept-join-request":
96 this._handler11 = t
97 break
98 case "@keet/reject-join-request":
99 this._handler12 = t
100 break
101 case "@keet/update-member":
102 this._handler13 = t
103 break
104 case "@keet/change-member-role":
105 this._handler14 = t
106 break
107 case "@keet/change-member-status":
108 this._handler15 = t
109 break
110 case "@keet/remove-member":
111 this._handler16 = t
112 break
113 case "@keet/add-invitation":
114 this._handler17 = t
115 break
116 case "@keet/remove-invitation":
117 this._handler18 = t
118 break
119 case "@keet/add-chat-message":
120 this._handler19 = t
121 break
122 case "@keet/remove-chat-message":
123 this._handler20 = t
124 break
125 case "@keet/update-chat-message":
126 this._handler21 = t
127 break
128 case "@keet/pin-chat-message":
129 this._handler22 = t
130 break
131 case "@keet/add-reaction":
132 this._handler23 = t
133 break
134 case "@keet/remove-reaction":
135 this._handler24 = t
136 break
137 case "@keet/update-room-config":
138 this._handler25 = t
139 break
140 case "@keet-private-id/run-v3-migration":
141 this._handler26 = t
142 break
143 case "@keet-private-id/update-identity":
144 this._handler27 = t
145 break
146 case "@keet-private-id/resolve-pending-invitation":
147 this._handler28 = t
148 break
149 case "@keet-private-id/add-pending-invitation":
150 this._handler29 = t
151 break
152 case "@keet-private-id/remove-pending-invitation":
153 this._handler30 = t
154 break
155 case "@keet-private-id/add-room":
156 this._handler31 = t
157 break
158 case "@keet-private-id/remove-room":
159 this._handler32 = t
160 break
161 case "@keet-private-id/update-room-status":
162 this._handler33 = t
163 break
164 case "@keet-private-id/add-contact":
165 this._handler34 = t
166 break
167 case "@keet-private-id/update-contact-status":
168 this._handler35 = t
169 break
170 case "@keet-private-id/remove-contact":
171 this._handler36 = t
172 break
173 case "@keet-private-id/add-contact-request":
174 this._handler37 = t
175 break
176 case "@keet-private-id/update-contact-request-status":
177 this._handler38 = t
178 break
179 case "@keet/add-file-preview":
180 this._handler39 = t
181 break
182 case "@keet/remove-device":
183 this._handler40 = t
184 break
185 case "@keet-private-id/activate-contact-room":
186 this._handler41 = t
187 break
188 case "@keet/test-increment":
189 this._handler42 = t
190 break
191 case "@keet/migrate-abi":
192 this._handler43 = t
193 break
194 case "@keet-private-id/add-unreads-key":
195 this._handler44 = t
196 break
197 case "@keet-private-id/remove-unreads-key":
198 this._handler45 = t
199 break
200 case "@keet/add-chat-label":
201 this._handler46 = t
202 break
203 case "@keet/remove-chat-label":
204 this._handler47 = t
205 break
206 case "@keet/update-read-length":
207 this._handler48 = t
208 break
209 case "@keet-private-id/update-settings":
210 this._handler49 = t
211 break
212 case "@keet/add-member-label":
213 this._handler50 = t
214 break
215 case "@keet/move-indexer":
216 this._handler51 = t
217 break
218 case "@keet/start-call":
219 this._handler52 = t
220 break
221 case "@keet/join-call":
222 this._handler53 = t
223 break
224 case "@keet/leave-call":
225 this._handler54 = t
226 break
227 case "@keet/end-call":
228 this._handler55 = t
229 break
230 case "@keet/add-call-stream":
231 this._handler56 = t
232 break
233 case "@keet/remove-call-stream":
234 this._handler57 = t
235 break
236 case "@keet/test-crash":
237 this._handler58 = t
238 break
239 case "@keet/test-dispatch-error":
240 this._handler59 = t
241 break
242 default:
243 throw r.NONEXISTENT_ROUTE(e)
244 }
245 this._missing--
246 }
247 _checkAll() {
248 ;(a(null !== this._handler2, 'Missing handler for "@keet/genesis"'),
249 a(null !== this._handler3, 'Missing handler for "@keet/upgrade"'),
250 a(null !== this._handler4, 'Missing handler for "@keet/update-system-settings"'),
251 a(null !== this._handler5, 'Missing handler for "@keet/add-blind-peer"'),
252 a(null !== this._handler6, 'Missing handler for "@keet/remove-blind-peer"'),
253 a(null !== this._handler7, 'Missing handler for "@keet/add-device"'),
254 a(null !== this._handler8, 'Missing handler for "@keet/update-device"'),
255 a(null !== this._handler9, 'Missing handler for "@keet/start-indexing"'),
256 a(null !== this._handler10, 'Missing handler for "@keet/stop-indexing"'),
257 a(null !== this._handler11, 'Missing handler for "@keet/accept-join-request"'),
258 a(null !== this._handler12, 'Missing handler for "@keet/reject-join-request"'),
259 a(null !== this._handler13, 'Missing handler for "@keet/update-member"'),
260 a(null !== this._handler14, 'Missing handler for "@keet/change-member-role"'),
261 a(null !== this._handler15, 'Missing handler for "@keet/change-member-status"'),
262 a(null !== this._handler16, 'Missing handler for "@keet/remove-member"'),
263 a(null !== this._handler17, 'Missing handler for "@keet/add-invitation"'),
264 a(null !== this._handler18, 'Missing handler for "@keet/remove-invitation"'),
265 a(null !== this._handler19, 'Missing handler for "@keet/add-chat-message"'),
266 a(null !== this._handler20, 'Missing handler for "@keet/remove-chat-message"'),
267 a(null !== this._handler21, 'Missing handler for "@keet/update-chat-message"'),
268 a(null !== this._handler22, 'Missing handler for "@keet/pin-chat-message"'),
269 a(null !== this._handler23, 'Missing handler for "@keet/add-reaction"'),
270 a(null !== this._handler24, 'Missing handler for "@keet/remove-reaction"'),
271 a(null !== this._handler25, 'Missing handler for "@keet/update-room-config"'),
272 a(null !== this._handler26, 'Missing handler for "@keet-private-id/run-v3-migration"'),
273 a(null !== this._handler27, 'Missing handler for "@keet-private-id/update-identity"'),
274 a(
275 null !== this._handler28,
276 'Missing handler for "@keet-private-id/resolve-pending-invitation"',
277 ),
278 a(null !== this._handler29, 'Missing handler for "@keet-private-id/add-pending-invitation"'),
279 a(
280 null !== this._handler30,
281 'Missing handler for "@keet-private-id/remove-pending-invitation"',
282 ),
283 a(null !== this._handler31, 'Missing handler for "@keet-private-id/add-room"'),
284 a(null !== this._handler32, 'Missing handler for "@keet-private-id/remove-room"'),
285 a(null !== this._handler33, 'Missing handler for "@keet-private-id/update-room-status"'),
286 a(null !== this._handler34, 'Missing handler for "@keet-private-id/add-contact"'),
287 a(null !== this._handler35, 'Missing handler for "@keet-private-id/update-contact-status"'),
288 a(null !== this._handler36, 'Missing handler for "@keet-private-id/remove-contact"'),
289 a(null !== this._handler37, 'Missing handler for "@keet-private-id/add-contact-request"'),
290 a(
291 null !== this._handler38,
292 'Missing handler for "@keet-private-id/update-contact-request-status"',
293 ),
294 a(null !== this._handler39, 'Missing handler for "@keet/add-file-preview"'),
295 a(null !== this._handler40, 'Missing handler for "@keet/remove-device"'),
296 a(null !== this._handler41, 'Missing handler for "@keet-private-id/activate-contact-room"'),
297 a(null !== this._handler42, 'Missing handler for "@keet/test-increment"'),
298 a(null !== this._handler43, 'Missing handler for "@keet/migrate-abi"'),
299 a(null !== this._handler44, 'Missing handler for "@keet-private-id/add-unreads-key"'),
300 a(null !== this._handler45, 'Missing handler for "@keet-private-id/remove-unreads-key"'),
301 a(null !== this._handler46, 'Missing handler for "@keet/add-chat-label"'),
302 a(null !== this._handler47, 'Missing handler for "@keet/remove-chat-label"'),
303 a(null !== this._handler48, 'Missing handler for "@keet/update-read-length"'),
304 a(null !== this._handler49, 'Missing handler for "@keet-private-id/update-settings"'),
305 a(null !== this._handler50, 'Missing handler for "@keet/add-member-label"'),
306 a(null !== this._handler51, 'Missing handler for "@keet/move-indexer"'),
307 a(null !== this._handler52, 'Missing handler for "@keet/start-call"'),
308 a(null !== this._handler53, 'Missing handler for "@keet/join-call"'),
309 a(null !== this._handler54, 'Missing handler for "@keet/leave-call"'),
310 a(null !== this._handler55, 'Missing handler for "@keet/end-call"'),
311 a(null !== this._handler56, 'Missing handler for "@keet/add-call-stream"'),
312 a(null !== this._handler57, 'Missing handler for "@keet/remove-call-stream"'),
313 a(null !== this._handler58, 'Missing handler for "@keet/test-crash"'),
314 a(null !== this._handler59, 'Missing handler for "@keet/test-dispatch-error"'))
315 }
316 async dispatch(e, a) {
317 ;(this._missing > 0 && this._checkAll(), d(l))
318 const n = t.isBuffer(e) ? u(e) : e
319 switch (n.id) {
320 case 2:
321 return this._handler2(n.value, a)
322 case 3:
323 return this._handler3(n.value, a)
324 case 4:
325 return this._handler4(n.value, a)
326 case 5:
327 return this._handler5(n.value, a)
328 case 6:
329 return this._handler6(n.value, a)
330 case 7:
331 return this._handler7(n.value, a)
332 case 8:
333 return this._handler8(n.value, a)
334 case 9:
335 return this._handler9(n.value, a)
336 case 10:
337 return this._handler10(n.value, a)
338 case 11:
339 return this._handler11(n.value, a)
340 case 12:
341 return this._handler12(n.value, a)
342 case 13:
343 return this._handler13(n.value, a)
344 case 14:
345 return this._handler14(n.value, a)
346 case 15:
347 return this._handler15(n.value, a)
348 case 16:
349 return this._handler16(n.value, a)
350 case 17:
351 return this._handler17(n.value, a)
352 case 18:
353 return this._handler18(n.value, a)
354 case 19:
355 return this._handler19(n.value, a)
356 case 20:
357 return this._handler20(n.value, a)
358 case 21:
359 return this._handler21(n.value, a)
360 case 22:
361 return this._handler22(n.value, a)
362 case 23:
363 return this._handler23(n.value, a)
364 case 24:
365 return this._handler24(n.value, a)
366 case 25:
367 return this._handler25(n.value, a)
368 case 26:
369 return this._handler26(n.value, a)
370 case 27:
371 return this._handler27(n.value, a)
372 case 28:
373 return this._handler28(n.value, a)
374 case 29:
375 return this._handler29(n.value, a)
376 case 30:
377 return this._handler30(n.value, a)
378 case 31:
379 return this._handler31(n.value, a)
380 case 32:
381 return this._handler32(n.value, a)
382 case 33:
383 return this._handler33(n.value, a)
384 case 34:
385 return this._handler34(n.value, a)
386 case 35:
387 return this._handler35(n.value, a)
388 case 36:
389 return this._handler36(n.value, a)
390 case 37:
391 return this._handler37(n.value, a)
392 case 38:
393 return this._handler38(n.value, a)
394 case 39:
395 return this._handler39(n.value, a)
396 case 40:
397 return this._handler40(n.value, a)
398 case 41:
399 return this._handler41(n.value, a)
400 case 42:
401 return this._handler42(n.value, a)
402 case 43:
403 return this._handler43(n.value, a)
404 case 44:
405 return this._handler44(n.value, a)
406 case 45:
407 return this._handler45(n.value, a)
408 case 46:
409 return this._handler46(n.value, a)
410 case 47:
411 return this._handler47(n.value, a)
412 case 48:
413 return this._handler48(n.value, a)
414 case 49:
415 return this._handler49(n.value, a)
416 case 50:
417 return this._handler50(n.value, a)
418 case 51:
419 return this._handler51(n.value, a)
420 case 52:
421 return this._handler52(n.value, a)
422 case 53:
423 return this._handler53(n.value, a)
424 case 54:
425 return this._handler54(n.value, a)
426 case 55:
427 return this._handler55(n.value, a)
428 case 56:
429 return this._handler56(n.value, a)
430 case 57:
431 return this._handler57(n.value, a)
432 case 58:
433 return this._handler58(n.value, a)
434 case 59:
435 return this._handler59(n.value, a)
436 default:
437 throw r.HANDLER_NOT_FOUND_BY_ID(n.id)
438 }
439 }
440}
441function c(a, r, { version: n = l } = {}) {
442 const i = { buffer: null, start: 0, end: 0 },
443 s = pe(a)
444 return (
445 d(n),
446 e.uint.preencode(i, s.id),
447 s.enc.preencode(i, r),
448 (i.buffer = t.allocUnsafe(i.end)),
449 e.uint.encode(i, s.id),
450 s.enc.encode(i, r),
451 i.buffer
452 )
453}
454function u(t, { version: a = l } = {}) {
455 const r = { buffer: t, start: 0, end: t.length },
456 n = e.uint.decode(r),
457 i = _e(n)
458 d(a)
459 const s = i.enc.decode(r)
460 return { id: n, name: i.name, value: s }
461}
462const o = { name: "@keet/genesis", id: 2, enc: s("@keet/genesis-operation") },
463 k = { name: "@keet/upgrade", id: 3, enc: s("@keet/upgrade-operation") },
464 v = {
465 name: "@keet/update-system-settings",
466 id: 4,
467 enc: s("@keet/update-system-settings-operation"),
468 },
469 m = { name: "@keet/add-blind-peer", id: 5, enc: s("@keet/add-blind-peer-operation") },
470 p = { name: "@keet/remove-blind-peer", id: 6, enc: s("@keet/remove-blind-peer-operation") },
471 _ = { name: "@keet/add-device", id: 7, enc: s("@keet/add-device-operation") },
472 g = { name: "@keet/update-device", id: 8, enc: s("@keet/update-device-operation") },
473 b = { name: "@keet/start-indexing", id: 9, enc: s("@keet/start-indexing-operation") },
474 f = { name: "@keet/stop-indexing", id: 10, enc: s("@keet/stop-indexing-operation") },
475 M = { name: "@keet/accept-join-request", id: 11, enc: s("@keet/accept-join-request-operation") },
476 q = { name: "@keet/reject-join-request", id: 12, enc: s("@keet/reject-join-request-operation") },
477 y = { name: "@keet/update-member", id: 13, enc: s("@keet/update-member-operation") },
478 j = { name: "@keet/change-member-role", id: 14, enc: s("@keet/change-member-role-operation") },
479 x = {
480 name: "@keet/change-member-status",
481 id: 15,
482 enc: s("@keet/change-member-status-operation"),
483 },
484 w = { name: "@keet/remove-member", id: 16, enc: s("@keet/remove-member-operation") },
485 E = { name: "@keet/add-invitation", id: 17, enc: s("@keet/add-invitation-operation") },
486 N = { name: "@keet/remove-invitation", id: 18, enc: s("@keet/remove-invitation-operation") },
487 O = { name: "@keet/add-chat-message", id: 19, enc: s("@keet/add-chat-message-operation") },
488 R = { name: "@keet/remove-chat-message", id: 20, enc: s("@keet/remove-chat-message-operation") },
489 D = { name: "@keet/update-chat-message", id: 21, enc: s("@keet/update-chat-message-operation") },
490 T = { name: "@keet/pin-chat-message", id: 22, enc: s("@keet/pin-chat-message-operation") },
491 U = { name: "@keet/add-reaction", id: 23, enc: s("@keet/add-reaction-operation") },
492 A = { name: "@keet/remove-reaction", id: 24, enc: s("@keet/remove-reaction-operation") },
493 B = { name: "@keet/update-room-config", id: 25, enc: s("@keet/update-room-config-operation") },
494 F = {
495 name: "@keet-private-id/run-v3-migration",
496 id: 26,
497 enc: s("@keet-private-id/run-v3-migration-operation"),
498 },
499 I = {
500 name: "@keet-private-id/update-identity",
501 id: 27,
502 enc: s("@keet-private-id/update-identity-operation"),
503 },
504 S = {
505 name: "@keet-private-id/resolve-pending-invitation",
506 id: 28,
507 enc: s("@keet-private-id/resolve-pending-invitation-operation"),
508 },
509 Y = {
510 name: "@keet-private-id/add-pending-invitation",
511 id: 29,
512 enc: s("@keet-private-id/add-pending-invitation-operation"),
513 },
514 H = {
515 name: "@keet-private-id/remove-pending-invitation",
516 id: 30,
517 enc: s("@keet-private-id/remove-pending-invitation-operation"),
518 },
519 L = { name: "@keet-private-id/add-room", id: 31, enc: s("@keet-private-id/add-room-operation") },
520 V = {
521 name: "@keet-private-id/remove-room",
522 id: 32,
523 enc: s("@keet-private-id/remove-room-operation"),
524 },
525 X = {
526 name: "@keet-private-id/update-room-status",
527 id: 33,
528 enc: s("@keet-private-id/update-room-status-operation"),
529 },
530 z = {
531 name: "@keet-private-id/add-contact",
532 id: 34,
533 enc: s("@keet-private-id/add-contact-operation"),
534 },
535 C = {
536 name: "@keet-private-id/update-contact-status",
537 id: 35,
538 enc: s("@keet-private-id/update-contact-status-operation"),
539 },
540 G = {
541 name: "@keet-private-id/remove-contact",
542 id: 36,
543 enc: s("@keet-private-id/remove-contact-operation"),
544 },
545 J = {
546 name: "@keet-private-id/add-contact-request",
547 id: 37,
548 enc: s("@keet-private-id/add-contact-request-operation"),
549 },
550 K = {
551 name: "@keet-private-id/update-contact-request-status",
552 id: 38,
553 enc: s("@keet-private-id/update-contact-request-status-operation"),
554 },
555 P = { name: "@keet/add-file-preview", id: 39, enc: s("@keet/add-file-preview-operation") },
556 Q = { name: "@keet/remove-device", id: 40, enc: s("@keet/remove-device-operation") },
557 W = {
558 name: "@keet-private-id/activate-contact-room",
559 id: 41,
560 enc: s("@keet-private-id/activate-contact-room-operation"),
561 },
562 Z = { name: "@keet/test-increment", id: 42, enc: s("@keet/test-increment-operation") },
563 $ = { name: "@keet/migrate-abi", id: 43, enc: s("@keet/migrate-abi-operation") },
564 ee = {
565 name: "@keet-private-id/add-unreads-key",
566 id: 44,
567 enc: s("@keet-private-id/add-unreads-key-operation"),
568 },
569 te = {
570 name: "@keet-private-id/remove-unreads-key",
571 id: 45,
572 enc: s("@keet-private-id/remove-unreads-key-operation"),
573 },
574 ae = { name: "@keet/add-chat-label", id: 46, enc: s("@keet/add-chat-label-operation") },
575 re = { name: "@keet/remove-chat-label", id: 47, enc: s("@keet/remove-chat-label-operation") },
576 ne = { name: "@keet/update-read-length", id: 48, enc: s("@keet/update-read-length-operation") },
577 ie = {
578 name: "@keet-private-id/update-settings",
579 id: 49,
580 enc: s("@keet-private-id/update-settings-operation"),
581 },
582 se = { name: "@keet/add-member-label", id: 50, enc: s("@keet/add-member-label-operation") },
583 de = { name: "@keet/move-indexer", id: 51, enc: s("@keet/move-indexer-operation") },
584 le = { name: "@keet/start-call", id: 52, enc: s("@keet/start-call") },
585 he = { name: "@keet/join-call", id: 53, enc: s("@keet/join-call") },
586 ce = { name: "@keet/leave-call", id: 54, enc: s("@keet/leave-call") },
587 ue = { name: "@keet/end-call", id: 55, enc: s("@keet/end-call") },
588 oe = { name: "@keet/add-call-stream", id: 56, enc: s("@keet/add-call-stream") },
589 ke = { name: "@keet/remove-call-stream", id: 57, enc: s("@keet/remove-call-stream") },
590 ve = { name: "@keet/test-crash", id: 58, enc: s("@keet/test-crash-operation") },
591 me = { name: "@keet/test-dispatch-error", id: 59, enc: s("@keet/test-dispatch-error-operation") }
592function pe(e) {
593 switch (e) {
594 case "@keet/genesis":
595 return o
596 case "@keet/upgrade":
597 return k
598 case "@keet/update-system-settings":
599 return v
600 case "@keet/add-blind-peer":
601 return m
602 case "@keet/remove-blind-peer":
603 return p
604 case "@keet/add-device":
605 return _
606 case "@keet/update-device":
607 return g
608 case "@keet/start-indexing":
609 return b
610 case "@keet/stop-indexing":
611 return f
612 case "@keet/accept-join-request":
613 return M
614 case "@keet/reject-join-request":
615 return q
616 case "@keet/update-member":
617 return y
618 case "@keet/change-member-role":
619 return j
620 case "@keet/change-member-status":
621 return x
622 case "@keet/remove-member":
623 return w
624 case "@keet/add-invitation":
625 return E
626 case "@keet/remove-invitation":
627 return N
628 case "@keet/add-chat-message":
629 return O
630 case "@keet/remove-chat-message":
631 return R
632 case "@keet/update-chat-message":
633 return D
634 case "@keet/pin-chat-message":
635 return T
636 case "@keet/add-reaction":
637 return U
638 case "@keet/remove-reaction":
639 return A
640 case "@keet/update-room-config":
641 return B
642 case "@keet-private-id/run-v3-migration":
643 return F
644 case "@keet-private-id/update-identity":
645 return I
646 case "@keet-private-id/resolve-pending-invitation":
647 return S
648 case "@keet-private-id/add-pending-invitation":
649 return Y
650 case "@keet-private-id/remove-pending-invitation":
651 return H
652 case "@keet-private-id/add-room":
653 return L
654 case "@keet-private-id/remove-room":
655 return V
656 case "@keet-private-id/update-room-status":
657 return X
658 case "@keet-private-id/add-contact":
659 return z
660 case "@keet-private-id/update-contact-status":
661 return C
662 case "@keet-private-id/remove-contact":
663 return G
664 case "@keet-private-id/add-contact-request":
665 return J
666 case "@keet-private-id/update-contact-request-status":
667 return K
668 case "@keet/add-file-preview":
669 return P
670 case "@keet/remove-device":
671 return Q
672 case "@keet-private-id/activate-contact-room":
673 return W
674 case "@keet/test-increment":
675 return Z
676 case "@keet/migrate-abi":
677 return $
678 case "@keet-private-id/add-unreads-key":
679 return ee
680 case "@keet-private-id/remove-unreads-key":
681 return te
682 case "@keet/add-chat-label":
683 return ae
684 case "@keet/remove-chat-label":
685 return re
686 case "@keet/update-read-length":
687 return ne
688 case "@keet-private-id/update-settings":
689 return ie
690 case "@keet/add-member-label":
691 return se
692 case "@keet/move-indexer":
693 return de
694 case "@keet/start-call":
695 return le
696 case "@keet/join-call":
697 return he
698 case "@keet/leave-call":
699 return ce
700 case "@keet/end-call":
701 return ue
702 case "@keet/add-call-stream":
703 return oe
704 case "@keet/remove-call-stream":
705 return ke
706 case "@keet/test-crash":
707 return ve
708 case "@keet/test-dispatch-error":
709 return me
710 default:
711 throw r.ROUTE_NOT_FOUND_BY_NAME(e)
712 }
713}
714function _e(e) {
715 switch (e) {
716 case 2:
717 return o
718 case 3:
719 return k
720 case 4:
721 return v
722 case 5:
723 return m
724 case 6:
725 return p
726 case 7:
727 return _
728 case 8:
729 return g
730 case 9:
731 return b
732 case 10:
733 return f
734 case 11:
735 return M
736 case 12:
737 return q
738 case 13:
739 return y
740 case 14:
741 return j
742 case 15:
743 return x
744 case 16:
745 return w
746 case 17:
747 return E
748 case 18:
749 return N
750 case 19:
751 return O
752 case 20:
753 return R
754 case 21:
755 return D
756 case 22:
757 return T
758 case 23:
759 return U
760 case 24:
761 return A
762 case 25:
763 return B
764 case 26:
765 return F
766 case 27:
767 return I
768 case 28:
769 return S
770 case 29:
771 return Y
772 case 30:
773 return H
774 case 31:
775 return L
776 case 32:
777 return V
778 case 33:
779 return X
780 case 34:
781 return z
782 case 35:
783 return C
784 case 36:
785 return G
786 case 37:
787 return J
788 case 38:
789 return K
790 case 39:
791 return P
792 case 40:
793 return Q
794 case 41:
795 return W
796 case 42:
797 return Z
798 case 43:
799 return $
800 case 44:
801 return ee
802 case 45:
803 return te
804 case 46:
805 return ae
806 case 47:
807 return re
808 case 48:
809 return ne
810 case 49:
811 return ie
812 case 50:
813 return se
814 case 51:
815 return de
816 case 52:
817 return le
818 case 53:
819 return he
820 case 54:
821 return ce
822 case 55:
823 return ue
824 case 56:
825 return oe
826 case 57:
827 return ke
828 case 58:
829 return ve
830 case 59:
831 return me
832 default:
833 throw r.HANDLER_NOT_FOUND_BY_ID(e)
834 }
835}
836module.exports = { version: i, encode: c, decode: u, Router: h, DispatchError: r, ERRORS: n }
keet-core-4.14.4-pretty/schema/spec/contract/hyperdispatch/messages.js +3980 -0
……@@ -0,0 +1,3980 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 20
3let n = d
4const o = {
5 preencode(d, n) {
6 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.length))
7 },
8 encode(d, n) {
9 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.length))
10 },
11 decode: (d) => ({ key: e.fixed32.decode(d), length: e.uint.decode(d) }),
12 },
13 c = {
14 preencode(d, n) {
15 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.seq))
16 },
17 encode(d, n) {
18 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.seq))
19 },
20 decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
21 },
22 r = {
23 preencode(d, n) {
24 ;(e.fixed32.preencode(d, n.publicKey), e.fixed32.preencode(d, n.secretKey))
25 },
26 encode(d, n) {
27 ;(e.fixed32.encode(d, n.publicKey), e.fixed32.encode(d, n.secretKey))
28 },
29 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed32.decode(d) }),
30 },
31 t = {
32 preencode(d, n) {
33 ;(e.fixed32.preencode(d, n.publicKey), e.fixed64.preencode(d, n.secretKey))
34 },
35 encode(d, n) {
36 ;(e.fixed32.encode(d, n.publicKey), e.fixed64.encode(d, n.secretKey))
37 },
38 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed64.decode(d) }),
39 },
40 i = {
41 preencode(d, n) {
42 ;(e.fixed32.preencode(d, n.key),
43 d.end++,
44 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
45 n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo))
46 },
47 encode(d, n) {
48 const o = (n.encryptionKey ? 1 : 0) | (n.fastForwardTo ? 2 : 0)
49 ;(e.fixed32.encode(d, n.key),
50 e.uint.encode(d, o),
51 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
52 n.fastForwardTo && e.fixed32.encode(d, n.fastForwardTo))
53 },
54 decode(d) {
55 const n = e.fixed32.decode(d),
56 o = e.uint.decode(d)
57 return {
58 key: n,
59 encryptionKey: 1 & o ? e.buffer.decode(d) : null,
60 fastForwardTo: 2 & o ? e.fixed32.decode(d) : null,
61 }
62 },
63 },
64 a = {
65 preencode(d, n) {
66 e.uint.preencode(d, n.timestamp)
67 },
68 encode(d, n) {
69 e.uint.encode(d, n.timestamp)
70 },
71 decode: (d) => ({ timestamp: e.uint.decode(d) }),
72 },
73 s = {
74 preencode(d, n) {
75 ;(e.uint.preencode(d, n.blockOffset),
76 e.uint.preencode(d, n.blockLength),
77 e.uint.preencode(d, n.byteOffset),
78 e.uint.preencode(d, n.byteLength))
79 },
80 encode(d, n) {
81 ;(e.uint.encode(d, n.blockOffset),
82 e.uint.encode(d, n.blockLength),
83 e.uint.encode(d, n.byteOffset),
84 e.uint.encode(d, n.byteLength))
85 },
86 decode: (d) => ({
87 blockOffset: e.uint.decode(d),
88 blockLength: e.uint.decode(d),
89 byteOffset: e.uint.decode(d),
90 byteLength: e.uint.decode(d),
91 }),
92 },
93 p = {
94 preencode(d, n) {
95 ;(e.uint.preencode(d, n.width), e.uint.preencode(d, n.height))
96 },
97 encode(d, n) {
98 ;(e.uint.encode(d, n.width), e.uint.encode(d, n.height))
99 },
100 decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
101 },
102 u = e.frame(p),
103 l = {
104 preencode(d, n) {
105 ;(d.end++,
106 n.name && e.string.preencode(d, n.name),
107 n.mimetype && e.string.preencode(d, n.mimetype),
108 n.dimensions && u.preencode(d, n.dimensions),
109 n.userdata && e.buffer.preencode(d, n.userdata),
110 n.duration && e.uint.preencode(d, n.duration))
111 },
112 encode(d, n) {
113 const o =
114 (n.name ? 1 : 0) |
115 (n.mimetype ? 2 : 0) |
116 (n.dimensions ? 4 : 0) |
117 (n.userdata ? 8 : 0) |
118 (n.duration ? 16 : 0) |
119 (n.isPreview ? 32 : 0)
120 ;(e.uint.encode(d, o),
121 n.name && e.string.encode(d, n.name),
122 n.mimetype && e.string.encode(d, n.mimetype),
123 n.dimensions && u.encode(d, n.dimensions),
124 n.userdata && e.buffer.encode(d, n.userdata),
125 n.duration && e.uint.encode(d, n.duration))
126 },
127 decode(d) {
128 const n = e.uint.decode(d)
129 return {
130 name: 1 & n ? e.string.decode(d) : null,
131 mimetype: 2 & n ? e.string.decode(d) : null,
132 dimensions: 4 & n ? u.decode(d) : null,
133 userdata: 8 & n ? e.buffer.decode(d) : null,
134 duration: 16 & n ? e.uint.decode(d) : 0,
135 isPreview: !!(32 & n),
136 }
137 },
138 },
139 f = {
140 preencode(d, n) {
141 ;(e.fixed32.preencode(d, n.key),
142 e.string.preencode(d, n.path),
143 e.uint.preencode(d, n.version),
144 e.uint.preencode(d, n.size))
145 },
146 encode(d, n) {
147 ;(e.fixed32.encode(d, n.key),
148 e.string.encode(d, n.path),
149 e.uint.encode(d, n.version),
150 e.uint.encode(d, n.size))
151 },
152 decode: (d) => ({
153 key: e.fixed32.decode(d),
154 path: e.string.decode(d),
155 version: e.uint.decode(d),
156 size: e.uint.decode(d),
157 }),
158 },
159 m = {
160 preencode(d, n) {
161 ;(e.fixed32.preencode(d, n.key), s.preencode(d, n.blob))
162 },
163 encode(d, n) {
164 ;(e.fixed32.encode(d, n.key), s.encode(d, n.blob))
165 },
166 decode: (d) => ({ key: e.fixed32.decode(d), blob: s.decode(d) }),
167 },
168 y = e.frame(m),
169 x = e.frame(f),
170 b = {
171 preencode(d, n) {
172 ;(d.end++,
173 n.inlined && e.buffer.preencode(d, n.inlined),
174 n.blob && s.preencode(d, n.blob),
175 n.externalBlob && y.preencode(d, n.externalBlob),
176 n.externalDrive && x.preencode(d, n.externalDrive))
177 },
178 encode(d, n) {
179 const o =
180 (n.inlined ? 1 : 0) |
181 (n.blob ? 2 : 0) |
182 (n.externalBlob ? 4 : 0) |
183 (n.externalDrive ? 8 : 0)
184 ;(e.uint.encode(d, o),
185 n.inlined && e.buffer.encode(d, n.inlined),
186 n.blob && s.encode(d, n.blob),
187 n.externalBlob && y.encode(d, n.externalBlob),
188 n.externalDrive && x.encode(d, n.externalDrive))
189 },
190 decode(d) {
191 const n = e.uint.decode(d)
192 return {
193 inlined: 1 & n ? e.buffer.decode(d) : null,
194 blob: 2 & n ? s.decode(d) : null,
195 externalBlob: 4 & n ? y.decode(d) : null,
196 externalDrive: 8 & n ? x.decode(d) : null,
197 }
198 },
199 },
200 k = e.frame(b),
201 v = e.frame(l),
202 g = {
203 preencode(d, n) {
204 ;(k.preencode(d, n.pointer),
205 d.end++,
206 n.metadata && v.preencode(d, n.metadata),
207 n.preview && zr.preencode(d, n.preview),
208 n.hash && e.fixed32.preencode(d, n.hash))
209 },
210 encode(d, n) {
211 const o = (n.metadata ? 1 : 0) | (n.preview ? 2 : 0) | (n.hash ? 4 : 0)
212 ;(k.encode(d, n.pointer),
213 e.uint.encode(d, o),
214 n.metadata && v.encode(d, n.metadata),
215 n.preview && zr.encode(d, n.preview),
216 n.hash && e.fixed32.encode(d, n.hash))
217 },
218 decode(d) {
219 const n = k.decode(d),
220 o = e.uint.decode(d)
221 return {
222 pointer: n,
223 metadata: 1 & o ? v.decode(d) : null,
224 preview: 2 & o ? zr.decode(d) : null,
225 hash: 4 & o ? e.fixed32.decode(d) : null,
226 }
227 },
228 },
229 h = e.frame(g),
230 K = h,
231 w = h,
232 T = {
233 preencode(e, d) {
234 ;(e.end++,
235 d.small && h.preencode(e, d.small),
236 d.medium && K.preencode(e, d.medium),
237 d.large && w.preencode(e, d.large))
238 },
239 encode(d, n) {
240 const o = (n.small ? 1 : 0) | (n.medium ? 2 : 0) | (n.large ? 4 : 0)
241 ;(e.uint.encode(d, o),
242 n.small && h.encode(d, n.small),
243 n.medium && K.encode(d, n.medium),
244 n.large && w.encode(d, n.large))
245 },
246 decode(d) {
247 const n = e.uint.decode(d)
248 return {
249 small: 1 & n ? h.decode(d) : null,
250 medium: 2 & n ? K.decode(d) : null,
251 large: 4 & n ? w.decode(d) : null,
252 }
253 },
254 },
255 P = {
256 preencode(e, d) {
257 e.end++
258 },
259 encode(d, n) {
260 const o = n.isDeleted ? 1 : 0
261 e.uint.encode(d, o)
262 },
263 decode: (d) => ({ isDeleted: !!(1 & e.uint.decode(d)) }),
264 },
265 A = e.frame(P),
266 R = h,
267 D = {
268 preencode(d, o) {
269 ;(e.uint.preencode(d, o.id),
270 c.preencode(d, o.oplog),
271 A.preencode(d, o.status),
272 R.preencode(d, o.file),
273 d.end++,
274 n >= 14 && o.version && e.uint.preencode(d, o.version))
275 },
276 encode(d, o) {
277 const r = n >= 14 && o.version ? 1 : 0
278 ;(e.uint.encode(d, o.id),
279 c.encode(d, o.oplog),
280 A.encode(d, o.status),
281 R.encode(d, o.file),
282 e.uint.encode(d, r),
283 n >= 14 && o.version && e.uint.encode(d, o.version))
284 },
285 decode(d) {
286 const o = e.uint.decode(d),
287 r = c.decode(d),
288 t = A.decode(d),
289 i = R.decode(d),
290 a = d.start < d.end ? e.uint.decode(d) : 0
291 return {
292 id: o,
293 oplog: r,
294 status: t,
295 file: i,
296 version: n >= 14 && 1 & a ? e.uint.decode(d) : 0,
297 }
298 },
299 },
300 S = {
301 preencode(e, d) {
302 e.end++
303 },
304 encode(d, n) {
305 const o = (n.isActive ? 1 : 0) | (n.isIndexing ? 2 : 0)
306 e.uint.encode(d, o)
307 },
308 decode(d) {
309 const n = e.uint.decode(d)
310 return { isActive: !!(1 & n), isIndexing: !!(2 & n) }
311 },
312 },
313 C = {
314 preencode(d, o) {
315 const c =
316 (o.isAdmin ? 1 : 0) |
317 (o.isModerator ? 2 : 0) |
318 (o.isPending ? 4 : 0) |
319 (o.isActive ? 8 : 0) |
320 (o.isMuted ? 16 : 0) |
321 (o.isBanned ? 32 : 0) |
322 (o.isShadowBanned ? 64 : 0) |
323 (n >= 13 && o.isRemoved ? 128 : 0)
324 e.uint.preencode(d, c)
325 },
326 encode(d, o) {
327 const c =
328 (o.isAdmin ? 1 : 0) |
329 (o.isModerator ? 2 : 0) |
330 (o.isPending ? 4 : 0) |
331 (o.isActive ? 8 : 0) |
332 (o.isMuted ? 16 : 0) |
333 (o.isBanned ? 32 : 0) |
334 (o.isShadowBanned ? 64 : 0) |
335 (n >= 13 && o.isRemoved ? 128 : 0)
336 e.uint.encode(d, c)
337 },
338 decode(d) {
339 const o = e.uint.decode(d)
340 return {
341 isAdmin: !!(1 & o),
342 isModerator: !!(2 & o),
343 isPending: !!(4 & o),
344 isActive: !!(8 & o),
345 isMuted: !!(16 & o),
346 isBanned: !!(32 & o),
347 isShadowBanned: !!(64 & o),
348 isRemoved: n >= 13 && !!(128 & o),
349 }
350 },
351 },
352 M = {
353 preencode(e, d) {
354 e.end++
355 },
356 encode(d, n) {
357 const o = (n.isMuted ? 1 : 0) | (n.isBanned ? 2 : 0) | (n.isShadowBanned ? 4 : 0)
358 e.uint.encode(d, o)
359 },
360 decode(d) {
361 const n = e.uint.decode(d)
362 return { isMuted: !!(1 & n), isBanned: !!(2 & n), isShadowBanned: !!(4 & n) }
363 },
364 },
365 L = {
366 preencode(d, n) {
367 e.uint.preencode(d, n.version)
368 },
369 encode(d, n) {
370 e.uint.encode(d, n.version)
371 },
372 decode: (d) => ({ version: e.uint.decode(d) }),
373 },
374 q = {
375 preencode(d, n) {
376 ;(e.uint.preencode(d, n.total), e.uint.preencode(d, n.active))
377 },
378 encode(d, n) {
379 ;(e.uint.encode(d, n.total), e.uint.encode(d, n.active))
380 },
381 decode: (d) => ({ total: e.uint.decode(d), active: e.uint.decode(d) }),
382 },
383 F = {
384 preencode(d, n) {
385 ;(e.uint.preencode(d, n.total), e.uint.preencode(d, n.active), e.uint.preencode(d, n.pending))
386 },
387 encode(d, n) {
388 ;(e.uint.encode(d, n.total), e.uint.encode(d, n.active), e.uint.encode(d, n.pending))
389 },
390 decode: (d) => ({
391 total: e.uint.decode(d),
392 active: e.uint.decode(d),
393 pending: e.uint.decode(d),
394 }),
395 },
396 E = {
397 preencode(d, o) {
398 ;(e.uint.preencode(d, o.clock),
399 e.uint.preencode(d, o.pinned),
400 e.uint.preencode(d, o.threads),
401 e.uint.preencode(d, o.timestamp),
402 d.end++,
403 n >= 15 && o.flagsClock && e.uint.preencode(d, o.flagsClock))
404 },
405 encode(d, o) {
406 const c = n >= 15 && o.flagsClock ? 1 : 0
407 ;(e.uint.encode(d, o.clock),
408 e.uint.encode(d, o.pinned),
409 e.uint.encode(d, o.threads),
410 e.uint.encode(d, o.timestamp),
411 e.uint.encode(d, c),
412 n >= 15 && o.flagsClock && e.uint.encode(d, o.flagsClock))
413 },
414 decode(d) {
415 const o = e.uint.decode(d),
416 c = e.uint.decode(d),
417 r = e.uint.decode(d),
418 t = e.uint.decode(d),
419 i = d.start < d.end ? e.uint.decode(d) : 0
420 return {
421 clock: o,
422 pinned: c,
423 threads: r,
424 timestamp: t,
425 flagsClock: n >= 15 && 1 & i ? e.uint.decode(d) : 0,
426 }
427 },
428 },
429 B = {
430 preencode(d, n) {
431 e.uint.preencode(d, n.clock)
432 },
433 encode(d, n) {
434 e.uint.encode(d, n.clock)
435 },
436 decode: (d) => ({ clock: e.uint.decode(d) }),
437 },
438 I = e.frame(q),
439 N = e.frame(F),
440 j = e.frame(E),
441 O = e.frame(B),
442 J = {
443 preencode(e, d) {
444 ;(I.preencode(e, d.devices),
445 N.preencode(e, d.members),
446 j.preencode(e, d.chat),
447 O.preencode(e, d.files))
448 },
449 encode(e, d) {
450 ;(I.encode(e, d.devices), N.encode(e, d.members), j.encode(e, d.chat), O.encode(e, d.files))
451 },
452 decode: (e) => ({
453 devices: I.decode(e),
454 members: N.decode(e),
455 chat: j.decode(e),
456 files: O.decode(e),
457 }),
458 },
459 U = { Default: 1, Broadcast: 2, DirectMessage: 3 },
460 V = {
461 preencode(e, d) {
462 e.end++
463 },
464 encode(d, n) {
465 if (n > 3) throw new Error("Unknown enum")
466 e.uint.encode(d, n)
467 },
468 decode: (d) => e.uint.decode(d),
469 },
470 H = {
471 preencode(d, o) {
472 const c =
473 (o.roomType ? 1 : 0) |
474 (o.isExperimental ? 2 : 0) |
475 (o.isJoiningDisabled ? 4 : 0) |
476 (o.isAppendingDisabled ? 8 : 0) |
477 (o.isCallingDisabled ? 16 : 0) |
478 (o.isMembershipEventsDisabled ? 32 : 0) |
479 (n >= 19 && o.isAttachmentsDisabled ? 64 : 0) |
480 (n >= 19 && o.isLinksDisabled ? 128 : 0) |
481 (n >= 20 && o.buildType ? 256 : 0)
482 ;(e.uint.preencode(d, c),
483 o.roomType && V.preencode(d, o.roomType),
484 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
485 },
486 encode(d, o) {
487 const c =
488 (o.roomType ? 1 : 0) |
489 (o.isExperimental ? 2 : 0) |
490 (o.isJoiningDisabled ? 4 : 0) |
491 (o.isAppendingDisabled ? 8 : 0) |
492 (o.isCallingDisabled ? 16 : 0) |
493 (o.isMembershipEventsDisabled ? 32 : 0) |
494 (n >= 19 && o.isAttachmentsDisabled ? 64 : 0) |
495 (n >= 19 && o.isLinksDisabled ? 128 : 0) |
496 (n >= 20 && o.buildType ? 256 : 0)
497 ;(e.uint.encode(d, c),
498 o.roomType && V.encode(d, o.roomType),
499 n >= 20 && o.buildType && Or.encode(d, o.buildType))
500 },
501 decode(d) {
502 const o = e.uint.decode(d)
503 return {
504 roomType: 1 & o ? V.decode(d) : 0,
505 isExperimental: !!(2 & o),
506 isJoiningDisabled: !!(4 & o),
507 isAppendingDisabled: !!(8 & o),
508 isCallingDisabled: !!(16 & o),
509 isMembershipEventsDisabled: !!(32 & o),
510 isAttachmentsDisabled: n >= 19 && !!(64 & o),
511 isLinksDisabled: n >= 19 && !!(128 & o),
512 buildType: n >= 20 && 256 & o ? Or.decode(d) : null,
513 }
514 },
515 },
516 z = e.frame(L),
517 G = e.frame(H),
518 Q = {
519 preencode(d, n) {
520 ;(z.preencode(d, n.abi), G.preencode(d, n.settings), e.uint.preencode(d, n.creationTime))
521 },
522 encode(d, n) {
523 ;(z.encode(d, n.abi), G.encode(d, n.settings), e.uint.encode(d, n.creationTime))
524 },
525 decode: (d) => ({ abi: z.decode(d), settings: G.decode(d), creationTime: e.uint.decode(d) }),
526 },
527 W = {
528 preencode(d, n) {
529 e.fixed32.preencode(d, n.seed)
530 },
531 encode(d, n) {
532 e.fixed32.encode(d, n.seed)
533 },
534 decode: (d) => ({ seed: e.fixed32.decode(d) }),
535 },
536 X = {
537 preencode(d, n) {
538 ;(r.preencode(d, n.mailboxKeyPair),
539 t.preencode(d, n.discoveryKeyPair),
540 e.fixed32.preencode(d, n.wakeupTopic),
541 e.fixed32.preencode(d, n.swarmTopic))
542 },
543 encode(d, n) {
544 ;(r.encode(d, n.mailboxKeyPair),
545 t.encode(d, n.discoveryKeyPair),
546 e.fixed32.encode(d, n.wakeupTopic),
547 e.fixed32.encode(d, n.swarmTopic))
548 },
549 decode: (d) => ({
550 mailboxKeyPair: r.decode(d),
551 discoveryKeyPair: t.decode(d),
552 wakeupTopic: e.fixed32.decode(d),
553 swarmTopic: e.fixed32.decode(d),
554 }),
555 },
556 Y = e.array(e.fixed32),
557 Z = {
558 preencode(d, o) {
559 ;(d.end++,
560 o.title && e.string.preencode(d, o.title),
561 o.avatar && Gr.preencode(d, o.avatar),
562 o.description && e.string.preencode(d, o.description),
563 n >= 11 && o.supportedLanguages && Qr.preencode(d, o.supportedLanguages),
564 n >= 13 && o.blindPeers && Y.preencode(d, o.blindPeers))
565 },
566 encode(d, o) {
567 const c =
568 (o.title ? 1 : 0) |
569 (o.avatar ? 2 : 0) |
570 (o.description ? 4 : 0) |
571 (n >= 11 && o.supportedLanguages ? 8 : 0) |
572 (n >= 13 && o.blindPeers ? 16 : 0)
573 ;(e.uint.encode(d, c),
574 o.title && e.string.encode(d, o.title),
575 o.avatar && Gr.encode(d, o.avatar),
576 o.description && e.string.encode(d, o.description),
577 n >= 11 && o.supportedLanguages && Qr.encode(d, o.supportedLanguages),
578 n >= 13 && o.blindPeers && Y.encode(d, o.blindPeers))
579 },
580 decode(d) {
581 const o = e.uint.decode(d)
582 return {
583 title: 1 & o ? e.string.decode(d) : null,
584 avatar: 2 & o ? Gr.decode(d) : null,
585 description: 4 & o ? e.string.decode(d) : null,
586 supportedLanguages: n >= 11 && 8 & o ? Qr.decode(d) : null,
587 blindPeers: n >= 13 && 16 & o ? Y.decode(d) : null,
588 }
589 },
590 },
591 $ = {
592 preencode(d, n) {
593 e.fixed32.preencode(d, n.key)
594 },
595 encode(d, n) {
596 e.fixed32.encode(d, n.key)
597 },
598 decode: (d) => ({ key: e.fixed32.decode(d) }),
599 },
600 _ = e.frame(a),
601 ee = e.frame($),
602 de = {
603 preencode(e, d) {
604 ;(_.preencode(e, d.header), ee.preencode(e, d.peer))
605 },
606 encode(e, d) {
607 ;(_.encode(e, d.header), ee.encode(e, d.peer))
608 },
609 decode: (e) => ({ header: _.decode(e), peer: ee.decode(e) }),
610 },
611 ne = _,
612 oe = {
613 preencode(d, n) {
614 ;(ne.preencode(d, n.header), e.fixed32.preencode(d, n.key))
615 },
616 encode(d, n) {
617 ;(ne.encode(d, n.header), e.fixed32.encode(d, n.key))
618 },
619 decode: (d) => ({ header: ne.decode(d), key: e.fixed32.decode(d) }),
620 },
621 ce = {
622 preencode(d, n) {
623 ;(e.fixed32.preencode(d, n.memberKey), e.buffer.preencode(d, n.proof))
624 },
625 encode(d, n) {
626 ;(e.fixed32.encode(d, n.memberKey), e.buffer.encode(d, n.proof))
627 },
628 decode: (d) => ({ memberKey: e.fixed32.decode(d), proof: e.buffer.decode(d) }),
629 },
630 re = {
631 preencode(d, n) {
632 ;(e.fixed32.preencode(d, n.id), e.buffer.preencode(d, n.response))
633 },
634 encode(d, n) {
635 ;(e.fixed32.encode(d, n.id), e.buffer.encode(d, n.response))
636 },
637 decode: (d) => ({ id: e.fixed32.decode(d), response: e.buffer.decode(d) }),
638 },
639 te = e.frame(S),
640 ie = e.frame(re),
641 ae = {
642 preencode(d, n) {
643 ;(e.fixed32.preencode(d, n.key),
644 e.fixed32.preencode(d, n.memberKey),
645 te.preencode(d, n.status),
646 Wr.preencode(d, n.profile),
647 d.end++,
648 n.invitation && ie.preencode(d, n.invitation))
649 },
650 encode(d, n) {
651 const o = n.invitation ? 1 : 0
652 ;(e.fixed32.encode(d, n.key),
653 e.fixed32.encode(d, n.memberKey),
654 te.encode(d, n.status),
655 Wr.encode(d, n.profile),
656 e.uint.encode(d, o),
657 n.invitation && ie.encode(d, n.invitation))
658 },
659 decode: (d) => ({
660 key: e.fixed32.decode(d),
661 memberKey: e.fixed32.decode(d),
662 status: te.decode(d),
663 profile: Wr.decode(d),
664 invitation: 1 & e.uint.decode(d) ? ie.decode(d) : null,
665 }),
666 },
667 se = {
668 preencode(d, n) {
669 ;(e.uint.preencode(d, n.timestamp),
670 d.end++,
671 n.mailbox && e.fixed32.preencode(d, n.mailbox),
672 n.displayName && e.string.preencode(d, n.displayName),
673 n.avatar && Xr.preencode(d, n.avatar),
674 n.username && e.string.preencode(d, n.username))
675 },
676 encode(d, n) {
677 const o =
678 (n.mailbox ? 1 : 0) | (n.displayName ? 2 : 0) | (n.avatar ? 4 : 0) | (n.username ? 8 : 0)
679 ;(e.uint.encode(d, n.timestamp),
680 e.uint.encode(d, o),
681 n.mailbox && e.fixed32.encode(d, n.mailbox),
682 n.displayName && e.string.encode(d, n.displayName),
683 n.avatar && Xr.encode(d, n.avatar),
684 n.username && e.string.encode(d, n.username))
685 },
686 decode(d) {
687 const n = e.uint.decode(d),
688 o = e.uint.decode(d)
689 return {
690 timestamp: n,
691 mailbox: 1 & o ? e.fixed32.decode(d) : null,
692 displayName: 2 & o ? e.string.decode(d) : null,
693 avatar: 4 & o ? Xr.decode(d) : null,
694 username: 8 & o ? e.string.decode(d) : null,
695 }
696 },
697 },
698 pe = {
699 preencode(d, o) {
700 ;(d.end++,
701 o.swarmKey && e.fixed32.preencode(d, o.swarmKey),
702 o.name && e.string.preencode(d, o.name),
703 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
704 },
705 encode(d, o) {
706 const c =
707 (o.swarmKey ? 1 : 0) |
708 (o.name ? 2 : 0) |
709 (o.isMobile ? 4 : 0) |
710 (n >= 20 && o.buildType ? 8 : 0)
711 ;(e.uint.encode(d, c),
712 o.swarmKey && e.fixed32.encode(d, o.swarmKey),
713 o.name && e.string.encode(d, o.name),
714 n >= 20 && o.buildType && Or.encode(d, o.buildType))
715 },
716 decode(d) {
717 const o = e.uint.decode(d)
718 return {
719 swarmKey: 1 & o ? e.fixed32.decode(d) : null,
720 name: 2 & o ? e.string.decode(d) : null,
721 isMobile: !!(4 & o),
722 buildType: n >= 20 && 8 & o ? Or.decode(d) : null,
723 }
724 },
725 },
726 ue = e.frame(se),
727 le = {
728 preencode(e, d) {
729 ;(ue.preencode(e, d.profile), ce.preencode(e, d.attestation))
730 },
731 encode(e, d) {
732 ;(ue.encode(e, d.profile), ce.encode(e, d.attestation))
733 },
734 decode: (e) => ({ profile: ue.decode(e), attestation: ce.decode(e) }),
735 },
736 fe = {
737 preencode(e, d) {
738 ;(Yr.preencode(e, d.profile), ce.preencode(e, d.attestation))
739 },
740 encode(e, d) {
741 ;(Yr.encode(e, d.profile), ce.encode(e, d.attestation))
742 },
743 decode: (e) => ({ profile: Yr.decode(e), attestation: ce.decode(e) }),
744 },
745 me = {
746 preencode(d, n) {
747 ;(e.fixed32.preencode(d, n.id),
748 e.buffer.preencode(d, n.data),
749 e.buffer.preencode(d, n.signature))
750 },
751 encode(d, n) {
752 ;(e.fixed32.encode(d, n.id), e.buffer.encode(d, n.data), e.buffer.encode(d, n.signature))
753 },
754 decode: (d) => ({
755 id: e.fixed32.decode(d),
756 data: e.buffer.decode(d),
757 signature: e.buffer.decode(d),
758 }),
759 },
760 ye = {
761 preencode(d, n) {
762 e.fixed32.preencode(d, n.devicePublicKey)
763 },
764 encode(d, n) {
765 e.fixed32.encode(d, n.devicePublicKey)
766 },
767 decode: (d) => ({ devicePublicKey: e.fixed32.decode(d) }),
768 },
769 xe = {
770 preencode(d, n) {
771 ;(ce.preencode(d, n.privateProfileIdentity), e.buffer.preencode(d, n.deviceProof))
772 },
773 encode(d, n) {
774 ;(ce.encode(d, n.privateProfileIdentity), e.buffer.encode(d, n.deviceProof))
775 },
776 decode: (d) => ({ privateProfileIdentity: ce.decode(d), deviceProof: e.buffer.decode(d) }),
777 },
778 be = e.frame(fe),
779 ke = e.frame(le),
780 ve = e.frame(ye),
781 ge = {
782 preencode(d, n) {
783 ;(e.fixed32.preencode(d, n.deviceKey),
784 t.preencode(d, n.keyPair),
785 be.preencode(d, n.device),
786 ke.preencode(d, n.member),
787 d.end++,
788 n.identity && ve.preencode(d, n.identity))
789 },
790 encode(d, n) {
791 const o = n.identity ? 1 : 0
792 ;(e.fixed32.encode(d, n.deviceKey),
793 t.encode(d, n.keyPair),
794 be.encode(d, n.device),
795 ke.encode(d, n.member),
796 e.uint.encode(d, o),
797 n.identity && ve.encode(d, n.identity))
798 },
799 decode: (d) => ({
800 deviceKey: e.fixed32.decode(d),
801 keyPair: t.decode(d),
802 device: be.decode(d),
803 member: ke.decode(d),
804 identity: 1 & e.uint.decode(d) ? ve.decode(d) : null,
805 }),
806 },
807 he = e.frame(ge),
808 Ke = {
809 preencode(d, n) {
810 ;(e.fixed32.preencode(d, n.id),
811 he.preencode(d, n.request),
812 e.buffer.preencode(d, n.signature))
813 },
814 encode(d, n) {
815 ;(e.fixed32.encode(d, n.id), he.encode(d, n.request), e.buffer.encode(d, n.signature))
816 },
817 decode: (d) => ({
818 id: e.fixed32.decode(d),
819 request: he.decode(d),
820 signature: e.buffer.decode(d),
821 }),
822 },
823 we = be,
824 Te = ke,
825 Pe = {
826 preencode(e, d) {
827 ;(we.preencode(e, d.device), e.end++, d.member && Te.preencode(e, d.member))
828 },
829 encode(d, n) {
830 const o = n.member ? 1 : 0
831 ;(we.encode(d, n.device), e.uint.encode(d, o), n.member && Te.encode(d, n.member))
832 },
833 decode: (d) => ({ device: we.decode(d), member: 1 & e.uint.decode(d) ? Te.decode(d) : null }),
834 },
835 Ae = e.frame(Ke),
836 Re = e.frame(Pe),
837 De = {
838 preencode(e, d) {
839 ;(e.end++,
840 d.withInvitation && Ae.preencode(e, d.withInvitation),
841 d.withMemberProof && Re.preencode(e, d.withMemberProof))
842 },
843 encode(d, n) {
844 const o = (n.withInvitation ? 1 : 0) | (n.withMemberProof ? 2 : 0)
845 ;(e.uint.encode(d, o),
846 n.withInvitation && Ae.encode(d, n.withInvitation),
847 n.withMemberProof && Re.encode(d, n.withMemberProof))
848 },
849 decode(d) {
850 const n = e.uint.decode(d)
851 return {
852 withInvitation: 1 & n ? Ae.decode(d) : null,
853 withMemberProof: 2 & n ? Re.decode(d) : null,
854 }
855 },
856 },
857 Se = e.frame(me),
858 Ce = e.frame(xe),
859 Me = {
860 preencode(e, d) {
861 ;(Se.preencode(e, d.signedKeys), e.end++, d.identity && Ce.preencode(e, d.identity))
862 },
863 encode(d, n) {
864 const o = n.identity ? 1 : 0
865 ;(Se.encode(d, n.signedKeys), e.uint.encode(d, o), n.identity && Ce.encode(d, n.identity))
866 },
867 decode: (d) => ({
868 signedKeys: Se.decode(d),
869 identity: 1 & e.uint.decode(d) ? Ce.decode(d) : null,
870 }),
871 },
872 Le = {
873 preencode(d, o) {
874 ;(d.end++,
875 o.expiration && e.uint.preencode(d, o.expiration),
876 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
877 },
878 encode(d, o) {
879 const c =
880 (o.expiration ? 1 : 0) |
881 (o.requiresConfirmation ? 2 : 0) |
882 (o.canModerate ? 4 : 0) |
883 (o.canAdmin ? 8 : 0) |
884 (n >= 20 && o.buildType ? 16 : 0)
885 ;(e.uint.encode(d, c),
886 o.expiration && e.uint.encode(d, o.expiration),
887 n >= 20 && o.buildType && Or.encode(d, o.buildType))
888 },
889 decode(d) {
890 const o = e.uint.decode(d)
891 return {
892 expiration: 1 & o ? e.uint.decode(d) : 0,
893 requiresConfirmation: !!(2 & o),
894 canModerate: !!(4 & o),
895 canAdmin: !!(8 & o),
896 buildType: n >= 20 && 16 & o ? Or.decode(d) : null,
897 }
898 },
899 },
900 qe = Se,
901 Fe = e.frame(Le),
902 Ee = {
903 preencode(d, n) {
904 ;(e.fixed32.preencode(d, n.id),
905 qe.preencode(d, n.response),
906 Fe.preencode(d, n.metadata),
907 d.end++,
908 n.anchor && o.preencode(d, n.anchor))
909 },
910 encode(d, n) {
911 const c = (n.anchor ? 1 : 0) | (n.isActive ? 2 : 0)
912 ;(e.fixed32.encode(d, n.id),
913 qe.encode(d, n.response),
914 Fe.encode(d, n.metadata),
915 e.uint.encode(d, c),
916 n.anchor && o.encode(d, n.anchor))
917 },
918 decode(d) {
919 const n = e.fixed32.decode(d),
920 c = qe.decode(d),
921 r = Fe.decode(d),
922 t = e.uint.decode(d)
923 return {
924 id: n,
925 response: c,
926 metadata: r,
927 anchor: 1 & t ? o.decode(d) : null,
928 isActive: !!(2 & t),
929 }
930 },
931 },
932 Be = _,
933 Ie = e.frame(Ee),
934 Ne = {
935 preencode(e, d) {
936 ;(Be.preencode(e, d.header), Ie.preencode(e, d.invitation))
937 },
938 encode(e, d) {
939 ;(Be.encode(e, d.header), Ie.encode(e, d.invitation))
940 },
941 decode: (e) => ({ header: Be.decode(e), invitation: Ie.decode(e) }),
942 },
943 je = _,
944 Oe = {
945 preencode(d, n) {
946 ;(je.preencode(d, n.header), e.fixed32.preencode(d, n.id))
947 },
948 encode(d, n) {
949 ;(je.encode(d, n.header), e.fixed32.encode(d, n.id))
950 },
951 decode: (d) => ({ header: je.decode(d), id: e.fixed32.decode(d) }),
952 },
953 Je = {
954 preencode(d, n) {
955 ;(e.fixed32.preencode(d, n.mailbox),
956 e.fixed32.preencode(d, n.invitationSeed),
957 o.preencode(d, n.anchor))
958 },
959 encode(d, n) {
960 ;(e.fixed32.encode(d, n.mailbox),
961 e.fixed32.encode(d, n.invitationSeed),
962 o.encode(d, n.anchor))
963 },
964 decode: (d) => ({
965 mailbox: e.fixed32.decode(d),
966 invitationSeed: e.fixed32.decode(d),
967 anchor: o.decode(d),
968 }),
969 },
970 Ue = {
971 preencode(d, n) {
972 ;(e.fixed32.preencode(d, n.mailbox),
973 e.fixed32.preencode(d, n.invitationSeed),
974 o.preencode(d, n.anchor),
975 e.fixed32.preencode(d, n.identityPublicKey))
976 },
977 encode(d, n) {
978 ;(e.fixed32.encode(d, n.mailbox),
979 e.fixed32.encode(d, n.invitationSeed),
980 o.encode(d, n.anchor),
981 e.fixed32.encode(d, n.identityPublicKey))
982 },
983 decode: (d) => ({
984 mailbox: e.fixed32.decode(d),
985 invitationSeed: e.fixed32.decode(d),
986 anchor: o.decode(d),
987 identityPublicKey: e.fixed32.decode(d),
988 }),
989 },
990 Ve = {
991 preencode(d, n) {
992 e.fixed32.preencode(d, n.mailbox)
993 },
994 encode(d, n) {
995 e.fixed32.encode(d, n.mailbox)
996 },
997 decode: (d) => ({ mailbox: e.fixed32.decode(d) }),
998 },
999 He = e.frame(Je),
1000 ze = e.frame(Ue),
1001 Ge = e.frame(Ve),
1002 Qe = e.array(e.ipv4Address),
1003 We = {
1004 preencode(e, d) {
1005 ;(e.end++,
1006 d.room && He.preencode(e, d.room),
1007 d.identity && ze.preencode(e, d.identity),
1008 d.contact && Ge.preencode(e, d.contact),
1009 n >= 6 && d.readonly && Zr.preencode(e, d.readonly),
1010 n >= 11 && d.additionalNodes && Qe.preencode(e, d.additionalNodes),
1011 n >= 20 && d.buildType && Or.preencode(e, d.buildType))
1012 },
1013 encode(d, o) {
1014 const c =
1015 (o.room ? 1 : 0) |
1016 (o.identity ? 2 : 0) |
1017 (o.contact ? 4 : 0) |
1018 (n >= 6 && o.readonly ? 8 : 0) |
1019 (n >= 11 && o.additionalNodes ? 16 : 0) |
1020 (n >= 20 && o.buildType ? 32 : 0)
1021 ;(e.uint.encode(d, c),
1022 o.room && He.encode(d, o.room),
1023 o.identity && ze.encode(d, o.identity),
1024 o.contact && Ge.encode(d, o.contact),
1025 n >= 6 && o.readonly && Zr.encode(d, o.readonly),
1026 n >= 11 && o.additionalNodes && Qe.encode(d, o.additionalNodes),
1027 n >= 20 && o.buildType && Or.encode(d, o.buildType))
1028 },
1029 decode(d) {
1030 const o = e.uint.decode(d)
1031 return {
1032 room: 1 & o ? He.decode(d) : null,
1033 identity: 2 & o ? ze.decode(d) : null,
1034 contact: 4 & o ? Ge.decode(d) : null,
1035 readonly: n >= 6 && 8 & o ? Zr.decode(d) : null,
1036 additionalNodes: n >= 11 && 16 & o ? Qe.decode(d) : null,
1037 buildType: n >= 20 && 32 & o ? Or.decode(d) : null,
1038 }
1039 },
1040 },
1041 Xe = _,
1042 Ye = {
1043 preencode(d, n) {
1044 ;(Xe.preencode(d, n.header), e.buffer.preencode(d, n.blindRequest))
1045 },
1046 encode(d, n) {
1047 ;(Xe.encode(d, n.header), e.buffer.encode(d, n.blindRequest))
1048 },
1049 decode: (d) => ({ header: Xe.decode(d), blindRequest: e.buffer.decode(d) }),
1050 },
1051 Ze = _,
1052 $e = {
1053 preencode(e, d) {
1054 ;(Ze.preencode(e, d.header), e.end++, d.profile && $r.preencode(e, d.profile))
1055 },
1056 encode(d, n) {
1057 const o = n.profile ? 1 : 0
1058 ;(Ze.encode(d, n.header), e.uint.encode(d, o), n.profile && $r.encode(d, n.profile))
1059 },
1060 decode: (d) => ({ header: Ze.decode(d), profile: 1 & e.uint.decode(d) ? $r.decode(d) : null }),
1061 },
1062 _e = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({}) },
1063 ed = _e,
1064 dd = he,
1065 nd = {
1066 preencode(d, n) {
1067 ;(e.fixed32.preencode(d, n.deviceKey),
1068 e.fixed32.preencode(d, n.id),
1069 dd.preencode(d, n.request))
1070 },
1071 encode(d, n) {
1072 ;(e.fixed32.encode(d, n.deviceKey), e.fixed32.encode(d, n.id), dd.encode(d, n.request))
1073 },
1074 decode: (d) => ({
1075 deviceKey: e.fixed32.decode(d),
1076 id: e.fixed32.decode(d),
1077 request: dd.decode(d),
1078 }),
1079 },
1080 od = _,
1081 cd = Ce,
1082 rd = {
1083 preencode(d, n) {
1084 ;(od.preencode(d, n.header),
1085 e.fixed32.preencode(d, n.deviceKey),
1086 d.end++,
1087 n.identity && cd.preencode(d, n.identity))
1088 },
1089 encode(d, n) {
1090 const o = n.identity ? 1 : 0
1091 ;(od.encode(d, n.header),
1092 e.fixed32.encode(d, n.deviceKey),
1093 e.uint.encode(d, o),
1094 n.identity && cd.encode(d, n.identity))
1095 },
1096 decode: (d) => ({
1097 header: od.decode(d),
1098 deviceKey: e.fixed32.decode(d),
1099 identity: 1 & e.uint.decode(d) ? cd.decode(d) : null,
1100 }),
1101 },
1102 td = _,
1103 id = {
1104 preencode(d, n) {
1105 ;(td.preencode(d, n.header), e.fixed32.preencode(d, n.deviceKey))
1106 },
1107 encode(d, n) {
1108 ;(td.encode(d, n.header), e.fixed32.encode(d, n.deviceKey))
1109 },
1110 decode: (d) => ({ header: td.decode(d), deviceKey: e.fixed32.decode(d) }),
1111 },
1112 ad = e.frame(C),
1113 sd = ue,
1114 pd = {
1115 preencode(d, n) {
1116 ;(e.fixed32.preencode(d, n.key), ad.preencode(d, n.status), sd.preencode(d, n.profile))
1117 },
1118 encode(d, n) {
1119 ;(e.fixed32.encode(d, n.key), ad.encode(d, n.status), sd.encode(d, n.profile))
1120 },
1121 decode: (d) => ({ key: e.fixed32.decode(d), status: ad.decode(d), profile: sd.decode(d) }),
1122 },
1123 ud = ad,
1124 ld = ue,
1125 fd = {
1126 preencode(d, n) {
1127 ;(e.fixed32.preencode(d, n.key),
1128 ud.preencode(d, n.status),
1129 ld.preencode(d, n.profile),
1130 d.end++,
1131 n.proofs && _r.preencode(d, n.proofs))
1132 },
1133 encode(d, n) {
1134 const o = n.proofs ? 1 : 0
1135 ;(e.fixed32.encode(d, n.key),
1136 ud.encode(d, n.status),
1137 ld.encode(d, n.profile),
1138 e.uint.encode(d, o),
1139 n.proofs && _r.encode(d, n.proofs))
1140 },
1141 decode: (d) => ({
1142 key: e.fixed32.decode(d),
1143 status: ud.decode(d),
1144 profile: ld.decode(d),
1145 proofs: 1 & e.uint.decode(d) ? _r.decode(d) : null,
1146 }),
1147 },
1148 md = {
1149 preencode(d, n) {
1150 ;(e.fixed32.preencode(d, n.key),
1151 d.end++,
1152 n.profileAttestation && e.buffer.preencode(d, n.profileAttestation),
1153 n.latestReceipt && e.buffer.preencode(d, n.latestReceipt))
1154 },
1155 encode(d, n) {
1156 const o = (n.profileAttestation ? 1 : 0) | (n.latestReceipt ? 2 : 0)
1157 ;(e.fixed32.encode(d, n.key),
1158 e.uint.encode(d, o),
1159 n.profileAttestation && e.buffer.encode(d, n.profileAttestation),
1160 n.latestReceipt && e.buffer.encode(d, n.latestReceipt))
1161 },
1162 decode(d) {
1163 const n = e.fixed32.decode(d),
1164 o = e.uint.decode(d)
1165 return {
1166 key: n,
1167 profileAttestation: 1 & o ? e.buffer.decode(d) : null,
1168 latestReceipt: 2 & o ? e.buffer.decode(d) : null,
1169 }
1170 },
1171 },
1172 yd = _,
1173 xd = ke,
1174 bd = {
1175 preencode(e, d) {
1176 ;(yd.preencode(e, d.header), xd.preencode(e, d.member))
1177 },
1178 encode(e, d) {
1179 ;(yd.encode(e, d.header), xd.encode(e, d.member))
1180 },
1181 decode: (e) => ({ header: yd.decode(e), member: xd.decode(e) }),
1182 },
1183 kd = _,
1184 vd = e.frame(M),
1185 gd = {
1186 preencode(d, n) {
1187 ;(kd.preencode(d, n.header),
1188 e.fixed32.preencode(d, n.memberKey),
1189 e.uint.preencode(d, n.key),
1190 vd.preencode(d, n.status))
1191 },
1192 encode(d, n) {
1193 ;(kd.encode(d, n.header),
1194 e.fixed32.encode(d, n.memberKey),
1195 e.uint.encode(d, n.key),
1196 vd.encode(d, n.status))
1197 },
1198 decode: (d) => ({
1199 header: kd.decode(d),
1200 memberKey: e.fixed32.decode(d),
1201 key: e.uint.decode(d),
1202 status: vd.decode(d),
1203 }),
1204 },
1205 hd = _,
1206 Kd = {
1207 preencode(d, n) {
1208 ;(hd.preencode(d, n.header), e.fixed32.preencode(d, n.key), d.end++)
1209 },
1210 encode(d, n) {
1211 const o = (n.isModerator ? 1 : 0) | (n.isAdmin ? 2 : 0)
1212 ;(hd.encode(d, n.header), e.fixed32.encode(d, n.key), e.uint.encode(d, o))
1213 },
1214 decode(d) {
1215 const n = hd.decode(d),
1216 o = e.fixed32.decode(d),
1217 c = e.uint.decode(d)
1218 return { header: n, key: o, isModerator: !!(1 & c), isAdmin: !!(2 & c) }
1219 },
1220 },
1221 wd = _,
1222 Td = {
1223 preencode(d, n) {
1224 ;(wd.preencode(d, n.header), e.fixed32.preencode(d, n.key))
1225 },
1226 encode(d, n) {
1227 ;(wd.encode(d, n.header), e.fixed32.encode(d, n.key))
1228 },
1229 decode: (d) => ({ header: wd.decode(d), key: e.fixed32.decode(d) }),
1230 },
1231 Pd = {
1232 preencode(d, n) {
1233 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.mentions))
1234 },
1235 encode(d, n) {
1236 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.mentions))
1237 },
1238 decode: (d) => ({ key: e.fixed32.decode(d), mentions: e.uint.decode(d) }),
1239 },
1240 Ad = {
1241 preencode(d, n) {
1242 ;(d.end++, n.memberKey && e.fixed32.preencode(d, n.memberKey))
1243 },
1244 encode(d, n) {
1245 const o = n.memberKey ? 1 : 0
1246 ;(e.uint.encode(d, o), n.memberKey && e.fixed32.encode(d, n.memberKey))
1247 },
1248 decode: (d) => ({ memberKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null }),
1249 },
1250 Rd = Ad,
1251 Dd = {
1252 preencode(d, n) {
1253 ;(d.end++, n.from && e.string.preencode(d, n.from), n.to && e.string.preencode(d, n.to))
1254 },
1255 encode(d, n) {
1256 const o = (n.from ? 1 : 0) | (n.to ? 2 : 0)
1257 ;(e.uint.encode(d, o), n.from && e.string.encode(d, n.from), n.to && e.string.encode(d, n.to))
1258 },
1259 decode(d) {
1260 const n = e.uint.decode(d)
1261 return { from: 1 & n ? e.string.decode(d) : null, to: 2 & n ? e.string.decode(d) : null }
1262 },
1263 },
1264 Sd = e.frame(Ad),
1265 Cd = e.frame(Rd),
1266 Md = e.frame(Dd),
1267 Ld = {
1268 preencode(d, o) {
1269 const c =
1270 (o.memberJoined ? 1 : 0) |
1271 (o.memberLeft ? 2 : 0) |
1272 (o.titleChanged ? 4 : 0) |
1273 (o.callStarted ? 8 : 0) |
1274 (o.callHangup ? 16 : 0) |
1275 (o.callMissed ? 32 : 0) |
1276 (n >= 3 && o.roomAvatarChanged ? 64 : 0) |
1277 (n >= 3 && o.invitationCreated ? 128 : 0) |
1278 (n >= 3 && o.memberRemoved ? 256 : 0) |
1279 (n >= 18 && o.locationShared ? 512 : 0)
1280 ;(e.uint.preencode(d, c),
1281 o.memberJoined && Sd.preencode(d, o.memberJoined),
1282 o.memberLeft && Cd.preencode(d, o.memberLeft),
1283 o.titleChanged && Md.preencode(d, o.titleChanged),
1284 n >= 3 && o.memberRemoved && et.preencode(d, o.memberRemoved),
1285 n >= 18 && o.locationShared && dt.preencode(d, o.locationShared))
1286 },
1287 encode(d, o) {
1288 const c =
1289 (o.memberJoined ? 1 : 0) |
1290 (o.memberLeft ? 2 : 0) |
1291 (o.titleChanged ? 4 : 0) |
1292 (o.callStarted ? 8 : 0) |
1293 (o.callHangup ? 16 : 0) |
1294 (o.callMissed ? 32 : 0) |
1295 (n >= 3 && o.roomAvatarChanged ? 64 : 0) |
1296 (n >= 3 && o.invitationCreated ? 128 : 0) |
1297 (n >= 3 && o.memberRemoved ? 256 : 0) |
1298 (n >= 18 && o.locationShared ? 512 : 0)
1299 ;(e.uint.encode(d, c),
1300 o.memberJoined && Sd.encode(d, o.memberJoined),
1301 o.memberLeft && Cd.encode(d, o.memberLeft),
1302 o.titleChanged && Md.encode(d, o.titleChanged),
1303 n >= 3 && o.memberRemoved && et.encode(d, o.memberRemoved),
1304 n >= 18 && o.locationShared && dt.encode(d, o.locationShared))
1305 },
1306 decode(d) {
1307 const o = e.uint.decode(d)
1308 return {
1309 memberJoined: 1 & o ? Sd.decode(d) : null,
1310 memberLeft: 2 & o ? Cd.decode(d) : null,
1311 titleChanged: 4 & o ? Md.decode(d) : null,
1312 callStarted: !!(8 & o),
1313 callHangup: !!(16 & o),
1314 callMissed: !!(32 & o),
1315 roomAvatarChanged: n >= 3 && !!(64 & o),
1316 invitationCreated: n >= 3 && !!(128 & o),
1317 memberRemoved: n >= 3 && 256 & o ? et.decode(d) : null,
1318 locationShared: n >= 18 && 512 & o ? dt.decode(d) : null,
1319 }
1320 },
1321 },
1322 qd = {
1323 preencode(e, d) {
1324 ;(e.end++, n >= 18 && d.locationShared && nt.preencode(e, d.locationShared))
1325 },
1326 encode(d, o) {
1327 const c =
1328 (o.callStarted ? 1 : 0) |
1329 (o.callHangup ? 2 : 0) |
1330 (o.callMissed ? 4 : 0) |
1331 (n >= 18 && o.locationShared ? 8 : 0)
1332 ;(e.uint.encode(d, c), n >= 18 && o.locationShared && nt.encode(d, o.locationShared))
1333 },
1334 decode(d) {
1335 const o = e.uint.decode(d)
1336 return {
1337 callStarted: !!(1 & o),
1338 callHangup: !!(2 & o),
1339 callMissed: !!(4 & o),
1340 locationShared: n >= 18 && 8 & o ? nt.decode(d) : null,
1341 }
1342 },
1343 },
1344 Fd = {
1345 preencode(d, n) {
1346 ;(e.uint.preencode(d, n.start), e.uint.preencode(d, n.length))
1347 },
1348 encode(d, n) {
1349 ;(e.uint.encode(d, n.start), e.uint.encode(d, n.length))
1350 },
1351 decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
1352 },
1353 Ed = e.frame(Fd),
1354 Bd = {
1355 preencode(d, n) {
1356 ;(Ed.preencode(d, n.range), e.string.preencode(d, n.content))
1357 },
1358 encode(d, n) {
1359 ;(Ed.encode(d, n.range), e.string.encode(d, n.content))
1360 },
1361 decode: (d) => ({ range: Ed.decode(d), content: e.string.decode(d) }),
1362 },
1363 Id = Ed,
1364 Nd = {
1365 preencode(d, n) {
1366 ;(Id.preencode(d, n.range), e.fixed32.preencode(d, n.memberKey))
1367 },
1368 encode(d, n) {
1369 ;(Id.encode(d, n.range), e.fixed32.encode(d, n.memberKey))
1370 },
1371 decode: (d) => ({ range: Id.decode(d), memberKey: e.fixed32.decode(d) }),
1372 },
1373 jd = h,
1374 Od = e.array(e.uint),
1375 Jd = {
1376 preencode(d, o) {
1377 ;(d.end++,
1378 o.title && e.string.preencode(d, o.title),
1379 o.description && e.string.preencode(d, o.description),
1380 o.file && jd.preencode(d, o.file),
1381 n >= 7 && o.files && Od.preencode(d, o.files))
1382 },
1383 encode(d, o) {
1384 const c =
1385 (o.title ? 1 : 0) | (o.description ? 2 : 0) | (o.file ? 4 : 0) | (n >= 7 && o.files ? 8 : 0)
1386 ;(e.uint.encode(d, c),
1387 o.title && e.string.encode(d, o.title),
1388 o.description && e.string.encode(d, o.description),
1389 o.file && jd.encode(d, o.file),
1390 n >= 7 && o.files && Od.encode(d, o.files))
1391 },
1392 decode(d) {
1393 const o = e.uint.decode(d)
1394 return {
1395 title: 1 & o ? e.string.decode(d) : null,
1396 description: 2 & o ? e.string.decode(d) : null,
1397 file: 4 & o ? jd.decode(d) : null,
1398 files: n >= 7 && 8 & o ? Od.decode(d) : null,
1399 }
1400 },
1401 },
1402 Ud = Ed,
1403 Vd = e.frame(Jd),
1404 Hd = {
1405 preencode(d, n) {
1406 ;(Ud.preencode(d, n.range),
1407 e.string.preencode(d, n.url),
1408 d.end++,
1409 n.preview && Vd.preencode(d, n.preview))
1410 },
1411 encode(d, n) {
1412 const o = n.preview ? 1 : 0
1413 ;(Ud.encode(d, n.range),
1414 e.string.encode(d, n.url),
1415 e.uint.encode(d, o),
1416 n.preview && Vd.encode(d, n.preview))
1417 },
1418 decode: (d) => ({
1419 range: Ud.decode(d),
1420 url: e.string.decode(d),
1421 preview: 1 & e.uint.decode(d) ? Vd.decode(d) : null,
1422 }),
1423 },
1424 zd = e.array(e.frame(Nd)),
1425 Gd = e.array(e.frame(Hd)),
1426 Qd = Gd,
1427 Wd = e.array(e.frame(Fd)),
1428 Xd = Wd,
1429 Yd = Wd,
1430 Zd = e.array(e.frame(Bd)),
1431 $d = Wd,
1432 _d = Wd,
1433 en = {
1434 preencode(d, o) {
1435 const c =
1436 (o.mention ? 1 : 0) |
1437 (o.httpLink ? 2 : 0) |
1438 (o.pearLink ? 4 : 0) |
1439 (o.bold ? 8 : 0) |
1440 (o.italic ? 16 : 0) |
1441 (o.code ? 32 : 0) |
1442 (o.emoji ? 64 : 0) |
1443 (o.codeBlock ? 128 : 0) |
1444 (o.strike ? 256 : 0) |
1445 (n >= 11 && o.translation ? 512 : 0)
1446 ;(e.uint.preencode(d, c),
1447 o.mention && zd.preencode(d, o.mention),
1448 o.httpLink && Gd.preencode(d, o.httpLink),
1449 o.pearLink && Qd.preencode(d, o.pearLink),
1450 o.bold && Wd.preencode(d, o.bold),
1451 o.italic && Xd.preencode(d, o.italic),
1452 o.code && Yd.preencode(d, o.code),
1453 o.emoji && Zd.preencode(d, o.emoji),
1454 o.codeBlock && $d.preencode(d, o.codeBlock),
1455 o.strike && _d.preencode(d, o.strike),
1456 n >= 11 && o.translation && ot.preencode(d, o.translation))
1457 },
1458 encode(d, o) {
1459 const c =
1460 (o.mention ? 1 : 0) |
1461 (o.httpLink ? 2 : 0) |
1462 (o.pearLink ? 4 : 0) |
1463 (o.bold ? 8 : 0) |
1464 (o.italic ? 16 : 0) |
1465 (o.code ? 32 : 0) |
1466 (o.emoji ? 64 : 0) |
1467 (o.codeBlock ? 128 : 0) |
1468 (o.strike ? 256 : 0) |
1469 (n >= 11 && o.translation ? 512 : 0)
1470 ;(e.uint.encode(d, c),
1471 o.mention && zd.encode(d, o.mention),
1472 o.httpLink && Gd.encode(d, o.httpLink),
1473 o.pearLink && Qd.encode(d, o.pearLink),
1474 o.bold && Wd.encode(d, o.bold),
1475 o.italic && Xd.encode(d, o.italic),
1476 o.code && Yd.encode(d, o.code),
1477 o.emoji && Zd.encode(d, o.emoji),
1478 o.codeBlock && $d.encode(d, o.codeBlock),
1479 o.strike && _d.encode(d, o.strike),
1480 n >= 11 && o.translation && ot.encode(d, o.translation))
1481 },
1482 decode(d) {
1483 const o = e.uint.decode(d)
1484 return {
1485 mention: 1 & o ? zd.decode(d) : null,
1486 httpLink: 2 & o ? Gd.decode(d) : null,
1487 pearLink: 4 & o ? Qd.decode(d) : null,
1488 bold: 8 & o ? Wd.decode(d) : null,
1489 italic: 16 & o ? Xd.decode(d) : null,
1490 code: 32 & o ? Yd.decode(d) : null,
1491 emoji: 64 & o ? Zd.decode(d) : null,
1492 codeBlock: 128 & o ? $d.decode(d) : null,
1493 strike: 256 & o ? _d.decode(d) : null,
1494 translation: n >= 11 && 512 & o ? ot.decode(d) : null,
1495 }
1496 },
1497 },
1498 dn = e.array(e.frame(g)),
1499 nn = e.frame(en),
1500 on = e.frame(qd),
1501 cn = {
1502 preencode(d, n) {
1503 ;(d.end++,
1504 n.text && e.string.preencode(d, n.text),
1505 n.files && dn.preencode(d, n.files),
1506 n.display && nn.preencode(d, n.display),
1507 n.replyTo && c.preencode(d, n.replyTo),
1508 n.parent && c.preencode(d, n.parent),
1509 n.event && on.preencode(d, n.event))
1510 },
1511 encode(d, o) {
1512 const r =
1513 (o.text ? 1 : 0) |
1514 (o.files ? 2 : 0) |
1515 (o.display ? 4 : 0) |
1516 (o.replyTo ? 8 : 0) |
1517 (o.parent ? 16 : 0) |
1518 (o.event ? 32 : 0) |
1519 (n >= 18 && o.forwarded ? 64 : 0)
1520 ;(e.uint.encode(d, r),
1521 o.text && e.string.encode(d, o.text),
1522 o.files && dn.encode(d, o.files),
1523 o.display && nn.encode(d, o.display),
1524 o.replyTo && c.encode(d, o.replyTo),
1525 o.parent && c.encode(d, o.parent),
1526 o.event && on.encode(d, o.event))
1527 },
1528 decode(d) {
1529 const o = e.uint.decode(d)
1530 return {
1531 text: 1 & o ? e.string.decode(d) : null,
1532 files: 2 & o ? dn.decode(d) : null,
1533 display: 4 & o ? nn.decode(d) : null,
1534 replyTo: 8 & o ? c.decode(d) : null,
1535 parent: 16 & o ? c.decode(d) : null,
1536 event: 32 & o ? on.decode(d) : null,
1537 forwarded: n >= 18 && !!(64 & o),
1538 }
1539 },
1540 },
1541 rn = Od,
1542 tn = nn,
1543 an = {
1544 preencode(d, n) {
1545 ;(d.end++,
1546 n.text && e.string.preencode(d, n.text),
1547 n.files && rn.preencode(d, n.files),
1548 n.display && tn.preencode(d, n.display),
1549 n.replyTo && c.preencode(d, n.replyTo),
1550 n.parent && c.preencode(d, n.parent))
1551 },
1552 encode(d, o) {
1553 const r =
1554 (o.text ? 1 : 0) |
1555 (o.files ? 2 : 0) |
1556 (o.display ? 4 : 0) |
1557 (o.replyTo ? 8 : 0) |
1558 (o.parent ? 16 : 0) |
1559 (n >= 18 && o.forwarded ? 32 : 0)
1560 ;(e.uint.encode(d, r),
1561 o.text && e.string.encode(d, o.text),
1562 o.files && rn.encode(d, o.files),
1563 o.display && tn.encode(d, o.display),
1564 o.replyTo && c.encode(d, o.replyTo),
1565 o.parent && c.encode(d, o.parent))
1566 },
1567 decode(d) {
1568 const o = e.uint.decode(d)
1569 return {
1570 text: 1 & o ? e.string.decode(d) : null,
1571 files: 2 & o ? rn.decode(d) : null,
1572 display: 4 & o ? tn.decode(d) : null,
1573 replyTo: 8 & o ? c.decode(d) : null,
1574 parent: 16 & o ? c.decode(d) : null,
1575 forwarded: n >= 18 && !!(32 & o),
1576 }
1577 },
1578 },
1579 sn = dn,
1580 pn = nn,
1581 un = {
1582 preencode(d, n) {
1583 ;(d.end++,
1584 n.text && e.string.preencode(d, n.text),
1585 n.files && sn.preencode(d, n.files),
1586 n.display && pn.preencode(d, n.display),
1587 n.replyTo && c.preencode(d, n.replyTo),
1588 n.parent && c.preencode(d, n.parent))
1589 },
1590 encode(d, o) {
1591 const r =
1592 (o.text ? 1 : 0) |
1593 (o.files ? 2 : 0) |
1594 (o.display ? 4 : 0) |
1595 (o.replyTo ? 8 : 0) |
1596 (o.parent ? 16 : 0) |
1597 (n >= 18 && o.forwarded ? 32 : 0)
1598 ;(e.uint.encode(d, r),
1599 o.text && e.string.encode(d, o.text),
1600 o.files && sn.encode(d, o.files),
1601 o.display && pn.encode(d, o.display),
1602 o.replyTo && c.encode(d, o.replyTo),
1603 o.parent && c.encode(d, o.parent))
1604 },
1605 decode(d) {
1606 const o = e.uint.decode(d)
1607 return {
1608 text: 1 & o ? e.string.decode(d) : null,
1609 files: 2 & o ? sn.decode(d) : null,
1610 display: 4 & o ? pn.decode(d) : null,
1611 replyTo: 8 & o ? c.decode(d) : null,
1612 parent: 16 & o ? c.decode(d) : null,
1613 forwarded: n >= 18 && !!(32 & o),
1614 }
1615 },
1616 },
1617 ln = {
1618 preencode(e, d) {
1619 e.end++
1620 },
1621 encode(d, n) {
1622 const o = (n.isEdited ? 1 : 0) | (n.isDeleted ? 2 : 0) | (n.isPinned ? 4 : 0)
1623 e.uint.encode(d, o)
1624 },
1625 decode(d) {
1626 const n = e.uint.decode(d)
1627 return { isEdited: !!(1 & n), isDeleted: !!(2 & n), isPinned: !!(4 & n) }
1628 },
1629 },
1630 fn = {
1631 preencode(d, n) {
1632 ;(e.uint.preencode(d, n.thread), e.uint.preencode(d, n.index))
1633 },
1634 encode(d, n) {
1635 ;(e.uint.encode(d, n.thread), e.uint.encode(d, n.index))
1636 },
1637 decode: (d) => ({ thread: e.uint.decode(d), index: e.uint.decode(d) }),
1638 },
1639 mn = e.frame(J),
1640 yn = {
1641 preencode(d, n) {
1642 ;(e.uint.preencode(d, n.id),
1643 e.uint.preencode(d, n.count),
1644 d.end++,
1645 n.parent && c.preencode(d, n.parent),
1646 n.stats && mn.preencode(d, n.stats))
1647 },
1648 encode(d, n) {
1649 const o = (n.parent ? 1 : 0) | (n.stats ? 2 : 0)
1650 ;(e.uint.encode(d, n.id),
1651 e.uint.encode(d, n.count),
1652 e.uint.encode(d, o),
1653 n.parent && c.encode(d, n.parent),
1654 n.stats && mn.encode(d, n.stats))
1655 },
1656 decode(d) {
1657 const n = e.uint.decode(d),
1658 o = e.uint.decode(d),
1659 r = e.uint.decode(d)
1660 return {
1661 id: n,
1662 count: o,
1663 parent: 1 & r ? c.decode(d) : null,
1664 stats: 2 & r ? mn.decode(d) : null,
1665 }
1666 },
1667 },
1668 xn = e.frame(ln),
1669 bn = e.frame(an),
1670 kn = e.frame(Ld),
1671 vn = {
1672 preencode(d, n) {
1673 ;(fn.preencode(d, n.id),
1674 c.preencode(d, n.oplog),
1675 e.uint.preencode(d, n.clock),
1676 e.uint.preencode(d, n.timestamp),
1677 d.end++,
1678 n.editedAt && e.uint.preencode(d, n.editedAt),
1679 xn.preencode(d, n.status),
1680 n.message && bn.preencode(d, n.message),
1681 n.event && kn.preencode(d, n.event))
1682 },
1683 encode(d, n) {
1684 const o = (n.editedAt ? 1 : 0) | (n.message ? 2 : 0) | (n.event ? 4 : 0)
1685 ;(fn.encode(d, n.id),
1686 c.encode(d, n.oplog),
1687 e.uint.encode(d, n.clock),
1688 e.uint.encode(d, n.timestamp),
1689 e.uint.encode(d, o),
1690 n.editedAt && e.uint.encode(d, n.editedAt),
1691 xn.encode(d, n.status),
1692 n.message && bn.encode(d, n.message),
1693 n.event && kn.encode(d, n.event))
1694 },
1695 decode(d) {
1696 const n = fn.decode(d),
1697 o = c.decode(d),
1698 r = e.uint.decode(d),
1699 t = e.uint.decode(d),
1700 i = e.uint.decode(d)
1701 return {
1702 id: n,
1703 oplog: o,
1704 clock: r,
1705 timestamp: t,
1706 editedAt: 1 & i ? e.uint.decode(d) : 0,
1707 status: xn.decode(d),
1708 message: 2 & i ? bn.decode(d) : null,
1709 event: 4 & i ? kn.decode(d) : null,
1710 }
1711 },
1712 },
1713 gn = xn,
1714 hn = e.frame(un),
1715 Kn = kn,
1716 wn = {
1717 preencode(d, n) {
1718 ;(fn.preencode(d, n.id),
1719 c.preencode(d, n.oplog),
1720 e.uint.preencode(d, n.clock),
1721 e.uint.preencode(d, n.timestamp),
1722 d.end++,
1723 n.editedAt && e.uint.preencode(d, n.editedAt),
1724 gn.preencode(d, n.status),
1725 n.message && hn.preencode(d, n.message),
1726 n.event && Kn.preencode(d, n.event))
1727 },
1728 encode(d, n) {
1729 const o = (n.editedAt ? 1 : 0) | (n.message ? 2 : 0) | (n.event ? 4 : 0)
1730 ;(fn.encode(d, n.id),
1731 c.encode(d, n.oplog),
1732 e.uint.encode(d, n.clock),
1733 e.uint.encode(d, n.timestamp),
1734 e.uint.encode(d, o),
1735 n.editedAt && e.uint.encode(d, n.editedAt),
1736 gn.encode(d, n.status),
1737 n.message && hn.encode(d, n.message),
1738 n.event && Kn.encode(d, n.event))
1739 },
1740 decode(d) {
1741 const n = fn.decode(d),
1742 o = c.decode(d),
1743 r = e.uint.decode(d),
1744 t = e.uint.decode(d),
1745 i = e.uint.decode(d)
1746 return {
1747 id: n,
1748 oplog: o,
1749 clock: r,
1750 timestamp: t,
1751 editedAt: 1 & i ? e.uint.decode(d) : 0,
1752 status: gn.decode(d),
1753 message: 2 & i ? hn.decode(d) : null,
1754 event: 4 & i ? Kn.decode(d) : null,
1755 }
1756 },
1757 },
1758 Tn = _,
1759 Pn = e.frame(cn),
1760 An = {
1761 preencode(e, d) {
1762 ;(Tn.preencode(e, d.header), Pn.preencode(e, d.message))
1763 },
1764 encode(e, d) {
1765 ;(Tn.encode(e, d.header), Pn.encode(e, d.message))
1766 },
1767 decode: (e) => ({ header: Tn.decode(e), message: Pn.decode(e) }),
1768 },
1769 Rn = _,
1770 Dn = {
1771 preencode(e, d) {
1772 ;(Rn.preencode(e, d.header), c.preencode(e, d.oplog))
1773 },
1774 encode(e, d) {
1775 ;(Rn.encode(e, d.header), c.encode(e, d.oplog))
1776 },
1777 decode: (e) => ({ header: Rn.decode(e), oplog: c.decode(e) }),
1778 },
1779 Sn = _,
1780 Cn = Pn,
1781 Mn = {
1782 preencode(e, d) {
1783 ;(Sn.preencode(e, d.header), c.preencode(e, d.oplog), Cn.preencode(e, d.message))
1784 },
1785 encode(e, d) {
1786 ;(Sn.encode(e, d.header), c.encode(e, d.oplog), Cn.encode(e, d.message))
1787 },
1788 decode: (e) => ({ header: Sn.decode(e), oplog: c.decode(e), message: Cn.decode(e) }),
1789 },
1790 Ln = _,
1791 qn = {
1792 preencode(e, d) {
1793 ;(Ln.preencode(e, d.header), c.preencode(e, d.oplog), e.end++)
1794 },
1795 encode(d, n) {
1796 const o = n.isPinned ? 1 : 0
1797 ;(Ln.encode(d, n.header), c.encode(d, n.oplog), e.uint.encode(d, o))
1798 },
1799 decode: (d) => ({
1800 header: Ln.decode(d),
1801 oplog: c.decode(d),
1802 isPinned: !!(1 & e.uint.decode(d)),
1803 }),
1804 },
1805 Fn = {
1806 preencode(d, n) {
1807 ;(fn.preencode(d, n.id),
1808 e.fixed32.preencode(d, n.sender),
1809 e.uint.preencode(d, n.clock),
1810 e.string.preencode(d, n.reaction))
1811 },
1812 encode(d, n) {
1813 ;(fn.encode(d, n.id),
1814 e.fixed32.encode(d, n.sender),
1815 e.uint.encode(d, n.clock),
1816 e.string.encode(d, n.reaction))
1817 },
1818 decode: (d) => ({
1819 id: fn.decode(d),
1820 sender: e.fixed32.decode(d),
1821 clock: e.uint.decode(d),
1822 reaction: e.string.decode(d),
1823 }),
1824 },
1825 En = {
1826 preencode(d, n) {
1827 ;(e.string.preencode(d, n.text), e.uint.preencode(d, n.count))
1828 },
1829 encode(d, n) {
1830 ;(e.string.encode(d, n.text), e.uint.encode(d, n.count))
1831 },
1832 decode: (d) => ({ text: e.string.decode(d), count: e.uint.decode(d) }),
1833 },
1834 Bn = e.array(e.frame(En)),
1835 In = {
1836 preencode(d, o) {
1837 ;(fn.preencode(d, o.id),
1838 e.uint.preencode(d, o.total),
1839 Bn.preencode(d, o.reactions),
1840 d.end++,
1841 n >= 11 && o.editedAt && e.uint.preencode(d, o.editedAt))
1842 },
1843 encode(d, o) {
1844 const c = n >= 11 && o.editedAt ? 1 : 0
1845 ;(fn.encode(d, o.id),
1846 e.uint.encode(d, o.total),
1847 Bn.encode(d, o.reactions),
1848 e.uint.encode(d, c),
1849 n >= 11 && o.editedAt && e.uint.encode(d, o.editedAt))
1850 },
1851 decode(d) {
1852 const o = fn.decode(d),
1853 c = e.uint.decode(d),
1854 r = Bn.decode(d),
1855 t = d.start < d.end ? e.uint.decode(d) : 0
1856 return { id: o, total: c, reactions: r, editedAt: n >= 11 && 1 & t ? e.uint.decode(d) : 0 }
1857 },
1858 },
1859 Nn = _,
1860 jn = {
1861 preencode(d, n) {
1862 ;(Nn.preencode(d, n.header), c.preencode(d, n.oplog), e.string.preencode(d, n.reaction))
1863 },
1864 encode(d, n) {
1865 ;(Nn.encode(d, n.header), c.encode(d, n.oplog), e.string.encode(d, n.reaction))
1866 },
1867 decode: (d) => ({ header: Nn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1868 },
1869 On = _,
1870 Jn = {
1871 preencode(d, n) {
1872 ;(On.preencode(d, n.header), c.preencode(d, n.oplog), e.string.preencode(d, n.reaction))
1873 },
1874 encode(d, n) {
1875 ;(On.encode(d, n.header), c.encode(d, n.oplog), e.string.encode(d, n.reaction))
1876 },
1877 decode: (d) => ({ header: On.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1878 },
1879 Un = _,
1880 Vn = e.frame(Z),
1881 Hn = {
1882 preencode(d, n) {
1883 ;(Un.preencode(d, n.header), e.uint.preencode(d, n.key), Vn.preencode(d, n.config))
1884 },
1885 encode(d, n) {
1886 ;(Un.encode(d, n.header), e.uint.encode(d, n.key), Vn.encode(d, n.config))
1887 },
1888 decode: (d) => ({ header: Un.decode(d), key: e.uint.decode(d), config: Vn.decode(d) }),
1889 },
1890 zn = {
1891 preencode(d, n) {
1892 ;(e.fixed32.preencode(d, n.memberKey),
1893 e.string.preencode(d, n.displayName),
1894 d.end++,
1895 n.avatar && ct.preencode(d, n.avatar))
1896 },
1897 encode(d, n) {
1898 const o = n.avatar ? 1 : 0
1899 ;(e.fixed32.encode(d, n.memberKey),
1900 e.string.encode(d, n.displayName),
1901 e.uint.encode(d, o),
1902 n.avatar && ct.encode(d, n.avatar))
1903 },
1904 decode: (d) => ({
1905 memberKey: e.fixed32.decode(d),
1906 displayName: e.string.decode(d),
1907 avatar: 1 & e.uint.decode(d) ? ct.decode(d) : null,
1908 }),
1909 },
1910 Gn = {
1911 preencode(d, n) {
1912 ;(e.fixed32.preencode(d, n.key), d.end++, n.username && e.string.preencode(d, n.username))
1913 },
1914 encode(d, n) {
1915 const o = n.username ? 1 : 0
1916 ;(e.fixed32.encode(d, n.key),
1917 e.uint.encode(d, o),
1918 n.username && e.string.encode(d, n.username))
1919 },
1920 decode: (d) => ({
1921 key: e.fixed32.decode(d),
1922 username: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
1923 }),
1924 },
1925 Qn = e.frame(Gn),
1926 Wn = {
1927 preencode(d, n) {
1928 ;(e.fixed32.preencode(d, n.publicKey),
1929 d.end++,
1930 n.discoveryCoreKey && e.fixed32.preencode(d, n.discoveryCoreKey),
1931 n.userRegistry && Qn.preencode(d, n.userRegistry))
1932 },
1933 encode(d, n) {
1934 const o = (n.discoveryCoreKey ? 1 : 0) | (n.userRegistry ? 2 : 0)
1935 ;(e.fixed32.encode(d, n.publicKey),
1936 e.uint.encode(d, o),
1937 n.discoveryCoreKey && e.fixed32.encode(d, n.discoveryCoreKey),
1938 n.userRegistry && Qn.encode(d, n.userRegistry))
1939 },
1940 decode(d) {
1941 const n = e.fixed32.decode(d),
1942 o = e.uint.decode(d)
1943 return {
1944 publicKey: n,
1945 discoveryCoreKey: 1 & o ? e.fixed32.decode(d) : null,
1946 userRegistry: 2 & o ? Qn.decode(d) : null,
1947 }
1948 },
1949 },
1950 Xn = _,
1951 Yn = e.frame(Q),
1952 Zn = e.frame(W),
1953 $n = Vn,
1954 _n = e.frame(Wn),
1955 eo = be,
1956 no = e.array(e.frame(le)),
1957 oo = {
1958 preencode(e, d) {
1959 ;(Xn.preencode(e, d.header),
1960 Yn.preencode(e, d.digest),
1961 Zn.preencode(e, d.capabilities),
1962 e.end++,
1963 d.config && $n.preencode(e, d.config),
1964 d.identity && _n.preencode(e, d.identity),
1965 d.bootstrapDevice && eo.preencode(e, d.bootstrapDevice),
1966 d.initialMembers && no.preencode(e, d.initialMembers))
1967 },
1968 encode(d, n) {
1969 const o =
1970 (n.config ? 1 : 0) |
1971 (n.identity ? 2 : 0) |
1972 (n.bootstrapDevice ? 4 : 0) |
1973 (n.initialMembers ? 8 : 0)
1974 ;(Xn.encode(d, n.header),
1975 Yn.encode(d, n.digest),
1976 Zn.encode(d, n.capabilities),
1977 e.uint.encode(d, o),
1978 n.config && $n.encode(d, n.config),
1979 n.identity && _n.encode(d, n.identity),
1980 n.bootstrapDevice && eo.encode(d, n.bootstrapDevice),
1981 n.initialMembers && no.encode(d, n.initialMembers))
1982 },
1983 decode(d) {
1984 const n = Xn.decode(d),
1985 o = Yn.decode(d),
1986 c = Zn.decode(d),
1987 r = e.uint.decode(d)
1988 return {
1989 header: n,
1990 digest: o,
1991 capabilities: c,
1992 config: 1 & r ? $n.decode(d) : null,
1993 identity: 2 & r ? _n.decode(d) : null,
1994 bootstrapDevice: 4 & r ? eo.decode(d) : null,
1995 initialMembers: 8 & r ? no.decode(d) : null,
1996 }
1997 },
1998 },
1999 co = _,
2000 ro = {
2001 preencode(d, n) {
2002 ;(co.preencode(d, n.header), e.uint.preencode(d, n.version))
2003 },
2004 encode(d, n) {
2005 ;(co.encode(d, n.header), e.uint.encode(d, n.version))
2006 },
2007 decode: (d) => ({ header: co.decode(d), version: e.uint.decode(d) }),
2008 },
2009 to = _,
2010 io = G,
2011 ao = {
2012 preencode(d, n) {
2013 ;(to.preencode(d, n.header), e.uint.preencode(d, n.key), io.preencode(d, n.settings))
2014 },
2015 encode(d, n) {
2016 ;(to.encode(d, n.header), e.uint.encode(d, n.key), io.encode(d, n.settings))
2017 },
2018 decode: (d) => ({ header: to.decode(d), key: e.uint.decode(d), settings: io.decode(d) }),
2019 },
2020 so = {
2021 preencode(d, n) {
2022 ;(e.fixed32.preencode(d, n.memberKey),
2023 rt.preencode(d, n.status),
2024 d.end++,
2025 n.mailbox && e.fixed32.preencode(d, n.mailbox),
2026 n.roomKey && e.fixed32.preencode(d, n.roomKey))
2027 },
2028 encode(d, n) {
2029 const o = (n.mailbox ? 1 : 0) | (n.roomKey ? 2 : 0)
2030 ;(e.fixed32.encode(d, n.memberKey),
2031 rt.encode(d, n.status),
2032 e.uint.encode(d, o),
2033 n.mailbox && e.fixed32.encode(d, n.mailbox),
2034 n.roomKey && e.fixed32.encode(d, n.roomKey))
2035 },
2036 decode(d) {
2037 const n = e.fixed32.decode(d),
2038 o = rt.decode(d),
2039 c = e.uint.decode(d)
2040 return {
2041 memberKey: n,
2042 status: o,
2043 mailbox: 1 & c ? e.fixed32.decode(d) : null,
2044 roomKey: 2 & c ? e.fixed32.decode(d) : null,
2045 }
2046 },
2047 },
2048 po = {
2049 preencode(d, n) {
2050 ;(e.fixed32.preencode(d, n.roomKey),
2051 e.buffer.preencode(d, n.encryptionKey),
2052 e.fixed32.preencode(d, n.seed),
2053 o.preencode(d, n.initiator),
2054 e.fixed32.preencode(d, n.fastForwardTo))
2055 },
2056 encode(d, n) {
2057 ;(e.fixed32.encode(d, n.roomKey),
2058 e.buffer.encode(d, n.encryptionKey),
2059 e.fixed32.encode(d, n.seed),
2060 o.encode(d, n.initiator),
2061 e.fixed32.encode(d, n.fastForwardTo))
2062 },
2063 decode: (d) => ({
2064 roomKey: e.fixed32.decode(d),
2065 encryptionKey: e.buffer.decode(d),
2066 seed: e.fixed32.decode(d),
2067 initiator: o.decode(d),
2068 fastForwardTo: e.fixed32.decode(d),
2069 }),
2070 },
2071 uo = e.array(e.frame(po)),
2072 lo = Y,
2073 fo = {
2074 preencode(e, d) {
2075 ;(uo.preencode(e, d.sharedRooms), lo.preencode(e, d.blockedContacts))
2076 },
2077 encode(e, d) {
2078 ;(uo.encode(e, d.sharedRooms), lo.encode(e, d.blockedContacts))
2079 },
2080 decode: (e) => ({ sharedRooms: uo.decode(e), blockedContacts: lo.decode(e) }),
2081 },
2082 mo = _n,
2083 yo = {
2084 preencode(e, d) {
2085 mo.preencode(e, d.identity)
2086 },
2087 encode(e, d) {
2088 mo.encode(e, d.identity)
2089 },
2090 decode: (e) => ({ identity: mo.decode(e) }),
2091 },
2092 xo = {
2093 preencode(d, n) {
2094 ;(e.uint.preencode(d, n.rooms), e.uint.preencode(d, n.contacts))
2095 },
2096 encode(d, n) {
2097 ;(e.uint.encode(d, n.rooms), e.uint.encode(d, n.contacts))
2098 },
2099 decode: (d) => ({ rooms: e.uint.decode(d), contacts: e.uint.decode(d) }),
2100 },
2101 bo = {
2102 preencode(d, n) {
2103 ;(e.uint.preencode(d, n.rooms), e.uint.preencode(d, n.contactRequests))
2104 },
2105 encode(d, n) {
2106 ;(e.uint.encode(d, n.rooms), e.uint.encode(d, n.contactRequests))
2107 },
2108 decode: (d) => ({ rooms: e.uint.decode(d), contactRequests: e.uint.decode(d) }),
2109 },
2110 ko = {
2111 preencode(d, n) {
2112 e.buffer.preencode(d, n.entropy)
2113 },
2114 encode(d, n) {
2115 e.buffer.encode(d, n.entropy)
2116 },
2117 decode: (d) => ({ entropy: e.buffer.decode(d) }),
2118 },
2119 vo = {
2120 preencode(d, n) {
2121 ;(e.fixed32.preencode(d, n.publicKey),
2122 e.fixed32.preencode(d, n.devicePublicKey),
2123 e.fixed32.preencode(d, n.writerKey))
2124 },
2125 encode(d, n) {
2126 ;(e.fixed32.encode(d, n.publicKey),
2127 e.fixed32.encode(d, n.devicePublicKey),
2128 e.fixed32.encode(d, n.writerKey))
2129 },
2130 decode: (d) => ({
2131 publicKey: e.fixed32.decode(d),
2132 devicePublicKey: e.fixed32.decode(d),
2133 writerKey: e.fixed32.decode(d),
2134 }),
2135 },
2136 go = e.frame(vo),
2137 ho = {
2138 preencode(d, c) {
2139 ;(e.fixed32.preencode(d, c.id),
2140 e.fixed32.preencode(d, c.invitationSeed),
2141 e.fixed32.preencode(d, c.mailbox),
2142 t.preencode(d, c.responseKeyPair),
2143 o.preencode(d, c.initiator),
2144 o.preencode(d, c.inviter),
2145 d.end++,
2146 c.identity && go.preencode(d, c.identity),
2147 n >= 20 && c.buildType && Or.preencode(d, c.buildType))
2148 },
2149 encode(d, c) {
2150 const r = (c.identity ? 1 : 0) | (n >= 20 && c.buildType ? 2 : 0)
2151 ;(e.fixed32.encode(d, c.id),
2152 e.fixed32.encode(d, c.invitationSeed),
2153 e.fixed32.encode(d, c.mailbox),
2154 t.encode(d, c.responseKeyPair),
2155 o.encode(d, c.initiator),
2156 o.encode(d, c.inviter),
2157 e.uint.encode(d, r),
2158 c.identity && go.encode(d, c.identity),
2159 n >= 20 && c.buildType && Or.encode(d, c.buildType))
2160 },
2161 decode(d) {
2162 const c = e.fixed32.decode(d),
2163 r = e.fixed32.decode(d),
2164 i = e.fixed32.decode(d),
2165 a = t.decode(d),
2166 s = o.decode(d),
2167 p = o.decode(d),
2168 u = e.uint.decode(d)
2169 return {
2170 id: c,
2171 invitationSeed: r,
2172 mailbox: i,
2173 responseKeyPair: a,
2174 initiator: s,
2175 inviter: p,
2176 identity: 1 & u ? go.decode(d) : null,
2177 buildType: n >= 20 && 2 & u ? Or.decode(d) : null,
2178 }
2179 },
2180 },
2181 Ko = _,
2182 wo = {
2183 preencode(d, n) {
2184 ;(Ko.preencode(d, n.header), e.buffer.preencode(d, n.blindResponse))
2185 },
2186 encode(d, n) {
2187 ;(Ko.encode(d, n.header), e.buffer.encode(d, n.blindResponse))
2188 },
2189 decode: (d) => ({ header: Ko.decode(d), blindResponse: e.buffer.decode(d) }),
2190 },
2191 To = _,
2192 Po = e.frame(ho),
2193 Ao = {
2194 preencode(e, d) {
2195 ;(To.preencode(e, d.header), Po.preencode(e, d.invitation))
2196 },
2197 encode(e, d) {
2198 ;(To.encode(e, d.header), Po.encode(e, d.invitation))
2199 },
2200 decode: (e) => ({ header: To.decode(e), invitation: Po.decode(e) }),
2201 },
2202 Ro = _,
2203 Do = {
2204 preencode(d, n) {
2205 ;(Ro.preencode(d, n.header), e.fixed32.preencode(d, n.id))
2206 },
2207 encode(d, n) {
2208 ;(Ro.encode(d, n.header), e.fixed32.encode(d, n.id))
2209 },
2210 decode: (d) => ({ header: Ro.decode(d), id: e.fixed32.decode(d) }),
2211 },
2212 So = {
2213 preencode(d, n) {
2214 ;(e.fixed32.preencode(d, n.publicKey),
2215 e.fixed32.preencode(d, n.devicePublicKey),
2216 d.end++,
2217 n.privateProfileKey && e.fixed32.preencode(d, n.privateProfileKey),
2218 n.deviceKeyPair && t.preencode(d, n.deviceKeyPair),
2219 e.buffer.preencode(d, n.deviceProof))
2220 },
2221 encode(d, n) {
2222 const o = (n.privateProfileKey ? 1 : 0) | (n.deviceKeyPair ? 2 : 0)
2223 ;(e.fixed32.encode(d, n.publicKey),
2224 e.fixed32.encode(d, n.devicePublicKey),
2225 e.uint.encode(d, o),
2226 n.privateProfileKey && e.fixed32.encode(d, n.privateProfileKey),
2227 n.deviceKeyPair && t.encode(d, n.deviceKeyPair),
2228 e.buffer.encode(d, n.deviceProof))
2229 },
2230 decode(d) {
2231 const n = e.fixed32.decode(d),
2232 o = e.fixed32.decode(d),
2233 c = e.uint.decode(d)
2234 return {
2235 publicKey: n,
2236 devicePublicKey: o,
2237 privateProfileKey: 1 & c ? e.fixed32.decode(d) : null,
2238 deviceKeyPair: 2 & c ? t.decode(d) : null,
2239 deviceProof: e.buffer.decode(d),
2240 }
2241 },
2242 },
2243 Co = {
2244 preencode(e, d) {
2245 e.end++
2246 },
2247 encode(d, o) {
2248 const c =
2249 (o.isActive ? 1 : 0) |
2250 (o.isFullyMuted ? 2 : 0) |
2251 (o.isMentionsOnlyMuted ? 4 : 0) |
2252 (n >= 9 && o.isReadOnly ? 8 : 0) |
2253 (n >= 18 && o.isFavorite ? 16 : 0)
2254 e.uint.encode(d, c)
2255 },
2256 decode(d) {
2257 const o = e.uint.decode(d)
2258 return {
2259 isActive: !!(1 & o),
2260 isFullyMuted: !!(2 & o),
2261 isMentionsOnlyMuted: !!(4 & o),
2262 isReadOnly: n >= 9 && !!(8 & o),
2263 isFavorite: n >= 18 && !!(16 & o),
2264 }
2265 },
2266 },
2267 Mo = e.frame(Co),
2268 Lo = e.frame(So),
2269 qo = go,
2270 Fo = {
2271 preencode(d, c) {
2272 ;(e.fixed32.preencode(d, c.roomKey),
2273 e.buffer.preencode(d, c.encryptionKey),
2274 e.fixed32.preencode(d, c.mailbox),
2275 Mo.preencode(d, c.status),
2276 e.uint.preencode(d, c.clock),
2277 d.end++,
2278 c.initiator && o.preencode(d, c.initiator),
2279 c.fastForwardTo && e.fixed32.preencode(d, c.fastForwardTo),
2280 c.identitySwap && Lo.preencode(d, c.identitySwap),
2281 n >= 6 && c.identitySwapV2 && qo.preencode(d, c.identitySwapV2),
2282 n >= 10 && c.contact && e.fixed32.preencode(d, c.contact))
2283 },
2284 encode(d, c) {
2285 const r =
2286 (c.initiator ? 1 : 0) |
2287 (c.fastForwardTo ? 2 : 0) |
2288 (c.identitySwap ? 4 : 0) |
2289 (n >= 6 && c.identitySwapV2 ? 8 : 0) |
2290 (n >= 10 && c.contact ? 16 : 0)
2291 ;(e.fixed32.encode(d, c.roomKey),
2292 e.buffer.encode(d, c.encryptionKey),
2293 e.fixed32.encode(d, c.mailbox),
2294 Mo.encode(d, c.status),
2295 e.uint.encode(d, c.clock),
2296 e.uint.encode(d, r),
2297 c.initiator && o.encode(d, c.initiator),
2298 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2299 c.identitySwap && Lo.encode(d, c.identitySwap),
2300 n >= 6 && c.identitySwapV2 && qo.encode(d, c.identitySwapV2),
2301 n >= 10 && c.contact && e.fixed32.encode(d, c.contact))
2302 },
2303 decode(d) {
2304 const c = e.fixed32.decode(d),
2305 r = e.buffer.decode(d),
2306 t = e.fixed32.decode(d),
2307 i = Mo.decode(d),
2308 a = e.uint.decode(d),
2309 s = e.uint.decode(d)
2310 return {
2311 roomKey: c,
2312 encryptionKey: r,
2313 mailbox: t,
2314 status: i,
2315 clock: a,
2316 initiator: 1 & s ? o.decode(d) : null,
2317 fastForwardTo: 2 & s ? e.fixed32.decode(d) : null,
2318 identitySwap: 4 & s ? Lo.decode(d) : null,
2319 identitySwapV2: n >= 6 && 8 & s ? qo.decode(d) : null,
2320 contact: n >= 10 && 16 & s ? e.fixed32.decode(d) : null,
2321 }
2322 },
2323 },
2324 Eo = _,
2325 Bo = {
2326 preencode(d, n) {
2327 ;(Eo.preencode(d, n.header),
2328 e.fixed32.preencode(d, n.roomKey),
2329 e.buffer.preencode(d, n.encryptionKey),
2330 e.fixed32.preencode(d, n.mailbox),
2331 d.end++,
2332 n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo),
2333 n.initiator && o.preencode(d, n.initiator),
2334 n.dm && e.fixed32.preencode(d, n.dm))
2335 },
2336 encode(d, c) {
2337 const r =
2338 (c.fastForwardTo ? 1 : 0) |
2339 (c.initiator ? 2 : 0) |
2340 (c.dm ? 4 : 0) |
2341 (n >= 9 && c.isReadOnly ? 8 : 0)
2342 ;(Eo.encode(d, c.header),
2343 e.fixed32.encode(d, c.roomKey),
2344 e.buffer.encode(d, c.encryptionKey),
2345 e.fixed32.encode(d, c.mailbox),
2346 e.uint.encode(d, r),
2347 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2348 c.initiator && o.encode(d, c.initiator),
2349 c.dm && e.fixed32.encode(d, c.dm))
2350 },
2351 decode(d) {
2352 const c = Eo.decode(d),
2353 r = e.fixed32.decode(d),
2354 t = e.buffer.decode(d),
2355 i = e.fixed32.decode(d),
2356 a = e.uint.decode(d)
2357 return {
2358 header: c,
2359 roomKey: r,
2360 encryptionKey: t,
2361 mailbox: i,
2362 fastForwardTo: 1 & a ? e.fixed32.decode(d) : null,
2363 initiator: 2 & a ? o.decode(d) : null,
2364 dm: 4 & a ? e.fixed32.decode(d) : null,
2365 isReadOnly: n >= 9 && !!(8 & a),
2366 }
2367 },
2368 },
2369 Io = _,
2370 No = {
2371 preencode(d, n) {
2372 ;(Io.preencode(d, n.header), e.fixed32.preencode(d, n.discoveryKey))
2373 },
2374 encode(d, n) {
2375 ;(Io.encode(d, n.header), e.fixed32.encode(d, n.discoveryKey))
2376 },
2377 decode: (d) => ({ header: Io.decode(d), discoveryKey: e.fixed32.decode(d) }),
2378 },
2379 jo = _,
2380 Oo = Mo,
2381 Jo = {
2382 preencode(d, n) {
2383 ;(jo.preencode(d, n.header),
2384 e.fixed32.preencode(d, n.roomKey),
2385 e.uint.preencode(d, n.key),
2386 Oo.preencode(d, n.status))
2387 },
2388 encode(d, n) {
2389 ;(jo.encode(d, n.header),
2390 e.fixed32.encode(d, n.roomKey),
2391 e.uint.encode(d, n.key),
2392 Oo.encode(d, n.status))
2393 },
2394 decode: (d) => ({
2395 header: jo.decode(d),
2396 roomKey: e.fixed32.decode(d),
2397 key: e.uint.decode(d),
2398 status: Oo.decode(d),
2399 }),
2400 },
2401 Uo = {
2402 preencode(e, d) {
2403 e.end++
2404 },
2405 encode(d, n) {
2406 const o = n.isBlocked ? 1 : 0
2407 e.uint.encode(d, o)
2408 },
2409 decode: (d) => ({ isBlocked: !!(1 & e.uint.decode(d)) }),
2410 },
2411 Vo = {
2412 preencode(d, n) {
2413 ;(e.fixed32.preencode(d, n.memberKey),
2414 e.uint.preencode(d, n.clock),
2415 tt.preencode(d, n.status),
2416 d.end++,
2417 n.mailbox && e.fixed32.preencode(d, n.mailbox),
2418 n.roomKey && e.fixed32.preencode(d, n.roomKey))
2419 },
2420 encode(d, n) {
2421 const o = (n.mailbox ? 1 : 0) | (n.roomKey ? 2 : 0)
2422 ;(e.fixed32.encode(d, n.memberKey),
2423 e.uint.encode(d, n.clock),
2424 tt.encode(d, n.status),
2425 e.uint.encode(d, o),
2426 n.mailbox && e.fixed32.encode(d, n.mailbox),
2427 n.roomKey && e.fixed32.encode(d, n.roomKey))
2428 },
2429 decode(d) {
2430 const n = e.fixed32.decode(d),
2431 o = e.uint.decode(d),
2432 c = tt.decode(d),
2433 r = e.uint.decode(d)
2434 return {
2435 memberKey: n,
2436 clock: o,
2437 status: c,
2438 mailbox: 1 & r ? e.fixed32.decode(d) : null,
2439 roomKey: 2 & r ? e.fixed32.decode(d) : null,
2440 }
2441 },
2442 },
2443 Ho = _,
2444 zo = e.frame(so),
2445 Go = {
2446 preencode(e, d) {
2447 ;(Ho.preencode(e, d.header), zo.preencode(e, d.contact))
2448 },
2449 encode(e, d) {
2450 ;(Ho.encode(e, d.header), zo.encode(e, d.contact))
2451 },
2452 decode: (e) => ({ header: Ho.decode(e), contact: zo.decode(e) }),
2453 },
2454 Qo = _,
2455 Wo = {
2456 preencode(d, n) {
2457 ;(Qo.preencode(d, n.header),
2458 e.fixed32.preencode(d, n.memberKey),
2459 e.uint.preencode(d, n.key),
2460 it.preencode(d, n.status))
2461 },
2462 encode(d, n) {
2463 ;(Qo.encode(d, n.header),
2464 e.fixed32.encode(d, n.memberKey),
2465 e.uint.encode(d, n.key),
2466 it.encode(d, n.status))
2467 },
2468 decode: (d) => ({
2469 header: Qo.decode(d),
2470 memberKey: e.fixed32.decode(d),
2471 key: e.uint.decode(d),
2472 status: it.decode(d),
2473 }),
2474 },
2475 Xo = _,
2476 Yo = {
2477 preencode(d, n) {
2478 ;(Xo.preencode(d, n.header), e.fixed32.preencode(d, n.memberKey))
2479 },
2480 encode(d, n) {
2481 ;(Xo.encode(d, n.header), e.fixed32.encode(d, n.memberKey))
2482 },
2483 decode: (d) => ({ header: Xo.decode(d), memberKey: e.fixed32.decode(d) }),
2484 },
2485 Zo = {
2486 preencode(e, d) {
2487 e.end++
2488 },
2489 encode(d, n) {
2490 const o =
2491 (n.isPending ? 1 : 0) |
2492 (n.isAccepted ? 2 : 0) |
2493 (n.isRejected ? 4 : 0) |
2494 (n.isDiscarded ? 8 : 0) |
2495 (n.isSeen ? 16 : 0)
2496 e.uint.encode(d, o)
2497 },
2498 decode(d) {
2499 const n = e.uint.decode(d)
2500 return {
2501 isPending: !!(1 & n),
2502 isAccepted: !!(2 & n),
2503 isRejected: !!(4 & n),
2504 isDiscarded: !!(8 & n),
2505 isSeen: !!(16 & n),
2506 }
2507 },
2508 },
2509 $o = ke,
2510 _o = e.frame(i),
2511 ec = {
2512 preencode(d, n) {
2513 ;($o.preencode(d, n.sender),
2514 _o.preencode(d, n.keys),
2515 e.fixed32.preencode(d, n.mailbox),
2516 d.end++,
2517 n.message && e.string.preencode(d, n.message))
2518 },
2519 encode(d, n) {
2520 const o = n.message ? 1 : 0
2521 ;($o.encode(d, n.sender),
2522 _o.encode(d, n.keys),
2523 e.fixed32.encode(d, n.mailbox),
2524 e.uint.encode(d, o),
2525 n.message && e.string.encode(d, n.message))
2526 },
2527 decode: (d) => ({
2528 sender: $o.decode(d),
2529 keys: _o.decode(d),
2530 mailbox: e.fixed32.decode(d),
2531 message: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2532 }),
2533 },
2534 dc = e.frame(ec),
2535 nc = {
2536 preencode(e, d) {
2537 ;(dc.preencode(e, d.body), ce.preencode(e, d.attestation))
2538 },
2539 encode(e, d) {
2540 ;(dc.encode(e, d.body), ce.encode(e, d.attestation))
2541 },
2542 decode: (e) => ({ body: dc.decode(e), attestation: ce.decode(e) }),
2543 },
2544 oc = ue,
2545 cc = e.frame(Zo),
2546 rc = _o,
2547 tc = {
2548 preencode(d, o) {
2549 ;(e.fixed32.preencode(d, o.memberKey),
2550 e.uint.preencode(d, o.clock),
2551 oc.preencode(d, o.sender),
2552 cc.preencode(d, o.status),
2553 rc.preencode(d, o.keys),
2554 e.fixed32.preencode(d, o.mailbox),
2555 d.end++,
2556 o.message && e.string.preencode(d, o.message),
2557 n >= 11 && o.sentAt && e.uint.preencode(d, o.sentAt))
2558 },
2559 encode(d, o) {
2560 const c = (o.message ? 1 : 0) | (n >= 11 && o.sentAt ? 2 : 0)
2561 ;(e.fixed32.encode(d, o.memberKey),
2562 e.uint.encode(d, o.clock),
2563 oc.encode(d, o.sender),
2564 cc.encode(d, o.status),
2565 rc.encode(d, o.keys),
2566 e.fixed32.encode(d, o.mailbox),
2567 e.uint.encode(d, c),
2568 o.message && e.string.encode(d, o.message),
2569 n >= 11 && o.sentAt && e.uint.encode(d, o.sentAt))
2570 },
2571 decode(d) {
2572 const o = e.fixed32.decode(d),
2573 c = e.uint.decode(d),
2574 r = oc.decode(d),
2575 t = cc.decode(d),
2576 i = rc.decode(d),
2577 a = e.fixed32.decode(d),
2578 s = e.uint.decode(d)
2579 return {
2580 memberKey: o,
2581 clock: c,
2582 sender: r,
2583 status: t,
2584 keys: i,
2585 mailbox: a,
2586 message: 1 & s ? e.string.decode(d) : null,
2587 sentAt: n >= 11 && 2 & s ? e.uint.decode(d) : 0,
2588 }
2589 },
2590 },
2591 ic = _,
2592 ac = {
2593 preencode(d, n) {
2594 ;(ic.preencode(d, n.header), e.buffer.preencode(d, n.blindRequest))
2595 },
2596 encode(d, n) {
2597 ;(ic.encode(d, n.header), e.buffer.encode(d, n.blindRequest))
2598 },
2599 decode: (d) => ({ header: ic.decode(d), blindRequest: e.buffer.decode(d) }),
2600 },
2601 sc = _,
2602 pc = cc,
2603 uc = {
2604 preencode(d, o) {
2605 ;(sc.preencode(d, o.header),
2606 e.fixed32.preencode(d, o.memberKey),
2607 e.uint.preencode(d, o.key),
2608 pc.preencode(d, o.status),
2609 d.end++,
2610 n >= 10 && o.roomKey && e.fixed32.preencode(d, o.roomKey))
2611 },
2612 encode(d, o) {
2613 const c = n >= 10 && o.roomKey ? 1 : 0
2614 ;(sc.encode(d, o.header),
2615 e.fixed32.encode(d, o.memberKey),
2616 e.uint.encode(d, o.key),
2617 pc.encode(d, o.status),
2618 e.uint.encode(d, c),
2619 n >= 10 && o.roomKey && e.fixed32.encode(d, o.roomKey))
2620 },
2621 decode(d) {
2622 const o = sc.decode(d),
2623 c = e.fixed32.decode(d),
2624 r = e.uint.decode(d),
2625 t = pc.decode(d),
2626 i = d.start < d.end ? e.uint.decode(d) : 0
2627 return {
2628 header: o,
2629 memberKey: c,
2630 key: r,
2631 status: t,
2632 roomKey: n >= 10 && 1 & i ? e.fixed32.decode(d) : null,
2633 }
2634 },
2635 },
2636 lc = {
2637 preencode(d, n) {
2638 ;(e.uint.preencode(d, n.timestamp),
2639 e.fixed32.preencode(d, n.key),
2640 e.fixed32.preencode(d, n.mailbox))
2641 },
2642 encode(d, n) {
2643 ;(e.uint.encode(d, n.timestamp), e.fixed32.encode(d, n.key), e.fixed32.encode(d, n.mailbox))
2644 },
2645 decode: (d) => ({
2646 version: e.uint.decode(d),
2647 timestamp: e.uint.decode(d),
2648 key: e.fixed32.decode(d),
2649 mailbox: e.fixed32.decode(d),
2650 }),
2651 },
2652 fc = {
2653 preencode(d, n) {
2654 switch ((e.uint.preencode(d, n.version), n.version)) {
2655 case 0:
2656 case 1:
2657 lc.preencode(d, n)
2658 break
2659 default:
2660 throw new Error("Unsupported version")
2661 }
2662 },
2663 encode(d, n) {
2664 switch ((e.uint.encode(d, n.version), n.version)) {
2665 case 0:
2666 case 1:
2667 lc.encode(d, n)
2668 break
2669 default:
2670 throw new Error("Unsupported version")
2671 }
2672 },
2673 decode(d) {
2674 const n = d.start,
2675 o = e.uint.decode(d)
2676 switch (((d.start = n), o)) {
2677 case 0:
2678 case 1:
2679 return lc.decode(d)
2680 default:
2681 throw new Error("Unsupported version")
2682 }
2683 },
2684 },
2685 mc = _,
2686 yc = {
2687 preencode(d, o) {
2688 ;(mc.preencode(d, o.header),
2689 c.preencode(d, o.oplog),
2690 e.uint.preencode(d, o.index),
2691 at.preencode(d, o.preview),
2692 d.end++,
2693 n >= 7 && o.displayType && Rc.preencode(d, o.displayType))
2694 },
2695 encode(d, o) {
2696 const r = n >= 7 && o.displayType ? 1 : 0
2697 ;(mc.encode(d, o.header),
2698 c.encode(d, o.oplog),
2699 e.uint.encode(d, o.index),
2700 at.encode(d, o.preview),
2701 e.uint.encode(d, r),
2702 n >= 7 && o.displayType && Rc.encode(d, o.displayType))
2703 },
2704 decode(d) {
2705 const o = mc.decode(d),
2706 r = c.decode(d),
2707 t = e.uint.decode(d),
2708 i = at.decode(d),
2709 a = d.start < d.end ? e.uint.decode(d) : 0
2710 return {
2711 header: o,
2712 oplog: r,
2713 index: t,
2714 preview: i,
2715 displayType: n >= 7 && 1 & a ? Rc.decode(d) : 0,
2716 }
2717 },
2718 },
2719 xc = {
2720 preencode(d, o) {
2721 ;(d.end++, n >= 3 && o.memberKey && e.fixed32.preencode(d, o.memberKey))
2722 },
2723 encode(d, o) {
2724 const c = n >= 3 && o.memberKey ? 1 : 0
2725 ;(e.uint.encode(d, c), n >= 3 && o.memberKey && e.fixed32.encode(d, o.memberKey))
2726 },
2727 decode(d) {
2728 const o = e.uint.decode(d)
2729 return { memberKey: n >= 3 && 1 & o ? e.fixed32.decode(d) : null }
2730 },
2731 },
2732 bc = ue,
2733 kc = {
2734 preencode(e, d) {
2735 ;(bc.preencode(e, d.profile), ce.preencode(e, d.attestation))
2736 },
2737 encode(e, d) {
2738 ;(bc.encode(e, d.profile), ce.encode(e, d.attestation))
2739 },
2740 decode: (e) => ({ profile: bc.decode(e), attestation: ce.decode(e) }),
2741 },
2742 vc = _,
2743 gc = {
2744 preencode(d, n) {
2745 ;(vc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2746 },
2747 encode(d, n) {
2748 ;(vc.encode(d, n.header), e.fixed32.encode(d, n.key))
2749 },
2750 decode: (d) => ({ header: vc.decode(d), key: e.fixed32.decode(d) }),
2751 },
2752 hc = {
2753 preencode(d, n) {
2754 ;(e.fixed32.preencode(d, n.deviceKey),
2755 ce.preencode(d, n.privateProfileIdentity),
2756 e.buffer.preencode(d, n.deviceProof))
2757 },
2758 encode(d, n) {
2759 ;(e.fixed32.encode(d, n.deviceKey),
2760 ce.encode(d, n.privateProfileIdentity),
2761 e.buffer.encode(d, n.deviceProof))
2762 },
2763 decode: (d) => ({
2764 deviceKey: e.fixed32.decode(d),
2765 privateProfileIdentity: ce.decode(d),
2766 deviceProof: e.buffer.decode(d),
2767 }),
2768 },
2769 Kc = {
2770 preencode(d, o) {
2771 ;(e.fixed32.preencode(d, o.roomKey),
2772 e.fixed32.preencode(d, o.encryptionKey),
2773 e.fixed32.preencode(d, o.seed),
2774 d.end++,
2775 n >= 6 && o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
2776 },
2777 encode(d, o) {
2778 const c = n >= 6 && o.fastForwardTo ? 1 : 0
2779 ;(e.fixed32.encode(d, o.roomKey),
2780 e.fixed32.encode(d, o.encryptionKey),
2781 e.fixed32.encode(d, o.seed),
2782 e.uint.encode(d, c),
2783 n >= 6 && o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
2784 },
2785 decode(d) {
2786 const o = e.fixed32.decode(d),
2787 c = e.fixed32.decode(d),
2788 r = e.fixed32.decode(d),
2789 t = e.uint.decode(d)
2790 return {
2791 roomKey: o,
2792 encryptionKey: c,
2793 seed: r,
2794 fastForwardTo: n >= 6 && 1 & t ? e.fixed32.decode(d) : null,
2795 }
2796 },
2797 },
2798 wc = {
2799 preencode(d, o) {
2800 ;(e.fixed32.preencode(d, o.publicKey),
2801 e.fixed32.preencode(d, o.writerKey),
2802 e.fixed32.preencode(d, o.devicePublicKey),
2803 d.end++,
2804 n >= 6 && o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey))
2805 },
2806 encode(d, o) {
2807 const c = n >= 6 && o.privateProfileKey ? 1 : 0
2808 ;(e.fixed32.encode(d, o.publicKey),
2809 e.fixed32.encode(d, o.writerKey),
2810 e.fixed32.encode(d, o.devicePublicKey),
2811 e.uint.encode(d, c),
2812 n >= 6 && o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey))
2813 },
2814 decode(d) {
2815 const o = e.fixed32.decode(d),
2816 c = e.fixed32.decode(d),
2817 r = e.fixed32.decode(d),
2818 t = e.uint.decode(d)
2819 return {
2820 publicKey: o,
2821 writerKey: c,
2822 devicePublicKey: r,
2823 privateProfileKey: n >= 6 && 1 & t ? e.fixed32.decode(d) : null,
2824 }
2825 },
2826 },
2827 Tc = _,
2828 Pc = {
2829 preencode(d, n) {
2830 ;(Tc.preencode(d, n.header), e.fixed32.preencode(d, n.memberKey))
2831 },
2832 encode(d, n) {
2833 ;(Tc.encode(d, n.header), e.fixed32.encode(d, n.memberKey))
2834 },
2835 decode: (d) => ({ header: Tc.decode(d), memberKey: e.fixed32.decode(d) }),
2836 },
2837 Ac = { HttpLink: 1, PearLink: 2 },
2838 Rc = {
2839 preencode(e, d) {
2840 e.end++
2841 },
2842 encode(d, n) {
2843 if (n > 2) throw new Error("Unknown enum")
2844 e.uint.encode(d, n)
2845 },
2846 decode: (d) => e.uint.decode(d),
2847 },
2848 Dc = _,
2849 Sc = {
2850 preencode(d, n) {
2851 ;(Dc.preencode(d, n.header), e.uint.preencode(d, n.value))
2852 },
2853 encode(d, n) {
2854 ;(Dc.encode(d, n.header), e.uint.encode(d, n.value))
2855 },
2856 decode: (d) => ({ header: Dc.decode(d), value: e.uint.decode(d) }),
2857 },
2858 Cc = {
2859 preencode(d, n) {
2860 ;(e.uint.preencode(d, n.key), e.uint.preencode(d, n.value))
2861 },
2862 encode(d, n) {
2863 ;(e.uint.encode(d, n.key), e.uint.encode(d, n.value))
2864 },
2865 decode: (d) => ({ key: e.uint.decode(d), value: e.uint.decode(d) }),
2866 },
2867 Mc = _,
2868 Lc = {
2869 preencode(d, o) {
2870 ;(Mc.preencode(d, o.header),
2871 e.uint.preencode(d, o.from),
2872 e.uint.preencode(d, o.to),
2873 d.end++,
2874 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
2875 },
2876 encode(d, o) {
2877 const c = n >= 20 && o.buildType ? 1 : 0
2878 ;(Mc.encode(d, o.header),
2879 e.uint.encode(d, o.from),
2880 e.uint.encode(d, o.to),
2881 e.uint.encode(d, c),
2882 n >= 20 && o.buildType && Or.encode(d, o.buildType))
2883 },
2884 decode(d) {
2885 const o = Mc.decode(d),
2886 c = e.uint.decode(d),
2887 r = e.uint.decode(d),
2888 t = d.start < d.end ? e.uint.decode(d) : 0
2889 return { header: o, from: c, to: r, buildType: n >= 20 && 1 & t ? Or.decode(d) : null }
2890 },
2891 },
2892 qc = {
2893 RoomType: 1,
2894 IsExperimental: 2,
2895 IsJoiningDisabled: 3,
2896 IsAppendingDisabled: 4,
2897 IsCallingDisabled: 5,
2898 IsMembershipEventsDisabled: 6,
2899 IsAttachmentsDisabled: 7,
2900 IsLinksDisabled: 8,
2901 },
2902 Fc = {
2903 preencode(e, d) {
2904 e.end++
2905 },
2906 encode(d, n) {
2907 if (n > 8) throw new Error("Unknown enum")
2908 e.uint.encode(d, n)
2909 },
2910 decode: (d) => e.uint.decode(d),
2911 },
2912 Ec = { en: "en", it: "it", ru: "ru", es: "es", de: "de" },
2913 Bc = {
2914 preencode(e, d) {
2915 e.end++
2916 },
2917 encode(d, n) {
2918 switch (n) {
2919 case "en":
2920 e.uint.encode(d, 1)
2921 break
2922 case "it":
2923 e.uint.encode(d, 2)
2924 break
2925 case "ru":
2926 e.uint.encode(d, 3)
2927 break
2928 case "es":
2929 e.uint.encode(d, 4)
2930 break
2931 case "de":
2932 e.uint.encode(d, 5)
2933 break
2934 default:
2935 throw new Error("Unknown enum")
2936 }
2937 },
2938 decode(d) {
2939 switch (e.uint.decode(d)) {
2940 case 1:
2941 return "en"
2942 case 2:
2943 return "it"
2944 case 3:
2945 return "ru"
2946 case 4:
2947 return "es"
2948 case 5:
2949 return "de"
2950 default:
2951 return null
2952 }
2953 },
2954 },
2955 Ic = Ed,
2956 Nc = {
2957 preencode(d, n) {
2958 ;(Ic.preencode(d, n.range), Bc.preencode(d, n.language), e.string.preencode(d, n.text))
2959 },
2960 encode(d, n) {
2961 ;(Ic.encode(d, n.range), Bc.encode(d, n.language), e.string.encode(d, n.text))
2962 },
2963 decode: (d) => ({ range: Ic.decode(d), language: Bc.decode(d), text: e.string.decode(d) }),
2964 },
2965 jc = {
2966 preencode(d, n) {
2967 ;(e.fixed32.preencode(d, n.deviceKey), e.fixed32.preencode(d, n.key))
2968 },
2969 encode(d, n) {
2970 ;(e.fixed32.encode(d, n.deviceKey), e.fixed32.encode(d, n.key))
2971 },
2972 decode: (d) => ({ deviceKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
2973 },
2974 Oc = _,
2975 Jc = {
2976 preencode(d, n) {
2977 ;(Oc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2978 },
2979 encode(d, n) {
2980 ;(Oc.encode(d, n.header), e.fixed32.encode(d, n.key))
2981 },
2982 decode: (d) => ({ header: Oc.decode(d), key: e.fixed32.decode(d) }),
2983 },
2984 Uc = _,
2985 Vc = {
2986 preencode(d, n) {
2987 ;(Uc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2988 },
2989 encode(d, n) {
2990 ;(Uc.encode(d, n.header), e.fixed32.encode(d, n.key))
2991 },
2992 decode: (d) => ({ header: Uc.decode(d), key: e.fixed32.decode(d) }),
2993 },
2994 Hc = { Flag: 1 },
2995 zc = {
2996 preencode(e, d) {
2997 e.end++
2998 },
2999 encode(d, n) {
3000 if (n > 1) throw new Error("Unknown enum")
3001 e.uint.encode(d, n)
3002 },
3003 decode: (d) => e.uint.decode(d),
3004 },
3005 Gc = {
3006 preencode(d, n) {
3007 ;(fn.preencode(d, n.id),
3008 e.fixed32.preencode(d, n.sender),
3009 e.uint.preencode(d, n.clock),
3010 zc.preencode(d, n.label))
3011 },
3012 encode(d, n) {
3013 ;(fn.encode(d, n.id),
3014 e.fixed32.encode(d, n.sender),
3015 e.uint.encode(d, n.clock),
3016 zc.encode(d, n.label))
3017 },
3018 decode: (d) => ({
3019 id: fn.decode(d),
3020 sender: e.fixed32.decode(d),
3021 clock: e.uint.decode(d),
3022 label: zc.decode(d),
3023 }),
3024 },
3025 Qc = _,
3026 Wc = {
3027 preencode(e, d) {
3028 ;(Qc.preencode(e, d.header), c.preencode(e, d.oplog), zc.preencode(e, d.label))
3029 },
3030 encode(e, d) {
3031 ;(Qc.encode(e, d.header), c.encode(e, d.oplog), zc.encode(e, d.label))
3032 },
3033 decode: (e) => ({ header: Qc.decode(e), oplog: c.decode(e), label: zc.decode(e) }),
3034 },
3035 Xc = _,
3036 Yc = {
3037 preencode(e, d) {
3038 ;(Xc.preencode(e, d.header), c.preencode(e, d.oplog), zc.preencode(e, d.label))
3039 },
3040 encode(e, d) {
3041 ;(Xc.encode(e, d.header), c.encode(e, d.oplog), zc.encode(e, d.label))
3042 },
3043 decode: (e) => ({ header: Xc.decode(e), oplog: c.decode(e), label: zc.decode(e) }),
3044 },
3045 Zc = {
3046 preencode(d, n) {
3047 ;(zc.preencode(d, n.label), e.uint.preencode(d, n.count))
3048 },
3049 encode(d, n) {
3050 ;(zc.encode(d, n.label), e.uint.encode(d, n.count))
3051 },
3052 decode: (d) => ({ label: zc.decode(d), count: e.uint.decode(d) }),
3053 },
3054 $c = e.array(e.frame(Zc)),
3055 _c = {
3056 preencode(d, o) {
3057 ;(fn.preencode(d, o.id),
3058 e.uint.preencode(d, o.total),
3059 $c.preencode(d, o.labels),
3060 e.uint.preencode(d, o.editedAt),
3061 d.end++,
3062 n >= 15 && o.flagsClock && e.uint.preencode(d, o.flagsClock),
3063 n >= 15 && o.version && e.uint.preencode(d, o.version))
3064 },
3065 encode(d, o) {
3066 const c =
3067 (n >= 15 && o.flagsClock ? 1 : 0) |
3068 (n >= 15 && o.version ? 2 : 0) |
3069 (n >= 16 && o.isDeleted ? 4 : 0)
3070 ;(fn.encode(d, o.id),
3071 e.uint.encode(d, o.total),
3072 $c.encode(d, o.labels),
3073 e.uint.encode(d, o.editedAt),
3074 e.uint.encode(d, c),
3075 n >= 15 && o.flagsClock && e.uint.encode(d, o.flagsClock),
3076 n >= 15 && o.version && e.uint.encode(d, o.version))
3077 },
3078 decode(d) {
3079 const o = fn.decode(d),
3080 c = e.uint.decode(d),
3081 r = $c.decode(d),
3082 t = e.uint.decode(d),
3083 i = d.start < d.end ? e.uint.decode(d) : 0
3084 return {
3085 id: o,
3086 total: c,
3087 labels: r,
3088 editedAt: t,
3089 flagsClock: n >= 15 && 1 & i ? e.uint.decode(d) : 0,
3090 version: n >= 15 && 2 & i ? e.uint.decode(d) : 0,
3091 isDeleted: n >= 16 && !!(4 & i),
3092 }
3093 },
3094 },
3095 er = _,
3096 dr = {
3097 preencode(d, n) {
3098 ;(er.preencode(d, n.header), e.uint.preencode(d, n.length))
3099 },
3100 encode(d, n) {
3101 ;(er.encode(d, n.header), e.uint.encode(d, n.length))
3102 },
3103 decode: (d) => ({ header: er.decode(d), length: e.uint.decode(d) }),
3104 },
3105 nr = {
3106 preencode(d, n) {
3107 ;(e.fixed32.preencode(d, n.memberKey), e.uint.preencode(d, n.length))
3108 },
3109 encode(d, n) {
3110 ;(e.fixed32.encode(d, n.memberKey), e.uint.encode(d, n.length))
3111 },
3112 decode: (d) => ({ memberKey: e.fixed32.decode(d), length: e.uint.decode(d) }),
3113 },
3114 or = $,
3115 cr = {
3116 preencode(e, d) {
3117 e.end++
3118 },
3119 encode(d, o) {
3120 const c = n >= 13 && o.disableReadReceipts ? 1 : 0
3121 e.uint.encode(d, c)
3122 },
3123 decode(d) {
3124 const o = e.uint.decode(d)
3125 return { disableReadReceipts: n >= 13 && !!(1 & o) }
3126 },
3127 },
3128 rr = { disableReadReceipts: "disableReadReceipts" },
3129 tr = {
3130 preencode(e, d) {
3131 e.end++
3132 },
3133 encode(d, n) {
3134 if ("disableReadReceipts" !== n) throw new Error("Unknown enum")
3135 e.uint.encode(d, 1)
3136 },
3137 decode: (d) => (1 === e.uint.decode(d) ? "disableReadReceipts" : null),
3138 },
3139 ir = _,
3140 ar = e.frame(cr),
3141 sr = {
3142 preencode(e, d) {
3143 ;(ir.preencode(e, d.header), tr.preencode(e, d.key), ar.preencode(e, d.settings))
3144 },
3145 encode(e, d) {
3146 ;(ir.encode(e, d.header), tr.encode(e, d.key), ar.encode(e, d.settings))
3147 },
3148 decode: (e) => ({ header: ir.decode(e), key: tr.decode(e), settings: ar.decode(e) }),
3149 },
3150 pr = { Flag: 1 },
3151 ur = {
3152 preencode(e, d) {
3153 e.end++
3154 },
3155 encode(d, n) {
3156 if (n > 1) throw new Error("Unknown enum")
3157 e.uint.encode(d, n)
3158 },
3159 decode: (d) => e.uint.decode(d),
3160 },
3161 lr = {
3162 preencode(d, n) {
3163 ;(e.fixed32.preencode(d, n.key),
3164 e.fixed32.preencode(d, n.sender),
3165 e.uint.preencode(d, n.clock),
3166 ur.preencode(d, n.label))
3167 },
3168 encode(d, n) {
3169 ;(e.fixed32.encode(d, n.key),
3170 e.fixed32.encode(d, n.sender),
3171 e.uint.encode(d, n.clock),
3172 ur.encode(d, n.label))
3173 },
3174 decode: (d) => ({
3175 key: e.fixed32.decode(d),
3176 sender: e.fixed32.decode(d),
3177 clock: e.uint.decode(d),
3178 label: ur.decode(d),
3179 }),
3180 },
3181 fr = _,
3182 mr = {
3183 preencode(d, n) {
3184 ;(fr.preencode(d, n.header), e.fixed32.preencode(d, n.key), ur.preencode(d, n.label))
3185 },
3186 encode(d, n) {
3187 ;(fr.encode(d, n.header), e.fixed32.encode(d, n.key), ur.encode(d, n.label))
3188 },
3189 decode: (d) => ({ header: fr.decode(d), key: e.fixed32.decode(d), label: ur.decode(d) }),
3190 },
3191 yr = {
3192 preencode(d, n) {
3193 ;(ur.preencode(d, n.label), e.uint.preencode(d, n.count))
3194 },
3195 encode(d, n) {
3196 ;(ur.encode(d, n.label), e.uint.encode(d, n.count))
3197 },
3198 decode: (d) => ({ label: ur.decode(d), count: e.uint.decode(d) }),
3199 },
3200 xr = e.array(e.frame(yr)),
3201 br = {
3202 preencode(d, n) {
3203 ;(e.fixed32.preencode(d, n.key),
3204 e.uint.preencode(d, n.total),
3205 xr.preencode(d, n.labels),
3206 e.uint.preencode(d, n.editedAt),
3207 e.uint.preencode(d, n.flagsClock))
3208 },
3209 encode(d, n) {
3210 ;(e.fixed32.encode(d, n.key),
3211 e.uint.encode(d, n.total),
3212 xr.encode(d, n.labels),
3213 e.uint.encode(d, n.editedAt),
3214 e.uint.encode(d, n.flagsClock))
3215 },
3216 decode: (d) => ({
3217 key: e.fixed32.decode(d),
3218 total: e.uint.decode(d),
3219 labels: xr.decode(d),
3220 editedAt: e.uint.decode(d),
3221 flagsClock: e.uint.decode(d),
3222 }),
3223 },
3224 kr = {
3225 preencode(d, n) {
3226 ;(e.float64.preencode(d, n.latitude), e.float64.preencode(d, n.longitude))
3227 },
3228 encode(d, n) {
3229 ;(e.float64.encode(d, n.latitude), e.float64.encode(d, n.longitude))
3230 },
3231 decode: (d) => ({ latitude: e.float64.decode(d), longitude: e.float64.decode(d) }),
3232 },
3233 vr = _,
3234 gr = {
3235 preencode(d, n) {
3236 ;(vr.preencode(d, n.header),
3237 e.fixed32.preencode(d, n.deviceKey),
3238 e.fixed32.preencode(d, n.fromDeviceKey))
3239 },
3240 encode(d, n) {
3241 ;(vr.encode(d, n.header),
3242 e.fixed32.encode(d, n.deviceKey),
3243 e.fixed32.encode(d, n.fromDeviceKey))
3244 },
3245 decode: (d) => ({
3246 header: vr.decode(d),
3247 deviceKey: e.fixed32.decode(d),
3248 fromDeviceKey: e.fixed32.decode(d),
3249 }),
3250 },
3251 hr = _,
3252 Kr = Y,
3253 wr = {
3254 preencode(d, o) {
3255 ;(hr.preencode(d, o.header),
3256 e.fixed32.preencode(d, o.callKey),
3257 e.buffer.preencode(d, o.encryptionKey),
3258 d.end++,
3259 n >= 19 && o.streams && Kr.preencode(d, o.streams),
3260 n >= 19 && o.discoveryKey && e.fixed32.preencode(d, o.discoveryKey),
3261 n >= 19 && o.version && e.uint.preencode(d, o.version))
3262 },
3263 encode(d, o) {
3264 const c =
3265 (n >= 19 && o.streams ? 1 : 0) |
3266 (n >= 19 && o.discoveryKey ? 2 : 0) |
3267 (n >= 19 && o.version ? 4 : 0)
3268 ;(hr.encode(d, o.header),
3269 e.fixed32.encode(d, o.callKey),
3270 e.buffer.encode(d, o.encryptionKey),
3271 e.uint.encode(d, c),
3272 n >= 19 && o.streams && Kr.encode(d, o.streams),
3273 n >= 19 && o.discoveryKey && e.fixed32.encode(d, o.discoveryKey),
3274 n >= 19 && o.version && e.uint.encode(d, o.version))
3275 },
3276 decode(d) {
3277 const o = hr.decode(d),
3278 c = e.fixed32.decode(d),
3279 r = e.buffer.decode(d),
3280 t = e.uint.decode(d)
3281 return {
3282 header: o,
3283 callKey: c,
3284 encryptionKey: r,
3285 streams: n >= 19 && 1 & t ? Kr.decode(d) : null,
3286 discoveryKey: n >= 19 && 2 & t ? e.fixed32.decode(d) : null,
3287 version: n >= 19 && 4 & t ? e.uint.decode(d) : 0,
3288 }
3289 },
3290 },
3291 Tr = _,
3292 Pr = Y,
3293 Ar = {
3294 preencode(d, o) {
3295 ;(Tr.preencode(d, o.header),
3296 e.fixed32.preencode(d, o.callKey),
3297 d.end++,
3298 n >= 19 && o.streams && Pr.preencode(d, o.streams))
3299 },
3300 encode(d, o) {
3301 const c = n >= 19 && o.streams ? 1 : 0
3302 ;(Tr.encode(d, o.header),
3303 e.fixed32.encode(d, o.callKey),
3304 e.uint.encode(d, c),
3305 n >= 19 && o.streams && Pr.encode(d, o.streams))
3306 },
3307 decode(d) {
3308 const o = Tr.decode(d),
3309 c = e.fixed32.decode(d),
3310 r = e.uint.decode(d)
3311 return { header: o, callKey: c, streams: n >= 19 && 1 & r ? Pr.decode(d) : null }
3312 },
3313 },
3314 Rr = _,
3315 Dr = {
3316 preencode(d, n) {
3317 ;(Rr.preencode(d, n.header), e.fixed32.preencode(d, n.callKey))
3318 },
3319 encode(d, n) {
3320 ;(Rr.encode(d, n.header), e.fixed32.encode(d, n.callKey))
3321 },
3322 decode: (d) => ({ header: Rr.decode(d), callKey: e.fixed32.decode(d) }),
3323 },
3324 Sr = _,
3325 Cr = {
3326 preencode(d, n) {
3327 ;(Sr.preencode(d, n.header), e.fixed32.preencode(d, n.callKey))
3328 },
3329 encode(d, n) {
3330 ;(Sr.encode(d, n.header), e.fixed32.encode(d, n.callKey))
3331 },
3332 decode: (d) => ({ header: Sr.decode(d), callKey: e.fixed32.decode(d) }),
3333 },
3334 Mr = _,
3335 Lr = {
3336 preencode(d, n) {
3337 ;(Mr.preencode(d, n.header),
3338 e.fixed32.preencode(d, n.callKey),
3339 e.fixed32.preencode(d, n.streamKey))
3340 },
3341 encode(d, n) {
3342 ;(Mr.encode(d, n.header), e.fixed32.encode(d, n.callKey), e.fixed32.encode(d, n.streamKey))
3343 },
3344 decode: (d) => ({
3345 header: Mr.decode(d),
3346 callKey: e.fixed32.decode(d),
3347 streamKey: e.fixed32.decode(d),
3348 }),
3349 },
3350 qr = _,
3351 Fr = {
3352 preencode(d, n) {
3353 ;(qr.preencode(d, n.header),
3354 e.fixed32.preencode(d, n.callKey),
3355 e.fixed32.preencode(d, n.streamKey))
3356 },
3357 encode(d, n) {
3358 ;(qr.encode(d, n.header), e.fixed32.encode(d, n.callKey), e.fixed32.encode(d, n.streamKey))
3359 },
3360 decode: (d) => ({
3361 header: qr.decode(d),
3362 callKey: e.fixed32.decode(d),
3363 streamKey: e.fixed32.decode(d),
3364 }),
3365 },
3366 Er = {
3367 preencode(d, o) {
3368 ;(e.fixed32.preencode(d, o.callKey),
3369 e.buffer.preencode(d, o.encryptionKey),
3370 e.uint.preencode(d, o.createdAt),
3371 d.end++,
3372 n >= 19 && o.endedAt && e.uint.preencode(d, o.endedAt),
3373 n >= 19 && o.discoveryKey && e.fixed32.preencode(d, o.discoveryKey),
3374 n >= 19 && o.version && e.uint.preencode(d, o.version))
3375 },
3376 encode(d, o) {
3377 const c =
3378 (n >= 19 && o.endedAt ? 1 : 0) |
3379 (n >= 19 && o.discoveryKey ? 2 : 0) |
3380 (n >= 19 && o.version ? 4 : 0)
3381 ;(e.fixed32.encode(d, o.callKey),
3382 e.buffer.encode(d, o.encryptionKey),
3383 e.uint.encode(d, o.createdAt),
3384 e.uint.encode(d, c),
3385 n >= 19 && o.endedAt && e.uint.encode(d, o.endedAt),
3386 n >= 19 && o.discoveryKey && e.fixed32.encode(d, o.discoveryKey),
3387 n >= 19 && o.version && e.uint.encode(d, o.version))
3388 },
3389 decode(d) {
3390 const o = e.fixed32.decode(d),
3391 c = e.buffer.decode(d),
3392 r = e.uint.decode(d),
3393 t = e.uint.decode(d)
3394 return {
3395 callKey: o,
3396 encryptionKey: c,
3397 createdAt: r,
3398 endedAt: n >= 19 && 1 & t ? e.uint.decode(d) : 0,
3399 discoveryKey: n >= 19 && 2 & t ? e.fixed32.decode(d) : null,
3400 version: n >= 19 && 4 & t ? e.uint.decode(d) : 0,
3401 }
3402 },
3403 },
3404 Br = {
3405 preencode(d, n) {
3406 ;(e.fixed32.preencode(d, n.callKey),
3407 e.fixed32.preencode(d, n.memberKey),
3408 e.uint.preencode(d, n.createdAt))
3409 },
3410 encode(d, n) {
3411 ;(e.fixed32.encode(d, n.callKey),
3412 e.fixed32.encode(d, n.memberKey),
3413 e.uint.encode(d, n.createdAt))
3414 },
3415 decode: (d) => ({
3416 callKey: e.fixed32.decode(d),
3417 memberKey: e.fixed32.decode(d),
3418 createdAt: e.uint.decode(d),
3419 }),
3420 },
3421 Ir = {
3422 preencode(d, o) {
3423 ;(e.fixed32.preencode(d, o.callKey),
3424 e.fixed32.preencode(d, o.deviceKey),
3425 e.fixed32.preencode(d, o.memberKey),
3426 e.uint.preencode(d, o.createdAt),
3427 d.end++,
3428 n >= 19 && o.swarmKey && e.fixed32.preencode(d, o.swarmKey))
3429 },
3430 encode(d, o) {
3431 const c = n >= 19 && o.swarmKey ? 1 : 0
3432 ;(e.fixed32.encode(d, o.callKey),
3433 e.fixed32.encode(d, o.deviceKey),
3434 e.fixed32.encode(d, o.memberKey),
3435 e.uint.encode(d, o.createdAt),
3436 e.uint.encode(d, c),
3437 n >= 19 && o.swarmKey && e.fixed32.encode(d, o.swarmKey))
3438 },
3439 decode(d) {
3440 const o = e.fixed32.decode(d),
3441 c = e.fixed32.decode(d),
3442 r = e.fixed32.decode(d),
3443 t = e.uint.decode(d),
3444 i = e.uint.decode(d)
3445 return {
3446 callKey: o,
3447 deviceKey: c,
3448 memberKey: r,
3449 createdAt: t,
3450 swarmKey: n >= 19 && 1 & i ? e.fixed32.decode(d) : null,
3451 }
3452 },
3453 },
3454 Nr = {
3455 preencode(d, n) {
3456 ;(e.fixed32.preencode(d, n.callKey),
3457 e.fixed32.preencode(d, n.deviceKey),
3458 e.buffer.preencode(d, n.streamKey),
3459 e.uint.preencode(d, n.createdAt))
3460 },
3461 encode(d, n) {
3462 ;(e.fixed32.encode(d, n.callKey),
3463 e.fixed32.encode(d, n.deviceKey),
3464 e.buffer.encode(d, n.streamKey),
3465 e.uint.encode(d, n.createdAt))
3466 },
3467 decode: (d) => ({
3468 callKey: e.fixed32.decode(d),
3469 deviceKey: e.fixed32.decode(d),
3470 streamKey: e.buffer.decode(d),
3471 createdAt: e.uint.decode(d),
3472 }),
3473 },
3474 jr = { Nightly: "Nightly", Internal: "Internal", Production: "Production" },
3475 Or = {
3476 preencode(e, d) {
3477 e.end++
3478 },
3479 encode(d, n) {
3480 switch (n) {
3481 case "Nightly":
3482 e.uint.encode(d, 1)
3483 break
3484 case "Internal":
3485 e.uint.encode(d, 2)
3486 break
3487 case "Production":
3488 e.uint.encode(d, 3)
3489 break
3490 default:
3491 throw new Error("Unknown enum")
3492 }
3493 },
3494 decode(d) {
3495 switch (e.uint.decode(d)) {
3496 case 1:
3497 return "Nightly"
3498 case 2:
3499 return "Internal"
3500 case 3:
3501 return "Production"
3502 default:
3503 return null
3504 }
3505 },
3506 },
3507 Jr = _,
3508 Ur = {
3509 preencode(e, d) {
3510 Jr.preencode(e, d.header)
3511 },
3512 encode(e, d) {
3513 Jr.encode(e, d.header)
3514 },
3515 decode: (e) => ({ header: Jr.decode(e) }),
3516 },
3517 Vr = _,
3518 Hr = {
3519 preencode(e, d) {
3520 Vr.preencode(e, d.header)
3521 },
3522 encode(e, d) {
3523 Vr.encode(e, d.header)
3524 },
3525 decode: (e) => ({ header: Vr.decode(e) }),
3526 },
3527 zr = e.frame(T),
3528 Gr = zr,
3529 Qr = e.array(Bc),
3530 Wr = e.frame(pe),
3531 Xr = zr,
3532 Yr = Wr,
3533 Zr = e.frame(Kc),
3534 $r = Wr,
3535 _r = e.frame(md),
3536 et = e.frame(xc),
3537 dt = e.frame(kr),
3538 nt = dt,
3539 ot = e.array(e.frame(Nc)),
3540 ct = zr,
3541 rt = e.frame(Uo),
3542 tt = rt,
3543 it = rt,
3544 at = zr
3545function st(e) {
3546 n = e
3547}
3548function pt(d, o, c = 20) {
3549 return ((n = c), e.encode(ft(d), o))
3550}
3551function ut(d, o, c = 20) {
3552 return ((n = c), e.decode(ft(d), o))
3553}
3554function lt(e) {
3555 switch (e) {
3556 case "@keet/room-type":
3557 return U
3558 case "@keet/display-type":
3559 return Ac
3560 case "@keet/system-settings-keys":
3561 return qc
3562 case "@keet/room-supported-language":
3563 return Ec
3564 case "@keet/label-type":
3565 return Hc
3566 case "@keet-private-id/user-settings-key":
3567 return rr
3568 case "@keet/member-label-type":
3569 return pr
3570 case "@keet/build-type":
3571 return jr
3572 default:
3573 throw new Error("Enum not found " + e)
3574 }
3575}
3576function ft(e) {
3577 switch (e) {
3578 case "@keet/head":
3579 return o
3580 case "@keet/oplog-id":
3581 return c
3582 case "@keet/encryption-keypair":
3583 return r
3584 case "@keet/signing-keypair":
3585 return t
3586 case "@keet/room-keys":
3587 return i
3588 case "@keet/operation-header":
3589 return a
3590 case "@keet/blob-pointer":
3591 return s
3592 case "@keet/file-dimensions":
3593 return p
3594 case "@keet/file-metadata":
3595 return l
3596 case "@keet/external-drive-pointer":
3597 return f
3598 case "@keet/external-blob-pointer":
3599 return m
3600 case "@keet/file-pointer":
3601 return b
3602 case "@keet/file":
3603 return g
3604 case "@keet/image-file":
3605 return T
3606 case "@keet/file-status":
3607 return P
3608 case "@keet/file-record":
3609 return D
3610 case "@keet/device-status":
3611 return S
3612 case "@keet/member-status":
3613 return C
3614 case "@keet/member-moderation-status":
3615 return M
3616 case "@keet/abi":
3617 return L
3618 case "@keet/device-stats":
3619 return q
3620 case "@keet/member-stats":
3621 return F
3622 case "@keet/chat-stats":
3623 return E
3624 case "@keet/file-stats":
3625 return B
3626 case "@keet/stats":
3627 return J
3628 case "@keet/room-type":
3629 return V
3630 case "@keet/system-settings":
3631 return H
3632 case "@keet/system-digest":
3633 return Q
3634 case "@keet/room-seed":
3635 return W
3636 case "@keet/room-capabilities":
3637 return X
3638 case "@keet/room-config":
3639 return Z
3640 case "@keet/blind-peer":
3641 return $
3642 case "@keet/add-blind-peer-operation":
3643 return de
3644 case "@keet/remove-blind-peer-operation":
3645 return oe
3646 case "@keet/identity-attestation":
3647 return ce
3648 case "@keet/device-invitation":
3649 return re
3650 case "@keet/device":
3651 return ae
3652 case "@keet/member-profile":
3653 return se
3654 case "@keet/device-profile":
3655 return pe
3656 case "@keet/member-update":
3657 return le
3658 case "@keet/device-update":
3659 return fe
3660 case "@keet/signed-pairing-data":
3661 return me
3662 case "@keet/device-request-identity":
3663 return ye
3664 case "@keet/device-response-identity":
3665 return xe
3666 case "@keet/device-request-with-invitation":
3667 return ge
3668 case "@keet/device-request-with-invitation-and-proof":
3669 return Ke
3670 case "@keet/device-request-with-member-proof":
3671 return Pe
3672 case "@keet/device-request":
3673 return De
3674 case "@keet/device-response":
3675 return Me
3676 case "@keet/invitation-metadata":
3677 return Le
3678 case "@keet/invitation":
3679 return Ee
3680 case "@keet/add-invitation-operation":
3681 return Ne
3682 case "@keet/remove-invitation-operation":
3683 return Oe
3684 case "@keet/sendable-room-invitation":
3685 return Je
3686 case "@keet/sendable-identity-invitation":
3687 return Ue
3688 case "@keet/sendable-contact-invitation":
3689 return Ve
3690 case "@keet/sendable-invitation":
3691 return We
3692 case "@keet/add-device-operation":
3693 return Ye
3694 case "@keet/update-device-operation":
3695 return $e
3696 case "@keet/start-indexing-operation":
3697 return _e
3698 case "@keet/stop-indexing-operation":
3699 return ed
3700 case "@keet/join-request":
3701 return nd
3702 case "@keet/accept-join-request-operation":
3703 return rd
3704 case "@keet/reject-join-request-operation":
3705 return id
3706 case "@keet/member":
3707 return pd
3708 case "@keet/full-member":
3709 return fd
3710 case "@keet/member-proofs":
3711 return md
3712 case "@keet/update-member-operation":
3713 return bd
3714 case "@keet/change-member-status-operation":
3715 return gd
3716 case "@keet/change-member-role-operation":
3717 return Kd
3718 case "@keet/remove-member-operation":
3719 return Td
3720 case "@keet/member-activity":
3721 return Pd
3722 case "@keet/member-joined-event":
3723 return Ad
3724 case "@keet/member-left-event":
3725 return Rd
3726 case "@keet/title-changed-chat-event":
3727 return Dd
3728 case "@keet/chat-event":
3729 return Ld
3730 case "@keet/sendable-event":
3731 return qd
3732 case "@keet/display-range":
3733 return Fd
3734 case "@keet/display-content-range":
3735 return Bd
3736 case "@keet/mention-display-item":
3737 return Nd
3738 case "@keet/link-preview":
3739 return Jd
3740 case "@keet/display-link-item":
3741 return Hd
3742 case "@keet/display":
3743 return en
3744 case "@keet/oplog-message":
3745 return cn
3746 case "@keet/index-message":
3747 return an
3748 case "@keet/full-index-message":
3749 return un
3750 case "@keet/message-status":
3751 return ln
3752 case "@keet/message-index-id":
3753 return fn
3754 case "@keet/thread":
3755 return yn
3756 case "@keet/chat-message-record":
3757 return vn
3758 case "@keet/full-chat-message-record":
3759 return wn
3760 case "@keet/add-chat-message-operation":
3761 return An
3762 case "@keet/remove-chat-message-operation":
3763 return Dn
3764 case "@keet/update-chat-message-operation":
3765 return Mn
3766 case "@keet/pin-chat-message-operation":
3767 return qn
3768 case "@keet/reaction":
3769 return Fn
3770 case "@keet/reactions-summary":
3771 return En
3772 case "@keet/reactions-digest":
3773 return In
3774 case "@keet/add-reaction-operation":
3775 return jn
3776 case "@keet/remove-reaction-operation":
3777 return Jn
3778 case "@keet/update-room-config-operation":
3779 return Hn
3780 case "@keet/group-member":
3781 return zn
3782 case "@keet/user-registry-info":
3783 return Gn
3784 case "@keet/room-identity":
3785 return Wn
3786 case "@keet/genesis-operation":
3787 return oo
3788 case "@keet/upgrade-operation":
3789 return ro
3790 case "@keet/update-system-settings-operation":
3791 return ao
3792 case "@keet-private-id/contact":
3793 return so
3794 case "@keet-private-id/v3-room-migration-info":
3795 return po
3796 case "@keet-private-id/run-v3-migration-operation":
3797 return fo
3798 case "@keet-private-id/update-identity-operation":
3799 return yo
3800 case "@keet-private-id/counters":
3801 return xo
3802 case "@keet-private-id/stats":
3803 return bo
3804 case "@keet-private-id/add-entropy-operation":
3805 return ko
3806 case "@keet-private-id/pending-invitation-identity":
3807 return vo
3808 case "@keet-private-id/pending-invitation":
3809 return ho
3810 case "@keet-private-id/resolve-pending-invitation-operation":
3811 return wo
3812 case "@keet-private-id/add-pending-invitation-operation":
3813 return Ao
3814 case "@keet-private-id/remove-pending-invitation-operation":
3815 return Do
3816 case "@keet-private-id/identity-swap":
3817 return So
3818 case "@keet-private-id/room-status":
3819 return Co
3820 case "@keet-private-id/room":
3821 return Fo
3822 case "@keet-private-id/add-room-operation":
3823 return Bo
3824 case "@keet-private-id/remove-room-operation":
3825 return No
3826 case "@keet-private-id/update-room-status-operation":
3827 return Jo
3828 case "@keet-private-id/contact-status":
3829 return Uo
3830 case "@keet-private-id/contact-record":
3831 return Vo
3832 case "@keet-private-id/add-contact-operation":
3833 return Go
3834 case "@keet-private-id/update-contact-status-operation":
3835 return Wo
3836 case "@keet-private-id/remove-contact-operation":
3837 return Yo
3838 case "@keet-private-id/contact-request-status":
3839 return Zo
3840 case "@keet-private-id/contact-request-body":
3841 return ec
3842 case "@keet-private-id/contact-request":
3843 return nc
3844 case "@keet-private-id/contact-request-record":
3845 return tc
3846 case "@keet-private-id/add-contact-request-operation":
3847 return ac
3848 case "@keet-private-id/update-contact-request-status-operation":
3849 return uc
3850 case "@keet-private-id/profile-discovery-record-v1":
3851 return lc
3852 case "@keet-private-id/profile-discovery-record":
3853 return fc
3854 case "@keet/add-file-preview-operation":
3855 return yc
3856 case "@keet/member-removed-event":
3857 return xc
3858 case "@keet/member-contact-info":
3859 return kc
3860 case "@keet/remove-device-operation":
3861 return gc
3862 case "@keet/device-identity":
3863 return hc
3864 case "@keet/readonly-room-invitation":
3865 return Kc
3866 case "@keet-private-id/identity-swap-v2":
3867 return wc
3868 case "@keet-private-id/activate-contact-room-operation":
3869 return Pc
3870 case "@keet/display-type":
3871 return Rc
3872 case "@keet/test-increment-operation":
3873 return Sc
3874 case "@keet/test-collection-record-1":
3875 return Cc
3876 case "@keet/migrate-abi-operation":
3877 return Lc
3878 case "@keet/system-settings-keys":
3879 return Fc
3880 case "@keet/room-supported-language":
3881 return Bc
3882 case "@keet/translation-display-item":
3883 return Nc
3884 case "@keet-private-id/unreads":
3885 return jc
3886 case "@keet-private-id/add-unreads-key-operation":
3887 return Jc
3888 case "@keet-private-id/remove-unreads-key-operation":
3889 return Vc
3890 case "@keet/label-type":
3891 return zc
3892 case "@keet/chat-label":
3893 return Gc
3894 case "@keet/add-chat-label-operation":
3895 return Wc
3896 case "@keet/remove-chat-label-operation":
3897 return Yc
3898 case "@keet/chat-label-summary":
3899 return Zc
3900 case "@keet/chat-label-digest":
3901 return _c
3902 case "@keet/update-read-length-operation":
3903 return dr
3904 case "@keet/read-length":
3905 return nr
3906 case "@keet/tmp-removed-member":
3907 return or
3908 case "@keet-private-id/settings":
3909 return cr
3910 case "@keet-private-id/user-settings-key":
3911 return tr
3912 case "@keet-private-id/update-settings-operation":
3913 return sr
3914 case "@keet/member-label-type":
3915 return ur
3916 case "@keet/member-label":
3917 return lr
3918 case "@keet/add-member-label-operation":
3919 return mr
3920 case "@keet/member-label-summary":
3921 return yr
3922 case "@keet/member-label-digest":
3923 return br
3924 case "@keet/location-shared-event":
3925 return kr
3926 case "@keet/move-indexer-operation":
3927 return gr
3928 case "@keet/start-call":
3929 return wr
3930 case "@keet/join-call":
3931 return Ar
3932 case "@keet/leave-call":
3933 return Dr
3934 case "@keet/end-call":
3935 return Cr
3936 case "@keet/add-call-stream":
3937 return Lr
3938 case "@keet/remove-call-stream":
3939 return Fr
3940 case "@keet/call-record":
3941 return Er
3942 case "@keet/call-member-record":
3943 return Br
3944 case "@keet/call-device-record":
3945 return Ir
3946 case "@keet/call-stream-record":
3947 return Nr
3948 case "@keet/build-type":
3949 return Or
3950 case "@keet/test-crash-operation":
3951 return Ur
3952 case "@keet/test-dispatch-error-operation":
3953 return Hr
3954 default:
3955 throw new Error("Encoder not found " + e)
3956 }
3957}
3958function mt(e, d = 20) {
3959 const o = ft(e)
3960 return {
3961 preencode(e, c) {
3962 ;((n = d), o.preencode(e, c))
3963 },
3964 encode(e, c) {
3965 ;((n = d), o.encode(e, c))
3966 },
3967 decode: (e) => ((n = d), o.decode(e)),
3968 }
3969}
3970const yt = mt
3971module.exports = {
3972 resolveStruct: yt,
3973 getStruct: mt,
3974 getEnum: lt,
3975 getEncoding: ft,
3976 encode: pt,
3977 decode: ut,
3978 setVersion: st,
3979 version: n,
3980}
keet-core-4.14.4-pretty/schema/spec/contract/hyperschema/index.js +3980 -0
……@@ -0,0 +1,3980 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 20
3let n = d
4const o = {
5 preencode(d, n) {
6 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.length))
7 },
8 encode(d, n) {
9 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.length))
10 },
11 decode: (d) => ({ key: e.fixed32.decode(d), length: e.uint.decode(d) }),
12 },
13 c = {
14 preencode(d, n) {
15 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.seq))
16 },
17 encode(d, n) {
18 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.seq))
19 },
20 decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
21 },
22 r = {
23 preencode(d, n) {
24 ;(e.fixed32.preencode(d, n.publicKey), e.fixed32.preencode(d, n.secretKey))
25 },
26 encode(d, n) {
27 ;(e.fixed32.encode(d, n.publicKey), e.fixed32.encode(d, n.secretKey))
28 },
29 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed32.decode(d) }),
30 },
31 t = {
32 preencode(d, n) {
33 ;(e.fixed32.preencode(d, n.publicKey), e.fixed64.preencode(d, n.secretKey))
34 },
35 encode(d, n) {
36 ;(e.fixed32.encode(d, n.publicKey), e.fixed64.encode(d, n.secretKey))
37 },
38 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed64.decode(d) }),
39 },
40 i = {
41 preencode(d, n) {
42 ;(e.fixed32.preencode(d, n.key),
43 d.end++,
44 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
45 n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo))
46 },
47 encode(d, n) {
48 const o = (n.encryptionKey ? 1 : 0) | (n.fastForwardTo ? 2 : 0)
49 ;(e.fixed32.encode(d, n.key),
50 e.uint.encode(d, o),
51 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
52 n.fastForwardTo && e.fixed32.encode(d, n.fastForwardTo))
53 },
54 decode(d) {
55 const n = e.fixed32.decode(d),
56 o = e.uint.decode(d)
57 return {
58 key: n,
59 encryptionKey: 1 & o ? e.buffer.decode(d) : null,
60 fastForwardTo: 2 & o ? e.fixed32.decode(d) : null,
61 }
62 },
63 },
64 a = {
65 preencode(d, n) {
66 e.uint.preencode(d, n.timestamp)
67 },
68 encode(d, n) {
69 e.uint.encode(d, n.timestamp)
70 },
71 decode: (d) => ({ timestamp: e.uint.decode(d) }),
72 },
73 s = {
74 preencode(d, n) {
75 ;(e.uint.preencode(d, n.blockOffset),
76 e.uint.preencode(d, n.blockLength),
77 e.uint.preencode(d, n.byteOffset),
78 e.uint.preencode(d, n.byteLength))
79 },
80 encode(d, n) {
81 ;(e.uint.encode(d, n.blockOffset),
82 e.uint.encode(d, n.blockLength),
83 e.uint.encode(d, n.byteOffset),
84 e.uint.encode(d, n.byteLength))
85 },
86 decode: (d) => ({
87 blockOffset: e.uint.decode(d),
88 blockLength: e.uint.decode(d),
89 byteOffset: e.uint.decode(d),
90 byteLength: e.uint.decode(d),
91 }),
92 },
93 p = {
94 preencode(d, n) {
95 ;(e.uint.preencode(d, n.width), e.uint.preencode(d, n.height))
96 },
97 encode(d, n) {
98 ;(e.uint.encode(d, n.width), e.uint.encode(d, n.height))
99 },
100 decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
101 },
102 u = e.frame(p),
103 l = {
104 preencode(d, n) {
105 ;(d.end++,
106 n.name && e.string.preencode(d, n.name),
107 n.mimetype && e.string.preencode(d, n.mimetype),
108 n.dimensions && u.preencode(d, n.dimensions),
109 n.userdata && e.buffer.preencode(d, n.userdata),
110 n.duration && e.uint.preencode(d, n.duration))
111 },
112 encode(d, n) {
113 const o =
114 (n.name ? 1 : 0) |
115 (n.mimetype ? 2 : 0) |
116 (n.dimensions ? 4 : 0) |
117 (n.userdata ? 8 : 0) |
118 (n.duration ? 16 : 0) |
119 (n.isPreview ? 32 : 0)
120 ;(e.uint.encode(d, o),
121 n.name && e.string.encode(d, n.name),
122 n.mimetype && e.string.encode(d, n.mimetype),
123 n.dimensions && u.encode(d, n.dimensions),
124 n.userdata && e.buffer.encode(d, n.userdata),
125 n.duration && e.uint.encode(d, n.duration))
126 },
127 decode(d) {
128 const n = e.uint.decode(d)
129 return {
130 name: 1 & n ? e.string.decode(d) : null,
131 mimetype: 2 & n ? e.string.decode(d) : null,
132 dimensions: 4 & n ? u.decode(d) : null,
133 userdata: 8 & n ? e.buffer.decode(d) : null,
134 duration: 16 & n ? e.uint.decode(d) : 0,
135 isPreview: !!(32 & n),
136 }
137 },
138 },
139 f = {
140 preencode(d, n) {
141 ;(e.fixed32.preencode(d, n.key),
142 e.string.preencode(d, n.path),
143 e.uint.preencode(d, n.version),
144 e.uint.preencode(d, n.size))
145 },
146 encode(d, n) {
147 ;(e.fixed32.encode(d, n.key),
148 e.string.encode(d, n.path),
149 e.uint.encode(d, n.version),
150 e.uint.encode(d, n.size))
151 },
152 decode: (d) => ({
153 key: e.fixed32.decode(d),
154 path: e.string.decode(d),
155 version: e.uint.decode(d),
156 size: e.uint.decode(d),
157 }),
158 },
159 m = {
160 preencode(d, n) {
161 ;(e.fixed32.preencode(d, n.key), s.preencode(d, n.blob))
162 },
163 encode(d, n) {
164 ;(e.fixed32.encode(d, n.key), s.encode(d, n.blob))
165 },
166 decode: (d) => ({ key: e.fixed32.decode(d), blob: s.decode(d) }),
167 },
168 y = e.frame(m),
169 x = e.frame(f),
170 b = {
171 preencode(d, n) {
172 ;(d.end++,
173 n.inlined && e.buffer.preencode(d, n.inlined),
174 n.blob && s.preencode(d, n.blob),
175 n.externalBlob && y.preencode(d, n.externalBlob),
176 n.externalDrive && x.preencode(d, n.externalDrive))
177 },
178 encode(d, n) {
179 const o =
180 (n.inlined ? 1 : 0) |
181 (n.blob ? 2 : 0) |
182 (n.externalBlob ? 4 : 0) |
183 (n.externalDrive ? 8 : 0)
184 ;(e.uint.encode(d, o),
185 n.inlined && e.buffer.encode(d, n.inlined),
186 n.blob && s.encode(d, n.blob),
187 n.externalBlob && y.encode(d, n.externalBlob),
188 n.externalDrive && x.encode(d, n.externalDrive))
189 },
190 decode(d) {
191 const n = e.uint.decode(d)
192 return {
193 inlined: 1 & n ? e.buffer.decode(d) : null,
194 blob: 2 & n ? s.decode(d) : null,
195 externalBlob: 4 & n ? y.decode(d) : null,
196 externalDrive: 8 & n ? x.decode(d) : null,
197 }
198 },
199 },
200 k = e.frame(b),
201 v = e.frame(l),
202 g = {
203 preencode(d, n) {
204 ;(k.preencode(d, n.pointer),
205 d.end++,
206 n.metadata && v.preencode(d, n.metadata),
207 n.preview && zr.preencode(d, n.preview),
208 n.hash && e.fixed32.preencode(d, n.hash))
209 },
210 encode(d, n) {
211 const o = (n.metadata ? 1 : 0) | (n.preview ? 2 : 0) | (n.hash ? 4 : 0)
212 ;(k.encode(d, n.pointer),
213 e.uint.encode(d, o),
214 n.metadata && v.encode(d, n.metadata),
215 n.preview && zr.encode(d, n.preview),
216 n.hash && e.fixed32.encode(d, n.hash))
217 },
218 decode(d) {
219 const n = k.decode(d),
220 o = e.uint.decode(d)
221 return {
222 pointer: n,
223 metadata: 1 & o ? v.decode(d) : null,
224 preview: 2 & o ? zr.decode(d) : null,
225 hash: 4 & o ? e.fixed32.decode(d) : null,
226 }
227 },
228 },
229 h = e.frame(g),
230 K = h,
231 w = h,
232 T = {
233 preencode(e, d) {
234 ;(e.end++,
235 d.small && h.preencode(e, d.small),
236 d.medium && K.preencode(e, d.medium),
237 d.large && w.preencode(e, d.large))
238 },
239 encode(d, n) {
240 const o = (n.small ? 1 : 0) | (n.medium ? 2 : 0) | (n.large ? 4 : 0)
241 ;(e.uint.encode(d, o),
242 n.small && h.encode(d, n.small),
243 n.medium && K.encode(d, n.medium),
244 n.large && w.encode(d, n.large))
245 },
246 decode(d) {
247 const n = e.uint.decode(d)
248 return {
249 small: 1 & n ? h.decode(d) : null,
250 medium: 2 & n ? K.decode(d) : null,
251 large: 4 & n ? w.decode(d) : null,
252 }
253 },
254 },
255 P = {
256 preencode(e, d) {
257 e.end++
258 },
259 encode(d, n) {
260 const o = n.isDeleted ? 1 : 0
261 e.uint.encode(d, o)
262 },
263 decode: (d) => ({ isDeleted: !!(1 & e.uint.decode(d)) }),
264 },
265 A = e.frame(P),
266 R = h,
267 D = {
268 preencode(d, o) {
269 ;(e.uint.preencode(d, o.id),
270 c.preencode(d, o.oplog),
271 A.preencode(d, o.status),
272 R.preencode(d, o.file),
273 d.end++,
274 n >= 14 && o.version && e.uint.preencode(d, o.version))
275 },
276 encode(d, o) {
277 const r = n >= 14 && o.version ? 1 : 0
278 ;(e.uint.encode(d, o.id),
279 c.encode(d, o.oplog),
280 A.encode(d, o.status),
281 R.encode(d, o.file),
282 e.uint.encode(d, r),
283 n >= 14 && o.version && e.uint.encode(d, o.version))
284 },
285 decode(d) {
286 const o = e.uint.decode(d),
287 r = c.decode(d),
288 t = A.decode(d),
289 i = R.decode(d),
290 a = d.start < d.end ? e.uint.decode(d) : 0
291 return {
292 id: o,
293 oplog: r,
294 status: t,
295 file: i,
296 version: n >= 14 && 1 & a ? e.uint.decode(d) : 0,
297 }
298 },
299 },
300 S = {
301 preencode(e, d) {
302 e.end++
303 },
304 encode(d, n) {
305 const o = (n.isActive ? 1 : 0) | (n.isIndexing ? 2 : 0)
306 e.uint.encode(d, o)
307 },
308 decode(d) {
309 const n = e.uint.decode(d)
310 return { isActive: !!(1 & n), isIndexing: !!(2 & n) }
311 },
312 },
313 C = {
314 preencode(d, o) {
315 const c =
316 (o.isAdmin ? 1 : 0) |
317 (o.isModerator ? 2 : 0) |
318 (o.isPending ? 4 : 0) |
319 (o.isActive ? 8 : 0) |
320 (o.isMuted ? 16 : 0) |
321 (o.isBanned ? 32 : 0) |
322 (o.isShadowBanned ? 64 : 0) |
323 (n >= 13 && o.isRemoved ? 128 : 0)
324 e.uint.preencode(d, c)
325 },
326 encode(d, o) {
327 const c =
328 (o.isAdmin ? 1 : 0) |
329 (o.isModerator ? 2 : 0) |
330 (o.isPending ? 4 : 0) |
331 (o.isActive ? 8 : 0) |
332 (o.isMuted ? 16 : 0) |
333 (o.isBanned ? 32 : 0) |
334 (o.isShadowBanned ? 64 : 0) |
335 (n >= 13 && o.isRemoved ? 128 : 0)
336 e.uint.encode(d, c)
337 },
338 decode(d) {
339 const o = e.uint.decode(d)
340 return {
341 isAdmin: !!(1 & o),
342 isModerator: !!(2 & o),
343 isPending: !!(4 & o),
344 isActive: !!(8 & o),
345 isMuted: !!(16 & o),
346 isBanned: !!(32 & o),
347 isShadowBanned: !!(64 & o),
348 isRemoved: n >= 13 && !!(128 & o),
349 }
350 },
351 },
352 M = {
353 preencode(e, d) {
354 e.end++
355 },
356 encode(d, n) {
357 const o = (n.isMuted ? 1 : 0) | (n.isBanned ? 2 : 0) | (n.isShadowBanned ? 4 : 0)
358 e.uint.encode(d, o)
359 },
360 decode(d) {
361 const n = e.uint.decode(d)
362 return { isMuted: !!(1 & n), isBanned: !!(2 & n), isShadowBanned: !!(4 & n) }
363 },
364 },
365 L = {
366 preencode(d, n) {
367 e.uint.preencode(d, n.version)
368 },
369 encode(d, n) {
370 e.uint.encode(d, n.version)
371 },
372 decode: (d) => ({ version: e.uint.decode(d) }),
373 },
374 q = {
375 preencode(d, n) {
376 ;(e.uint.preencode(d, n.total), e.uint.preencode(d, n.active))
377 },
378 encode(d, n) {
379 ;(e.uint.encode(d, n.total), e.uint.encode(d, n.active))
380 },
381 decode: (d) => ({ total: e.uint.decode(d), active: e.uint.decode(d) }),
382 },
383 F = {
384 preencode(d, n) {
385 ;(e.uint.preencode(d, n.total), e.uint.preencode(d, n.active), e.uint.preencode(d, n.pending))
386 },
387 encode(d, n) {
388 ;(e.uint.encode(d, n.total), e.uint.encode(d, n.active), e.uint.encode(d, n.pending))
389 },
390 decode: (d) => ({
391 total: e.uint.decode(d),
392 active: e.uint.decode(d),
393 pending: e.uint.decode(d),
394 }),
395 },
396 E = {
397 preencode(d, o) {
398 ;(e.uint.preencode(d, o.clock),
399 e.uint.preencode(d, o.pinned),
400 e.uint.preencode(d, o.threads),
401 e.uint.preencode(d, o.timestamp),
402 d.end++,
403 n >= 15 && o.flagsClock && e.uint.preencode(d, o.flagsClock))
404 },
405 encode(d, o) {
406 const c = n >= 15 && o.flagsClock ? 1 : 0
407 ;(e.uint.encode(d, o.clock),
408 e.uint.encode(d, o.pinned),
409 e.uint.encode(d, o.threads),
410 e.uint.encode(d, o.timestamp),
411 e.uint.encode(d, c),
412 n >= 15 && o.flagsClock && e.uint.encode(d, o.flagsClock))
413 },
414 decode(d) {
415 const o = e.uint.decode(d),
416 c = e.uint.decode(d),
417 r = e.uint.decode(d),
418 t = e.uint.decode(d),
419 i = d.start < d.end ? e.uint.decode(d) : 0
420 return {
421 clock: o,
422 pinned: c,
423 threads: r,
424 timestamp: t,
425 flagsClock: n >= 15 && 1 & i ? e.uint.decode(d) : 0,
426 }
427 },
428 },
429 B = {
430 preencode(d, n) {
431 e.uint.preencode(d, n.clock)
432 },
433 encode(d, n) {
434 e.uint.encode(d, n.clock)
435 },
436 decode: (d) => ({ clock: e.uint.decode(d) }),
437 },
438 I = e.frame(q),
439 N = e.frame(F),
440 j = e.frame(E),
441 O = e.frame(B),
442 J = {
443 preencode(e, d) {
444 ;(I.preencode(e, d.devices),
445 N.preencode(e, d.members),
446 j.preencode(e, d.chat),
447 O.preencode(e, d.files))
448 },
449 encode(e, d) {
450 ;(I.encode(e, d.devices), N.encode(e, d.members), j.encode(e, d.chat), O.encode(e, d.files))
451 },
452 decode: (e) => ({
453 devices: I.decode(e),
454 members: N.decode(e),
455 chat: j.decode(e),
456 files: O.decode(e),
457 }),
458 },
459 U = { Default: 1, Broadcast: 2, DirectMessage: 3 },
460 V = {
461 preencode(e, d) {
462 e.end++
463 },
464 encode(d, n) {
465 if (n > 3) throw new Error("Unknown enum")
466 e.uint.encode(d, n)
467 },
468 decode: (d) => e.uint.decode(d),
469 },
470 H = {
471 preencode(d, o) {
472 const c =
473 (o.roomType ? 1 : 0) |
474 (o.isExperimental ? 2 : 0) |
475 (o.isJoiningDisabled ? 4 : 0) |
476 (o.isAppendingDisabled ? 8 : 0) |
477 (o.isCallingDisabled ? 16 : 0) |
478 (o.isMembershipEventsDisabled ? 32 : 0) |
479 (n >= 19 && o.isAttachmentsDisabled ? 64 : 0) |
480 (n >= 19 && o.isLinksDisabled ? 128 : 0) |
481 (n >= 20 && o.buildType ? 256 : 0)
482 ;(e.uint.preencode(d, c),
483 o.roomType && V.preencode(d, o.roomType),
484 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
485 },
486 encode(d, o) {
487 const c =
488 (o.roomType ? 1 : 0) |
489 (o.isExperimental ? 2 : 0) |
490 (o.isJoiningDisabled ? 4 : 0) |
491 (o.isAppendingDisabled ? 8 : 0) |
492 (o.isCallingDisabled ? 16 : 0) |
493 (o.isMembershipEventsDisabled ? 32 : 0) |
494 (n >= 19 && o.isAttachmentsDisabled ? 64 : 0) |
495 (n >= 19 && o.isLinksDisabled ? 128 : 0) |
496 (n >= 20 && o.buildType ? 256 : 0)
497 ;(e.uint.encode(d, c),
498 o.roomType && V.encode(d, o.roomType),
499 n >= 20 && o.buildType && Or.encode(d, o.buildType))
500 },
501 decode(d) {
502 const o = e.uint.decode(d)
503 return {
504 roomType: 1 & o ? V.decode(d) : 0,
505 isExperimental: !!(2 & o),
506 isJoiningDisabled: !!(4 & o),
507 isAppendingDisabled: !!(8 & o),
508 isCallingDisabled: !!(16 & o),
509 isMembershipEventsDisabled: !!(32 & o),
510 isAttachmentsDisabled: n >= 19 && !!(64 & o),
511 isLinksDisabled: n >= 19 && !!(128 & o),
512 buildType: n >= 20 && 256 & o ? Or.decode(d) : null,
513 }
514 },
515 },
516 z = e.frame(L),
517 G = e.frame(H),
518 Q = {
519 preencode(d, n) {
520 ;(z.preencode(d, n.abi), G.preencode(d, n.settings), e.uint.preencode(d, n.creationTime))
521 },
522 encode(d, n) {
523 ;(z.encode(d, n.abi), G.encode(d, n.settings), e.uint.encode(d, n.creationTime))
524 },
525 decode: (d) => ({ abi: z.decode(d), settings: G.decode(d), creationTime: e.uint.decode(d) }),
526 },
527 W = {
528 preencode(d, n) {
529 e.fixed32.preencode(d, n.seed)
530 },
531 encode(d, n) {
532 e.fixed32.encode(d, n.seed)
533 },
534 decode: (d) => ({ seed: e.fixed32.decode(d) }),
535 },
536 X = {
537 preencode(d, n) {
538 ;(r.preencode(d, n.mailboxKeyPair),
539 t.preencode(d, n.discoveryKeyPair),
540 e.fixed32.preencode(d, n.wakeupTopic),
541 e.fixed32.preencode(d, n.swarmTopic))
542 },
543 encode(d, n) {
544 ;(r.encode(d, n.mailboxKeyPair),
545 t.encode(d, n.discoveryKeyPair),
546 e.fixed32.encode(d, n.wakeupTopic),
547 e.fixed32.encode(d, n.swarmTopic))
548 },
549 decode: (d) => ({
550 mailboxKeyPair: r.decode(d),
551 discoveryKeyPair: t.decode(d),
552 wakeupTopic: e.fixed32.decode(d),
553 swarmTopic: e.fixed32.decode(d),
554 }),
555 },
556 Y = e.array(e.fixed32),
557 Z = {
558 preencode(d, o) {
559 ;(d.end++,
560 o.title && e.string.preencode(d, o.title),
561 o.avatar && Gr.preencode(d, o.avatar),
562 o.description && e.string.preencode(d, o.description),
563 n >= 11 && o.supportedLanguages && Qr.preencode(d, o.supportedLanguages),
564 n >= 13 && o.blindPeers && Y.preencode(d, o.blindPeers))
565 },
566 encode(d, o) {
567 const c =
568 (o.title ? 1 : 0) |
569 (o.avatar ? 2 : 0) |
570 (o.description ? 4 : 0) |
571 (n >= 11 && o.supportedLanguages ? 8 : 0) |
572 (n >= 13 && o.blindPeers ? 16 : 0)
573 ;(e.uint.encode(d, c),
574 o.title && e.string.encode(d, o.title),
575 o.avatar && Gr.encode(d, o.avatar),
576 o.description && e.string.encode(d, o.description),
577 n >= 11 && o.supportedLanguages && Qr.encode(d, o.supportedLanguages),
578 n >= 13 && o.blindPeers && Y.encode(d, o.blindPeers))
579 },
580 decode(d) {
581 const o = e.uint.decode(d)
582 return {
583 title: 1 & o ? e.string.decode(d) : null,
584 avatar: 2 & o ? Gr.decode(d) : null,
585 description: 4 & o ? e.string.decode(d) : null,
586 supportedLanguages: n >= 11 && 8 & o ? Qr.decode(d) : null,
587 blindPeers: n >= 13 && 16 & o ? Y.decode(d) : null,
588 }
589 },
590 },
591 $ = {
592 preencode(d, n) {
593 e.fixed32.preencode(d, n.key)
594 },
595 encode(d, n) {
596 e.fixed32.encode(d, n.key)
597 },
598 decode: (d) => ({ key: e.fixed32.decode(d) }),
599 },
600 _ = e.frame(a),
601 ee = e.frame($),
602 de = {
603 preencode(e, d) {
604 ;(_.preencode(e, d.header), ee.preencode(e, d.peer))
605 },
606 encode(e, d) {
607 ;(_.encode(e, d.header), ee.encode(e, d.peer))
608 },
609 decode: (e) => ({ header: _.decode(e), peer: ee.decode(e) }),
610 },
611 ne = _,
612 oe = {
613 preencode(d, n) {
614 ;(ne.preencode(d, n.header), e.fixed32.preencode(d, n.key))
615 },
616 encode(d, n) {
617 ;(ne.encode(d, n.header), e.fixed32.encode(d, n.key))
618 },
619 decode: (d) => ({ header: ne.decode(d), key: e.fixed32.decode(d) }),
620 },
621 ce = {
622 preencode(d, n) {
623 ;(e.fixed32.preencode(d, n.memberKey), e.buffer.preencode(d, n.proof))
624 },
625 encode(d, n) {
626 ;(e.fixed32.encode(d, n.memberKey), e.buffer.encode(d, n.proof))
627 },
628 decode: (d) => ({ memberKey: e.fixed32.decode(d), proof: e.buffer.decode(d) }),
629 },
630 re = {
631 preencode(d, n) {
632 ;(e.fixed32.preencode(d, n.id), e.buffer.preencode(d, n.response))
633 },
634 encode(d, n) {
635 ;(e.fixed32.encode(d, n.id), e.buffer.encode(d, n.response))
636 },
637 decode: (d) => ({ id: e.fixed32.decode(d), response: e.buffer.decode(d) }),
638 },
639 te = e.frame(S),
640 ie = e.frame(re),
641 ae = {
642 preencode(d, n) {
643 ;(e.fixed32.preencode(d, n.key),
644 e.fixed32.preencode(d, n.memberKey),
645 te.preencode(d, n.status),
646 Wr.preencode(d, n.profile),
647 d.end++,
648 n.invitation && ie.preencode(d, n.invitation))
649 },
650 encode(d, n) {
651 const o = n.invitation ? 1 : 0
652 ;(e.fixed32.encode(d, n.key),
653 e.fixed32.encode(d, n.memberKey),
654 te.encode(d, n.status),
655 Wr.encode(d, n.profile),
656 e.uint.encode(d, o),
657 n.invitation && ie.encode(d, n.invitation))
658 },
659 decode: (d) => ({
660 key: e.fixed32.decode(d),
661 memberKey: e.fixed32.decode(d),
662 status: te.decode(d),
663 profile: Wr.decode(d),
664 invitation: 1 & e.uint.decode(d) ? ie.decode(d) : null,
665 }),
666 },
667 se = {
668 preencode(d, n) {
669 ;(e.uint.preencode(d, n.timestamp),
670 d.end++,
671 n.mailbox && e.fixed32.preencode(d, n.mailbox),
672 n.displayName && e.string.preencode(d, n.displayName),
673 n.avatar && Xr.preencode(d, n.avatar),
674 n.username && e.string.preencode(d, n.username))
675 },
676 encode(d, n) {
677 const o =
678 (n.mailbox ? 1 : 0) | (n.displayName ? 2 : 0) | (n.avatar ? 4 : 0) | (n.username ? 8 : 0)
679 ;(e.uint.encode(d, n.timestamp),
680 e.uint.encode(d, o),
681 n.mailbox && e.fixed32.encode(d, n.mailbox),
682 n.displayName && e.string.encode(d, n.displayName),
683 n.avatar && Xr.encode(d, n.avatar),
684 n.username && e.string.encode(d, n.username))
685 },
686 decode(d) {
687 const n = e.uint.decode(d),
688 o = e.uint.decode(d)
689 return {
690 timestamp: n,
691 mailbox: 1 & o ? e.fixed32.decode(d) : null,
692 displayName: 2 & o ? e.string.decode(d) : null,
693 avatar: 4 & o ? Xr.decode(d) : null,
694 username: 8 & o ? e.string.decode(d) : null,
695 }
696 },
697 },
698 pe = {
699 preencode(d, o) {
700 ;(d.end++,
701 o.swarmKey && e.fixed32.preencode(d, o.swarmKey),
702 o.name && e.string.preencode(d, o.name),
703 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
704 },
705 encode(d, o) {
706 const c =
707 (o.swarmKey ? 1 : 0) |
708 (o.name ? 2 : 0) |
709 (o.isMobile ? 4 : 0) |
710 (n >= 20 && o.buildType ? 8 : 0)
711 ;(e.uint.encode(d, c),
712 o.swarmKey && e.fixed32.encode(d, o.swarmKey),
713 o.name && e.string.encode(d, o.name),
714 n >= 20 && o.buildType && Or.encode(d, o.buildType))
715 },
716 decode(d) {
717 const o = e.uint.decode(d)
718 return {
719 swarmKey: 1 & o ? e.fixed32.decode(d) : null,
720 name: 2 & o ? e.string.decode(d) : null,
721 isMobile: !!(4 & o),
722 buildType: n >= 20 && 8 & o ? Or.decode(d) : null,
723 }
724 },
725 },
726 ue = e.frame(se),
727 le = {
728 preencode(e, d) {
729 ;(ue.preencode(e, d.profile), ce.preencode(e, d.attestation))
730 },
731 encode(e, d) {
732 ;(ue.encode(e, d.profile), ce.encode(e, d.attestation))
733 },
734 decode: (e) => ({ profile: ue.decode(e), attestation: ce.decode(e) }),
735 },
736 fe = {
737 preencode(e, d) {
738 ;(Yr.preencode(e, d.profile), ce.preencode(e, d.attestation))
739 },
740 encode(e, d) {
741 ;(Yr.encode(e, d.profile), ce.encode(e, d.attestation))
742 },
743 decode: (e) => ({ profile: Yr.decode(e), attestation: ce.decode(e) }),
744 },
745 me = {
746 preencode(d, n) {
747 ;(e.fixed32.preencode(d, n.id),
748 e.buffer.preencode(d, n.data),
749 e.buffer.preencode(d, n.signature))
750 },
751 encode(d, n) {
752 ;(e.fixed32.encode(d, n.id), e.buffer.encode(d, n.data), e.buffer.encode(d, n.signature))
753 },
754 decode: (d) => ({
755 id: e.fixed32.decode(d),
756 data: e.buffer.decode(d),
757 signature: e.buffer.decode(d),
758 }),
759 },
760 ye = {
761 preencode(d, n) {
762 e.fixed32.preencode(d, n.devicePublicKey)
763 },
764 encode(d, n) {
765 e.fixed32.encode(d, n.devicePublicKey)
766 },
767 decode: (d) => ({ devicePublicKey: e.fixed32.decode(d) }),
768 },
769 xe = {
770 preencode(d, n) {
771 ;(ce.preencode(d, n.privateProfileIdentity), e.buffer.preencode(d, n.deviceProof))
772 },
773 encode(d, n) {
774 ;(ce.encode(d, n.privateProfileIdentity), e.buffer.encode(d, n.deviceProof))
775 },
776 decode: (d) => ({ privateProfileIdentity: ce.decode(d), deviceProof: e.buffer.decode(d) }),
777 },
778 be = e.frame(fe),
779 ke = e.frame(le),
780 ve = e.frame(ye),
781 ge = {
782 preencode(d, n) {
783 ;(e.fixed32.preencode(d, n.deviceKey),
784 t.preencode(d, n.keyPair),
785 be.preencode(d, n.device),
786 ke.preencode(d, n.member),
787 d.end++,
788 n.identity && ve.preencode(d, n.identity))
789 },
790 encode(d, n) {
791 const o = n.identity ? 1 : 0
792 ;(e.fixed32.encode(d, n.deviceKey),
793 t.encode(d, n.keyPair),
794 be.encode(d, n.device),
795 ke.encode(d, n.member),
796 e.uint.encode(d, o),
797 n.identity && ve.encode(d, n.identity))
798 },
799 decode: (d) => ({
800 deviceKey: e.fixed32.decode(d),
801 keyPair: t.decode(d),
802 device: be.decode(d),
803 member: ke.decode(d),
804 identity: 1 & e.uint.decode(d) ? ve.decode(d) : null,
805 }),
806 },
807 he = e.frame(ge),
808 Ke = {
809 preencode(d, n) {
810 ;(e.fixed32.preencode(d, n.id),
811 he.preencode(d, n.request),
812 e.buffer.preencode(d, n.signature))
813 },
814 encode(d, n) {
815 ;(e.fixed32.encode(d, n.id), he.encode(d, n.request), e.buffer.encode(d, n.signature))
816 },
817 decode: (d) => ({
818 id: e.fixed32.decode(d),
819 request: he.decode(d),
820 signature: e.buffer.decode(d),
821 }),
822 },
823 we = be,
824 Te = ke,
825 Pe = {
826 preencode(e, d) {
827 ;(we.preencode(e, d.device), e.end++, d.member && Te.preencode(e, d.member))
828 },
829 encode(d, n) {
830 const o = n.member ? 1 : 0
831 ;(we.encode(d, n.device), e.uint.encode(d, o), n.member && Te.encode(d, n.member))
832 },
833 decode: (d) => ({ device: we.decode(d), member: 1 & e.uint.decode(d) ? Te.decode(d) : null }),
834 },
835 Ae = e.frame(Ke),
836 Re = e.frame(Pe),
837 De = {
838 preencode(e, d) {
839 ;(e.end++,
840 d.withInvitation && Ae.preencode(e, d.withInvitation),
841 d.withMemberProof && Re.preencode(e, d.withMemberProof))
842 },
843 encode(d, n) {
844 const o = (n.withInvitation ? 1 : 0) | (n.withMemberProof ? 2 : 0)
845 ;(e.uint.encode(d, o),
846 n.withInvitation && Ae.encode(d, n.withInvitation),
847 n.withMemberProof && Re.encode(d, n.withMemberProof))
848 },
849 decode(d) {
850 const n = e.uint.decode(d)
851 return {
852 withInvitation: 1 & n ? Ae.decode(d) : null,
853 withMemberProof: 2 & n ? Re.decode(d) : null,
854 }
855 },
856 },
857 Se = e.frame(me),
858 Ce = e.frame(xe),
859 Me = {
860 preencode(e, d) {
861 ;(Se.preencode(e, d.signedKeys), e.end++, d.identity && Ce.preencode(e, d.identity))
862 },
863 encode(d, n) {
864 const o = n.identity ? 1 : 0
865 ;(Se.encode(d, n.signedKeys), e.uint.encode(d, o), n.identity && Ce.encode(d, n.identity))
866 },
867 decode: (d) => ({
868 signedKeys: Se.decode(d),
869 identity: 1 & e.uint.decode(d) ? Ce.decode(d) : null,
870 }),
871 },
872 Le = {
873 preencode(d, o) {
874 ;(d.end++,
875 o.expiration && e.uint.preencode(d, o.expiration),
876 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
877 },
878 encode(d, o) {
879 const c =
880 (o.expiration ? 1 : 0) |
881 (o.requiresConfirmation ? 2 : 0) |
882 (o.canModerate ? 4 : 0) |
883 (o.canAdmin ? 8 : 0) |
884 (n >= 20 && o.buildType ? 16 : 0)
885 ;(e.uint.encode(d, c),
886 o.expiration && e.uint.encode(d, o.expiration),
887 n >= 20 && o.buildType && Or.encode(d, o.buildType))
888 },
889 decode(d) {
890 const o = e.uint.decode(d)
891 return {
892 expiration: 1 & o ? e.uint.decode(d) : 0,
893 requiresConfirmation: !!(2 & o),
894 canModerate: !!(4 & o),
895 canAdmin: !!(8 & o),
896 buildType: n >= 20 && 16 & o ? Or.decode(d) : null,
897 }
898 },
899 },
900 qe = Se,
901 Fe = e.frame(Le),
902 Ee = {
903 preencode(d, n) {
904 ;(e.fixed32.preencode(d, n.id),
905 qe.preencode(d, n.response),
906 Fe.preencode(d, n.metadata),
907 d.end++,
908 n.anchor && o.preencode(d, n.anchor))
909 },
910 encode(d, n) {
911 const c = (n.anchor ? 1 : 0) | (n.isActive ? 2 : 0)
912 ;(e.fixed32.encode(d, n.id),
913 qe.encode(d, n.response),
914 Fe.encode(d, n.metadata),
915 e.uint.encode(d, c),
916 n.anchor && o.encode(d, n.anchor))
917 },
918 decode(d) {
919 const n = e.fixed32.decode(d),
920 c = qe.decode(d),
921 r = Fe.decode(d),
922 t = e.uint.decode(d)
923 return {
924 id: n,
925 response: c,
926 metadata: r,
927 anchor: 1 & t ? o.decode(d) : null,
928 isActive: !!(2 & t),
929 }
930 },
931 },
932 Be = _,
933 Ie = e.frame(Ee),
934 Ne = {
935 preencode(e, d) {
936 ;(Be.preencode(e, d.header), Ie.preencode(e, d.invitation))
937 },
938 encode(e, d) {
939 ;(Be.encode(e, d.header), Ie.encode(e, d.invitation))
940 },
941 decode: (e) => ({ header: Be.decode(e), invitation: Ie.decode(e) }),
942 },
943 je = _,
944 Oe = {
945 preencode(d, n) {
946 ;(je.preencode(d, n.header), e.fixed32.preencode(d, n.id))
947 },
948 encode(d, n) {
949 ;(je.encode(d, n.header), e.fixed32.encode(d, n.id))
950 },
951 decode: (d) => ({ header: je.decode(d), id: e.fixed32.decode(d) }),
952 },
953 Je = {
954 preencode(d, n) {
955 ;(e.fixed32.preencode(d, n.mailbox),
956 e.fixed32.preencode(d, n.invitationSeed),
957 o.preencode(d, n.anchor))
958 },
959 encode(d, n) {
960 ;(e.fixed32.encode(d, n.mailbox),
961 e.fixed32.encode(d, n.invitationSeed),
962 o.encode(d, n.anchor))
963 },
964 decode: (d) => ({
965 mailbox: e.fixed32.decode(d),
966 invitationSeed: e.fixed32.decode(d),
967 anchor: o.decode(d),
968 }),
969 },
970 Ue = {
971 preencode(d, n) {
972 ;(e.fixed32.preencode(d, n.mailbox),
973 e.fixed32.preencode(d, n.invitationSeed),
974 o.preencode(d, n.anchor),
975 e.fixed32.preencode(d, n.identityPublicKey))
976 },
977 encode(d, n) {
978 ;(e.fixed32.encode(d, n.mailbox),
979 e.fixed32.encode(d, n.invitationSeed),
980 o.encode(d, n.anchor),
981 e.fixed32.encode(d, n.identityPublicKey))
982 },
983 decode: (d) => ({
984 mailbox: e.fixed32.decode(d),
985 invitationSeed: e.fixed32.decode(d),
986 anchor: o.decode(d),
987 identityPublicKey: e.fixed32.decode(d),
988 }),
989 },
990 Ve = {
991 preencode(d, n) {
992 e.fixed32.preencode(d, n.mailbox)
993 },
994 encode(d, n) {
995 e.fixed32.encode(d, n.mailbox)
996 },
997 decode: (d) => ({ mailbox: e.fixed32.decode(d) }),
998 },
999 He = e.frame(Je),
1000 ze = e.frame(Ue),
1001 Ge = e.frame(Ve),
1002 Qe = e.array(e.ipv4Address),
1003 We = {
1004 preencode(e, d) {
1005 ;(e.end++,
1006 d.room && He.preencode(e, d.room),
1007 d.identity && ze.preencode(e, d.identity),
1008 d.contact && Ge.preencode(e, d.contact),
1009 n >= 6 && d.readonly && Zr.preencode(e, d.readonly),
1010 n >= 11 && d.additionalNodes && Qe.preencode(e, d.additionalNodes),
1011 n >= 20 && d.buildType && Or.preencode(e, d.buildType))
1012 },
1013 encode(d, o) {
1014 const c =
1015 (o.room ? 1 : 0) |
1016 (o.identity ? 2 : 0) |
1017 (o.contact ? 4 : 0) |
1018 (n >= 6 && o.readonly ? 8 : 0) |
1019 (n >= 11 && o.additionalNodes ? 16 : 0) |
1020 (n >= 20 && o.buildType ? 32 : 0)
1021 ;(e.uint.encode(d, c),
1022 o.room && He.encode(d, o.room),
1023 o.identity && ze.encode(d, o.identity),
1024 o.contact && Ge.encode(d, o.contact),
1025 n >= 6 && o.readonly && Zr.encode(d, o.readonly),
1026 n >= 11 && o.additionalNodes && Qe.encode(d, o.additionalNodes),
1027 n >= 20 && o.buildType && Or.encode(d, o.buildType))
1028 },
1029 decode(d) {
1030 const o = e.uint.decode(d)
1031 return {
1032 room: 1 & o ? He.decode(d) : null,
1033 identity: 2 & o ? ze.decode(d) : null,
1034 contact: 4 & o ? Ge.decode(d) : null,
1035 readonly: n >= 6 && 8 & o ? Zr.decode(d) : null,
1036 additionalNodes: n >= 11 && 16 & o ? Qe.decode(d) : null,
1037 buildType: n >= 20 && 32 & o ? Or.decode(d) : null,
1038 }
1039 },
1040 },
1041 Xe = _,
1042 Ye = {
1043 preencode(d, n) {
1044 ;(Xe.preencode(d, n.header), e.buffer.preencode(d, n.blindRequest))
1045 },
1046 encode(d, n) {
1047 ;(Xe.encode(d, n.header), e.buffer.encode(d, n.blindRequest))
1048 },
1049 decode: (d) => ({ header: Xe.decode(d), blindRequest: e.buffer.decode(d) }),
1050 },
1051 Ze = _,
1052 $e = {
1053 preencode(e, d) {
1054 ;(Ze.preencode(e, d.header), e.end++, d.profile && $r.preencode(e, d.profile))
1055 },
1056 encode(d, n) {
1057 const o = n.profile ? 1 : 0
1058 ;(Ze.encode(d, n.header), e.uint.encode(d, o), n.profile && $r.encode(d, n.profile))
1059 },
1060 decode: (d) => ({ header: Ze.decode(d), profile: 1 & e.uint.decode(d) ? $r.decode(d) : null }),
1061 },
1062 _e = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({}) },
1063 ed = _e,
1064 dd = he,
1065 nd = {
1066 preencode(d, n) {
1067 ;(e.fixed32.preencode(d, n.deviceKey),
1068 e.fixed32.preencode(d, n.id),
1069 dd.preencode(d, n.request))
1070 },
1071 encode(d, n) {
1072 ;(e.fixed32.encode(d, n.deviceKey), e.fixed32.encode(d, n.id), dd.encode(d, n.request))
1073 },
1074 decode: (d) => ({
1075 deviceKey: e.fixed32.decode(d),
1076 id: e.fixed32.decode(d),
1077 request: dd.decode(d),
1078 }),
1079 },
1080 od = _,
1081 cd = Ce,
1082 rd = {
1083 preencode(d, n) {
1084 ;(od.preencode(d, n.header),
1085 e.fixed32.preencode(d, n.deviceKey),
1086 d.end++,
1087 n.identity && cd.preencode(d, n.identity))
1088 },
1089 encode(d, n) {
1090 const o = n.identity ? 1 : 0
1091 ;(od.encode(d, n.header),
1092 e.fixed32.encode(d, n.deviceKey),
1093 e.uint.encode(d, o),
1094 n.identity && cd.encode(d, n.identity))
1095 },
1096 decode: (d) => ({
1097 header: od.decode(d),
1098 deviceKey: e.fixed32.decode(d),
1099 identity: 1 & e.uint.decode(d) ? cd.decode(d) : null,
1100 }),
1101 },
1102 td = _,
1103 id = {
1104 preencode(d, n) {
1105 ;(td.preencode(d, n.header), e.fixed32.preencode(d, n.deviceKey))
1106 },
1107 encode(d, n) {
1108 ;(td.encode(d, n.header), e.fixed32.encode(d, n.deviceKey))
1109 },
1110 decode: (d) => ({ header: td.decode(d), deviceKey: e.fixed32.decode(d) }),
1111 },
1112 ad = e.frame(C),
1113 sd = ue,
1114 pd = {
1115 preencode(d, n) {
1116 ;(e.fixed32.preencode(d, n.key), ad.preencode(d, n.status), sd.preencode(d, n.profile))
1117 },
1118 encode(d, n) {
1119 ;(e.fixed32.encode(d, n.key), ad.encode(d, n.status), sd.encode(d, n.profile))
1120 },
1121 decode: (d) => ({ key: e.fixed32.decode(d), status: ad.decode(d), profile: sd.decode(d) }),
1122 },
1123 ud = ad,
1124 ld = ue,
1125 fd = {
1126 preencode(d, n) {
1127 ;(e.fixed32.preencode(d, n.key),
1128 ud.preencode(d, n.status),
1129 ld.preencode(d, n.profile),
1130 d.end++,
1131 n.proofs && _r.preencode(d, n.proofs))
1132 },
1133 encode(d, n) {
1134 const o = n.proofs ? 1 : 0
1135 ;(e.fixed32.encode(d, n.key),
1136 ud.encode(d, n.status),
1137 ld.encode(d, n.profile),
1138 e.uint.encode(d, o),
1139 n.proofs && _r.encode(d, n.proofs))
1140 },
1141 decode: (d) => ({
1142 key: e.fixed32.decode(d),
1143 status: ud.decode(d),
1144 profile: ld.decode(d),
1145 proofs: 1 & e.uint.decode(d) ? _r.decode(d) : null,
1146 }),
1147 },
1148 md = {
1149 preencode(d, n) {
1150 ;(e.fixed32.preencode(d, n.key),
1151 d.end++,
1152 n.profileAttestation && e.buffer.preencode(d, n.profileAttestation),
1153 n.latestReceipt && e.buffer.preencode(d, n.latestReceipt))
1154 },
1155 encode(d, n) {
1156 const o = (n.profileAttestation ? 1 : 0) | (n.latestReceipt ? 2 : 0)
1157 ;(e.fixed32.encode(d, n.key),
1158 e.uint.encode(d, o),
1159 n.profileAttestation && e.buffer.encode(d, n.profileAttestation),
1160 n.latestReceipt && e.buffer.encode(d, n.latestReceipt))
1161 },
1162 decode(d) {
1163 const n = e.fixed32.decode(d),
1164 o = e.uint.decode(d)
1165 return {
1166 key: n,
1167 profileAttestation: 1 & o ? e.buffer.decode(d) : null,
1168 latestReceipt: 2 & o ? e.buffer.decode(d) : null,
1169 }
1170 },
1171 },
1172 yd = _,
1173 xd = ke,
1174 bd = {
1175 preencode(e, d) {
1176 ;(yd.preencode(e, d.header), xd.preencode(e, d.member))
1177 },
1178 encode(e, d) {
1179 ;(yd.encode(e, d.header), xd.encode(e, d.member))
1180 },
1181 decode: (e) => ({ header: yd.decode(e), member: xd.decode(e) }),
1182 },
1183 kd = _,
1184 vd = e.frame(M),
1185 gd = {
1186 preencode(d, n) {
1187 ;(kd.preencode(d, n.header),
1188 e.fixed32.preencode(d, n.memberKey),
1189 e.uint.preencode(d, n.key),
1190 vd.preencode(d, n.status))
1191 },
1192 encode(d, n) {
1193 ;(kd.encode(d, n.header),
1194 e.fixed32.encode(d, n.memberKey),
1195 e.uint.encode(d, n.key),
1196 vd.encode(d, n.status))
1197 },
1198 decode: (d) => ({
1199 header: kd.decode(d),
1200 memberKey: e.fixed32.decode(d),
1201 key: e.uint.decode(d),
1202 status: vd.decode(d),
1203 }),
1204 },
1205 hd = _,
1206 Kd = {
1207 preencode(d, n) {
1208 ;(hd.preencode(d, n.header), e.fixed32.preencode(d, n.key), d.end++)
1209 },
1210 encode(d, n) {
1211 const o = (n.isModerator ? 1 : 0) | (n.isAdmin ? 2 : 0)
1212 ;(hd.encode(d, n.header), e.fixed32.encode(d, n.key), e.uint.encode(d, o))
1213 },
1214 decode(d) {
1215 const n = hd.decode(d),
1216 o = e.fixed32.decode(d),
1217 c = e.uint.decode(d)
1218 return { header: n, key: o, isModerator: !!(1 & c), isAdmin: !!(2 & c) }
1219 },
1220 },
1221 wd = _,
1222 Td = {
1223 preencode(d, n) {
1224 ;(wd.preencode(d, n.header), e.fixed32.preencode(d, n.key))
1225 },
1226 encode(d, n) {
1227 ;(wd.encode(d, n.header), e.fixed32.encode(d, n.key))
1228 },
1229 decode: (d) => ({ header: wd.decode(d), key: e.fixed32.decode(d) }),
1230 },
1231 Pd = {
1232 preencode(d, n) {
1233 ;(e.fixed32.preencode(d, n.key), e.uint.preencode(d, n.mentions))
1234 },
1235 encode(d, n) {
1236 ;(e.fixed32.encode(d, n.key), e.uint.encode(d, n.mentions))
1237 },
1238 decode: (d) => ({ key: e.fixed32.decode(d), mentions: e.uint.decode(d) }),
1239 },
1240 Ad = {
1241 preencode(d, n) {
1242 ;(d.end++, n.memberKey && e.fixed32.preencode(d, n.memberKey))
1243 },
1244 encode(d, n) {
1245 const o = n.memberKey ? 1 : 0
1246 ;(e.uint.encode(d, o), n.memberKey && e.fixed32.encode(d, n.memberKey))
1247 },
1248 decode: (d) => ({ memberKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null }),
1249 },
1250 Rd = Ad,
1251 Dd = {
1252 preencode(d, n) {
1253 ;(d.end++, n.from && e.string.preencode(d, n.from), n.to && e.string.preencode(d, n.to))
1254 },
1255 encode(d, n) {
1256 const o = (n.from ? 1 : 0) | (n.to ? 2 : 0)
1257 ;(e.uint.encode(d, o), n.from && e.string.encode(d, n.from), n.to && e.string.encode(d, n.to))
1258 },
1259 decode(d) {
1260 const n = e.uint.decode(d)
1261 return { from: 1 & n ? e.string.decode(d) : null, to: 2 & n ? e.string.decode(d) : null }
1262 },
1263 },
1264 Sd = e.frame(Ad),
1265 Cd = e.frame(Rd),
1266 Md = e.frame(Dd),
1267 Ld = {
1268 preencode(d, o) {
1269 const c =
1270 (o.memberJoined ? 1 : 0) |
1271 (o.memberLeft ? 2 : 0) |
1272 (o.titleChanged ? 4 : 0) |
1273 (o.callStarted ? 8 : 0) |
1274 (o.callHangup ? 16 : 0) |
1275 (o.callMissed ? 32 : 0) |
1276 (n >= 3 && o.roomAvatarChanged ? 64 : 0) |
1277 (n >= 3 && o.invitationCreated ? 128 : 0) |
1278 (n >= 3 && o.memberRemoved ? 256 : 0) |
1279 (n >= 18 && o.locationShared ? 512 : 0)
1280 ;(e.uint.preencode(d, c),
1281 o.memberJoined && Sd.preencode(d, o.memberJoined),
1282 o.memberLeft && Cd.preencode(d, o.memberLeft),
1283 o.titleChanged && Md.preencode(d, o.titleChanged),
1284 n >= 3 && o.memberRemoved && et.preencode(d, o.memberRemoved),
1285 n >= 18 && o.locationShared && dt.preencode(d, o.locationShared))
1286 },
1287 encode(d, o) {
1288 const c =
1289 (o.memberJoined ? 1 : 0) |
1290 (o.memberLeft ? 2 : 0) |
1291 (o.titleChanged ? 4 : 0) |
1292 (o.callStarted ? 8 : 0) |
1293 (o.callHangup ? 16 : 0) |
1294 (o.callMissed ? 32 : 0) |
1295 (n >= 3 && o.roomAvatarChanged ? 64 : 0) |
1296 (n >= 3 && o.invitationCreated ? 128 : 0) |
1297 (n >= 3 && o.memberRemoved ? 256 : 0) |
1298 (n >= 18 && o.locationShared ? 512 : 0)
1299 ;(e.uint.encode(d, c),
1300 o.memberJoined && Sd.encode(d, o.memberJoined),
1301 o.memberLeft && Cd.encode(d, o.memberLeft),
1302 o.titleChanged && Md.encode(d, o.titleChanged),
1303 n >= 3 && o.memberRemoved && et.encode(d, o.memberRemoved),
1304 n >= 18 && o.locationShared && dt.encode(d, o.locationShared))
1305 },
1306 decode(d) {
1307 const o = e.uint.decode(d)
1308 return {
1309 memberJoined: 1 & o ? Sd.decode(d) : null,
1310 memberLeft: 2 & o ? Cd.decode(d) : null,
1311 titleChanged: 4 & o ? Md.decode(d) : null,
1312 callStarted: !!(8 & o),
1313 callHangup: !!(16 & o),
1314 callMissed: !!(32 & o),
1315 roomAvatarChanged: n >= 3 && !!(64 & o),
1316 invitationCreated: n >= 3 && !!(128 & o),
1317 memberRemoved: n >= 3 && 256 & o ? et.decode(d) : null,
1318 locationShared: n >= 18 && 512 & o ? dt.decode(d) : null,
1319 }
1320 },
1321 },
1322 qd = {
1323 preencode(e, d) {
1324 ;(e.end++, n >= 18 && d.locationShared && nt.preencode(e, d.locationShared))
1325 },
1326 encode(d, o) {
1327 const c =
1328 (o.callStarted ? 1 : 0) |
1329 (o.callHangup ? 2 : 0) |
1330 (o.callMissed ? 4 : 0) |
1331 (n >= 18 && o.locationShared ? 8 : 0)
1332 ;(e.uint.encode(d, c), n >= 18 && o.locationShared && nt.encode(d, o.locationShared))
1333 },
1334 decode(d) {
1335 const o = e.uint.decode(d)
1336 return {
1337 callStarted: !!(1 & o),
1338 callHangup: !!(2 & o),
1339 callMissed: !!(4 & o),
1340 locationShared: n >= 18 && 8 & o ? nt.decode(d) : null,
1341 }
1342 },
1343 },
1344 Fd = {
1345 preencode(d, n) {
1346 ;(e.uint.preencode(d, n.start), e.uint.preencode(d, n.length))
1347 },
1348 encode(d, n) {
1349 ;(e.uint.encode(d, n.start), e.uint.encode(d, n.length))
1350 },
1351 decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
1352 },
1353 Ed = e.frame(Fd),
1354 Bd = {
1355 preencode(d, n) {
1356 ;(Ed.preencode(d, n.range), e.string.preencode(d, n.content))
1357 },
1358 encode(d, n) {
1359 ;(Ed.encode(d, n.range), e.string.encode(d, n.content))
1360 },
1361 decode: (d) => ({ range: Ed.decode(d), content: e.string.decode(d) }),
1362 },
1363 Id = Ed,
1364 Nd = {
1365 preencode(d, n) {
1366 ;(Id.preencode(d, n.range), e.fixed32.preencode(d, n.memberKey))
1367 },
1368 encode(d, n) {
1369 ;(Id.encode(d, n.range), e.fixed32.encode(d, n.memberKey))
1370 },
1371 decode: (d) => ({ range: Id.decode(d), memberKey: e.fixed32.decode(d) }),
1372 },
1373 jd = h,
1374 Od = e.array(e.uint),
1375 Jd = {
1376 preencode(d, o) {
1377 ;(d.end++,
1378 o.title && e.string.preencode(d, o.title),
1379 o.description && e.string.preencode(d, o.description),
1380 o.file && jd.preencode(d, o.file),
1381 n >= 7 && o.files && Od.preencode(d, o.files))
1382 },
1383 encode(d, o) {
1384 const c =
1385 (o.title ? 1 : 0) | (o.description ? 2 : 0) | (o.file ? 4 : 0) | (n >= 7 && o.files ? 8 : 0)
1386 ;(e.uint.encode(d, c),
1387 o.title && e.string.encode(d, o.title),
1388 o.description && e.string.encode(d, o.description),
1389 o.file && jd.encode(d, o.file),
1390 n >= 7 && o.files && Od.encode(d, o.files))
1391 },
1392 decode(d) {
1393 const o = e.uint.decode(d)
1394 return {
1395 title: 1 & o ? e.string.decode(d) : null,
1396 description: 2 & o ? e.string.decode(d) : null,
1397 file: 4 & o ? jd.decode(d) : null,
1398 files: n >= 7 && 8 & o ? Od.decode(d) : null,
1399 }
1400 },
1401 },
1402 Ud = Ed,
1403 Vd = e.frame(Jd),
1404 Hd = {
1405 preencode(d, n) {
1406 ;(Ud.preencode(d, n.range),
1407 e.string.preencode(d, n.url),
1408 d.end++,
1409 n.preview && Vd.preencode(d, n.preview))
1410 },
1411 encode(d, n) {
1412 const o = n.preview ? 1 : 0
1413 ;(Ud.encode(d, n.range),
1414 e.string.encode(d, n.url),
1415 e.uint.encode(d, o),
1416 n.preview && Vd.encode(d, n.preview))
1417 },
1418 decode: (d) => ({
1419 range: Ud.decode(d),
1420 url: e.string.decode(d),
1421 preview: 1 & e.uint.decode(d) ? Vd.decode(d) : null,
1422 }),
1423 },
1424 zd = e.array(e.frame(Nd)),
1425 Gd = e.array(e.frame(Hd)),
1426 Qd = Gd,
1427 Wd = e.array(e.frame(Fd)),
1428 Xd = Wd,
1429 Yd = Wd,
1430 Zd = e.array(e.frame(Bd)),
1431 $d = Wd,
1432 _d = Wd,
1433 en = {
1434 preencode(d, o) {
1435 const c =
1436 (o.mention ? 1 : 0) |
1437 (o.httpLink ? 2 : 0) |
1438 (o.pearLink ? 4 : 0) |
1439 (o.bold ? 8 : 0) |
1440 (o.italic ? 16 : 0) |
1441 (o.code ? 32 : 0) |
1442 (o.emoji ? 64 : 0) |
1443 (o.codeBlock ? 128 : 0) |
1444 (o.strike ? 256 : 0) |
1445 (n >= 11 && o.translation ? 512 : 0)
1446 ;(e.uint.preencode(d, c),
1447 o.mention && zd.preencode(d, o.mention),
1448 o.httpLink && Gd.preencode(d, o.httpLink),
1449 o.pearLink && Qd.preencode(d, o.pearLink),
1450 o.bold && Wd.preencode(d, o.bold),
1451 o.italic && Xd.preencode(d, o.italic),
1452 o.code && Yd.preencode(d, o.code),
1453 o.emoji && Zd.preencode(d, o.emoji),
1454 o.codeBlock && $d.preencode(d, o.codeBlock),
1455 o.strike && _d.preencode(d, o.strike),
1456 n >= 11 && o.translation && ot.preencode(d, o.translation))
1457 },
1458 encode(d, o) {
1459 const c =
1460 (o.mention ? 1 : 0) |
1461 (o.httpLink ? 2 : 0) |
1462 (o.pearLink ? 4 : 0) |
1463 (o.bold ? 8 : 0) |
1464 (o.italic ? 16 : 0) |
1465 (o.code ? 32 : 0) |
1466 (o.emoji ? 64 : 0) |
1467 (o.codeBlock ? 128 : 0) |
1468 (o.strike ? 256 : 0) |
1469 (n >= 11 && o.translation ? 512 : 0)
1470 ;(e.uint.encode(d, c),
1471 o.mention && zd.encode(d, o.mention),
1472 o.httpLink && Gd.encode(d, o.httpLink),
1473 o.pearLink && Qd.encode(d, o.pearLink),
1474 o.bold && Wd.encode(d, o.bold),
1475 o.italic && Xd.encode(d, o.italic),
1476 o.code && Yd.encode(d, o.code),
1477 o.emoji && Zd.encode(d, o.emoji),
1478 o.codeBlock && $d.encode(d, o.codeBlock),
1479 o.strike && _d.encode(d, o.strike),
1480 n >= 11 && o.translation && ot.encode(d, o.translation))
1481 },
1482 decode(d) {
1483 const o = e.uint.decode(d)
1484 return {
1485 mention: 1 & o ? zd.decode(d) : null,
1486 httpLink: 2 & o ? Gd.decode(d) : null,
1487 pearLink: 4 & o ? Qd.decode(d) : null,
1488 bold: 8 & o ? Wd.decode(d) : null,
1489 italic: 16 & o ? Xd.decode(d) : null,
1490 code: 32 & o ? Yd.decode(d) : null,
1491 emoji: 64 & o ? Zd.decode(d) : null,
1492 codeBlock: 128 & o ? $d.decode(d) : null,
1493 strike: 256 & o ? _d.decode(d) : null,
1494 translation: n >= 11 && 512 & o ? ot.decode(d) : null,
1495 }
1496 },
1497 },
1498 dn = e.array(e.frame(g)),
1499 nn = e.frame(en),
1500 on = e.frame(qd),
1501 cn = {
1502 preencode(d, n) {
1503 ;(d.end++,
1504 n.text && e.string.preencode(d, n.text),
1505 n.files && dn.preencode(d, n.files),
1506 n.display && nn.preencode(d, n.display),
1507 n.replyTo && c.preencode(d, n.replyTo),
1508 n.parent && c.preencode(d, n.parent),
1509 n.event && on.preencode(d, n.event))
1510 },
1511 encode(d, o) {
1512 const r =
1513 (o.text ? 1 : 0) |
1514 (o.files ? 2 : 0) |
1515 (o.display ? 4 : 0) |
1516 (o.replyTo ? 8 : 0) |
1517 (o.parent ? 16 : 0) |
1518 (o.event ? 32 : 0) |
1519 (n >= 18 && o.forwarded ? 64 : 0)
1520 ;(e.uint.encode(d, r),
1521 o.text && e.string.encode(d, o.text),
1522 o.files && dn.encode(d, o.files),
1523 o.display && nn.encode(d, o.display),
1524 o.replyTo && c.encode(d, o.replyTo),
1525 o.parent && c.encode(d, o.parent),
1526 o.event && on.encode(d, o.event))
1527 },
1528 decode(d) {
1529 const o = e.uint.decode(d)
1530 return {
1531 text: 1 & o ? e.string.decode(d) : null,
1532 files: 2 & o ? dn.decode(d) : null,
1533 display: 4 & o ? nn.decode(d) : null,
1534 replyTo: 8 & o ? c.decode(d) : null,
1535 parent: 16 & o ? c.decode(d) : null,
1536 event: 32 & o ? on.decode(d) : null,
1537 forwarded: n >= 18 && !!(64 & o),
1538 }
1539 },
1540 },
1541 rn = Od,
1542 tn = nn,
1543 an = {
1544 preencode(d, n) {
1545 ;(d.end++,
1546 n.text && e.string.preencode(d, n.text),
1547 n.files && rn.preencode(d, n.files),
1548 n.display && tn.preencode(d, n.display),
1549 n.replyTo && c.preencode(d, n.replyTo),
1550 n.parent && c.preencode(d, n.parent))
1551 },
1552 encode(d, o) {
1553 const r =
1554 (o.text ? 1 : 0) |
1555 (o.files ? 2 : 0) |
1556 (o.display ? 4 : 0) |
1557 (o.replyTo ? 8 : 0) |
1558 (o.parent ? 16 : 0) |
1559 (n >= 18 && o.forwarded ? 32 : 0)
1560 ;(e.uint.encode(d, r),
1561 o.text && e.string.encode(d, o.text),
1562 o.files && rn.encode(d, o.files),
1563 o.display && tn.encode(d, o.display),
1564 o.replyTo && c.encode(d, o.replyTo),
1565 o.parent && c.encode(d, o.parent))
1566 },
1567 decode(d) {
1568 const o = e.uint.decode(d)
1569 return {
1570 text: 1 & o ? e.string.decode(d) : null,
1571 files: 2 & o ? rn.decode(d) : null,
1572 display: 4 & o ? tn.decode(d) : null,
1573 replyTo: 8 & o ? c.decode(d) : null,
1574 parent: 16 & o ? c.decode(d) : null,
1575 forwarded: n >= 18 && !!(32 & o),
1576 }
1577 },
1578 },
1579 sn = dn,
1580 pn = nn,
1581 un = {
1582 preencode(d, n) {
1583 ;(d.end++,
1584 n.text && e.string.preencode(d, n.text),
1585 n.files && sn.preencode(d, n.files),
1586 n.display && pn.preencode(d, n.display),
1587 n.replyTo && c.preencode(d, n.replyTo),
1588 n.parent && c.preencode(d, n.parent))
1589 },
1590 encode(d, o) {
1591 const r =
1592 (o.text ? 1 : 0) |
1593 (o.files ? 2 : 0) |
1594 (o.display ? 4 : 0) |
1595 (o.replyTo ? 8 : 0) |
1596 (o.parent ? 16 : 0) |
1597 (n >= 18 && o.forwarded ? 32 : 0)
1598 ;(e.uint.encode(d, r),
1599 o.text && e.string.encode(d, o.text),
1600 o.files && sn.encode(d, o.files),
1601 o.display && pn.encode(d, o.display),
1602 o.replyTo && c.encode(d, o.replyTo),
1603 o.parent && c.encode(d, o.parent))
1604 },
1605 decode(d) {
1606 const o = e.uint.decode(d)
1607 return {
1608 text: 1 & o ? e.string.decode(d) : null,
1609 files: 2 & o ? sn.decode(d) : null,
1610 display: 4 & o ? pn.decode(d) : null,
1611 replyTo: 8 & o ? c.decode(d) : null,
1612 parent: 16 & o ? c.decode(d) : null,
1613 forwarded: n >= 18 && !!(32 & o),
1614 }
1615 },
1616 },
1617 ln = {
1618 preencode(e, d) {
1619 e.end++
1620 },
1621 encode(d, n) {
1622 const o = (n.isEdited ? 1 : 0) | (n.isDeleted ? 2 : 0) | (n.isPinned ? 4 : 0)
1623 e.uint.encode(d, o)
1624 },
1625 decode(d) {
1626 const n = e.uint.decode(d)
1627 return { isEdited: !!(1 & n), isDeleted: !!(2 & n), isPinned: !!(4 & n) }
1628 },
1629 },
1630 fn = {
1631 preencode(d, n) {
1632 ;(e.uint.preencode(d, n.thread), e.uint.preencode(d, n.index))
1633 },
1634 encode(d, n) {
1635 ;(e.uint.encode(d, n.thread), e.uint.encode(d, n.index))
1636 },
1637 decode: (d) => ({ thread: e.uint.decode(d), index: e.uint.decode(d) }),
1638 },
1639 mn = e.frame(J),
1640 yn = {
1641 preencode(d, n) {
1642 ;(e.uint.preencode(d, n.id),
1643 e.uint.preencode(d, n.count),
1644 d.end++,
1645 n.parent && c.preencode(d, n.parent),
1646 n.stats && mn.preencode(d, n.stats))
1647 },
1648 encode(d, n) {
1649 const o = (n.parent ? 1 : 0) | (n.stats ? 2 : 0)
1650 ;(e.uint.encode(d, n.id),
1651 e.uint.encode(d, n.count),
1652 e.uint.encode(d, o),
1653 n.parent && c.encode(d, n.parent),
1654 n.stats && mn.encode(d, n.stats))
1655 },
1656 decode(d) {
1657 const n = e.uint.decode(d),
1658 o = e.uint.decode(d),
1659 r = e.uint.decode(d)
1660 return {
1661 id: n,
1662 count: o,
1663 parent: 1 & r ? c.decode(d) : null,
1664 stats: 2 & r ? mn.decode(d) : null,
1665 }
1666 },
1667 },
1668 xn = e.frame(ln),
1669 bn = e.frame(an),
1670 kn = e.frame(Ld),
1671 vn = {
1672 preencode(d, n) {
1673 ;(fn.preencode(d, n.id),
1674 c.preencode(d, n.oplog),
1675 e.uint.preencode(d, n.clock),
1676 e.uint.preencode(d, n.timestamp),
1677 d.end++,
1678 n.editedAt && e.uint.preencode(d, n.editedAt),
1679 xn.preencode(d, n.status),
1680 n.message && bn.preencode(d, n.message),
1681 n.event && kn.preencode(d, n.event))
1682 },
1683 encode(d, n) {
1684 const o = (n.editedAt ? 1 : 0) | (n.message ? 2 : 0) | (n.event ? 4 : 0)
1685 ;(fn.encode(d, n.id),
1686 c.encode(d, n.oplog),
1687 e.uint.encode(d, n.clock),
1688 e.uint.encode(d, n.timestamp),
1689 e.uint.encode(d, o),
1690 n.editedAt && e.uint.encode(d, n.editedAt),
1691 xn.encode(d, n.status),
1692 n.message && bn.encode(d, n.message),
1693 n.event && kn.encode(d, n.event))
1694 },
1695 decode(d) {
1696 const n = fn.decode(d),
1697 o = c.decode(d),
1698 r = e.uint.decode(d),
1699 t = e.uint.decode(d),
1700 i = e.uint.decode(d)
1701 return {
1702 id: n,
1703 oplog: o,
1704 clock: r,
1705 timestamp: t,
1706 editedAt: 1 & i ? e.uint.decode(d) : 0,
1707 status: xn.decode(d),
1708 message: 2 & i ? bn.decode(d) : null,
1709 event: 4 & i ? kn.decode(d) : null,
1710 }
1711 },
1712 },
1713 gn = xn,
1714 hn = e.frame(un),
1715 Kn = kn,
1716 wn = {
1717 preencode(d, n) {
1718 ;(fn.preencode(d, n.id),
1719 c.preencode(d, n.oplog),
1720 e.uint.preencode(d, n.clock),
1721 e.uint.preencode(d, n.timestamp),
1722 d.end++,
1723 n.editedAt && e.uint.preencode(d, n.editedAt),
1724 gn.preencode(d, n.status),
1725 n.message && hn.preencode(d, n.message),
1726 n.event && Kn.preencode(d, n.event))
1727 },
1728 encode(d, n) {
1729 const o = (n.editedAt ? 1 : 0) | (n.message ? 2 : 0) | (n.event ? 4 : 0)
1730 ;(fn.encode(d, n.id),
1731 c.encode(d, n.oplog),
1732 e.uint.encode(d, n.clock),
1733 e.uint.encode(d, n.timestamp),
1734 e.uint.encode(d, o),
1735 n.editedAt && e.uint.encode(d, n.editedAt),
1736 gn.encode(d, n.status),
1737 n.message && hn.encode(d, n.message),
1738 n.event && Kn.encode(d, n.event))
1739 },
1740 decode(d) {
1741 const n = fn.decode(d),
1742 o = c.decode(d),
1743 r = e.uint.decode(d),
1744 t = e.uint.decode(d),
1745 i = e.uint.decode(d)
1746 return {
1747 id: n,
1748 oplog: o,
1749 clock: r,
1750 timestamp: t,
1751 editedAt: 1 & i ? e.uint.decode(d) : 0,
1752 status: gn.decode(d),
1753 message: 2 & i ? hn.decode(d) : null,
1754 event: 4 & i ? Kn.decode(d) : null,
1755 }
1756 },
1757 },
1758 Tn = _,
1759 Pn = e.frame(cn),
1760 An = {
1761 preencode(e, d) {
1762 ;(Tn.preencode(e, d.header), Pn.preencode(e, d.message))
1763 },
1764 encode(e, d) {
1765 ;(Tn.encode(e, d.header), Pn.encode(e, d.message))
1766 },
1767 decode: (e) => ({ header: Tn.decode(e), message: Pn.decode(e) }),
1768 },
1769 Rn = _,
1770 Dn = {
1771 preencode(e, d) {
1772 ;(Rn.preencode(e, d.header), c.preencode(e, d.oplog))
1773 },
1774 encode(e, d) {
1775 ;(Rn.encode(e, d.header), c.encode(e, d.oplog))
1776 },
1777 decode: (e) => ({ header: Rn.decode(e), oplog: c.decode(e) }),
1778 },
1779 Sn = _,
1780 Cn = Pn,
1781 Mn = {
1782 preencode(e, d) {
1783 ;(Sn.preencode(e, d.header), c.preencode(e, d.oplog), Cn.preencode(e, d.message))
1784 },
1785 encode(e, d) {
1786 ;(Sn.encode(e, d.header), c.encode(e, d.oplog), Cn.encode(e, d.message))
1787 },
1788 decode: (e) => ({ header: Sn.decode(e), oplog: c.decode(e), message: Cn.decode(e) }),
1789 },
1790 Ln = _,
1791 qn = {
1792 preencode(e, d) {
1793 ;(Ln.preencode(e, d.header), c.preencode(e, d.oplog), e.end++)
1794 },
1795 encode(d, n) {
1796 const o = n.isPinned ? 1 : 0
1797 ;(Ln.encode(d, n.header), c.encode(d, n.oplog), e.uint.encode(d, o))
1798 },
1799 decode: (d) => ({
1800 header: Ln.decode(d),
1801 oplog: c.decode(d),
1802 isPinned: !!(1 & e.uint.decode(d)),
1803 }),
1804 },
1805 Fn = {
1806 preencode(d, n) {
1807 ;(fn.preencode(d, n.id),
1808 e.fixed32.preencode(d, n.sender),
1809 e.uint.preencode(d, n.clock),
1810 e.string.preencode(d, n.reaction))
1811 },
1812 encode(d, n) {
1813 ;(fn.encode(d, n.id),
1814 e.fixed32.encode(d, n.sender),
1815 e.uint.encode(d, n.clock),
1816 e.string.encode(d, n.reaction))
1817 },
1818 decode: (d) => ({
1819 id: fn.decode(d),
1820 sender: e.fixed32.decode(d),
1821 clock: e.uint.decode(d),
1822 reaction: e.string.decode(d),
1823 }),
1824 },
1825 En = {
1826 preencode(d, n) {
1827 ;(e.string.preencode(d, n.text), e.uint.preencode(d, n.count))
1828 },
1829 encode(d, n) {
1830 ;(e.string.encode(d, n.text), e.uint.encode(d, n.count))
1831 },
1832 decode: (d) => ({ text: e.string.decode(d), count: e.uint.decode(d) }),
1833 },
1834 Bn = e.array(e.frame(En)),
1835 In = {
1836 preencode(d, o) {
1837 ;(fn.preencode(d, o.id),
1838 e.uint.preencode(d, o.total),
1839 Bn.preencode(d, o.reactions),
1840 d.end++,
1841 n >= 11 && o.editedAt && e.uint.preencode(d, o.editedAt))
1842 },
1843 encode(d, o) {
1844 const c = n >= 11 && o.editedAt ? 1 : 0
1845 ;(fn.encode(d, o.id),
1846 e.uint.encode(d, o.total),
1847 Bn.encode(d, o.reactions),
1848 e.uint.encode(d, c),
1849 n >= 11 && o.editedAt && e.uint.encode(d, o.editedAt))
1850 },
1851 decode(d) {
1852 const o = fn.decode(d),
1853 c = e.uint.decode(d),
1854 r = Bn.decode(d),
1855 t = d.start < d.end ? e.uint.decode(d) : 0
1856 return { id: o, total: c, reactions: r, editedAt: n >= 11 && 1 & t ? e.uint.decode(d) : 0 }
1857 },
1858 },
1859 Nn = _,
1860 jn = {
1861 preencode(d, n) {
1862 ;(Nn.preencode(d, n.header), c.preencode(d, n.oplog), e.string.preencode(d, n.reaction))
1863 },
1864 encode(d, n) {
1865 ;(Nn.encode(d, n.header), c.encode(d, n.oplog), e.string.encode(d, n.reaction))
1866 },
1867 decode: (d) => ({ header: Nn.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1868 },
1869 On = _,
1870 Jn = {
1871 preencode(d, n) {
1872 ;(On.preencode(d, n.header), c.preencode(d, n.oplog), e.string.preencode(d, n.reaction))
1873 },
1874 encode(d, n) {
1875 ;(On.encode(d, n.header), c.encode(d, n.oplog), e.string.encode(d, n.reaction))
1876 },
1877 decode: (d) => ({ header: On.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1878 },
1879 Un = _,
1880 Vn = e.frame(Z),
1881 Hn = {
1882 preencode(d, n) {
1883 ;(Un.preencode(d, n.header), e.uint.preencode(d, n.key), Vn.preencode(d, n.config))
1884 },
1885 encode(d, n) {
1886 ;(Un.encode(d, n.header), e.uint.encode(d, n.key), Vn.encode(d, n.config))
1887 },
1888 decode: (d) => ({ header: Un.decode(d), key: e.uint.decode(d), config: Vn.decode(d) }),
1889 },
1890 zn = {
1891 preencode(d, n) {
1892 ;(e.fixed32.preencode(d, n.memberKey),
1893 e.string.preencode(d, n.displayName),
1894 d.end++,
1895 n.avatar && ct.preencode(d, n.avatar))
1896 },
1897 encode(d, n) {
1898 const o = n.avatar ? 1 : 0
1899 ;(e.fixed32.encode(d, n.memberKey),
1900 e.string.encode(d, n.displayName),
1901 e.uint.encode(d, o),
1902 n.avatar && ct.encode(d, n.avatar))
1903 },
1904 decode: (d) => ({
1905 memberKey: e.fixed32.decode(d),
1906 displayName: e.string.decode(d),
1907 avatar: 1 & e.uint.decode(d) ? ct.decode(d) : null,
1908 }),
1909 },
1910 Gn = {
1911 preencode(d, n) {
1912 ;(e.fixed32.preencode(d, n.key), d.end++, n.username && e.string.preencode(d, n.username))
1913 },
1914 encode(d, n) {
1915 const o = n.username ? 1 : 0
1916 ;(e.fixed32.encode(d, n.key),
1917 e.uint.encode(d, o),
1918 n.username && e.string.encode(d, n.username))
1919 },
1920 decode: (d) => ({
1921 key: e.fixed32.decode(d),
1922 username: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
1923 }),
1924 },
1925 Qn = e.frame(Gn),
1926 Wn = {
1927 preencode(d, n) {
1928 ;(e.fixed32.preencode(d, n.publicKey),
1929 d.end++,
1930 n.discoveryCoreKey && e.fixed32.preencode(d, n.discoveryCoreKey),
1931 n.userRegistry && Qn.preencode(d, n.userRegistry))
1932 },
1933 encode(d, n) {
1934 const o = (n.discoveryCoreKey ? 1 : 0) | (n.userRegistry ? 2 : 0)
1935 ;(e.fixed32.encode(d, n.publicKey),
1936 e.uint.encode(d, o),
1937 n.discoveryCoreKey && e.fixed32.encode(d, n.discoveryCoreKey),
1938 n.userRegistry && Qn.encode(d, n.userRegistry))
1939 },
1940 decode(d) {
1941 const n = e.fixed32.decode(d),
1942 o = e.uint.decode(d)
1943 return {
1944 publicKey: n,
1945 discoveryCoreKey: 1 & o ? e.fixed32.decode(d) : null,
1946 userRegistry: 2 & o ? Qn.decode(d) : null,
1947 }
1948 },
1949 },
1950 Xn = _,
1951 Yn = e.frame(Q),
1952 Zn = e.frame(W),
1953 $n = Vn,
1954 _n = e.frame(Wn),
1955 eo = be,
1956 no = e.array(e.frame(le)),
1957 oo = {
1958 preencode(e, d) {
1959 ;(Xn.preencode(e, d.header),
1960 Yn.preencode(e, d.digest),
1961 Zn.preencode(e, d.capabilities),
1962 e.end++,
1963 d.config && $n.preencode(e, d.config),
1964 d.identity && _n.preencode(e, d.identity),
1965 d.bootstrapDevice && eo.preencode(e, d.bootstrapDevice),
1966 d.initialMembers && no.preencode(e, d.initialMembers))
1967 },
1968 encode(d, n) {
1969 const o =
1970 (n.config ? 1 : 0) |
1971 (n.identity ? 2 : 0) |
1972 (n.bootstrapDevice ? 4 : 0) |
1973 (n.initialMembers ? 8 : 0)
1974 ;(Xn.encode(d, n.header),
1975 Yn.encode(d, n.digest),
1976 Zn.encode(d, n.capabilities),
1977 e.uint.encode(d, o),
1978 n.config && $n.encode(d, n.config),
1979 n.identity && _n.encode(d, n.identity),
1980 n.bootstrapDevice && eo.encode(d, n.bootstrapDevice),
1981 n.initialMembers && no.encode(d, n.initialMembers))
1982 },
1983 decode(d) {
1984 const n = Xn.decode(d),
1985 o = Yn.decode(d),
1986 c = Zn.decode(d),
1987 r = e.uint.decode(d)
1988 return {
1989 header: n,
1990 digest: o,
1991 capabilities: c,
1992 config: 1 & r ? $n.decode(d) : null,
1993 identity: 2 & r ? _n.decode(d) : null,
1994 bootstrapDevice: 4 & r ? eo.decode(d) : null,
1995 initialMembers: 8 & r ? no.decode(d) : null,
1996 }
1997 },
1998 },
1999 co = _,
2000 ro = {
2001 preencode(d, n) {
2002 ;(co.preencode(d, n.header), e.uint.preencode(d, n.version))
2003 },
2004 encode(d, n) {
2005 ;(co.encode(d, n.header), e.uint.encode(d, n.version))
2006 },
2007 decode: (d) => ({ header: co.decode(d), version: e.uint.decode(d) }),
2008 },
2009 to = _,
2010 io = G,
2011 ao = {
2012 preencode(d, n) {
2013 ;(to.preencode(d, n.header), e.uint.preencode(d, n.key), io.preencode(d, n.settings))
2014 },
2015 encode(d, n) {
2016 ;(to.encode(d, n.header), e.uint.encode(d, n.key), io.encode(d, n.settings))
2017 },
2018 decode: (d) => ({ header: to.decode(d), key: e.uint.decode(d), settings: io.decode(d) }),
2019 },
2020 so = {
2021 preencode(d, n) {
2022 ;(e.fixed32.preencode(d, n.memberKey),
2023 rt.preencode(d, n.status),
2024 d.end++,
2025 n.mailbox && e.fixed32.preencode(d, n.mailbox),
2026 n.roomKey && e.fixed32.preencode(d, n.roomKey))
2027 },
2028 encode(d, n) {
2029 const o = (n.mailbox ? 1 : 0) | (n.roomKey ? 2 : 0)
2030 ;(e.fixed32.encode(d, n.memberKey),
2031 rt.encode(d, n.status),
2032 e.uint.encode(d, o),
2033 n.mailbox && e.fixed32.encode(d, n.mailbox),
2034 n.roomKey && e.fixed32.encode(d, n.roomKey))
2035 },
2036 decode(d) {
2037 const n = e.fixed32.decode(d),
2038 o = rt.decode(d),
2039 c = e.uint.decode(d)
2040 return {
2041 memberKey: n,
2042 status: o,
2043 mailbox: 1 & c ? e.fixed32.decode(d) : null,
2044 roomKey: 2 & c ? e.fixed32.decode(d) : null,
2045 }
2046 },
2047 },
2048 po = {
2049 preencode(d, n) {
2050 ;(e.fixed32.preencode(d, n.roomKey),
2051 e.buffer.preencode(d, n.encryptionKey),
2052 e.fixed32.preencode(d, n.seed),
2053 o.preencode(d, n.initiator),
2054 e.fixed32.preencode(d, n.fastForwardTo))
2055 },
2056 encode(d, n) {
2057 ;(e.fixed32.encode(d, n.roomKey),
2058 e.buffer.encode(d, n.encryptionKey),
2059 e.fixed32.encode(d, n.seed),
2060 o.encode(d, n.initiator),
2061 e.fixed32.encode(d, n.fastForwardTo))
2062 },
2063 decode: (d) => ({
2064 roomKey: e.fixed32.decode(d),
2065 encryptionKey: e.buffer.decode(d),
2066 seed: e.fixed32.decode(d),
2067 initiator: o.decode(d),
2068 fastForwardTo: e.fixed32.decode(d),
2069 }),
2070 },
2071 uo = e.array(e.frame(po)),
2072 lo = Y,
2073 fo = {
2074 preencode(e, d) {
2075 ;(uo.preencode(e, d.sharedRooms), lo.preencode(e, d.blockedContacts))
2076 },
2077 encode(e, d) {
2078 ;(uo.encode(e, d.sharedRooms), lo.encode(e, d.blockedContacts))
2079 },
2080 decode: (e) => ({ sharedRooms: uo.decode(e), blockedContacts: lo.decode(e) }),
2081 },
2082 mo = _n,
2083 yo = {
2084 preencode(e, d) {
2085 mo.preencode(e, d.identity)
2086 },
2087 encode(e, d) {
2088 mo.encode(e, d.identity)
2089 },
2090 decode: (e) => ({ identity: mo.decode(e) }),
2091 },
2092 xo = {
2093 preencode(d, n) {
2094 ;(e.uint.preencode(d, n.rooms), e.uint.preencode(d, n.contacts))
2095 },
2096 encode(d, n) {
2097 ;(e.uint.encode(d, n.rooms), e.uint.encode(d, n.contacts))
2098 },
2099 decode: (d) => ({ rooms: e.uint.decode(d), contacts: e.uint.decode(d) }),
2100 },
2101 bo = {
2102 preencode(d, n) {
2103 ;(e.uint.preencode(d, n.rooms), e.uint.preencode(d, n.contactRequests))
2104 },
2105 encode(d, n) {
2106 ;(e.uint.encode(d, n.rooms), e.uint.encode(d, n.contactRequests))
2107 },
2108 decode: (d) => ({ rooms: e.uint.decode(d), contactRequests: e.uint.decode(d) }),
2109 },
2110 ko = {
2111 preencode(d, n) {
2112 e.buffer.preencode(d, n.entropy)
2113 },
2114 encode(d, n) {
2115 e.buffer.encode(d, n.entropy)
2116 },
2117 decode: (d) => ({ entropy: e.buffer.decode(d) }),
2118 },
2119 vo = {
2120 preencode(d, n) {
2121 ;(e.fixed32.preencode(d, n.publicKey),
2122 e.fixed32.preencode(d, n.devicePublicKey),
2123 e.fixed32.preencode(d, n.writerKey))
2124 },
2125 encode(d, n) {
2126 ;(e.fixed32.encode(d, n.publicKey),
2127 e.fixed32.encode(d, n.devicePublicKey),
2128 e.fixed32.encode(d, n.writerKey))
2129 },
2130 decode: (d) => ({
2131 publicKey: e.fixed32.decode(d),
2132 devicePublicKey: e.fixed32.decode(d),
2133 writerKey: e.fixed32.decode(d),
2134 }),
2135 },
2136 go = e.frame(vo),
2137 ho = {
2138 preencode(d, c) {
2139 ;(e.fixed32.preencode(d, c.id),
2140 e.fixed32.preencode(d, c.invitationSeed),
2141 e.fixed32.preencode(d, c.mailbox),
2142 t.preencode(d, c.responseKeyPair),
2143 o.preencode(d, c.initiator),
2144 o.preencode(d, c.inviter),
2145 d.end++,
2146 c.identity && go.preencode(d, c.identity),
2147 n >= 20 && c.buildType && Or.preencode(d, c.buildType))
2148 },
2149 encode(d, c) {
2150 const r = (c.identity ? 1 : 0) | (n >= 20 && c.buildType ? 2 : 0)
2151 ;(e.fixed32.encode(d, c.id),
2152 e.fixed32.encode(d, c.invitationSeed),
2153 e.fixed32.encode(d, c.mailbox),
2154 t.encode(d, c.responseKeyPair),
2155 o.encode(d, c.initiator),
2156 o.encode(d, c.inviter),
2157 e.uint.encode(d, r),
2158 c.identity && go.encode(d, c.identity),
2159 n >= 20 && c.buildType && Or.encode(d, c.buildType))
2160 },
2161 decode(d) {
2162 const c = e.fixed32.decode(d),
2163 r = e.fixed32.decode(d),
2164 i = e.fixed32.decode(d),
2165 a = t.decode(d),
2166 s = o.decode(d),
2167 p = o.decode(d),
2168 u = e.uint.decode(d)
2169 return {
2170 id: c,
2171 invitationSeed: r,
2172 mailbox: i,
2173 responseKeyPair: a,
2174 initiator: s,
2175 inviter: p,
2176 identity: 1 & u ? go.decode(d) : null,
2177 buildType: n >= 20 && 2 & u ? Or.decode(d) : null,
2178 }
2179 },
2180 },
2181 Ko = _,
2182 wo = {
2183 preencode(d, n) {
2184 ;(Ko.preencode(d, n.header), e.buffer.preencode(d, n.blindResponse))
2185 },
2186 encode(d, n) {
2187 ;(Ko.encode(d, n.header), e.buffer.encode(d, n.blindResponse))
2188 },
2189 decode: (d) => ({ header: Ko.decode(d), blindResponse: e.buffer.decode(d) }),
2190 },
2191 To = _,
2192 Po = e.frame(ho),
2193 Ao = {
2194 preencode(e, d) {
2195 ;(To.preencode(e, d.header), Po.preencode(e, d.invitation))
2196 },
2197 encode(e, d) {
2198 ;(To.encode(e, d.header), Po.encode(e, d.invitation))
2199 },
2200 decode: (e) => ({ header: To.decode(e), invitation: Po.decode(e) }),
2201 },
2202 Ro = _,
2203 Do = {
2204 preencode(d, n) {
2205 ;(Ro.preencode(d, n.header), e.fixed32.preencode(d, n.id))
2206 },
2207 encode(d, n) {
2208 ;(Ro.encode(d, n.header), e.fixed32.encode(d, n.id))
2209 },
2210 decode: (d) => ({ header: Ro.decode(d), id: e.fixed32.decode(d) }),
2211 },
2212 So = {
2213 preencode(d, n) {
2214 ;(e.fixed32.preencode(d, n.publicKey),
2215 e.fixed32.preencode(d, n.devicePublicKey),
2216 d.end++,
2217 n.privateProfileKey && e.fixed32.preencode(d, n.privateProfileKey),
2218 n.deviceKeyPair && t.preencode(d, n.deviceKeyPair),
2219 e.buffer.preencode(d, n.deviceProof))
2220 },
2221 encode(d, n) {
2222 const o = (n.privateProfileKey ? 1 : 0) | (n.deviceKeyPair ? 2 : 0)
2223 ;(e.fixed32.encode(d, n.publicKey),
2224 e.fixed32.encode(d, n.devicePublicKey),
2225 e.uint.encode(d, o),
2226 n.privateProfileKey && e.fixed32.encode(d, n.privateProfileKey),
2227 n.deviceKeyPair && t.encode(d, n.deviceKeyPair),
2228 e.buffer.encode(d, n.deviceProof))
2229 },
2230 decode(d) {
2231 const n = e.fixed32.decode(d),
2232 o = e.fixed32.decode(d),
2233 c = e.uint.decode(d)
2234 return {
2235 publicKey: n,
2236 devicePublicKey: o,
2237 privateProfileKey: 1 & c ? e.fixed32.decode(d) : null,
2238 deviceKeyPair: 2 & c ? t.decode(d) : null,
2239 deviceProof: e.buffer.decode(d),
2240 }
2241 },
2242 },
2243 Co = {
2244 preencode(e, d) {
2245 e.end++
2246 },
2247 encode(d, o) {
2248 const c =
2249 (o.isActive ? 1 : 0) |
2250 (o.isFullyMuted ? 2 : 0) |
2251 (o.isMentionsOnlyMuted ? 4 : 0) |
2252 (n >= 9 && o.isReadOnly ? 8 : 0) |
2253 (n >= 18 && o.isFavorite ? 16 : 0)
2254 e.uint.encode(d, c)
2255 },
2256 decode(d) {
2257 const o = e.uint.decode(d)
2258 return {
2259 isActive: !!(1 & o),
2260 isFullyMuted: !!(2 & o),
2261 isMentionsOnlyMuted: !!(4 & o),
2262 isReadOnly: n >= 9 && !!(8 & o),
2263 isFavorite: n >= 18 && !!(16 & o),
2264 }
2265 },
2266 },
2267 Mo = e.frame(Co),
2268 Lo = e.frame(So),
2269 qo = go,
2270 Fo = {
2271 preencode(d, c) {
2272 ;(e.fixed32.preencode(d, c.roomKey),
2273 e.buffer.preencode(d, c.encryptionKey),
2274 e.fixed32.preencode(d, c.mailbox),
2275 Mo.preencode(d, c.status),
2276 e.uint.preencode(d, c.clock),
2277 d.end++,
2278 c.initiator && o.preencode(d, c.initiator),
2279 c.fastForwardTo && e.fixed32.preencode(d, c.fastForwardTo),
2280 c.identitySwap && Lo.preencode(d, c.identitySwap),
2281 n >= 6 && c.identitySwapV2 && qo.preencode(d, c.identitySwapV2),
2282 n >= 10 && c.contact && e.fixed32.preencode(d, c.contact))
2283 },
2284 encode(d, c) {
2285 const r =
2286 (c.initiator ? 1 : 0) |
2287 (c.fastForwardTo ? 2 : 0) |
2288 (c.identitySwap ? 4 : 0) |
2289 (n >= 6 && c.identitySwapV2 ? 8 : 0) |
2290 (n >= 10 && c.contact ? 16 : 0)
2291 ;(e.fixed32.encode(d, c.roomKey),
2292 e.buffer.encode(d, c.encryptionKey),
2293 e.fixed32.encode(d, c.mailbox),
2294 Mo.encode(d, c.status),
2295 e.uint.encode(d, c.clock),
2296 e.uint.encode(d, r),
2297 c.initiator && o.encode(d, c.initiator),
2298 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2299 c.identitySwap && Lo.encode(d, c.identitySwap),
2300 n >= 6 && c.identitySwapV2 && qo.encode(d, c.identitySwapV2),
2301 n >= 10 && c.contact && e.fixed32.encode(d, c.contact))
2302 },
2303 decode(d) {
2304 const c = e.fixed32.decode(d),
2305 r = e.buffer.decode(d),
2306 t = e.fixed32.decode(d),
2307 i = Mo.decode(d),
2308 a = e.uint.decode(d),
2309 s = e.uint.decode(d)
2310 return {
2311 roomKey: c,
2312 encryptionKey: r,
2313 mailbox: t,
2314 status: i,
2315 clock: a,
2316 initiator: 1 & s ? o.decode(d) : null,
2317 fastForwardTo: 2 & s ? e.fixed32.decode(d) : null,
2318 identitySwap: 4 & s ? Lo.decode(d) : null,
2319 identitySwapV2: n >= 6 && 8 & s ? qo.decode(d) : null,
2320 contact: n >= 10 && 16 & s ? e.fixed32.decode(d) : null,
2321 }
2322 },
2323 },
2324 Eo = _,
2325 Bo = {
2326 preencode(d, n) {
2327 ;(Eo.preencode(d, n.header),
2328 e.fixed32.preencode(d, n.roomKey),
2329 e.buffer.preencode(d, n.encryptionKey),
2330 e.fixed32.preencode(d, n.mailbox),
2331 d.end++,
2332 n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo),
2333 n.initiator && o.preencode(d, n.initiator),
2334 n.dm && e.fixed32.preencode(d, n.dm))
2335 },
2336 encode(d, c) {
2337 const r =
2338 (c.fastForwardTo ? 1 : 0) |
2339 (c.initiator ? 2 : 0) |
2340 (c.dm ? 4 : 0) |
2341 (n >= 9 && c.isReadOnly ? 8 : 0)
2342 ;(Eo.encode(d, c.header),
2343 e.fixed32.encode(d, c.roomKey),
2344 e.buffer.encode(d, c.encryptionKey),
2345 e.fixed32.encode(d, c.mailbox),
2346 e.uint.encode(d, r),
2347 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2348 c.initiator && o.encode(d, c.initiator),
2349 c.dm && e.fixed32.encode(d, c.dm))
2350 },
2351 decode(d) {
2352 const c = Eo.decode(d),
2353 r = e.fixed32.decode(d),
2354 t = e.buffer.decode(d),
2355 i = e.fixed32.decode(d),
2356 a = e.uint.decode(d)
2357 return {
2358 header: c,
2359 roomKey: r,
2360 encryptionKey: t,
2361 mailbox: i,
2362 fastForwardTo: 1 & a ? e.fixed32.decode(d) : null,
2363 initiator: 2 & a ? o.decode(d) : null,
2364 dm: 4 & a ? e.fixed32.decode(d) : null,
2365 isReadOnly: n >= 9 && !!(8 & a),
2366 }
2367 },
2368 },
2369 Io = _,
2370 No = {
2371 preencode(d, n) {
2372 ;(Io.preencode(d, n.header), e.fixed32.preencode(d, n.discoveryKey))
2373 },
2374 encode(d, n) {
2375 ;(Io.encode(d, n.header), e.fixed32.encode(d, n.discoveryKey))
2376 },
2377 decode: (d) => ({ header: Io.decode(d), discoveryKey: e.fixed32.decode(d) }),
2378 },
2379 jo = _,
2380 Oo = Mo,
2381 Jo = {
2382 preencode(d, n) {
2383 ;(jo.preencode(d, n.header),
2384 e.fixed32.preencode(d, n.roomKey),
2385 e.uint.preencode(d, n.key),
2386 Oo.preencode(d, n.status))
2387 },
2388 encode(d, n) {
2389 ;(jo.encode(d, n.header),
2390 e.fixed32.encode(d, n.roomKey),
2391 e.uint.encode(d, n.key),
2392 Oo.encode(d, n.status))
2393 },
2394 decode: (d) => ({
2395 header: jo.decode(d),
2396 roomKey: e.fixed32.decode(d),
2397 key: e.uint.decode(d),
2398 status: Oo.decode(d),
2399 }),
2400 },
2401 Uo = {
2402 preencode(e, d) {
2403 e.end++
2404 },
2405 encode(d, n) {
2406 const o = n.isBlocked ? 1 : 0
2407 e.uint.encode(d, o)
2408 },
2409 decode: (d) => ({ isBlocked: !!(1 & e.uint.decode(d)) }),
2410 },
2411 Vo = {
2412 preencode(d, n) {
2413 ;(e.fixed32.preencode(d, n.memberKey),
2414 e.uint.preencode(d, n.clock),
2415 tt.preencode(d, n.status),
2416 d.end++,
2417 n.mailbox && e.fixed32.preencode(d, n.mailbox),
2418 n.roomKey && e.fixed32.preencode(d, n.roomKey))
2419 },
2420 encode(d, n) {
2421 const o = (n.mailbox ? 1 : 0) | (n.roomKey ? 2 : 0)
2422 ;(e.fixed32.encode(d, n.memberKey),
2423 e.uint.encode(d, n.clock),
2424 tt.encode(d, n.status),
2425 e.uint.encode(d, o),
2426 n.mailbox && e.fixed32.encode(d, n.mailbox),
2427 n.roomKey && e.fixed32.encode(d, n.roomKey))
2428 },
2429 decode(d) {
2430 const n = e.fixed32.decode(d),
2431 o = e.uint.decode(d),
2432 c = tt.decode(d),
2433 r = e.uint.decode(d)
2434 return {
2435 memberKey: n,
2436 clock: o,
2437 status: c,
2438 mailbox: 1 & r ? e.fixed32.decode(d) : null,
2439 roomKey: 2 & r ? e.fixed32.decode(d) : null,
2440 }
2441 },
2442 },
2443 Ho = _,
2444 zo = e.frame(so),
2445 Go = {
2446 preencode(e, d) {
2447 ;(Ho.preencode(e, d.header), zo.preencode(e, d.contact))
2448 },
2449 encode(e, d) {
2450 ;(Ho.encode(e, d.header), zo.encode(e, d.contact))
2451 },
2452 decode: (e) => ({ header: Ho.decode(e), contact: zo.decode(e) }),
2453 },
2454 Qo = _,
2455 Wo = {
2456 preencode(d, n) {
2457 ;(Qo.preencode(d, n.header),
2458 e.fixed32.preencode(d, n.memberKey),
2459 e.uint.preencode(d, n.key),
2460 it.preencode(d, n.status))
2461 },
2462 encode(d, n) {
2463 ;(Qo.encode(d, n.header),
2464 e.fixed32.encode(d, n.memberKey),
2465 e.uint.encode(d, n.key),
2466 it.encode(d, n.status))
2467 },
2468 decode: (d) => ({
2469 header: Qo.decode(d),
2470 memberKey: e.fixed32.decode(d),
2471 key: e.uint.decode(d),
2472 status: it.decode(d),
2473 }),
2474 },
2475 Xo = _,
2476 Yo = {
2477 preencode(d, n) {
2478 ;(Xo.preencode(d, n.header), e.fixed32.preencode(d, n.memberKey))
2479 },
2480 encode(d, n) {
2481 ;(Xo.encode(d, n.header), e.fixed32.encode(d, n.memberKey))
2482 },
2483 decode: (d) => ({ header: Xo.decode(d), memberKey: e.fixed32.decode(d) }),
2484 },
2485 Zo = {
2486 preencode(e, d) {
2487 e.end++
2488 },
2489 encode(d, n) {
2490 const o =
2491 (n.isPending ? 1 : 0) |
2492 (n.isAccepted ? 2 : 0) |
2493 (n.isRejected ? 4 : 0) |
2494 (n.isDiscarded ? 8 : 0) |
2495 (n.isSeen ? 16 : 0)
2496 e.uint.encode(d, o)
2497 },
2498 decode(d) {
2499 const n = e.uint.decode(d)
2500 return {
2501 isPending: !!(1 & n),
2502 isAccepted: !!(2 & n),
2503 isRejected: !!(4 & n),
2504 isDiscarded: !!(8 & n),
2505 isSeen: !!(16 & n),
2506 }
2507 },
2508 },
2509 $o = ke,
2510 _o = e.frame(i),
2511 ec = {
2512 preencode(d, n) {
2513 ;($o.preencode(d, n.sender),
2514 _o.preencode(d, n.keys),
2515 e.fixed32.preencode(d, n.mailbox),
2516 d.end++,
2517 n.message && e.string.preencode(d, n.message))
2518 },
2519 encode(d, n) {
2520 const o = n.message ? 1 : 0
2521 ;($o.encode(d, n.sender),
2522 _o.encode(d, n.keys),
2523 e.fixed32.encode(d, n.mailbox),
2524 e.uint.encode(d, o),
2525 n.message && e.string.encode(d, n.message))
2526 },
2527 decode: (d) => ({
2528 sender: $o.decode(d),
2529 keys: _o.decode(d),
2530 mailbox: e.fixed32.decode(d),
2531 message: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2532 }),
2533 },
2534 dc = e.frame(ec),
2535 nc = {
2536 preencode(e, d) {
2537 ;(dc.preencode(e, d.body), ce.preencode(e, d.attestation))
2538 },
2539 encode(e, d) {
2540 ;(dc.encode(e, d.body), ce.encode(e, d.attestation))
2541 },
2542 decode: (e) => ({ body: dc.decode(e), attestation: ce.decode(e) }),
2543 },
2544 oc = ue,
2545 cc = e.frame(Zo),
2546 rc = _o,
2547 tc = {
2548 preencode(d, o) {
2549 ;(e.fixed32.preencode(d, o.memberKey),
2550 e.uint.preencode(d, o.clock),
2551 oc.preencode(d, o.sender),
2552 cc.preencode(d, o.status),
2553 rc.preencode(d, o.keys),
2554 e.fixed32.preencode(d, o.mailbox),
2555 d.end++,
2556 o.message && e.string.preencode(d, o.message),
2557 n >= 11 && o.sentAt && e.uint.preencode(d, o.sentAt))
2558 },
2559 encode(d, o) {
2560 const c = (o.message ? 1 : 0) | (n >= 11 && o.sentAt ? 2 : 0)
2561 ;(e.fixed32.encode(d, o.memberKey),
2562 e.uint.encode(d, o.clock),
2563 oc.encode(d, o.sender),
2564 cc.encode(d, o.status),
2565 rc.encode(d, o.keys),
2566 e.fixed32.encode(d, o.mailbox),
2567 e.uint.encode(d, c),
2568 o.message && e.string.encode(d, o.message),
2569 n >= 11 && o.sentAt && e.uint.encode(d, o.sentAt))
2570 },
2571 decode(d) {
2572 const o = e.fixed32.decode(d),
2573 c = e.uint.decode(d),
2574 r = oc.decode(d),
2575 t = cc.decode(d),
2576 i = rc.decode(d),
2577 a = e.fixed32.decode(d),
2578 s = e.uint.decode(d)
2579 return {
2580 memberKey: o,
2581 clock: c,
2582 sender: r,
2583 status: t,
2584 keys: i,
2585 mailbox: a,
2586 message: 1 & s ? e.string.decode(d) : null,
2587 sentAt: n >= 11 && 2 & s ? e.uint.decode(d) : 0,
2588 }
2589 },
2590 },
2591 ic = _,
2592 ac = {
2593 preencode(d, n) {
2594 ;(ic.preencode(d, n.header), e.buffer.preencode(d, n.blindRequest))
2595 },
2596 encode(d, n) {
2597 ;(ic.encode(d, n.header), e.buffer.encode(d, n.blindRequest))
2598 },
2599 decode: (d) => ({ header: ic.decode(d), blindRequest: e.buffer.decode(d) }),
2600 },
2601 sc = _,
2602 pc = cc,
2603 uc = {
2604 preencode(d, o) {
2605 ;(sc.preencode(d, o.header),
2606 e.fixed32.preencode(d, o.memberKey),
2607 e.uint.preencode(d, o.key),
2608 pc.preencode(d, o.status),
2609 d.end++,
2610 n >= 10 && o.roomKey && e.fixed32.preencode(d, o.roomKey))
2611 },
2612 encode(d, o) {
2613 const c = n >= 10 && o.roomKey ? 1 : 0
2614 ;(sc.encode(d, o.header),
2615 e.fixed32.encode(d, o.memberKey),
2616 e.uint.encode(d, o.key),
2617 pc.encode(d, o.status),
2618 e.uint.encode(d, c),
2619 n >= 10 && o.roomKey && e.fixed32.encode(d, o.roomKey))
2620 },
2621 decode(d) {
2622 const o = sc.decode(d),
2623 c = e.fixed32.decode(d),
2624 r = e.uint.decode(d),
2625 t = pc.decode(d),
2626 i = d.start < d.end ? e.uint.decode(d) : 0
2627 return {
2628 header: o,
2629 memberKey: c,
2630 key: r,
2631 status: t,
2632 roomKey: n >= 10 && 1 & i ? e.fixed32.decode(d) : null,
2633 }
2634 },
2635 },
2636 lc = {
2637 preencode(d, n) {
2638 ;(e.uint.preencode(d, n.timestamp),
2639 e.fixed32.preencode(d, n.key),
2640 e.fixed32.preencode(d, n.mailbox))
2641 },
2642 encode(d, n) {
2643 ;(e.uint.encode(d, n.timestamp), e.fixed32.encode(d, n.key), e.fixed32.encode(d, n.mailbox))
2644 },
2645 decode: (d) => ({
2646 version: e.uint.decode(d),
2647 timestamp: e.uint.decode(d),
2648 key: e.fixed32.decode(d),
2649 mailbox: e.fixed32.decode(d),
2650 }),
2651 },
2652 fc = {
2653 preencode(d, n) {
2654 switch ((e.uint.preencode(d, n.version), n.version)) {
2655 case 0:
2656 case 1:
2657 lc.preencode(d, n)
2658 break
2659 default:
2660 throw new Error("Unsupported version")
2661 }
2662 },
2663 encode(d, n) {
2664 switch ((e.uint.encode(d, n.version), n.version)) {
2665 case 0:
2666 case 1:
2667 lc.encode(d, n)
2668 break
2669 default:
2670 throw new Error("Unsupported version")
2671 }
2672 },
2673 decode(d) {
2674 const n = d.start,
2675 o = e.uint.decode(d)
2676 switch (((d.start = n), o)) {
2677 case 0:
2678 case 1:
2679 return lc.decode(d)
2680 default:
2681 throw new Error("Unsupported version")
2682 }
2683 },
2684 },
2685 mc = _,
2686 yc = {
2687 preencode(d, o) {
2688 ;(mc.preencode(d, o.header),
2689 c.preencode(d, o.oplog),
2690 e.uint.preencode(d, o.index),
2691 at.preencode(d, o.preview),
2692 d.end++,
2693 n >= 7 && o.displayType && Rc.preencode(d, o.displayType))
2694 },
2695 encode(d, o) {
2696 const r = n >= 7 && o.displayType ? 1 : 0
2697 ;(mc.encode(d, o.header),
2698 c.encode(d, o.oplog),
2699 e.uint.encode(d, o.index),
2700 at.encode(d, o.preview),
2701 e.uint.encode(d, r),
2702 n >= 7 && o.displayType && Rc.encode(d, o.displayType))
2703 },
2704 decode(d) {
2705 const o = mc.decode(d),
2706 r = c.decode(d),
2707 t = e.uint.decode(d),
2708 i = at.decode(d),
2709 a = d.start < d.end ? e.uint.decode(d) : 0
2710 return {
2711 header: o,
2712 oplog: r,
2713 index: t,
2714 preview: i,
2715 displayType: n >= 7 && 1 & a ? Rc.decode(d) : 0,
2716 }
2717 },
2718 },
2719 xc = {
2720 preencode(d, o) {
2721 ;(d.end++, n >= 3 && o.memberKey && e.fixed32.preencode(d, o.memberKey))
2722 },
2723 encode(d, o) {
2724 const c = n >= 3 && o.memberKey ? 1 : 0
2725 ;(e.uint.encode(d, c), n >= 3 && o.memberKey && e.fixed32.encode(d, o.memberKey))
2726 },
2727 decode(d) {
2728 const o = e.uint.decode(d)
2729 return { memberKey: n >= 3 && 1 & o ? e.fixed32.decode(d) : null }
2730 },
2731 },
2732 bc = ue,
2733 kc = {
2734 preencode(e, d) {
2735 ;(bc.preencode(e, d.profile), ce.preencode(e, d.attestation))
2736 },
2737 encode(e, d) {
2738 ;(bc.encode(e, d.profile), ce.encode(e, d.attestation))
2739 },
2740 decode: (e) => ({ profile: bc.decode(e), attestation: ce.decode(e) }),
2741 },
2742 vc = _,
2743 gc = {
2744 preencode(d, n) {
2745 ;(vc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2746 },
2747 encode(d, n) {
2748 ;(vc.encode(d, n.header), e.fixed32.encode(d, n.key))
2749 },
2750 decode: (d) => ({ header: vc.decode(d), key: e.fixed32.decode(d) }),
2751 },
2752 hc = {
2753 preencode(d, n) {
2754 ;(e.fixed32.preencode(d, n.deviceKey),
2755 ce.preencode(d, n.privateProfileIdentity),
2756 e.buffer.preencode(d, n.deviceProof))
2757 },
2758 encode(d, n) {
2759 ;(e.fixed32.encode(d, n.deviceKey),
2760 ce.encode(d, n.privateProfileIdentity),
2761 e.buffer.encode(d, n.deviceProof))
2762 },
2763 decode: (d) => ({
2764 deviceKey: e.fixed32.decode(d),
2765 privateProfileIdentity: ce.decode(d),
2766 deviceProof: e.buffer.decode(d),
2767 }),
2768 },
2769 Kc = {
2770 preencode(d, o) {
2771 ;(e.fixed32.preencode(d, o.roomKey),
2772 e.fixed32.preencode(d, o.encryptionKey),
2773 e.fixed32.preencode(d, o.seed),
2774 d.end++,
2775 n >= 6 && o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
2776 },
2777 encode(d, o) {
2778 const c = n >= 6 && o.fastForwardTo ? 1 : 0
2779 ;(e.fixed32.encode(d, o.roomKey),
2780 e.fixed32.encode(d, o.encryptionKey),
2781 e.fixed32.encode(d, o.seed),
2782 e.uint.encode(d, c),
2783 n >= 6 && o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
2784 },
2785 decode(d) {
2786 const o = e.fixed32.decode(d),
2787 c = e.fixed32.decode(d),
2788 r = e.fixed32.decode(d),
2789 t = e.uint.decode(d)
2790 return {
2791 roomKey: o,
2792 encryptionKey: c,
2793 seed: r,
2794 fastForwardTo: n >= 6 && 1 & t ? e.fixed32.decode(d) : null,
2795 }
2796 },
2797 },
2798 wc = {
2799 preencode(d, o) {
2800 ;(e.fixed32.preencode(d, o.publicKey),
2801 e.fixed32.preencode(d, o.writerKey),
2802 e.fixed32.preencode(d, o.devicePublicKey),
2803 d.end++,
2804 n >= 6 && o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey))
2805 },
2806 encode(d, o) {
2807 const c = n >= 6 && o.privateProfileKey ? 1 : 0
2808 ;(e.fixed32.encode(d, o.publicKey),
2809 e.fixed32.encode(d, o.writerKey),
2810 e.fixed32.encode(d, o.devicePublicKey),
2811 e.uint.encode(d, c),
2812 n >= 6 && o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey))
2813 },
2814 decode(d) {
2815 const o = e.fixed32.decode(d),
2816 c = e.fixed32.decode(d),
2817 r = e.fixed32.decode(d),
2818 t = e.uint.decode(d)
2819 return {
2820 publicKey: o,
2821 writerKey: c,
2822 devicePublicKey: r,
2823 privateProfileKey: n >= 6 && 1 & t ? e.fixed32.decode(d) : null,
2824 }
2825 },
2826 },
2827 Tc = _,
2828 Pc = {
2829 preencode(d, n) {
2830 ;(Tc.preencode(d, n.header), e.fixed32.preencode(d, n.memberKey))
2831 },
2832 encode(d, n) {
2833 ;(Tc.encode(d, n.header), e.fixed32.encode(d, n.memberKey))
2834 },
2835 decode: (d) => ({ header: Tc.decode(d), memberKey: e.fixed32.decode(d) }),
2836 },
2837 Ac = { HttpLink: 1, PearLink: 2 },
2838 Rc = {
2839 preencode(e, d) {
2840 e.end++
2841 },
2842 encode(d, n) {
2843 if (n > 2) throw new Error("Unknown enum")
2844 e.uint.encode(d, n)
2845 },
2846 decode: (d) => e.uint.decode(d),
2847 },
2848 Dc = _,
2849 Sc = {
2850 preencode(d, n) {
2851 ;(Dc.preencode(d, n.header), e.uint.preencode(d, n.value))
2852 },
2853 encode(d, n) {
2854 ;(Dc.encode(d, n.header), e.uint.encode(d, n.value))
2855 },
2856 decode: (d) => ({ header: Dc.decode(d), value: e.uint.decode(d) }),
2857 },
2858 Cc = {
2859 preencode(d, n) {
2860 ;(e.uint.preencode(d, n.key), e.uint.preencode(d, n.value))
2861 },
2862 encode(d, n) {
2863 ;(e.uint.encode(d, n.key), e.uint.encode(d, n.value))
2864 },
2865 decode: (d) => ({ key: e.uint.decode(d), value: e.uint.decode(d) }),
2866 },
2867 Mc = _,
2868 Lc = {
2869 preencode(d, o) {
2870 ;(Mc.preencode(d, o.header),
2871 e.uint.preencode(d, o.from),
2872 e.uint.preencode(d, o.to),
2873 d.end++,
2874 n >= 20 && o.buildType && Or.preencode(d, o.buildType))
2875 },
2876 encode(d, o) {
2877 const c = n >= 20 && o.buildType ? 1 : 0
2878 ;(Mc.encode(d, o.header),
2879 e.uint.encode(d, o.from),
2880 e.uint.encode(d, o.to),
2881 e.uint.encode(d, c),
2882 n >= 20 && o.buildType && Or.encode(d, o.buildType))
2883 },
2884 decode(d) {
2885 const o = Mc.decode(d),
2886 c = e.uint.decode(d),
2887 r = e.uint.decode(d),
2888 t = d.start < d.end ? e.uint.decode(d) : 0
2889 return { header: o, from: c, to: r, buildType: n >= 20 && 1 & t ? Or.decode(d) : null }
2890 },
2891 },
2892 qc = {
2893 RoomType: 1,
2894 IsExperimental: 2,
2895 IsJoiningDisabled: 3,
2896 IsAppendingDisabled: 4,
2897 IsCallingDisabled: 5,
2898 IsMembershipEventsDisabled: 6,
2899 IsAttachmentsDisabled: 7,
2900 IsLinksDisabled: 8,
2901 },
2902 Fc = {
2903 preencode(e, d) {
2904 e.end++
2905 },
2906 encode(d, n) {
2907 if (n > 8) throw new Error("Unknown enum")
2908 e.uint.encode(d, n)
2909 },
2910 decode: (d) => e.uint.decode(d),
2911 },
2912 Ec = { en: "en", it: "it", ru: "ru", es: "es", de: "de" },
2913 Bc = {
2914 preencode(e, d) {
2915 e.end++
2916 },
2917 encode(d, n) {
2918 switch (n) {
2919 case "en":
2920 e.uint.encode(d, 1)
2921 break
2922 case "it":
2923 e.uint.encode(d, 2)
2924 break
2925 case "ru":
2926 e.uint.encode(d, 3)
2927 break
2928 case "es":
2929 e.uint.encode(d, 4)
2930 break
2931 case "de":
2932 e.uint.encode(d, 5)
2933 break
2934 default:
2935 throw new Error("Unknown enum")
2936 }
2937 },
2938 decode(d) {
2939 switch (e.uint.decode(d)) {
2940 case 1:
2941 return "en"
2942 case 2:
2943 return "it"
2944 case 3:
2945 return "ru"
2946 case 4:
2947 return "es"
2948 case 5:
2949 return "de"
2950 default:
2951 return null
2952 }
2953 },
2954 },
2955 Ic = Ed,
2956 Nc = {
2957 preencode(d, n) {
2958 ;(Ic.preencode(d, n.range), Bc.preencode(d, n.language), e.string.preencode(d, n.text))
2959 },
2960 encode(d, n) {
2961 ;(Ic.encode(d, n.range), Bc.encode(d, n.language), e.string.encode(d, n.text))
2962 },
2963 decode: (d) => ({ range: Ic.decode(d), language: Bc.decode(d), text: e.string.decode(d) }),
2964 },
2965 jc = {
2966 preencode(d, n) {
2967 ;(e.fixed32.preencode(d, n.deviceKey), e.fixed32.preencode(d, n.key))
2968 },
2969 encode(d, n) {
2970 ;(e.fixed32.encode(d, n.deviceKey), e.fixed32.encode(d, n.key))
2971 },
2972 decode: (d) => ({ deviceKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
2973 },
2974 Oc = _,
2975 Jc = {
2976 preencode(d, n) {
2977 ;(Oc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2978 },
2979 encode(d, n) {
2980 ;(Oc.encode(d, n.header), e.fixed32.encode(d, n.key))
2981 },
2982 decode: (d) => ({ header: Oc.decode(d), key: e.fixed32.decode(d) }),
2983 },
2984 Uc = _,
2985 Vc = {
2986 preencode(d, n) {
2987 ;(Uc.preencode(d, n.header), e.fixed32.preencode(d, n.key))
2988 },
2989 encode(d, n) {
2990 ;(Uc.encode(d, n.header), e.fixed32.encode(d, n.key))
2991 },
2992 decode: (d) => ({ header: Uc.decode(d), key: e.fixed32.decode(d) }),
2993 },
2994 Hc = { Flag: 1 },
2995 zc = {
2996 preencode(e, d) {
2997 e.end++
2998 },
2999 encode(d, n) {
3000 if (n > 1) throw new Error("Unknown enum")
3001 e.uint.encode(d, n)
3002 },
3003 decode: (d) => e.uint.decode(d),
3004 },
3005 Gc = {
3006 preencode(d, n) {
3007 ;(fn.preencode(d, n.id),
3008 e.fixed32.preencode(d, n.sender),
3009 e.uint.preencode(d, n.clock),
3010 zc.preencode(d, n.label))
3011 },
3012 encode(d, n) {
3013 ;(fn.encode(d, n.id),
3014 e.fixed32.encode(d, n.sender),
3015 e.uint.encode(d, n.clock),
3016 zc.encode(d, n.label))
3017 },
3018 decode: (d) => ({
3019 id: fn.decode(d),
3020 sender: e.fixed32.decode(d),
3021 clock: e.uint.decode(d),
3022 label: zc.decode(d),
3023 }),
3024 },
3025 Qc = _,
3026 Wc = {
3027 preencode(e, d) {
3028 ;(Qc.preencode(e, d.header), c.preencode(e, d.oplog), zc.preencode(e, d.label))
3029 },
3030 encode(e, d) {
3031 ;(Qc.encode(e, d.header), c.encode(e, d.oplog), zc.encode(e, d.label))
3032 },
3033 decode: (e) => ({ header: Qc.decode(e), oplog: c.decode(e), label: zc.decode(e) }),
3034 },
3035 Xc = _,
3036 Yc = {
3037 preencode(e, d) {
3038 ;(Xc.preencode(e, d.header), c.preencode(e, d.oplog), zc.preencode(e, d.label))
3039 },
3040 encode(e, d) {
3041 ;(Xc.encode(e, d.header), c.encode(e, d.oplog), zc.encode(e, d.label))
3042 },
3043 decode: (e) => ({ header: Xc.decode(e), oplog: c.decode(e), label: zc.decode(e) }),
3044 },
3045 Zc = {
3046 preencode(d, n) {
3047 ;(zc.preencode(d, n.label), e.uint.preencode(d, n.count))
3048 },
3049 encode(d, n) {
3050 ;(zc.encode(d, n.label), e.uint.encode(d, n.count))
3051 },
3052 decode: (d) => ({ label: zc.decode(d), count: e.uint.decode(d) }),
3053 },
3054 $c = e.array(e.frame(Zc)),
3055 _c = {
3056 preencode(d, o) {
3057 ;(fn.preencode(d, o.id),
3058 e.uint.preencode(d, o.total),
3059 $c.preencode(d, o.labels),
3060 e.uint.preencode(d, o.editedAt),
3061 d.end++,
3062 n >= 15 && o.flagsClock && e.uint.preencode(d, o.flagsClock),
3063 n >= 15 && o.version && e.uint.preencode(d, o.version))
3064 },
3065 encode(d, o) {
3066 const c =
3067 (n >= 15 && o.flagsClock ? 1 : 0) |
3068 (n >= 15 && o.version ? 2 : 0) |
3069 (n >= 16 && o.isDeleted ? 4 : 0)
3070 ;(fn.encode(d, o.id),
3071 e.uint.encode(d, o.total),
3072 $c.encode(d, o.labels),
3073 e.uint.encode(d, o.editedAt),
3074 e.uint.encode(d, c),
3075 n >= 15 && o.flagsClock && e.uint.encode(d, o.flagsClock),
3076 n >= 15 && o.version && e.uint.encode(d, o.version))
3077 },
3078 decode(d) {
3079 const o = fn.decode(d),
3080 c = e.uint.decode(d),
3081 r = $c.decode(d),
3082 t = e.uint.decode(d),
3083 i = d.start < d.end ? e.uint.decode(d) : 0
3084 return {
3085 id: o,
3086 total: c,
3087 labels: r,
3088 editedAt: t,
3089 flagsClock: n >= 15 && 1 & i ? e.uint.decode(d) : 0,
3090 version: n >= 15 && 2 & i ? e.uint.decode(d) : 0,
3091 isDeleted: n >= 16 && !!(4 & i),
3092 }
3093 },
3094 },
3095 er = _,
3096 dr = {
3097 preencode(d, n) {
3098 ;(er.preencode(d, n.header), e.uint.preencode(d, n.length))
3099 },
3100 encode(d, n) {
3101 ;(er.encode(d, n.header), e.uint.encode(d, n.length))
3102 },
3103 decode: (d) => ({ header: er.decode(d), length: e.uint.decode(d) }),
3104 },
3105 nr = {
3106 preencode(d, n) {
3107 ;(e.fixed32.preencode(d, n.memberKey), e.uint.preencode(d, n.length))
3108 },
3109 encode(d, n) {
3110 ;(e.fixed32.encode(d, n.memberKey), e.uint.encode(d, n.length))
3111 },
3112 decode: (d) => ({ memberKey: e.fixed32.decode(d), length: e.uint.decode(d) }),
3113 },
3114 or = $,
3115 cr = {
3116 preencode(e, d) {
3117 e.end++
3118 },
3119 encode(d, o) {
3120 const c = n >= 13 && o.disableReadReceipts ? 1 : 0
3121 e.uint.encode(d, c)
3122 },
3123 decode(d) {
3124 const o = e.uint.decode(d)
3125 return { disableReadReceipts: n >= 13 && !!(1 & o) }
3126 },
3127 },
3128 rr = { disableReadReceipts: "disableReadReceipts" },
3129 tr = {
3130 preencode(e, d) {
3131 e.end++
3132 },
3133 encode(d, n) {
3134 if ("disableReadReceipts" !== n) throw new Error("Unknown enum")
3135 e.uint.encode(d, 1)
3136 },
3137 decode: (d) => (1 === e.uint.decode(d) ? "disableReadReceipts" : null),
3138 },
3139 ir = _,
3140 ar = e.frame(cr),
3141 sr = {
3142 preencode(e, d) {
3143 ;(ir.preencode(e, d.header), tr.preencode(e, d.key), ar.preencode(e, d.settings))
3144 },
3145 encode(e, d) {
3146 ;(ir.encode(e, d.header), tr.encode(e, d.key), ar.encode(e, d.settings))
3147 },
3148 decode: (e) => ({ header: ir.decode(e), key: tr.decode(e), settings: ar.decode(e) }),
3149 },
3150 pr = { Flag: 1 },
3151 ur = {
3152 preencode(e, d) {
3153 e.end++
3154 },
3155 encode(d, n) {
3156 if (n > 1) throw new Error("Unknown enum")
3157 e.uint.encode(d, n)
3158 },
3159 decode: (d) => e.uint.decode(d),
3160 },
3161 lr = {
3162 preencode(d, n) {
3163 ;(e.fixed32.preencode(d, n.key),
3164 e.fixed32.preencode(d, n.sender),
3165 e.uint.preencode(d, n.clock),
3166 ur.preencode(d, n.label))
3167 },
3168 encode(d, n) {
3169 ;(e.fixed32.encode(d, n.key),
3170 e.fixed32.encode(d, n.sender),
3171 e.uint.encode(d, n.clock),
3172 ur.encode(d, n.label))
3173 },
3174 decode: (d) => ({
3175 key: e.fixed32.decode(d),
3176 sender: e.fixed32.decode(d),
3177 clock: e.uint.decode(d),
3178 label: ur.decode(d),
3179 }),
3180 },
3181 fr = _,
3182 mr = {
3183 preencode(d, n) {
3184 ;(fr.preencode(d, n.header), e.fixed32.preencode(d, n.key), ur.preencode(d, n.label))
3185 },
3186 encode(d, n) {
3187 ;(fr.encode(d, n.header), e.fixed32.encode(d, n.key), ur.encode(d, n.label))
3188 },
3189 decode: (d) => ({ header: fr.decode(d), key: e.fixed32.decode(d), label: ur.decode(d) }),
3190 },
3191 yr = {
3192 preencode(d, n) {
3193 ;(ur.preencode(d, n.label), e.uint.preencode(d, n.count))
3194 },
3195 encode(d, n) {
3196 ;(ur.encode(d, n.label), e.uint.encode(d, n.count))
3197 },
3198 decode: (d) => ({ label: ur.decode(d), count: e.uint.decode(d) }),
3199 },
3200 xr = e.array(e.frame(yr)),
3201 br = {
3202 preencode(d, n) {
3203 ;(e.fixed32.preencode(d, n.key),
3204 e.uint.preencode(d, n.total),
3205 xr.preencode(d, n.labels),
3206 e.uint.preencode(d, n.editedAt),
3207 e.uint.preencode(d, n.flagsClock))
3208 },
3209 encode(d, n) {
3210 ;(e.fixed32.encode(d, n.key),
3211 e.uint.encode(d, n.total),
3212 xr.encode(d, n.labels),
3213 e.uint.encode(d, n.editedAt),
3214 e.uint.encode(d, n.flagsClock))
3215 },
3216 decode: (d) => ({
3217 key: e.fixed32.decode(d),
3218 total: e.uint.decode(d),
3219 labels: xr.decode(d),
3220 editedAt: e.uint.decode(d),
3221 flagsClock: e.uint.decode(d),
3222 }),
3223 },
3224 kr = {
3225 preencode(d, n) {
3226 ;(e.float64.preencode(d, n.latitude), e.float64.preencode(d, n.longitude))
3227 },
3228 encode(d, n) {
3229 ;(e.float64.encode(d, n.latitude), e.float64.encode(d, n.longitude))
3230 },
3231 decode: (d) => ({ latitude: e.float64.decode(d), longitude: e.float64.decode(d) }),
3232 },
3233 vr = _,
3234 gr = {
3235 preencode(d, n) {
3236 ;(vr.preencode(d, n.header),
3237 e.fixed32.preencode(d, n.deviceKey),
3238 e.fixed32.preencode(d, n.fromDeviceKey))
3239 },
3240 encode(d, n) {
3241 ;(vr.encode(d, n.header),
3242 e.fixed32.encode(d, n.deviceKey),
3243 e.fixed32.encode(d, n.fromDeviceKey))
3244 },
3245 decode: (d) => ({
3246 header: vr.decode(d),
3247 deviceKey: e.fixed32.decode(d),
3248 fromDeviceKey: e.fixed32.decode(d),
3249 }),
3250 },
3251 hr = _,
3252 Kr = Y,
3253 wr = {
3254 preencode(d, o) {
3255 ;(hr.preencode(d, o.header),
3256 e.fixed32.preencode(d, o.callKey),
3257 e.buffer.preencode(d, o.encryptionKey),
3258 d.end++,
3259 n >= 19 && o.streams && Kr.preencode(d, o.streams),
3260 n >= 19 && o.discoveryKey && e.fixed32.preencode(d, o.discoveryKey),
3261 n >= 19 && o.version && e.uint.preencode(d, o.version))
3262 },
3263 encode(d, o) {
3264 const c =
3265 (n >= 19 && o.streams ? 1 : 0) |
3266 (n >= 19 && o.discoveryKey ? 2 : 0) |
3267 (n >= 19 && o.version ? 4 : 0)
3268 ;(hr.encode(d, o.header),
3269 e.fixed32.encode(d, o.callKey),
3270 e.buffer.encode(d, o.encryptionKey),
3271 e.uint.encode(d, c),
3272 n >= 19 && o.streams && Kr.encode(d, o.streams),
3273 n >= 19 && o.discoveryKey && e.fixed32.encode(d, o.discoveryKey),
3274 n >= 19 && o.version && e.uint.encode(d, o.version))
3275 },
3276 decode(d) {
3277 const o = hr.decode(d),
3278 c = e.fixed32.decode(d),
3279 r = e.buffer.decode(d),
3280 t = e.uint.decode(d)
3281 return {
3282 header: o,
3283 callKey: c,
3284 encryptionKey: r,
3285 streams: n >= 19 && 1 & t ? Kr.decode(d) : null,
3286 discoveryKey: n >= 19 && 2 & t ? e.fixed32.decode(d) : null,
3287 version: n >= 19 && 4 & t ? e.uint.decode(d) : 0,
3288 }
3289 },
3290 },
3291 Tr = _,
3292 Pr = Y,
3293 Ar = {
3294 preencode(d, o) {
3295 ;(Tr.preencode(d, o.header),
3296 e.fixed32.preencode(d, o.callKey),
3297 d.end++,
3298 n >= 19 && o.streams && Pr.preencode(d, o.streams))
3299 },
3300 encode(d, o) {
3301 const c = n >= 19 && o.streams ? 1 : 0
3302 ;(Tr.encode(d, o.header),
3303 e.fixed32.encode(d, o.callKey),
3304 e.uint.encode(d, c),
3305 n >= 19 && o.streams && Pr.encode(d, o.streams))
3306 },
3307 decode(d) {
3308 const o = Tr.decode(d),
3309 c = e.fixed32.decode(d),
3310 r = e.uint.decode(d)
3311 return { header: o, callKey: c, streams: n >= 19 && 1 & r ? Pr.decode(d) : null }
3312 },
3313 },
3314 Rr = _,
3315 Dr = {
3316 preencode(d, n) {
3317 ;(Rr.preencode(d, n.header), e.fixed32.preencode(d, n.callKey))
3318 },
3319 encode(d, n) {
3320 ;(Rr.encode(d, n.header), e.fixed32.encode(d, n.callKey))
3321 },
3322 decode: (d) => ({ header: Rr.decode(d), callKey: e.fixed32.decode(d) }),
3323 },
3324 Sr = _,
3325 Cr = {
3326 preencode(d, n) {
3327 ;(Sr.preencode(d, n.header), e.fixed32.preencode(d, n.callKey))
3328 },
3329 encode(d, n) {
3330 ;(Sr.encode(d, n.header), e.fixed32.encode(d, n.callKey))
3331 },
3332 decode: (d) => ({ header: Sr.decode(d), callKey: e.fixed32.decode(d) }),
3333 },
3334 Mr = _,
3335 Lr = {
3336 preencode(d, n) {
3337 ;(Mr.preencode(d, n.header),
3338 e.fixed32.preencode(d, n.callKey),
3339 e.fixed32.preencode(d, n.streamKey))
3340 },
3341 encode(d, n) {
3342 ;(Mr.encode(d, n.header), e.fixed32.encode(d, n.callKey), e.fixed32.encode(d, n.streamKey))
3343 },
3344 decode: (d) => ({
3345 header: Mr.decode(d),
3346 callKey: e.fixed32.decode(d),
3347 streamKey: e.fixed32.decode(d),
3348 }),
3349 },
3350 qr = _,
3351 Fr = {
3352 preencode(d, n) {
3353 ;(qr.preencode(d, n.header),
3354 e.fixed32.preencode(d, n.callKey),
3355 e.fixed32.preencode(d, n.streamKey))
3356 },
3357 encode(d, n) {
3358 ;(qr.encode(d, n.header), e.fixed32.encode(d, n.callKey), e.fixed32.encode(d, n.streamKey))
3359 },
3360 decode: (d) => ({
3361 header: qr.decode(d),
3362 callKey: e.fixed32.decode(d),
3363 streamKey: e.fixed32.decode(d),
3364 }),
3365 },
3366 Er = {
3367 preencode(d, o) {
3368 ;(e.fixed32.preencode(d, o.callKey),
3369 e.buffer.preencode(d, o.encryptionKey),
3370 e.uint.preencode(d, o.createdAt),
3371 d.end++,
3372 n >= 19 && o.endedAt && e.uint.preencode(d, o.endedAt),
3373 n >= 19 && o.discoveryKey && e.fixed32.preencode(d, o.discoveryKey),
3374 n >= 19 && o.version && e.uint.preencode(d, o.version))
3375 },
3376 encode(d, o) {
3377 const c =
3378 (n >= 19 && o.endedAt ? 1 : 0) |
3379 (n >= 19 && o.discoveryKey ? 2 : 0) |
3380 (n >= 19 && o.version ? 4 : 0)
3381 ;(e.fixed32.encode(d, o.callKey),
3382 e.buffer.encode(d, o.encryptionKey),
3383 e.uint.encode(d, o.createdAt),
3384 e.uint.encode(d, c),
3385 n >= 19 && o.endedAt && e.uint.encode(d, o.endedAt),
3386 n >= 19 && o.discoveryKey && e.fixed32.encode(d, o.discoveryKey),
3387 n >= 19 && o.version && e.uint.encode(d, o.version))
3388 },
3389 decode(d) {
3390 const o = e.fixed32.decode(d),
3391 c = e.buffer.decode(d),
3392 r = e.uint.decode(d),
3393 t = e.uint.decode(d)
3394 return {
3395 callKey: o,
3396 encryptionKey: c,
3397 createdAt: r,
3398 endedAt: n >= 19 && 1 & t ? e.uint.decode(d) : 0,
3399 discoveryKey: n >= 19 && 2 & t ? e.fixed32.decode(d) : null,
3400 version: n >= 19 && 4 & t ? e.uint.decode(d) : 0,
3401 }
3402 },
3403 },
3404 Br = {
3405 preencode(d, n) {
3406 ;(e.fixed32.preencode(d, n.callKey),
3407 e.fixed32.preencode(d, n.memberKey),
3408 e.uint.preencode(d, n.createdAt))
3409 },
3410 encode(d, n) {
3411 ;(e.fixed32.encode(d, n.callKey),
3412 e.fixed32.encode(d, n.memberKey),
3413 e.uint.encode(d, n.createdAt))
3414 },
3415 decode: (d) => ({
3416 callKey: e.fixed32.decode(d),
3417 memberKey: e.fixed32.decode(d),
3418 createdAt: e.uint.decode(d),
3419 }),
3420 },
3421 Ir = {
3422 preencode(d, o) {
3423 ;(e.fixed32.preencode(d, o.callKey),
3424 e.fixed32.preencode(d, o.deviceKey),
3425 e.fixed32.preencode(d, o.memberKey),
3426 e.uint.preencode(d, o.createdAt),
3427 d.end++,
3428 n >= 19 && o.swarmKey && e.fixed32.preencode(d, o.swarmKey))
3429 },
3430 encode(d, o) {
3431 const c = n >= 19 && o.swarmKey ? 1 : 0
3432 ;(e.fixed32.encode(d, o.callKey),
3433 e.fixed32.encode(d, o.deviceKey),
3434 e.fixed32.encode(d, o.memberKey),
3435 e.uint.encode(d, o.createdAt),
3436 e.uint.encode(d, c),
3437 n >= 19 && o.swarmKey && e.fixed32.encode(d, o.swarmKey))
3438 },
3439 decode(d) {
3440 const o = e.fixed32.decode(d),
3441 c = e.fixed32.decode(d),
3442 r = e.fixed32.decode(d),
3443 t = e.uint.decode(d),
3444 i = e.uint.decode(d)
3445 return {
3446 callKey: o,
3447 deviceKey: c,
3448 memberKey: r,
3449 createdAt: t,
3450 swarmKey: n >= 19 && 1 & i ? e.fixed32.decode(d) : null,
3451 }
3452 },
3453 },
3454 Nr = {
3455 preencode(d, n) {
3456 ;(e.fixed32.preencode(d, n.callKey),
3457 e.fixed32.preencode(d, n.deviceKey),
3458 e.buffer.preencode(d, n.streamKey),
3459 e.uint.preencode(d, n.createdAt))
3460 },
3461 encode(d, n) {
3462 ;(e.fixed32.encode(d, n.callKey),
3463 e.fixed32.encode(d, n.deviceKey),
3464 e.buffer.encode(d, n.streamKey),
3465 e.uint.encode(d, n.createdAt))
3466 },
3467 decode: (d) => ({
3468 callKey: e.fixed32.decode(d),
3469 deviceKey: e.fixed32.decode(d),
3470 streamKey: e.buffer.decode(d),
3471 createdAt: e.uint.decode(d),
3472 }),
3473 },
3474 jr = { Nightly: "Nightly", Internal: "Internal", Production: "Production" },
3475 Or = {
3476 preencode(e, d) {
3477 e.end++
3478 },
3479 encode(d, n) {
3480 switch (n) {
3481 case "Nightly":
3482 e.uint.encode(d, 1)
3483 break
3484 case "Internal":
3485 e.uint.encode(d, 2)
3486 break
3487 case "Production":
3488 e.uint.encode(d, 3)
3489 break
3490 default:
3491 throw new Error("Unknown enum")
3492 }
3493 },
3494 decode(d) {
3495 switch (e.uint.decode(d)) {
3496 case 1:
3497 return "Nightly"
3498 case 2:
3499 return "Internal"
3500 case 3:
3501 return "Production"
3502 default:
3503 return null
3504 }
3505 },
3506 },
3507 Jr = _,
3508 Ur = {
3509 preencode(e, d) {
3510 Jr.preencode(e, d.header)
3511 },
3512 encode(e, d) {
3513 Jr.encode(e, d.header)
3514 },
3515 decode: (e) => ({ header: Jr.decode(e) }),
3516 },
3517 Vr = _,
3518 Hr = {
3519 preencode(e, d) {
3520 Vr.preencode(e, d.header)
3521 },
3522 encode(e, d) {
3523 Vr.encode(e, d.header)
3524 },
3525 decode: (e) => ({ header: Vr.decode(e) }),
3526 },
3527 zr = e.frame(T),
3528 Gr = zr,
3529 Qr = e.array(Bc),
3530 Wr = e.frame(pe),
3531 Xr = zr,
3532 Yr = Wr,
3533 Zr = e.frame(Kc),
3534 $r = Wr,
3535 _r = e.frame(md),
3536 et = e.frame(xc),
3537 dt = e.frame(kr),
3538 nt = dt,
3539 ot = e.array(e.frame(Nc)),
3540 ct = zr,
3541 rt = e.frame(Uo),
3542 tt = rt,
3543 it = rt,
3544 at = zr
3545function st(e) {
3546 n = e
3547}
3548function pt(d, o, c = 20) {
3549 return ((n = c), e.encode(ft(d), o))
3550}
3551function ut(d, o, c = 20) {
3552 return ((n = c), e.decode(ft(d), o))
3553}
3554function lt(e) {
3555 switch (e) {
3556 case "@keet/room-type":
3557 return U
3558 case "@keet/display-type":
3559 return Ac
3560 case "@keet/system-settings-keys":
3561 return qc
3562 case "@keet/room-supported-language":
3563 return Ec
3564 case "@keet/label-type":
3565 return Hc
3566 case "@keet-private-id/user-settings-key":
3567 return rr
3568 case "@keet/member-label-type":
3569 return pr
3570 case "@keet/build-type":
3571 return jr
3572 default:
3573 throw new Error("Enum not found " + e)
3574 }
3575}
3576function ft(e) {
3577 switch (e) {
3578 case "@keet/head":
3579 return o
3580 case "@keet/oplog-id":
3581 return c
3582 case "@keet/encryption-keypair":
3583 return r
3584 case "@keet/signing-keypair":
3585 return t
3586 case "@keet/room-keys":
3587 return i
3588 case "@keet/operation-header":
3589 return a
3590 case "@keet/blob-pointer":
3591 return s
3592 case "@keet/file-dimensions":
3593 return p
3594 case "@keet/file-metadata":
3595 return l
3596 case "@keet/external-drive-pointer":
3597 return f
3598 case "@keet/external-blob-pointer":
3599 return m
3600 case "@keet/file-pointer":
3601 return b
3602 case "@keet/file":
3603 return g
3604 case "@keet/image-file":
3605 return T
3606 case "@keet/file-status":
3607 return P
3608 case "@keet/file-record":
3609 return D
3610 case "@keet/device-status":
3611 return S
3612 case "@keet/member-status":
3613 return C
3614 case "@keet/member-moderation-status":
3615 return M
3616 case "@keet/abi":
3617 return L
3618 case "@keet/device-stats":
3619 return q
3620 case "@keet/member-stats":
3621 return F
3622 case "@keet/chat-stats":
3623 return E
3624 case "@keet/file-stats":
3625 return B
3626 case "@keet/stats":
3627 return J
3628 case "@keet/room-type":
3629 return V
3630 case "@keet/system-settings":
3631 return H
3632 case "@keet/system-digest":
3633 return Q
3634 case "@keet/room-seed":
3635 return W
3636 case "@keet/room-capabilities":
3637 return X
3638 case "@keet/room-config":
3639 return Z
3640 case "@keet/blind-peer":
3641 return $
3642 case "@keet/add-blind-peer-operation":
3643 return de
3644 case "@keet/remove-blind-peer-operation":
3645 return oe
3646 case "@keet/identity-attestation":
3647 return ce
3648 case "@keet/device-invitation":
3649 return re
3650 case "@keet/device":
3651 return ae
3652 case "@keet/member-profile":
3653 return se
3654 case "@keet/device-profile":
3655 return pe
3656 case "@keet/member-update":
3657 return le
3658 case "@keet/device-update":
3659 return fe
3660 case "@keet/signed-pairing-data":
3661 return me
3662 case "@keet/device-request-identity":
3663 return ye
3664 case "@keet/device-response-identity":
3665 return xe
3666 case "@keet/device-request-with-invitation":
3667 return ge
3668 case "@keet/device-request-with-invitation-and-proof":
3669 return Ke
3670 case "@keet/device-request-with-member-proof":
3671 return Pe
3672 case "@keet/device-request":
3673 return De
3674 case "@keet/device-response":
3675 return Me
3676 case "@keet/invitation-metadata":
3677 return Le
3678 case "@keet/invitation":
3679 return Ee
3680 case "@keet/add-invitation-operation":
3681 return Ne
3682 case "@keet/remove-invitation-operation":
3683 return Oe
3684 case "@keet/sendable-room-invitation":
3685 return Je
3686 case "@keet/sendable-identity-invitation":
3687 return Ue
3688 case "@keet/sendable-contact-invitation":
3689 return Ve
3690 case "@keet/sendable-invitation":
3691 return We
3692 case "@keet/add-device-operation":
3693 return Ye
3694 case "@keet/update-device-operation":
3695 return $e
3696 case "@keet/start-indexing-operation":
3697 return _e
3698 case "@keet/stop-indexing-operation":
3699 return ed
3700 case "@keet/join-request":
3701 return nd
3702 case "@keet/accept-join-request-operation":
3703 return rd
3704 case "@keet/reject-join-request-operation":
3705 return id
3706 case "@keet/member":
3707 return pd
3708 case "@keet/full-member":
3709 return fd
3710 case "@keet/member-proofs":
3711 return md
3712 case "@keet/update-member-operation":
3713 return bd
3714 case "@keet/change-member-status-operation":
3715 return gd
3716 case "@keet/change-member-role-operation":
3717 return Kd
3718 case "@keet/remove-member-operation":
3719 return Td
3720 case "@keet/member-activity":
3721 return Pd
3722 case "@keet/member-joined-event":
3723 return Ad
3724 case "@keet/member-left-event":
3725 return Rd
3726 case "@keet/title-changed-chat-event":
3727 return Dd
3728 case "@keet/chat-event":
3729 return Ld
3730 case "@keet/sendable-event":
3731 return qd
3732 case "@keet/display-range":
3733 return Fd
3734 case "@keet/display-content-range":
3735 return Bd
3736 case "@keet/mention-display-item":
3737 return Nd
3738 case "@keet/link-preview":
3739 return Jd
3740 case "@keet/display-link-item":
3741 return Hd
3742 case "@keet/display":
3743 return en
3744 case "@keet/oplog-message":
3745 return cn
3746 case "@keet/index-message":
3747 return an
3748 case "@keet/full-index-message":
3749 return un
3750 case "@keet/message-status":
3751 return ln
3752 case "@keet/message-index-id":
3753 return fn
3754 case "@keet/thread":
3755 return yn
3756 case "@keet/chat-message-record":
3757 return vn
3758 case "@keet/full-chat-message-record":
3759 return wn
3760 case "@keet/add-chat-message-operation":
3761 return An
3762 case "@keet/remove-chat-message-operation":
3763 return Dn
3764 case "@keet/update-chat-message-operation":
3765 return Mn
3766 case "@keet/pin-chat-message-operation":
3767 return qn
3768 case "@keet/reaction":
3769 return Fn
3770 case "@keet/reactions-summary":
3771 return En
3772 case "@keet/reactions-digest":
3773 return In
3774 case "@keet/add-reaction-operation":
3775 return jn
3776 case "@keet/remove-reaction-operation":
3777 return Jn
3778 case "@keet/update-room-config-operation":
3779 return Hn
3780 case "@keet/group-member":
3781 return zn
3782 case "@keet/user-registry-info":
3783 return Gn
3784 case "@keet/room-identity":
3785 return Wn
3786 case "@keet/genesis-operation":
3787 return oo
3788 case "@keet/upgrade-operation":
3789 return ro
3790 case "@keet/update-system-settings-operation":
3791 return ao
3792 case "@keet-private-id/contact":
3793 return so
3794 case "@keet-private-id/v3-room-migration-info":
3795 return po
3796 case "@keet-private-id/run-v3-migration-operation":
3797 return fo
3798 case "@keet-private-id/update-identity-operation":
3799 return yo
3800 case "@keet-private-id/counters":
3801 return xo
3802 case "@keet-private-id/stats":
3803 return bo
3804 case "@keet-private-id/add-entropy-operation":
3805 return ko
3806 case "@keet-private-id/pending-invitation-identity":
3807 return vo
3808 case "@keet-private-id/pending-invitation":
3809 return ho
3810 case "@keet-private-id/resolve-pending-invitation-operation":
3811 return wo
3812 case "@keet-private-id/add-pending-invitation-operation":
3813 return Ao
3814 case "@keet-private-id/remove-pending-invitation-operation":
3815 return Do
3816 case "@keet-private-id/identity-swap":
3817 return So
3818 case "@keet-private-id/room-status":
3819 return Co
3820 case "@keet-private-id/room":
3821 return Fo
3822 case "@keet-private-id/add-room-operation":
3823 return Bo
3824 case "@keet-private-id/remove-room-operation":
3825 return No
3826 case "@keet-private-id/update-room-status-operation":
3827 return Jo
3828 case "@keet-private-id/contact-status":
3829 return Uo
3830 case "@keet-private-id/contact-record":
3831 return Vo
3832 case "@keet-private-id/add-contact-operation":
3833 return Go
3834 case "@keet-private-id/update-contact-status-operation":
3835 return Wo
3836 case "@keet-private-id/remove-contact-operation":
3837 return Yo
3838 case "@keet-private-id/contact-request-status":
3839 return Zo
3840 case "@keet-private-id/contact-request-body":
3841 return ec
3842 case "@keet-private-id/contact-request":
3843 return nc
3844 case "@keet-private-id/contact-request-record":
3845 return tc
3846 case "@keet-private-id/add-contact-request-operation":
3847 return ac
3848 case "@keet-private-id/update-contact-request-status-operation":
3849 return uc
3850 case "@keet-private-id/profile-discovery-record-v1":
3851 return lc
3852 case "@keet-private-id/profile-discovery-record":
3853 return fc
3854 case "@keet/add-file-preview-operation":
3855 return yc
3856 case "@keet/member-removed-event":
3857 return xc
3858 case "@keet/member-contact-info":
3859 return kc
3860 case "@keet/remove-device-operation":
3861 return gc
3862 case "@keet/device-identity":
3863 return hc
3864 case "@keet/readonly-room-invitation":
3865 return Kc
3866 case "@keet-private-id/identity-swap-v2":
3867 return wc
3868 case "@keet-private-id/activate-contact-room-operation":
3869 return Pc
3870 case "@keet/display-type":
3871 return Rc
3872 case "@keet/test-increment-operation":
3873 return Sc
3874 case "@keet/test-collection-record-1":
3875 return Cc
3876 case "@keet/migrate-abi-operation":
3877 return Lc
3878 case "@keet/system-settings-keys":
3879 return Fc
3880 case "@keet/room-supported-language":
3881 return Bc
3882 case "@keet/translation-display-item":
3883 return Nc
3884 case "@keet-private-id/unreads":
3885 return jc
3886 case "@keet-private-id/add-unreads-key-operation":
3887 return Jc
3888 case "@keet-private-id/remove-unreads-key-operation":
3889 return Vc
3890 case "@keet/label-type":
3891 return zc
3892 case "@keet/chat-label":
3893 return Gc
3894 case "@keet/add-chat-label-operation":
3895 return Wc
3896 case "@keet/remove-chat-label-operation":
3897 return Yc
3898 case "@keet/chat-label-summary":
3899 return Zc
3900 case "@keet/chat-label-digest":
3901 return _c
3902 case "@keet/update-read-length-operation":
3903 return dr
3904 case "@keet/read-length":
3905 return nr
3906 case "@keet/tmp-removed-member":
3907 return or
3908 case "@keet-private-id/settings":
3909 return cr
3910 case "@keet-private-id/user-settings-key":
3911 return tr
3912 case "@keet-private-id/update-settings-operation":
3913 return sr
3914 case "@keet/member-label-type":
3915 return ur
3916 case "@keet/member-label":
3917 return lr
3918 case "@keet/add-member-label-operation":
3919 return mr
3920 case "@keet/member-label-summary":
3921 return yr
3922 case "@keet/member-label-digest":
3923 return br
3924 case "@keet/location-shared-event":
3925 return kr
3926 case "@keet/move-indexer-operation":
3927 return gr
3928 case "@keet/start-call":
3929 return wr
3930 case "@keet/join-call":
3931 return Ar
3932 case "@keet/leave-call":
3933 return Dr
3934 case "@keet/end-call":
3935 return Cr
3936 case "@keet/add-call-stream":
3937 return Lr
3938 case "@keet/remove-call-stream":
3939 return Fr
3940 case "@keet/call-record":
3941 return Er
3942 case "@keet/call-member-record":
3943 return Br
3944 case "@keet/call-device-record":
3945 return Ir
3946 case "@keet/call-stream-record":
3947 return Nr
3948 case "@keet/build-type":
3949 return Or
3950 case "@keet/test-crash-operation":
3951 return Ur
3952 case "@keet/test-dispatch-error-operation":
3953 return Hr
3954 default:
3955 throw new Error("Encoder not found " + e)
3956 }
3957}
3958function mt(e, d = 20) {
3959 const o = ft(e)
3960 return {
3961 preencode(e, c) {
3962 ;((n = d), o.preencode(e, c))
3963 },
3964 encode(e, c) {
3965 ;((n = d), o.encode(e, c))
3966 },
3967 decode: (e) => ((n = d), o.decode(e)),
3968 }
3969}
3970const yt = mt
3971module.exports = {
3972 resolveStruct: yt,
3973 getStruct: mt,
3974 getEnum: lt,
3975 getEncoding: ft,
3976 encode: pt,
3977 decode: ut,
3978 setVersion: st,
3979 version: n,
3980}
keet-core-4.14.4-pretty/schema/spec/contract/hyperschema/schema.json +4973 -0
……@@ -0,0 +1,4973 @@
1{
2 "version": 20,
3 "schema": [
4 {
5 "name": "public-key",
6 "namespace": "keet",
7 "alias": "fixed32",
8 "version": 1
9 },
10 {
11 "name": "secret-key",
12 "namespace": "keet",
13 "alias": "buffer",
14 "version": 1
15 },
16 {
17 "name": "room-key",
18 "namespace": "keet",
19 "alias": "fixed32",
20 "version": 1
21 },
22 {
23 "name": "encryption-key",
24 "namespace": "keet",
25 "alias": "buffer",
26 "version": 1
27 },
28 {
29 "name": "room-discovery-key",
30 "namespace": "keet",
31 "alias": "fixed32",
32 "version": 1
33 },
34 {
35 "name": "core-key",
36 "namespace": "keet",
37 "alias": "fixed32",
38 "version": 1
39 },
40 {
41 "name": "device-key",
42 "namespace": "keet",
43 "alias": "fixed32",
44 "version": 1
45 },
46 {
47 "name": "invitation-id",
48 "namespace": "keet",
49 "alias": "fixed32",
50 "version": 1
51 },
52 {
53 "name": "member-key",
54 "namespace": "keet",
55 "alias": "fixed32",
56 "version": 1
57 },
58 {
59 "name": "swarm-key",
60 "namespace": "keet",
61 "alias": "fixed32",
62 "version": 1
63 },
64 {
65 "name": "core-seq",
66 "namespace": "keet",
67 "alias": "uint",
68 "version": 1
69 },
70 {
71 "name": "head",
72 "namespace": "keet",
73 "compact": true,
74 "flagsPosition": -1,
75 "fields": [
76 {
77 "name": "key",
78 "required": true,
79 "type": "@keet/device-key",
80 "version": 1
81 },
82 {
83 "name": "length",
84 "required": true,
85 "type": "uint",
86 "version": 1
87 }
88 ]
89 },
90 {
91 "name": "oplog-id",
92 "namespace": "keet",
93 "compact": true,
94 "flagsPosition": -1,
95 "fields": [
96 {
97 "name": "key",
98 "required": true,
99 "type": "@keet/device-key",
100 "version": 1
101 },
102 {
103 "name": "seq",
104 "required": true,
105 "type": "@keet/core-seq",
106 "version": 1
107 }
108 ]
109 },
110 {
111 "name": "encryption-keypair",
112 "namespace": "keet",
113 "compact": true,
114 "flagsPosition": -1,
115 "fields": [
116 {
117 "name": "publicKey",
118 "required": true,
119 "type": "fixed32",
120 "version": 1
121 },
122 {
123 "name": "secretKey",
124 "required": true,
125 "type": "fixed32",
126 "version": 1
127 }
128 ]
129 },
130 {
131 "name": "signing-keypair",
132 "namespace": "keet",
133 "compact": true,
134 "flagsPosition": -1,
135 "fields": [
136 {
137 "name": "publicKey",
138 "required": true,
139 "type": "fixed32",
140 "version": 1
141 },
142 {
143 "name": "secretKey",
144 "required": true,
145 "type": "fixed64",
146 "version": 1
147 }
148 ]
149 },
150 {
151 "name": "room-keys",
152 "namespace": "keet",
153 "compact": false,
154 "flagsPosition": 1,
155 "fields": [
156 {
157 "name": "key",
158 "required": true,
159 "type": "@keet/room-key",
160 "version": 1
161 },
162 {
163 "name": "encryptionKey",
164 "type": "@keet/encryption-key",
165 "version": 1
166 },
167 {
168 "name": "fastForwardTo",
169 "type": "fixed32",
170 "version": 1
171 }
172 ]
173 },
174 {
175 "name": "operation-header",
176 "namespace": "keet",
177 "compact": false,
178 "flagsPosition": -1,
179 "fields": [
180 {
181 "name": "timestamp",
182 "required": true,
183 "type": "uint",
184 "version": 1
185 }
186 ]
187 },
188 {
189 "name": "blob-pointer",
190 "namespace": "keet",
191 "compact": true,
192 "flagsPosition": -1,
193 "fields": [
194 {
195 "name": "blockOffset",
196 "required": true,
197 "type": "uint",
198 "version": 1
199 },
200 {
201 "name": "blockLength",
202 "required": true,
203 "type": "uint",
204 "version": 1
205 },
206 {
207 "name": "byteOffset",
208 "required": true,
209 "type": "uint",
210 "version": 1
211 },
212 {
213 "name": "byteLength",
214 "required": true,
215 "type": "uint",
216 "version": 1
217 }
218 ]
219 },
220 {
221 "name": "file-dimensions",
222 "namespace": "keet",
223 "compact": false,
224 "flagsPosition": -1,
225 "fields": [
226 {
227 "name": "width",
228 "required": true,
229 "type": "uint",
230 "version": 1
231 },
232 {
233 "name": "height",
234 "required": true,
235 "type": "uint",
236 "version": 1
237 }
238 ]
239 },
240 {
241 "name": "file-metadata",
242 "namespace": "keet",
243 "compact": false,
244 "flagsPosition": 0,
245 "fields": [
246 {
247 "name": "name",
248 "type": "string",
249 "version": 1
250 },
251 {
252 "name": "mimetype",
253 "type": "string",
254 "version": 1
255 },
256 {
257 "name": "dimensions",
258 "type": "@keet/file-dimensions",
259 "version": 1
260 },
261 {
262 "name": "userdata",
263 "type": "buffer",
264 "version": 1
265 },
266 {
267 "name": "duration",
268 "type": "uint",
269 "version": 1
270 },
271 {
272 "name": "isPreview",
273 "type": "bool",
274 "version": 1
275 }
276 ]
277 },
278 {
279 "name": "external-drive-pointer",
280 "namespace": "keet",
281 "compact": false,
282 "flagsPosition": -1,
283 "fields": [
284 {
285 "name": "key",
286 "required": true,
287 "type": "@keet/core-key",
288 "version": 1
289 },
290 {
291 "name": "path",
292 "required": true,
293 "type": "string",
294 "version": 1
295 },
296 {
297 "name": "version",
298 "required": true,
299 "type": "uint",
300 "version": 1
301 },
302 {
303 "name": "size",
304 "required": true,
305 "type": "uint",
306 "version": 1
307 }
308 ]
309 },
310 {
311 "name": "external-blob-pointer",
312 "namespace": "keet",
313 "compact": false,
314 "flagsPosition": -1,
315 "fields": [
316 {
317 "name": "key",
318 "required": true,
319 "type": "@keet/core-key",
320 "version": 1
321 },
322 {
323 "name": "blob",
324 "required": true,
325 "type": "@keet/blob-pointer",
326 "version": 1
327 }
328 ]
329 },
330 {
331 "name": "file-pointer",
332 "namespace": "keet",
333 "compact": false,
334 "flagsPosition": 0,
335 "fields": [
336 {
337 "name": "inlined",
338 "type": "buffer",
339 "version": 1
340 },
341 {
342 "name": "blob",
343 "type": "@keet/blob-pointer",
344 "version": 1
345 },
346 {
347 "name": "externalBlob",
348 "type": "@keet/external-blob-pointer",
349 "version": 1
350 },
351 {
352 "name": "externalDrive",
353 "type": "@keet/external-drive-pointer",
354 "version": 1
355 }
356 ]
357 },
358 {
359 "name": "file",
360 "namespace": "keet",
361 "compact": false,
362 "flagsPosition": 1,
363 "fields": [
364 {
365 "name": "pointer",
366 "required": true,
367 "type": "@keet/file-pointer",
368 "version": 1
369 },
370 {
371 "name": "metadata",
372 "type": "@keet/file-metadata",
373 "version": 1
374 },
375 {
376 "name": "preview",
377 "type": "@keet/image-file",
378 "version": 1
379 },
380 {
381 "name": "hash",
382 "type": "fixed32",
383 "version": 1
384 }
385 ]
386 },
387 {
388 "name": "image-file",
389 "namespace": "keet",
390 "compact": false,
391 "flagsPosition": 0,
392 "fields": [
393 {
394 "name": "small",
395 "type": "@keet/file",
396 "version": 1
397 },
398 {
399 "name": "medium",
400 "type": "@keet/file",
401 "version": 1
402 },
403 {
404 "name": "large",
405 "type": "@keet/file",
406 "version": 1
407 }
408 ]
409 },
410 {
411 "name": "file-status",
412 "namespace": "keet",
413 "compact": false,
414 "flagsPosition": 0,
415 "fields": [
416 {
417 "name": "isDeleted",
418 "type": "bool",
419 "version": 1
420 }
421 ]
422 },
423 {
424 "name": "file-record",
425 "namespace": "keet",
426 "compact": false,
427 "flagsPosition": 4,
428 "fields": [
429 {
430 "name": "id",
431 "required": true,
432 "type": "uint",
433 "version": 1
434 },
435 {
436 "name": "oplog",
437 "required": true,
438 "type": "@keet/oplog-id",
439 "version": 1
440 },
441 {
442 "name": "status",
443 "required": true,
444 "type": "@keet/file-status",
445 "version": 1
446 },
447 {
448 "name": "file",
449 "required": true,
450 "type": "@keet/file",
451 "version": 1
452 },
453 {
454 "name": "version",
455 "type": "uint",
456 "version": 14
457 }
458 ]
459 },
460 {
461 "name": "device-status",
462 "namespace": "keet",
463 "compact": false,
464 "flagsPosition": 0,
465 "fields": [
466 {
467 "name": "isActive",
468 "type": "bool",
469 "version": 1
470 },
471 {
472 "name": "isIndexing",
473 "type": "bool",
474 "version": 1
475 }
476 ]
477 },
478 {
479 "name": "member-status",
480 "namespace": "keet",
481 "compact": false,
482 "flagsPosition": 0,
483 "fields": [
484 {
485 "name": "isAdmin",
486 "type": "bool",
487 "version": 1
488 },
489 {
490 "name": "isModerator",
491 "type": "bool",
492 "version": 1
493 },
494 {
495 "name": "isPending",
496 "type": "bool",
497 "version": 1
498 },
499 {
500 "name": "isActive",
501 "type": "bool",
502 "version": 1
503 },
504 {
505 "name": "isMuted",
506 "type": "bool",
507 "version": 1
508 },
509 {
510 "name": "isBanned",
511 "type": "bool",
512 "version": 1
513 },
514 {
515 "name": "isShadowBanned",
516 "type": "bool",
517 "version": 1
518 },
519 {
520 "name": "isRemoved",
521 "type": "bool",
522 "version": 13
523 }
524 ]
525 },
526 {
527 "name": "member-moderation-status",
528 "namespace": "keet",
529 "compact": false,
530 "flagsPosition": 0,
531 "fields": [
532 {
533 "name": "isMuted",
534 "type": "bool",
535 "version": 1
536 },
537 {
538 "name": "isBanned",
539 "type": "bool",
540 "version": 1
541 },
542 {
543 "name": "isShadowBanned",
544 "type": "bool",
545 "version": 1
546 }
547 ]
548 },
549 {
550 "name": "abi",
551 "namespace": "keet",
552 "compact": false,
553 "flagsPosition": -1,
554 "fields": [
555 {
556 "name": "version",
557 "required": true,
558 "type": "uint",
559 "version": 1
560 }
561 ]
562 },
563 {
564 "name": "device-stats",
565 "namespace": "keet",
566 "compact": false,
567 "flagsPosition": -1,
568 "fields": [
569 {
570 "name": "total",
571 "required": true,
572 "type": "uint",
573 "version": 1
574 },
575 {
576 "name": "active",
577 "required": true,
578 "type": "uint",
579 "version": 1
580 }
581 ]
582 },
583 {
584 "name": "member-stats",
585 "namespace": "keet",
586 "compact": false,
587 "flagsPosition": -1,
588 "fields": [
589 {
590 "name": "total",
591 "required": true,
592 "type": "uint",
593 "version": 1
594 },
595 {
596 "name": "active",
597 "required": true,
598 "type": "uint",
599 "version": 1
600 },
601 {
602 "name": "pending",
603 "required": true,
604 "type": "uint",
605 "version": 1
606 }
607 ]
608 },
609 {
610 "name": "chat-stats",
611 "namespace": "keet",
612 "compact": false,
613 "flagsPosition": 4,
614 "fields": [
615 {
616 "name": "clock",
617 "required": true,
618 "type": "uint",
619 "version": 1
620 },
621 {
622 "name": "pinned",
623 "required": true,
624 "type": "uint",
625 "version": 1
626 },
627 {
628 "name": "threads",
629 "required": true,
630 "type": "uint",
631 "version": 1
632 },
633 {
634 "name": "timestamp",
635 "required": true,
636 "type": "uint",
637 "version": 1
638 },
639 {
640 "name": "flagsClock",
641 "type": "uint",
642 "version": 15
643 }
644 ]
645 },
646 {
647 "name": "file-stats",
648 "namespace": "keet",
649 "compact": false,
650 "flagsPosition": -1,
651 "fields": [
652 {
653 "name": "clock",
654 "required": true,
655 "type": "uint",
656 "version": 1
657 }
658 ]
659 },
660 {
661 "name": "stats",
662 "namespace": "keet",
663 "compact": false,
664 "flagsPosition": -1,
665 "fields": [
666 {
667 "name": "devices",
668 "required": true,
669 "type": "@keet/device-stats",
670 "version": 1
671 },
672 {
673 "name": "members",
674 "required": true,
675 "type": "@keet/member-stats",
676 "version": 1
677 },
678 {
679 "name": "chat",
680 "required": true,
681 "type": "@keet/chat-stats",
682 "version": 1
683 },
684 {
685 "name": "files",
686 "required": true,
687 "type": "@keet/file-stats",
688 "version": 1
689 }
690 ]
691 },
692 {
693 "name": "room-type",
694 "namespace": "keet",
695 "offset": 1,
696 "enum": [
697 {
698 "key": "Default",
699 "version": 1
700 },
701 {
702 "key": "Broadcast",
703 "version": 1
704 },
705 {
706 "key": "DirectMessage",
707 "version": 1
708 }
709 ],
710 "strings": false
711 },
712 {
713 "name": "system-settings",
714 "namespace": "keet",
715 "compact": false,
716 "flagsPosition": 0,
717 "fields": [
718 {
719 "name": "roomType",
720 "type": "@keet/room-type",
721 "version": 1
722 },
723 {
724 "name": "isExperimental",
725 "type": "bool",
726 "version": 1
727 },
728 {
729 "name": "isJoiningDisabled",
730 "type": "bool",
731 "version": 1
732 },
733 {
734 "name": "isAppendingDisabled",
735 "type": "bool",
736 "version": 1
737 },
738 {
739 "name": "isCallingDisabled",
740 "type": "bool",
741 "version": 1
742 },
743 {
744 "name": "isMembershipEventsDisabled",
745 "type": "bool",
746 "version": 1
747 },
748 {
749 "name": "isAttachmentsDisabled",
750 "type": "bool",
751 "version": 19
752 },
753 {
754 "name": "isLinksDisabled",
755 "type": "bool",
756 "version": 19
757 },
758 {
759 "name": "buildType",
760 "type": "@keet/build-type",
761 "version": 20
762 }
763 ]
764 },
765 {
766 "name": "system-digest",
767 "namespace": "keet",
768 "compact": false,
769 "flagsPosition": -1,
770 "fields": [
771 {
772 "name": "abi",
773 "required": true,
774 "type": "@keet/abi",
775 "version": 1
776 },
777 {
778 "name": "settings",
779 "required": true,
780 "type": "@keet/system-settings",
781 "version": 1
782 },
783 {
784 "name": "creationTime",
785 "required": true,
786 "type": "uint",
787 "version": 1
788 }
789 ]
790 },
791 {
792 "name": "room-seed",
793 "namespace": "keet",
794 "compact": false,
795 "flagsPosition": -1,
796 "fields": [
797 {
798 "name": "seed",
799 "required": true,
800 "type": "fixed32",
801 "version": 1
802 }
803 ]
804 },
805 {
806 "name": "room-capabilities",
807 "namespace": "keet",
808 "compact": false,
809 "flagsPosition": -1,
810 "fields": [
811 {
812 "name": "mailboxKeyPair",
813 "required": true,
814 "type": "@keet/encryption-keypair",
815 "version": 1
816 },
817 {
818 "name": "discoveryKeyPair",
819 "required": true,
820 "type": "@keet/signing-keypair",
821 "version": 1
822 },
823 {
824 "name": "wakeupTopic",
825 "required": true,
826 "type": "@keet/room-discovery-key",
827 "version": 1
828 },
829 {
830 "name": "swarmTopic",
831 "required": true,
832 "type": "@keet/room-discovery-key",
833 "version": 1
834 }
835 ]
836 },
837 {
838 "name": "room-config",
839 "namespace": "keet",
840 "compact": false,
841 "flagsPosition": 0,
842 "fields": [
843 {
844 "name": "title",
845 "type": "string",
846 "version": 1
847 },
848 {
849 "name": "avatar",
850 "type": "@keet/image-file",
851 "version": 1
852 },
853 {
854 "name": "description",
855 "type": "string",
856 "version": 1
857 },
858 {
859 "name": "supportedLanguages",
860 "array": true,
861 "type": "@keet/room-supported-language",
862 "version": 11
863 },
864 {
865 "name": "blindPeers",
866 "array": true,
867 "type": "fixed32",
868 "version": 13
869 }
870 ]
871 },
872 {
873 "name": "blind-peer",
874 "namespace": "keet",
875 "compact": false,
876 "flagsPosition": -1,
877 "fields": [
878 {
879 "name": "key",
880 "required": true,
881 "type": "@keet/public-key",
882 "version": 1
883 }
884 ]
885 },
886 {
887 "name": "add-blind-peer-operation",
888 "namespace": "keet",
889 "compact": false,
890 "flagsPosition": -1,
891 "fields": [
892 {
893 "name": "header",
894 "required": true,
895 "type": "@keet/operation-header",
896 "version": 1
897 },
898 {
899 "name": "peer",
900 "required": true,
901 "type": "@keet/blind-peer",
902 "version": 1
903 }
904 ]
905 },
906 {
907 "name": "remove-blind-peer-operation",
908 "namespace": "keet",
909 "compact": false,
910 "flagsPosition": -1,
911 "fields": [
912 {
913 "name": "header",
914 "required": true,
915 "type": "@keet/operation-header",
916 "version": 1
917 },
918 {
919 "name": "key",
920 "required": true,
921 "type": "@keet/public-key",
922 "version": 1
923 }
924 ]
925 },
926 {
927 "name": "identity-attestation",
928 "namespace": "keet",
929 "compact": true,
930 "flagsPosition": -1,
931 "fields": [
932 {
933 "name": "memberKey",
934 "required": true,
935 "type": "@keet/member-key",
936 "version": 1
937 },
938 {
939 "name": "proof",
940 "required": true,
941 "type": "buffer",
942 "version": 1
943 }
944 ]
945 },
946 {
947 "name": "device-invitation",
948 "namespace": "keet",
949 "compact": false,
950 "flagsPosition": -1,
951 "fields": [
952 {
953 "name": "id",
954 "required": true,
955 "type": "@keet/invitation-id",
956 "version": 1
957 },
958 {
959 "name": "response",
960 "required": true,
961 "type": "buffer",
962 "version": 1
963 }
964 ]
965 },
966 {
967 "name": "device",
968 "namespace": "keet",
969 "compact": false,
970 "flagsPosition": 4,
971 "fields": [
972 {
973 "name": "key",
974 "required": true,
975 "type": "@keet/device-key",
976 "version": 1
977 },
978 {
979 "name": "memberKey",
980 "required": true,
981 "type": "@keet/member-key",
982 "version": 1
983 },
984 {
985 "name": "status",
986 "required": true,
987 "type": "@keet/device-status",
988 "version": 1
989 },
990 {
991 "name": "profile",
992 "required": true,
993 "type": "@keet/device-profile",
994 "version": 1
995 },
996 {
997 "name": "invitation",
998 "type": "@keet/device-invitation",
999 "version": 1
1000 }
1001 ]
1002 },
1003 {
1004 "name": "member-profile",
1005 "namespace": "keet",
1006 "compact": false,
1007 "flagsPosition": 1,
1008 "fields": [
1009 {
1010 "name": "timestamp",
1011 "required": true,
1012 "type": "uint",
1013 "version": 1
1014 },
1015 {
1016 "name": "mailbox",
1017 "type": "@keet/public-key",
1018 "version": 1
1019 },
1020 {
1021 "name": "displayName",
1022 "type": "string",
1023 "version": 1
1024 },
1025 {
1026 "name": "avatar",
1027 "type": "@keet/image-file",
1028 "version": 1
1029 },
1030 {
1031 "name": "username",
1032 "type": "string",
1033 "version": 1
1034 }
1035 ]
1036 },
1037 {
1038 "name": "device-profile",
1039 "namespace": "keet",
1040 "compact": false,
1041 "flagsPosition": 0,
1042 "fields": [
1043 {
1044 "name": "swarmKey",
1045 "type": "@keet/swarm-key",
1046 "version": 1
1047 },
1048 {
1049 "name": "name",
1050 "type": "string",
1051 "version": 1
1052 },
1053 {
1054 "name": "isMobile",
1055 "type": "bool",
1056 "version": 1
1057 },
1058 {
1059 "name": "buildType",
1060 "type": "@keet/build-type",
1061 "version": 20
1062 }
1063 ]
1064 },
1065 {
1066 "name": "member-update",
1067 "namespace": "keet",
1068 "compact": false,
1069 "flagsPosition": -1,
1070 "fields": [
1071 {
1072 "name": "profile",
1073 "required": true,
1074 "type": "@keet/member-profile",
1075 "version": 1
1076 },
1077 {
1078 "name": "attestation",
1079 "required": true,
1080 "type": "@keet/identity-attestation",
1081 "version": 1
1082 }
1083 ]
1084 },
1085 {
1086 "name": "device-update",
1087 "namespace": "keet",
1088 "compact": false,
1089 "flagsPosition": -1,
1090 "fields": [
1091 {
1092 "name": "profile",
1093 "required": true,
1094 "type": "@keet/device-profile",
1095 "version": 1
1096 },
1097 {
1098 "name": "attestation",
1099 "required": true,
1100 "type": "@keet/identity-attestation",
1101 "version": 1
1102 }
1103 ]
1104 },
1105 {
1106 "name": "signed-pairing-data",
1107 "namespace": "keet",
1108 "compact": false,
1109 "flagsPosition": -1,
1110 "fields": [
1111 {
1112 "name": "id",
1113 "required": true,
1114 "type": "@keet/invitation-id",
1115 "version": 1
1116 },
1117 {
1118 "name": "data",
1119 "required": true,
1120 "type": "buffer",
1121 "version": 1
1122 },
1123 {
1124 "name": "signature",
1125 "required": true,
1126 "type": "buffer",
1127 "version": 1
1128 }
1129 ]
1130 },
1131 {
1132 "name": "device-request-identity",
1133 "namespace": "keet",
1134 "compact": false,
1135 "flagsPosition": -1,
1136 "fields": [
1137 {
1138 "name": "devicePublicKey",
1139 "required": true,
1140 "type": "@keet/public-key",
1141 "version": 1
1142 }
1143 ]
1144 },
1145 {
1146 "name": "device-response-identity",
1147 "namespace": "keet",
1148 "compact": false,
1149 "flagsPosition": -1,
1150 "fields": [
1151 {
1152 "name": "privateProfileIdentity",
1153 "required": true,
1154 "type": "@keet/identity-attestation",
1155 "version": 1
1156 },
1157 {
1158 "name": "deviceProof",
1159 "required": true,
1160 "type": "buffer",
1161 "version": 1
1162 }
1163 ]
1164 },
1165 {
1166 "name": "device-request-with-invitation",
1167 "namespace": "keet",
1168 "compact": false,
1169 "flagsPosition": 4,
1170 "fields": [
1171 {
1172 "name": "deviceKey",
1173 "required": true,
1174 "type": "@keet/device-key",
1175 "version": 1
1176 },
1177 {
1178 "name": "keyPair",
1179 "required": true,
1180 "type": "@keet/signing-keypair",
1181 "version": 1
1182 },
1183 {
1184 "name": "device",
1185 "required": true,
1186 "type": "@keet/device-update",
1187 "version": 1
1188 },
1189 {
1190 "name": "member",
1191 "required": true,
1192 "type": "@keet/member-update",
1193 "version": 1
1194 },
1195 {
1196 "name": "identity",
1197 "type": "@keet/device-request-identity",
1198 "version": 1
1199 }
1200 ]
1201 },
1202 {
1203 "name": "device-request-with-invitation-and-proof",
1204 "namespace": "keet",
1205 "compact": false,
1206 "flagsPosition": -1,
1207 "fields": [
1208 {
1209 "name": "id",
1210 "required": true,
1211 "type": "@keet/invitation-id",
1212 "version": 1
1213 },
1214 {
1215 "name": "request",
1216 "required": true,
1217 "type": "@keet/device-request-with-invitation",
1218 "version": 1
1219 },
1220 {
1221 "name": "signature",
1222 "required": true,
1223 "type": "buffer",
1224 "version": 1
1225 }
1226 ]
1227 },
1228 {
1229 "name": "device-request-with-member-proof",
1230 "namespace": "keet",
1231 "compact": false,
1232 "flagsPosition": 1,
1233 "fields": [
1234 {
1235 "name": "device",
1236 "required": true,
1237 "type": "@keet/device-update",
1238 "version": 1
1239 },
1240 {
1241 "name": "member",
1242 "type": "@keet/member-update",
1243 "version": 1
1244 }
1245 ]
1246 },
1247 {
1248 "name": "device-request",
1249 "namespace": "keet",
1250 "compact": false,
1251 "flagsPosition": 0,
1252 "fields": [
1253 {
1254 "name": "withInvitation",
1255 "type": "@keet/device-request-with-invitation-and-proof",
1256 "version": 1
1257 },
1258 {
1259 "name": "withMemberProof",
1260 "type": "@keet/device-request-with-member-proof",
1261 "version": 1
1262 }
1263 ]
1264 },
1265 {
1266 "name": "device-response",
1267 "namespace": "keet",
1268 "compact": false,
1269 "flagsPosition": 1,
1270 "fields": [
1271 {
1272 "name": "signedKeys",
1273 "required": true,
1274 "type": "@keet/signed-pairing-data",
1275 "version": 1
1276 },
1277 {
1278 "name": "identity",
1279 "type": "@keet/device-response-identity",
1280 "version": 1
1281 }
1282 ]
1283 },
1284 {
1285 "name": "invitation-metadata",
1286 "namespace": "keet",
1287 "compact": false,
1288 "flagsPosition": 0,
1289 "fields": [
1290 {
1291 "name": "expiration",
1292 "type": "uint",
1293 "version": 1
1294 },
1295 {
1296 "name": "requiresConfirmation",
1297 "type": "bool",
1298 "version": 1
1299 },
1300 {
1301 "name": "canModerate",
1302 "type": "bool",
1303 "version": 1
1304 },
1305 {
1306 "name": "canAdmin",
1307 "type": "bool",
1308 "version": 1
1309 },
1310 {
1311 "name": "buildType",
1312 "type": "@keet/build-type",
1313 "version": 20
1314 }
1315 ]
1316 },
1317 {
1318 "name": "invitation",
1319 "namespace": "keet",
1320 "compact": false,
1321 "flagsPosition": 3,
1322 "fields": [
1323 {
1324 "name": "id",
1325 "required": true,
1326 "type": "@keet/invitation-id",
1327 "version": 1
1328 },
1329 {
1330 "name": "response",
1331 "required": true,
1332 "type": "@keet/signed-pairing-data",
1333 "version": 1
1334 },
1335 {
1336 "name": "metadata",
1337 "required": true,
1338 "type": "@keet/invitation-metadata",
1339 "version": 1
1340 },
1341 {
1342 "name": "anchor",
1343 "type": "@keet/head",
1344 "version": 1
1345 },
1346 {
1347 "name": "isActive",
1348 "type": "bool",
1349 "version": 1
1350 }
1351 ]
1352 },
1353 {
1354 "name": "add-invitation-operation",
1355 "namespace": "keet",
1356 "compact": false,
1357 "flagsPosition": -1,
1358 "fields": [
1359 {
1360 "name": "header",
1361 "required": true,
1362 "type": "@keet/operation-header",
1363 "version": 1
1364 },
1365 {
1366 "name": "invitation",
1367 "required": true,
1368 "type": "@keet/invitation",
1369 "version": 1
1370 }
1371 ]
1372 },
1373 {
1374 "name": "remove-invitation-operation",
1375 "namespace": "keet",
1376 "compact": false,
1377 "flagsPosition": -1,
1378 "fields": [
1379 {
1380 "name": "header",
1381 "required": true,
1382 "type": "@keet/operation-header",
1383 "version": 1
1384 },
1385 {
1386 "name": "id",
1387 "required": true,
1388 "type": "fixed32",
1389 "version": 1
1390 }
1391 ]
1392 },
1393 {
1394 "name": "sendable-room-invitation",
1395 "namespace": "keet",
1396 "compact": false,
1397 "flagsPosition": -1,
1398 "fields": [
1399 {
1400 "name": "mailbox",
1401 "required": true,
1402 "type": "fixed32",
1403 "version": 1
1404 },
1405 {
1406 "name": "invitationSeed",
1407 "required": true,
1408 "type": "fixed32",
1409 "version": 1
1410 },
1411 {
1412 "name": "anchor",
1413 "required": true,
1414 "type": "@keet/head",
1415 "version": 1
1416 }
1417 ]
1418 },
1419 {
1420 "name": "sendable-identity-invitation",
1421 "namespace": "keet",
1422 "compact": false,
1423 "flagsPosition": -1,
1424 "fields": [
1425 {
1426 "name": "mailbox",
1427 "required": true,
1428 "type": "fixed32",
1429 "version": 1
1430 },
1431 {
1432 "name": "invitationSeed",
1433 "required": true,
1434 "type": "fixed32",
1435 "version": 1
1436 },
1437 {
1438 "name": "anchor",
1439 "required": true,
1440 "type": "@keet/head",
1441 "version": 1
1442 },
1443 {
1444 "name": "identityPublicKey",
1445 "required": true,
1446 "type": "@keet/member-key",
1447 "version": 1
1448 }
1449 ]
1450 },
1451 {
1452 "name": "sendable-contact-invitation",
1453 "namespace": "keet",
1454 "compact": false,
1455 "flagsPosition": -1,
1456 "fields": [
1457 {
1458 "name": "mailbox",
1459 "required": true,
1460 "type": "fixed32",
1461 "version": 1
1462 }
1463 ]
1464 },
1465 {
1466 "name": "sendable-invitation",
1467 "namespace": "keet",
1468 "compact": false,
1469 "flagsPosition": 0,
1470 "fields": [
1471 {
1472 "name": "room",
1473 "type": "@keet/sendable-room-invitation",
1474 "version": 1
1475 },
1476 {
1477 "name": "identity",
1478 "type": "@keet/sendable-identity-invitation",
1479 "version": 1
1480 },
1481 {
1482 "name": "contact",
1483 "type": "@keet/sendable-contact-invitation",
1484 "version": 1
1485 },
1486 {
1487 "name": "readonly",
1488 "type": "@keet/readonly-room-invitation",
1489 "version": 6
1490 },
1491 {
1492 "name": "additionalNodes",
1493 "array": true,
1494 "type": "ipv4Address",
1495 "version": 11
1496 },
1497 {
1498 "name": "buildType",
1499 "type": "@keet/build-type",
1500 "version": 20
1501 }
1502 ]
1503 },
1504 {
1505 "name": "add-device-operation",
1506 "namespace": "keet",
1507 "compact": false,
1508 "flagsPosition": -1,
1509 "fields": [
1510 {
1511 "name": "header",
1512 "required": true,
1513 "type": "@keet/operation-header",
1514 "version": 1
1515 },
1516 {
1517 "name": "blindRequest",
1518 "required": true,
1519 "type": "buffer",
1520 "version": 1
1521 }
1522 ]
1523 },
1524 {
1525 "name": "update-device-operation",
1526 "namespace": "keet",
1527 "compact": false,
1528 "flagsPosition": 1,
1529 "fields": [
1530 {
1531 "name": "header",
1532 "required": true,
1533 "type": "@keet/operation-header",
1534 "version": 1
1535 },
1536 {
1537 "name": "profile",
1538 "type": "@keet/device-profile",
1539 "version": 1
1540 }
1541 ]
1542 },
1543 {
1544 "name": "start-indexing-operation",
1545 "namespace": "keet",
1546 "compact": false,
1547 "flagsPosition": -1,
1548 "fields": []
1549 },
1550 {
1551 "name": "stop-indexing-operation",
1552 "namespace": "keet",
1553 "compact": false,
1554 "flagsPosition": -1,
1555 "fields": []
1556 },
1557 {
1558 "name": "join-request",
1559 "namespace": "keet",
1560 "compact": false,
1561 "flagsPosition": -1,
1562 "fields": [
1563 {
1564 "name": "deviceKey",
1565 "required": true,
1566 "type": "@keet/device-key",
1567 "version": 1
1568 },
1569 {
1570 "name": "id",
1571 "required": true,
1572 "type": "@keet/invitation-id",
1573 "version": 1
1574 },
1575 {
1576 "name": "request",
1577 "required": true,
1578 "type": "@keet/device-request-with-invitation",
1579 "version": 1
1580 }
1581 ]
1582 },
1583 {
1584 "name": "accept-join-request-operation",
1585 "namespace": "keet",
1586 "compact": false,
1587 "flagsPosition": 2,
1588 "fields": [
1589 {
1590 "name": "header",
1591 "required": true,
1592 "type": "@keet/operation-header",
1593 "version": 1
1594 },
1595 {
1596 "name": "deviceKey",
1597 "required": true,
1598 "type": "@keet/device-key",
1599 "version": 1
1600 },
1601 {
1602 "name": "identity",
1603 "type": "@keet/device-response-identity",
1604 "version": 1
1605 }
1606 ]
1607 },
1608 {
1609 "name": "reject-join-request-operation",
1610 "namespace": "keet",
1611 "compact": false,
1612 "flagsPosition": -1,
1613 "fields": [
1614 {
1615 "name": "header",
1616 "required": true,
1617 "type": "@keet/operation-header",
1618 "version": 1
1619 },
1620 {
1621 "name": "deviceKey",
1622 "required": true,
1623 "type": "@keet/device-key",
1624 "version": 1
1625 }
1626 ]
1627 },
1628 {
1629 "name": "member",
1630 "namespace": "keet",
1631 "compact": false,
1632 "flagsPosition": -1,
1633 "fields": [
1634 {
1635 "name": "key",
1636 "required": true,
1637 "type": "@keet/member-key",
1638 "version": 1
1639 },
1640 {
1641 "name": "status",
1642 "required": true,
1643 "type": "@keet/member-status",
1644 "version": 1
1645 },
1646 {
1647 "name": "profile",
1648 "required": true,
1649 "type": "@keet/member-profile",
1650 "version": 1
1651 }
1652 ]
1653 },
1654 {
1655 "name": "full-member",
1656 "namespace": "keet",
1657 "compact": false,
1658 "flagsPosition": 3,
1659 "fields": [
1660 {
1661 "name": "key",
1662 "required": true,
1663 "type": "@keet/member-key",
1664 "version": 1
1665 },
1666 {
1667 "name": "status",
1668 "required": true,
1669 "type": "@keet/member-status",
1670 "version": 1
1671 },
1672 {
1673 "name": "profile",
1674 "required": true,
1675 "type": "@keet/member-profile",
1676 "version": 1
1677 },
1678 {
1679 "name": "proofs",
1680 "type": "@keet/member-proofs",
1681 "version": 1
1682 }
1683 ]
1684 },
1685 {
1686 "name": "member-proofs",
1687 "namespace": "keet",
1688 "compact": false,
1689 "flagsPosition": 1,
1690 "fields": [
1691 {
1692 "name": "key",
1693 "required": true,
1694 "type": "@keet/member-key",
1695 "version": 1
1696 },
1697 {
1698 "name": "profileAttestation",
1699 "type": "buffer",
1700 "version": 1
1701 },
1702 {
1703 "name": "latestReceipt",
1704 "type": "buffer",
1705 "version": 1
1706 }
1707 ]
1708 },
1709 {
1710 "name": "update-member-operation",
1711 "namespace": "keet",
1712 "compact": false,
1713 "flagsPosition": -1,
1714 "fields": [
1715 {
1716 "name": "header",
1717 "required": true,
1718 "type": "@keet/operation-header",
1719 "version": 1
1720 },
1721 {
1722 "name": "member",
1723 "required": true,
1724 "type": "@keet/member-update",
1725 "version": 1
1726 }
1727 ]
1728 },
1729 {
1730 "name": "change-member-status-operation",
1731 "namespace": "keet",
1732 "compact": false,
1733 "flagsPosition": -1,
1734 "fields": [
1735 {
1736 "name": "header",
1737 "required": true,
1738 "type": "@keet/operation-header",
1739 "version": 1
1740 },
1741 {
1742 "name": "memberKey",
1743 "required": true,
1744 "type": "@keet/member-key",
1745 "version": 1
1746 },
1747 {
1748 "name": "key",
1749 "required": true,
1750 "type": "uint",
1751 "version": 1
1752 },
1753 {
1754 "name": "status",
1755 "required": true,
1756 "type": "@keet/member-moderation-status",
1757 "version": 1
1758 }
1759 ]
1760 },
1761 {
1762 "name": "change-member-role-operation",
1763 "namespace": "keet",
1764 "compact": false,
1765 "flagsPosition": 2,
1766 "fields": [
1767 {
1768 "name": "header",
1769 "required": true,
1770 "type": "@keet/operation-header",
1771 "version": 1
1772 },
1773 {
1774 "name": "key",
1775 "required": true,
1776 "type": "@keet/member-key",
1777 "version": 1
1778 },
1779 {
1780 "name": "isModerator",
1781 "type": "bool",
1782 "version": 1
1783 },
1784 {
1785 "name": "isAdmin",
1786 "type": "bool",
1787 "version": 1
1788 }
1789 ]
1790 },
1791 {
1792 "name": "remove-member-operation",
1793 "namespace": "keet",
1794 "compact": false,
1795 "flagsPosition": -1,
1796 "fields": [
1797 {
1798 "name": "header",
1799 "required": true,
1800 "type": "@keet/operation-header",
1801 "version": 1
1802 },
1803 {
1804 "name": "key",
1805 "required": true,
1806 "type": "@keet/member-key",
1807 "version": 1
1808 }
1809 ]
1810 },
1811 {
1812 "name": "member-activity",
1813 "namespace": "keet",
1814 "compact": false,
1815 "flagsPosition": -1,
1816 "fields": [
1817 {
1818 "name": "key",
1819 "required": true,
1820 "type": "@keet/member-key",
1821 "version": 1
1822 },
1823 {
1824 "name": "mentions",
1825 "required": true,
1826 "type": "uint",
1827 "version": 1
1828 }
1829 ]
1830 },
1831 {
1832 "name": "member-joined-event",
1833 "namespace": "keet",
1834 "compact": false,
1835 "flagsPosition": 0,
1836 "fields": [
1837 {
1838 "name": "memberKey",
1839 "type": "@keet/member-key",
1840 "version": 1
1841 }
1842 ]
1843 },
1844 {
1845 "name": "member-left-event",
1846 "namespace": "keet",
1847 "compact": false,
1848 "flagsPosition": 0,
1849 "fields": [
1850 {
1851 "name": "memberKey",
1852 "type": "@keet/member-key",
1853 "version": 1
1854 }
1855 ]
1856 },
1857 {
1858 "name": "title-changed-chat-event",
1859 "namespace": "keet",
1860 "compact": false,
1861 "flagsPosition": 0,
1862 "fields": [
1863 {
1864 "name": "from",
1865 "type": "string",
1866 "version": 1
1867 },
1868 {
1869 "name": "to",
1870 "type": "string",
1871 "version": 1
1872 }
1873 ]
1874 },
1875 {
1876 "name": "chat-event",
1877 "namespace": "keet",
1878 "compact": false,
1879 "flagsPosition": 0,
1880 "fields": [
1881 {
1882 "name": "memberJoined",
1883 "type": "@keet/member-joined-event",
1884 "version": 1
1885 },
1886 {
1887 "name": "memberLeft",
1888 "type": "@keet/member-left-event",
1889 "version": 1
1890 },
1891 {
1892 "name": "titleChanged",
1893 "type": "@keet/title-changed-chat-event",
1894 "version": 1
1895 },
1896 {
1897 "name": "callStarted",
1898 "type": "bool",
1899 "version": 1
1900 },
1901 {
1902 "name": "callHangup",
1903 "type": "bool",
1904 "version": 1
1905 },
1906 {
1907 "name": "callMissed",
1908 "type": "bool",
1909 "version": 1
1910 },
1911 {
1912 "name": "roomAvatarChanged",
1913 "type": "bool",
1914 "version": 3
1915 },
1916 {
1917 "name": "invitationCreated",
1918 "type": "bool",
1919 "version": 3
1920 },
1921 {
1922 "name": "memberRemoved",
1923 "type": "@keet/member-removed-event",
1924 "version": 3
1925 },
1926 {
1927 "name": "locationShared",
1928 "type": "@keet/location-shared-event",
1929 "version": 18
1930 }
1931 ]
1932 },
1933 {
1934 "name": "sendable-event",
1935 "namespace": "keet",
1936 "compact": false,
1937 "flagsPosition": 0,
1938 "fields": [
1939 {
1940 "name": "callStarted",
1941 "type": "bool",
1942 "version": 1
1943 },
1944 {
1945 "name": "callHangup",
1946 "type": "bool",
1947 "version": 1
1948 },
1949 {
1950 "name": "callMissed",
1951 "type": "bool",
1952 "version": 1
1953 },
1954 {
1955 "name": "locationShared",
1956 "type": "@keet/location-shared-event",
1957 "version": 18
1958 }
1959 ]
1960 },
1961 {
1962 "name": "display-range",
1963 "namespace": "keet",
1964 "compact": false,
1965 "flagsPosition": -1,
1966 "fields": [
1967 {
1968 "name": "start",
1969 "required": true,
1970 "type": "uint",
1971 "version": 1
1972 },
1973 {
1974 "name": "length",
1975 "required": true,
1976 "type": "uint",
1977 "version": 1
1978 }
1979 ]
1980 },
1981 {
1982 "name": "display-content-range",
1983 "namespace": "keet",
1984 "compact": false,
1985 "flagsPosition": -1,
1986 "fields": [
1987 {
1988 "name": "range",
1989 "required": true,
1990 "type": "@keet/display-range",
1991 "version": 1
1992 },
1993 {
1994 "name": "content",
1995 "required": true,
1996 "type": "string",
1997 "version": 1
1998 }
1999 ]
2000 },
2001 {
2002 "name": "mention-display-item",
2003 "namespace": "keet",
2004 "compact": false,
2005 "flagsPosition": -1,
2006 "fields": [
2007 {
2008 "name": "range",
2009 "required": true,
2010 "type": "@keet/display-range",
2011 "version": 1
2012 },
2013 {
2014 "name": "memberKey",
2015 "required": true,
2016 "type": "@keet/member-key",
2017 "version": 1
2018 }
2019 ]
2020 },
2021 {
2022 "name": "link-preview",
2023 "namespace": "keet",
2024 "compact": false,
2025 "flagsPosition": 0,
2026 "fields": [
2027 {
2028 "name": "title",
2029 "type": "string",
2030 "version": 1
2031 },
2032 {
2033 "name": "description",
2034 "type": "string",
2035 "version": 1
2036 },
2037 {
2038 "name": "file",
2039 "type": "@keet/file",
2040 "version": 1
2041 },
2042 {
2043 "name": "files",
2044 "array": true,
2045 "type": "uint",
2046 "version": 7
2047 }
2048 ]
2049 },
2050 {
2051 "name": "display-link-item",
2052 "namespace": "keet",
2053 "compact": false,
2054 "flagsPosition": 2,
2055 "fields": [
2056 {
2057 "name": "range",
2058 "required": true,
2059 "type": "@keet/display-range",
2060 "version": 1
2061 },
2062 {
2063 "name": "url",
2064 "required": true,
2065 "type": "string",
2066 "version": 1
2067 },
2068 {
2069 "name": "preview",
2070 "type": "@keet/link-preview",
2071 "version": 1
2072 }
2073 ]
2074 },
2075 {
2076 "name": "display",
2077 "namespace": "keet",
2078 "compact": false,
2079 "flagsPosition": 0,
2080 "fields": [
2081 {
2082 "name": "mention",
2083 "array": true,
2084 "type": "@keet/mention-display-item",
2085 "version": 1
2086 },
2087 {
2088 "name": "httpLink",
2089 "array": true,
2090 "type": "@keet/display-link-item",
2091 "version": 1
2092 },
2093 {
2094 "name": "pearLink",
2095 "array": true,
2096 "type": "@keet/display-link-item",
2097 "version": 1
2098 },
2099 {
2100 "name": "bold",
2101 "array": true,
2102 "type": "@keet/display-range",
2103 "version": 1
2104 },
2105 {
2106 "name": "italic",
2107 "array": true,
2108 "type": "@keet/display-range",
2109 "version": 1
2110 },
2111 {
2112 "name": "code",
2113 "array": true,
2114 "type": "@keet/display-range",
2115 "version": 1
2116 },
2117 {
2118 "name": "emoji",
2119 "array": true,
2120 "type": "@keet/display-content-range",
2121 "version": 1
2122 },
2123 {
2124 "name": "codeBlock",
2125 "array": true,
2126 "type": "@keet/display-range",
2127 "version": 1
2128 },
2129 {
2130 "name": "strike",
2131 "array": true,
2132 "type": "@keet/display-range",
2133 "version": 1
2134 },
2135 {
2136 "name": "translation",
2137 "array": true,
2138 "type": "@keet/translation-display-item",
2139 "version": 11
2140 }
2141 ]
2142 },
2143 {
2144 "name": "oplog-message",
2145 "namespace": "keet",
2146 "compact": false,
2147 "flagsPosition": 0,
2148 "fields": [
2149 {
2150 "name": "text",
2151 "type": "string",
2152 "version": 1
2153 },
2154 {
2155 "name": "files",
2156 "array": true,
2157 "type": "@keet/file",
2158 "version": 1
2159 },
2160 {
2161 "name": "display",
2162 "type": "@keet/display",
2163 "version": 1
2164 },
2165 {
2166 "name": "replyTo",
2167 "type": "@keet/oplog-id",
2168 "version": 1
2169 },
2170 {
2171 "name": "parent",
2172 "type": "@keet/oplog-id",
2173 "version": 1
2174 },
2175 {
2176 "name": "event",
2177 "type": "@keet/sendable-event",
2178 "version": 1
2179 },
2180 {
2181 "name": "forwarded",
2182 "type": "bool",
2183 "version": 18
2184 }
2185 ]
2186 },
2187 {
2188 "name": "index-message",
2189 "namespace": "keet",
2190 "compact": false,
2191 "flagsPosition": 0,
2192 "fields": [
2193 {
2194 "name": "text",
2195 "type": "string",
2196 "version": 1
2197 },
2198 {
2199 "name": "files",
2200 "array": true,
2201 "type": "uint",
2202 "version": 1
2203 },
2204 {
2205 "name": "display",
2206 "type": "@keet/display",
2207 "version": 1
2208 },
2209 {
2210 "name": "replyTo",
2211 "type": "@keet/oplog-id",
2212 "version": 1
2213 },
2214 {
2215 "name": "parent",
2216 "type": "@keet/oplog-id",
2217 "version": 1
2218 },
2219 {
2220 "name": "forwarded",
2221 "type": "bool",
2222 "version": 18
2223 }
2224 ]
2225 },
2226 {
2227 "name": "full-index-message",
2228 "namespace": "keet",
2229 "compact": false,
2230 "flagsPosition": 0,
2231 "fields": [
2232 {
2233 "name": "text",
2234 "type": "string",
2235 "version": 1
2236 },
2237 {
2238 "name": "files",
2239 "array": true,
2240 "type": "@keet/file",
2241 "version": 1
2242 },
2243 {
2244 "name": "display",
2245 "type": "@keet/display",
2246 "version": 1
2247 },
2248 {
2249 "name": "replyTo",
2250 "type": "@keet/oplog-id",
2251 "version": 1
2252 },
2253 {
2254 "name": "parent",
2255 "type": "@keet/oplog-id",
2256 "version": 1
2257 },
2258 {
2259 "name": "forwarded",
2260 "type": "bool",
2261 "version": 18
2262 }
2263 ]
2264 },
2265 {
2266 "name": "message-status",
2267 "namespace": "keet",
2268 "compact": false,
2269 "flagsPosition": 0,
2270 "fields": [
2271 {
2272 "name": "isEdited",
2273 "type": "bool",
2274 "version": 1
2275 },
2276 {
2277 "name": "isDeleted",
2278 "type": "bool",
2279 "version": 1
2280 },
2281 {
2282 "name": "isPinned",
2283 "type": "bool",
2284 "version": 1
2285 }
2286 ]
2287 },
2288 {
2289 "name": "message-index-id",
2290 "namespace": "keet",
2291 "compact": true,
2292 "flagsPosition": -1,
2293 "fields": [
2294 {
2295 "name": "thread",
2296 "required": true,
2297 "type": "uint",
2298 "version": 1
2299 },
2300 {
2301 "name": "index",
2302 "required": true,
2303 "type": "uint",
2304 "version": 1
2305 }
2306 ]
2307 },
2308 {
2309 "name": "thread",
2310 "namespace": "keet",
2311 "compact": false,
2312 "flagsPosition": 2,
2313 "fields": [
2314 {
2315 "name": "id",
2316 "required": true,
2317 "type": "uint",
2318 "version": 1
2319 },
2320 {
2321 "name": "count",
2322 "required": true,
2323 "type": "uint",
2324 "version": 1
2325 },
2326 {
2327 "name": "parent",
2328 "type": "@keet/oplog-id",
2329 "version": 1
2330 },
2331 {
2332 "name": "stats",
2333 "type": "@keet/stats",
2334 "version": 1
2335 }
2336 ]
2337 },
2338 {
2339 "name": "chat-message-record",
2340 "namespace": "keet",
2341 "compact": false,
2342 "flagsPosition": 4,
2343 "fields": [
2344 {
2345 "name": "id",
2346 "required": true,
2347 "type": "@keet/message-index-id",
2348 "version": 1
2349 },
2350 {
2351 "name": "oplog",
2352 "required": true,
2353 "type": "@keet/oplog-id",
2354 "version": 1
2355 },
2356 {
2357 "name": "clock",
2358 "required": true,
2359 "type": "uint",
2360 "version": 1
2361 },
2362 {
2363 "name": "timestamp",
2364 "required": true,
2365 "type": "uint",
2366 "version": 1
2367 },
2368 {
2369 "name": "editedAt",
2370 "type": "uint",
2371 "version": 1
2372 },
2373 {
2374 "name": "status",
2375 "required": true,
2376 "type": "@keet/message-status",
2377 "version": 1
2378 },
2379 {
2380 "name": "message",
2381 "type": "@keet/index-message",
2382 "version": 1
2383 },
2384 {
2385 "name": "event",
2386 "type": "@keet/chat-event",
2387 "version": 1
2388 }
2389 ]
2390 },
2391 {
2392 "name": "full-chat-message-record",
2393 "namespace": "keet",
2394 "compact": false,
2395 "flagsPosition": 4,
2396 "fields": [
2397 {
2398 "name": "id",
2399 "required": true,
2400 "type": "@keet/message-index-id",
2401 "version": 1
2402 },
2403 {
2404 "name": "oplog",
2405 "required": true,
2406 "type": "@keet/oplog-id",
2407 "version": 1
2408 },
2409 {
2410 "name": "clock",
2411 "required": true,
2412 "type": "uint",
2413 "version": 1
2414 },
2415 {
2416 "name": "timestamp",
2417 "required": true,
2418 "type": "uint",
2419 "version": 1
2420 },
2421 {
2422 "name": "editedAt",
2423 "type": "uint",
2424 "version": 1
2425 },
2426 {
2427 "name": "status",
2428 "required": true,
2429 "type": "@keet/message-status",
2430 "version": 1
2431 },
2432 {
2433 "name": "message",
2434 "type": "@keet/full-index-message",
2435 "version": 1
2436 },
2437 {
2438 "name": "event",
2439 "type": "@keet/chat-event",
2440 "version": 1
2441 }
2442 ]
2443 },
2444 {
2445 "name": "add-chat-message-operation",
2446 "namespace": "keet",
2447 "compact": false,
2448 "flagsPosition": -1,
2449 "fields": [
2450 {
2451 "name": "header",
2452 "required": true,
2453 "type": "@keet/operation-header",
2454 "version": 1
2455 },
2456 {
2457 "name": "message",
2458 "required": true,
2459 "type": "@keet/oplog-message",
2460 "version": 1
2461 }
2462 ]
2463 },
2464 {
2465 "name": "remove-chat-message-operation",
2466 "namespace": "keet",
2467 "compact": false,
2468 "flagsPosition": -1,
2469 "fields": [
2470 {
2471 "name": "header",
2472 "required": true,
2473 "type": "@keet/operation-header",
2474 "version": 1
2475 },
2476 {
2477 "name": "oplog",
2478 "required": true,
2479 "type": "@keet/oplog-id",
2480 "version": 1
2481 }
2482 ]
2483 },
2484 {
2485 "name": "update-chat-message-operation",
2486 "namespace": "keet",
2487 "compact": false,
2488 "flagsPosition": -1,
2489 "fields": [
2490 {
2491 "name": "header",
2492 "required": true,
2493 "type": "@keet/operation-header",
2494 "version": 1
2495 },
2496 {
2497 "name": "oplog",
2498 "required": true,
2499 "type": "@keet/oplog-id",
2500 "version": 1
2501 },
2502 {
2503 "name": "message",
2504 "required": true,
2505 "type": "@keet/oplog-message",
2506 "version": 1
2507 }
2508 ]
2509 },
2510 {
2511 "name": "pin-chat-message-operation",
2512 "namespace": "keet",
2513 "compact": false,
2514 "flagsPosition": 2,
2515 "fields": [
2516 {
2517 "name": "header",
2518 "required": true,
2519 "type": "@keet/operation-header",
2520 "version": 1
2521 },
2522 {
2523 "name": "oplog",
2524 "required": true,
2525 "type": "@keet/oplog-id",
2526 "version": 1
2527 },
2528 {
2529 "name": "isPinned",
2530 "type": "bool",
2531 "version": 1
2532 }
2533 ]
2534 },
2535 {
2536 "name": "reaction",
2537 "namespace": "keet",
2538 "compact": false,
2539 "flagsPosition": -1,
2540 "fields": [
2541 {
2542 "name": "id",
2543 "required": true,
2544 "type": "@keet/message-index-id",
2545 "version": 1
2546 },
2547 {
2548 "name": "sender",
2549 "required": true,
2550 "type": "@keet/member-key",
2551 "version": 1
2552 },
2553 {
2554 "name": "clock",
2555 "required": true,
2556 "type": "uint",
2557 "version": 1
2558 },
2559 {
2560 "name": "reaction",
2561 "required": true,
2562 "type": "string",
2563 "version": 1
2564 }
2565 ]
2566 },
2567 {
2568 "name": "reactions-summary",
2569 "namespace": "keet",
2570 "compact": false,
2571 "flagsPosition": -1,
2572 "fields": [
2573 {
2574 "name": "text",
2575 "required": true,
2576 "type": "string",
2577 "version": 1
2578 },
2579 {
2580 "name": "count",
2581 "required": true,
2582 "type": "uint",
2583 "version": 1
2584 }
2585 ]
2586 },
2587 {
2588 "name": "reactions-digest",
2589 "namespace": "keet",
2590 "compact": false,
2591 "flagsPosition": 3,
2592 "fields": [
2593 {
2594 "name": "id",
2595 "required": true,
2596 "type": "@keet/message-index-id",
2597 "version": 1
2598 },
2599 {
2600 "name": "total",
2601 "required": true,
2602 "type": "uint",
2603 "version": 1
2604 },
2605 {
2606 "name": "reactions",
2607 "required": true,
2608 "array": true,
2609 "type": "@keet/reactions-summary",
2610 "version": 1
2611 },
2612 {
2613 "name": "editedAt",
2614 "type": "uint",
2615 "version": 11
2616 }
2617 ]
2618 },
2619 {
2620 "name": "add-reaction-operation",
2621 "namespace": "keet",
2622 "compact": false,
2623 "flagsPosition": -1,
2624 "fields": [
2625 {
2626 "name": "header",
2627 "required": true,
2628 "type": "@keet/operation-header",
2629 "version": 1
2630 },
2631 {
2632 "name": "oplog",
2633 "required": true,
2634 "type": "@keet/oplog-id",
2635 "version": 1
2636 },
2637 {
2638 "name": "reaction",
2639 "required": true,
2640 "type": "string",
2641 "version": 1
2642 }
2643 ]
2644 },
2645 {
2646 "name": "remove-reaction-operation",
2647 "namespace": "keet",
2648 "compact": false,
2649 "flagsPosition": -1,
2650 "fields": [
2651 {
2652 "name": "header",
2653 "required": true,
2654 "type": "@keet/operation-header",
2655 "version": 1
2656 },
2657 {
2658 "name": "oplog",
2659 "required": true,
2660 "type": "@keet/oplog-id",
2661 "version": 1
2662 },
2663 {
2664 "name": "reaction",
2665 "required": true,
2666 "type": "string",
2667 "version": 1
2668 }
2669 ]
2670 },
2671 {
2672 "name": "update-room-config-operation",
2673 "namespace": "keet",
2674 "compact": false,
2675 "flagsPosition": -1,
2676 "fields": [
2677 {
2678 "name": "header",
2679 "required": true,
2680 "type": "@keet/operation-header",
2681 "version": 1
2682 },
2683 {
2684 "name": "key",
2685 "required": true,
2686 "type": "uint",
2687 "version": 1
2688 },
2689 {
2690 "name": "config",
2691 "required": true,
2692 "type": "@keet/room-config",
2693 "version": 1
2694 }
2695 ]
2696 },
2697 {
2698 "name": "group-member",
2699 "namespace": "keet",
2700 "compact": false,
2701 "flagsPosition": 2,
2702 "fields": [
2703 {
2704 "name": "memberKey",
2705 "required": true,
2706 "type": "@keet/member-key",
2707 "version": 1
2708 },
2709 {
2710 "name": "displayName",
2711 "required": true,
2712 "type": "string",
2713 "version": 1
2714 },
2715 {
2716 "name": "avatar",
2717 "type": "@keet/image-file",
2718 "version": 1
2719 }
2720 ]
2721 },
2722 {
2723 "name": "user-registry-info",
2724 "namespace": "keet",
2725 "compact": false,
2726 "flagsPosition": 1,
2727 "fields": [
2728 {
2729 "name": "key",
2730 "required": true,
2731 "type": "@keet/core-key",
2732 "version": 1
2733 },
2734 {
2735 "name": "username",
2736 "type": "string",
2737 "version": 1
2738 }
2739 ]
2740 },
2741 {
2742 "name": "room-identity",
2743 "namespace": "keet",
2744 "compact": false,
2745 "flagsPosition": 1,
2746 "fields": [
2747 {
2748 "name": "publicKey",
2749 "required": true,
2750 "type": "@keet/member-key",
2751 "version": 1
2752 },
2753 {
2754 "name": "discoveryCoreKey",
2755 "type": "@keet/core-key",
2756 "version": 1
2757 },
2758 {
2759 "name": "userRegistry",
2760 "type": "@keet/user-registry-info",
2761 "version": 1
2762 }
2763 ]
2764 },
2765 {
2766 "name": "genesis-operation",
2767 "namespace": "keet",
2768 "compact": false,
2769 "flagsPosition": 3,
2770 "fields": [
2771 {
2772 "name": "header",
2773 "required": true,
2774 "type": "@keet/operation-header",
2775 "version": 1
2776 },
2777 {
2778 "name": "digest",
2779 "required": true,
2780 "type": "@keet/system-digest",
2781 "version": 1
2782 },
2783 {
2784 "name": "capabilities",
2785 "required": true,
2786 "type": "@keet/room-seed",
2787 "version": 1
2788 },
2789 {
2790 "name": "config",
2791 "type": "@keet/room-config",
2792 "version": 1
2793 },
2794 {
2795 "name": "identity",
2796 "type": "@keet/room-identity",
2797 "version": 1
2798 },
2799 {
2800 "name": "bootstrapDevice",
2801 "type": "@keet/device-update",
2802 "version": 1
2803 },
2804 {
2805 "name": "initialMembers",
2806 "array": true,
2807 "type": "@keet/member-update",
2808 "version": 1
2809 }
2810 ]
2811 },
2812 {
2813 "name": "upgrade-operation",
2814 "namespace": "keet",
2815 "compact": false,
2816 "flagsPosition": -1,
2817 "fields": [
2818 {
2819 "name": "header",
2820 "required": true,
2821 "type": "@keet/operation-header",
2822 "version": 1
2823 },
2824 {
2825 "name": "version",
2826 "required": true,
2827 "type": "uint",
2828 "version": 1
2829 }
2830 ]
2831 },
2832 {
2833 "name": "update-system-settings-operation",
2834 "namespace": "keet",
2835 "compact": false,
2836 "flagsPosition": -1,
2837 "fields": [
2838 {
2839 "name": "header",
2840 "required": true,
2841 "type": "@keet/operation-header",
2842 "version": 1
2843 },
2844 {
2845 "name": "key",
2846 "required": true,
2847 "type": "uint",
2848 "version": 1
2849 },
2850 {
2851 "name": "settings",
2852 "required": true,
2853 "type": "@keet/system-settings",
2854 "version": 1
2855 }
2856 ]
2857 },
2858 {
2859 "name": "contact",
2860 "namespace": "keet-private-id",
2861 "compact": false,
2862 "flagsPosition": 2,
2863 "fields": [
2864 {
2865 "name": "memberKey",
2866 "required": true,
2867 "type": "@keet/member-key",
2868 "version": 1
2869 },
2870 {
2871 "name": "status",
2872 "required": true,
2873 "type": "@keet-private-id/contact-status",
2874 "version": 1
2875 },
2876 {
2877 "name": "mailbox",
2878 "type": "@keet/public-key",
2879 "version": 1
2880 },
2881 {
2882 "name": "roomKey",
2883 "type": "@keet/room-key",
2884 "version": 1
2885 }
2886 ]
2887 },
2888 {
2889 "name": "v3-room-migration-info",
2890 "namespace": "keet-private-id",
2891 "compact": false,
2892 "flagsPosition": -1,
2893 "fields": [
2894 {
2895 "name": "roomKey",
2896 "required": true,
2897 "type": "@keet/room-key",
2898 "version": 1
2899 },
2900 {
2901 "name": "encryptionKey",
2902 "required": true,
2903 "type": "@keet/encryption-key",
2904 "version": 1
2905 },
2906 {
2907 "name": "seed",
2908 "required": true,
2909 "type": "fixed32",
2910 "version": 1
2911 },
2912 {
2913 "name": "initiator",
2914 "required": true,
2915 "type": "@keet/head",
2916 "version": 1
2917 },
2918 {
2919 "name": "fastForwardTo",
2920 "required": true,
2921 "type": "fixed32",
2922 "version": 1
2923 }
2924 ]
2925 },
2926 {
2927 "name": "run-v3-migration-operation",
2928 "namespace": "keet-private-id",
2929 "compact": false,
2930 "flagsPosition": -1,
2931 "fields": [
2932 {
2933 "name": "sharedRooms",
2934 "required": true,
2935 "array": true,
2936 "type": "@keet-private-id/v3-room-migration-info",
2937 "version": 1
2938 },
2939 {
2940 "name": "blockedContacts",
2941 "required": true,
2942 "array": true,
2943 "type": "@keet/member-key",
2944 "version": 1
2945 }
2946 ]
2947 },
2948 {
2949 "name": "update-identity-operation",
2950 "namespace": "keet-private-id",
2951 "compact": false,
2952 "flagsPosition": -1,
2953 "fields": [
2954 {
2955 "name": "identity",
2956 "required": true,
2957 "type": "@keet/room-identity",
2958 "version": 1
2959 }
2960 ]
2961 },
2962 {
2963 "name": "counters",
2964 "namespace": "keet-private-id",
2965 "compact": false,
2966 "flagsPosition": -1,
2967 "fields": [
2968 {
2969 "name": "rooms",
2970 "required": true,
2971 "type": "uint",
2972 "version": 1
2973 },
2974 {
2975 "name": "contacts",
2976 "required": true,
2977 "type": "uint",
2978 "version": 1
2979 }
2980 ]
2981 },
2982 {
2983 "name": "stats",
2984 "namespace": "keet-private-id",
2985 "compact": false,
2986 "flagsPosition": -1,
2987 "fields": [
2988 {
2989 "name": "rooms",
2990 "required": true,
2991 "type": "uint",
2992 "version": 1
2993 },
2994 {
2995 "name": "contactRequests",
2996 "required": true,
2997 "type": "uint",
2998 "version": 1
2999 }
3000 ]
3001 },
3002 {
3003 "name": "add-entropy-operation",
3004 "namespace": "keet-private-id",
3005 "compact": false,
3006 "flagsPosition": -1,
3007 "fields": [
3008 {
3009 "name": "entropy",
3010 "required": true,
3011 "type": "buffer",
3012 "version": 1
3013 }
3014 ]
3015 },
3016 {
3017 "name": "pending-invitation-identity",
3018 "namespace": "keet-private-id",
3019 "compact": false,
3020 "flagsPosition": -1,
3021 "fields": [
3022 {
3023 "name": "publicKey",
3024 "required": true,
3025 "type": "@keet/member-key",
3026 "version": 1
3027 },
3028 {
3029 "name": "devicePublicKey",
3030 "required": true,
3031 "type": "@keet/public-key",
3032 "version": 1
3033 },
3034 {
3035 "name": "writerKey",
3036 "required": true,
3037 "type": "@keet/device-key",
3038 "version": 1
3039 }
3040 ]
3041 },
3042 {
3043 "name": "pending-invitation",
3044 "namespace": "keet-private-id",
3045 "compact": false,
3046 "flagsPosition": 6,
3047 "fields": [
3048 {
3049 "name": "id",
3050 "required": true,
3051 "type": "fixed32",
3052 "version": 1
3053 },
3054 {
3055 "name": "invitationSeed",
3056 "required": true,
3057 "type": "fixed32",
3058 "version": 1
3059 },
3060 {
3061 "name": "mailbox",
3062 "required": true,
3063 "type": "fixed32",
3064 "version": 1
3065 },
3066 {
3067 "name": "responseKeyPair",
3068 "required": true,
3069 "type": "@keet/signing-keypair",
3070 "version": 1
3071 },
3072 {
3073 "name": "initiator",
3074 "required": true,
3075 "type": "@keet/head",
3076 "version": 1
3077 },
3078 {
3079 "name": "inviter",
3080 "required": true,
3081 "type": "@keet/head",
3082 "version": 1
3083 },
3084 {
3085 "name": "identity",
3086 "type": "@keet-private-id/pending-invitation-identity",
3087 "version": 1
3088 },
3089 {
3090 "name": "buildType",
3091 "type": "@keet/build-type",
3092 "version": 20
3093 }
3094 ]
3095 },
3096 {
3097 "name": "resolve-pending-invitation-operation",
3098 "namespace": "keet-private-id",
3099 "compact": false,
3100 "flagsPosition": -1,
3101 "fields": [
3102 {
3103 "name": "header",
3104 "required": true,
3105 "type": "@keet/operation-header",
3106 "version": 1
3107 },
3108 {
3109 "name": "blindResponse",
3110 "required": true,
3111 "type": "buffer",
3112 "version": 1
3113 }
3114 ]
3115 },
3116 {
3117 "name": "add-pending-invitation-operation",
3118 "namespace": "keet-private-id",
3119 "compact": false,
3120 "flagsPosition": -1,
3121 "fields": [
3122 {
3123 "name": "header",
3124 "required": true,
3125 "type": "@keet/operation-header",
3126 "version": 1
3127 },
3128 {
3129 "name": "invitation",
3130 "required": true,
3131 "type": "@keet-private-id/pending-invitation",
3132 "version": 1
3133 }
3134 ]
3135 },
3136 {
3137 "name": "remove-pending-invitation-operation",
3138 "namespace": "keet-private-id",
3139 "compact": false,
3140 "flagsPosition": -1,
3141 "fields": [
3142 {
3143 "name": "header",
3144 "required": true,
3145 "type": "@keet/operation-header",
3146 "version": 1
3147 },
3148 {
3149 "name": "id",
3150 "required": true,
3151 "type": "fixed32",
3152 "version": 1
3153 }
3154 ]
3155 },
3156 {
3157 "name": "identity-swap",
3158 "namespace": "keet-private-id",
3159 "compact": false,
3160 "flagsPosition": 2,
3161 "fields": [
3162 {
3163 "name": "publicKey",
3164 "required": true,
3165 "type": "@keet/member-key",
3166 "version": 1
3167 },
3168 {
3169 "name": "devicePublicKey",
3170 "required": true,
3171 "type": "@keet/public-key",
3172 "version": 1
3173 },
3174 {
3175 "name": "privateProfileKey",
3176 "type": "@keet/room-key",
3177 "version": 1
3178 },
3179 {
3180 "name": "deviceKeyPair",
3181 "type": "@keet/signing-keypair",
3182 "version": 1
3183 },
3184 {
3185 "name": "deviceProof",
3186 "required": true,
3187 "type": "buffer",
3188 "version": 1
3189 }
3190 ]
3191 },
3192 {
3193 "name": "room-status",
3194 "namespace": "keet-private-id",
3195 "compact": false,
3196 "flagsPosition": 0,
3197 "fields": [
3198 {
3199 "name": "isActive",
3200 "type": "bool",
3201 "version": 1
3202 },
3203 {
3204 "name": "isFullyMuted",
3205 "type": "bool",
3206 "version": 1
3207 },
3208 {
3209 "name": "isMentionsOnlyMuted",
3210 "type": "bool",
3211 "version": 1
3212 },
3213 {
3214 "name": "isReadOnly",
3215 "type": "bool",
3216 "version": 9
3217 },
3218 {
3219 "name": "isFavorite",
3220 "type": "bool",
3221 "version": 18
3222 }
3223 ]
3224 },
3225 {
3226 "name": "room",
3227 "namespace": "keet-private-id",
3228 "compact": false,
3229 "flagsPosition": 5,
3230 "fields": [
3231 {
3232 "name": "roomKey",
3233 "required": true,
3234 "type": "@keet/room-key",
3235 "version": 1
3236 },
3237 {
3238 "name": "encryptionKey",
3239 "required": true,
3240 "type": "@keet/encryption-key",
3241 "version": 1
3242 },
3243 {
3244 "name": "mailbox",
3245 "required": true,
3246 "type": "@keet/public-key",
3247 "version": 1
3248 },
3249 {
3250 "name": "status",
3251 "required": true,
3252 "type": "@keet-private-id/room-status",
3253 "version": 1
3254 },
3255 {
3256 "name": "clock",
3257 "required": true,
3258 "type": "uint",
3259 "version": 1
3260 },
3261 {
3262 "name": "initiator",
3263 "type": "@keet/head",
3264 "version": 1
3265 },
3266 {
3267 "name": "fastForwardTo",
3268 "type": "fixed32",
3269 "version": 1
3270 },
3271 {
3272 "name": "identitySwap",
3273 "type": "@keet-private-id/identity-swap",
3274 "version": 1
3275 },
3276 {
3277 "name": "identitySwapV2",
3278 "type": "@keet-private-id/pending-invitation-identity",
3279 "version": 6
3280 },
3281 {
3282 "name": "contact",
3283 "type": "@keet/member-key",
3284 "version": 10
3285 }
3286 ]
3287 },
3288 {
3289 "name": "add-room-operation",
3290 "namespace": "keet-private-id",
3291 "compact": false,
3292 "flagsPosition": 4,
3293 "fields": [
3294 {
3295 "name": "header",
3296 "required": true,
3297 "type": "@keet/operation-header",
3298 "version": 1
3299 },
3300 {
3301 "name": "roomKey",
3302 "required": true,
3303 "type": "@keet/room-key",
3304 "version": 1
3305 },
3306 {
3307 "name": "encryptionKey",
3308 "required": true,
3309 "type": "@keet/encryption-key",
3310 "version": 1
3311 },
3312 {
3313 "name": "mailbox",
3314 "required": true,
3315 "type": "@keet/public-key",
3316 "version": 1
3317 },
3318 {
3319 "name": "fastForwardTo",
3320 "type": "fixed32",
3321 "version": 1
3322 },
3323 {
3324 "name": "initiator",
3325 "type": "@keet/head",
3326 "version": 1
3327 },
3328 {
3329 "name": "dm",
3330 "type": "@keet/member-key",
3331 "version": 1
3332 },
3333 {
3334 "name": "isReadOnly",
3335 "type": "bool",
3336 "version": 9
3337 }
3338 ]
3339 },
3340 {
3341 "name": "remove-room-operation",
3342 "namespace": "keet-private-id",
3343 "compact": false,
3344 "flagsPosition": -1,
3345 "fields": [
3346 {
3347 "name": "header",
3348 "required": true,
3349 "type": "@keet/operation-header",
3350 "version": 1
3351 },
3352 {
3353 "name": "discoveryKey",
3354 "required": true,
3355 "type": "@keet/room-discovery-key",
3356 "version": 1
3357 }
3358 ]
3359 },
3360 {
3361 "name": "update-room-status-operation",
3362 "namespace": "keet-private-id",
3363 "compact": false,
3364 "flagsPosition": -1,
3365 "fields": [
3366 {
3367 "name": "header",
3368 "required": true,
3369 "type": "@keet/operation-header",
3370 "version": 1
3371 },
3372 {
3373 "name": "roomKey",
3374 "required": true,
3375 "type": "@keet/room-key",
3376 "version": 1
3377 },
3378 {
3379 "name": "key",
3380 "required": true,
3381 "type": "uint",
3382 "version": 1
3383 },
3384 {
3385 "name": "status",
3386 "required": true,
3387 "type": "@keet-private-id/room-status",
3388 "version": 1
3389 }
3390 ]
3391 },
3392 {
3393 "name": "contact-status",
3394 "namespace": "keet-private-id",
3395 "compact": false,
3396 "flagsPosition": 0,
3397 "fields": [
3398 {
3399 "name": "isBlocked",
3400 "type": "bool",
3401 "version": 1
3402 }
3403 ]
3404 },
3405 {
3406 "name": "contact-record",
3407 "namespace": "keet-private-id",
3408 "compact": false,
3409 "flagsPosition": 3,
3410 "fields": [
3411 {
3412 "name": "memberKey",
3413 "required": true,
3414 "type": "@keet/member-key",
3415 "version": 1
3416 },
3417 {
3418 "name": "clock",
3419 "required": true,
3420 "type": "uint",
3421 "version": 1
3422 },
3423 {
3424 "name": "status",
3425 "required": true,
3426 "type": "@keet-private-id/contact-status",
3427 "version": 1
3428 },
3429 {
3430 "name": "mailbox",
3431 "type": "@keet/public-key",
3432 "version": 1
3433 },
3434 {
3435 "name": "roomKey",
3436 "type": "@keet/room-key",
3437 "version": 1
3438 }
3439 ]
3440 },
3441 {
3442 "name": "add-contact-operation",
3443 "namespace": "keet-private-id",
3444 "compact": false,
3445 "flagsPosition": -1,
3446 "fields": [
3447 {
3448 "name": "header",
3449 "required": true,
3450 "type": "@keet/operation-header",
3451 "version": 1
3452 },
3453 {
3454 "name": "contact",
3455 "required": true,
3456 "type": "@keet-private-id/contact",
3457 "version": 1
3458 }
3459 ]
3460 },
3461 {
3462 "name": "update-contact-status-operation",
3463 "namespace": "keet-private-id",
3464 "compact": false,
3465 "flagsPosition": -1,
3466 "fields": [
3467 {
3468 "name": "header",
3469 "required": true,
3470 "type": "@keet/operation-header",
3471 "version": 1
3472 },
3473 {
3474 "name": "memberKey",
3475 "required": true,
3476 "type": "@keet/member-key",
3477 "version": 1
3478 },
3479 {
3480 "name": "key",
3481 "required": true,
3482 "type": "uint",
3483 "version": 1
3484 },
3485 {
3486 "name": "status",
3487 "required": true,
3488 "type": "@keet-private-id/contact-status",
3489 "version": 1
3490 }
3491 ]
3492 },
3493 {
3494 "name": "remove-contact-operation",
3495 "namespace": "keet-private-id",
3496 "compact": false,
3497 "flagsPosition": -1,
3498 "fields": [
3499 {
3500 "name": "header",
3501 "required": true,
3502 "type": "@keet/operation-header",
3503 "version": 1
3504 },
3505 {
3506 "name": "memberKey",
3507 "required": true,
3508 "type": "@keet/member-key",
3509 "version": 1
3510 }
3511 ]
3512 },
3513 {
3514 "name": "contact-request-status",
3515 "namespace": "keet-private-id",
3516 "compact": false,
3517 "flagsPosition": 0,
3518 "fields": [
3519 {
3520 "name": "isPending",
3521 "type": "bool",
3522 "version": 1
3523 },
3524 {
3525 "name": "isAccepted",
3526 "type": "bool",
3527 "version": 1
3528 },
3529 {
3530 "name": "isRejected",
3531 "type": "bool",
3532 "version": 1
3533 },
3534 {
3535 "name": "isDiscarded",
3536 "type": "bool",
3537 "version": 1
3538 },
3539 {
3540 "name": "isSeen",
3541 "type": "bool",
3542 "version": 1
3543 }
3544 ]
3545 },
3546 {
3547 "name": "contact-request-body",
3548 "namespace": "keet-private-id",
3549 "compact": false,
3550 "flagsPosition": 3,
3551 "fields": [
3552 {
3553 "name": "sender",
3554 "required": true,
3555 "type": "@keet/member-update",
3556 "version": 1
3557 },
3558 {
3559 "name": "keys",
3560 "required": true,
3561 "type": "@keet/room-keys",
3562 "version": 1
3563 },
3564 {
3565 "name": "mailbox",
3566 "required": true,
3567 "type": "@keet/public-key",
3568 "version": 1
3569 },
3570 {
3571 "name": "message",
3572 "type": "string",
3573 "version": 1
3574 }
3575 ]
3576 },
3577 {
3578 "name": "contact-request",
3579 "namespace": "keet-private-id",
3580 "compact": false,
3581 "flagsPosition": -1,
3582 "fields": [
3583 {
3584 "name": "body",
3585 "required": true,
3586 "type": "@keet-private-id/contact-request-body",
3587 "version": 1
3588 },
3589 {
3590 "name": "attestation",
3591 "required": true,
3592 "type": "@keet/identity-attestation",
3593 "version": 1
3594 }
3595 ]
3596 },
3597 {
3598 "name": "contact-request-record",
3599 "namespace": "keet-private-id",
3600 "compact": false,
3601 "flagsPosition": 6,
3602 "fields": [
3603 {
3604 "name": "memberKey",
3605 "required": true,
3606 "type": "@keet/member-key",
3607 "version": 1
3608 },
3609 {
3610 "name": "clock",
3611 "required": true,
3612 "type": "uint",
3613 "version": 1
3614 },
3615 {
3616 "name": "sender",
3617 "required": true,
3618 "type": "@keet/member-profile",
3619 "version": 1
3620 },
3621 {
3622 "name": "status",
3623 "required": true,
3624 "type": "@keet-private-id/contact-request-status",
3625 "version": 1
3626 },
3627 {
3628 "name": "keys",
3629 "required": true,
3630 "type": "@keet/room-keys",
3631 "version": 1
3632 },
3633 {
3634 "name": "mailbox",
3635 "required": true,
3636 "type": "@keet/public-key",
3637 "version": 1
3638 },
3639 {
3640 "name": "message",
3641 "type": "string",
3642 "version": 1
3643 },
3644 {
3645 "name": "sentAt",
3646 "type": "uint",
3647 "version": 11
3648 }
3649 ]
3650 },
3651 {
3652 "name": "add-contact-request-operation",
3653 "namespace": "keet-private-id",
3654 "compact": false,
3655 "flagsPosition": -1,
3656 "fields": [
3657 {
3658 "name": "header",
3659 "required": true,
3660 "type": "@keet/operation-header",
3661 "version": 1
3662 },
3663 {
3664 "name": "blindRequest",
3665 "required": true,
3666 "type": "buffer",
3667 "version": 1
3668 }
3669 ]
3670 },
3671 {
3672 "name": "update-contact-request-status-operation",
3673 "namespace": "keet-private-id",
3674 "compact": false,
3675 "flagsPosition": 4,
3676 "fields": [
3677 {
3678 "name": "header",
3679 "required": true,
3680 "type": "@keet/operation-header",
3681 "version": 1
3682 },
3683 {
3684 "name": "memberKey",
3685 "required": true,
3686 "type": "@keet/member-key",
3687 "version": 1
3688 },
3689 {
3690 "name": "key",
3691 "required": true,
3692 "type": "uint",
3693 "version": 1
3694 },
3695 {
3696 "name": "status",
3697 "required": true,
3698 "type": "@keet-private-id/contact-request-status",
3699 "version": 1
3700 },
3701 {
3702 "name": "roomKey",
3703 "type": "@keet/room-key",
3704 "version": 10
3705 }
3706 ]
3707 },
3708 {
3709 "name": "profile-discovery-record-v1",
3710 "namespace": "keet-private-id",
3711 "compact": false,
3712 "flagsPosition": -1,
3713 "fields": [
3714 {
3715 "name": "timestamp",
3716 "required": true,
3717 "type": "uint",
3718 "version": 1
3719 },
3720 {
3721 "name": "key",
3722 "required": true,
3723 "type": "@keet/core-key",
3724 "version": 1
3725 },
3726 {
3727 "name": "mailbox",
3728 "required": true,
3729 "type": "@keet/public-key",
3730 "version": 1
3731 }
3732 ]
3733 },
3734 {
3735 "name": "profile-discovery-record",
3736 "namespace": "keet-private-id",
3737 "versions": [
3738 {
3739 "type": "@keet-private-id/profile-discovery-record-v1",
3740 "map": null,
3741 "version": 1
3742 }
3743 ]
3744 },
3745 {
3746 "name": "add-file-preview-operation",
3747 "namespace": "keet",
3748 "compact": false,
3749 "flagsPosition": 4,
3750 "fields": [
3751 {
3752 "name": "header",
3753 "required": true,
3754 "type": "@keet/operation-header",
3755 "version": 2
3756 },
3757 {
3758 "name": "oplog",
3759 "required": true,
3760 "type": "@keet/oplog-id",
3761 "version": 2
3762 },
3763 {
3764 "name": "index",
3765 "required": true,
3766 "type": "uint",
3767 "version": 2
3768 },
3769 {
3770 "name": "preview",
3771 "required": true,
3772 "type": "@keet/image-file",
3773 "version": 2
3774 },
3775 {
3776 "name": "displayType",
3777 "type": "@keet/display-type",
3778 "version": 7
3779 }
3780 ]
3781 },
3782 {
3783 "name": "member-removed-event",
3784 "namespace": "keet",
3785 "compact": false,
3786 "flagsPosition": 0,
3787 "fields": [
3788 {
3789 "name": "memberKey",
3790 "type": "@keet/member-key",
3791 "version": 3
3792 }
3793 ]
3794 },
3795 {
3796 "name": "member-contact-info",
3797 "namespace": "keet",
3798 "compact": false,
3799 "flagsPosition": -1,
3800 "fields": [
3801 {
3802 "name": "profile",
3803 "required": true,
3804 "type": "@keet/member-profile",
3805 "version": 4
3806 },
3807 {
3808 "name": "attestation",
3809 "required": true,
3810 "type": "@keet/identity-attestation",
3811 "version": 4
3812 }
3813 ]
3814 },
3815 {
3816 "name": "remove-device-operation",
3817 "namespace": "keet",
3818 "compact": false,
3819 "flagsPosition": -1,
3820 "fields": [
3821 {
3822 "name": "header",
3823 "required": true,
3824 "type": "@keet/operation-header",
3825 "version": 5
3826 },
3827 {
3828 "name": "key",
3829 "required": true,
3830 "type": "@keet/device-key",
3831 "version": 5
3832 }
3833 ]
3834 },
3835 {
3836 "name": "device-identity",
3837 "namespace": "keet",
3838 "compact": false,
3839 "flagsPosition": -1,
3840 "fields": [
3841 {
3842 "name": "deviceKey",
3843 "required": true,
3844 "type": "@keet/device-key",
3845 "version": 6
3846 },
3847 {
3848 "name": "privateProfileIdentity",
3849 "required": true,
3850 "type": "@keet/identity-attestation",
3851 "version": 6
3852 },
3853 {
3854 "name": "deviceProof",
3855 "required": true,
3856 "type": "buffer",
3857 "version": 6
3858 }
3859 ]
3860 },
3861 {
3862 "name": "readonly-room-invitation",
3863 "namespace": "keet",
3864 "compact": false,
3865 "flagsPosition": 3,
3866 "fields": [
3867 {
3868 "name": "roomKey",
3869 "required": true,
3870 "type": "fixed32",
3871 "version": 6
3872 },
3873 {
3874 "name": "encryptionKey",
3875 "required": true,
3876 "type": "fixed32",
3877 "version": 6
3878 },
3879 {
3880 "name": "seed",
3881 "required": true,
3882 "type": "fixed32",
3883 "version": 6
3884 },
3885 {
3886 "name": "fastForwardTo",
3887 "type": "fixed32",
3888 "version": 6
3889 }
3890 ]
3891 },
3892 {
3893 "name": "identity-swap-v2",
3894 "namespace": "keet-private-id",
3895 "compact": false,
3896 "flagsPosition": 3,
3897 "fields": [
3898 {
3899 "name": "publicKey",
3900 "required": true,
3901 "type": "@keet/member-key",
3902 "version": 6
3903 },
3904 {
3905 "name": "writerKey",
3906 "required": true,
3907 "type": "@keet/core-key",
3908 "version": 6
3909 },
3910 {
3911 "name": "devicePublicKey",
3912 "required": true,
3913 "type": "@keet/public-key",
3914 "version": 6
3915 },
3916 {
3917 "name": "privateProfileKey",
3918 "type": "@keet/room-key",
3919 "version": 6
3920 }
3921 ]
3922 },
3923 {
3924 "name": "activate-contact-room-operation",
3925 "namespace": "keet-private-id",
3926 "compact": false,
3927 "flagsPosition": -1,
3928 "fields": [
3929 {
3930 "name": "header",
3931 "required": true,
3932 "type": "@keet/operation-header",
3933 "version": 6
3934 },
3935 {
3936 "name": "memberKey",
3937 "required": true,
3938 "type": "@keet/member-key",
3939 "version": 6
3940 }
3941 ]
3942 },
3943 {
3944 "name": "display-type",
3945 "namespace": "keet",
3946 "offset": 1,
3947 "enum": [
3948 {
3949 "key": "HttpLink",
3950 "version": 7
3951 },
3952 {
3953 "key": "PearLink",
3954 "version": 7
3955 }
3956 ],
3957 "strings": false
3958 },
3959 {
3960 "name": "test-increment-operation",
3961 "namespace": "keet",
3962 "compact": false,
3963 "flagsPosition": -1,
3964 "fields": [
3965 {
3966 "name": "header",
3967 "required": true,
3968 "type": "@keet/operation-header",
3969 "version": 8
3970 },
3971 {
3972 "name": "value",
3973 "required": true,
3974 "type": "uint",
3975 "version": 8
3976 }
3977 ]
3978 },
3979 {
3980 "name": "test-collection-record-1",
3981 "namespace": "keet",
3982 "compact": false,
3983 "flagsPosition": -1,
3984 "fields": [
3985 {
3986 "name": "key",
3987 "required": true,
3988 "type": "uint",
3989 "version": 8
3990 },
3991 {
3992 "name": "value",
3993 "required": true,
3994 "type": "uint",
3995 "version": 8
3996 }
3997 ]
3998 },
3999 {
4000 "name": "migrate-abi-operation",
4001 "namespace": "keet",
4002 "compact": false,
4003 "flagsPosition": 3,
4004 "fields": [
4005 {
4006 "name": "header",
4007 "required": true,
4008 "type": "@keet/operation-header",
4009 "version": 10
4010 },
4011 {
4012 "name": "from",
4013 "required": true,
4014 "type": "uint",
4015 "version": 10
4016 },
4017 {
4018 "name": "to",
4019 "required": true,
4020 "type": "uint",
4021 "version": 10
4022 },
4023 {
4024 "name": "buildType",
4025 "type": "@keet/build-type",
4026 "version": 20
4027 }
4028 ]
4029 },
4030 {
4031 "name": "system-settings-keys",
4032 "namespace": "keet",
4033 "offset": 1,
4034 "enum": [
4035 {
4036 "key": "RoomType",
4037 "version": 10
4038 },
4039 {
4040 "key": "IsExperimental",
4041 "version": 10
4042 },
4043 {
4044 "key": "IsJoiningDisabled",
4045 "version": 10
4046 },
4047 {
4048 "key": "IsAppendingDisabled",
4049 "version": 10
4050 },
4051 {
4052 "key": "IsCallingDisabled",
4053 "version": 10
4054 },
4055 {
4056 "key": "IsMembershipEventsDisabled",
4057 "version": 10
4058 },
4059 {
4060 "key": "IsAttachmentsDisabled",
4061 "version": 19
4062 },
4063 {
4064 "key": "IsLinksDisabled",
4065 "version": 19
4066 }
4067 ],
4068 "strings": false
4069 },
4070 {
4071 "name": "room-supported-language",
4072 "namespace": "keet",
4073 "offset": 1,
4074 "enum": [
4075 {
4076 "key": "en",
4077 "version": 11
4078 },
4079 {
4080 "key": "it",
4081 "version": 11
4082 },
4083 {
4084 "key": "ru",
4085 "version": 11
4086 },
4087 {
4088 "key": "es",
4089 "version": 11
4090 },
4091 {
4092 "key": "de",
4093 "version": 11
4094 }
4095 ],
4096 "strings": true
4097 },
4098 {
4099 "name": "translation-display-item",
4100 "namespace": "keet",
4101 "compact": false,
4102 "flagsPosition": -1,
4103 "fields": [
4104 {
4105 "name": "range",
4106 "required": true,
4107 "type": "@keet/display-range",
4108 "version": 11
4109 },
4110 {
4111 "name": "language",
4112 "required": true,
4113 "type": "@keet/room-supported-language",
4114 "version": 11
4115 },
4116 {
4117 "name": "text",
4118 "required": true,
4119 "type": "string",
4120 "version": 11
4121 }
4122 ]
4123 },
4124 {
4125 "name": "unreads",
4126 "namespace": "keet-private-id",
4127 "compact": false,
4128 "flagsPosition": -1,
4129 "fields": [
4130 {
4131 "name": "deviceKey",
4132 "required": true,
4133 "type": "@keet/device-key",
4134 "version": 12
4135 },
4136 {
4137 "name": "key",
4138 "required": true,
4139 "type": "@keet/core-key",
4140 "version": 12
4141 }
4142 ]
4143 },
4144 {
4145 "name": "add-unreads-key-operation",
4146 "namespace": "keet-private-id",
4147 "compact": false,
4148 "flagsPosition": -1,
4149 "fields": [
4150 {
4151 "name": "header",
4152 "required": true,
4153 "type": "@keet/operation-header",
4154 "version": 12
4155 },
4156 {
4157 "name": "key",
4158 "required": true,
4159 "type": "@keet/core-key",
4160 "version": 12
4161 }
4162 ]
4163 },
4164 {
4165 "name": "remove-unreads-key-operation",
4166 "namespace": "keet-private-id",
4167 "compact": false,
4168 "flagsPosition": -1,
4169 "fields": [
4170 {
4171 "name": "header",
4172 "required": true,
4173 "type": "@keet/operation-header",
4174 "version": 12
4175 },
4176 {
4177 "name": "key",
4178 "required": true,
4179 "type": "@keet/core-key",
4180 "version": 12
4181 }
4182 ]
4183 },
4184 {
4185 "name": "label-type",
4186 "namespace": "keet",
4187 "offset": 1,
4188 "enum": [
4189 {
4190 "key": "Flag",
4191 "version": 13
4192 }
4193 ],
4194 "strings": false
4195 },
4196 {
4197 "name": "chat-label",
4198 "namespace": "keet",
4199 "compact": false,
4200 "flagsPosition": -1,
4201 "fields": [
4202 {
4203 "name": "id",
4204 "required": true,
4205 "type": "@keet/message-index-id",
4206 "version": 13
4207 },
4208 {
4209 "name": "sender",
4210 "required": true,
4211 "type": "@keet/member-key",
4212 "version": 13
4213 },
4214 {
4215 "name": "clock",
4216 "required": true,
4217 "type": "uint",
4218 "version": 13
4219 },
4220 {
4221 "name": "label",
4222 "required": true,
4223 "type": "@keet/label-type",
4224 "version": 13
4225 }
4226 ]
4227 },
4228 {
4229 "name": "add-chat-label-operation",
4230 "namespace": "keet",
4231 "compact": false,
4232 "flagsPosition": -1,
4233 "fields": [
4234 {
4235 "name": "header",
4236 "required": true,
4237 "type": "@keet/operation-header",
4238 "version": 13
4239 },
4240 {
4241 "name": "oplog",
4242 "required": true,
4243 "type": "@keet/oplog-id",
4244 "version": 13
4245 },
4246 {
4247 "name": "label",
4248 "required": true,
4249 "type": "@keet/label-type",
4250 "version": 13
4251 }
4252 ]
4253 },
4254 {
4255 "name": "remove-chat-label-operation",
4256 "namespace": "keet",
4257 "compact": false,
4258 "flagsPosition": -1,
4259 "fields": [
4260 {
4261 "name": "header",
4262 "required": true,
4263 "type": "@keet/operation-header",
4264 "version": 13
4265 },
4266 {
4267 "name": "oplog",
4268 "required": true,
4269 "type": "@keet/oplog-id",
4270 "version": 13
4271 },
4272 {
4273 "name": "label",
4274 "required": true,
4275 "type": "@keet/label-type",
4276 "version": 13
4277 }
4278 ]
4279 },
4280 {
4281 "name": "chat-label-summary",
4282 "namespace": "keet",
4283 "compact": false,
4284 "flagsPosition": -1,
4285 "fields": [
4286 {
4287 "name": "label",
4288 "required": true,
4289 "type": "@keet/label-type",
4290 "version": 13
4291 },
4292 {
4293 "name": "count",
4294 "required": true,
4295 "type": "uint",
4296 "version": 13
4297 }
4298 ]
4299 },
4300 {
4301 "name": "chat-label-digest",
4302 "namespace": "keet",
4303 "compact": false,
4304 "flagsPosition": 4,
4305 "fields": [
4306 {
4307 "name": "id",
4308 "required": true,
4309 "type": "@keet/message-index-id",
4310 "version": 13
4311 },
4312 {
4313 "name": "total",
4314 "required": true,
4315 "type": "uint",
4316 "version": 13
4317 },
4318 {
4319 "name": "labels",
4320 "required": true,
4321 "array": true,
4322 "type": "@keet/chat-label-summary",
4323 "version": 13
4324 },
4325 {
4326 "name": "editedAt",
4327 "required": true,
4328 "type": "uint",
4329 "version": 13
4330 },
4331 {
4332 "name": "flagsClock",
4333 "type": "uint",
4334 "version": 15
4335 },
4336 {
4337 "name": "version",
4338 "type": "uint",
4339 "version": 15
4340 },
4341 {
4342 "name": "isDeleted",
4343 "type": "bool",
4344 "version": 16
4345 }
4346 ]
4347 },
4348 {
4349 "name": "update-read-length-operation",
4350 "namespace": "keet",
4351 "compact": false,
4352 "flagsPosition": -1,
4353 "fields": [
4354 {
4355 "name": "header",
4356 "required": true,
4357 "type": "@keet/operation-header",
4358 "version": 13
4359 },
4360 {
4361 "name": "length",
4362 "required": true,
4363 "type": "uint",
4364 "version": 13
4365 }
4366 ]
4367 },
4368 {
4369 "name": "read-length",
4370 "namespace": "keet",
4371 "compact": false,
4372 "flagsPosition": -1,
4373 "fields": [
4374 {
4375 "name": "memberKey",
4376 "required": true,
4377 "type": "@keet/member-key",
4378 "version": 13
4379 },
4380 {
4381 "name": "length",
4382 "required": true,
4383 "type": "uint",
4384 "version": 13
4385 }
4386 ]
4387 },
4388 {
4389 "name": "tmp-removed-member",
4390 "namespace": "keet",
4391 "compact": false,
4392 "flagsPosition": -1,
4393 "fields": [
4394 {
4395 "name": "key",
4396 "required": true,
4397 "type": "@keet/member-key",
4398 "version": 13
4399 }
4400 ]
4401 },
4402 {
4403 "name": "settings",
4404 "namespace": "keet-private-id",
4405 "compact": false,
4406 "flagsPosition": 0,
4407 "fields": [
4408 {
4409 "name": "disableReadReceipts",
4410 "type": "bool",
4411 "version": 13
4412 }
4413 ]
4414 },
4415 {
4416 "name": "user-settings-key",
4417 "namespace": "keet-private-id",
4418 "offset": 1,
4419 "enum": [
4420 {
4421 "key": "disableReadReceipts",
4422 "version": 13
4423 }
4424 ],
4425 "strings": true
4426 },
4427 {
4428 "name": "update-settings-operation",
4429 "namespace": "keet-private-id",
4430 "compact": false,
4431 "flagsPosition": -1,
4432 "fields": [
4433 {
4434 "name": "header",
4435 "required": true,
4436 "type": "@keet/operation-header",
4437 "version": 13
4438 },
4439 {
4440 "name": "key",
4441 "required": true,
4442 "type": "@keet-private-id/user-settings-key",
4443 "version": 13
4444 },
4445 {
4446 "name": "settings",
4447 "required": true,
4448 "type": "@keet-private-id/settings",
4449 "version": 13
4450 }
4451 ]
4452 },
4453 {
4454 "name": "member-label-type",
4455 "namespace": "keet",
4456 "offset": 1,
4457 "enum": [
4458 {
4459 "key": "Flag",
4460 "version": 17
4461 }
4462 ],
4463 "strings": false
4464 },
4465 {
4466 "name": "member-label",
4467 "namespace": "keet",
4468 "compact": false,
4469 "flagsPosition": -1,
4470 "fields": [
4471 {
4472 "name": "key",
4473 "required": true,
4474 "type": "@keet/member-key",
4475 "version": 17
4476 },
4477 {
4478 "name": "sender",
4479 "required": true,
4480 "type": "@keet/member-key",
4481 "version": 17
4482 },
4483 {
4484 "name": "clock",
4485 "required": true,
4486 "type": "uint",
4487 "version": 17
4488 },
4489 {
4490 "name": "label",
4491 "required": true,
4492 "type": "@keet/member-label-type",
4493 "version": 17
4494 }
4495 ]
4496 },
4497 {
4498 "name": "add-member-label-operation",
4499 "namespace": "keet",
4500 "compact": false,
4501 "flagsPosition": -1,
4502 "fields": [
4503 {
4504 "name": "header",
4505 "required": true,
4506 "type": "@keet/operation-header",
4507 "version": 17
4508 },
4509 {
4510 "name": "key",
4511 "required": true,
4512 "type": "@keet/member-key",
4513 "version": 17
4514 },
4515 {
4516 "name": "label",
4517 "required": true,
4518 "type": "@keet/member-label-type",
4519 "version": 17
4520 }
4521 ]
4522 },
4523 {
4524 "name": "member-label-summary",
4525 "namespace": "keet",
4526 "compact": false,
4527 "flagsPosition": -1,
4528 "fields": [
4529 {
4530 "name": "label",
4531 "required": true,
4532 "type": "@keet/member-label-type",
4533 "version": 17
4534 },
4535 {
4536 "name": "count",
4537 "required": true,
4538 "type": "uint",
4539 "version": 17
4540 }
4541 ]
4542 },
4543 {
4544 "name": "member-label-digest",
4545 "namespace": "keet",
4546 "compact": false,
4547 "flagsPosition": -1,
4548 "fields": [
4549 {
4550 "name": "key",
4551 "required": true,
4552 "type": "@keet/member-key",
4553 "version": 17
4554 },
4555 {
4556 "name": "total",
4557 "required": true,
4558 "type": "uint",
4559 "version": 17
4560 },
4561 {
4562 "name": "labels",
4563 "required": true,
4564 "array": true,
4565 "type": "@keet/member-label-summary",
4566 "version": 17
4567 },
4568 {
4569 "name": "editedAt",
4570 "required": true,
4571 "type": "uint",
4572 "version": 17
4573 },
4574 {
4575 "name": "flagsClock",
4576 "required": true,
4577 "type": "uint",
4578 "version": 17
4579 }
4580 ]
4581 },
4582 {
4583 "name": "location-shared-event",
4584 "namespace": "keet",
4585 "compact": false,
4586 "flagsPosition": -1,
4587 "fields": [
4588 {
4589 "name": "latitude",
4590 "required": true,
4591 "type": "float64",
4592 "version": 18
4593 },
4594 {
4595 "name": "longitude",
4596 "required": true,
4597 "type": "float64",
4598 "version": 18
4599 }
4600 ]
4601 },
4602 {
4603 "name": "move-indexer-operation",
4604 "namespace": "keet",
4605 "compact": false,
4606 "flagsPosition": -1,
4607 "fields": [
4608 {
4609 "name": "header",
4610 "required": true,
4611 "type": "@keet/operation-header",
4612 "version": 18
4613 },
4614 {
4615 "name": "deviceKey",
4616 "required": true,
4617 "type": "@keet/device-key",
4618 "version": 18
4619 },
4620 {
4621 "name": "fromDeviceKey",
4622 "required": true,
4623 "type": "@keet/device-key",
4624 "version": 18
4625 }
4626 ]
4627 },
4628 {
4629 "name": "start-call",
4630 "namespace": "keet",
4631 "compact": false,
4632 "flagsPosition": 3,
4633 "fields": [
4634 {
4635 "name": "header",
4636 "required": true,
4637 "type": "@keet/operation-header",
4638 "version": 19
4639 },
4640 {
4641 "name": "callKey",
4642 "required": true,
4643 "type": "fixed32",
4644 "version": 19
4645 },
4646 {
4647 "name": "encryptionKey",
4648 "required": true,
4649 "type": "@keet/encryption-key",
4650 "version": 19
4651 },
4652 {
4653 "name": "streams",
4654 "array": true,
4655 "type": "@keet/core-key",
4656 "version": 19
4657 },
4658 {
4659 "name": "discoveryKey",
4660 "type": "@keet/room-discovery-key",
4661 "version": 19
4662 },
4663 {
4664 "name": "version",
4665 "type": "uint",
4666 "version": 19
4667 }
4668 ]
4669 },
4670 {
4671 "name": "join-call",
4672 "namespace": "keet",
4673 "compact": false,
4674 "flagsPosition": 2,
4675 "fields": [
4676 {
4677 "name": "header",
4678 "required": true,
4679 "type": "@keet/operation-header",
4680 "version": 19
4681 },
4682 {
4683 "name": "callKey",
4684 "required": true,
4685 "type": "fixed32",
4686 "version": 19
4687 },
4688 {
4689 "name": "streams",
4690 "array": true,
4691 "type": "@keet/core-key",
4692 "version": 19
4693 }
4694 ]
4695 },
4696 {
4697 "name": "leave-call",
4698 "namespace": "keet",
4699 "compact": false,
4700 "flagsPosition": -1,
4701 "fields": [
4702 {
4703 "name": "header",
4704 "required": true,
4705 "type": "@keet/operation-header",
4706 "version": 19
4707 },
4708 {
4709 "name": "callKey",
4710 "required": true,
4711 "type": "fixed32",
4712 "version": 19
4713 }
4714 ]
4715 },
4716 {
4717 "name": "end-call",
4718 "namespace": "keet",
4719 "compact": false,
4720 "flagsPosition": -1,
4721 "fields": [
4722 {
4723 "name": "header",
4724 "required": true,
4725 "type": "@keet/operation-header",
4726 "version": 19
4727 },
4728 {
4729 "name": "callKey",
4730 "required": true,
4731 "type": "fixed32",
4732 "version": 19
4733 }
4734 ]
4735 },
4736 {
4737 "name": "add-call-stream",
4738 "namespace": "keet",
4739 "compact": false,
4740 "flagsPosition": -1,
4741 "fields": [
4742 {
4743 "name": "header",
4744 "required": true,
4745 "type": "@keet/operation-header",
4746 "version": 19
4747 },
4748 {
4749 "name": "callKey",
4750 "required": true,
4751 "type": "fixed32",
4752 "version": 19
4753 },
4754 {
4755 "name": "streamKey",
4756 "required": true,
4757 "type": "@keet/core-key",
4758 "version": 19
4759 }
4760 ]
4761 },
4762 {
4763 "name": "remove-call-stream",
4764 "namespace": "keet",
4765 "compact": false,
4766 "flagsPosition": -1,
4767 "fields": [
4768 {
4769 "name": "header",
4770 "required": true,
4771 "type": "@keet/operation-header",
4772 "version": 19
4773 },
4774 {
4775 "name": "callKey",
4776 "required": true,
4777 "type": "fixed32",
4778 "version": 19
4779 },
4780 {
4781 "name": "streamKey",
4782 "required": true,
4783 "type": "@keet/core-key",
4784 "version": 19
4785 }
4786 ]
4787 },
4788 {
4789 "name": "call-record",
4790 "namespace": "keet",
4791 "compact": false,
4792 "flagsPosition": 3,
4793 "fields": [
4794 {
4795 "name": "callKey",
4796 "required": true,
4797 "type": "fixed32",
4798 "version": 19
4799 },
4800 {
4801 "name": "encryptionKey",
4802 "required": true,
4803 "type": "@keet/encryption-key",
4804 "version": 19
4805 },
4806 {
4807 "name": "createdAt",
4808 "required": true,
4809 "type": "uint",
4810 "version": 19
4811 },
4812 {
4813 "name": "endedAt",
4814 "type": "uint",
4815 "version": 19
4816 },
4817 {
4818 "name": "discoveryKey",
4819 "type": "@keet/room-discovery-key",
4820 "version": 19
4821 },
4822 {
4823 "name": "version",
4824 "type": "uint",
4825 "version": 19
4826 }
4827 ]
4828 },
4829 {
4830 "name": "call-member-record",
4831 "namespace": "keet",
4832 "compact": false,
4833 "flagsPosition": -1,
4834 "fields": [
4835 {
4836 "name": "callKey",
4837 "required": true,
4838 "type": "fixed32",
4839 "version": 19
4840 },
4841 {
4842 "name": "memberKey",
4843 "required": true,
4844 "type": "@keet/member-key",
4845 "version": 19
4846 },
4847 {
4848 "name": "createdAt",
4849 "required": true,
4850 "type": "uint",
4851 "version": 19
4852 }
4853 ]
4854 },
4855 {
4856 "name": "call-device-record",
4857 "namespace": "keet",
4858 "compact": false,
4859 "flagsPosition": 4,
4860 "fields": [
4861 {
4862 "name": "callKey",
4863 "required": true,
4864 "type": "fixed32",
4865 "version": 19
4866 },
4867 {
4868 "name": "deviceKey",
4869 "required": true,
4870 "type": "@keet/device-key",
4871 "version": 19
4872 },
4873 {
4874 "name": "memberKey",
4875 "required": true,
4876 "type": "@keet/member-key",
4877 "version": 19
4878 },
4879 {
4880 "name": "createdAt",
4881 "required": true,
4882 "type": "uint",
4883 "version": 19
4884 },
4885 {
4886 "name": "swarmKey",
4887 "type": "@keet/swarm-key",
4888 "version": 19
4889 }
4890 ]
4891 },
4892 {
4893 "name": "call-stream-record",
4894 "namespace": "keet",
4895 "compact": false,
4896 "flagsPosition": -1,
4897 "fields": [
4898 {
4899 "name": "callKey",
4900 "required": true,
4901 "type": "fixed32",
4902 "version": 19
4903 },
4904 {
4905 "name": "deviceKey",
4906 "required": true,
4907 "type": "@keet/device-key",
4908 "version": 19
4909 },
4910 {
4911 "name": "streamKey",
4912 "required": true,
4913 "type": "buffer",
4914 "version": 19
4915 },
4916 {
4917 "name": "createdAt",
4918 "required": true,
4919 "type": "uint",
4920 "version": 19
4921 }
4922 ]
4923 },
4924 {
4925 "name": "build-type",
4926 "namespace": "keet",
4927 "offset": 1,
4928 "enum": [
4929 {
4930 "key": "Nightly",
4931 "version": 20
4932 },
4933 {
4934 "key": "Internal",
4935 "version": 20
4936 },
4937 {
4938 "key": "Production",
4939 "version": 20
4940 }
4941 ],
4942 "strings": true
4943 },
4944 {
4945 "name": "test-crash-operation",
4946 "namespace": "keet",
4947 "compact": false,
4948 "flagsPosition": -1,
4949 "fields": [
4950 {
4951 "name": "header",
4952 "required": true,
4953 "type": "@keet/operation-header",
4954 "version": 20
4955 }
4956 ]
4957 },
4958 {
4959 "name": "test-dispatch-error-operation",
4960 "namespace": "keet",
4961 "compact": false,
4962 "flagsPosition": -1,
4963 "fields": [
4964 {
4965 "name": "header",
4966 "required": true,
4967 "type": "@keet/operation-header",
4968 "version": 20
4969 }
4970 ]
4971 }
4972 ]
4973}
keet-core-4.14.4-pretty/schema/spec/index.js +14 -0
……@@ -0,0 +1,14 @@
1module.exports = {
2 contract: {
3 hyperschemaJson: require("./contract/hyperschema/schema.json"),
4 hyperschema: require("./contract/hyperschema"),
5 hyperdispatch: require("./contract/hyperdispatch"),
6 hyperdb: require("./contract/hyperdb"),
7 },
8 local: { hyperschema: require("./local/hyperschema"), hyperdb: require("./local/hyperdb") },
9 config: {
10 hyperschema: require("./config/hyperschema"),
11 hyperconf: require("./config/hyperconf"),
12 },
13 api: { hyperschema: require("./api/hyperschema"), hrpc: require("./api/hrpc") },
14}
keet-core-4.14.4-pretty/schema/spec/local/hyperdb/db.json +701 -0
……@@ -0,0 +1,701 @@
1{
2 "version": 5,
3 "offset": 0,
4 "schema": [
5 {
6 "name": "stats",
7 "namespace": "local",
8 "id": 0,
9 "type": 1,
10 "version": 0,
11 "versionField": null,
12 "indexes": [],
13 "schema": "@local/stats",
14 "derived": false,
15 "key": [],
16 "trigger": null
17 },
18 {
19 "name": "migrations",
20 "namespace": "local",
21 "id": 1,
22 "type": 1,
23 "version": 0,
24 "versionField": null,
25 "indexes": [],
26 "schema": "@local/migration-status",
27 "derived": false,
28 "key": [],
29 "trigger": null
30 },
31 {
32 "name": "room-migration-stats",
33 "namespace": "local",
34 "id": 2,
35 "type": 1,
36 "version": 0,
37 "versionField": null,
38 "indexes": [],
39 "schema": "@local/room-migration-stats",
40 "derived": false,
41 "key": [],
42 "trigger": null
43 },
44 {
45 "name": "room-migrations",
46 "namespace": "local",
47 "id": 3,
48 "type": 1,
49 "version": 0,
50 "versionField": null,
51 "indexes": [
52 "@local/room-migrations-by-priority"
53 ],
54 "schema": "@local/room-migration",
55 "derived": false,
56 "key": [
57 "roomKey"
58 ],
59 "trigger": "roomMigrationsTrigger"
60 },
61 {
62 "name": "room-migrations-by-priority",
63 "namespace": "local",
64 "id": 4,
65 "type": 2,
66 "version": 0,
67 "collection": "@local/room-migrations",
68 "unique": false,
69 "deprecated": false,
70 "key": [
71 "priority"
72 ]
73 },
74 {
75 "name": "identity",
76 "namespace": "local",
77 "id": 5,
78 "type": 1,
79 "version": 0,
80 "versionField": null,
81 "indexes": [],
82 "schema": "@local/identity-record",
83 "derived": false,
84 "key": [],
85 "trigger": null
86 },
87 {
88 "name": "rooms",
89 "namespace": "local",
90 "id": 6,
91 "type": 1,
92 "version": 3,
93 "versionField": "version",
94 "indexes": [
95 "@local/rooms-by-discovery-key",
96 "@local/rooms-by-timestamp",
97 "@local/rooms-by-type-and-timestamp",
98 "@local/rooms-by-wakeup-topic",
99 "@local/rooms-by-mailbox",
100 "@local/rooms-by-discovery",
101 "@local/rooms-by-contact",
102 "@local/rooms-by-favorite-and-timestamp"
103 ],
104 "schema": "@local/room",
105 "derived": false,
106 "key": [
107 "roomKey"
108 ],
109 "trigger": "roomsTrigger"
110 },
111 {
112 "name": "rooms-by-discovery-key",
113 "namespace": "local",
114 "id": 7,
115 "type": 2,
116 "version": 0,
117 "collection": "@local/rooms",
118 "unique": true,
119 "deprecated": false,
120 "key": [
121 "discoveryKey"
122 ]
123 },
124 {
125 "name": "rooms-by-timestamp",
126 "namespace": "local",
127 "id": 8,
128 "type": 2,
129 "version": 0,
130 "collection": "@local/rooms",
131 "unique": false,
132 "deprecated": false,
133 "key": {
134 "type": {
135 "fields": [
136 {
137 "name": "timestamp",
138 "type": "uint"
139 }
140 ]
141 },
142 "map": "roomsByTimestampMap"
143 }
144 },
145 {
146 "name": "rooms-by-type-and-timestamp",
147 "namespace": "local",
148 "id": 9,
149 "type": 2,
150 "version": 0,
151 "collection": "@local/rooms",
152 "unique": false,
153 "deprecated": false,
154 "key": {
155 "type": {
156 "fields": [
157 {
158 "name": "type",
159 "type": "uint"
160 },
161 {
162 "name": "timestamp",
163 "type": "uint"
164 }
165 ]
166 },
167 "map": "roomsByTypeAndTimestampMap"
168 }
169 },
170 {
171 "name": "rooms-by-wakeup-topic",
172 "namespace": "local",
173 "id": 10,
174 "type": 2,
175 "version": 0,
176 "collection": "@local/rooms",
177 "unique": true,
178 "deprecated": false,
179 "key": [
180 "capabilities.wakeupTopic"
181 ]
182 },
183 {
184 "name": "rooms-by-mailbox",
185 "namespace": "local",
186 "id": 11,
187 "type": 2,
188 "version": 0,
189 "collection": "@local/rooms",
190 "unique": true,
191 "deprecated": false,
192 "key": [
193 "capabilities.mailboxKeyPair.publicKey"
194 ]
195 },
196 {
197 "name": "rooms-by-discovery",
198 "namespace": "local",
199 "id": 12,
200 "type": 2,
201 "version": 0,
202 "collection": "@local/rooms",
203 "unique": true,
204 "deprecated": false,
205 "key": [
206 "capabilities.discoveryKeyPair.publicKey"
207 ]
208 },
209 {
210 "name": "room-preferences",
211 "namespace": "local",
212 "id": 13,
213 "type": 1,
214 "version": 0,
215 "versionField": null,
216 "indexes": [],
217 "schema": "@local/room-preferences",
218 "derived": false,
219 "key": [
220 "roomKey"
221 ],
222 "trigger": null
223 },
224 {
225 "name": "writers",
226 "namespace": "local",
227 "id": 14,
228 "type": 1,
229 "version": 0,
230 "versionField": null,
231 "indexes": [
232 "@local/writers-by-wakeup-topic",
233 "@local/writers-by-room-key"
234 ],
235 "schema": "@local/writer",
236 "derived": false,
237 "key": [
238 "mailbox"
239 ],
240 "trigger": null
241 },
242 {
243 "name": "writers-by-wakeup-topic",
244 "namespace": "local",
245 "id": 15,
246 "type": 2,
247 "version": 0,
248 "collection": "@local/writers",
249 "unique": true,
250 "deprecated": false,
251 "key": {
252 "type": {
253 "fields": [
254 {
255 "name": "wakeupTopic",
256 "type": "@keet/room-discovery-key"
257 }
258 ]
259 },
260 "map": "writersByWakeupTopicMap"
261 }
262 },
263 {
264 "name": "writers-by-room-key",
265 "namespace": "local",
266 "id": 16,
267 "type": 2,
268 "version": 0,
269 "collection": "@local/writers",
270 "unique": true,
271 "deprecated": false,
272 "key": {
273 "type": {
274 "fields": [
275 {
276 "name": "roomKey",
277 "type": "@keet/room-key"
278 }
279 ]
280 },
281 "map": "writersByRoomKeyMap"
282 }
283 },
284 {
285 "name": "members",
286 "namespace": "local",
287 "id": 17,
288 "type": 1,
289 "version": 0,
290 "versionField": null,
291 "indexes": [],
292 "schema": "@local/member",
293 "derived": false,
294 "key": [
295 "key"
296 ],
297 "trigger": null
298 },
299 {
300 "name": "devices",
301 "namespace": "local",
302 "id": 18,
303 "type": 1,
304 "version": 0,
305 "versionField": null,
306 "indexes": [],
307 "schema": "@local/device",
308 "derived": false,
309 "key": [
310 "device.key"
311 ],
312 "trigger": null
313 },
314 {
315 "name": "contacts",
316 "namespace": "local",
317 "id": 19,
318 "type": 1,
319 "version": 0,
320 "versionField": null,
321 "indexes": [
322 "@local/blocked-contacts"
323 ],
324 "schema": "@keet-private-id/contact",
325 "derived": false,
326 "key": [
327 "memberKey"
328 ],
329 "trigger": null
330 },
331 {
332 "name": "blocked-contacts",
333 "namespace": "local",
334 "id": 20,
335 "type": 2,
336 "version": 0,
337 "collection": "@local/contacts",
338 "unique": true,
339 "deprecated": false,
340 "key": {
341 "type": {
342 "fields": [
343 {
344 "name": "memberKey",
345 "type": "@keet/member-key"
346 }
347 ]
348 },
349 "map": "blockedContactsMap"
350 }
351 },
352 {
353 "name": "tasks",
354 "namespace": "local",
355 "id": 21,
356 "type": 1,
357 "version": 0,
358 "versionField": null,
359 "indexes": [
360 "@local/tasks-by-type"
361 ],
362 "schema": "@local/task",
363 "derived": false,
364 "key": [
365 "priority",
366 "timestamp",
367 "type",
368 "discoveryKey"
369 ],
370 "trigger": null
371 },
372 {
373 "name": "tasks-by-type",
374 "namespace": "local",
375 "id": 22,
376 "type": 2,
377 "version": 0,
378 "collection": "@local/tasks",
379 "unique": true,
380 "deprecated": false,
381 "key": [
382 "type",
383 "discoveryKey"
384 ]
385 },
386 {
387 "name": "blob-files",
388 "namespace": "local",
389 "id": 23,
390 "type": 1,
391 "version": 4,
392 "versionField": "version",
393 "indexes": [
394 "@local/blob-files-by-room",
395 "@local/blob-files-by-last-accessed"
396 ],
397 "schema": "@local/file",
398 "derived": false,
399 "key": [
400 "file.pointer.externalBlob.key",
401 "file.pointer.externalBlob.blob.blockOffset"
402 ],
403 "trigger": null
404 },
405 {
406 "name": "drive-files",
407 "namespace": "local",
408 "id": 24,
409 "type": 1,
410 "version": 4,
411 "versionField": "version",
412 "indexes": [
413 "@local/drive-files-by-room",
414 "@local/drive-files-by-last-accessed"
415 ],
416 "schema": "@local/file",
417 "derived": false,
418 "key": [
419 "file.pointer.externalDrive.key",
420 "file.pointer.externalDrive.path",
421 "file.pointer.externalDrive.version"
422 ],
423 "trigger": null
424 },
425 {
426 "name": "blob-files-by-room",
427 "namespace": "local",
428 "id": 25,
429 "type": 2,
430 "version": 0,
431 "collection": "@local/blob-files",
432 "unique": false,
433 "deprecated": false,
434 "key": [
435 "roomKey"
436 ]
437 },
438 {
439 "name": "drive-files-by-room",
440 "namespace": "local",
441 "id": 26,
442 "type": 2,
443 "version": 0,
444 "collection": "@local/drive-files",
445 "unique": false,
446 "deprecated": false,
447 "key": [
448 "roomKey"
449 ]
450 },
451 {
452 "name": "background-sync",
453 "namespace": "local",
454 "id": 27,
455 "type": 1,
456 "version": 0,
457 "versionField": null,
458 "indexes": [
459 "@local/background-sync-by-dirty"
460 ],
461 "schema": "@local/background-sync-room",
462 "derived": false,
463 "key": [
464 "discoveryPublicKey"
465 ],
466 "trigger": null
467 },
468 {
469 "name": "background-sync-by-dirty",
470 "namespace": "local",
471 "id": 28,
472 "type": 2,
473 "version": 0,
474 "collection": "@local/background-sync",
475 "unique": false,
476 "deprecated": false,
477 "key": {
478 "type": {
479 "fields": [
480 {
481 "name": "timestamp",
482 "type": "uint"
483 }
484 ]
485 },
486 "map": "dirtyByTimestampMap"
487 }
488 },
489 {
490 "name": "writer-appends",
491 "namespace": "local",
492 "id": 29,
493 "type": 1,
494 "version": 0,
495 "versionField": null,
496 "indexes": [],
497 "schema": "@local/writer-append",
498 "derived": false,
499 "key": [
500 "key",
501 "responsePublicKey"
502 ],
503 "trigger": null
504 },
505 {
506 "name": "room-metadata",
507 "namespace": "local",
508 "id": 30,
509 "type": 1,
510 "version": 0,
511 "versionField": null,
512 "indexes": [],
513 "schema": "@local/room-metadata",
514 "derived": false,
515 "key": [
516 "roomKey"
517 ],
518 "trigger": null
519 },
520 {
521 "name": "debug",
522 "namespace": "local",
523 "id": 31,
524 "type": 1,
525 "version": 0,
526 "versionField": null,
527 "indexes": [],
528 "schema": "@local/debug",
529 "derived": false,
530 "key": [],
531 "trigger": null
532 },
533 {
534 "name": "rooms-by-contact",
535 "namespace": "local",
536 "id": 32,
537 "type": 2,
538 "version": 1,
539 "collection": "@local/rooms",
540 "unique": false,
541 "deprecated": false,
542 "key": {
543 "type": {
544 "fields": [
545 {
546 "name": "contact",
547 "type": "@keet/member-key"
548 }
549 ]
550 },
551 "map": "roomsByContactMap"
552 }
553 },
554 {
555 "name": "unreads",
556 "namespace": "local",
557 "id": 33,
558 "type": 1,
559 "version": 0,
560 "versionField": null,
561 "indexes": [],
562 "schema": "@local/unread",
563 "derived": false,
564 "key": [
565 "roomKey"
566 ],
567 "trigger": null
568 },
569 {
570 "name": "hyperdht",
571 "namespace": "local",
572 "id": 34,
573 "type": 1,
574 "version": 0,
575 "versionField": null,
576 "indexes": [],
577 "schema": "@local/hyperdht-record",
578 "derived": false,
579 "key": [],
580 "trigger": null
581 },
582 {
583 "name": "errors",
584 "namespace": "local",
585 "id": 35,
586 "type": 1,
587 "version": 0,
588 "versionField": null,
589 "indexes": [
590 "@local/errors-by-code"
591 ],
592 "schema": "@local/error-record",
593 "derived": false,
594 "key": [
595 "timestamp"
596 ],
597 "trigger": null
598 },
599 {
600 "name": "errors-by-code",
601 "namespace": "local",
602 "id": 36,
603 "type": 2,
604 "version": 0,
605 "collection": "@local/errors",
606 "unique": false,
607 "deprecated": false,
608 "key": [
609 "code"
610 ]
611 },
612 {
613 "name": "file-stats",
614 "namespace": "local",
615 "id": 37,
616 "type": 1,
617 "version": 2,
618 "versionField": null,
619 "indexes": [],
620 "schema": "@local/file-stats",
621 "derived": false,
622 "key": [
623 "roomKey"
624 ],
625 "trigger": null
626 },
627 {
628 "name": "rooms-by-favorite-and-timestamp",
629 "namespace": "local",
630 "id": 38,
631 "type": 2,
632 "version": 3,
633 "collection": "@local/rooms",
634 "unique": false,
635 "deprecated": false,
636 "key": {
637 "type": {
638 "fields": [
639 {
640 "name": "timestamp",
641 "type": "uint"
642 }
643 ]
644 },
645 "map": "roomsByFavoriteAndTimestampMap"
646 }
647 },
648 {
649 "name": "blob-files-by-last-accessed",
650 "namespace": "local",
651 "id": 39,
652 "type": 2,
653 "version": 4,
654 "collection": "@local/blob-files",
655 "unique": false,
656 "deprecated": false,
657 "key": [
658 "lastAccessed"
659 ]
660 },
661 {
662 "name": "drive-files-by-last-accessed",
663 "namespace": "local",
664 "id": 40,
665 "type": 2,
666 "version": 4,
667 "collection": "@local/drive-files",
668 "unique": false,
669 "deprecated": false,
670 "key": [
671 "lastAccessed"
672 ]
673 },
674 {
675 "name": "file-gc-info",
676 "namespace": "local",
677 "id": 41,
678 "type": 1,
679 "version": 4,
680 "versionField": null,
681 "indexes": [],
682 "schema": "@local/file-gc-info",
683 "derived": false,
684 "key": [],
685 "trigger": null
686 },
687 {
688 "name": "environment",
689 "namespace": "local",
690 "id": 42,
691 "type": 1,
692 "version": 5,
693 "versionField": null,
694 "indexes": [],
695 "schema": "@local/environment-record",
696 "derived": false,
697 "key": [],
698 "trigger": null
699 }
700 ]
701}
keet-core-4.14.4-pretty/schema/spec/local/hyperdb/index.js +1765 -0
……@@ -0,0 +1,1765 @@
1const { IndexEncoder: e, c: n, b4a: t } = require("hyperdb/runtime"),
2 { version: o, getEncoding: r, setVersion: c } = require("./messages.js"),
3 l = { schema: o, db: 5 },
4 d = require("../../../../lib/core/hyperdb/local/local.js"),
5 s = new e([], { prefix: 0 })
6function u(e) {
7 return []
8}
9const i = r("@local/stats")
10function a(e, n, t) {
11 c(e)
12 const o = { start: 0, end: t.byteLength, buffer: t }
13 return i.decode(o)
14}
15function f(e) {
16 return {}
17}
18const y = {
19 name: "@local/stats",
20 id: 0,
21 version: 0,
22 encodeKey: (e) => s.encode([]),
23 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
24 s.encodeRange({
25 gt: e ? u(e) : null,
26 lt: n ? u(n) : null,
27 gte: t ? u(t) : null,
28 lte: o ? u(o) : null,
29 }),
30 encodeValue(e, n, o) {
31 c(e)
32 const r = { start: 0, end: 0, buffer: null }
33 return (i.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), i.encode(r, o), r.buffer)
34 },
35 trigger: null,
36 reconstruct: a,
37 reconstructKey: f,
38 indexes: [],
39 decodedVersion: 0,
40 },
41 g = new e([], { prefix: 1 })
42function p(e) {
43 return []
44}
45const b = r("@local/migration-status")
46function m(e, n, t) {
47 c(e)
48 const o = { start: 0, end: t.byteLength, buffer: t }
49 return b.decode(o)
50}
51function K(e) {
52 return {}
53}
54const v = {
55 name: "@local/migrations",
56 id: 1,
57 version: 0,
58 encodeKey: (e) => g.encode([]),
59 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
60 g.encodeRange({
61 gt: e ? p(e) : null,
62 lt: n ? p(n) : null,
63 gte: t ? p(t) : null,
64 lte: o ? p(o) : null,
65 }),
66 encodeValue(e, n, o) {
67 c(e)
68 const r = { start: 0, end: 0, buffer: null }
69 return (b.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), b.encode(r, o), r.buffer)
70 },
71 trigger: null,
72 reconstruct: m,
73 reconstructKey: K,
74 indexes: [],
75 decodedVersion: 0,
76 },
77 x = new e([], { prefix: 2 })
78function h(e) {
79 return []
80}
81const R = r("@local/room-migration-stats")
82function U(e, n, t) {
83 c(e)
84 const o = { start: 0, end: t.byteLength, buffer: t }
85 return R.decode(o)
86}
87function w(e) {
88 return {}
89}
90const F = {
91 name: "@local/room-migration-stats",
92 id: 2,
93 version: 0,
94 encodeKey: (e) => x.encode([]),
95 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
96 x.encodeRange({
97 gt: e ? h(e) : null,
98 lt: n ? h(n) : null,
99 gte: t ? h(t) : null,
100 lte: o ? h(o) : null,
101 }),
102 encodeValue(e, n, o) {
103 c(e)
104 const r = { start: 0, end: 0, buffer: null }
105 return (R.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), R.encode(r, o), r.buffer)
106 },
107 trigger: null,
108 reconstruct: U,
109 reconstructKey: w,
110 indexes: [],
111 decodedVersion: 0,
112 },
113 V = new e([e.BUFFER], { prefix: 3 })
114function k(e) {
115 const n = e.roomKey
116 return void 0 === n ? [] : [n]
117}
118const B = r("@local/room-migration/hyperdb#3"),
119 I = d.roomMigrationsTrigger
120function E(e, n, t) {
121 const o = V.decode(n)
122 c(e)
123 const r = { start: 0, end: t.byteLength, buffer: t },
124 l = B.decode(r)
125 return ((l.roomKey = o[0]), l)
126}
127function T(e) {
128 return { roomKey: V.decode(e)[0] }
129}
130const L = {
131 name: "@local/room-migrations",
132 id: 3,
133 version: 0,
134 encodeKey(e) {
135 const n = [e.roomKey]
136 return V.encode(n)
137 },
138 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
139 V.encodeRange({
140 gt: e ? k(e) : null,
141 lt: n ? k(n) : null,
142 gte: t ? k(t) : null,
143 lte: o ? k(o) : null,
144 }),
145 encodeValue(e, n, o) {
146 c(e)
147 const r = { start: 0, end: 0, buffer: null }
148 return (B.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), B.encode(r, o), r.buffer)
149 },
150 trigger: I,
151 reconstruct: E,
152 reconstructKey: T,
153 indexes: [],
154 decodedVersion: 0,
155 },
156 N = new e([e.UINT, e.BUFFER], { prefix: 4 })
157function D(e) {
158 const n = [],
159 t = e.priority
160 if (void 0 === t) return n
161 n.push(t)
162 const o = e.roomKey
163 return (void 0 === o || n.push(o), n)
164}
165const A = {
166 name: "@local/room-migrations-by-priority",
167 version: 0,
168 id: 4,
169 encodeKey: (e) => N.encode(D(e)),
170 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
171 N.encodeRange({
172 gt: e ? D(e) : null,
173 lt: n ? D(n) : null,
174 gte: t ? D(t) : null,
175 lte: o ? D(o) : null,
176 }),
177 encodeValue: (e) => A.collection.encodeKey(e),
178 encodeIndexKeys: (e, n) => [N.encode([e.priority, e.roomKey])],
179 reconstruct: (e, n) => n,
180 offset: L.indexes.length,
181 collection: L,
182}
183L.indexes.push(A)
184const P = new e([], { prefix: 5 })
185function M(e) {
186 return []
187}
188const O = r("@local/identity-record")
189function G(e, n, t) {
190 c(e)
191 const o = { start: 0, end: t.byteLength, buffer: t }
192 return O.decode(o)
193}
194function S(e) {
195 return {}
196}
197const q = {
198 name: "@local/identity",
199 id: 5,
200 version: 0,
201 encodeKey: (e) => P.encode([]),
202 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
203 P.encodeRange({
204 gt: e ? M(e) : null,
205 lt: n ? M(n) : null,
206 gte: t ? M(t) : null,
207 lte: o ? M(o) : null,
208 }),
209 encodeValue(e, n, o) {
210 c(e)
211 const r = { start: 0, end: 0, buffer: null }
212 return (O.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), O.encode(r, o), r.buffer)
213 },
214 trigger: null,
215 reconstruct: G,
216 reconstructKey: S,
217 indexes: [],
218 decodedVersion: 0,
219 },
220 C = new e([e.BUFFER], { prefix: 6 })
221function j(e) {
222 const n = e.roomKey
223 return void 0 === n ? [] : [n]
224}
225const W = r("@local/room/hyperdb#6"),
226 z = d.roomsTrigger
227function H(e, n, t) {
228 const o = C.decode(n)
229 c(e)
230 const r = { start: 0, end: t.byteLength, buffer: t },
231 l = W.decode(r)
232 return ((l.roomKey = o[0]), (Q.decodedVersion = l.version), l)
233}
234function J(e) {
235 return { roomKey: C.decode(e)[0] }
236}
237const Q = {
238 name: "@local/rooms",
239 id: 6,
240 version: 3,
241 encodeKey(e) {
242 const n = [e.roomKey]
243 return C.encode(n)
244 },
245 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
246 C.encodeRange({
247 gt: e ? j(e) : null,
248 lt: n ? j(n) : null,
249 gte: t ? j(t) : null,
250 lte: o ? j(o) : null,
251 }),
252 encodeValue(e, n, o) {
253 c(e)
254 const r = { start: 0, end: 0, buffer: null }
255 return (
256 (o.version = n),
257 W.preencode(r, o),
258 (r.buffer = t.allocUnsafe(r.end)),
259 W.encode(r, o),
260 r.buffer
261 )
262 },
263 trigger: z,
264 reconstruct: H,
265 reconstructKey: J,
266 indexes: [],
267 decodedVersion: 0,
268 },
269 X = new e([e.BUFFER], { prefix: 7 })
270function Y(e) {
271 const n = e.discoveryKey
272 return void 0 === n ? [] : [n]
273}
274const Z = {
275 name: "@local/rooms-by-discovery-key",
276 version: 0,
277 id: 7,
278 encodeKey: (e) => X.encode(Y(e)),
279 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
280 X.encodeRange({
281 gt: e ? Y(e) : null,
282 lt: n ? Y(n) : null,
283 gte: t ? Y(t) : null,
284 lte: o ? Y(o) : null,
285 }),
286 encodeValue: (e) => Z.collection.encodeKey(e),
287 encodeIndexKeys: (e, n) => [X.encode([e.discoveryKey])],
288 reconstruct: (e, n) => n,
289 offset: Q.indexes.length,
290 collection: Q,
291}
292Q.indexes.push(Z)
293const $ = new e([e.UINT, e.BUFFER], { prefix: 8 }),
294 _ = d.roomsByTimestampMap
295function ee(e) {
296 const n = e.timestamp
297 return void 0 === n ? [] : [n]
298}
299const ne = {
300 name: "@local/rooms-by-timestamp",
301 version: 0,
302 id: 8,
303 encodeKey: (e) => $.encode(ee(e)),
304 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
305 $.encodeRange({
306 gt: e ? ee(e) : null,
307 lt: n ? ee(n) : null,
308 gte: t ? ee(t) : null,
309 lte: o ? ee(o) : null,
310 }),
311 encodeValue: (e) => ne.collection.encodeKey(e),
312 encodeIndexKeys(e, n) {
313 const t = _(e, n),
314 o = new Array(t.length)
315 for (let n = 0; n < t.length; n++) {
316 const r = t[n]
317 o[n] = $.encode([r.timestamp, e.roomKey])
318 }
319 return o
320 },
321 reconstruct: (e, n) => n,
322 offset: Q.indexes.length,
323 collection: Q,
324}
325Q.indexes.push(ne)
326const te = new e([e.UINT, e.UINT, e.BUFFER], { prefix: 9 }),
327 oe = d.roomsByTypeAndTimestampMap
328function re(e) {
329 const n = [],
330 t = e.type
331 if (void 0 === t) return n
332 n.push(t)
333 const o = e.timestamp
334 return (void 0 === o || n.push(o), n)
335}
336const ce = {
337 name: "@local/rooms-by-type-and-timestamp",
338 version: 0,
339 id: 9,
340 encodeKey: (e) => te.encode(re(e)),
341 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
342 te.encodeRange({
343 gt: e ? re(e) : null,
344 lt: n ? re(n) : null,
345 gte: t ? re(t) : null,
346 lte: o ? re(o) : null,
347 }),
348 encodeValue: (e) => ce.collection.encodeKey(e),
349 encodeIndexKeys(e, n) {
350 const t = oe(e, n),
351 o = new Array(t.length)
352 for (let n = 0; n < t.length; n++) {
353 const r = t[n]
354 o[n] = te.encode([r.type, r.timestamp, e.roomKey])
355 }
356 return o
357 },
358 reconstruct: (e, n) => n,
359 offset: Q.indexes.length,
360 collection: Q,
361}
362Q.indexes.push(ce)
363const le = new e([e.BUFFER], { prefix: 10 })
364function de(e) {
365 const n = e.capabilities?.wakeupTopic
366 return void 0 === n ? [] : [n]
367}
368const se = {
369 name: "@local/rooms-by-wakeup-topic",
370 version: 0,
371 id: 10,
372 encodeKey: (e) => le.encode(de(e)),
373 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
374 le.encodeRange({
375 gt: e ? de(e) : null,
376 lt: n ? de(n) : null,
377 gte: t ? de(t) : null,
378 lte: o ? de(o) : null,
379 }),
380 encodeValue: (e) => se.collection.encodeKey(e),
381 encodeIndexKeys: (e, n) => [le.encode([e.capabilities.wakeupTopic])],
382 reconstruct: (e, n) => n,
383 offset: Q.indexes.length,
384 collection: Q,
385}
386Q.indexes.push(se)
387const ue = new e([e.BUFFER], { prefix: 11 })
388function ie(e) {
389 const n = e.capabilities?.mailboxKeyPair?.publicKey
390 return void 0 === n ? [] : [n]
391}
392const ae = {
393 name: "@local/rooms-by-mailbox",
394 version: 0,
395 id: 11,
396 encodeKey: (e) => ue.encode(ie(e)),
397 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
398 ue.encodeRange({
399 gt: e ? ie(e) : null,
400 lt: n ? ie(n) : null,
401 gte: t ? ie(t) : null,
402 lte: o ? ie(o) : null,
403 }),
404 encodeValue: (e) => ae.collection.encodeKey(e),
405 encodeIndexKeys: (e, n) => [ue.encode([e.capabilities.mailboxKeyPair.publicKey])],
406 reconstruct: (e, n) => n,
407 offset: Q.indexes.length,
408 collection: Q,
409}
410Q.indexes.push(ae)
411const fe = new e([e.BUFFER], { prefix: 12 })
412function ye(e) {
413 const n = e.capabilities?.discoveryKeyPair?.publicKey
414 return void 0 === n ? [] : [n]
415}
416const ge = {
417 name: "@local/rooms-by-discovery",
418 version: 0,
419 id: 12,
420 encodeKey: (e) => fe.encode(ye(e)),
421 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
422 fe.encodeRange({
423 gt: e ? ye(e) : null,
424 lt: n ? ye(n) : null,
425 gte: t ? ye(t) : null,
426 lte: o ? ye(o) : null,
427 }),
428 encodeValue: (e) => ge.collection.encodeKey(e),
429 encodeIndexKeys: (e, n) => [fe.encode([e.capabilities.discoveryKeyPair.publicKey])],
430 reconstruct: (e, n) => n,
431 offset: Q.indexes.length,
432 collection: Q,
433}
434Q.indexes.push(ge)
435const pe = new e([e.BUFFER], { prefix: 13 })
436function be(e) {
437 const n = e.roomKey
438 return void 0 === n ? [] : [n]
439}
440const me = r("@local/room-preferences/hyperdb#13")
441function Ke(e, n, t) {
442 const o = pe.decode(n)
443 c(e)
444 const r = { start: 0, end: t.byteLength, buffer: t },
445 l = me.decode(r)
446 return ((l.roomKey = o[0]), l)
447}
448function ve(e) {
449 return { roomKey: pe.decode(e)[0] }
450}
451const xe = {
452 name: "@local/room-preferences",
453 id: 13,
454 version: 0,
455 encodeKey(e) {
456 const n = [e.roomKey]
457 return pe.encode(n)
458 },
459 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
460 pe.encodeRange({
461 gt: e ? be(e) : null,
462 lt: n ? be(n) : null,
463 gte: t ? be(t) : null,
464 lte: o ? be(o) : null,
465 }),
466 encodeValue(e, n, o) {
467 c(e)
468 const r = { start: 0, end: 0, buffer: null }
469 return (me.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), me.encode(r, o), r.buffer)
470 },
471 trigger: null,
472 reconstruct: Ke,
473 reconstructKey: ve,
474 indexes: [],
475 decodedVersion: 0,
476 },
477 he = new e([e.BUFFER], { prefix: 14 })
478function Re(e) {
479 const n = e.mailbox
480 return void 0 === n ? [] : [n]
481}
482const Ue = r("@local/writer/hyperdb#14")
483function we(e, n, t) {
484 const o = he.decode(n)
485 c(e)
486 const r = { start: 0, end: t.byteLength, buffer: t },
487 l = Ue.decode(r)
488 return ((l.mailbox = o[0]), l)
489}
490function Fe(e) {
491 return { mailbox: he.decode(e)[0] }
492}
493const Ve = {
494 name: "@local/writers",
495 id: 14,
496 version: 0,
497 encodeKey(e) {
498 const n = [e.mailbox]
499 return he.encode(n)
500 },
501 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
502 he.encodeRange({
503 gt: e ? Re(e) : null,
504 lt: n ? Re(n) : null,
505 gte: t ? Re(t) : null,
506 lte: o ? Re(o) : null,
507 }),
508 encodeValue(e, n, o) {
509 c(e)
510 const r = { start: 0, end: 0, buffer: null }
511 return (Ue.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), Ue.encode(r, o), r.buffer)
512 },
513 trigger: null,
514 reconstruct: we,
515 reconstructKey: Fe,
516 indexes: [],
517 decodedVersion: 0,
518 },
519 ke = new e([e.BUFFER], { prefix: 15 }),
520 Be = d.writersByWakeupTopicMap
521function Ie(e) {
522 const n = e.wakeupTopic
523 return void 0 === n ? [] : [n]
524}
525const Ee = {
526 name: "@local/writers-by-wakeup-topic",
527 version: 0,
528 id: 15,
529 encodeKey: (e) => ke.encode(Ie(e)),
530 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
531 ke.encodeRange({
532 gt: e ? Ie(e) : null,
533 lt: n ? Ie(n) : null,
534 gte: t ? Ie(t) : null,
535 lte: o ? Ie(o) : null,
536 }),
537 encodeValue: (e) => Ee.collection.encodeKey(e),
538 encodeIndexKeys(e, n) {
539 const t = Be(e, n),
540 o = new Array(t.length)
541 for (let e = 0; e < t.length; e++) {
542 const n = t[e]
543 o[e] = ke.encode([n.wakeupTopic])
544 }
545 return o
546 },
547 reconstruct: (e, n) => n,
548 offset: Ve.indexes.length,
549 collection: Ve,
550}
551Ve.indexes.push(Ee)
552const Te = new e([e.BUFFER], { prefix: 16 }),
553 Le = d.writersByRoomKeyMap
554function Ne(e) {
555 const n = e.roomKey
556 return void 0 === n ? [] : [n]
557}
558const De = {
559 name: "@local/writers-by-room-key",
560 version: 0,
561 id: 16,
562 encodeKey: (e) => Te.encode(Ne(e)),
563 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
564 Te.encodeRange({
565 gt: e ? Ne(e) : null,
566 lt: n ? Ne(n) : null,
567 gte: t ? Ne(t) : null,
568 lte: o ? Ne(o) : null,
569 }),
570 encodeValue: (e) => De.collection.encodeKey(e),
571 encodeIndexKeys(e, n) {
572 const t = Le(e, n),
573 o = new Array(t.length)
574 for (let e = 0; e < t.length; e++) {
575 const n = t[e]
576 o[e] = Te.encode([n.roomKey])
577 }
578 return o
579 },
580 reconstruct: (e, n) => n,
581 offset: Ve.indexes.length,
582 collection: Ve,
583}
584Ve.indexes.push(De)
585const Ae = new e([e.BUFFER], { prefix: 17 })
586function Pe(e) {
587 const n = e.key
588 return void 0 === n ? [] : [n]
589}
590const Me = r("@local/member/hyperdb#17")
591function Oe(e, n, t) {
592 const o = Ae.decode(n)
593 c(e)
594 const r = { start: 0, end: t.byteLength, buffer: t },
595 l = Me.decode(r)
596 return ((l.key = o[0]), l)
597}
598function Ge(e) {
599 return { key: Ae.decode(e)[0] }
600}
601const Se = {
602 name: "@local/members",
603 id: 17,
604 version: 0,
605 encodeKey(e) {
606 const n = [e.key]
607 return Ae.encode(n)
608 },
609 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
610 Ae.encodeRange({
611 gt: e ? Pe(e) : null,
612 lt: n ? Pe(n) : null,
613 gte: t ? Pe(t) : null,
614 lte: o ? Pe(o) : null,
615 }),
616 encodeValue(e, n, o) {
617 c(e)
618 const r = { start: 0, end: 0, buffer: null }
619 return (Me.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), Me.encode(r, o), r.buffer)
620 },
621 trigger: null,
622 reconstruct: Oe,
623 reconstructKey: Ge,
624 indexes: [],
625 decodedVersion: 0,
626 },
627 qe = new e([e.BUFFER], { prefix: 18 })
628function Ce(e) {
629 const n = e.device?.key
630 return void 0 === n ? [] : [n]
631}
632const je = r("@local/device/hyperdb#18")
633function We(e, n, t) {
634 const o = qe.decode(n)
635 c(e)
636 const r = { start: 0, end: t.byteLength, buffer: t },
637 l = je.decode(r)
638 return ((l.device.key = o[0]), l)
639}
640function ze(e) {
641 return { device: { key: qe.decode(e)[0] } }
642}
643const He = {
644 name: "@local/devices",
645 id: 18,
646 version: 0,
647 encodeKey(e) {
648 const n = [e.device.key]
649 return qe.encode(n)
650 },
651 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
652 qe.encodeRange({
653 gt: e ? Ce(e) : null,
654 lt: n ? Ce(n) : null,
655 gte: t ? Ce(t) : null,
656 lte: o ? Ce(o) : null,
657 }),
658 encodeValue(e, n, o) {
659 c(e)
660 const r = { start: 0, end: 0, buffer: null }
661 return (je.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), je.encode(r, o), r.buffer)
662 },
663 trigger: null,
664 reconstruct: We,
665 reconstructKey: ze,
666 indexes: [],
667 decodedVersion: 0,
668 },
669 Je = new e([e.BUFFER], { prefix: 19 })
670function Qe(e) {
671 const n = e.memberKey
672 return void 0 === n ? [] : [n]
673}
674const Xe = r("@keet-private-id/contact/hyperdb#19")
675function Ye(e, n, t) {
676 const o = Je.decode(n)
677 c(e)
678 const r = { start: 0, end: t.byteLength, buffer: t },
679 l = Xe.decode(r)
680 return ((l.memberKey = o[0]), l)
681}
682function Ze(e) {
683 return { memberKey: Je.decode(e)[0] }
684}
685const $e = {
686 name: "@local/contacts",
687 id: 19,
688 version: 0,
689 encodeKey(e) {
690 const n = [e.memberKey]
691 return Je.encode(n)
692 },
693 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
694 Je.encodeRange({
695 gt: e ? Qe(e) : null,
696 lt: n ? Qe(n) : null,
697 gte: t ? Qe(t) : null,
698 lte: o ? Qe(o) : null,
699 }),
700 encodeValue(e, n, o) {
701 c(e)
702 const r = { start: 0, end: 0, buffer: null }
703 return (Xe.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), Xe.encode(r, o), r.buffer)
704 },
705 trigger: null,
706 reconstruct: Ye,
707 reconstructKey: Ze,
708 indexes: [],
709 decodedVersion: 0,
710 },
711 _e = new e([e.BUFFER], { prefix: 20 }),
712 en = d.blockedContactsMap
713function nn(e) {
714 const n = e.memberKey
715 return void 0 === n ? [] : [n]
716}
717const tn = {
718 name: "@local/blocked-contacts",
719 version: 0,
720 id: 20,
721 encodeKey: (e) => _e.encode(nn(e)),
722 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
723 _e.encodeRange({
724 gt: e ? nn(e) : null,
725 lt: n ? nn(n) : null,
726 gte: t ? nn(t) : null,
727 lte: o ? nn(o) : null,
728 }),
729 encodeValue: (e) => tn.collection.encodeKey(e),
730 encodeIndexKeys(e, n) {
731 const t = en(e, n),
732 o = new Array(t.length)
733 for (let e = 0; e < t.length; e++) {
734 const n = t[e]
735 o[e] = _e.encode([n.memberKey])
736 }
737 return o
738 },
739 reconstruct: (e, n) => n,
740 offset: $e.indexes.length,
741 collection: $e,
742}
743$e.indexes.push(tn)
744const on = new e([e.UINT, e.UINT, e.UINT, e.BUFFER], { prefix: 21 })
745function rn(e) {
746 const n = [],
747 t = e.priority
748 if (void 0 === t) return n
749 n.push(t)
750 const o = e.timestamp
751 if (void 0 === o) return n
752 n.push(o)
753 const r = e.type
754 if (void 0 === r) return n
755 n.push(r)
756 const c = e.discoveryKey
757 return (void 0 === c || n.push(c), n)
758}
759const cn = r("@local/task/hyperdb#21")
760function ln(e, n, t) {
761 const o = on.decode(n)
762 c(e)
763 const r = { start: 0, end: t.byteLength, buffer: t },
764 l = cn.decode(r)
765 return ((l.priority = o[0]), (l.timestamp = o[1]), (l.type = o[2]), (l.discoveryKey = o[3]), l)
766}
767function dn(e) {
768 const n = on.decode(e)
769 return { priority: n[0], timestamp: n[1], type: n[2], discoveryKey: n[3] }
770}
771const sn = {
772 name: "@local/tasks",
773 id: 21,
774 version: 0,
775 encodeKey(e) {
776 const n = [e.priority, e.timestamp, e.type, e.discoveryKey]
777 return on.encode(n)
778 },
779 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
780 on.encodeRange({
781 gt: e ? rn(e) : null,
782 lt: n ? rn(n) : null,
783 gte: t ? rn(t) : null,
784 lte: o ? rn(o) : null,
785 }),
786 encodeValue(e, n, o) {
787 c(e)
788 const r = { start: 0, end: 0, buffer: null }
789 return (cn.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), cn.encode(r, o), r.buffer)
790 },
791 trigger: null,
792 reconstruct: ln,
793 reconstructKey: dn,
794 indexes: [],
795 decodedVersion: 0,
796 },
797 un = new e([e.UINT, e.BUFFER], { prefix: 22 })
798function an(e) {
799 const n = [],
800 t = e.type
801 if (void 0 === t) return n
802 n.push(t)
803 const o = e.discoveryKey
804 return (void 0 === o || n.push(o), n)
805}
806const fn = {
807 name: "@local/tasks-by-type",
808 version: 0,
809 id: 22,
810 encodeKey: (e) => un.encode(an(e)),
811 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
812 un.encodeRange({
813 gt: e ? an(e) : null,
814 lt: n ? an(n) : null,
815 gte: t ? an(t) : null,
816 lte: o ? an(o) : null,
817 }),
818 encodeValue: (e) => fn.collection.encodeKey(e),
819 encodeIndexKeys: (e, n) => [un.encode([e.type, e.discoveryKey])],
820 reconstruct: (e, n) => n,
821 offset: sn.indexes.length,
822 collection: sn,
823}
824sn.indexes.push(fn)
825const yn = new e([e.BUFFER, e.UINT], { prefix: 23 })
826function gn(e) {
827 const n = [],
828 t = e.file?.pointer?.externalBlob?.key
829 if (void 0 === t) return n
830 n.push(t)
831 const o = e.file?.pointer?.externalBlob?.blob?.blockOffset
832 return (void 0 === o || n.push(o), n)
833}
834const pn = r("@local/file/hyperdb#23")
835function bn(e, n, t) {
836 const o = yn.decode(n)
837 c(e)
838 const r = { start: 0, end: t.byteLength, buffer: t },
839 l = pn.decode(r)
840 return (
841 (l.file.pointer.externalBlob.key = o[0]),
842 (l.file.pointer.externalBlob.blob.blockOffset = o[1]),
843 (Kn.decodedVersion = l.version),
844 l
845 )
846}
847function mn(e) {
848 return { file: { pointer: { externalBlob: { blob: { blockOffset: yn.decode(e)[1] } } } } }
849}
850const Kn = {
851 name: "@local/blob-files",
852 id: 23,
853 version: 4,
854 encodeKey(e) {
855 const n = [e.file.pointer.externalBlob.key, e.file.pointer.externalBlob.blob.blockOffset]
856 return yn.encode(n)
857 },
858 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
859 yn.encodeRange({
860 gt: e ? gn(e) : null,
861 lt: n ? gn(n) : null,
862 gte: t ? gn(t) : null,
863 lte: o ? gn(o) : null,
864 }),
865 encodeValue(e, n, o) {
866 c(e)
867 const r = { start: 0, end: 0, buffer: null }
868 return (
869 (o.version = n),
870 pn.preencode(r, o),
871 (r.buffer = t.allocUnsafe(r.end)),
872 pn.encode(r, o),
873 r.buffer
874 )
875 },
876 trigger: null,
877 reconstruct: bn,
878 reconstructKey: mn,
879 indexes: [],
880 decodedVersion: 0,
881 },
882 vn = new e([e.BUFFER, e.STRING, e.UINT], { prefix: 24 })
883function xn(e) {
884 const n = [],
885 t = e.file?.pointer?.externalDrive?.key
886 if (void 0 === t) return n
887 n.push(t)
888 const o = e.file?.pointer?.externalDrive?.path
889 if (void 0 === o) return n
890 n.push(o)
891 const r = e.file?.pointer?.externalDrive?.version
892 return (void 0 === r || n.push(r), n)
893}
894const hn = r("@local/file/hyperdb#24")
895function Rn(e, n, t) {
896 const o = vn.decode(n)
897 c(e)
898 const r = { start: 0, end: t.byteLength, buffer: t },
899 l = hn.decode(r)
900 return (
901 (l.file.pointer.externalDrive.key = o[0]),
902 (l.file.pointer.externalDrive.path = o[1]),
903 (l.file.pointer.externalDrive.version = o[2]),
904 (wn.decodedVersion = l.version),
905 l
906 )
907}
908function Un(e) {
909 return { file: { pointer: { externalDrive: { version: vn.decode(e)[2] } } } }
910}
911const wn = {
912 name: "@local/drive-files",
913 id: 24,
914 version: 4,
915 encodeKey(e) {
916 const n = [
917 e.file.pointer.externalDrive.key,
918 e.file.pointer.externalDrive.path,
919 e.file.pointer.externalDrive.version,
920 ]
921 return vn.encode(n)
922 },
923 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
924 vn.encodeRange({
925 gt: e ? xn(e) : null,
926 lt: n ? xn(n) : null,
927 gte: t ? xn(t) : null,
928 lte: o ? xn(o) : null,
929 }),
930 encodeValue(e, n, o) {
931 c(e)
932 const r = { start: 0, end: 0, buffer: null }
933 return (
934 (o.version = n),
935 hn.preencode(r, o),
936 (r.buffer = t.allocUnsafe(r.end)),
937 hn.encode(r, o),
938 r.buffer
939 )
940 },
941 trigger: null,
942 reconstruct: Rn,
943 reconstructKey: Un,
944 indexes: [],
945 decodedVersion: 0,
946 },
947 Fn = new e([e.BUFFER, e.BUFFER, e.UINT], { prefix: 25 })
948function Vn(e) {
949 const n = [],
950 t = e.roomKey
951 if (void 0 === t) return n
952 n.push(t)
953 const o = e.file?.pointer?.externalBlob?.key
954 if (void 0 === o) return n
955 n.push(o)
956 const r = e.file?.pointer?.externalBlob?.blob?.blockOffset
957 return (void 0 === r || n.push(r), n)
958}
959const kn = {
960 name: "@local/blob-files-by-room",
961 version: 0,
962 id: 25,
963 encodeKey: (e) => Fn.encode(Vn(e)),
964 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
965 Fn.encodeRange({
966 gt: e ? Vn(e) : null,
967 lt: n ? Vn(n) : null,
968 gte: t ? Vn(t) : null,
969 lte: o ? Vn(o) : null,
970 }),
971 encodeValue: (e) => kn.collection.encodeKey(e),
972 encodeIndexKeys: (e, n) => [
973 Fn.encode([
974 e.roomKey,
975 e.file.pointer.externalBlob.key,
976 e.file.pointer.externalBlob.blob.blockOffset,
977 ]),
978 ],
979 reconstruct: (e, n) => n,
980 offset: Kn.indexes.length,
981 collection: Kn,
982}
983Kn.indexes.push(kn)
984const Bn = new e([e.BUFFER, e.BUFFER, e.STRING, e.UINT], { prefix: 26 })
985function In(e) {
986 const n = [],
987 t = e.roomKey
988 if (void 0 === t) return n
989 n.push(t)
990 const o = e.file?.pointer?.externalDrive?.key
991 if (void 0 === o) return n
992 n.push(o)
993 const r = e.file?.pointer?.externalDrive?.path
994 if (void 0 === r) return n
995 n.push(r)
996 const c = e.file?.pointer?.externalDrive?.version
997 return (void 0 === c || n.push(c), n)
998}
999const En = {
1000 name: "@local/drive-files-by-room",
1001 version: 0,
1002 id: 26,
1003 encodeKey: (e) => Bn.encode(In(e)),
1004 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1005 Bn.encodeRange({
1006 gt: e ? In(e) : null,
1007 lt: n ? In(n) : null,
1008 gte: t ? In(t) : null,
1009 lte: o ? In(o) : null,
1010 }),
1011 encodeValue: (e) => En.collection.encodeKey(e),
1012 encodeIndexKeys: (e, n) => [
1013 Bn.encode([
1014 e.roomKey,
1015 e.file.pointer.externalDrive.key,
1016 e.file.pointer.externalDrive.path,
1017 e.file.pointer.externalDrive.version,
1018 ]),
1019 ],
1020 reconstruct: (e, n) => n,
1021 offset: wn.indexes.length,
1022 collection: wn,
1023}
1024wn.indexes.push(En)
1025const Tn = new e([e.BUFFER], { prefix: 27 })
1026function Ln(e) {
1027 const n = e.discoveryPublicKey
1028 return void 0 === n ? [] : [n]
1029}
1030const Nn = r("@local/background-sync-room/hyperdb#27")
1031function Dn(e, n, t) {
1032 const o = Tn.decode(n)
1033 c(e)
1034 const r = { start: 0, end: t.byteLength, buffer: t },
1035 l = Nn.decode(r)
1036 return ((l.discoveryPublicKey = o[0]), l)
1037}
1038function An(e) {
1039 return { discoveryPublicKey: Tn.decode(e)[0] }
1040}
1041const Pn = {
1042 name: "@local/background-sync",
1043 id: 27,
1044 version: 0,
1045 encodeKey(e) {
1046 const n = [e.discoveryPublicKey]
1047 return Tn.encode(n)
1048 },
1049 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1050 Tn.encodeRange({
1051 gt: e ? Ln(e) : null,
1052 lt: n ? Ln(n) : null,
1053 gte: t ? Ln(t) : null,
1054 lte: o ? Ln(o) : null,
1055 }),
1056 encodeValue(e, n, o) {
1057 c(e)
1058 const r = { start: 0, end: 0, buffer: null }
1059 return (Nn.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), Nn.encode(r, o), r.buffer)
1060 },
1061 trigger: null,
1062 reconstruct: Dn,
1063 reconstructKey: An,
1064 indexes: [],
1065 decodedVersion: 0,
1066 },
1067 Mn = new e([e.UINT, e.BUFFER], { prefix: 28 }),
1068 On = d.dirtyByTimestampMap
1069function Gn(e) {
1070 const n = e.timestamp
1071 return void 0 === n ? [] : [n]
1072}
1073const Sn = {
1074 name: "@local/background-sync-by-dirty",
1075 version: 0,
1076 id: 28,
1077 encodeKey: (e) => Mn.encode(Gn(e)),
1078 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1079 Mn.encodeRange({
1080 gt: e ? Gn(e) : null,
1081 lt: n ? Gn(n) : null,
1082 gte: t ? Gn(t) : null,
1083 lte: o ? Gn(o) : null,
1084 }),
1085 encodeValue: (e) => Sn.collection.encodeKey(e),
1086 encodeIndexKeys(e, n) {
1087 const t = On(e, n),
1088 o = new Array(t.length)
1089 for (let n = 0; n < t.length; n++) {
1090 const r = t[n]
1091 o[n] = Mn.encode([r.timestamp, e.discoveryPublicKey])
1092 }
1093 return o
1094 },
1095 reconstruct: (e, n) => n,
1096 offset: Pn.indexes.length,
1097 collection: Pn,
1098}
1099Pn.indexes.push(Sn)
1100const qn = new e([e.BUFFER, e.BUFFER], { prefix: 29 })
1101function Cn(e) {
1102 const n = [],
1103 t = e.key
1104 if (void 0 === t) return n
1105 n.push(t)
1106 const o = e.responsePublicKey
1107 return (void 0 === o || n.push(o), n)
1108}
1109const jn = r("@local/writer-append/hyperdb#29")
1110function Wn(e, n, t) {
1111 const o = qn.decode(n)
1112 c(e)
1113 const r = { start: 0, end: t.byteLength, buffer: t },
1114 l = jn.decode(r)
1115 return ((l.key = o[0]), (l.responsePublicKey = o[1]), l)
1116}
1117function zn(e) {
1118 const n = qn.decode(e)
1119 return { key: n[0], responsePublicKey: n[1] }
1120}
1121const Hn = {
1122 name: "@local/writer-appends",
1123 id: 29,
1124 version: 0,
1125 encodeKey(e) {
1126 const n = [e.key, e.responsePublicKey]
1127 return qn.encode(n)
1128 },
1129 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1130 qn.encodeRange({
1131 gt: e ? Cn(e) : null,
1132 lt: n ? Cn(n) : null,
1133 gte: t ? Cn(t) : null,
1134 lte: o ? Cn(o) : null,
1135 }),
1136 encodeValue(e, n, o) {
1137 c(e)
1138 const r = { start: 0, end: 0, buffer: null }
1139 return (jn.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), jn.encode(r, o), r.buffer)
1140 },
1141 trigger: null,
1142 reconstruct: Wn,
1143 reconstructKey: zn,
1144 indexes: [],
1145 decodedVersion: 0,
1146 },
1147 Jn = new e([e.BUFFER], { prefix: 30 })
1148function Qn(e) {
1149 const n = e.roomKey
1150 return void 0 === n ? [] : [n]
1151}
1152const Xn = r("@local/room-metadata/hyperdb#30")
1153function Yn(e, n, t) {
1154 const o = Jn.decode(n)
1155 c(e)
1156 const r = { start: 0, end: t.byteLength, buffer: t },
1157 l = Xn.decode(r)
1158 return ((l.roomKey = o[0]), l)
1159}
1160function Zn(e) {
1161 return { roomKey: Jn.decode(e)[0] }
1162}
1163const $n = {
1164 name: "@local/room-metadata",
1165 id: 30,
1166 version: 0,
1167 encodeKey(e) {
1168 const n = [e.roomKey]
1169 return Jn.encode(n)
1170 },
1171 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1172 Jn.encodeRange({
1173 gt: e ? Qn(e) : null,
1174 lt: n ? Qn(n) : null,
1175 gte: t ? Qn(t) : null,
1176 lte: o ? Qn(o) : null,
1177 }),
1178 encodeValue(e, n, o) {
1179 c(e)
1180 const r = { start: 0, end: 0, buffer: null }
1181 return (Xn.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), Xn.encode(r, o), r.buffer)
1182 },
1183 trigger: null,
1184 reconstruct: Yn,
1185 reconstructKey: Zn,
1186 indexes: [],
1187 decodedVersion: 0,
1188 },
1189 _n = new e([], { prefix: 31 })
1190function et(e) {
1191 return []
1192}
1193const nt = r("@local/debug")
1194function tt(e, n, t) {
1195 c(e)
1196 const o = { start: 0, end: t.byteLength, buffer: t }
1197 return nt.decode(o)
1198}
1199function ot(e) {
1200 return {}
1201}
1202const rt = {
1203 name: "@local/debug",
1204 id: 31,
1205 version: 0,
1206 encodeKey: (e) => _n.encode([]),
1207 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1208 _n.encodeRange({
1209 gt: e ? et(e) : null,
1210 lt: n ? et(n) : null,
1211 gte: t ? et(t) : null,
1212 lte: o ? et(o) : null,
1213 }),
1214 encodeValue(e, n, o) {
1215 c(e)
1216 const r = { start: 0, end: 0, buffer: null }
1217 return (nt.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), nt.encode(r, o), r.buffer)
1218 },
1219 trigger: null,
1220 reconstruct: tt,
1221 reconstructKey: ot,
1222 indexes: [],
1223 decodedVersion: 0,
1224 },
1225 ct = new e([e.BUFFER, e.BUFFER], { prefix: 32 }),
1226 lt = d.roomsByContactMap
1227function dt(e) {
1228 const n = e.contact
1229 return void 0 === n ? [] : [n]
1230}
1231const st = {
1232 name: "@local/rooms-by-contact",
1233 version: 1,
1234 id: 32,
1235 encodeKey: (e) => ct.encode(dt(e)),
1236 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1237 ct.encodeRange({
1238 gt: e ? dt(e) : null,
1239 lt: n ? dt(n) : null,
1240 gte: t ? dt(t) : null,
1241 lte: o ? dt(o) : null,
1242 }),
1243 encodeValue: (e) => st.collection.encodeKey(e),
1244 encodeIndexKeys(e, n) {
1245 const t = lt(e, n),
1246 o = new Array(t.length)
1247 for (let n = 0; n < t.length; n++) {
1248 const r = t[n]
1249 o[n] = ct.encode([r.contact, e.roomKey])
1250 }
1251 return o
1252 },
1253 reconstruct: (e, n) => n,
1254 offset: Q.indexes.length,
1255 collection: Q,
1256}
1257Q.indexes.push(st)
1258const ut = new e([e.BUFFER], { prefix: 33 })
1259function it(e) {
1260 const n = e.roomKey
1261 return void 0 === n ? [] : [n]
1262}
1263const at = r("@local/unread/hyperdb#33")
1264function ft(e, n, t) {
1265 const o = ut.decode(n)
1266 c(e)
1267 const r = { start: 0, end: t.byteLength, buffer: t },
1268 l = at.decode(r)
1269 return ((l.roomKey = o[0]), l)
1270}
1271function yt(e) {
1272 return { roomKey: ut.decode(e)[0] }
1273}
1274const gt = {
1275 name: "@local/unreads",
1276 id: 33,
1277 version: 0,
1278 encodeKey(e) {
1279 const n = [e.roomKey]
1280 return ut.encode(n)
1281 },
1282 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1283 ut.encodeRange({
1284 gt: e ? it(e) : null,
1285 lt: n ? it(n) : null,
1286 gte: t ? it(t) : null,
1287 lte: o ? it(o) : null,
1288 }),
1289 encodeValue(e, n, o) {
1290 c(e)
1291 const r = { start: 0, end: 0, buffer: null }
1292 return (at.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), at.encode(r, o), r.buffer)
1293 },
1294 trigger: null,
1295 reconstruct: ft,
1296 reconstructKey: yt,
1297 indexes: [],
1298 decodedVersion: 0,
1299 },
1300 pt = new e([], { prefix: 34 })
1301function bt(e) {
1302 return []
1303}
1304const mt = r("@local/hyperdht-record")
1305function Kt(e, n, t) {
1306 c(e)
1307 const o = { start: 0, end: t.byteLength, buffer: t }
1308 return mt.decode(o)
1309}
1310function vt(e) {
1311 return {}
1312}
1313const xt = {
1314 name: "@local/hyperdht",
1315 id: 34,
1316 version: 0,
1317 encodeKey: (e) => pt.encode([]),
1318 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1319 pt.encodeRange({
1320 gt: e ? bt(e) : null,
1321 lt: n ? bt(n) : null,
1322 gte: t ? bt(t) : null,
1323 lte: o ? bt(o) : null,
1324 }),
1325 encodeValue(e, n, o) {
1326 c(e)
1327 const r = { start: 0, end: 0, buffer: null }
1328 return (mt.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), mt.encode(r, o), r.buffer)
1329 },
1330 trigger: null,
1331 reconstruct: Kt,
1332 reconstructKey: vt,
1333 indexes: [],
1334 decodedVersion: 0,
1335 },
1336 ht = new e([e.UINT], { prefix: 35 })
1337function Rt(e) {
1338 const n = e.timestamp
1339 return void 0 === n ? [] : [n]
1340}
1341const Ut = r("@local/error-record/hyperdb#35")
1342function wt(e, n, t) {
1343 const o = ht.decode(n)
1344 c(e)
1345 const r = { start: 0, end: t.byteLength, buffer: t },
1346 l = Ut.decode(r)
1347 return ((l.timestamp = o[0]), l)
1348}
1349function Ft(e) {
1350 return { timestamp: ht.decode(e)[0] }
1351}
1352const Vt = {
1353 name: "@local/errors",
1354 id: 35,
1355 version: 0,
1356 encodeKey(e) {
1357 const n = [e.timestamp]
1358 return ht.encode(n)
1359 },
1360 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1361 ht.encodeRange({
1362 gt: e ? Rt(e) : null,
1363 lt: n ? Rt(n) : null,
1364 gte: t ? Rt(t) : null,
1365 lte: o ? Rt(o) : null,
1366 }),
1367 encodeValue(e, n, o) {
1368 c(e)
1369 const r = { start: 0, end: 0, buffer: null }
1370 return (Ut.preencode(r, o), (r.buffer = t.allocUnsafe(r.end)), Ut.encode(r, o), r.buffer)
1371 },
1372 trigger: null,
1373 reconstruct: wt,
1374 reconstructKey: Ft,
1375 indexes: [],
1376 decodedVersion: 0,
1377 },
1378 kt = new e([e.STRING, e.UINT], { prefix: 36 })
1379function Bt(e) {
1380 const n = [],
1381 t = e.code
1382 if (void 0 === t) return n
1383 n.push(t)
1384 const o = e.timestamp
1385 return (void 0 === o || n.push(o), n)
1386}
1387const It = {
1388 name: "@local/errors-by-code",
1389 version: 0,
1390 id: 36,
1391 encodeKey: (e) => kt.encode(Bt(e)),
1392 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1393 kt.encodeRange({
1394 gt: e ? Bt(e) : null,
1395 lt: n ? Bt(n) : null,
1396 gte: t ? Bt(t) : null,
1397 lte: o ? Bt(o) : null,
1398 }),
1399 encodeValue: (e) => It.collection.encodeKey(e),
1400 encodeIndexKeys: (e, n) => [kt.encode([e.code, e.timestamp])],
1401 reconstruct: (e, n) => n,
1402 offset: Vt.indexes.length,
1403 collection: Vt,
1404}
1405Vt.indexes.push(It)
1406const Et = new e([e.BUFFER], { prefix: 37 })
1407function Tt(e) {
1408 const n = e.roomKey
1409 return void 0 === n ? [] : [n]
1410}
1411const Lt = r("@local/file-stats/hyperdb#37")
1412function Nt(e, t, o) {
1413 const r = Et.decode(t)
1414 c(e)
1415 const l = { start: 0, end: o.byteLength, buffer: o },
1416 d = n.uint.decode(l)
1417 if (0 !== d) throw new Error("Unknown collection type: " + d)
1418 At.decodedVersion = n.uint.decode(l)
1419 const s = Lt.decode(l)
1420 return ((s.roomKey = r[0]), s)
1421}
1422function Dt(e) {
1423 return { roomKey: Et.decode(e)[0] }
1424}
1425const At = {
1426 name: "@local/file-stats",
1427 id: 37,
1428 version: 2,
1429 encodeKey(e) {
1430 const n = [e.roomKey]
1431 return Et.encode(n)
1432 },
1433 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1434 Et.encodeRange({
1435 gt: e ? Tt(e) : null,
1436 lt: n ? Tt(n) : null,
1437 gte: t ? Tt(t) : null,
1438 lte: o ? Tt(o) : null,
1439 }),
1440 encodeValue(e, n, o) {
1441 c(e)
1442 const r = { start: 0, end: 2, buffer: null }
1443 return (
1444 Lt.preencode(r, o),
1445 (r.buffer = t.allocUnsafe(r.end)),
1446 (r.buffer[r.start++] = 0),
1447 (r.buffer[r.start++] = n),
1448 Lt.encode(r, o),
1449 r.buffer
1450 )
1451 },
1452 trigger: null,
1453 reconstruct: Nt,
1454 reconstructKey: Dt,
1455 indexes: [],
1456 decodedVersion: 0,
1457 },
1458 Pt = new e([e.UINT, e.BUFFER], { prefix: 38 }),
1459 Mt = d.roomsByFavoriteAndTimestampMap
1460function Ot(e) {
1461 const n = e.timestamp
1462 return void 0 === n ? [] : [n]
1463}
1464const Gt = {
1465 name: "@local/rooms-by-favorite-and-timestamp",
1466 version: 3,
1467 id: 38,
1468 encodeKey: (e) => Pt.encode(Ot(e)),
1469 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1470 Pt.encodeRange({
1471 gt: e ? Ot(e) : null,
1472 lt: n ? Ot(n) : null,
1473 gte: t ? Ot(t) : null,
1474 lte: o ? Ot(o) : null,
1475 }),
1476 encodeValue: (e) => Gt.collection.encodeKey(e),
1477 encodeIndexKeys(e, n) {
1478 const t = Mt(e, n),
1479 o = new Array(t.length)
1480 for (let n = 0; n < t.length; n++) {
1481 const r = t[n]
1482 o[n] = Pt.encode([r.timestamp, e.roomKey])
1483 }
1484 return o
1485 },
1486 reconstruct: (e, n) => n,
1487 offset: Q.indexes.length,
1488 collection: Q,
1489}
1490Q.indexes.push(Gt)
1491const St = new e([e.UINT, e.BUFFER, e.UINT], { prefix: 39 })
1492function qt(e) {
1493 const n = [],
1494 t = e.lastAccessed
1495 if (void 0 === t) return n
1496 n.push(t)
1497 const o = e.file?.pointer?.externalBlob?.key
1498 if (void 0 === o) return n
1499 n.push(o)
1500 const r = e.file?.pointer?.externalBlob?.blob?.blockOffset
1501 return (void 0 === r || n.push(r), n)
1502}
1503const Ct = {
1504 name: "@local/blob-files-by-last-accessed",
1505 version: 4,
1506 id: 39,
1507 encodeKey: (e) => St.encode(qt(e)),
1508 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1509 St.encodeRange({
1510 gt: e ? qt(e) : null,
1511 lt: n ? qt(n) : null,
1512 gte: t ? qt(t) : null,
1513 lte: o ? qt(o) : null,
1514 }),
1515 encodeValue: (e) => Ct.collection.encodeKey(e),
1516 encodeIndexKeys: (e, n) => [
1517 St.encode([
1518 e.lastAccessed,
1519 e.file.pointer.externalBlob.key,
1520 e.file.pointer.externalBlob.blob.blockOffset,
1521 ]),
1522 ],
1523 reconstruct: (e, n) => n,
1524 offset: Kn.indexes.length,
1525 collection: Kn,
1526}
1527Kn.indexes.push(Ct)
1528const jt = new e([e.UINT, e.BUFFER, e.STRING, e.UINT], { prefix: 40 })
1529function Wt(e) {
1530 const n = [],
1531 t = e.lastAccessed
1532 if (void 0 === t) return n
1533 n.push(t)
1534 const o = e.file?.pointer?.externalDrive?.key
1535 if (void 0 === o) return n
1536 n.push(o)
1537 const r = e.file?.pointer?.externalDrive?.path
1538 if (void 0 === r) return n
1539 n.push(r)
1540 const c = e.file?.pointer?.externalDrive?.version
1541 return (void 0 === c || n.push(c), n)
1542}
1543const zt = {
1544 name: "@local/drive-files-by-last-accessed",
1545 version: 4,
1546 id: 40,
1547 encodeKey: (e) => jt.encode(Wt(e)),
1548 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1549 jt.encodeRange({
1550 gt: e ? Wt(e) : null,
1551 lt: n ? Wt(n) : null,
1552 gte: t ? Wt(t) : null,
1553 lte: o ? Wt(o) : null,
1554 }),
1555 encodeValue: (e) => zt.collection.encodeKey(e),
1556 encodeIndexKeys: (e, n) => [
1557 jt.encode([
1558 e.lastAccessed,
1559 e.file.pointer.externalDrive.key,
1560 e.file.pointer.externalDrive.path,
1561 e.file.pointer.externalDrive.version,
1562 ]),
1563 ],
1564 reconstruct: (e, n) => n,
1565 offset: wn.indexes.length,
1566 collection: wn,
1567}
1568wn.indexes.push(zt)
1569const Ht = new e([], { prefix: 41 })
1570function Jt(e) {
1571 return []
1572}
1573const Qt = r("@local/file-gc-info")
1574function Xt(e, t, o) {
1575 c(e)
1576 const r = { start: 0, end: o.byteLength, buffer: o },
1577 l = n.uint.decode(r)
1578 if (0 !== l) throw new Error("Unknown collection type: " + l)
1579 return ((Zt.decodedVersion = n.uint.decode(r)), Qt.decode(r))
1580}
1581function Yt(e) {
1582 return {}
1583}
1584const Zt = {
1585 name: "@local/file-gc-info",
1586 id: 41,
1587 version: 4,
1588 encodeKey: (e) => Ht.encode([]),
1589 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1590 Ht.encodeRange({
1591 gt: e ? Jt(e) : null,
1592 lt: n ? Jt(n) : null,
1593 gte: t ? Jt(t) : null,
1594 lte: o ? Jt(o) : null,
1595 }),
1596 encodeValue(e, n, o) {
1597 c(e)
1598 const r = { start: 0, end: 2, buffer: null }
1599 return (
1600 Qt.preencode(r, o),
1601 (r.buffer = t.allocUnsafe(r.end)),
1602 (r.buffer[r.start++] = 0),
1603 (r.buffer[r.start++] = n),
1604 Qt.encode(r, o),
1605 r.buffer
1606 )
1607 },
1608 trigger: null,
1609 reconstruct: Xt,
1610 reconstructKey: Yt,
1611 indexes: [],
1612 decodedVersion: 0,
1613 },
1614 $t = new e([], { prefix: 42 })
1615function _t(e) {
1616 return []
1617}
1618const eo = r("@local/environment-record")
1619function no(e, t, o) {
1620 c(e)
1621 const r = { start: 0, end: o.byteLength, buffer: o },
1622 l = n.uint.decode(r)
1623 if (0 !== l) throw new Error("Unknown collection type: " + l)
1624 return ((oo.decodedVersion = n.uint.decode(r)), eo.decode(r))
1625}
1626function to(e) {
1627 return {}
1628}
1629const oo = {
1630 name: "@local/environment",
1631 id: 42,
1632 version: 5,
1633 encodeKey: (e) => $t.encode([]),
1634 encodeKeyRange: ({ gt: e, lt: n, gte: t, lte: o } = {}) =>
1635 $t.encodeRange({
1636 gt: e ? _t(e) : null,
1637 lt: n ? _t(n) : null,
1638 gte: t ? _t(t) : null,
1639 lte: o ? _t(o) : null,
1640 }),
1641 encodeValue(e, n, o) {
1642 c(e)
1643 const r = { start: 0, end: 2, buffer: null }
1644 return (
1645 eo.preencode(r, o),
1646 (r.buffer = t.allocUnsafe(r.end)),
1647 (r.buffer[r.start++] = 0),
1648 (r.buffer[r.start++] = n),
1649 eo.encode(r, o),
1650 r.buffer
1651 )
1652 },
1653 trigger: null,
1654 reconstruct: no,
1655 reconstructKey: to,
1656 indexes: [],
1657 decodedVersion: 0,
1658 },
1659 ro = [y, v, F, L, q, Q, xe, Ve, Se, He, $e, sn, Kn, wn, Pn, Hn, $n, rt, gt, xt, Vt, At, Zt, oo],
1660 co = [A, Z, ne, ce, se, ae, ge, Ee, De, tn, fn, kn, En, Sn, st, It, Gt, Ct, zt]
1661function lo(e) {
1662 switch (e) {
1663 case "@local/stats":
1664 return y
1665 case "@local/migrations":
1666 return v
1667 case "@local/room-migration-stats":
1668 return F
1669 case "@local/room-migrations":
1670 return L
1671 case "@local/identity":
1672 return q
1673 case "@local/rooms":
1674 return Q
1675 case "@local/room-preferences":
1676 return xe
1677 case "@local/writers":
1678 return Ve
1679 case "@local/members":
1680 return Se
1681 case "@local/devices":
1682 return He
1683 case "@local/contacts":
1684 return $e
1685 case "@local/tasks":
1686 return sn
1687 case "@local/blob-files":
1688 return Kn
1689 case "@local/drive-files":
1690 return wn
1691 case "@local/background-sync":
1692 return Pn
1693 case "@local/writer-appends":
1694 return Hn
1695 case "@local/room-metadata":
1696 return $n
1697 case "@local/debug":
1698 return rt
1699 case "@local/unreads":
1700 return gt
1701 case "@local/hyperdht":
1702 return xt
1703 case "@local/errors":
1704 return Vt
1705 case "@local/file-stats":
1706 return At
1707 case "@local/file-gc-info":
1708 return Zt
1709 case "@local/environment":
1710 return oo
1711 default:
1712 return null
1713 }
1714}
1715function so(e) {
1716 switch (e) {
1717 case "@local/room-migrations-by-priority":
1718 return A
1719 case "@local/rooms-by-discovery-key":
1720 return Z
1721 case "@local/rooms-by-timestamp":
1722 return ne
1723 case "@local/rooms-by-type-and-timestamp":
1724 return ce
1725 case "@local/rooms-by-wakeup-topic":
1726 return se
1727 case "@local/rooms-by-mailbox":
1728 return ae
1729 case "@local/rooms-by-discovery":
1730 return ge
1731 case "@local/writers-by-wakeup-topic":
1732 return Ee
1733 case "@local/writers-by-room-key":
1734 return De
1735 case "@local/blocked-contacts":
1736 return tn
1737 case "@local/tasks-by-type":
1738 return fn
1739 case "@local/blob-files-by-room":
1740 return kn
1741 case "@local/drive-files-by-room":
1742 return En
1743 case "@local/background-sync-by-dirty":
1744 return Sn
1745 case "@local/rooms-by-contact":
1746 return st
1747 case "@local/errors-by-code":
1748 return It
1749 case "@local/rooms-by-favorite-and-timestamp":
1750 return Gt
1751 case "@local/blob-files-by-last-accessed":
1752 return Ct
1753 case "@local/drive-files-by-last-accessed":
1754 return zt
1755 default:
1756 return null
1757 }
1758}
1759module.exports = {
1760 versions: l,
1761 collections: ro,
1762 indexes: co,
1763 resolveCollection: lo,
1764 resolveIndex: so,
1765}
keet-core-4.14.4-pretty/schema/spec/local/hyperdb/messages.js +5809 -0
……@@ -0,0 +1,5809 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 30
3let o = d
4const n = {
5 preencode(d, o) {
6 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.length))
7 },
8 encode(d, o) {
9 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.length))
10 },
11 decode: (d) => ({ key: e.fixed32.decode(d), length: e.uint.decode(d) }),
12 },
13 c = {
14 preencode(d, o) {
15 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.seq))
16 },
17 encode(d, o) {
18 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.seq))
19 },
20 decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
21 },
22 r = {
23 preencode(d, o) {
24 ;(e.fixed32.preencode(d, o.publicKey), e.fixed32.preencode(d, o.secretKey))
25 },
26 encode(d, o) {
27 ;(e.fixed32.encode(d, o.publicKey), e.fixed32.encode(d, o.secretKey))
28 },
29 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed32.decode(d) }),
30 },
31 t = {
32 preencode(d, o) {
33 ;(e.fixed32.preencode(d, o.publicKey), e.fixed64.preencode(d, o.secretKey))
34 },
35 encode(d, o) {
36 ;(e.fixed32.encode(d, o.publicKey), e.fixed64.encode(d, o.secretKey))
37 },
38 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed64.decode(d) }),
39 },
40 i = {
41 preencode(d, o) {
42 ;(e.fixed32.preencode(d, o.key),
43 d.end++,
44 o.encryptionKey && e.buffer.preencode(d, o.encryptionKey),
45 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
46 },
47 encode(d, o) {
48 const n = (o.encryptionKey ? 1 : 0) | (o.fastForwardTo ? 2 : 0)
49 ;(e.fixed32.encode(d, o.key),
50 e.uint.encode(d, n),
51 o.encryptionKey && e.buffer.encode(d, o.encryptionKey),
52 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
53 },
54 decode(d) {
55 const o = e.fixed32.decode(d),
56 n = e.uint.decode(d)
57 return {
58 key: o,
59 encryptionKey: 1 & n ? e.buffer.decode(d) : null,
60 fastForwardTo: 2 & n ? e.fixed32.decode(d) : null,
61 }
62 },
63 },
64 a = {
65 preencode(d, o) {
66 e.uint.preencode(d, o.timestamp)
67 },
68 encode(d, o) {
69 e.uint.encode(d, o.timestamp)
70 },
71 decode: (d) => ({ timestamp: e.uint.decode(d) }),
72 },
73 s = {
74 preencode(d, o) {
75 ;(e.uint.preencode(d, o.blockOffset),
76 e.uint.preencode(d, o.blockLength),
77 e.uint.preencode(d, o.byteOffset),
78 e.uint.preencode(d, o.byteLength))
79 },
80 encode(d, o) {
81 ;(e.uint.encode(d, o.blockOffset),
82 e.uint.encode(d, o.blockLength),
83 e.uint.encode(d, o.byteOffset),
84 e.uint.encode(d, o.byteLength))
85 },
86 decode: (d) => ({
87 blockOffset: e.uint.decode(d),
88 blockLength: e.uint.decode(d),
89 byteOffset: e.uint.decode(d),
90 byteLength: e.uint.decode(d),
91 }),
92 },
93 l = {
94 preencode(d, o) {
95 ;(e.uint.preencode(d, o.width), e.uint.preencode(d, o.height))
96 },
97 encode(d, o) {
98 ;(e.uint.encode(d, o.width), e.uint.encode(d, o.height))
99 },
100 decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
101 },
102 p = e.frame(l),
103 u = {
104 preencode(d, o) {
105 ;(d.end++,
106 o.name && e.string.preencode(d, o.name),
107 o.mimetype && e.string.preencode(d, o.mimetype),
108 o.dimensions && p.preencode(d, o.dimensions),
109 o.userdata && e.buffer.preencode(d, o.userdata),
110 o.duration && e.uint.preencode(d, o.duration))
111 },
112 encode(d, o) {
113 const n =
114 (o.name ? 1 : 0) |
115 (o.mimetype ? 2 : 0) |
116 (o.dimensions ? 4 : 0) |
117 (o.userdata ? 8 : 0) |
118 (o.duration ? 16 : 0) |
119 (o.isPreview ? 32 : 0)
120 ;(e.uint.encode(d, n),
121 o.name && e.string.encode(d, o.name),
122 o.mimetype && e.string.encode(d, o.mimetype),
123 o.dimensions && p.encode(d, o.dimensions),
124 o.userdata && e.buffer.encode(d, o.userdata),
125 o.duration && e.uint.encode(d, o.duration))
126 },
127 decode(d) {
128 const o = e.uint.decode(d)
129 return {
130 name: 1 & o ? e.string.decode(d) : null,
131 mimetype: 2 & o ? e.string.decode(d) : null,
132 dimensions: 4 & o ? p.decode(d) : null,
133 userdata: 8 & o ? e.buffer.decode(d) : null,
134 duration: 16 & o ? e.uint.decode(d) : 0,
135 isPreview: !!(32 & o),
136 }
137 },
138 },
139 f = {
140 preencode(d, o) {
141 ;(e.fixed32.preencode(d, o.key),
142 e.string.preencode(d, o.path),
143 e.uint.preencode(d, o.version),
144 e.uint.preencode(d, o.size))
145 },
146 encode(d, o) {
147 ;(e.fixed32.encode(d, o.key),
148 e.string.encode(d, o.path),
149 e.uint.encode(d, o.version),
150 e.uint.encode(d, o.size))
151 },
152 decode: (d) => ({
153 key: e.fixed32.decode(d),
154 path: e.string.decode(d),
155 version: e.uint.decode(d),
156 size: e.uint.decode(d),
157 }),
158 },
159 m = {
160 preencode(d, o) {
161 ;(e.fixed32.preencode(d, o.key), s.preencode(d, o.blob))
162 },
163 encode(d, o) {
164 ;(e.fixed32.encode(d, o.key), s.encode(d, o.blob))
165 },
166 decode: (d) => ({ key: e.fixed32.decode(d), blob: s.decode(d) }),
167 },
168 y = e.frame(m),
169 b = e.frame(f),
170 x = {
171 preencode(d, o) {
172 ;(d.end++,
173 o.inlined && e.buffer.preencode(d, o.inlined),
174 o.blob && s.preencode(d, o.blob),
175 o.externalBlob && y.preencode(d, o.externalBlob),
176 o.externalDrive && b.preencode(d, o.externalDrive))
177 },
178 encode(d, o) {
179 const n =
180 (o.inlined ? 1 : 0) |
181 (o.blob ? 2 : 0) |
182 (o.externalBlob ? 4 : 0) |
183 (o.externalDrive ? 8 : 0)
184 ;(e.uint.encode(d, n),
185 o.inlined && e.buffer.encode(d, o.inlined),
186 o.blob && s.encode(d, o.blob),
187 o.externalBlob && y.encode(d, o.externalBlob),
188 o.externalDrive && b.encode(d, o.externalDrive))
189 },
190 decode(d) {
191 const o = e.uint.decode(d)
192 return {
193 inlined: 1 & o ? e.buffer.decode(d) : null,
194 blob: 2 & o ? s.decode(d) : null,
195 externalBlob: 4 & o ? y.decode(d) : null,
196 externalDrive: 8 & o ? b.decode(d) : null,
197 }
198 },
199 },
200 v = e.frame(x),
201 k = e.frame(u),
202 g = {
203 preencode(d, o) {
204 ;(v.preencode(d, o.pointer),
205 d.end++,
206 o.metadata && k.preencode(d, o.metadata),
207 o.preview && ja.preencode(d, o.preview),
208 o.hash && e.fixed32.preencode(d, o.hash))
209 },
210 encode(d, o) {
211 const n = (o.metadata ? 1 : 0) | (o.preview ? 2 : 0) | (o.hash ? 4 : 0)
212 ;(v.encode(d, o.pointer),
213 e.uint.encode(d, n),
214 o.metadata && k.encode(d, o.metadata),
215 o.preview && ja.encode(d, o.preview),
216 o.hash && e.fixed32.encode(d, o.hash))
217 },
218 decode(d) {
219 const o = v.decode(d),
220 n = e.uint.decode(d)
221 return {
222 pointer: o,
223 metadata: 1 & n ? k.decode(d) : null,
224 preview: 2 & n ? ja.decode(d) : null,
225 hash: 4 & n ? e.fixed32.decode(d) : null,
226 }
227 },
228 },
229 K = e.frame(g),
230 h = K,
231 w = K,
232 R = {
233 preencode(e, d) {
234 ;(e.end++,
235 d.small && K.preencode(e, d.small),
236 d.medium && h.preencode(e, d.medium),
237 d.large && w.preencode(e, d.large))
238 },
239 encode(d, o) {
240 const n = (o.small ? 1 : 0) | (o.medium ? 2 : 0) | (o.large ? 4 : 0)
241 ;(e.uint.encode(d, n),
242 o.small && K.encode(d, o.small),
243 o.medium && h.encode(d, o.medium),
244 o.large && w.encode(d, o.large))
245 },
246 decode(d) {
247 const o = e.uint.decode(d)
248 return {
249 small: 1 & o ? K.decode(d) : null,
250 medium: 2 & o ? h.decode(d) : null,
251 large: 4 & o ? w.decode(d) : null,
252 }
253 },
254 },
255 P = {
256 preencode(e, d) {
257 e.end++
258 },
259 encode(d, o) {
260 const n = o.isDeleted ? 1 : 0
261 e.uint.encode(d, n)
262 },
263 decode: (d) => ({ isDeleted: !!(1 & e.uint.decode(d)) }),
264 },
265 T = e.frame(P),
266 A = K,
267 M = {
268 preencode(d, n) {
269 ;(e.uint.preencode(d, n.id),
270 c.preencode(d, n.oplog),
271 T.preencode(d, n.status),
272 A.preencode(d, n.file),
273 d.end++,
274 o >= 22 && n.version && e.uint.preencode(d, n.version))
275 },
276 encode(d, n) {
277 const r = o >= 22 && n.version ? 1 : 0
278 ;(e.uint.encode(d, n.id),
279 c.encode(d, n.oplog),
280 T.encode(d, n.status),
281 A.encode(d, n.file),
282 e.uint.encode(d, r),
283 o >= 22 && n.version && e.uint.encode(d, n.version))
284 },
285 decode(d) {
286 const n = e.uint.decode(d),
287 r = c.decode(d),
288 t = T.decode(d),
289 i = A.decode(d),
290 a = d.start < d.end ? e.uint.decode(d) : 0
291 return {
292 id: n,
293 oplog: r,
294 status: t,
295 file: i,
296 version: o >= 22 && 1 & a ? e.uint.decode(d) : 0,
297 }
298 },
299 },
300 D = {
301 preencode(e, d) {
302 e.end++
303 },
304 encode(d, o) {
305 const n = (o.isActive ? 1 : 0) | (o.isIndexing ? 2 : 0)
306 e.uint.encode(d, n)
307 },
308 decode(d) {
309 const o = e.uint.decode(d)
310 return { isActive: !!(1 & o), isIndexing: !!(2 & o) }
311 },
312 },
313 C = {
314 preencode(d, n) {
315 const c =
316 (n.isAdmin ? 1 : 0) |
317 (n.isModerator ? 2 : 0) |
318 (n.isPending ? 4 : 0) |
319 (n.isActive ? 8 : 0) |
320 (n.isMuted ? 16 : 0) |
321 (n.isBanned ? 32 : 0) |
322 (n.isShadowBanned ? 64 : 0) |
323 (o >= 19 && n.isRemoved ? 128 : 0)
324 e.uint.preencode(d, c)
325 },
326 encode(d, n) {
327 const c =
328 (n.isAdmin ? 1 : 0) |
329 (n.isModerator ? 2 : 0) |
330 (n.isPending ? 4 : 0) |
331 (n.isActive ? 8 : 0) |
332 (n.isMuted ? 16 : 0) |
333 (n.isBanned ? 32 : 0) |
334 (n.isShadowBanned ? 64 : 0) |
335 (o >= 19 && n.isRemoved ? 128 : 0)
336 e.uint.encode(d, c)
337 },
338 decode(d) {
339 const n = e.uint.decode(d)
340 return {
341 isAdmin: !!(1 & n),
342 isModerator: !!(2 & n),
343 isPending: !!(4 & n),
344 isActive: !!(8 & n),
345 isMuted: !!(16 & n),
346 isBanned: !!(32 & n),
347 isShadowBanned: !!(64 & n),
348 isRemoved: o >= 19 && !!(128 & n),
349 }
350 },
351 },
352 S = {
353 preencode(e, d) {
354 e.end++
355 },
356 encode(d, o) {
357 const n = (o.isMuted ? 1 : 0) | (o.isBanned ? 2 : 0) | (o.isShadowBanned ? 4 : 0)
358 e.uint.encode(d, n)
359 },
360 decode(d) {
361 const o = e.uint.decode(d)
362 return { isMuted: !!(1 & o), isBanned: !!(2 & o), isShadowBanned: !!(4 & o) }
363 },
364 },
365 I = {
366 preencode(d, o) {
367 e.uint.preencode(d, o.version)
368 },
369 encode(d, o) {
370 e.uint.encode(d, o.version)
371 },
372 decode: (d) => ({ version: e.uint.decode(d) }),
373 },
374 j = {
375 preencode(d, o) {
376 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active))
377 },
378 encode(d, o) {
379 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active))
380 },
381 decode: (d) => ({ total: e.uint.decode(d), active: e.uint.decode(d) }),
382 },
383 L = {
384 preencode(d, o) {
385 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active), e.uint.preencode(d, o.pending))
386 },
387 encode(d, o) {
388 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active), e.uint.encode(d, o.pending))
389 },
390 decode: (d) => ({
391 total: e.uint.decode(d),
392 active: e.uint.decode(d),
393 pending: e.uint.decode(d),
394 }),
395 },
396 F = {
397 preencode(d, n) {
398 ;(e.uint.preencode(d, n.clock),
399 e.uint.preencode(d, n.pinned),
400 e.uint.preencode(d, n.threads),
401 e.uint.preencode(d, n.timestamp),
402 d.end++,
403 o >= 24 && n.flagsClock && e.uint.preencode(d, n.flagsClock))
404 },
405 encode(d, n) {
406 const c = o >= 24 && n.flagsClock ? 1 : 0
407 ;(e.uint.encode(d, n.clock),
408 e.uint.encode(d, n.pinned),
409 e.uint.encode(d, n.threads),
410 e.uint.encode(d, n.timestamp),
411 e.uint.encode(d, c),
412 o >= 24 && n.flagsClock && e.uint.encode(d, n.flagsClock))
413 },
414 decode(d) {
415 const n = e.uint.decode(d),
416 c = e.uint.decode(d),
417 r = e.uint.decode(d),
418 t = e.uint.decode(d),
419 i = d.start < d.end ? e.uint.decode(d) : 0
420 return {
421 clock: n,
422 pinned: c,
423 threads: r,
424 timestamp: t,
425 flagsClock: o >= 24 && 1 & i ? e.uint.decode(d) : 0,
426 }
427 },
428 },
429 q = {
430 preencode(d, o) {
431 e.uint.preencode(d, o.clock)
432 },
433 encode(d, o) {
434 e.uint.encode(d, o.clock)
435 },
436 decode: (d) => ({ clock: e.uint.decode(d) }),
437 },
438 B = e.frame(j),
439 E = e.frame(L),
440 V = e.frame(F),
441 O = e.frame(q),
442 N = {
443 preencode(e, d) {
444 ;(B.preencode(e, d.devices),
445 E.preencode(e, d.members),
446 V.preencode(e, d.chat),
447 O.preencode(e, d.files))
448 },
449 encode(e, d) {
450 ;(B.encode(e, d.devices), E.encode(e, d.members), V.encode(e, d.chat), O.encode(e, d.files))
451 },
452 decode: (e) => ({
453 devices: B.decode(e),
454 members: E.decode(e),
455 chat: V.decode(e),
456 files: O.decode(e),
457 }),
458 },
459 U = { Default: 1, Broadcast: 2, DirectMessage: 3 },
460 J = {
461 preencode(e, d) {
462 e.end++
463 },
464 encode(d, o) {
465 if (o > 3) throw new Error("Unknown enum")
466 e.uint.encode(d, o)
467 },
468 decode: (d) => e.uint.decode(d),
469 },
470 W = {
471 preencode(d, n) {
472 const c =
473 (n.roomType ? 1 : 0) |
474 (n.isExperimental ? 2 : 0) |
475 (n.isJoiningDisabled ? 4 : 0) |
476 (n.isAppendingDisabled ? 8 : 0) |
477 (n.isCallingDisabled ? 16 : 0) |
478 (n.isMembershipEventsDisabled ? 32 : 0) |
479 (o >= 28 && n.isAttachmentsDisabled ? 64 : 0) |
480 (o >= 28 && n.isLinksDisabled ? 128 : 0) |
481 (o >= 29 && n.buildType ? 256 : 0)
482 ;(e.uint.preencode(d, c),
483 n.roomType && J.preencode(d, n.roomType),
484 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
485 },
486 encode(d, n) {
487 const c =
488 (n.roomType ? 1 : 0) |
489 (n.isExperimental ? 2 : 0) |
490 (n.isJoiningDisabled ? 4 : 0) |
491 (n.isAppendingDisabled ? 8 : 0) |
492 (n.isCallingDisabled ? 16 : 0) |
493 (n.isMembershipEventsDisabled ? 32 : 0) |
494 (o >= 28 && n.isAttachmentsDisabled ? 64 : 0) |
495 (o >= 28 && n.isLinksDisabled ? 128 : 0) |
496 (o >= 29 && n.buildType ? 256 : 0)
497 ;(e.uint.encode(d, c),
498 n.roomType && J.encode(d, n.roomType),
499 o >= 29 && n.buildType && vi.encode(d, n.buildType))
500 },
501 decode(d) {
502 const n = e.uint.decode(d)
503 return {
504 roomType: 1 & n ? J.decode(d) : 0,
505 isExperimental: !!(2 & n),
506 isJoiningDisabled: !!(4 & n),
507 isAppendingDisabled: !!(8 & n),
508 isCallingDisabled: !!(16 & n),
509 isMembershipEventsDisabled: !!(32 & n),
510 isAttachmentsDisabled: o >= 28 && !!(64 & n),
511 isLinksDisabled: o >= 28 && !!(128 & n),
512 buildType: o >= 29 && 256 & n ? vi.decode(d) : null,
513 }
514 },
515 },
516 z = e.frame(I),
517 H = e.frame(W),
518 G = {
519 preencode(d, o) {
520 ;(z.preencode(d, o.abi), H.preencode(d, o.settings), e.uint.preencode(d, o.creationTime))
521 },
522 encode(d, o) {
523 ;(z.encode(d, o.abi), H.encode(d, o.settings), e.uint.encode(d, o.creationTime))
524 },
525 decode: (d) => ({ abi: z.decode(d), settings: H.decode(d), creationTime: e.uint.decode(d) }),
526 },
527 Q = {
528 preencode(d, o) {
529 e.fixed32.preencode(d, o.seed)
530 },
531 encode(d, o) {
532 e.fixed32.encode(d, o.seed)
533 },
534 decode: (d) => ({ seed: e.fixed32.decode(d) }),
535 },
536 X = {
537 preencode(d, o) {
538 ;(r.preencode(d, o.mailboxKeyPair),
539 t.preencode(d, o.discoveryKeyPair),
540 e.fixed32.preencode(d, o.wakeupTopic),
541 e.fixed32.preencode(d, o.swarmTopic))
542 },
543 encode(d, o) {
544 ;(r.encode(d, o.mailboxKeyPair),
545 t.encode(d, o.discoveryKeyPair),
546 e.fixed32.encode(d, o.wakeupTopic),
547 e.fixed32.encode(d, o.swarmTopic))
548 },
549 decode: (d) => ({
550 mailboxKeyPair: r.decode(d),
551 discoveryKeyPair: t.decode(d),
552 wakeupTopic: e.fixed32.decode(d),
553 swarmTopic: e.fixed32.decode(d),
554 }),
555 },
556 Y = e.array(e.fixed32),
557 Z = {
558 preencode(d, n) {
559 ;(d.end++,
560 n.title && e.string.preencode(d, n.title),
561 n.avatar && La.preencode(d, n.avatar),
562 n.description && e.string.preencode(d, n.description),
563 o >= 17 && n.supportedLanguages && Fa.preencode(d, n.supportedLanguages),
564 o >= 19 && n.blindPeers && Y.preencode(d, n.blindPeers))
565 },
566 encode(d, n) {
567 const c =
568 (n.title ? 1 : 0) |
569 (n.avatar ? 2 : 0) |
570 (n.description ? 4 : 0) |
571 (o >= 17 && n.supportedLanguages ? 8 : 0) |
572 (o >= 19 && n.blindPeers ? 16 : 0)
573 ;(e.uint.encode(d, c),
574 n.title && e.string.encode(d, n.title),
575 n.avatar && La.encode(d, n.avatar),
576 n.description && e.string.encode(d, n.description),
577 o >= 17 && n.supportedLanguages && Fa.encode(d, n.supportedLanguages),
578 o >= 19 && n.blindPeers && Y.encode(d, n.blindPeers))
579 },
580 decode(d) {
581 const n = e.uint.decode(d)
582 return {
583 title: 1 & n ? e.string.decode(d) : null,
584 avatar: 2 & n ? La.decode(d) : null,
585 description: 4 & n ? e.string.decode(d) : null,
586 supportedLanguages: o >= 17 && 8 & n ? Fa.decode(d) : null,
587 blindPeers: o >= 19 && 16 & n ? Y.decode(d) : null,
588 }
589 },
590 },
591 $ = {
592 preencode(d, o) {
593 e.fixed32.preencode(d, o.key)
594 },
595 encode(d, o) {
596 e.fixed32.encode(d, o.key)
597 },
598 decode: (d) => ({ key: e.fixed32.decode(d) }),
599 },
600 _ = e.frame(a),
601 ee = e.frame($),
602 de = {
603 preencode(e, d) {
604 ;(_.preencode(e, d.header), ee.preencode(e, d.peer))
605 },
606 encode(e, d) {
607 ;(_.encode(e, d.header), ee.encode(e, d.peer))
608 },
609 decode: (e) => ({ header: _.decode(e), peer: ee.decode(e) }),
610 },
611 oe = _,
612 ne = {
613 preencode(d, o) {
614 ;(oe.preencode(d, o.header), e.fixed32.preencode(d, o.key))
615 },
616 encode(d, o) {
617 ;(oe.encode(d, o.header), e.fixed32.encode(d, o.key))
618 },
619 decode: (d) => ({ header: oe.decode(d), key: e.fixed32.decode(d) }),
620 },
621 ce = {
622 preencode(d, o) {
623 ;(e.fixed32.preencode(d, o.memberKey), e.buffer.preencode(d, o.proof))
624 },
625 encode(d, o) {
626 ;(e.fixed32.encode(d, o.memberKey), e.buffer.encode(d, o.proof))
627 },
628 decode: (d) => ({ memberKey: e.fixed32.decode(d), proof: e.buffer.decode(d) }),
629 },
630 re = {
631 preencode(d, o) {
632 ;(e.fixed32.preencode(d, o.id), e.buffer.preencode(d, o.response))
633 },
634 encode(d, o) {
635 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.response))
636 },
637 decode: (d) => ({ id: e.fixed32.decode(d), response: e.buffer.decode(d) }),
638 },
639 te = e.frame(D),
640 ie = e.frame(re),
641 ae = {
642 preencode(d, o) {
643 ;(e.fixed32.preencode(d, o.key),
644 e.fixed32.preencode(d, o.memberKey),
645 te.preencode(d, o.status),
646 qa.preencode(d, o.profile),
647 d.end++,
648 o.invitation && ie.preencode(d, o.invitation))
649 },
650 encode(d, o) {
651 const n = o.invitation ? 1 : 0
652 ;(e.fixed32.encode(d, o.key),
653 e.fixed32.encode(d, o.memberKey),
654 te.encode(d, o.status),
655 qa.encode(d, o.profile),
656 e.uint.encode(d, n),
657 o.invitation && ie.encode(d, o.invitation))
658 },
659 decode: (d) => ({
660 key: e.fixed32.decode(d),
661 memberKey: e.fixed32.decode(d),
662 status: te.decode(d),
663 profile: qa.decode(d),
664 invitation: 1 & e.uint.decode(d) ? ie.decode(d) : null,
665 }),
666 },
667 se = {
668 preencode(d, o) {
669 ;(e.uint.preencode(d, o.timestamp),
670 d.end++,
671 o.mailbox && e.fixed32.preencode(d, o.mailbox),
672 o.displayName && e.string.preencode(d, o.displayName),
673 o.avatar && Ba.preencode(d, o.avatar),
674 o.username && e.string.preencode(d, o.username))
675 },
676 encode(d, o) {
677 const n =
678 (o.mailbox ? 1 : 0) | (o.displayName ? 2 : 0) | (o.avatar ? 4 : 0) | (o.username ? 8 : 0)
679 ;(e.uint.encode(d, o.timestamp),
680 e.uint.encode(d, n),
681 o.mailbox && e.fixed32.encode(d, o.mailbox),
682 o.displayName && e.string.encode(d, o.displayName),
683 o.avatar && Ba.encode(d, o.avatar),
684 o.username && e.string.encode(d, o.username))
685 },
686 decode(d) {
687 const o = e.uint.decode(d),
688 n = e.uint.decode(d)
689 return {
690 timestamp: o,
691 mailbox: 1 & n ? e.fixed32.decode(d) : null,
692 displayName: 2 & n ? e.string.decode(d) : null,
693 avatar: 4 & n ? Ba.decode(d) : null,
694 username: 8 & n ? e.string.decode(d) : null,
695 }
696 },
697 },
698 le = {
699 preencode(d, n) {
700 ;(d.end++,
701 n.swarmKey && e.fixed32.preencode(d, n.swarmKey),
702 n.name && e.string.preencode(d, n.name),
703 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
704 },
705 encode(d, n) {
706 const c =
707 (n.swarmKey ? 1 : 0) |
708 (n.name ? 2 : 0) |
709 (n.isMobile ? 4 : 0) |
710 (o >= 29 && n.buildType ? 8 : 0)
711 ;(e.uint.encode(d, c),
712 n.swarmKey && e.fixed32.encode(d, n.swarmKey),
713 n.name && e.string.encode(d, n.name),
714 o >= 29 && n.buildType && vi.encode(d, n.buildType))
715 },
716 decode(d) {
717 const n = e.uint.decode(d)
718 return {
719 swarmKey: 1 & n ? e.fixed32.decode(d) : null,
720 name: 2 & n ? e.string.decode(d) : null,
721 isMobile: !!(4 & n),
722 buildType: o >= 29 && 8 & n ? vi.decode(d) : null,
723 }
724 },
725 },
726 pe = e.frame(se),
727 ue = {
728 preencode(e, d) {
729 ;(pe.preencode(e, d.profile), ce.preencode(e, d.attestation))
730 },
731 encode(e, d) {
732 ;(pe.encode(e, d.profile), ce.encode(e, d.attestation))
733 },
734 decode: (e) => ({ profile: pe.decode(e), attestation: ce.decode(e) }),
735 },
736 fe = {
737 preencode(e, d) {
738 ;(Ea.preencode(e, d.profile), ce.preencode(e, d.attestation))
739 },
740 encode(e, d) {
741 ;(Ea.encode(e, d.profile), ce.encode(e, d.attestation))
742 },
743 decode: (e) => ({ profile: Ea.decode(e), attestation: ce.decode(e) }),
744 },
745 me = {
746 preencode(d, o) {
747 ;(e.fixed32.preencode(d, o.id),
748 e.buffer.preencode(d, o.data),
749 e.buffer.preencode(d, o.signature))
750 },
751 encode(d, o) {
752 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.data), e.buffer.encode(d, o.signature))
753 },
754 decode: (d) => ({
755 id: e.fixed32.decode(d),
756 data: e.buffer.decode(d),
757 signature: e.buffer.decode(d),
758 }),
759 },
760 ye = {
761 preencode(d, o) {
762 e.fixed32.preencode(d, o.devicePublicKey)
763 },
764 encode(d, o) {
765 e.fixed32.encode(d, o.devicePublicKey)
766 },
767 decode: (d) => ({ devicePublicKey: e.fixed32.decode(d) }),
768 },
769 be = {
770 preencode(d, o) {
771 ;(ce.preencode(d, o.privateProfileIdentity), e.buffer.preencode(d, o.deviceProof))
772 },
773 encode(d, o) {
774 ;(ce.encode(d, o.privateProfileIdentity), e.buffer.encode(d, o.deviceProof))
775 },
776 decode: (d) => ({ privateProfileIdentity: ce.decode(d), deviceProof: e.buffer.decode(d) }),
777 },
778 xe = e.frame(fe),
779 ve = e.frame(ue),
780 ke = e.frame(ye),
781 ge = {
782 preencode(d, o) {
783 ;(e.fixed32.preencode(d, o.deviceKey),
784 t.preencode(d, o.keyPair),
785 xe.preencode(d, o.device),
786 ve.preencode(d, o.member),
787 d.end++,
788 o.identity && ke.preencode(d, o.identity))
789 },
790 encode(d, o) {
791 const n = o.identity ? 1 : 0
792 ;(e.fixed32.encode(d, o.deviceKey),
793 t.encode(d, o.keyPair),
794 xe.encode(d, o.device),
795 ve.encode(d, o.member),
796 e.uint.encode(d, n),
797 o.identity && ke.encode(d, o.identity))
798 },
799 decode: (d) => ({
800 deviceKey: e.fixed32.decode(d),
801 keyPair: t.decode(d),
802 device: xe.decode(d),
803 member: ve.decode(d),
804 identity: 1 & e.uint.decode(d) ? ke.decode(d) : null,
805 }),
806 },
807 Ke = e.frame(ge),
808 he = {
809 preencode(d, o) {
810 ;(e.fixed32.preencode(d, o.id),
811 Ke.preencode(d, o.request),
812 e.buffer.preencode(d, o.signature))
813 },
814 encode(d, o) {
815 ;(e.fixed32.encode(d, o.id), Ke.encode(d, o.request), e.buffer.encode(d, o.signature))
816 },
817 decode: (d) => ({
818 id: e.fixed32.decode(d),
819 request: Ke.decode(d),
820 signature: e.buffer.decode(d),
821 }),
822 },
823 we = xe,
824 Re = ve,
825 Pe = {
826 preencode(e, d) {
827 ;(we.preencode(e, d.device), e.end++, d.member && Re.preencode(e, d.member))
828 },
829 encode(d, o) {
830 const n = o.member ? 1 : 0
831 ;(we.encode(d, o.device), e.uint.encode(d, n), o.member && Re.encode(d, o.member))
832 },
833 decode: (d) => ({ device: we.decode(d), member: 1 & e.uint.decode(d) ? Re.decode(d) : null }),
834 },
835 Te = e.frame(he),
836 Ae = e.frame(Pe),
837 Me = {
838 preencode(e, d) {
839 ;(e.end++,
840 d.withInvitation && Te.preencode(e, d.withInvitation),
841 d.withMemberProof && Ae.preencode(e, d.withMemberProof))
842 },
843 encode(d, o) {
844 const n = (o.withInvitation ? 1 : 0) | (o.withMemberProof ? 2 : 0)
845 ;(e.uint.encode(d, n),
846 o.withInvitation && Te.encode(d, o.withInvitation),
847 o.withMemberProof && Ae.encode(d, o.withMemberProof))
848 },
849 decode(d) {
850 const o = e.uint.decode(d)
851 return {
852 withInvitation: 1 & o ? Te.decode(d) : null,
853 withMemberProof: 2 & o ? Ae.decode(d) : null,
854 }
855 },
856 },
857 De = e.frame(me),
858 Ce = e.frame(be),
859 Se = {
860 preencode(e, d) {
861 ;(De.preencode(e, d.signedKeys), e.end++, d.identity && Ce.preencode(e, d.identity))
862 },
863 encode(d, o) {
864 const n = o.identity ? 1 : 0
865 ;(De.encode(d, o.signedKeys), e.uint.encode(d, n), o.identity && Ce.encode(d, o.identity))
866 },
867 decode: (d) => ({
868 signedKeys: De.decode(d),
869 identity: 1 & e.uint.decode(d) ? Ce.decode(d) : null,
870 }),
871 },
872 Ie = {
873 preencode(d, n) {
874 ;(d.end++,
875 n.expiration && e.uint.preencode(d, n.expiration),
876 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
877 },
878 encode(d, n) {
879 const c =
880 (n.expiration ? 1 : 0) |
881 (n.requiresConfirmation ? 2 : 0) |
882 (n.canModerate ? 4 : 0) |
883 (n.canAdmin ? 8 : 0) |
884 (o >= 29 && n.buildType ? 16 : 0)
885 ;(e.uint.encode(d, c),
886 n.expiration && e.uint.encode(d, n.expiration),
887 o >= 29 && n.buildType && vi.encode(d, n.buildType))
888 },
889 decode(d) {
890 const n = e.uint.decode(d)
891 return {
892 expiration: 1 & n ? e.uint.decode(d) : 0,
893 requiresConfirmation: !!(2 & n),
894 canModerate: !!(4 & n),
895 canAdmin: !!(8 & n),
896 buildType: o >= 29 && 16 & n ? vi.decode(d) : null,
897 }
898 },
899 },
900 je = De,
901 Le = e.frame(Ie),
902 Fe = {
903 preencode(d, o) {
904 ;(e.fixed32.preencode(d, o.id),
905 je.preencode(d, o.response),
906 Le.preencode(d, o.metadata),
907 d.end++,
908 o.anchor && n.preencode(d, o.anchor))
909 },
910 encode(d, o) {
911 const c = (o.anchor ? 1 : 0) | (o.isActive ? 2 : 0)
912 ;(e.fixed32.encode(d, o.id),
913 je.encode(d, o.response),
914 Le.encode(d, o.metadata),
915 e.uint.encode(d, c),
916 o.anchor && n.encode(d, o.anchor))
917 },
918 decode(d) {
919 const o = e.fixed32.decode(d),
920 c = je.decode(d),
921 r = Le.decode(d),
922 t = e.uint.decode(d)
923 return {
924 id: o,
925 response: c,
926 metadata: r,
927 anchor: 1 & t ? n.decode(d) : null,
928 isActive: !!(2 & t),
929 }
930 },
931 },
932 qe = _,
933 Be = e.frame(Fe),
934 Ee = {
935 preencode(e, d) {
936 ;(qe.preencode(e, d.header), Be.preencode(e, d.invitation))
937 },
938 encode(e, d) {
939 ;(qe.encode(e, d.header), Be.encode(e, d.invitation))
940 },
941 decode: (e) => ({ header: qe.decode(e), invitation: Be.decode(e) }),
942 },
943 Ve = _,
944 Oe = {
945 preencode(d, o) {
946 ;(Ve.preencode(d, o.header), e.fixed32.preencode(d, o.id))
947 },
948 encode(d, o) {
949 ;(Ve.encode(d, o.header), e.fixed32.encode(d, o.id))
950 },
951 decode: (d) => ({ header: Ve.decode(d), id: e.fixed32.decode(d) }),
952 },
953 Ne = {
954 preencode(d, o) {
955 ;(e.fixed32.preencode(d, o.mailbox),
956 e.fixed32.preencode(d, o.invitationSeed),
957 n.preencode(d, o.anchor))
958 },
959 encode(d, o) {
960 ;(e.fixed32.encode(d, o.mailbox),
961 e.fixed32.encode(d, o.invitationSeed),
962 n.encode(d, o.anchor))
963 },
964 decode: (d) => ({
965 mailbox: e.fixed32.decode(d),
966 invitationSeed: e.fixed32.decode(d),
967 anchor: n.decode(d),
968 }),
969 },
970 Ue = {
971 preencode(d, o) {
972 ;(e.fixed32.preencode(d, o.mailbox),
973 e.fixed32.preencode(d, o.invitationSeed),
974 n.preencode(d, o.anchor),
975 e.fixed32.preencode(d, o.identityPublicKey))
976 },
977 encode(d, o) {
978 ;(e.fixed32.encode(d, o.mailbox),
979 e.fixed32.encode(d, o.invitationSeed),
980 n.encode(d, o.anchor),
981 e.fixed32.encode(d, o.identityPublicKey))
982 },
983 decode: (d) => ({
984 mailbox: e.fixed32.decode(d),
985 invitationSeed: e.fixed32.decode(d),
986 anchor: n.decode(d),
987 identityPublicKey: e.fixed32.decode(d),
988 }),
989 },
990 Je = {
991 preencode(d, o) {
992 e.fixed32.preencode(d, o.mailbox)
993 },
994 encode(d, o) {
995 e.fixed32.encode(d, o.mailbox)
996 },
997 decode: (d) => ({ mailbox: e.fixed32.decode(d) }),
998 },
999 We = e.frame(Ne),
1000 ze = e.frame(Ue),
1001 He = e.frame(Je),
1002 Ge = e.array(e.ipv4Address),
1003 Qe = {
1004 preencode(e, d) {
1005 ;(e.end++,
1006 d.room && We.preencode(e, d.room),
1007 d.identity && ze.preencode(e, d.identity),
1008 d.contact && He.preencode(e, d.contact),
1009 o >= 9 && d.readonly && Va.preencode(e, d.readonly),
1010 o >= 17 && d.additionalNodes && Ge.preencode(e, d.additionalNodes),
1011 o >= 29 && d.buildType && vi.preencode(e, d.buildType))
1012 },
1013 encode(d, n) {
1014 const c =
1015 (n.room ? 1 : 0) |
1016 (n.identity ? 2 : 0) |
1017 (n.contact ? 4 : 0) |
1018 (o >= 9 && n.readonly ? 8 : 0) |
1019 (o >= 17 && n.additionalNodes ? 16 : 0) |
1020 (o >= 29 && n.buildType ? 32 : 0)
1021 ;(e.uint.encode(d, c),
1022 n.room && We.encode(d, n.room),
1023 n.identity && ze.encode(d, n.identity),
1024 n.contact && He.encode(d, n.contact),
1025 o >= 9 && n.readonly && Va.encode(d, n.readonly),
1026 o >= 17 && n.additionalNodes && Ge.encode(d, n.additionalNodes),
1027 o >= 29 && n.buildType && vi.encode(d, n.buildType))
1028 },
1029 decode(d) {
1030 const n = e.uint.decode(d)
1031 return {
1032 room: 1 & n ? We.decode(d) : null,
1033 identity: 2 & n ? ze.decode(d) : null,
1034 contact: 4 & n ? He.decode(d) : null,
1035 readonly: o >= 9 && 8 & n ? Va.decode(d) : null,
1036 additionalNodes: o >= 17 && 16 & n ? Ge.decode(d) : null,
1037 buildType: o >= 29 && 32 & n ? vi.decode(d) : null,
1038 }
1039 },
1040 },
1041 Xe = _,
1042 Ye = {
1043 preencode(d, o) {
1044 ;(Xe.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
1045 },
1046 encode(d, o) {
1047 ;(Xe.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
1048 },
1049 decode: (d) => ({ header: Xe.decode(d), blindRequest: e.buffer.decode(d) }),
1050 },
1051 Ze = _,
1052 $e = {
1053 preencode(e, d) {
1054 ;(Ze.preencode(e, d.header), e.end++, d.profile && Oa.preencode(e, d.profile))
1055 },
1056 encode(d, o) {
1057 const n = o.profile ? 1 : 0
1058 ;(Ze.encode(d, o.header), e.uint.encode(d, n), o.profile && Oa.encode(d, o.profile))
1059 },
1060 decode: (d) => ({ header: Ze.decode(d), profile: 1 & e.uint.decode(d) ? Oa.decode(d) : null }),
1061 },
1062 _e = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({}) },
1063 ed = _e,
1064 dd = Ke,
1065 od = {
1066 preencode(d, o) {
1067 ;(e.fixed32.preencode(d, o.deviceKey),
1068 e.fixed32.preencode(d, o.id),
1069 dd.preencode(d, o.request))
1070 },
1071 encode(d, o) {
1072 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.id), dd.encode(d, o.request))
1073 },
1074 decode: (d) => ({
1075 deviceKey: e.fixed32.decode(d),
1076 id: e.fixed32.decode(d),
1077 request: dd.decode(d),
1078 }),
1079 },
1080 nd = _,
1081 cd = Ce,
1082 rd = {
1083 preencode(d, o) {
1084 ;(nd.preencode(d, o.header),
1085 e.fixed32.preencode(d, o.deviceKey),
1086 d.end++,
1087 o.identity && cd.preencode(d, o.identity))
1088 },
1089 encode(d, o) {
1090 const n = o.identity ? 1 : 0
1091 ;(nd.encode(d, o.header),
1092 e.fixed32.encode(d, o.deviceKey),
1093 e.uint.encode(d, n),
1094 o.identity && cd.encode(d, o.identity))
1095 },
1096 decode: (d) => ({
1097 header: nd.decode(d),
1098 deviceKey: e.fixed32.decode(d),
1099 identity: 1 & e.uint.decode(d) ? cd.decode(d) : null,
1100 }),
1101 },
1102 td = _,
1103 id = {
1104 preencode(d, o) {
1105 ;(td.preencode(d, o.header), e.fixed32.preencode(d, o.deviceKey))
1106 },
1107 encode(d, o) {
1108 ;(td.encode(d, o.header), e.fixed32.encode(d, o.deviceKey))
1109 },
1110 decode: (d) => ({ header: td.decode(d), deviceKey: e.fixed32.decode(d) }),
1111 },
1112 ad = e.frame(C),
1113 sd = pe,
1114 ld = {
1115 preencode(d, o) {
1116 ;(e.fixed32.preencode(d, o.key), ad.preencode(d, o.status), sd.preencode(d, o.profile))
1117 },
1118 encode(d, o) {
1119 ;(e.fixed32.encode(d, o.key), ad.encode(d, o.status), sd.encode(d, o.profile))
1120 },
1121 decode: (d) => ({ key: e.fixed32.decode(d), status: ad.decode(d), profile: sd.decode(d) }),
1122 },
1123 pd = ad,
1124 ud = pe,
1125 fd = {
1126 preencode(d, o) {
1127 ;(e.fixed32.preencode(d, o.key),
1128 pd.preencode(d, o.status),
1129 ud.preencode(d, o.profile),
1130 d.end++,
1131 o.proofs && Na.preencode(d, o.proofs))
1132 },
1133 encode(d, o) {
1134 const n = o.proofs ? 1 : 0
1135 ;(e.fixed32.encode(d, o.key),
1136 pd.encode(d, o.status),
1137 ud.encode(d, o.profile),
1138 e.uint.encode(d, n),
1139 o.proofs && Na.encode(d, o.proofs))
1140 },
1141 decode: (d) => ({
1142 key: e.fixed32.decode(d),
1143 status: pd.decode(d),
1144 profile: ud.decode(d),
1145 proofs: 1 & e.uint.decode(d) ? Na.decode(d) : null,
1146 }),
1147 },
1148 md = {
1149 preencode(d, o) {
1150 ;(e.fixed32.preencode(d, o.key),
1151 d.end++,
1152 o.profileAttestation && e.buffer.preencode(d, o.profileAttestation),
1153 o.latestReceipt && e.buffer.preencode(d, o.latestReceipt))
1154 },
1155 encode(d, o) {
1156 const n = (o.profileAttestation ? 1 : 0) | (o.latestReceipt ? 2 : 0)
1157 ;(e.fixed32.encode(d, o.key),
1158 e.uint.encode(d, n),
1159 o.profileAttestation && e.buffer.encode(d, o.profileAttestation),
1160 o.latestReceipt && e.buffer.encode(d, o.latestReceipt))
1161 },
1162 decode(d) {
1163 const o = e.fixed32.decode(d),
1164 n = e.uint.decode(d)
1165 return {
1166 key: o,
1167 profileAttestation: 1 & n ? e.buffer.decode(d) : null,
1168 latestReceipt: 2 & n ? e.buffer.decode(d) : null,
1169 }
1170 },
1171 },
1172 yd = _,
1173 bd = ve,
1174 xd = {
1175 preencode(e, d) {
1176 ;(yd.preencode(e, d.header), bd.preencode(e, d.member))
1177 },
1178 encode(e, d) {
1179 ;(yd.encode(e, d.header), bd.encode(e, d.member))
1180 },
1181 decode: (e) => ({ header: yd.decode(e), member: bd.decode(e) }),
1182 },
1183 vd = _,
1184 kd = e.frame(S),
1185 gd = {
1186 preencode(d, o) {
1187 ;(vd.preencode(d, o.header),
1188 e.fixed32.preencode(d, o.memberKey),
1189 e.uint.preencode(d, o.key),
1190 kd.preencode(d, o.status))
1191 },
1192 encode(d, o) {
1193 ;(vd.encode(d, o.header),
1194 e.fixed32.encode(d, o.memberKey),
1195 e.uint.encode(d, o.key),
1196 kd.encode(d, o.status))
1197 },
1198 decode: (d) => ({
1199 header: vd.decode(d),
1200 memberKey: e.fixed32.decode(d),
1201 key: e.uint.decode(d),
1202 status: kd.decode(d),
1203 }),
1204 },
1205 Kd = _,
1206 hd = {
1207 preencode(d, o) {
1208 ;(Kd.preencode(d, o.header), e.fixed32.preencode(d, o.key), d.end++)
1209 },
1210 encode(d, o) {
1211 const n = (o.isModerator ? 1 : 0) | (o.isAdmin ? 2 : 0)
1212 ;(Kd.encode(d, o.header), e.fixed32.encode(d, o.key), e.uint.encode(d, n))
1213 },
1214 decode(d) {
1215 const o = Kd.decode(d),
1216 n = e.fixed32.decode(d),
1217 c = e.uint.decode(d)
1218 return { header: o, key: n, isModerator: !!(1 & c), isAdmin: !!(2 & c) }
1219 },
1220 },
1221 wd = _,
1222 Rd = {
1223 preencode(d, o) {
1224 ;(wd.preencode(d, o.header), e.fixed32.preencode(d, o.key))
1225 },
1226 encode(d, o) {
1227 ;(wd.encode(d, o.header), e.fixed32.encode(d, o.key))
1228 },
1229 decode: (d) => ({ header: wd.decode(d), key: e.fixed32.decode(d) }),
1230 },
1231 Pd = {
1232 preencode(d, o) {
1233 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.mentions))
1234 },
1235 encode(d, o) {
1236 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.mentions))
1237 },
1238 decode: (d) => ({ key: e.fixed32.decode(d), mentions: e.uint.decode(d) }),
1239 },
1240 Td = {
1241 preencode(d, o) {
1242 ;(d.end++, o.memberKey && e.fixed32.preencode(d, o.memberKey))
1243 },
1244 encode(d, o) {
1245 const n = o.memberKey ? 1 : 0
1246 ;(e.uint.encode(d, n), o.memberKey && e.fixed32.encode(d, o.memberKey))
1247 },
1248 decode: (d) => ({ memberKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null }),
1249 },
1250 Ad = Td,
1251 Md = {
1252 preencode(d, o) {
1253 ;(d.end++, o.from && e.string.preencode(d, o.from), o.to && e.string.preencode(d, o.to))
1254 },
1255 encode(d, o) {
1256 const n = (o.from ? 1 : 0) | (o.to ? 2 : 0)
1257 ;(e.uint.encode(d, n), o.from && e.string.encode(d, o.from), o.to && e.string.encode(d, o.to))
1258 },
1259 decode(d) {
1260 const o = e.uint.decode(d)
1261 return { from: 1 & o ? e.string.decode(d) : null, to: 2 & o ? e.string.decode(d) : null }
1262 },
1263 },
1264 Dd = e.frame(Td),
1265 Cd = e.frame(Ad),
1266 Sd = e.frame(Md),
1267 Id = {
1268 preencode(d, n) {
1269 const c =
1270 (n.memberJoined ? 1 : 0) |
1271 (n.memberLeft ? 2 : 0) |
1272 (n.titleChanged ? 4 : 0) |
1273 (n.callStarted ? 8 : 0) |
1274 (n.callHangup ? 16 : 0) |
1275 (n.callMissed ? 32 : 0) |
1276 (o >= 4 && n.roomAvatarChanged ? 64 : 0) |
1277 (o >= 4 && n.invitationCreated ? 128 : 0) |
1278 (o >= 4 && n.memberRemoved ? 256 : 0) |
1279 (o >= 27 && n.locationShared ? 512 : 0)
1280 ;(e.uint.preencode(d, c),
1281 n.memberJoined && Dd.preencode(d, n.memberJoined),
1282 n.memberLeft && Cd.preencode(d, n.memberLeft),
1283 n.titleChanged && Sd.preencode(d, n.titleChanged),
1284 o >= 4 && n.memberRemoved && Ua.preencode(d, n.memberRemoved),
1285 o >= 27 && n.locationShared && Ja.preencode(d, n.locationShared))
1286 },
1287 encode(d, n) {
1288 const c =
1289 (n.memberJoined ? 1 : 0) |
1290 (n.memberLeft ? 2 : 0) |
1291 (n.titleChanged ? 4 : 0) |
1292 (n.callStarted ? 8 : 0) |
1293 (n.callHangup ? 16 : 0) |
1294 (n.callMissed ? 32 : 0) |
1295 (o >= 4 && n.roomAvatarChanged ? 64 : 0) |
1296 (o >= 4 && n.invitationCreated ? 128 : 0) |
1297 (o >= 4 && n.memberRemoved ? 256 : 0) |
1298 (o >= 27 && n.locationShared ? 512 : 0)
1299 ;(e.uint.encode(d, c),
1300 n.memberJoined && Dd.encode(d, n.memberJoined),
1301 n.memberLeft && Cd.encode(d, n.memberLeft),
1302 n.titleChanged && Sd.encode(d, n.titleChanged),
1303 o >= 4 && n.memberRemoved && Ua.encode(d, n.memberRemoved),
1304 o >= 27 && n.locationShared && Ja.encode(d, n.locationShared))
1305 },
1306 decode(d) {
1307 const n = e.uint.decode(d)
1308 return {
1309 memberJoined: 1 & n ? Dd.decode(d) : null,
1310 memberLeft: 2 & n ? Cd.decode(d) : null,
1311 titleChanged: 4 & n ? Sd.decode(d) : null,
1312 callStarted: !!(8 & n),
1313 callHangup: !!(16 & n),
1314 callMissed: !!(32 & n),
1315 roomAvatarChanged: o >= 4 && !!(64 & n),
1316 invitationCreated: o >= 4 && !!(128 & n),
1317 memberRemoved: o >= 4 && 256 & n ? Ua.decode(d) : null,
1318 locationShared: o >= 27 && 512 & n ? Ja.decode(d) : null,
1319 }
1320 },
1321 },
1322 jd = {
1323 preencode(e, d) {
1324 ;(e.end++, o >= 27 && d.locationShared && Wa.preencode(e, d.locationShared))
1325 },
1326 encode(d, n) {
1327 const c =
1328 (n.callStarted ? 1 : 0) |
1329 (n.callHangup ? 2 : 0) |
1330 (n.callMissed ? 4 : 0) |
1331 (o >= 27 && n.locationShared ? 8 : 0)
1332 ;(e.uint.encode(d, c), o >= 27 && n.locationShared && Wa.encode(d, n.locationShared))
1333 },
1334 decode(d) {
1335 const n = e.uint.decode(d)
1336 return {
1337 callStarted: !!(1 & n),
1338 callHangup: !!(2 & n),
1339 callMissed: !!(4 & n),
1340 locationShared: o >= 27 && 8 & n ? Wa.decode(d) : null,
1341 }
1342 },
1343 },
1344 Ld = {
1345 preencode(d, o) {
1346 ;(e.uint.preencode(d, o.start), e.uint.preencode(d, o.length))
1347 },
1348 encode(d, o) {
1349 ;(e.uint.encode(d, o.start), e.uint.encode(d, o.length))
1350 },
1351 decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
1352 },
1353 Fd = e.frame(Ld),
1354 qd = {
1355 preencode(d, o) {
1356 ;(Fd.preencode(d, o.range), e.string.preencode(d, o.content))
1357 },
1358 encode(d, o) {
1359 ;(Fd.encode(d, o.range), e.string.encode(d, o.content))
1360 },
1361 decode: (d) => ({ range: Fd.decode(d), content: e.string.decode(d) }),
1362 },
1363 Bd = Fd,
1364 Ed = {
1365 preencode(d, o) {
1366 ;(Bd.preencode(d, o.range), e.fixed32.preencode(d, o.memberKey))
1367 },
1368 encode(d, o) {
1369 ;(Bd.encode(d, o.range), e.fixed32.encode(d, o.memberKey))
1370 },
1371 decode: (d) => ({ range: Bd.decode(d), memberKey: e.fixed32.decode(d) }),
1372 },
1373 Vd = K,
1374 Od = e.array(e.uint),
1375 Nd = {
1376 preencode(d, n) {
1377 ;(d.end++,
1378 n.title && e.string.preencode(d, n.title),
1379 n.description && e.string.preencode(d, n.description),
1380 n.file && Vd.preencode(d, n.file),
1381 o >= 12 && n.files && Od.preencode(d, n.files))
1382 },
1383 encode(d, n) {
1384 const c =
1385 (n.title ? 1 : 0) |
1386 (n.description ? 2 : 0) |
1387 (n.file ? 4 : 0) |
1388 (o >= 12 && n.files ? 8 : 0)
1389 ;(e.uint.encode(d, c),
1390 n.title && e.string.encode(d, n.title),
1391 n.description && e.string.encode(d, n.description),
1392 n.file && Vd.encode(d, n.file),
1393 o >= 12 && n.files && Od.encode(d, n.files))
1394 },
1395 decode(d) {
1396 const n = e.uint.decode(d)
1397 return {
1398 title: 1 & n ? e.string.decode(d) : null,
1399 description: 2 & n ? e.string.decode(d) : null,
1400 file: 4 & n ? Vd.decode(d) : null,
1401 files: o >= 12 && 8 & n ? Od.decode(d) : null,
1402 }
1403 },
1404 },
1405 Ud = Fd,
1406 Jd = e.frame(Nd),
1407 Wd = {
1408 preencode(d, o) {
1409 ;(Ud.preencode(d, o.range),
1410 e.string.preencode(d, o.url),
1411 d.end++,
1412 o.preview && Jd.preencode(d, o.preview))
1413 },
1414 encode(d, o) {
1415 const n = o.preview ? 1 : 0
1416 ;(Ud.encode(d, o.range),
1417 e.string.encode(d, o.url),
1418 e.uint.encode(d, n),
1419 o.preview && Jd.encode(d, o.preview))
1420 },
1421 decode: (d) => ({
1422 range: Ud.decode(d),
1423 url: e.string.decode(d),
1424 preview: 1 & e.uint.decode(d) ? Jd.decode(d) : null,
1425 }),
1426 },
1427 zd = e.array(e.frame(Ed)),
1428 Hd = e.array(e.frame(Wd)),
1429 Gd = Hd,
1430 Qd = e.array(e.frame(Ld)),
1431 Xd = Qd,
1432 Yd = Qd,
1433 Zd = e.array(e.frame(qd)),
1434 $d = Qd,
1435 _d = Qd,
1436 eo = {
1437 preencode(d, n) {
1438 const c =
1439 (n.mention ? 1 : 0) |
1440 (n.httpLink ? 2 : 0) |
1441 (n.pearLink ? 4 : 0) |
1442 (n.bold ? 8 : 0) |
1443 (n.italic ? 16 : 0) |
1444 (n.code ? 32 : 0) |
1445 (n.emoji ? 64 : 0) |
1446 (n.codeBlock ? 128 : 0) |
1447 (n.strike ? 256 : 0) |
1448 (o >= 17 && n.translation ? 512 : 0)
1449 ;(e.uint.preencode(d, c),
1450 n.mention && zd.preencode(d, n.mention),
1451 n.httpLink && Hd.preencode(d, n.httpLink),
1452 n.pearLink && Gd.preencode(d, n.pearLink),
1453 n.bold && Qd.preencode(d, n.bold),
1454 n.italic && Xd.preencode(d, n.italic),
1455 n.code && Yd.preencode(d, n.code),
1456 n.emoji && Zd.preencode(d, n.emoji),
1457 n.codeBlock && $d.preencode(d, n.codeBlock),
1458 n.strike && _d.preencode(d, n.strike),
1459 o >= 17 && n.translation && za.preencode(d, n.translation))
1460 },
1461 encode(d, n) {
1462 const c =
1463 (n.mention ? 1 : 0) |
1464 (n.httpLink ? 2 : 0) |
1465 (n.pearLink ? 4 : 0) |
1466 (n.bold ? 8 : 0) |
1467 (n.italic ? 16 : 0) |
1468 (n.code ? 32 : 0) |
1469 (n.emoji ? 64 : 0) |
1470 (n.codeBlock ? 128 : 0) |
1471 (n.strike ? 256 : 0) |
1472 (o >= 17 && n.translation ? 512 : 0)
1473 ;(e.uint.encode(d, c),
1474 n.mention && zd.encode(d, n.mention),
1475 n.httpLink && Hd.encode(d, n.httpLink),
1476 n.pearLink && Gd.encode(d, n.pearLink),
1477 n.bold && Qd.encode(d, n.bold),
1478 n.italic && Xd.encode(d, n.italic),
1479 n.code && Yd.encode(d, n.code),
1480 n.emoji && Zd.encode(d, n.emoji),
1481 n.codeBlock && $d.encode(d, n.codeBlock),
1482 n.strike && _d.encode(d, n.strike),
1483 o >= 17 && n.translation && za.encode(d, n.translation))
1484 },
1485 decode(d) {
1486 const n = e.uint.decode(d)
1487 return {
1488 mention: 1 & n ? zd.decode(d) : null,
1489 httpLink: 2 & n ? Hd.decode(d) : null,
1490 pearLink: 4 & n ? Gd.decode(d) : null,
1491 bold: 8 & n ? Qd.decode(d) : null,
1492 italic: 16 & n ? Xd.decode(d) : null,
1493 code: 32 & n ? Yd.decode(d) : null,
1494 emoji: 64 & n ? Zd.decode(d) : null,
1495 codeBlock: 128 & n ? $d.decode(d) : null,
1496 strike: 256 & n ? _d.decode(d) : null,
1497 translation: o >= 17 && 512 & n ? za.decode(d) : null,
1498 }
1499 },
1500 },
1501 oo = e.array(e.frame(g)),
1502 no = e.frame(eo),
1503 co = e.frame(jd),
1504 ro = {
1505 preencode(d, o) {
1506 ;(d.end++,
1507 o.text && e.string.preencode(d, o.text),
1508 o.files && oo.preencode(d, o.files),
1509 o.display && no.preencode(d, o.display),
1510 o.replyTo && c.preencode(d, o.replyTo),
1511 o.parent && c.preencode(d, o.parent),
1512 o.event && co.preencode(d, o.event))
1513 },
1514 encode(d, n) {
1515 const r =
1516 (n.text ? 1 : 0) |
1517 (n.files ? 2 : 0) |
1518 (n.display ? 4 : 0) |
1519 (n.replyTo ? 8 : 0) |
1520 (n.parent ? 16 : 0) |
1521 (n.event ? 32 : 0) |
1522 (o >= 27 && n.forwarded ? 64 : 0)
1523 ;(e.uint.encode(d, r),
1524 n.text && e.string.encode(d, n.text),
1525 n.files && oo.encode(d, n.files),
1526 n.display && no.encode(d, n.display),
1527 n.replyTo && c.encode(d, n.replyTo),
1528 n.parent && c.encode(d, n.parent),
1529 n.event && co.encode(d, n.event))
1530 },
1531 decode(d) {
1532 const n = e.uint.decode(d)
1533 return {
1534 text: 1 & n ? e.string.decode(d) : null,
1535 files: 2 & n ? oo.decode(d) : null,
1536 display: 4 & n ? no.decode(d) : null,
1537 replyTo: 8 & n ? c.decode(d) : null,
1538 parent: 16 & n ? c.decode(d) : null,
1539 event: 32 & n ? co.decode(d) : null,
1540 forwarded: o >= 27 && !!(64 & n),
1541 }
1542 },
1543 },
1544 to = Od,
1545 io = no,
1546 ao = {
1547 preencode(d, o) {
1548 ;(d.end++,
1549 o.text && e.string.preencode(d, o.text),
1550 o.files && to.preencode(d, o.files),
1551 o.display && io.preencode(d, o.display),
1552 o.replyTo && c.preencode(d, o.replyTo),
1553 o.parent && c.preencode(d, o.parent))
1554 },
1555 encode(d, n) {
1556 const r =
1557 (n.text ? 1 : 0) |
1558 (n.files ? 2 : 0) |
1559 (n.display ? 4 : 0) |
1560 (n.replyTo ? 8 : 0) |
1561 (n.parent ? 16 : 0) |
1562 (o >= 27 && n.forwarded ? 32 : 0)
1563 ;(e.uint.encode(d, r),
1564 n.text && e.string.encode(d, n.text),
1565 n.files && to.encode(d, n.files),
1566 n.display && io.encode(d, n.display),
1567 n.replyTo && c.encode(d, n.replyTo),
1568 n.parent && c.encode(d, n.parent))
1569 },
1570 decode(d) {
1571 const n = e.uint.decode(d)
1572 return {
1573 text: 1 & n ? e.string.decode(d) : null,
1574 files: 2 & n ? to.decode(d) : null,
1575 display: 4 & n ? io.decode(d) : null,
1576 replyTo: 8 & n ? c.decode(d) : null,
1577 parent: 16 & n ? c.decode(d) : null,
1578 forwarded: o >= 27 && !!(32 & n),
1579 }
1580 },
1581 },
1582 so = oo,
1583 lo = no,
1584 po = {
1585 preencode(d, o) {
1586 ;(d.end++,
1587 o.text && e.string.preencode(d, o.text),
1588 o.files && so.preencode(d, o.files),
1589 o.display && lo.preencode(d, o.display),
1590 o.replyTo && c.preencode(d, o.replyTo),
1591 o.parent && c.preencode(d, o.parent))
1592 },
1593 encode(d, n) {
1594 const r =
1595 (n.text ? 1 : 0) |
1596 (n.files ? 2 : 0) |
1597 (n.display ? 4 : 0) |
1598 (n.replyTo ? 8 : 0) |
1599 (n.parent ? 16 : 0) |
1600 (o >= 27 && n.forwarded ? 32 : 0)
1601 ;(e.uint.encode(d, r),
1602 n.text && e.string.encode(d, n.text),
1603 n.files && so.encode(d, n.files),
1604 n.display && lo.encode(d, n.display),
1605 n.replyTo && c.encode(d, n.replyTo),
1606 n.parent && c.encode(d, n.parent))
1607 },
1608 decode(d) {
1609 const n = e.uint.decode(d)
1610 return {
1611 text: 1 & n ? e.string.decode(d) : null,
1612 files: 2 & n ? so.decode(d) : null,
1613 display: 4 & n ? lo.decode(d) : null,
1614 replyTo: 8 & n ? c.decode(d) : null,
1615 parent: 16 & n ? c.decode(d) : null,
1616 forwarded: o >= 27 && !!(32 & n),
1617 }
1618 },
1619 },
1620 uo = {
1621 preencode(e, d) {
1622 e.end++
1623 },
1624 encode(d, o) {
1625 const n = (o.isEdited ? 1 : 0) | (o.isDeleted ? 2 : 0) | (o.isPinned ? 4 : 0)
1626 e.uint.encode(d, n)
1627 },
1628 decode(d) {
1629 const o = e.uint.decode(d)
1630 return { isEdited: !!(1 & o), isDeleted: !!(2 & o), isPinned: !!(4 & o) }
1631 },
1632 },
1633 fo = {
1634 preencode(d, o) {
1635 ;(e.uint.preencode(d, o.thread), e.uint.preencode(d, o.index))
1636 },
1637 encode(d, o) {
1638 ;(e.uint.encode(d, o.thread), e.uint.encode(d, o.index))
1639 },
1640 decode: (d) => ({ thread: e.uint.decode(d), index: e.uint.decode(d) }),
1641 },
1642 mo = e.frame(N),
1643 yo = {
1644 preencode(d, o) {
1645 ;(e.uint.preencode(d, o.id),
1646 e.uint.preencode(d, o.count),
1647 d.end++,
1648 o.parent && c.preencode(d, o.parent),
1649 o.stats && mo.preencode(d, o.stats))
1650 },
1651 encode(d, o) {
1652 const n = (o.parent ? 1 : 0) | (o.stats ? 2 : 0)
1653 ;(e.uint.encode(d, o.id),
1654 e.uint.encode(d, o.count),
1655 e.uint.encode(d, n),
1656 o.parent && c.encode(d, o.parent),
1657 o.stats && mo.encode(d, o.stats))
1658 },
1659 decode(d) {
1660 const o = e.uint.decode(d),
1661 n = e.uint.decode(d),
1662 r = e.uint.decode(d)
1663 return {
1664 id: o,
1665 count: n,
1666 parent: 1 & r ? c.decode(d) : null,
1667 stats: 2 & r ? mo.decode(d) : null,
1668 }
1669 },
1670 },
1671 bo = e.frame(uo),
1672 xo = e.frame(ao),
1673 vo = e.frame(Id),
1674 ko = {
1675 preencode(d, o) {
1676 ;(fo.preencode(d, o.id),
1677 c.preencode(d, o.oplog),
1678 e.uint.preencode(d, o.clock),
1679 e.uint.preencode(d, o.timestamp),
1680 d.end++,
1681 o.editedAt && e.uint.preencode(d, o.editedAt),
1682 bo.preencode(d, o.status),
1683 o.message && xo.preencode(d, o.message),
1684 o.event && vo.preencode(d, o.event))
1685 },
1686 encode(d, o) {
1687 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1688 ;(fo.encode(d, o.id),
1689 c.encode(d, o.oplog),
1690 e.uint.encode(d, o.clock),
1691 e.uint.encode(d, o.timestamp),
1692 e.uint.encode(d, n),
1693 o.editedAt && e.uint.encode(d, o.editedAt),
1694 bo.encode(d, o.status),
1695 o.message && xo.encode(d, o.message),
1696 o.event && vo.encode(d, o.event))
1697 },
1698 decode(d) {
1699 const o = fo.decode(d),
1700 n = c.decode(d),
1701 r = e.uint.decode(d),
1702 t = e.uint.decode(d),
1703 i = e.uint.decode(d)
1704 return {
1705 id: o,
1706 oplog: n,
1707 clock: r,
1708 timestamp: t,
1709 editedAt: 1 & i ? e.uint.decode(d) : 0,
1710 status: bo.decode(d),
1711 message: 2 & i ? xo.decode(d) : null,
1712 event: 4 & i ? vo.decode(d) : null,
1713 }
1714 },
1715 },
1716 go = bo,
1717 Ko = e.frame(po),
1718 ho = vo,
1719 wo = {
1720 preencode(d, o) {
1721 ;(fo.preencode(d, o.id),
1722 c.preencode(d, o.oplog),
1723 e.uint.preencode(d, o.clock),
1724 e.uint.preencode(d, o.timestamp),
1725 d.end++,
1726 o.editedAt && e.uint.preencode(d, o.editedAt),
1727 go.preencode(d, o.status),
1728 o.message && Ko.preencode(d, o.message),
1729 o.event && ho.preencode(d, o.event))
1730 },
1731 encode(d, o) {
1732 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1733 ;(fo.encode(d, o.id),
1734 c.encode(d, o.oplog),
1735 e.uint.encode(d, o.clock),
1736 e.uint.encode(d, o.timestamp),
1737 e.uint.encode(d, n),
1738 o.editedAt && e.uint.encode(d, o.editedAt),
1739 go.encode(d, o.status),
1740 o.message && Ko.encode(d, o.message),
1741 o.event && ho.encode(d, o.event))
1742 },
1743 decode(d) {
1744 const o = fo.decode(d),
1745 n = c.decode(d),
1746 r = e.uint.decode(d),
1747 t = e.uint.decode(d),
1748 i = e.uint.decode(d)
1749 return {
1750 id: o,
1751 oplog: n,
1752 clock: r,
1753 timestamp: t,
1754 editedAt: 1 & i ? e.uint.decode(d) : 0,
1755 status: go.decode(d),
1756 message: 2 & i ? Ko.decode(d) : null,
1757 event: 4 & i ? ho.decode(d) : null,
1758 }
1759 },
1760 },
1761 Ro = _,
1762 Po = e.frame(ro),
1763 To = {
1764 preencode(e, d) {
1765 ;(Ro.preencode(e, d.header), Po.preencode(e, d.message))
1766 },
1767 encode(e, d) {
1768 ;(Ro.encode(e, d.header), Po.encode(e, d.message))
1769 },
1770 decode: (e) => ({ header: Ro.decode(e), message: Po.decode(e) }),
1771 },
1772 Ao = _,
1773 Mo = {
1774 preencode(e, d) {
1775 ;(Ao.preencode(e, d.header), c.preencode(e, d.oplog))
1776 },
1777 encode(e, d) {
1778 ;(Ao.encode(e, d.header), c.encode(e, d.oplog))
1779 },
1780 decode: (e) => ({ header: Ao.decode(e), oplog: c.decode(e) }),
1781 },
1782 Do = _,
1783 Co = Po,
1784 So = {
1785 preencode(e, d) {
1786 ;(Do.preencode(e, d.header), c.preencode(e, d.oplog), Co.preencode(e, d.message))
1787 },
1788 encode(e, d) {
1789 ;(Do.encode(e, d.header), c.encode(e, d.oplog), Co.encode(e, d.message))
1790 },
1791 decode: (e) => ({ header: Do.decode(e), oplog: c.decode(e), message: Co.decode(e) }),
1792 },
1793 Io = _,
1794 jo = {
1795 preencode(e, d) {
1796 ;(Io.preencode(e, d.header), c.preencode(e, d.oplog), e.end++)
1797 },
1798 encode(d, o) {
1799 const n = o.isPinned ? 1 : 0
1800 ;(Io.encode(d, o.header), c.encode(d, o.oplog), e.uint.encode(d, n))
1801 },
1802 decode: (d) => ({
1803 header: Io.decode(d),
1804 oplog: c.decode(d),
1805 isPinned: !!(1 & e.uint.decode(d)),
1806 }),
1807 },
1808 Lo = {
1809 preencode(d, o) {
1810 ;(fo.preencode(d, o.id),
1811 e.fixed32.preencode(d, o.sender),
1812 e.uint.preencode(d, o.clock),
1813 e.string.preencode(d, o.reaction))
1814 },
1815 encode(d, o) {
1816 ;(fo.encode(d, o.id),
1817 e.fixed32.encode(d, o.sender),
1818 e.uint.encode(d, o.clock),
1819 e.string.encode(d, o.reaction))
1820 },
1821 decode: (d) => ({
1822 id: fo.decode(d),
1823 sender: e.fixed32.decode(d),
1824 clock: e.uint.decode(d),
1825 reaction: e.string.decode(d),
1826 }),
1827 },
1828 Fo = {
1829 preencode(d, o) {
1830 ;(e.string.preencode(d, o.text), e.uint.preencode(d, o.count))
1831 },
1832 encode(d, o) {
1833 ;(e.string.encode(d, o.text), e.uint.encode(d, o.count))
1834 },
1835 decode: (d) => ({ text: e.string.decode(d), count: e.uint.decode(d) }),
1836 },
1837 qo = e.array(e.frame(Fo)),
1838 Bo = {
1839 preencode(d, n) {
1840 ;(fo.preencode(d, n.id),
1841 e.uint.preencode(d, n.total),
1842 qo.preencode(d, n.reactions),
1843 d.end++,
1844 o >= 17 && n.editedAt && e.uint.preencode(d, n.editedAt))
1845 },
1846 encode(d, n) {
1847 const c = o >= 17 && n.editedAt ? 1 : 0
1848 ;(fo.encode(d, n.id),
1849 e.uint.encode(d, n.total),
1850 qo.encode(d, n.reactions),
1851 e.uint.encode(d, c),
1852 o >= 17 && n.editedAt && e.uint.encode(d, n.editedAt))
1853 },
1854 decode(d) {
1855 const n = fo.decode(d),
1856 c = e.uint.decode(d),
1857 r = qo.decode(d),
1858 t = d.start < d.end ? e.uint.decode(d) : 0
1859 return { id: n, total: c, reactions: r, editedAt: o >= 17 && 1 & t ? e.uint.decode(d) : 0 }
1860 },
1861 },
1862 Eo = _,
1863 Vo = {
1864 preencode(d, o) {
1865 ;(Eo.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
1866 },
1867 encode(d, o) {
1868 ;(Eo.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
1869 },
1870 decode: (d) => ({ header: Eo.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1871 },
1872 Oo = _,
1873 No = {
1874 preencode(d, o) {
1875 ;(Oo.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
1876 },
1877 encode(d, o) {
1878 ;(Oo.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
1879 },
1880 decode: (d) => ({ header: Oo.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1881 },
1882 Uo = _,
1883 Jo = e.frame(Z),
1884 Wo = {
1885 preencode(d, o) {
1886 ;(Uo.preencode(d, o.header), e.uint.preencode(d, o.key), Jo.preencode(d, o.config))
1887 },
1888 encode(d, o) {
1889 ;(Uo.encode(d, o.header), e.uint.encode(d, o.key), Jo.encode(d, o.config))
1890 },
1891 decode: (d) => ({ header: Uo.decode(d), key: e.uint.decode(d), config: Jo.decode(d) }),
1892 },
1893 zo = {
1894 preencode(d, o) {
1895 ;(e.fixed32.preencode(d, o.memberKey),
1896 e.string.preencode(d, o.displayName),
1897 d.end++,
1898 o.avatar && Ha.preencode(d, o.avatar))
1899 },
1900 encode(d, o) {
1901 const n = o.avatar ? 1 : 0
1902 ;(e.fixed32.encode(d, o.memberKey),
1903 e.string.encode(d, o.displayName),
1904 e.uint.encode(d, n),
1905 o.avatar && Ha.encode(d, o.avatar))
1906 },
1907 decode: (d) => ({
1908 memberKey: e.fixed32.decode(d),
1909 displayName: e.string.decode(d),
1910 avatar: 1 & e.uint.decode(d) ? Ha.decode(d) : null,
1911 }),
1912 },
1913 Ho = {
1914 preencode(d, o) {
1915 ;(e.fixed32.preencode(d, o.key), d.end++, o.username && e.string.preencode(d, o.username))
1916 },
1917 encode(d, o) {
1918 const n = o.username ? 1 : 0
1919 ;(e.fixed32.encode(d, o.key),
1920 e.uint.encode(d, n),
1921 o.username && e.string.encode(d, o.username))
1922 },
1923 decode: (d) => ({
1924 key: e.fixed32.decode(d),
1925 username: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
1926 }),
1927 },
1928 Go = e.frame(Ho),
1929 Qo = {
1930 preencode(d, o) {
1931 ;(e.fixed32.preencode(d, o.publicKey),
1932 d.end++,
1933 o.discoveryCoreKey && e.fixed32.preencode(d, o.discoveryCoreKey),
1934 o.userRegistry && Go.preencode(d, o.userRegistry))
1935 },
1936 encode(d, o) {
1937 const n = (o.discoveryCoreKey ? 1 : 0) | (o.userRegistry ? 2 : 0)
1938 ;(e.fixed32.encode(d, o.publicKey),
1939 e.uint.encode(d, n),
1940 o.discoveryCoreKey && e.fixed32.encode(d, o.discoveryCoreKey),
1941 o.userRegistry && Go.encode(d, o.userRegistry))
1942 },
1943 decode(d) {
1944 const o = e.fixed32.decode(d),
1945 n = e.uint.decode(d)
1946 return {
1947 publicKey: o,
1948 discoveryCoreKey: 1 & n ? e.fixed32.decode(d) : null,
1949 userRegistry: 2 & n ? Go.decode(d) : null,
1950 }
1951 },
1952 },
1953 Xo = _,
1954 Yo = e.frame(G),
1955 Zo = e.frame(Q),
1956 $o = Jo,
1957 _o = e.frame(Qo),
1958 en = xe,
1959 dn = e.array(e.frame(ue)),
1960 on = {
1961 preencode(e, d) {
1962 ;(Xo.preencode(e, d.header),
1963 Yo.preencode(e, d.digest),
1964 Zo.preencode(e, d.capabilities),
1965 e.end++,
1966 d.config && $o.preencode(e, d.config),
1967 d.identity && _o.preencode(e, d.identity),
1968 d.bootstrapDevice && en.preencode(e, d.bootstrapDevice),
1969 d.initialMembers && dn.preencode(e, d.initialMembers))
1970 },
1971 encode(d, o) {
1972 const n =
1973 (o.config ? 1 : 0) |
1974 (o.identity ? 2 : 0) |
1975 (o.bootstrapDevice ? 4 : 0) |
1976 (o.initialMembers ? 8 : 0)
1977 ;(Xo.encode(d, o.header),
1978 Yo.encode(d, o.digest),
1979 Zo.encode(d, o.capabilities),
1980 e.uint.encode(d, n),
1981 o.config && $o.encode(d, o.config),
1982 o.identity && _o.encode(d, o.identity),
1983 o.bootstrapDevice && en.encode(d, o.bootstrapDevice),
1984 o.initialMembers && dn.encode(d, o.initialMembers))
1985 },
1986 decode(d) {
1987 const o = Xo.decode(d),
1988 n = Yo.decode(d),
1989 c = Zo.decode(d),
1990 r = e.uint.decode(d)
1991 return {
1992 header: o,
1993 digest: n,
1994 capabilities: c,
1995 config: 1 & r ? $o.decode(d) : null,
1996 identity: 2 & r ? _o.decode(d) : null,
1997 bootstrapDevice: 4 & r ? en.decode(d) : null,
1998 initialMembers: 8 & r ? dn.decode(d) : null,
1999 }
2000 },
2001 },
2002 nn = _,
2003 cn = {
2004 preencode(d, o) {
2005 ;(nn.preencode(d, o.header), e.uint.preencode(d, o.version))
2006 },
2007 encode(d, o) {
2008 ;(nn.encode(d, o.header), e.uint.encode(d, o.version))
2009 },
2010 decode: (d) => ({ header: nn.decode(d), version: e.uint.decode(d) }),
2011 },
2012 rn = _,
2013 tn = H,
2014 an = {
2015 preencode(d, o) {
2016 ;(rn.preencode(d, o.header), e.uint.preencode(d, o.key), tn.preencode(d, o.settings))
2017 },
2018 encode(d, o) {
2019 ;(rn.encode(d, o.header), e.uint.encode(d, o.key), tn.encode(d, o.settings))
2020 },
2021 decode: (d) => ({ header: rn.decode(d), key: e.uint.decode(d), settings: tn.decode(d) }),
2022 },
2023 sn = {
2024 preencode(d, o) {
2025 ;(e.fixed32.preencode(d, o.memberKey),
2026 Ga.preencode(d, o.status),
2027 d.end++,
2028 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2029 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2030 },
2031 encode(d, o) {
2032 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2033 ;(e.fixed32.encode(d, o.memberKey),
2034 Ga.encode(d, o.status),
2035 e.uint.encode(d, n),
2036 o.mailbox && e.fixed32.encode(d, o.mailbox),
2037 o.roomKey && e.fixed32.encode(d, o.roomKey))
2038 },
2039 decode(d) {
2040 const o = e.fixed32.decode(d),
2041 n = Ga.decode(d),
2042 c = e.uint.decode(d)
2043 return {
2044 memberKey: o,
2045 status: n,
2046 mailbox: 1 & c ? e.fixed32.decode(d) : null,
2047 roomKey: 2 & c ? e.fixed32.decode(d) : null,
2048 }
2049 },
2050 },
2051 ln = {
2052 preencode(d, o) {
2053 ;(e.fixed32.preencode(d, o.roomKey),
2054 e.buffer.preencode(d, o.encryptionKey),
2055 e.fixed32.preencode(d, o.seed),
2056 n.preencode(d, o.initiator),
2057 e.fixed32.preencode(d, o.fastForwardTo))
2058 },
2059 encode(d, o) {
2060 ;(e.fixed32.encode(d, o.roomKey),
2061 e.buffer.encode(d, o.encryptionKey),
2062 e.fixed32.encode(d, o.seed),
2063 n.encode(d, o.initiator),
2064 e.fixed32.encode(d, o.fastForwardTo))
2065 },
2066 decode: (d) => ({
2067 roomKey: e.fixed32.decode(d),
2068 encryptionKey: e.buffer.decode(d),
2069 seed: e.fixed32.decode(d),
2070 initiator: n.decode(d),
2071 fastForwardTo: e.fixed32.decode(d),
2072 }),
2073 },
2074 pn = e.array(e.frame(ln)),
2075 un = Y,
2076 fn = {
2077 preencode(e, d) {
2078 ;(pn.preencode(e, d.sharedRooms), un.preencode(e, d.blockedContacts))
2079 },
2080 encode(e, d) {
2081 ;(pn.encode(e, d.sharedRooms), un.encode(e, d.blockedContacts))
2082 },
2083 decode: (e) => ({ sharedRooms: pn.decode(e), blockedContacts: un.decode(e) }),
2084 },
2085 mn = _o,
2086 yn = {
2087 preencode(e, d) {
2088 mn.preencode(e, d.identity)
2089 },
2090 encode(e, d) {
2091 mn.encode(e, d.identity)
2092 },
2093 decode: (e) => ({ identity: mn.decode(e) }),
2094 },
2095 bn = {
2096 preencode(d, o) {
2097 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contacts))
2098 },
2099 encode(d, o) {
2100 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contacts))
2101 },
2102 decode: (d) => ({ rooms: e.uint.decode(d), contacts: e.uint.decode(d) }),
2103 },
2104 xn = {
2105 preencode(d, o) {
2106 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contactRequests))
2107 },
2108 encode(d, o) {
2109 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contactRequests))
2110 },
2111 decode: (d) => ({ rooms: e.uint.decode(d), contactRequests: e.uint.decode(d) }),
2112 },
2113 vn = {
2114 preencode(d, o) {
2115 e.buffer.preencode(d, o.entropy)
2116 },
2117 encode(d, o) {
2118 e.buffer.encode(d, o.entropy)
2119 },
2120 decode: (d) => ({ entropy: e.buffer.decode(d) }),
2121 },
2122 kn = {
2123 preencode(d, o) {
2124 ;(e.fixed32.preencode(d, o.publicKey),
2125 e.fixed32.preencode(d, o.devicePublicKey),
2126 e.fixed32.preencode(d, o.writerKey))
2127 },
2128 encode(d, o) {
2129 ;(e.fixed32.encode(d, o.publicKey),
2130 e.fixed32.encode(d, o.devicePublicKey),
2131 e.fixed32.encode(d, o.writerKey))
2132 },
2133 decode: (d) => ({
2134 publicKey: e.fixed32.decode(d),
2135 devicePublicKey: e.fixed32.decode(d),
2136 writerKey: e.fixed32.decode(d),
2137 }),
2138 },
2139 gn = e.frame(kn),
2140 Kn = {
2141 preencode(d, c) {
2142 ;(e.fixed32.preencode(d, c.id),
2143 e.fixed32.preencode(d, c.invitationSeed),
2144 e.fixed32.preencode(d, c.mailbox),
2145 t.preencode(d, c.responseKeyPair),
2146 n.preencode(d, c.initiator),
2147 n.preencode(d, c.inviter),
2148 d.end++,
2149 c.identity && gn.preencode(d, c.identity),
2150 o >= 29 && c.buildType && vi.preencode(d, c.buildType))
2151 },
2152 encode(d, c) {
2153 const r = (c.identity ? 1 : 0) | (o >= 29 && c.buildType ? 2 : 0)
2154 ;(e.fixed32.encode(d, c.id),
2155 e.fixed32.encode(d, c.invitationSeed),
2156 e.fixed32.encode(d, c.mailbox),
2157 t.encode(d, c.responseKeyPair),
2158 n.encode(d, c.initiator),
2159 n.encode(d, c.inviter),
2160 e.uint.encode(d, r),
2161 c.identity && gn.encode(d, c.identity),
2162 o >= 29 && c.buildType && vi.encode(d, c.buildType))
2163 },
2164 decode(d) {
2165 const c = e.fixed32.decode(d),
2166 r = e.fixed32.decode(d),
2167 i = e.fixed32.decode(d),
2168 a = t.decode(d),
2169 s = n.decode(d),
2170 l = n.decode(d),
2171 p = e.uint.decode(d)
2172 return {
2173 id: c,
2174 invitationSeed: r,
2175 mailbox: i,
2176 responseKeyPair: a,
2177 initiator: s,
2178 inviter: l,
2179 identity: 1 & p ? gn.decode(d) : null,
2180 buildType: o >= 29 && 2 & p ? vi.decode(d) : null,
2181 }
2182 },
2183 },
2184 hn = _,
2185 wn = {
2186 preencode(d, o) {
2187 ;(hn.preencode(d, o.header), e.buffer.preencode(d, o.blindResponse))
2188 },
2189 encode(d, o) {
2190 ;(hn.encode(d, o.header), e.buffer.encode(d, o.blindResponse))
2191 },
2192 decode: (d) => ({ header: hn.decode(d), blindResponse: e.buffer.decode(d) }),
2193 },
2194 Rn = _,
2195 Pn = e.frame(Kn),
2196 Tn = {
2197 preencode(e, d) {
2198 ;(Rn.preencode(e, d.header), Pn.preencode(e, d.invitation))
2199 },
2200 encode(e, d) {
2201 ;(Rn.encode(e, d.header), Pn.encode(e, d.invitation))
2202 },
2203 decode: (e) => ({ header: Rn.decode(e), invitation: Pn.decode(e) }),
2204 },
2205 An = _,
2206 Mn = {
2207 preencode(d, o) {
2208 ;(An.preencode(d, o.header), e.fixed32.preencode(d, o.id))
2209 },
2210 encode(d, o) {
2211 ;(An.encode(d, o.header), e.fixed32.encode(d, o.id))
2212 },
2213 decode: (d) => ({ header: An.decode(d), id: e.fixed32.decode(d) }),
2214 },
2215 Dn = {
2216 preencode(d, o) {
2217 ;(e.fixed32.preencode(d, o.publicKey),
2218 e.fixed32.preencode(d, o.devicePublicKey),
2219 d.end++,
2220 o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey),
2221 o.deviceKeyPair && t.preencode(d, o.deviceKeyPair),
2222 e.buffer.preencode(d, o.deviceProof))
2223 },
2224 encode(d, o) {
2225 const n = (o.privateProfileKey ? 1 : 0) | (o.deviceKeyPair ? 2 : 0)
2226 ;(e.fixed32.encode(d, o.publicKey),
2227 e.fixed32.encode(d, o.devicePublicKey),
2228 e.uint.encode(d, n),
2229 o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey),
2230 o.deviceKeyPair && t.encode(d, o.deviceKeyPair),
2231 e.buffer.encode(d, o.deviceProof))
2232 },
2233 decode(d) {
2234 const o = e.fixed32.decode(d),
2235 n = e.fixed32.decode(d),
2236 c = e.uint.decode(d)
2237 return {
2238 publicKey: o,
2239 devicePublicKey: n,
2240 privateProfileKey: 1 & c ? e.fixed32.decode(d) : null,
2241 deviceKeyPair: 2 & c ? t.decode(d) : null,
2242 deviceProof: e.buffer.decode(d),
2243 }
2244 },
2245 },
2246 Cn = {
2247 preencode(e, d) {
2248 e.end++
2249 },
2250 encode(d, n) {
2251 const c =
2252 (n.isActive ? 1 : 0) |
2253 (n.isFullyMuted ? 2 : 0) |
2254 (n.isMentionsOnlyMuted ? 4 : 0) |
2255 (o >= 14 && n.isReadOnly ? 8 : 0) |
2256 (o >= 27 && n.isFavorite ? 16 : 0)
2257 e.uint.encode(d, c)
2258 },
2259 decode(d) {
2260 const n = e.uint.decode(d)
2261 return {
2262 isActive: !!(1 & n),
2263 isFullyMuted: !!(2 & n),
2264 isMentionsOnlyMuted: !!(4 & n),
2265 isReadOnly: o >= 14 && !!(8 & n),
2266 isFavorite: o >= 27 && !!(16 & n),
2267 }
2268 },
2269 },
2270 Sn = e.frame(Cn),
2271 In = e.frame(Dn),
2272 jn = gn,
2273 Ln = {
2274 preencode(d, c) {
2275 ;(e.fixed32.preencode(d, c.roomKey),
2276 e.buffer.preencode(d, c.encryptionKey),
2277 e.fixed32.preencode(d, c.mailbox),
2278 Sn.preencode(d, c.status),
2279 e.uint.preencode(d, c.clock),
2280 d.end++,
2281 c.initiator && n.preencode(d, c.initiator),
2282 c.fastForwardTo && e.fixed32.preencode(d, c.fastForwardTo),
2283 c.identitySwap && In.preencode(d, c.identitySwap),
2284 o >= 9 && c.identitySwapV2 && jn.preencode(d, c.identitySwapV2),
2285 o >= 15 && c.contact && e.fixed32.preencode(d, c.contact))
2286 },
2287 encode(d, c) {
2288 const r =
2289 (c.initiator ? 1 : 0) |
2290 (c.fastForwardTo ? 2 : 0) |
2291 (c.identitySwap ? 4 : 0) |
2292 (o >= 9 && c.identitySwapV2 ? 8 : 0) |
2293 (o >= 15 && c.contact ? 16 : 0)
2294 ;(e.fixed32.encode(d, c.roomKey),
2295 e.buffer.encode(d, c.encryptionKey),
2296 e.fixed32.encode(d, c.mailbox),
2297 Sn.encode(d, c.status),
2298 e.uint.encode(d, c.clock),
2299 e.uint.encode(d, r),
2300 c.initiator && n.encode(d, c.initiator),
2301 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2302 c.identitySwap && In.encode(d, c.identitySwap),
2303 o >= 9 && c.identitySwapV2 && jn.encode(d, c.identitySwapV2),
2304 o >= 15 && c.contact && e.fixed32.encode(d, c.contact))
2305 },
2306 decode(d) {
2307 const c = e.fixed32.decode(d),
2308 r = e.buffer.decode(d),
2309 t = e.fixed32.decode(d),
2310 i = Sn.decode(d),
2311 a = e.uint.decode(d),
2312 s = e.uint.decode(d)
2313 return {
2314 roomKey: c,
2315 encryptionKey: r,
2316 mailbox: t,
2317 status: i,
2318 clock: a,
2319 initiator: 1 & s ? n.decode(d) : null,
2320 fastForwardTo: 2 & s ? e.fixed32.decode(d) : null,
2321 identitySwap: 4 & s ? In.decode(d) : null,
2322 identitySwapV2: o >= 9 && 8 & s ? jn.decode(d) : null,
2323 contact: o >= 15 && 16 & s ? e.fixed32.decode(d) : null,
2324 }
2325 },
2326 },
2327 Fn = _,
2328 qn = {
2329 preencode(d, o) {
2330 ;(Fn.preencode(d, o.header),
2331 e.fixed32.preencode(d, o.roomKey),
2332 e.buffer.preencode(d, o.encryptionKey),
2333 e.fixed32.preencode(d, o.mailbox),
2334 d.end++,
2335 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2336 o.initiator && n.preencode(d, o.initiator),
2337 o.dm && e.fixed32.preencode(d, o.dm))
2338 },
2339 encode(d, c) {
2340 const r =
2341 (c.fastForwardTo ? 1 : 0) |
2342 (c.initiator ? 2 : 0) |
2343 (c.dm ? 4 : 0) |
2344 (o >= 14 && c.isReadOnly ? 8 : 0)
2345 ;(Fn.encode(d, c.header),
2346 e.fixed32.encode(d, c.roomKey),
2347 e.buffer.encode(d, c.encryptionKey),
2348 e.fixed32.encode(d, c.mailbox),
2349 e.uint.encode(d, r),
2350 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2351 c.initiator && n.encode(d, c.initiator),
2352 c.dm && e.fixed32.encode(d, c.dm))
2353 },
2354 decode(d) {
2355 const c = Fn.decode(d),
2356 r = e.fixed32.decode(d),
2357 t = e.buffer.decode(d),
2358 i = e.fixed32.decode(d),
2359 a = e.uint.decode(d)
2360 return {
2361 header: c,
2362 roomKey: r,
2363 encryptionKey: t,
2364 mailbox: i,
2365 fastForwardTo: 1 & a ? e.fixed32.decode(d) : null,
2366 initiator: 2 & a ? n.decode(d) : null,
2367 dm: 4 & a ? e.fixed32.decode(d) : null,
2368 isReadOnly: o >= 14 && !!(8 & a),
2369 }
2370 },
2371 },
2372 Bn = _,
2373 En = {
2374 preencode(d, o) {
2375 ;(Bn.preencode(d, o.header), e.fixed32.preencode(d, o.discoveryKey))
2376 },
2377 encode(d, o) {
2378 ;(Bn.encode(d, o.header), e.fixed32.encode(d, o.discoveryKey))
2379 },
2380 decode: (d) => ({ header: Bn.decode(d), discoveryKey: e.fixed32.decode(d) }),
2381 },
2382 Vn = _,
2383 On = Sn,
2384 Nn = {
2385 preencode(d, o) {
2386 ;(Vn.preencode(d, o.header),
2387 e.fixed32.preencode(d, o.roomKey),
2388 e.uint.preencode(d, o.key),
2389 On.preencode(d, o.status))
2390 },
2391 encode(d, o) {
2392 ;(Vn.encode(d, o.header),
2393 e.fixed32.encode(d, o.roomKey),
2394 e.uint.encode(d, o.key),
2395 On.encode(d, o.status))
2396 },
2397 decode: (d) => ({
2398 header: Vn.decode(d),
2399 roomKey: e.fixed32.decode(d),
2400 key: e.uint.decode(d),
2401 status: On.decode(d),
2402 }),
2403 },
2404 Un = {
2405 preencode(e, d) {
2406 e.end++
2407 },
2408 encode(d, o) {
2409 const n = o.isBlocked ? 1 : 0
2410 e.uint.encode(d, n)
2411 },
2412 decode: (d) => ({ isBlocked: !!(1 & e.uint.decode(d)) }),
2413 },
2414 Jn = {
2415 preencode(d, o) {
2416 ;(e.fixed32.preencode(d, o.memberKey),
2417 e.uint.preencode(d, o.clock),
2418 Qa.preencode(d, o.status),
2419 d.end++,
2420 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2421 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2422 },
2423 encode(d, o) {
2424 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2425 ;(e.fixed32.encode(d, o.memberKey),
2426 e.uint.encode(d, o.clock),
2427 Qa.encode(d, o.status),
2428 e.uint.encode(d, n),
2429 o.mailbox && e.fixed32.encode(d, o.mailbox),
2430 o.roomKey && e.fixed32.encode(d, o.roomKey))
2431 },
2432 decode(d) {
2433 const o = e.fixed32.decode(d),
2434 n = e.uint.decode(d),
2435 c = Qa.decode(d),
2436 r = e.uint.decode(d)
2437 return {
2438 memberKey: o,
2439 clock: n,
2440 status: c,
2441 mailbox: 1 & r ? e.fixed32.decode(d) : null,
2442 roomKey: 2 & r ? e.fixed32.decode(d) : null,
2443 }
2444 },
2445 },
2446 Wn = _,
2447 zn = e.frame(sn),
2448 Hn = {
2449 preencode(e, d) {
2450 ;(Wn.preencode(e, d.header), zn.preencode(e, d.contact))
2451 },
2452 encode(e, d) {
2453 ;(Wn.encode(e, d.header), zn.encode(e, d.contact))
2454 },
2455 decode: (e) => ({ header: Wn.decode(e), contact: zn.decode(e) }),
2456 },
2457 Gn = _,
2458 Qn = {
2459 preencode(d, o) {
2460 ;(Gn.preencode(d, o.header),
2461 e.fixed32.preencode(d, o.memberKey),
2462 e.uint.preencode(d, o.key),
2463 Xa.preencode(d, o.status))
2464 },
2465 encode(d, o) {
2466 ;(Gn.encode(d, o.header),
2467 e.fixed32.encode(d, o.memberKey),
2468 e.uint.encode(d, o.key),
2469 Xa.encode(d, o.status))
2470 },
2471 decode: (d) => ({
2472 header: Gn.decode(d),
2473 memberKey: e.fixed32.decode(d),
2474 key: e.uint.decode(d),
2475 status: Xa.decode(d),
2476 }),
2477 },
2478 Xn = _,
2479 Yn = {
2480 preencode(d, o) {
2481 ;(Xn.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
2482 },
2483 encode(d, o) {
2484 ;(Xn.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
2485 },
2486 decode: (d) => ({ header: Xn.decode(d), memberKey: e.fixed32.decode(d) }),
2487 },
2488 Zn = {
2489 preencode(e, d) {
2490 e.end++
2491 },
2492 encode(d, o) {
2493 const n =
2494 (o.isPending ? 1 : 0) |
2495 (o.isAccepted ? 2 : 0) |
2496 (o.isRejected ? 4 : 0) |
2497 (o.isDiscarded ? 8 : 0) |
2498 (o.isSeen ? 16 : 0)
2499 e.uint.encode(d, n)
2500 },
2501 decode(d) {
2502 const o = e.uint.decode(d)
2503 return {
2504 isPending: !!(1 & o),
2505 isAccepted: !!(2 & o),
2506 isRejected: !!(4 & o),
2507 isDiscarded: !!(8 & o),
2508 isSeen: !!(16 & o),
2509 }
2510 },
2511 },
2512 $n = ve,
2513 _n = e.frame(i),
2514 ec = {
2515 preencode(d, o) {
2516 ;($n.preencode(d, o.sender),
2517 _n.preencode(d, o.keys),
2518 e.fixed32.preencode(d, o.mailbox),
2519 d.end++,
2520 o.message && e.string.preencode(d, o.message))
2521 },
2522 encode(d, o) {
2523 const n = o.message ? 1 : 0
2524 ;($n.encode(d, o.sender),
2525 _n.encode(d, o.keys),
2526 e.fixed32.encode(d, o.mailbox),
2527 e.uint.encode(d, n),
2528 o.message && e.string.encode(d, o.message))
2529 },
2530 decode: (d) => ({
2531 sender: $n.decode(d),
2532 keys: _n.decode(d),
2533 mailbox: e.fixed32.decode(d),
2534 message: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2535 }),
2536 },
2537 dc = e.frame(ec),
2538 oc = {
2539 preencode(e, d) {
2540 ;(dc.preencode(e, d.body), ce.preencode(e, d.attestation))
2541 },
2542 encode(e, d) {
2543 ;(dc.encode(e, d.body), ce.encode(e, d.attestation))
2544 },
2545 decode: (e) => ({ body: dc.decode(e), attestation: ce.decode(e) }),
2546 },
2547 nc = pe,
2548 cc = e.frame(Zn),
2549 rc = _n,
2550 tc = {
2551 preencode(d, n) {
2552 ;(e.fixed32.preencode(d, n.memberKey),
2553 e.uint.preencode(d, n.clock),
2554 nc.preencode(d, n.sender),
2555 cc.preencode(d, n.status),
2556 rc.preencode(d, n.keys),
2557 e.fixed32.preencode(d, n.mailbox),
2558 d.end++,
2559 n.message && e.string.preencode(d, n.message),
2560 o >= 17 && n.sentAt && e.uint.preencode(d, n.sentAt))
2561 },
2562 encode(d, n) {
2563 const c = (n.message ? 1 : 0) | (o >= 17 && n.sentAt ? 2 : 0)
2564 ;(e.fixed32.encode(d, n.memberKey),
2565 e.uint.encode(d, n.clock),
2566 nc.encode(d, n.sender),
2567 cc.encode(d, n.status),
2568 rc.encode(d, n.keys),
2569 e.fixed32.encode(d, n.mailbox),
2570 e.uint.encode(d, c),
2571 n.message && e.string.encode(d, n.message),
2572 o >= 17 && n.sentAt && e.uint.encode(d, n.sentAt))
2573 },
2574 decode(d) {
2575 const n = e.fixed32.decode(d),
2576 c = e.uint.decode(d),
2577 r = nc.decode(d),
2578 t = cc.decode(d),
2579 i = rc.decode(d),
2580 a = e.fixed32.decode(d),
2581 s = e.uint.decode(d)
2582 return {
2583 memberKey: n,
2584 clock: c,
2585 sender: r,
2586 status: t,
2587 keys: i,
2588 mailbox: a,
2589 message: 1 & s ? e.string.decode(d) : null,
2590 sentAt: o >= 17 && 2 & s ? e.uint.decode(d) : 0,
2591 }
2592 },
2593 },
2594 ic = _,
2595 ac = {
2596 preencode(d, o) {
2597 ;(ic.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
2598 },
2599 encode(d, o) {
2600 ;(ic.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
2601 },
2602 decode: (d) => ({ header: ic.decode(d), blindRequest: e.buffer.decode(d) }),
2603 },
2604 sc = _,
2605 lc = cc,
2606 pc = {
2607 preencode(d, n) {
2608 ;(sc.preencode(d, n.header),
2609 e.fixed32.preencode(d, n.memberKey),
2610 e.uint.preencode(d, n.key),
2611 lc.preencode(d, n.status),
2612 d.end++,
2613 o >= 15 && n.roomKey && e.fixed32.preencode(d, n.roomKey))
2614 },
2615 encode(d, n) {
2616 const c = o >= 15 && n.roomKey ? 1 : 0
2617 ;(sc.encode(d, n.header),
2618 e.fixed32.encode(d, n.memberKey),
2619 e.uint.encode(d, n.key),
2620 lc.encode(d, n.status),
2621 e.uint.encode(d, c),
2622 o >= 15 && n.roomKey && e.fixed32.encode(d, n.roomKey))
2623 },
2624 decode(d) {
2625 const n = sc.decode(d),
2626 c = e.fixed32.decode(d),
2627 r = e.uint.decode(d),
2628 t = lc.decode(d),
2629 i = d.start < d.end ? e.uint.decode(d) : 0
2630 return {
2631 header: n,
2632 memberKey: c,
2633 key: r,
2634 status: t,
2635 roomKey: o >= 15 && 1 & i ? e.fixed32.decode(d) : null,
2636 }
2637 },
2638 },
2639 uc = {
2640 preencode(d, o) {
2641 ;(e.uint.preencode(d, o.timestamp),
2642 e.fixed32.preencode(d, o.key),
2643 e.fixed32.preencode(d, o.mailbox))
2644 },
2645 encode(d, o) {
2646 ;(e.uint.encode(d, o.timestamp), e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.mailbox))
2647 },
2648 decode: (d) => ({
2649 version: e.uint.decode(d),
2650 timestamp: e.uint.decode(d),
2651 key: e.fixed32.decode(d),
2652 mailbox: e.fixed32.decode(d),
2653 }),
2654 },
2655 fc = {
2656 preencode(d, o) {
2657 switch ((e.uint.preencode(d, o.version), o.version)) {
2658 case 0:
2659 case 1:
2660 uc.preencode(d, o)
2661 break
2662 default:
2663 throw new Error("Unsupported version")
2664 }
2665 },
2666 encode(d, o) {
2667 switch ((e.uint.encode(d, o.version), o.version)) {
2668 case 0:
2669 case 1:
2670 uc.encode(d, o)
2671 break
2672 default:
2673 throw new Error("Unsupported version")
2674 }
2675 },
2676 decode(d) {
2677 const o = d.start,
2678 n = e.uint.decode(d)
2679 switch (((d.start = o), n)) {
2680 case 0:
2681 case 1:
2682 return uc.decode(d)
2683 default:
2684 throw new Error("Unsupported version")
2685 }
2686 },
2687 },
2688 mc = {
2689 preencode(d, o) {
2690 ;(e.fixed32.preencode(d, o.discoveryPublicKey),
2691 e.uint.preencode(d, o.timestamp),
2692 d.end++,
2693 o.lastSynced && e.uint.preencode(d, o.lastSynced))
2694 },
2695 encode(d, o) {
2696 const n = (o.lastSynced ? 1 : 0) | (o.dirty ? 2 : 0)
2697 ;(e.fixed32.encode(d, o.discoveryPublicKey),
2698 e.uint.encode(d, o.timestamp),
2699 e.uint.encode(d, n),
2700 o.lastSynced && e.uint.encode(d, o.lastSynced))
2701 },
2702 decode(d) {
2703 const o = e.fixed32.decode(d),
2704 n = e.uint.decode(d),
2705 c = e.uint.decode(d)
2706 return {
2707 discoveryPublicKey: o,
2708 timestamp: n,
2709 lastSynced: 1 & c ? e.uint.decode(d) : 0,
2710 dirty: !!(2 & c),
2711 }
2712 },
2713 },
2714 yc = {
2715 preencode(d, o) {
2716 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.activeRooms))
2717 },
2718 encode(d, o) {
2719 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.activeRooms))
2720 },
2721 decode: (d) => ({ rooms: e.uint.decode(d), activeRooms: e.uint.decode(d) }),
2722 },
2723 bc = I,
2724 xc = Y,
2725 vc = {
2726 preencode(e, d) {
2727 ;(e.end++, d.blockedMembers && xc.preencode(e, d.blockedMembers))
2728 },
2729 encode(d, o) {
2730 const n = o.blockedMembers ? 1 : 0
2731 ;(e.uint.encode(d, n), o.blockedMembers && xc.encode(d, o.blockedMembers))
2732 },
2733 decode: (d) => ({ blockedMembers: 1 & e.uint.decode(d) ? xc.decode(d) : null }),
2734 },
2735 kc = e.frame(X),
2736 gc = e.frame(vc),
2737 Kc = {
2738 preencode(d, o) {
2739 ;(e.buffer.preencode(d, o.encryptionKey),
2740 e.fixed32.preencode(d, o.seed),
2741 kc.preencode(d, o.capabilities),
2742 n.preencode(d, o.initiator),
2743 e.fixed32.preencode(d, o.fastForwardTo),
2744 d.end++,
2745 o.privateProfile && gc.preencode(d, o.privateProfile))
2746 },
2747 encode(d, o) {
2748 const c = o.privateProfile ? 1 : 0
2749 ;(e.buffer.encode(d, o.encryptionKey),
2750 e.fixed32.encode(d, o.seed),
2751 kc.encode(d, o.capabilities),
2752 n.encode(d, o.initiator),
2753 e.fixed32.encode(d, o.fastForwardTo),
2754 e.uint.encode(d, c),
2755 o.privateProfile && gc.encode(d, o.privateProfile))
2756 },
2757 decode: (d) => ({
2758 encryptionKey: e.buffer.decode(d),
2759 seed: e.fixed32.decode(d),
2760 capabilities: kc.decode(d),
2761 initiator: n.decode(d),
2762 fastForwardTo: e.fixed32.decode(d),
2763 privateProfile: 1 & e.uint.decode(d) ? gc.decode(d) : null,
2764 }),
2765 },
2766 hc = {
2767 preencode(d, o) {
2768 ;(d.end++, o.count && e.uint.preencode(d, o.count))
2769 },
2770 encode(d, o) {
2771 const n = o.count ? 1 : 0
2772 ;(e.uint.encode(d, n), o.count && e.uint.encode(d, o.count))
2773 },
2774 decode: (d) => ({ count: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0 }),
2775 },
2776 wc = e.frame(Kc),
2777 Rc = {
2778 preencode(d, n) {
2779 ;(e.fixed32.preencode(d, n.roomKey),
2780 e.uint.preencode(d, n.priority),
2781 d.end++,
2782 n.v3 && wc.preencode(d, n.v3),
2783 o >= 5 && n.timestamp && e.uint.preencode(d, n.timestamp))
2784 },
2785 encode(d, n) {
2786 const c = (n.v3 ? 1 : 0) | (o >= 3 && n.errored ? 2 : 0) | (o >= 5 && n.timestamp ? 4 : 0)
2787 ;(e.fixed32.encode(d, n.roomKey),
2788 e.uint.encode(d, n.priority),
2789 e.uint.encode(d, c),
2790 n.v3 && wc.encode(d, n.v3),
2791 o >= 5 && n.timestamp && e.uint.encode(d, n.timestamp))
2792 },
2793 decode(d) {
2794 const n = e.fixed32.decode(d),
2795 c = e.uint.decode(d),
2796 r = e.uint.decode(d)
2797 return {
2798 roomKey: n,
2799 priority: c,
2800 v3: 1 & r ? wc.decode(d) : null,
2801 errored: o >= 3 && !!(2 & r),
2802 timestamp: o >= 5 && 4 & r ? e.uint.decode(d) : 0,
2803 }
2804 },
2805 },
2806 Pc = {
2807 preencode(e, d) {
2808 e.end++
2809 },
2810 encode(d, o) {
2811 const n = o.isConfirmed ? 1 : 0
2812 e.uint.encode(d, n)
2813 },
2814 decode: (d) => ({ isConfirmed: !!(1 & e.uint.decode(d)) }),
2815 },
2816 Tc = e.frame(Pc),
2817 Ac = In,
2818 Mc = {
2819 preencode(d, n) {
2820 ;(e.fixed32.preencode(d, n.publicKey),
2821 e.fixed32.preencode(d, n.privateProfileKey),
2822 t.preencode(d, n.deviceKeyPair),
2823 e.buffer.preencode(d, n.deviceProof),
2824 Tc.preencode(d, n.status),
2825 d.end++,
2826 n.entropy && e.buffer.preencode(d, n.entropy),
2827 n.swap && Ac.preencode(d, n.swap),
2828 o >= 9 && n.swapV2 && Ya.preencode(d, n.swapV2))
2829 },
2830 encode(d, n) {
2831 const c = (n.entropy ? 1 : 0) | (n.swap ? 2 : 0) | (o >= 9 && n.swapV2 ? 4 : 0)
2832 ;(e.fixed32.encode(d, n.publicKey),
2833 e.fixed32.encode(d, n.privateProfileKey),
2834 t.encode(d, n.deviceKeyPair),
2835 e.buffer.encode(d, n.deviceProof),
2836 Tc.encode(d, n.status),
2837 e.uint.encode(d, c),
2838 n.entropy && e.buffer.encode(d, n.entropy),
2839 n.swap && Ac.encode(d, n.swap),
2840 o >= 9 && n.swapV2 && Ya.encode(d, n.swapV2))
2841 },
2842 decode(d) {
2843 const n = e.fixed32.decode(d),
2844 c = e.fixed32.decode(d),
2845 r = t.decode(d),
2846 i = e.buffer.decode(d),
2847 a = Tc.decode(d),
2848 s = e.uint.decode(d)
2849 return {
2850 publicKey: n,
2851 privateProfileKey: c,
2852 deviceKeyPair: r,
2853 deviceProof: i,
2854 status: a,
2855 entropy: 1 & s ? e.buffer.decode(d) : null,
2856 swap: 2 & s ? Ac.decode(d) : null,
2857 swapV2: o >= 9 && 4 & s ? Ya.decode(d) : null,
2858 }
2859 },
2860 },
2861 Dc = {
2862 RestoreIdentity: 1,
2863 CreateRoom: 2,
2864 LeaveRoom: 3,
2865 ClearRoom: 4,
2866 JoinRoomInvitation: 5,
2867 JoinRoomKeys: 6,
2868 JoinRoomResponse: 7,
2869 SendContactRequest: 8,
2870 TestFastTask: 9,
2871 TestSlowTask: 10,
2872 TestErrorTask: 11,
2873 },
2874 Cc = {
2875 preencode(e, d) {
2876 e.end++
2877 },
2878 encode(d, o) {
2879 if (o > 11) throw new Error("Unknown enum")
2880 e.uint.encode(d, o)
2881 },
2882 decode: (d) => e.uint.decode(d),
2883 },
2884 Sc = {
2885 preencode(d, o) {
2886 ;(e.fixed32.preencode(d, o.roomKey),
2887 e.buffer.preencode(d, o.encryptionKey),
2888 d.end++,
2889 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2890 o.initiator && n.preencode(d, o.initiator))
2891 },
2892 encode(d, o) {
2893 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0)
2894 ;(e.fixed32.encode(d, o.roomKey),
2895 e.buffer.encode(d, o.encryptionKey),
2896 e.uint.encode(d, c),
2897 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2898 o.initiator && n.encode(d, o.initiator))
2899 },
2900 decode(d) {
2901 const o = e.fixed32.decode(d),
2902 c = e.buffer.decode(d),
2903 r = e.uint.decode(d)
2904 return {
2905 roomKey: o,
2906 encryptionKey: c,
2907 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
2908 initiator: 2 & r ? n.decode(d) : null,
2909 }
2910 },
2911 },
2912 Ic = Pn,
2913 jc = {
2914 preencode(e, d) {
2915 Ic.preencode(e, d.invitation)
2916 },
2917 encode(e, d) {
2918 Ic.encode(e, d.invitation)
2919 },
2920 decode: (e) => ({ invitation: Ic.decode(e) }),
2921 },
2922 Lc = {
2923 preencode(d, o) {
2924 ;(e.fixed32.preencode(d, o.mailbox),
2925 t.preencode(d, o.keyPair),
2926 e.buffer.preencode(d, o.response))
2927 },
2928 encode(d, o) {
2929 ;(e.fixed32.encode(d, o.mailbox), t.encode(d, o.keyPair), e.buffer.encode(d, o.response))
2930 },
2931 decode: (d) => ({
2932 mailbox: e.fixed32.decode(d),
2933 keyPair: t.decode(d),
2934 response: e.buffer.decode(d),
2935 }),
2936 },
2937 Fc = $,
2938 qc = {
2939 preencode(d, o) {
2940 ;(e.fixed32.preencode(d, o.roomKey),
2941 e.buffer.preencode(d, o.encryptionKey),
2942 d.end++,
2943 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2944 o.initiator && n.preencode(d, o.initiator),
2945 o.mailbox && e.fixed32.preencode(d, o.mailbox))
2946 },
2947 encode(d, o) {
2948 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0) | (o.mailbox ? 4 : 0)
2949 ;(e.fixed32.encode(d, o.roomKey),
2950 e.buffer.encode(d, o.encryptionKey),
2951 e.uint.encode(d, c),
2952 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2953 o.initiator && n.encode(d, o.initiator),
2954 o.mailbox && e.fixed32.encode(d, o.mailbox))
2955 },
2956 decode(d) {
2957 const o = e.fixed32.decode(d),
2958 c = e.buffer.decode(d),
2959 r = e.uint.decode(d)
2960 return {
2961 roomKey: o,
2962 encryptionKey: c,
2963 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
2964 initiator: 2 & r ? n.decode(d) : null,
2965 mailbox: 4 & r ? e.fixed32.decode(d) : null,
2966 }
2967 },
2968 },
2969 Bc = e.frame(qc),
2970 Ec = {
2971 preencode(e, d) {
2972 Bc.preencode(e, d.keys)
2973 },
2974 encode(e, d) {
2975 Bc.encode(e, d.keys)
2976 },
2977 decode: (e) => ({ keys: Bc.decode(e) }),
2978 },
2979 Vc = e.frame(on),
2980 Oc = {
2981 preencode(d, o) {
2982 ;(e.fixed32.preencode(d, o.roomKey),
2983 e.buffer.preencode(d, o.encryptionKey),
2984 d.end++,
2985 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2986 o.initiator && n.preencode(d, o.initiator),
2987 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2988 o.keyPair && t.preencode(d, o.keyPair),
2989 o.genesis && Vc.preencode(d, o.genesis))
2990 },
2991 encode(d, o) {
2992 const c =
2993 (o.fastForwardTo ? 1 : 0) |
2994 (o.initiator ? 2 : 0) |
2995 (o.mailbox ? 4 : 0) |
2996 (o.keyPair ? 8 : 0) |
2997 (o.genesis ? 16 : 0) |
2998 (o.isPrivateProfile ? 32 : 0)
2999 ;(e.fixed32.encode(d, o.roomKey),
3000 e.buffer.encode(d, o.encryptionKey),
3001 e.uint.encode(d, c),
3002 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3003 o.initiator && n.encode(d, o.initiator),
3004 o.mailbox && e.fixed32.encode(d, o.mailbox),
3005 o.keyPair && t.encode(d, o.keyPair),
3006 o.genesis && Vc.encode(d, o.genesis))
3007 },
3008 decode(d) {
3009 const o = e.fixed32.decode(d),
3010 c = e.buffer.decode(d),
3011 r = e.uint.decode(d)
3012 return {
3013 roomKey: o,
3014 encryptionKey: c,
3015 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3016 initiator: 2 & r ? n.decode(d) : null,
3017 mailbox: 4 & r ? e.fixed32.decode(d) : null,
3018 keyPair: 8 & r ? t.decode(d) : null,
3019 genesis: 16 & r ? Vc.decode(d) : null,
3020 isPrivateProfile: !!(32 & r),
3021 }
3022 },
3023 },
3024 Nc = {
3025 preencode(d, o) {
3026 ;(e.fixed32.preencode(d, o.roomKey), d.end++)
3027 },
3028 encode(d, o) {
3029 const n = o.isGossiped ? 1 : 0
3030 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, n))
3031 },
3032 decode: (d) => ({ roomKey: e.fixed32.decode(d), isGossiped: !!(1 & e.uint.decode(d)) }),
3033 },
3034 Uc = {
3035 preencode(d, o) {
3036 e.fixed32.preencode(d, o.roomKey)
3037 },
3038 encode(d, o) {
3039 e.fixed32.encode(d, o.roomKey)
3040 },
3041 decode: (d) => ({ roomKey: e.fixed32.decode(d) }),
3042 },
3043 Jc = {
3044 preencode(d, o) {
3045 ;(e.string.preencode(d, o.mnemonic),
3046 d.end++,
3047 o.profileDiscoveryTimeout && e.uint.preencode(d, o.profileDiscoveryTimeout))
3048 },
3049 encode(d, o) {
3050 const n = (o.profileDiscoveryTimeout ? 1 : 0) | (o.recover ? 2 : 0)
3051 ;(e.string.encode(d, o.mnemonic),
3052 e.uint.encode(d, n),
3053 o.profileDiscoveryTimeout && e.uint.encode(d, o.profileDiscoveryTimeout))
3054 },
3055 decode(d) {
3056 const o = e.string.decode(d),
3057 n = e.uint.decode(d)
3058 return {
3059 mnemonic: o,
3060 profileDiscoveryTimeout: 1 & n ? e.uint.decode(d) : 0,
3061 recover: !!(2 & n),
3062 }
3063 },
3064 },
3065 Wc = {
3066 preencode(d, n) {
3067 ;(e.fixed32.preencode(d, n.roomKey),
3068 e.fixed32.preencode(d, n.memberKey),
3069 d.end++,
3070 n.message && e.string.preencode(d, n.message),
3071 o >= 6 && n.contactInfo && Za.preencode(d, n.contactInfo))
3072 },
3073 encode(d, n) {
3074 const c = (n.message ? 1 : 0) | (o >= 6 && n.contactInfo ? 2 : 0)
3075 ;(e.fixed32.encode(d, n.roomKey),
3076 e.fixed32.encode(d, n.memberKey),
3077 e.uint.encode(d, c),
3078 n.message && e.string.encode(d, n.message),
3079 o >= 6 && n.contactInfo && Za.encode(d, n.contactInfo))
3080 },
3081 decode(d) {
3082 const n = e.fixed32.decode(d),
3083 c = e.fixed32.decode(d),
3084 r = e.uint.decode(d)
3085 return {
3086 roomKey: n,
3087 memberKey: c,
3088 message: 1 & r ? e.string.decode(d) : null,
3089 contactInfo: o >= 6 && 2 & r ? Za.decode(d) : null,
3090 }
3091 },
3092 },
3093 zc = {
3094 preencode(d, o) {
3095 ;(e.fixed32.preencode(d, o.key), d.end++)
3096 },
3097 encode(d, o) {
3098 const n = o.isPrivateProfile ? 1 : 0
3099 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, n))
3100 },
3101 decode: (d) => ({ key: e.fixed32.decode(d), isPrivateProfile: !!(1 & e.uint.decode(d)) }),
3102 },
3103 Hc = e.frame(Jc),
3104 Gc = e.frame(Oc),
3105 Qc = e.frame(Nc),
3106 Xc = e.frame(Uc),
3107 Yc = e.frame(jc),
3108 Zc = e.frame(Ec),
3109 $c = e.frame(Lc),
3110 _c = e.frame(Wc),
3111 er = e.frame(zc),
3112 dr = {
3113 preencode(d, o) {
3114 const n =
3115 (o.restoreIdentity ? 1 : 0) |
3116 (o.createRoom ? 2 : 0) |
3117 (o.leaveRoom ? 4 : 0) |
3118 (o.clearRoom ? 8 : 0) |
3119 (o.joinRoomInvitation ? 16 : 0) |
3120 (o.joinRoomKeys ? 32 : 0) |
3121 (o.joinRoomResponse ? 64 : 0) |
3122 (o.sendContactRequest ? 128 : 0) |
3123 (o.migrateV2Room ? 256 : 0)
3124 ;(e.fixed32.preencode(d, o.discoveryKey),
3125 e.uint.preencode(d, o.priority),
3126 e.uint.preencode(d, o.timestamp),
3127 e.uint.preencode(d, o.type),
3128 e.uint.preencode(d, n),
3129 o.restoreIdentity && Hc.preencode(d, o.restoreIdentity),
3130 o.createRoom && Gc.preencode(d, o.createRoom),
3131 o.leaveRoom && Qc.preencode(d, o.leaveRoom),
3132 o.clearRoom && Xc.preencode(d, o.clearRoom),
3133 o.joinRoomInvitation && Yc.preencode(d, o.joinRoomInvitation),
3134 o.joinRoomKeys && Zc.preencode(d, o.joinRoomKeys),
3135 o.joinRoomResponse && $c.preencode(d, o.joinRoomResponse),
3136 o.sendContactRequest && _c.preencode(d, o.sendContactRequest),
3137 o.migrateV2Room && er.preencode(d, o.migrateV2Room))
3138 },
3139 encode(d, o) {
3140 const n =
3141 (o.restoreIdentity ? 1 : 0) |
3142 (o.createRoom ? 2 : 0) |
3143 (o.leaveRoom ? 4 : 0) |
3144 (o.clearRoom ? 8 : 0) |
3145 (o.joinRoomInvitation ? 16 : 0) |
3146 (o.joinRoomKeys ? 32 : 0) |
3147 (o.joinRoomResponse ? 64 : 0) |
3148 (o.sendContactRequest ? 128 : 0) |
3149 (o.migrateV2Room ? 256 : 0)
3150 ;(e.fixed32.encode(d, o.discoveryKey),
3151 e.uint.encode(d, o.priority),
3152 e.uint.encode(d, o.timestamp),
3153 e.uint.encode(d, o.type),
3154 e.uint.encode(d, n),
3155 o.restoreIdentity && Hc.encode(d, o.restoreIdentity),
3156 o.createRoom && Gc.encode(d, o.createRoom),
3157 o.leaveRoom && Qc.encode(d, o.leaveRoom),
3158 o.clearRoom && Xc.encode(d, o.clearRoom),
3159 o.joinRoomInvitation && Yc.encode(d, o.joinRoomInvitation),
3160 o.joinRoomKeys && Zc.encode(d, o.joinRoomKeys),
3161 o.joinRoomResponse && $c.encode(d, o.joinRoomResponse),
3162 o.sendContactRequest && _c.encode(d, o.sendContactRequest),
3163 o.migrateV2Room && er.encode(d, o.migrateV2Room))
3164 },
3165 decode(d) {
3166 const o = e.fixed32.decode(d),
3167 n = e.uint.decode(d),
3168 c = e.uint.decode(d),
3169 r = e.uint.decode(d),
3170 t = e.uint.decode(d)
3171 return {
3172 discoveryKey: o,
3173 priority: n,
3174 timestamp: c,
3175 type: r,
3176 restoreIdentity: 1 & t ? Hc.decode(d) : null,
3177 createRoom: 2 & t ? Gc.decode(d) : null,
3178 leaveRoom: 4 & t ? Qc.decode(d) : null,
3179 clearRoom: 8 & t ? Xc.decode(d) : null,
3180 joinRoomInvitation: 16 & t ? Yc.decode(d) : null,
3181 joinRoomKeys: 32 & t ? Zc.decode(d) : null,
3182 joinRoomResponse: 64 & t ? $c.decode(d) : null,
3183 sendContactRequest: 128 & t ? _c.decode(d) : null,
3184 migrateV2Room: 256 & t ? er.decode(d) : null,
3185 }
3186 },
3187 },
3188 or = Be,
3189 nr = {
3190 preencode(d, o) {
3191 ;(e.buffer.preencode(d, o.seed), or.preencode(d, o.invitation))
3192 },
3193 encode(d, o) {
3194 ;(e.buffer.encode(d, o.seed), or.encode(d, o.invitation))
3195 },
3196 decode: (d) => ({ seed: e.buffer.decode(d), invitation: or.decode(d) }),
3197 },
3198 cr = {
3199 preencode(e, d) {
3200 e.end++
3201 },
3202 encode(d, n) {
3203 const c =
3204 (n.isWritable ? 1 : 0) |
3205 (n.isReadable ? 2 : 0) |
3206 (n.isPrivateProfile ? 4 : 0) |
3207 (o >= 8 && n.isRemoved ? 8 : 0)
3208 e.uint.encode(d, c)
3209 },
3210 decode(d) {
3211 const n = e.uint.decode(d)
3212 return {
3213 isWritable: !!(1 & n),
3214 isReadable: !!(2 & n),
3215 isPrivateProfile: !!(4 & n),
3216 isRemoved: o >= 8 && !!(8 & n),
3217 }
3218 },
3219 },
3220 rr = {
3221 preencode(d, o) {
3222 ;(e.uint.preencode(d, o.creation),
3223 e.uint.preencode(d, o.latestSync),
3224 e.uint.preencode(d, o.latestChatMessage))
3225 },
3226 encode(d, o) {
3227 ;(e.uint.encode(d, o.creation),
3228 e.uint.encode(d, o.latestSync),
3229 e.uint.encode(d, o.latestChatMessage))
3230 },
3231 decode: (d) => ({
3232 creation: e.uint.decode(d),
3233 latestSync: e.uint.decode(d),
3234 latestChatMessage: e.uint.decode(d),
3235 }),
3236 },
3237 tr = Yo,
3238 ir = mo,
3239 ar = e.frame(rr),
3240 sr = kc,
3241 lr = e.frame(cr),
3242 pr = e.frame(ae),
3243 ur = e.frame(fd),
3244 fr = Jo,
3245 mr = _o,
3246 yr = e.frame(wo),
3247 br = Y,
3248 xr = e.frame(ld),
3249 vr = Sn,
3250 kr = {
3251 preencode(d, n) {
3252 const c =
3253 (n.selfDevice ? 1 : 0) |
3254 (n.selfMember ? 2 : 0) |
3255 (n.config ? 4 : 0) |
3256 (n.identity ? 8 : 0) |
3257 (n.lastMessage ? 16 : 0) |
3258 (n.dm ? 32 : 0) |
3259 (o >= 19 && n.readLengths ? 64 : 0) |
3260 (o >= 19 && n.lastMember ? 128 : 0) |
3261 (o >= 21 && n.version ? 256 : 0) |
3262 (o >= 27 && n.preferences ? 512 : 0) |
3263 (o >= 28 && n.activeCall ? 1024 : 0)
3264 ;(e.fixed32.preencode(d, n.roomKey),
3265 e.fixed32.preencode(d, n.discoveryKey),
3266 e.buffer.preencode(d, n.encryptionKey),
3267 tr.preencode(d, n.digest),
3268 ir.preencode(d, n.stats),
3269 ar.preencode(d, n.timestamps),
3270 e.uint.preencode(d, n.fork),
3271 e.uint.preencode(d, n.length),
3272 e.fixed32.preencode(d, n.seed),
3273 sr.preencode(d, n.capabilities),
3274 lr.preencode(d, n.status),
3275 e.uint.preencode(d, c),
3276 n.selfDevice && pr.preencode(d, n.selfDevice),
3277 n.selfMember && ur.preencode(d, n.selfMember),
3278 n.config && fr.preencode(d, n.config),
3279 n.identity && mr.preencode(d, n.identity),
3280 n.lastMessage && yr.preencode(d, n.lastMessage),
3281 n.dm && br.preencode(d, n.dm),
3282 o >= 19 && n.readLengths && $a.preencode(d, n.readLengths),
3283 o >= 19 && n.lastMember && xr.preencode(d, n.lastMember),
3284 o >= 21 && n.version && e.uint.preencode(d, n.version),
3285 o >= 27 && n.preferences && vr.preencode(d, n.preferences),
3286 o >= 28 && n.activeCall && _a.preencode(d, n.activeCall))
3287 },
3288 encode(d, n) {
3289 const c =
3290 (n.selfDevice ? 1 : 0) |
3291 (n.selfMember ? 2 : 0) |
3292 (n.config ? 4 : 0) |
3293 (n.identity ? 8 : 0) |
3294 (n.lastMessage ? 16 : 0) |
3295 (n.dm ? 32 : 0) |
3296 (o >= 19 && n.readLengths ? 64 : 0) |
3297 (o >= 19 && n.lastMember ? 128 : 0) |
3298 (o >= 21 && n.version ? 256 : 0) |
3299 (o >= 27 && n.preferences ? 512 : 0) |
3300 (o >= 28 && n.activeCall ? 1024 : 0)
3301 ;(e.fixed32.encode(d, n.roomKey),
3302 e.fixed32.encode(d, n.discoveryKey),
3303 e.buffer.encode(d, n.encryptionKey),
3304 tr.encode(d, n.digest),
3305 ir.encode(d, n.stats),
3306 ar.encode(d, n.timestamps),
3307 e.uint.encode(d, n.fork),
3308 e.uint.encode(d, n.length),
3309 e.fixed32.encode(d, n.seed),
3310 sr.encode(d, n.capabilities),
3311 lr.encode(d, n.status),
3312 e.uint.encode(d, c),
3313 n.selfDevice && pr.encode(d, n.selfDevice),
3314 n.selfMember && ur.encode(d, n.selfMember),
3315 n.config && fr.encode(d, n.config),
3316 n.identity && mr.encode(d, n.identity),
3317 n.lastMessage && yr.encode(d, n.lastMessage),
3318 n.dm && br.encode(d, n.dm),
3319 o >= 19 && n.readLengths && $a.encode(d, n.readLengths),
3320 o >= 19 && n.lastMember && xr.encode(d, n.lastMember),
3321 o >= 21 && n.version && e.uint.encode(d, n.version),
3322 o >= 27 && n.preferences && vr.encode(d, n.preferences),
3323 o >= 28 && n.activeCall && _a.encode(d, n.activeCall))
3324 },
3325 decode(d) {
3326 const n = e.fixed32.decode(d),
3327 c = e.fixed32.decode(d),
3328 r = e.buffer.decode(d),
3329 t = tr.decode(d),
3330 i = ir.decode(d),
3331 a = ar.decode(d),
3332 s = e.uint.decode(d),
3333 l = e.uint.decode(d),
3334 p = e.fixed32.decode(d),
3335 u = sr.decode(d),
3336 f = lr.decode(d),
3337 m = e.uint.decode(d)
3338 return {
3339 roomKey: n,
3340 discoveryKey: c,
3341 encryptionKey: r,
3342 digest: t,
3343 stats: i,
3344 timestamps: a,
3345 fork: s,
3346 length: l,
3347 seed: p,
3348 capabilities: u,
3349 status: f,
3350 selfDevice: 1 & m ? pr.decode(d) : null,
3351 selfMember: 2 & m ? ur.decode(d) : null,
3352 config: 4 & m ? fr.decode(d) : null,
3353 identity: 8 & m ? mr.decode(d) : null,
3354 lastMessage: 16 & m ? yr.decode(d) : null,
3355 dm: 32 & m ? br.decode(d) : null,
3356 readLengths: o >= 19 && 64 & m ? $a.decode(d) : null,
3357 lastMember: o >= 19 && 128 & m ? xr.decode(d) : null,
3358 version: o >= 21 && 256 & m ? e.uint.decode(d) : 0,
3359 preferences: o >= 27 && 512 & m ? vr.decode(d) : null,
3360 activeCall: o >= 28 && 1024 & m ? _a.decode(d) : null,
3361 }
3362 },
3363 },
3364 gr = Sn,
3365 Kr = {
3366 preencode(d, o) {
3367 ;(e.fixed32.preencode(d, o.roomKey), gr.preencode(d, o.status))
3368 },
3369 encode(d, o) {
3370 ;(e.fixed32.encode(d, o.roomKey), gr.encode(d, o.status))
3371 },
3372 decode: (d) => ({ roomKey: e.fixed32.decode(d), status: gr.decode(d) }),
3373 },
3374 hr = {
3375 preencode(d, o) {
3376 ;(e.fixed32.preencode(d, o.mailbox),
3377 e.fixed32.preencode(d, o.key),
3378 d.end++,
3379 o.roomKey && e.fixed32.preencode(d, o.roomKey),
3380 o.keyPair && t.preencode(d, o.keyPair),
3381 o.responseKeyPair && t.preencode(d, o.responseKeyPair))
3382 },
3383 encode(d, o) {
3384 const n = (o.roomKey ? 1 : 0) | (o.keyPair ? 2 : 0) | (o.responseKeyPair ? 4 : 0)
3385 ;(e.fixed32.encode(d, o.mailbox),
3386 e.fixed32.encode(d, o.key),
3387 e.uint.encode(d, n),
3388 o.roomKey && e.fixed32.encode(d, o.roomKey),
3389 o.keyPair && t.encode(d, o.keyPair),
3390 o.responseKeyPair && t.encode(d, o.responseKeyPair))
3391 },
3392 decode(d) {
3393 const o = e.fixed32.decode(d),
3394 n = e.fixed32.decode(d),
3395 c = e.uint.decode(d)
3396 return {
3397 mailbox: o,
3398 key: n,
3399 roomKey: 1 & c ? e.fixed32.decode(d) : null,
3400 keyPair: 2 & c ? t.decode(d) : null,
3401 responseKeyPair: 4 & c ? t.decode(d) : null,
3402 }
3403 },
3404 },
3405 wr = pe,
3406 Rr = {
3407 preencode(d, o) {
3408 ;(e.fixed32.preencode(d, o.key), wr.preencode(d, o.profile))
3409 },
3410 encode(d, o) {
3411 ;(e.fixed32.encode(d, o.key), wr.encode(d, o.profile))
3412 },
3413 decode: (d) => ({ key: e.fixed32.decode(d), profile: wr.decode(d) }),
3414 },
3415 Pr = pr,
3416 Tr = {
3417 preencode(d, o) {
3418 ;(e.fixed32.preencode(d, o.roomKey), Pr.preencode(d, o.device))
3419 },
3420 encode(d, o) {
3421 ;(e.fixed32.encode(d, o.roomKey), Pr.encode(d, o.device))
3422 },
3423 decode: (d) => ({ roomKey: e.fixed32.decode(d), device: Pr.decode(d) }),
3424 },
3425 Ar = K,
3426 Mr = {
3427 preencode(d, n) {
3428 ;(Ar.preencode(d, n.file),
3429 e.fixed32.preencode(d, n.roomKey),
3430 d.end++,
3431 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
3432 o >= 28 && n.lastAccessed && e.uint.preencode(d, n.lastAccessed),
3433 o >= 28 && n.version && e.uint.preencode(d, n.version))
3434 },
3435 encode(d, n) {
3436 const c =
3437 (n.encryptionKey ? 1 : 0) |
3438 (n.cleared ? 2 : 0) |
3439 (n.own ? 4 : 0) |
3440 (o >= 28 && n.lastAccessed ? 8 : 0) |
3441 (o >= 28 && n.version ? 16 : 0)
3442 ;(Ar.encode(d, n.file),
3443 e.fixed32.encode(d, n.roomKey),
3444 e.uint.encode(d, c),
3445 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
3446 o >= 28 && n.lastAccessed && e.uint.encode(d, n.lastAccessed),
3447 o >= 28 && n.version && e.uint.encode(d, n.version))
3448 },
3449 decode(d) {
3450 const n = Ar.decode(d),
3451 c = e.fixed32.decode(d),
3452 r = e.uint.decode(d)
3453 return {
3454 file: n,
3455 roomKey: c,
3456 encryptionKey: 1 & r ? e.buffer.decode(d) : null,
3457 cleared: !!(2 & r),
3458 own: !!(4 & r),
3459 lastAccessed: o >= 28 && 8 & r ? e.uint.decode(d) : 0,
3460 version: o >= 28 && 16 & r ? e.uint.decode(d) : 0,
3461 }
3462 },
3463 },
3464 Dr = _,
3465 Cr = {
3466 preencode(d, n) {
3467 ;(Dr.preencode(d, n.header),
3468 c.preencode(d, n.oplog),
3469 e.uint.preencode(d, n.index),
3470 es.preencode(d, n.preview),
3471 d.end++,
3472 o >= 12 && n.displayType && Qr.preencode(d, n.displayType))
3473 },
3474 encode(d, n) {
3475 const r = o >= 12 && n.displayType ? 1 : 0
3476 ;(Dr.encode(d, n.header),
3477 c.encode(d, n.oplog),
3478 e.uint.encode(d, n.index),
3479 es.encode(d, n.preview),
3480 e.uint.encode(d, r),
3481 o >= 12 && n.displayType && Qr.encode(d, n.displayType))
3482 },
3483 decode(d) {
3484 const n = Dr.decode(d),
3485 r = c.decode(d),
3486 t = e.uint.decode(d),
3487 i = es.decode(d),
3488 a = d.start < d.end ? e.uint.decode(d) : 0
3489 return {
3490 header: n,
3491 oplog: r,
3492 index: t,
3493 preview: i,
3494 displayType: o >= 12 && 1 & a ? Qr.decode(d) : 0,
3495 }
3496 },
3497 },
3498 Sr = {
3499 preencode(d, n) {
3500 ;(d.end++, o >= 4 && n.memberKey && e.fixed32.preencode(d, n.memberKey))
3501 },
3502 encode(d, n) {
3503 const c = o >= 4 && n.memberKey ? 1 : 0
3504 ;(e.uint.encode(d, c), o >= 4 && n.memberKey && e.fixed32.encode(d, n.memberKey))
3505 },
3506 decode(d) {
3507 const n = e.uint.decode(d)
3508 return { memberKey: o >= 4 && 1 & n ? e.fixed32.decode(d) : null }
3509 },
3510 },
3511 Ir = pe,
3512 jr = {
3513 preencode(e, d) {
3514 ;(Ir.preencode(e, d.profile), ce.preencode(e, d.attestation))
3515 },
3516 encode(e, d) {
3517 ;(Ir.encode(e, d.profile), ce.encode(e, d.attestation))
3518 },
3519 decode: (e) => ({ profile: Ir.decode(e), attestation: ce.decode(e) }),
3520 },
3521 Lr = _,
3522 Fr = {
3523 preencode(d, o) {
3524 ;(Lr.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3525 },
3526 encode(d, o) {
3527 ;(Lr.encode(d, o.header), e.fixed32.encode(d, o.key))
3528 },
3529 decode: (d) => ({ header: Lr.decode(d), key: e.fixed32.decode(d) }),
3530 },
3531 qr = {
3532 preencode(d, o) {
3533 ;(e.fixed32.preencode(d, o.deviceKey),
3534 ce.preencode(d, o.privateProfileIdentity),
3535 e.buffer.preencode(d, o.deviceProof))
3536 },
3537 encode(d, o) {
3538 ;(e.fixed32.encode(d, o.deviceKey),
3539 ce.encode(d, o.privateProfileIdentity),
3540 e.buffer.encode(d, o.deviceProof))
3541 },
3542 decode: (d) => ({
3543 deviceKey: e.fixed32.decode(d),
3544 privateProfileIdentity: ce.decode(d),
3545 deviceProof: e.buffer.decode(d),
3546 }),
3547 },
3548 Br = {
3549 preencode(d, n) {
3550 ;(e.fixed32.preencode(d, n.roomKey),
3551 e.fixed32.preencode(d, n.encryptionKey),
3552 e.fixed32.preencode(d, n.seed),
3553 d.end++,
3554 o >= 9 && n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo))
3555 },
3556 encode(d, n) {
3557 const c = o >= 9 && n.fastForwardTo ? 1 : 0
3558 ;(e.fixed32.encode(d, n.roomKey),
3559 e.fixed32.encode(d, n.encryptionKey),
3560 e.fixed32.encode(d, n.seed),
3561 e.uint.encode(d, c),
3562 o >= 9 && n.fastForwardTo && e.fixed32.encode(d, n.fastForwardTo))
3563 },
3564 decode(d) {
3565 const n = e.fixed32.decode(d),
3566 c = e.fixed32.decode(d),
3567 r = e.fixed32.decode(d),
3568 t = e.uint.decode(d)
3569 return {
3570 roomKey: n,
3571 encryptionKey: c,
3572 seed: r,
3573 fastForwardTo: o >= 9 && 1 & t ? e.fixed32.decode(d) : null,
3574 }
3575 },
3576 },
3577 Er = {
3578 preencode(d, n) {
3579 ;(e.fixed32.preencode(d, n.publicKey),
3580 e.fixed32.preencode(d, n.writerKey),
3581 e.fixed32.preencode(d, n.devicePublicKey),
3582 d.end++,
3583 o >= 9 && n.privateProfileKey && e.fixed32.preencode(d, n.privateProfileKey))
3584 },
3585 encode(d, n) {
3586 const c = o >= 9 && n.privateProfileKey ? 1 : 0
3587 ;(e.fixed32.encode(d, n.publicKey),
3588 e.fixed32.encode(d, n.writerKey),
3589 e.fixed32.encode(d, n.devicePublicKey),
3590 e.uint.encode(d, c),
3591 o >= 9 && n.privateProfileKey && e.fixed32.encode(d, n.privateProfileKey))
3592 },
3593 decode(d) {
3594 const n = e.fixed32.decode(d),
3595 c = e.fixed32.decode(d),
3596 r = e.fixed32.decode(d),
3597 t = e.uint.decode(d)
3598 return {
3599 publicKey: n,
3600 writerKey: c,
3601 devicePublicKey: r,
3602 privateProfileKey: o >= 9 && 1 & t ? e.fixed32.decode(d) : null,
3603 }
3604 },
3605 },
3606 Vr = _,
3607 Or = {
3608 preencode(d, o) {
3609 ;(Vr.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
3610 },
3611 encode(d, o) {
3612 ;(Vr.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
3613 },
3614 decode: (d) => ({ header: Vr.decode(d), memberKey: e.fixed32.decode(d) }),
3615 },
3616 Nr = {
3617 preencode(d, o) {
3618 e.fixed32.preencode(d, o.privateProfileKey)
3619 },
3620 encode(d, o) {
3621 e.fixed32.encode(d, o.privateProfileKey)
3622 },
3623 decode: (d) => ({ privateProfileKey: e.fixed32.decode(d) }),
3624 },
3625 Ur = {
3626 preencode(d, o) {
3627 ;(e.fixed32.preencode(d, o.key), e.fixed32.preencode(d, o.responsePublicKey))
3628 },
3629 encode(d, o) {
3630 ;(e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.responsePublicKey))
3631 },
3632 decode: (d) => ({ key: e.fixed32.decode(d), responsePublicKey: e.fixed32.decode(d) }),
3633 },
3634 Jr = {
3635 preencode(d, n) {
3636 ;(e.fixed32.preencode(d, n.roomKey),
3637 d.end++,
3638 o >= 10 && n.repairs && e.uint.preencode(d, n.repairs))
3639 },
3640 encode(d, n) {
3641 const c = o >= 10 && n.repairs ? 1 : 0
3642 ;(e.fixed32.encode(d, n.roomKey),
3643 e.uint.encode(d, c),
3644 o >= 10 && n.repairs && e.uint.encode(d, n.repairs))
3645 },
3646 decode(d) {
3647 const n = e.fixed32.decode(d),
3648 c = e.uint.decode(d)
3649 return { roomKey: n, repairs: o >= 10 && 1 & c ? e.uint.decode(d) : 0 }
3650 },
3651 },
3652 Wr = {
3653 preencode(d, n) {
3654 ;(d.end++,
3655 o >= 11 && n.key && e.string.preencode(d, n.key),
3656 o >= 11 && n.description && e.string.preencode(d, n.description))
3657 },
3658 encode(d, n) {
3659 const c =
3660 (o >= 11 && n.key ? 1 : 0) |
3661 (o >= 11 && n.value ? 2 : 0) |
3662 (o >= 11 && n.description ? 4 : 0)
3663 ;(e.uint.encode(d, c),
3664 o >= 11 && n.key && e.string.encode(d, n.key),
3665 o >= 11 && n.description && e.string.encode(d, n.description))
3666 },
3667 decode(d) {
3668 const n = e.uint.decode(d)
3669 return {
3670 key: o >= 11 && 1 & n ? e.string.decode(d) : null,
3671 value: o >= 11 && !!(2 & n),
3672 description: o >= 11 && 4 & n ? e.string.decode(d) : null,
3673 }
3674 },
3675 },
3676 zr = e.array(e.frame(Wr)),
3677 Hr = {
3678 preencode(e, d) {
3679 ;(e.end++, o >= 11 && d.flags && zr.preencode(e, d.flags))
3680 },
3681 encode(d, n) {
3682 const c = o >= 11 && n.flags ? 1 : 0
3683 ;(e.uint.encode(d, c), o >= 11 && n.flags && zr.encode(d, n.flags))
3684 },
3685 decode(d) {
3686 const n = e.uint.decode(d)
3687 return { flags: o >= 11 && 1 & n ? zr.decode(d) : null }
3688 },
3689 },
3690 Gr = { HttpLink: 1, PearLink: 2 },
3691 Qr = {
3692 preencode(e, d) {
3693 e.end++
3694 },
3695 encode(d, o) {
3696 if (o > 2) throw new Error("Unknown enum")
3697 e.uint.encode(d, o)
3698 },
3699 decode: (d) => e.uint.decode(d),
3700 },
3701 Xr = _,
3702 Yr = {
3703 preencode(d, o) {
3704 ;(Xr.preencode(d, o.header), e.uint.preencode(d, o.value))
3705 },
3706 encode(d, o) {
3707 ;(Xr.encode(d, o.header), e.uint.encode(d, o.value))
3708 },
3709 decode: (d) => ({ header: Xr.decode(d), value: e.uint.decode(d) }),
3710 },
3711 Zr = {
3712 preencode(d, o) {
3713 ;(e.uint.preencode(d, o.key), e.uint.preencode(d, o.value))
3714 },
3715 encode(d, o) {
3716 ;(e.uint.encode(d, o.key), e.uint.encode(d, o.value))
3717 },
3718 decode: (d) => ({ key: e.uint.decode(d), value: e.uint.decode(d) }),
3719 },
3720 $r = _,
3721 _r = {
3722 preencode(d, n) {
3723 ;($r.preencode(d, n.header),
3724 e.uint.preencode(d, n.from),
3725 e.uint.preencode(d, n.to),
3726 d.end++,
3727 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
3728 },
3729 encode(d, n) {
3730 const c = o >= 29 && n.buildType ? 1 : 0
3731 ;($r.encode(d, n.header),
3732 e.uint.encode(d, n.from),
3733 e.uint.encode(d, n.to),
3734 e.uint.encode(d, c),
3735 o >= 29 && n.buildType && vi.encode(d, n.buildType))
3736 },
3737 decode(d) {
3738 const n = $r.decode(d),
3739 c = e.uint.decode(d),
3740 r = e.uint.decode(d),
3741 t = d.start < d.end ? e.uint.decode(d) : 0
3742 return { header: n, from: c, to: r, buildType: o >= 29 && 1 & t ? vi.decode(d) : null }
3743 },
3744 },
3745 et = {
3746 RoomType: 1,
3747 IsExperimental: 2,
3748 IsJoiningDisabled: 3,
3749 IsAppendingDisabled: 4,
3750 IsCallingDisabled: 5,
3751 IsMembershipEventsDisabled: 6,
3752 IsAttachmentsDisabled: 7,
3753 IsLinksDisabled: 8,
3754 },
3755 dt = {
3756 preencode(e, d) {
3757 e.end++
3758 },
3759 encode(d, o) {
3760 if (o > 8) throw new Error("Unknown enum")
3761 e.uint.encode(d, o)
3762 },
3763 decode: (d) => e.uint.decode(d),
3764 },
3765 ot = Ge,
3766 nt = {
3767 preencode(d, n) {
3768 ;(d.end++,
3769 o >= 16 && n.nodes && ot.preencode(d, n.nodes),
3770 o >= 24 && n.concurrency && e.uint.preencode(d, n.concurrency),
3771 o >= 24 && n.maxWindow && e.uint.preencode(d, n.maxWindow),
3772 o >= 24 && n.randomPunchInterval && e.uint.preencode(d, n.randomPunchInterval),
3773 o >= 24 && n.connectionKeepAlive && e.uint.preencode(d, n.connectionKeepAlive))
3774 },
3775 encode(d, n) {
3776 const c =
3777 (o >= 16 && n.nodes ? 1 : 0) |
3778 (o >= 24 && n.concurrency ? 2 : 0) |
3779 (o >= 24 && n.maxWindow ? 4 : 0) |
3780 (o >= 24 && n.randomPunchInterval ? 8 : 0) |
3781 (o >= 24 && n.connectionKeepAlive ? 16 : 0)
3782 ;(e.uint.encode(d, c),
3783 o >= 16 && n.nodes && ot.encode(d, n.nodes),
3784 o >= 24 && n.concurrency && e.uint.encode(d, n.concurrency),
3785 o >= 24 && n.maxWindow && e.uint.encode(d, n.maxWindow),
3786 o >= 24 && n.randomPunchInterval && e.uint.encode(d, n.randomPunchInterval),
3787 o >= 24 && n.connectionKeepAlive && e.uint.encode(d, n.connectionKeepAlive))
3788 },
3789 decode(d) {
3790 const n = e.uint.decode(d)
3791 return {
3792 nodes: o >= 16 && 1 & n ? ot.decode(d) : null,
3793 concurrency: o >= 24 && 2 & n ? e.uint.decode(d) : 0,
3794 maxWindow: o >= 24 && 4 & n ? e.uint.decode(d) : 0,
3795 randomPunchInterval: o >= 24 && 8 & n ? e.uint.decode(d) : 0,
3796 connectionKeepAlive: o >= 24 && 16 & n ? e.uint.decode(d) : 0,
3797 }
3798 },
3799 },
3800 ct = { en: "en", it: "it", ru: "ru", es: "es", de: "de" },
3801 rt = {
3802 preencode(e, d) {
3803 e.end++
3804 },
3805 encode(d, o) {
3806 switch (o) {
3807 case "en":
3808 e.uint.encode(d, 1)
3809 break
3810 case "it":
3811 e.uint.encode(d, 2)
3812 break
3813 case "ru":
3814 e.uint.encode(d, 3)
3815 break
3816 case "es":
3817 e.uint.encode(d, 4)
3818 break
3819 case "de":
3820 e.uint.encode(d, 5)
3821 break
3822 default:
3823 throw new Error("Unknown enum")
3824 }
3825 },
3826 decode(d) {
3827 switch (e.uint.decode(d)) {
3828 case 1:
3829 return "en"
3830 case 2:
3831 return "it"
3832 case 3:
3833 return "ru"
3834 case 4:
3835 return "es"
3836 case 5:
3837 return "de"
3838 default:
3839 return null
3840 }
3841 },
3842 },
3843 tt = Fd,
3844 it = {
3845 preencode(d, o) {
3846 ;(tt.preencode(d, o.range), rt.preencode(d, o.language), e.string.preencode(d, o.text))
3847 },
3848 encode(d, o) {
3849 ;(tt.encode(d, o.range), rt.encode(d, o.language), e.string.encode(d, o.text))
3850 },
3851 decode: (d) => ({ range: tt.decode(d), language: rt.decode(d), text: e.string.decode(d) }),
3852 },
3853 at = {
3854 preencode(d, o) {
3855 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.count))
3856 },
3857 encode(d, o) {
3858 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.count))
3859 },
3860 decode: (d) => ({ roomKey: e.fixed32.decode(d), count: e.uint.decode(d) }),
3861 },
3862 st = {
3863 preencode(d, o) {
3864 ;(e.fixed32.preencode(d, o.deviceKey), e.fixed32.preencode(d, o.key))
3865 },
3866 encode(d, o) {
3867 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.key))
3868 },
3869 decode: (d) => ({ deviceKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
3870 },
3871 lt = _,
3872 pt = {
3873 preencode(d, o) {
3874 ;(lt.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3875 },
3876 encode(d, o) {
3877 ;(lt.encode(d, o.header), e.fixed32.encode(d, o.key))
3878 },
3879 decode: (d) => ({ header: lt.decode(d), key: e.fixed32.decode(d) }),
3880 },
3881 ut = _,
3882 ft = {
3883 preencode(d, o) {
3884 ;(ut.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3885 },
3886 encode(d, o) {
3887 ;(ut.encode(d, o.header), e.fixed32.encode(d, o.key))
3888 },
3889 decode: (d) => ({ header: ut.decode(d), key: e.fixed32.decode(d) }),
3890 },
3891 mt = { Flag: 1 },
3892 yt = {
3893 preencode(e, d) {
3894 e.end++
3895 },
3896 encode(d, o) {
3897 if (o > 1) throw new Error("Unknown enum")
3898 e.uint.encode(d, o)
3899 },
3900 decode: (d) => e.uint.decode(d),
3901 },
3902 bt = {
3903 preencode(d, o) {
3904 ;(fo.preencode(d, o.id),
3905 e.fixed32.preencode(d, o.sender),
3906 e.uint.preencode(d, o.clock),
3907 yt.preencode(d, o.label))
3908 },
3909 encode(d, o) {
3910 ;(fo.encode(d, o.id),
3911 e.fixed32.encode(d, o.sender),
3912 e.uint.encode(d, o.clock),
3913 yt.encode(d, o.label))
3914 },
3915 decode: (d) => ({
3916 id: fo.decode(d),
3917 sender: e.fixed32.decode(d),
3918 clock: e.uint.decode(d),
3919 label: yt.decode(d),
3920 }),
3921 },
3922 xt = _,
3923 vt = {
3924 preencode(e, d) {
3925 ;(xt.preencode(e, d.header), c.preencode(e, d.oplog), yt.preencode(e, d.label))
3926 },
3927 encode(e, d) {
3928 ;(xt.encode(e, d.header), c.encode(e, d.oplog), yt.encode(e, d.label))
3929 },
3930 decode: (e) => ({ header: xt.decode(e), oplog: c.decode(e), label: yt.decode(e) }),
3931 },
3932 kt = _,
3933 gt = {
3934 preencode(e, d) {
3935 ;(kt.preencode(e, d.header), c.preencode(e, d.oplog), yt.preencode(e, d.label))
3936 },
3937 encode(e, d) {
3938 ;(kt.encode(e, d.header), c.encode(e, d.oplog), yt.encode(e, d.label))
3939 },
3940 decode: (e) => ({ header: kt.decode(e), oplog: c.decode(e), label: yt.decode(e) }),
3941 },
3942 Kt = {
3943 preencode(d, o) {
3944 ;(yt.preencode(d, o.label), e.uint.preencode(d, o.count))
3945 },
3946 encode(d, o) {
3947 ;(yt.encode(d, o.label), e.uint.encode(d, o.count))
3948 },
3949 decode: (d) => ({ label: yt.decode(d), count: e.uint.decode(d) }),
3950 },
3951 ht = e.array(e.frame(Kt)),
3952 wt = {
3953 preencode(d, n) {
3954 ;(fo.preencode(d, n.id),
3955 e.uint.preencode(d, n.total),
3956 ht.preencode(d, n.labels),
3957 e.uint.preencode(d, n.editedAt),
3958 d.end++,
3959 o >= 24 && n.flagsClock && e.uint.preencode(d, n.flagsClock),
3960 o >= 24 && n.version && e.uint.preencode(d, n.version))
3961 },
3962 encode(d, n) {
3963 const c =
3964 (o >= 24 && n.flagsClock ? 1 : 0) |
3965 (o >= 24 && n.version ? 2 : 0) |
3966 (o >= 25 && n.isDeleted ? 4 : 0)
3967 ;(fo.encode(d, n.id),
3968 e.uint.encode(d, n.total),
3969 ht.encode(d, n.labels),
3970 e.uint.encode(d, n.editedAt),
3971 e.uint.encode(d, c),
3972 o >= 24 && n.flagsClock && e.uint.encode(d, n.flagsClock),
3973 o >= 24 && n.version && e.uint.encode(d, n.version))
3974 },
3975 decode(d) {
3976 const n = fo.decode(d),
3977 c = e.uint.decode(d),
3978 r = ht.decode(d),
3979 t = e.uint.decode(d),
3980 i = d.start < d.end ? e.uint.decode(d) : 0
3981 return {
3982 id: n,
3983 total: c,
3984 labels: r,
3985 editedAt: t,
3986 flagsClock: o >= 24 && 1 & i ? e.uint.decode(d) : 0,
3987 version: o >= 24 && 2 & i ? e.uint.decode(d) : 0,
3988 isDeleted: o >= 25 && !!(4 & i),
3989 }
3990 },
3991 },
3992 Rt = _,
3993 Pt = {
3994 preencode(d, o) {
3995 ;(Rt.preencode(d, o.header), e.uint.preencode(d, o.length))
3996 },
3997 encode(d, o) {
3998 ;(Rt.encode(d, o.header), e.uint.encode(d, o.length))
3999 },
4000 decode: (d) => ({ header: Rt.decode(d), length: e.uint.decode(d) }),
4001 },
4002 Tt = {
4003 preencode(d, o) {
4004 ;(e.fixed32.preencode(d, o.memberKey), e.uint.preencode(d, o.length))
4005 },
4006 encode(d, o) {
4007 ;(e.fixed32.encode(d, o.memberKey), e.uint.encode(d, o.length))
4008 },
4009 decode: (d) => ({ memberKey: e.fixed32.decode(d), length: e.uint.decode(d) }),
4010 },
4011 At = $,
4012 Mt = {
4013 preencode(e, d) {
4014 e.end++
4015 },
4016 encode(d, n) {
4017 const c = o >= 19 && n.disableReadReceipts ? 1 : 0
4018 e.uint.encode(d, c)
4019 },
4020 decode(d) {
4021 const n = e.uint.decode(d)
4022 return { disableReadReceipts: o >= 19 && !!(1 & n) }
4023 },
4024 },
4025 Dt = { disableReadReceipts: "disableReadReceipts" },
4026 Ct = {
4027 preencode(e, d) {
4028 e.end++
4029 },
4030 encode(d, o) {
4031 if ("disableReadReceipts" !== o) throw new Error("Unknown enum")
4032 e.uint.encode(d, 1)
4033 },
4034 decode: (d) => (1 === e.uint.decode(d) ? "disableReadReceipts" : null),
4035 },
4036 St = _,
4037 It = e.frame(Mt),
4038 jt = {
4039 preencode(e, d) {
4040 ;(St.preencode(e, d.header), Ct.preencode(e, d.key), It.preencode(e, d.settings))
4041 },
4042 encode(e, d) {
4043 ;(St.encode(e, d.header), Ct.encode(e, d.key), It.encode(e, d.settings))
4044 },
4045 decode: (e) => ({ header: St.decode(e), key: Ct.decode(e), settings: It.decode(e) }),
4046 },
4047 Lt = {
4048 preencode(d, n) {
4049 ;(d.end++,
4050 o >= 20 && n.roomKey && e.fixed32.preencode(d, n.roomKey),
4051 o >= 23 && n.coreKey && e.fixed32.preencode(d, n.coreKey))
4052 },
4053 encode(d, n) {
4054 const c = (o >= 20 && n.roomKey ? 1 : 0) | (o >= 23 && n.coreKey ? 2 : 0)
4055 ;(e.uint.encode(d, c),
4056 o >= 20 && n.roomKey && e.fixed32.encode(d, n.roomKey),
4057 o >= 23 && n.coreKey && e.fixed32.encode(d, n.coreKey))
4058 },
4059 decode(d) {
4060 const n = e.uint.decode(d)
4061 return {
4062 roomKey: o >= 20 && 1 & n ? e.fixed32.decode(d) : null,
4063 coreKey: o >= 23 && 2 & n ? e.fixed32.decode(d) : null,
4064 }
4065 },
4066 },
4067 Ft = e.frame(Lt),
4068 qt = {
4069 preencode(d, n) {
4070 ;(e.string.preencode(d, n.code),
4071 e.string.preencode(d, n.message),
4072 e.string.preencode(d, n.stack),
4073 e.uint.preencode(d, n.timestamp),
4074 d.end++,
4075 o >= 20 && n.details && Ft.preencode(d, n.details))
4076 },
4077 encode(d, n) {
4078 const c = o >= 20 && n.details ? 1 : 0
4079 ;(e.string.encode(d, n.code),
4080 e.string.encode(d, n.message),
4081 e.string.encode(d, n.stack),
4082 e.uint.encode(d, n.timestamp),
4083 e.uint.encode(d, c),
4084 o >= 20 && n.details && Ft.encode(d, n.details))
4085 },
4086 decode(d) {
4087 const n = e.string.decode(d),
4088 c = e.string.decode(d),
4089 r = e.string.decode(d),
4090 t = e.uint.decode(d),
4091 i = e.uint.decode(d)
4092 return {
4093 code: n,
4094 message: c,
4095 stack: r,
4096 timestamp: t,
4097 details: o >= 20 && 1 & i ? Ft.decode(d) : null,
4098 }
4099 },
4100 },
4101 Bt = { RESUME: 1, WAKEUP: 2, PRESUSPEND: 3, SUSPEND: 4 },
4102 Et = {
4103 preencode(e, d) {
4104 e.end++
4105 },
4106 encode(d, o) {
4107 if (o > 4) throw new Error("Unknown enum")
4108 e.uint.encode(d, o)
4109 },
4110 decode: (d) => e.uint.decode(d),
4111 },
4112 Vt = {
4113 preencode(d, o) {
4114 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.total))
4115 },
4116 encode(d, o) {
4117 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.total))
4118 },
4119 decode: (d) => ({ roomKey: e.fixed32.decode(d), total: e.uint.decode(d) }),
4120 },
4121 Ot = { Flag: 1 },
4122 Nt = {
4123 preencode(e, d) {
4124 e.end++
4125 },
4126 encode(d, o) {
4127 if (o > 1) throw new Error("Unknown enum")
4128 e.uint.encode(d, o)
4129 },
4130 decode: (d) => e.uint.decode(d),
4131 },
4132 Ut = {
4133 preencode(d, o) {
4134 ;(e.fixed32.preencode(d, o.key),
4135 e.fixed32.preencode(d, o.sender),
4136 e.uint.preencode(d, o.clock),
4137 Nt.preencode(d, o.label))
4138 },
4139 encode(d, o) {
4140 ;(e.fixed32.encode(d, o.key),
4141 e.fixed32.encode(d, o.sender),
4142 e.uint.encode(d, o.clock),
4143 Nt.encode(d, o.label))
4144 },
4145 decode: (d) => ({
4146 key: e.fixed32.decode(d),
4147 sender: e.fixed32.decode(d),
4148 clock: e.uint.decode(d),
4149 label: Nt.decode(d),
4150 }),
4151 },
4152 Jt = _,
4153 Wt = {
4154 preencode(d, o) {
4155 ;(Jt.preencode(d, o.header), e.fixed32.preencode(d, o.key), Nt.preencode(d, o.label))
4156 },
4157 encode(d, o) {
4158 ;(Jt.encode(d, o.header), e.fixed32.encode(d, o.key), Nt.encode(d, o.label))
4159 },
4160 decode: (d) => ({ header: Jt.decode(d), key: e.fixed32.decode(d), label: Nt.decode(d) }),
4161 },
4162 zt = {
4163 preencode(d, o) {
4164 ;(Nt.preencode(d, o.label), e.uint.preencode(d, o.count))
4165 },
4166 encode(d, o) {
4167 ;(Nt.encode(d, o.label), e.uint.encode(d, o.count))
4168 },
4169 decode: (d) => ({ label: Nt.decode(d), count: e.uint.decode(d) }),
4170 },
4171 Ht = e.array(e.frame(zt)),
4172 Gt = {
4173 preencode(d, o) {
4174 ;(e.fixed32.preencode(d, o.key),
4175 e.uint.preencode(d, o.total),
4176 Ht.preencode(d, o.labels),
4177 e.uint.preencode(d, o.editedAt),
4178 e.uint.preencode(d, o.flagsClock))
4179 },
4180 encode(d, o) {
4181 ;(e.fixed32.encode(d, o.key),
4182 e.uint.encode(d, o.total),
4183 Ht.encode(d, o.labels),
4184 e.uint.encode(d, o.editedAt),
4185 e.uint.encode(d, o.flagsClock))
4186 },
4187 decode: (d) => ({
4188 key: e.fixed32.decode(d),
4189 total: e.uint.decode(d),
4190 labels: Ht.decode(d),
4191 editedAt: e.uint.decode(d),
4192 flagsClock: e.uint.decode(d),
4193 }),
4194 },
4195 Qt = {
4196 preencode(d, o) {
4197 ;(e.float64.preencode(d, o.latitude), e.float64.preencode(d, o.longitude))
4198 },
4199 encode(d, o) {
4200 ;(e.float64.encode(d, o.latitude), e.float64.encode(d, o.longitude))
4201 },
4202 decode: (d) => ({ latitude: e.float64.decode(d), longitude: e.float64.decode(d) }),
4203 },
4204 Xt = _,
4205 Yt = {
4206 preencode(d, o) {
4207 ;(Xt.preencode(d, o.header),
4208 e.fixed32.preencode(d, o.deviceKey),
4209 e.fixed32.preencode(d, o.fromDeviceKey))
4210 },
4211 encode(d, o) {
4212 ;(Xt.encode(d, o.header),
4213 e.fixed32.encode(d, o.deviceKey),
4214 e.fixed32.encode(d, o.fromDeviceKey))
4215 },
4216 decode: (d) => ({
4217 header: Xt.decode(d),
4218 deviceKey: e.fixed32.decode(d),
4219 fromDeviceKey: e.fixed32.decode(d),
4220 }),
4221 },
4222 Zt = _,
4223 $t = Y,
4224 _t = {
4225 preencode(d, n) {
4226 ;(Zt.preencode(d, n.header),
4227 e.fixed32.preencode(d, n.callKey),
4228 e.buffer.preencode(d, n.encryptionKey),
4229 d.end++,
4230 o >= 28 && n.streams && $t.preencode(d, n.streams),
4231 o >= 28 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
4232 o >= 28 && n.version && e.uint.preencode(d, n.version))
4233 },
4234 encode(d, n) {
4235 const c =
4236 (o >= 28 && n.streams ? 1 : 0) |
4237 (o >= 28 && n.discoveryKey ? 2 : 0) |
4238 (o >= 28 && n.version ? 4 : 0)
4239 ;(Zt.encode(d, n.header),
4240 e.fixed32.encode(d, n.callKey),
4241 e.buffer.encode(d, n.encryptionKey),
4242 e.uint.encode(d, c),
4243 o >= 28 && n.streams && $t.encode(d, n.streams),
4244 o >= 28 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
4245 o >= 28 && n.version && e.uint.encode(d, n.version))
4246 },
4247 decode(d) {
4248 const n = Zt.decode(d),
4249 c = e.fixed32.decode(d),
4250 r = e.buffer.decode(d),
4251 t = e.uint.decode(d)
4252 return {
4253 header: n,
4254 callKey: c,
4255 encryptionKey: r,
4256 streams: o >= 28 && 1 & t ? $t.decode(d) : null,
4257 discoveryKey: o >= 28 && 2 & t ? e.fixed32.decode(d) : null,
4258 version: o >= 28 && 4 & t ? e.uint.decode(d) : 0,
4259 }
4260 },
4261 },
4262 ei = _,
4263 di = Y,
4264 oi = {
4265 preencode(d, n) {
4266 ;(ei.preencode(d, n.header),
4267 e.fixed32.preencode(d, n.callKey),
4268 d.end++,
4269 o >= 28 && n.streams && di.preencode(d, n.streams))
4270 },
4271 encode(d, n) {
4272 const c = o >= 28 && n.streams ? 1 : 0
4273 ;(ei.encode(d, n.header),
4274 e.fixed32.encode(d, n.callKey),
4275 e.uint.encode(d, c),
4276 o >= 28 && n.streams && di.encode(d, n.streams))
4277 },
4278 decode(d) {
4279 const n = ei.decode(d),
4280 c = e.fixed32.decode(d),
4281 r = e.uint.decode(d)
4282 return { header: n, callKey: c, streams: o >= 28 && 1 & r ? di.decode(d) : null }
4283 },
4284 },
4285 ni = _,
4286 ci = {
4287 preencode(d, o) {
4288 ;(ni.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
4289 },
4290 encode(d, o) {
4291 ;(ni.encode(d, o.header), e.fixed32.encode(d, o.callKey))
4292 },
4293 decode: (d) => ({ header: ni.decode(d), callKey: e.fixed32.decode(d) }),
4294 },
4295 ri = _,
4296 ti = {
4297 preencode(d, o) {
4298 ;(ri.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
4299 },
4300 encode(d, o) {
4301 ;(ri.encode(d, o.header), e.fixed32.encode(d, o.callKey))
4302 },
4303 decode: (d) => ({ header: ri.decode(d), callKey: e.fixed32.decode(d) }),
4304 },
4305 ii = _,
4306 ai = {
4307 preencode(d, o) {
4308 ;(ii.preencode(d, o.header),
4309 e.fixed32.preencode(d, o.callKey),
4310 e.fixed32.preencode(d, o.streamKey))
4311 },
4312 encode(d, o) {
4313 ;(ii.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
4314 },
4315 decode: (d) => ({
4316 header: ii.decode(d),
4317 callKey: e.fixed32.decode(d),
4318 streamKey: e.fixed32.decode(d),
4319 }),
4320 },
4321 si = _,
4322 li = {
4323 preencode(d, o) {
4324 ;(si.preencode(d, o.header),
4325 e.fixed32.preencode(d, o.callKey),
4326 e.fixed32.preencode(d, o.streamKey))
4327 },
4328 encode(d, o) {
4329 ;(si.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
4330 },
4331 decode: (d) => ({
4332 header: si.decode(d),
4333 callKey: e.fixed32.decode(d),
4334 streamKey: e.fixed32.decode(d),
4335 }),
4336 },
4337 pi = {
4338 preencode(d, n) {
4339 ;(e.fixed32.preencode(d, n.callKey),
4340 e.buffer.preencode(d, n.encryptionKey),
4341 e.uint.preencode(d, n.createdAt),
4342 d.end++,
4343 o >= 28 && n.endedAt && e.uint.preencode(d, n.endedAt),
4344 o >= 28 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
4345 o >= 28 && n.version && e.uint.preencode(d, n.version))
4346 },
4347 encode(d, n) {
4348 const c =
4349 (o >= 28 && n.endedAt ? 1 : 0) |
4350 (o >= 28 && n.discoveryKey ? 2 : 0) |
4351 (o >= 28 && n.version ? 4 : 0)
4352 ;(e.fixed32.encode(d, n.callKey),
4353 e.buffer.encode(d, n.encryptionKey),
4354 e.uint.encode(d, n.createdAt),
4355 e.uint.encode(d, c),
4356 o >= 28 && n.endedAt && e.uint.encode(d, n.endedAt),
4357 o >= 28 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
4358 o >= 28 && n.version && e.uint.encode(d, n.version))
4359 },
4360 decode(d) {
4361 const n = e.fixed32.decode(d),
4362 c = e.buffer.decode(d),
4363 r = e.uint.decode(d),
4364 t = e.uint.decode(d)
4365 return {
4366 callKey: n,
4367 encryptionKey: c,
4368 createdAt: r,
4369 endedAt: o >= 28 && 1 & t ? e.uint.decode(d) : 0,
4370 discoveryKey: o >= 28 && 2 & t ? e.fixed32.decode(d) : null,
4371 version: o >= 28 && 4 & t ? e.uint.decode(d) : 0,
4372 }
4373 },
4374 },
4375 ui = {
4376 preencode(d, o) {
4377 ;(e.fixed32.preencode(d, o.callKey),
4378 e.fixed32.preencode(d, o.memberKey),
4379 e.uint.preencode(d, o.createdAt))
4380 },
4381 encode(d, o) {
4382 ;(e.fixed32.encode(d, o.callKey),
4383 e.fixed32.encode(d, o.memberKey),
4384 e.uint.encode(d, o.createdAt))
4385 },
4386 decode: (d) => ({
4387 callKey: e.fixed32.decode(d),
4388 memberKey: e.fixed32.decode(d),
4389 createdAt: e.uint.decode(d),
4390 }),
4391 },
4392 fi = {
4393 preencode(d, n) {
4394 ;(e.fixed32.preencode(d, n.callKey),
4395 e.fixed32.preencode(d, n.deviceKey),
4396 e.fixed32.preencode(d, n.memberKey),
4397 e.uint.preencode(d, n.createdAt),
4398 d.end++,
4399 o >= 28 && n.swarmKey && e.fixed32.preencode(d, n.swarmKey))
4400 },
4401 encode(d, n) {
4402 const c = o >= 28 && n.swarmKey ? 1 : 0
4403 ;(e.fixed32.encode(d, n.callKey),
4404 e.fixed32.encode(d, n.deviceKey),
4405 e.fixed32.encode(d, n.memberKey),
4406 e.uint.encode(d, n.createdAt),
4407 e.uint.encode(d, c),
4408 o >= 28 && n.swarmKey && e.fixed32.encode(d, n.swarmKey))
4409 },
4410 decode(d) {
4411 const n = e.fixed32.decode(d),
4412 c = e.fixed32.decode(d),
4413 r = e.fixed32.decode(d),
4414 t = e.uint.decode(d),
4415 i = e.uint.decode(d)
4416 return {
4417 callKey: n,
4418 deviceKey: c,
4419 memberKey: r,
4420 createdAt: t,
4421 swarmKey: o >= 28 && 1 & i ? e.fixed32.decode(d) : null,
4422 }
4423 },
4424 },
4425 mi = {
4426 preencode(d, o) {
4427 ;(e.fixed32.preencode(d, o.callKey),
4428 e.fixed32.preencode(d, o.deviceKey),
4429 e.buffer.preencode(d, o.streamKey),
4430 e.uint.preencode(d, o.createdAt))
4431 },
4432 encode(d, o) {
4433 ;(e.fixed32.encode(d, o.callKey),
4434 e.fixed32.encode(d, o.deviceKey),
4435 e.buffer.encode(d, o.streamKey),
4436 e.uint.encode(d, o.createdAt))
4437 },
4438 decode: (d) => ({
4439 callKey: e.fixed32.decode(d),
4440 deviceKey: e.fixed32.decode(d),
4441 streamKey: e.buffer.decode(d),
4442 createdAt: e.uint.decode(d),
4443 }),
4444 },
4445 yi = {
4446 preencode(d, n) {
4447 ;(e.fixed32.preencode(d, n.callKey),
4448 d.end++,
4449 o >= 28 && n.selfDeviceKey && e.fixed32.preencode(d, n.selfDeviceKey))
4450 },
4451 encode(d, n) {
4452 const c = o >= 28 && n.selfDeviceKey ? 1 : 0
4453 ;(e.fixed32.encode(d, n.callKey),
4454 e.uint.encode(d, c),
4455 o >= 28 && n.selfDeviceKey && e.fixed32.encode(d, n.selfDeviceKey))
4456 },
4457 decode(d) {
4458 const n = e.fixed32.decode(d),
4459 c = e.uint.decode(d)
4460 return { callKey: n, selfDeviceKey: o >= 28 && 1 & c ? e.fixed32.decode(d) : null }
4461 },
4462 },
4463 bi = {
4464 preencode(d, o) {
4465 e.uint.preencode(d, o.lastCleared)
4466 },
4467 encode(d, o) {
4468 e.uint.encode(d, o.lastCleared)
4469 },
4470 decode: (d) => ({ lastCleared: e.uint.decode(d) }),
4471 },
4472 xi = { Nightly: "Nightly", Internal: "Internal", Production: "Production" },
4473 vi = {
4474 preencode(e, d) {
4475 e.end++
4476 },
4477 encode(d, o) {
4478 switch (o) {
4479 case "Nightly":
4480 e.uint.encode(d, 1)
4481 break
4482 case "Internal":
4483 e.uint.encode(d, 2)
4484 break
4485 case "Production":
4486 e.uint.encode(d, 3)
4487 break
4488 default:
4489 throw new Error("Unknown enum")
4490 }
4491 },
4492 decode(d) {
4493 switch (e.uint.decode(d)) {
4494 case 1:
4495 return "Nightly"
4496 case 2:
4497 return "Internal"
4498 case 3:
4499 return "Production"
4500 default:
4501 return null
4502 }
4503 },
4504 },
4505 ki = _,
4506 gi = {
4507 preencode(e, d) {
4508 ki.preencode(e, d.header)
4509 },
4510 encode(e, d) {
4511 ki.encode(e, d.header)
4512 },
4513 decode: (e) => ({ header: ki.decode(e) }),
4514 },
4515 Ki = _,
4516 hi = {
4517 preencode(e, d) {
4518 Ki.preencode(e, d.header)
4519 },
4520 encode(e, d) {
4521 Ki.encode(e, d.header)
4522 },
4523 decode: (e) => ({ header: Ki.decode(e) }),
4524 },
4525 wi = {
4526 preencode(d, n) {
4527 ;(vi.preencode(d, n.buildType),
4528 d.end++,
4529 o >= 30 && n.latestOfflineAbi && e.uint.preencode(d, n.latestOfflineAbi))
4530 },
4531 encode(d, n) {
4532 const c = o >= 30 && n.latestOfflineAbi ? 1 : 0
4533 ;(vi.encode(d, n.buildType),
4534 e.uint.encode(d, c),
4535 o >= 30 && n.latestOfflineAbi && e.uint.encode(d, n.latestOfflineAbi))
4536 },
4537 decode(d) {
4538 const n = vi.decode(d),
4539 c = d.start < d.end ? e.uint.decode(d) : 0
4540 return { buildType: n, latestOfflineAbi: o >= 30 && 1 & c ? e.uint.decode(d) : 0 }
4541 },
4542 },
4543 Ri = wc,
4544 Pi = {
4545 preencode(d, n) {
4546 ;(e.uint.preencode(d, n.priority),
4547 d.end++,
4548 n.v3 && Ri.preencode(d, n.v3),
4549 o >= 5 && n.timestamp && e.uint.preencode(d, n.timestamp))
4550 },
4551 encode(d, n) {
4552 const c = (n.v3 ? 1 : 0) | (o >= 3 && n.errored ? 2 : 0) | (o >= 5 && n.timestamp ? 4 : 0)
4553 ;(e.uint.encode(d, n.priority),
4554 e.uint.encode(d, c),
4555 n.v3 && Ri.encode(d, n.v3),
4556 o >= 5 && n.timestamp && e.uint.encode(d, n.timestamp))
4557 },
4558 decode(d) {
4559 const n = e.uint.decode(d),
4560 c = e.uint.decode(d)
4561 return {
4562 roomKey: null,
4563 priority: n,
4564 v3: 1 & c ? Ri.decode(d) : null,
4565 errored: o >= 3 && !!(2 & c),
4566 timestamp: o >= 5 && 4 & c ? e.uint.decode(d) : 0,
4567 }
4568 },
4569 },
4570 Ti = Yo,
4571 Ai = mo,
4572 Mi = ar,
4573 Di = kc,
4574 Ci = lr,
4575 Si = pr,
4576 Ii = ur,
4577 ji = Jo,
4578 Li = _o,
4579 Fi = yr,
4580 qi = Y,
4581 Bi = xr,
4582 Ei = Sn,
4583 Vi = {
4584 preencode(d, n) {
4585 const c =
4586 (n.selfDevice ? 1 : 0) |
4587 (n.selfMember ? 2 : 0) |
4588 (n.config ? 4 : 0) |
4589 (n.identity ? 8 : 0) |
4590 (n.lastMessage ? 16 : 0) |
4591 (n.dm ? 32 : 0) |
4592 (o >= 19 && n.readLengths ? 64 : 0) |
4593 (o >= 19 && n.lastMember ? 128 : 0) |
4594 (o >= 21 && n.version ? 256 : 0) |
4595 (o >= 27 && n.preferences ? 512 : 0) |
4596 (o >= 28 && n.activeCall ? 1024 : 0)
4597 ;(e.fixed32.preencode(d, n.discoveryKey),
4598 e.buffer.preencode(d, n.encryptionKey),
4599 Ti.preencode(d, n.digest),
4600 Ai.preencode(d, n.stats),
4601 Mi.preencode(d, n.timestamps),
4602 e.uint.preencode(d, n.fork),
4603 e.uint.preencode(d, n.length),
4604 e.fixed32.preencode(d, n.seed),
4605 Di.preencode(d, n.capabilities),
4606 Ci.preencode(d, n.status),
4607 e.uint.preencode(d, c),
4608 n.selfDevice && Si.preencode(d, n.selfDevice),
4609 n.selfMember && Ii.preencode(d, n.selfMember),
4610 n.config && ji.preencode(d, n.config),
4611 n.identity && Li.preencode(d, n.identity),
4612 n.lastMessage && Fi.preencode(d, n.lastMessage),
4613 n.dm && qi.preencode(d, n.dm),
4614 o >= 19 && n.readLengths && ds.preencode(d, n.readLengths),
4615 o >= 19 && n.lastMember && Bi.preencode(d, n.lastMember),
4616 o >= 21 && n.version && e.uint.preencode(d, n.version),
4617 o >= 27 && n.preferences && Ei.preencode(d, n.preferences),
4618 o >= 28 && n.activeCall && os.preencode(d, n.activeCall))
4619 },
4620 encode(d, n) {
4621 const c =
4622 (n.selfDevice ? 1 : 0) |
4623 (n.selfMember ? 2 : 0) |
4624 (n.config ? 4 : 0) |
4625 (n.identity ? 8 : 0) |
4626 (n.lastMessage ? 16 : 0) |
4627 (n.dm ? 32 : 0) |
4628 (o >= 19 && n.readLengths ? 64 : 0) |
4629 (o >= 19 && n.lastMember ? 128 : 0) |
4630 (o >= 21 && n.version ? 256 : 0) |
4631 (o >= 27 && n.preferences ? 512 : 0) |
4632 (o >= 28 && n.activeCall ? 1024 : 0)
4633 ;(e.fixed32.encode(d, n.discoveryKey),
4634 e.buffer.encode(d, n.encryptionKey),
4635 Ti.encode(d, n.digest),
4636 Ai.encode(d, n.stats),
4637 Mi.encode(d, n.timestamps),
4638 e.uint.encode(d, n.fork),
4639 e.uint.encode(d, n.length),
4640 e.fixed32.encode(d, n.seed),
4641 Di.encode(d, n.capabilities),
4642 Ci.encode(d, n.status),
4643 e.uint.encode(d, c),
4644 n.selfDevice && Si.encode(d, n.selfDevice),
4645 n.selfMember && Ii.encode(d, n.selfMember),
4646 n.config && ji.encode(d, n.config),
4647 n.identity && Li.encode(d, n.identity),
4648 n.lastMessage && Fi.encode(d, n.lastMessage),
4649 n.dm && qi.encode(d, n.dm),
4650 o >= 19 && n.readLengths && ds.encode(d, n.readLengths),
4651 o >= 19 && n.lastMember && Bi.encode(d, n.lastMember),
4652 o >= 21 && n.version && e.uint.encode(d, n.version),
4653 o >= 27 && n.preferences && Ei.encode(d, n.preferences),
4654 o >= 28 && n.activeCall && os.encode(d, n.activeCall))
4655 },
4656 decode(d) {
4657 const n = e.fixed32.decode(d),
4658 c = e.buffer.decode(d),
4659 r = Ti.decode(d),
4660 t = Ai.decode(d),
4661 i = Mi.decode(d),
4662 a = e.uint.decode(d),
4663 s = e.uint.decode(d),
4664 l = e.fixed32.decode(d),
4665 p = Di.decode(d),
4666 u = Ci.decode(d),
4667 f = e.uint.decode(d)
4668 return {
4669 roomKey: null,
4670 discoveryKey: n,
4671 encryptionKey: c,
4672 digest: r,
4673 stats: t,
4674 timestamps: i,
4675 fork: a,
4676 length: s,
4677 seed: l,
4678 capabilities: p,
4679 status: u,
4680 selfDevice: 1 & f ? Si.decode(d) : null,
4681 selfMember: 2 & f ? Ii.decode(d) : null,
4682 config: 4 & f ? ji.decode(d) : null,
4683 identity: 8 & f ? Li.decode(d) : null,
4684 lastMessage: 16 & f ? Fi.decode(d) : null,
4685 dm: 32 & f ? qi.decode(d) : null,
4686 readLengths: o >= 19 && 64 & f ? ds.decode(d) : null,
4687 lastMember: o >= 19 && 128 & f ? Bi.decode(d) : null,
4688 version: o >= 21 && 256 & f ? e.uint.decode(d) : 0,
4689 preferences: o >= 27 && 512 & f ? Ei.decode(d) : null,
4690 activeCall: o >= 28 && 1024 & f ? os.decode(d) : null,
4691 }
4692 },
4693 },
4694 Oi = Sn,
4695 Ni = {
4696 preencode(e, d) {
4697 Oi.preencode(e, d.status)
4698 },
4699 encode(e, d) {
4700 Oi.encode(e, d.status)
4701 },
4702 decode: (e) => ({ roomKey: null, status: Oi.decode(e) }),
4703 },
4704 Ui = {
4705 preencode(d, o) {
4706 ;(e.fixed32.preencode(d, o.key),
4707 d.end++,
4708 o.roomKey && e.fixed32.preencode(d, o.roomKey),
4709 o.keyPair && t.preencode(d, o.keyPair),
4710 o.responseKeyPair && t.preencode(d, o.responseKeyPair))
4711 },
4712 encode(d, o) {
4713 const n = (o.roomKey ? 1 : 0) | (o.keyPair ? 2 : 0) | (o.responseKeyPair ? 4 : 0)
4714 ;(e.fixed32.encode(d, o.key),
4715 e.uint.encode(d, n),
4716 o.roomKey && e.fixed32.encode(d, o.roomKey),
4717 o.keyPair && t.encode(d, o.keyPair),
4718 o.responseKeyPair && t.encode(d, o.responseKeyPair))
4719 },
4720 decode(d) {
4721 const o = e.fixed32.decode(d),
4722 n = e.uint.decode(d)
4723 return {
4724 mailbox: null,
4725 key: o,
4726 roomKey: 1 & n ? e.fixed32.decode(d) : null,
4727 keyPair: 2 & n ? t.decode(d) : null,
4728 responseKeyPair: 4 & n ? t.decode(d) : null,
4729 }
4730 },
4731 },
4732 Ji = pe,
4733 Wi = {
4734 preencode(e, d) {
4735 Ji.preencode(e, d.profile)
4736 },
4737 encode(e, d) {
4738 Ji.encode(e, d.profile)
4739 },
4740 decode: (e) => ({ key: null, profile: Ji.decode(e) }),
4741 },
4742 zi = te,
4743 Hi = ie,
4744 Gi = {
4745 preencode(d, o) {
4746 ;(e.fixed32.preencode(d, o.memberKey),
4747 zi.preencode(d, o.status),
4748 ns.preencode(d, o.profile),
4749 d.end++,
4750 o.invitation && Hi.preencode(d, o.invitation))
4751 },
4752 encode(d, o) {
4753 const n = o.invitation ? 1 : 0
4754 ;(e.fixed32.encode(d, o.memberKey),
4755 zi.encode(d, o.status),
4756 ns.encode(d, o.profile),
4757 e.uint.encode(d, n),
4758 o.invitation && Hi.encode(d, o.invitation))
4759 },
4760 decode: (d) => ({
4761 key: null,
4762 memberKey: e.fixed32.decode(d),
4763 status: zi.decode(d),
4764 profile: ns.decode(d),
4765 invitation: 1 & e.uint.decode(d) ? Hi.decode(d) : null,
4766 }),
4767 },
4768 Qi = pr,
4769 Xi = {
4770 preencode(d, o) {
4771 ;(e.fixed32.preencode(d, o.roomKey), Qi.preencode(d, o.device))
4772 },
4773 encode(d, o) {
4774 ;(e.fixed32.encode(d, o.roomKey), Qi.encode(d, o.device))
4775 },
4776 decode: (d) => ({ roomKey: e.fixed32.decode(d), device: Qi.decode(d) }),
4777 },
4778 Yi = {
4779 preencode(d, o) {
4780 ;(cs.preencode(d, o.status),
4781 d.end++,
4782 o.mailbox && e.fixed32.preencode(d, o.mailbox),
4783 o.roomKey && e.fixed32.preencode(d, o.roomKey))
4784 },
4785 encode(d, o) {
4786 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
4787 ;(cs.encode(d, o.status),
4788 e.uint.encode(d, n),
4789 o.mailbox && e.fixed32.encode(d, o.mailbox),
4790 o.roomKey && e.fixed32.encode(d, o.roomKey))
4791 },
4792 decode(d) {
4793 const o = cs.decode(d),
4794 n = e.uint.decode(d)
4795 return {
4796 memberKey: null,
4797 status: o,
4798 mailbox: 1 & n ? e.fixed32.decode(d) : null,
4799 roomKey: 2 & n ? e.fixed32.decode(d) : null,
4800 }
4801 },
4802 },
4803 Zi = Hc,
4804 $i = Gc,
4805 _i = Qc,
4806 ea = Xc,
4807 da = Yc,
4808 oa = Zc,
4809 na = $c,
4810 ca = _c,
4811 ra = er,
4812 ta = {
4813 preencode(d, o) {
4814 const n =
4815 (o.restoreIdentity ? 1 : 0) |
4816 (o.createRoom ? 2 : 0) |
4817 (o.leaveRoom ? 4 : 0) |
4818 (o.clearRoom ? 8 : 0) |
4819 (o.joinRoomInvitation ? 16 : 0) |
4820 (o.joinRoomKeys ? 32 : 0) |
4821 (o.joinRoomResponse ? 64 : 0) |
4822 (o.sendContactRequest ? 128 : 0) |
4823 (o.migrateV2Room ? 256 : 0)
4824 ;(e.uint.preencode(d, n),
4825 o.restoreIdentity && Zi.preencode(d, o.restoreIdentity),
4826 o.createRoom && $i.preencode(d, o.createRoom),
4827 o.leaveRoom && _i.preencode(d, o.leaveRoom),
4828 o.clearRoom && ea.preencode(d, o.clearRoom),
4829 o.joinRoomInvitation && da.preencode(d, o.joinRoomInvitation),
4830 o.joinRoomKeys && oa.preencode(d, o.joinRoomKeys),
4831 o.joinRoomResponse && na.preencode(d, o.joinRoomResponse),
4832 o.sendContactRequest && ca.preencode(d, o.sendContactRequest),
4833 o.migrateV2Room && ra.preencode(d, o.migrateV2Room))
4834 },
4835 encode(d, o) {
4836 const n =
4837 (o.restoreIdentity ? 1 : 0) |
4838 (o.createRoom ? 2 : 0) |
4839 (o.leaveRoom ? 4 : 0) |
4840 (o.clearRoom ? 8 : 0) |
4841 (o.joinRoomInvitation ? 16 : 0) |
4842 (o.joinRoomKeys ? 32 : 0) |
4843 (o.joinRoomResponse ? 64 : 0) |
4844 (o.sendContactRequest ? 128 : 0) |
4845 (o.migrateV2Room ? 256 : 0)
4846 ;(e.uint.encode(d, n),
4847 o.restoreIdentity && Zi.encode(d, o.restoreIdentity),
4848 o.createRoom && $i.encode(d, o.createRoom),
4849 o.leaveRoom && _i.encode(d, o.leaveRoom),
4850 o.clearRoom && ea.encode(d, o.clearRoom),
4851 o.joinRoomInvitation && da.encode(d, o.joinRoomInvitation),
4852 o.joinRoomKeys && oa.encode(d, o.joinRoomKeys),
4853 o.joinRoomResponse && na.encode(d, o.joinRoomResponse),
4854 o.sendContactRequest && ca.encode(d, o.sendContactRequest),
4855 o.migrateV2Room && ra.encode(d, o.migrateV2Room))
4856 },
4857 decode(d) {
4858 const o = e.uint.decode(d)
4859 return {
4860 discoveryKey: null,
4861 priority: 0,
4862 timestamp: 0,
4863 type: 0,
4864 restoreIdentity: 1 & o ? Zi.decode(d) : null,
4865 createRoom: 2 & o ? $i.decode(d) : null,
4866 leaveRoom: 4 & o ? _i.decode(d) : null,
4867 clearRoom: 8 & o ? ea.decode(d) : null,
4868 joinRoomInvitation: 16 & o ? da.decode(d) : null,
4869 joinRoomKeys: 32 & o ? oa.decode(d) : null,
4870 joinRoomResponse: 64 & o ? na.decode(d) : null,
4871 sendContactRequest: 128 & o ? ca.decode(d) : null,
4872 migrateV2Room: 256 & o ? ra.decode(d) : null,
4873 }
4874 },
4875 },
4876 ia = {
4877 preencode(d, o) {
4878 ;(e.uint.preencode(d, o.blockLength),
4879 e.uint.preencode(d, o.byteOffset),
4880 e.uint.preencode(d, o.byteLength))
4881 },
4882 encode(d, o) {
4883 ;(e.uint.encode(d, o.blockLength),
4884 e.uint.encode(d, o.byteOffset),
4885 e.uint.encode(d, o.byteLength))
4886 },
4887 decode: (d) => ({
4888 blockOffset: 0,
4889 blockLength: e.uint.decode(d),
4890 byteOffset: e.uint.decode(d),
4891 byteLength: e.uint.decode(d),
4892 }),
4893 },
4894 aa = {
4895 preencode(e, d) {
4896 s.preencode(e, d.blob)
4897 },
4898 encode(e, d) {
4899 s.encode(e, d.blob)
4900 },
4901 decode: (e) => ({ key: null, blob: s.decode(e) }),
4902 },
4903 sa = y,
4904 la = b,
4905 pa = {
4906 preencode(d, o) {
4907 ;(d.end++,
4908 o.inlined && e.buffer.preencode(d, o.inlined),
4909 o.blob && s.preencode(d, o.blob),
4910 o.externalBlob && sa.preencode(d, o.externalBlob),
4911 o.externalDrive && la.preencode(d, o.externalDrive))
4912 },
4913 encode(d, o) {
4914 const n =
4915 (o.inlined ? 1 : 0) |
4916 (o.blob ? 2 : 0) |
4917 (o.externalBlob ? 4 : 0) |
4918 (o.externalDrive ? 8 : 0)
4919 ;(e.uint.encode(d, n),
4920 o.inlined && e.buffer.encode(d, o.inlined),
4921 o.blob && s.encode(d, o.blob),
4922 o.externalBlob && sa.encode(d, o.externalBlob),
4923 o.externalDrive && la.encode(d, o.externalDrive))
4924 },
4925 decode(d) {
4926 const o = e.uint.decode(d)
4927 return {
4928 inlined: 1 & o ? e.buffer.decode(d) : null,
4929 blob: 2 & o ? s.decode(d) : null,
4930 externalBlob: 4 & o ? sa.decode(d) : null,
4931 externalDrive: 8 & o ? la.decode(d) : null,
4932 }
4933 },
4934 },
4935 ua = v,
4936 fa = k,
4937 ma = {
4938 preencode(d, o) {
4939 ;(ua.preencode(d, o.pointer),
4940 d.end++,
4941 o.metadata && fa.preencode(d, o.metadata),
4942 o.preview && rs.preencode(d, o.preview),
4943 o.hash && e.fixed32.preencode(d, o.hash))
4944 },
4945 encode(d, o) {
4946 const n = (o.metadata ? 1 : 0) | (o.preview ? 2 : 0) | (o.hash ? 4 : 0)
4947 ;(ua.encode(d, o.pointer),
4948 e.uint.encode(d, n),
4949 o.metadata && fa.encode(d, o.metadata),
4950 o.preview && rs.encode(d, o.preview),
4951 o.hash && e.fixed32.encode(d, o.hash))
4952 },
4953 decode(d) {
4954 const o = ua.decode(d),
4955 n = e.uint.decode(d)
4956 return {
4957 pointer: o,
4958 metadata: 1 & n ? fa.decode(d) : null,
4959 preview: 2 & n ? rs.decode(d) : null,
4960 hash: 4 & n ? e.fixed32.decode(d) : null,
4961 }
4962 },
4963 },
4964 ya = K,
4965 ba = {
4966 preencode(d, n) {
4967 ;(ya.preencode(d, n.file),
4968 e.fixed32.preencode(d, n.roomKey),
4969 d.end++,
4970 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
4971 o >= 28 && n.lastAccessed && e.uint.preencode(d, n.lastAccessed),
4972 o >= 28 && n.version && e.uint.preencode(d, n.version))
4973 },
4974 encode(d, n) {
4975 const c =
4976 (n.encryptionKey ? 1 : 0) |
4977 (n.cleared ? 2 : 0) |
4978 (n.own ? 4 : 0) |
4979 (o >= 28 && n.lastAccessed ? 8 : 0) |
4980 (o >= 28 && n.version ? 16 : 0)
4981 ;(ya.encode(d, n.file),
4982 e.fixed32.encode(d, n.roomKey),
4983 e.uint.encode(d, c),
4984 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
4985 o >= 28 && n.lastAccessed && e.uint.encode(d, n.lastAccessed),
4986 o >= 28 && n.version && e.uint.encode(d, n.version))
4987 },
4988 decode(d) {
4989 const n = ya.decode(d),
4990 c = e.fixed32.decode(d),
4991 r = e.uint.decode(d)
4992 return {
4993 file: n,
4994 roomKey: c,
4995 encryptionKey: 1 & r ? e.buffer.decode(d) : null,
4996 cleared: !!(2 & r),
4997 own: !!(4 & r),
4998 lastAccessed: o >= 28 && 8 & r ? e.uint.decode(d) : 0,
4999 version: o >= 28 && 16 & r ? e.uint.decode(d) : 0,
5000 }
5001 },
5002 },
5003 xa = {
5004 preencode(d, o) {
5005 e.uint.preencode(d, o.size)
5006 },
5007 encode(d, o) {
5008 e.uint.encode(d, o.size)
5009 },
5010 decode: (d) => ({ key: null, path: null, version: 0, size: e.uint.decode(d) }),
5011 },
5012 va = y,
5013 ka = b,
5014 ga = {
5015 preencode(d, o) {
5016 ;(d.end++,
5017 o.inlined && e.buffer.preencode(d, o.inlined),
5018 o.blob && s.preencode(d, o.blob),
5019 o.externalBlob && va.preencode(d, o.externalBlob),
5020 o.externalDrive && ka.preencode(d, o.externalDrive))
5021 },
5022 encode(d, o) {
5023 const n =
5024 (o.inlined ? 1 : 0) |
5025 (o.blob ? 2 : 0) |
5026 (o.externalBlob ? 4 : 0) |
5027 (o.externalDrive ? 8 : 0)
5028 ;(e.uint.encode(d, n),
5029 o.inlined && e.buffer.encode(d, o.inlined),
5030 o.blob && s.encode(d, o.blob),
5031 o.externalBlob && va.encode(d, o.externalBlob),
5032 o.externalDrive && ka.encode(d, o.externalDrive))
5033 },
5034 decode(d) {
5035 const o = e.uint.decode(d)
5036 return {
5037 inlined: 1 & o ? e.buffer.decode(d) : null,
5038 blob: 2 & o ? s.decode(d) : null,
5039 externalBlob: 4 & o ? va.decode(d) : null,
5040 externalDrive: 8 & o ? ka.decode(d) : null,
5041 }
5042 },
5043 },
5044 Ka = v,
5045 ha = k,
5046 wa = {
5047 preencode(d, o) {
5048 ;(Ka.preencode(d, o.pointer),
5049 d.end++,
5050 o.metadata && ha.preencode(d, o.metadata),
5051 o.preview && ts.preencode(d, o.preview),
5052 o.hash && e.fixed32.preencode(d, o.hash))
5053 },
5054 encode(d, o) {
5055 const n = (o.metadata ? 1 : 0) | (o.preview ? 2 : 0) | (o.hash ? 4 : 0)
5056 ;(Ka.encode(d, o.pointer),
5057 e.uint.encode(d, n),
5058 o.metadata && ha.encode(d, o.metadata),
5059 o.preview && ts.encode(d, o.preview),
5060 o.hash && e.fixed32.encode(d, o.hash))
5061 },
5062 decode(d) {
5063 const o = Ka.decode(d),
5064 n = e.uint.decode(d)
5065 return {
5066 pointer: o,
5067 metadata: 1 & n ? ha.decode(d) : null,
5068 preview: 2 & n ? ts.decode(d) : null,
5069 hash: 4 & n ? e.fixed32.decode(d) : null,
5070 }
5071 },
5072 },
5073 Ra = K,
5074 Pa = {
5075 preencode(d, n) {
5076 ;(Ra.preencode(d, n.file),
5077 e.fixed32.preencode(d, n.roomKey),
5078 d.end++,
5079 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
5080 o >= 28 && n.lastAccessed && e.uint.preencode(d, n.lastAccessed),
5081 o >= 28 && n.version && e.uint.preencode(d, n.version))
5082 },
5083 encode(d, n) {
5084 const c =
5085 (n.encryptionKey ? 1 : 0) |
5086 (n.cleared ? 2 : 0) |
5087 (n.own ? 4 : 0) |
5088 (o >= 28 && n.lastAccessed ? 8 : 0) |
5089 (o >= 28 && n.version ? 16 : 0)
5090 ;(Ra.encode(d, n.file),
5091 e.fixed32.encode(d, n.roomKey),
5092 e.uint.encode(d, c),
5093 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
5094 o >= 28 && n.lastAccessed && e.uint.encode(d, n.lastAccessed),
5095 o >= 28 && n.version && e.uint.encode(d, n.version))
5096 },
5097 decode(d) {
5098 const n = Ra.decode(d),
5099 c = e.fixed32.decode(d),
5100 r = e.uint.decode(d)
5101 return {
5102 file: n,
5103 roomKey: c,
5104 encryptionKey: 1 & r ? e.buffer.decode(d) : null,
5105 cleared: !!(2 & r),
5106 own: !!(4 & r),
5107 lastAccessed: o >= 28 && 8 & r ? e.uint.decode(d) : 0,
5108 version: o >= 28 && 16 & r ? e.uint.decode(d) : 0,
5109 }
5110 },
5111 },
5112 Ta = {
5113 preencode(d, o) {
5114 ;(e.uint.preencode(d, o.timestamp),
5115 d.end++,
5116 o.lastSynced && e.uint.preencode(d, o.lastSynced))
5117 },
5118 encode(d, o) {
5119 const n = (o.lastSynced ? 1 : 0) | (o.dirty ? 2 : 0)
5120 ;(e.uint.encode(d, o.timestamp),
5121 e.uint.encode(d, n),
5122 o.lastSynced && e.uint.encode(d, o.lastSynced))
5123 },
5124 decode(d) {
5125 const o = e.uint.decode(d),
5126 n = e.uint.decode(d)
5127 return {
5128 discoveryPublicKey: null,
5129 timestamp: o,
5130 lastSynced: 1 & n ? e.uint.decode(d) : 0,
5131 dirty: !!(2 & n),
5132 }
5133 },
5134 },
5135 Aa = {
5136 preencode(e, d) {},
5137 encode(e, d) {},
5138 decode: (e) => ({ key: null, responsePublicKey: null }),
5139 },
5140 Ma = {
5141 preencode(d, n) {
5142 ;(d.end++, o >= 10 && n.repairs && e.uint.preencode(d, n.repairs))
5143 },
5144 encode(d, n) {
5145 const c = o >= 10 && n.repairs ? 1 : 0
5146 ;(e.uint.encode(d, c), o >= 10 && n.repairs && e.uint.encode(d, n.repairs))
5147 },
5148 decode(d) {
5149 const n = e.uint.decode(d)
5150 return { roomKey: null, repairs: o >= 10 && 1 & n ? e.uint.decode(d) : 0 }
5151 },
5152 },
5153 Da = {
5154 preencode(d, o) {
5155 e.uint.preencode(d, o.count)
5156 },
5157 encode(d, o) {
5158 e.uint.encode(d, o.count)
5159 },
5160 decode: (d) => ({ roomKey: null, count: e.uint.decode(d) }),
5161 },
5162 Ca = Ft,
5163 Sa = {
5164 preencode(d, n) {
5165 ;(e.string.preencode(d, n.code),
5166 e.string.preencode(d, n.message),
5167 e.string.preencode(d, n.stack),
5168 d.end++,
5169 o >= 20 && n.details && Ca.preencode(d, n.details))
5170 },
5171 encode(d, n) {
5172 const c = o >= 20 && n.details ? 1 : 0
5173 ;(e.string.encode(d, n.code),
5174 e.string.encode(d, n.message),
5175 e.string.encode(d, n.stack),
5176 e.uint.encode(d, c),
5177 o >= 20 && n.details && Ca.encode(d, n.details))
5178 },
5179 decode(d) {
5180 const n = e.string.decode(d),
5181 c = e.string.decode(d),
5182 r = e.string.decode(d),
5183 t = e.uint.decode(d)
5184 return {
5185 code: n,
5186 message: c,
5187 stack: r,
5188 timestamp: 0,
5189 details: o >= 20 && 1 & t ? Ca.decode(d) : null,
5190 }
5191 },
5192 },
5193 Ia = {
5194 preencode(d, o) {
5195 e.uint.preencode(d, o.total)
5196 },
5197 encode(d, o) {
5198 e.uint.encode(d, o.total)
5199 },
5200 decode: (d) => ({ roomKey: null, total: e.uint.decode(d) }),
5201 },
5202 ja = e.frame(R),
5203 La = ja,
5204 Fa = e.array(rt),
5205 qa = e.frame(le),
5206 Ba = ja,
5207 Ea = qa,
5208 Va = e.frame(Br),
5209 Oa = qa,
5210 Na = e.frame(md),
5211 Ua = e.frame(Sr),
5212 Ja = e.frame(Qt),
5213 Wa = Ja,
5214 za = e.array(e.frame(it)),
5215 Ha = ja,
5216 Ga = e.frame(Un),
5217 Qa = Ga,
5218 Xa = Ga,
5219 Ya = e.frame(Er),
5220 Za = e.frame(jr),
5221 $a = e.array(e.frame(Tt)),
5222 _a = e.frame(yi),
5223 es = ja,
5224 ds = $a,
5225 os = _a,
5226 ns = qa,
5227 cs = Ga,
5228 rs = ja,
5229 ts = ja
5230function is(e) {
5231 o = e
5232}
5233function as(d, n, c = 30) {
5234 return ((o = c), e.encode(ps(d), n))
5235}
5236function ss(d, n, c = 30) {
5237 return ((o = c), e.decode(ps(d), n))
5238}
5239function ls(e) {
5240 switch (e) {
5241 case "@keet/room-type":
5242 return U
5243 case "@local/tasks":
5244 return Dc
5245 case "@keet/display-type":
5246 return Gr
5247 case "@keet/system-settings-keys":
5248 return et
5249 case "@keet/room-supported-language":
5250 return ct
5251 case "@keet/label-type":
5252 return mt
5253 case "@keet-private-id/user-settings-key":
5254 return Dt
5255 case "@local/keet-state":
5256 return Bt
5257 case "@keet/member-label-type":
5258 return Ot
5259 case "@keet/build-type":
5260 return xi
5261 default:
5262 throw new Error("Enum not found " + e)
5263 }
5264}
5265function ps(e) {
5266 switch (e) {
5267 case "@keet/head":
5268 return n
5269 case "@keet/oplog-id":
5270 return c
5271 case "@keet/encryption-keypair":
5272 return r
5273 case "@keet/signing-keypair":
5274 return t
5275 case "@keet/room-keys":
5276 return i
5277 case "@keet/operation-header":
5278 return a
5279 case "@keet/blob-pointer":
5280 return s
5281 case "@keet/file-dimensions":
5282 return l
5283 case "@keet/file-metadata":
5284 return u
5285 case "@keet/external-drive-pointer":
5286 return f
5287 case "@keet/external-blob-pointer":
5288 return m
5289 case "@keet/file-pointer":
5290 return x
5291 case "@keet/file":
5292 return g
5293 case "@keet/image-file":
5294 return R
5295 case "@keet/file-status":
5296 return P
5297 case "@keet/file-record":
5298 return M
5299 case "@keet/device-status":
5300 return D
5301 case "@keet/member-status":
5302 return C
5303 case "@keet/member-moderation-status":
5304 return S
5305 case "@keet/abi":
5306 return I
5307 case "@keet/device-stats":
5308 return j
5309 case "@keet/member-stats":
5310 return L
5311 case "@keet/chat-stats":
5312 return F
5313 case "@keet/file-stats":
5314 return q
5315 case "@keet/stats":
5316 return N
5317 case "@keet/room-type":
5318 return J
5319 case "@keet/system-settings":
5320 return W
5321 case "@keet/system-digest":
5322 return G
5323 case "@keet/room-seed":
5324 return Q
5325 case "@keet/room-capabilities":
5326 return X
5327 case "@keet/room-config":
5328 return Z
5329 case "@keet/blind-peer":
5330 return $
5331 case "@keet/add-blind-peer-operation":
5332 return de
5333 case "@keet/remove-blind-peer-operation":
5334 return ne
5335 case "@keet/identity-attestation":
5336 return ce
5337 case "@keet/device-invitation":
5338 return re
5339 case "@keet/device":
5340 return ae
5341 case "@keet/member-profile":
5342 return se
5343 case "@keet/device-profile":
5344 return le
5345 case "@keet/member-update":
5346 return ue
5347 case "@keet/device-update":
5348 return fe
5349 case "@keet/signed-pairing-data":
5350 return me
5351 case "@keet/device-request-identity":
5352 return ye
5353 case "@keet/device-response-identity":
5354 return be
5355 case "@keet/device-request-with-invitation":
5356 return ge
5357 case "@keet/device-request-with-invitation-and-proof":
5358 return he
5359 case "@keet/device-request-with-member-proof":
5360 return Pe
5361 case "@keet/device-request":
5362 return Me
5363 case "@keet/device-response":
5364 return Se
5365 case "@keet/invitation-metadata":
5366 return Ie
5367 case "@keet/invitation":
5368 return Fe
5369 case "@keet/add-invitation-operation":
5370 return Ee
5371 case "@keet/remove-invitation-operation":
5372 return Oe
5373 case "@keet/sendable-room-invitation":
5374 return Ne
5375 case "@keet/sendable-identity-invitation":
5376 return Ue
5377 case "@keet/sendable-contact-invitation":
5378 return Je
5379 case "@keet/sendable-invitation":
5380 return Qe
5381 case "@keet/add-device-operation":
5382 return Ye
5383 case "@keet/update-device-operation":
5384 return $e
5385 case "@keet/start-indexing-operation":
5386 return _e
5387 case "@keet/stop-indexing-operation":
5388 return ed
5389 case "@keet/join-request":
5390 return od
5391 case "@keet/accept-join-request-operation":
5392 return rd
5393 case "@keet/reject-join-request-operation":
5394 return id
5395 case "@keet/member":
5396 return ld
5397 case "@keet/full-member":
5398 return fd
5399 case "@keet/member-proofs":
5400 return md
5401 case "@keet/update-member-operation":
5402 return xd
5403 case "@keet/change-member-status-operation":
5404 return gd
5405 case "@keet/change-member-role-operation":
5406 return hd
5407 case "@keet/remove-member-operation":
5408 return Rd
5409 case "@keet/member-activity":
5410 return Pd
5411 case "@keet/member-joined-event":
5412 return Td
5413 case "@keet/member-left-event":
5414 return Ad
5415 case "@keet/title-changed-chat-event":
5416 return Md
5417 case "@keet/chat-event":
5418 return Id
5419 case "@keet/sendable-event":
5420 return jd
5421 case "@keet/display-range":
5422 return Ld
5423 case "@keet/display-content-range":
5424 return qd
5425 case "@keet/mention-display-item":
5426 return Ed
5427 case "@keet/link-preview":
5428 return Nd
5429 case "@keet/display-link-item":
5430 return Wd
5431 case "@keet/display":
5432 return eo
5433 case "@keet/oplog-message":
5434 return ro
5435 case "@keet/index-message":
5436 return ao
5437 case "@keet/full-index-message":
5438 return po
5439 case "@keet/message-status":
5440 return uo
5441 case "@keet/message-index-id":
5442 return fo
5443 case "@keet/thread":
5444 return yo
5445 case "@keet/chat-message-record":
5446 return ko
5447 case "@keet/full-chat-message-record":
5448 return wo
5449 case "@keet/add-chat-message-operation":
5450 return To
5451 case "@keet/remove-chat-message-operation":
5452 return Mo
5453 case "@keet/update-chat-message-operation":
5454 return So
5455 case "@keet/pin-chat-message-operation":
5456 return jo
5457 case "@keet/reaction":
5458 return Lo
5459 case "@keet/reactions-summary":
5460 return Fo
5461 case "@keet/reactions-digest":
5462 return Bo
5463 case "@keet/add-reaction-operation":
5464 return Vo
5465 case "@keet/remove-reaction-operation":
5466 return No
5467 case "@keet/update-room-config-operation":
5468 return Wo
5469 case "@keet/group-member":
5470 return zo
5471 case "@keet/user-registry-info":
5472 return Ho
5473 case "@keet/room-identity":
5474 return Qo
5475 case "@keet/genesis-operation":
5476 return on
5477 case "@keet/upgrade-operation":
5478 return cn
5479 case "@keet/update-system-settings-operation":
5480 return an
5481 case "@keet-private-id/contact":
5482 return sn
5483 case "@keet-private-id/v3-room-migration-info":
5484 return ln
5485 case "@keet-private-id/run-v3-migration-operation":
5486 return fn
5487 case "@keet-private-id/update-identity-operation":
5488 return yn
5489 case "@keet-private-id/counters":
5490 return bn
5491 case "@keet-private-id/stats":
5492 return xn
5493 case "@keet-private-id/add-entropy-operation":
5494 return vn
5495 case "@keet-private-id/pending-invitation-identity":
5496 return kn
5497 case "@keet-private-id/pending-invitation":
5498 return Kn
5499 case "@keet-private-id/resolve-pending-invitation-operation":
5500 return wn
5501 case "@keet-private-id/add-pending-invitation-operation":
5502 return Tn
5503 case "@keet-private-id/remove-pending-invitation-operation":
5504 return Mn
5505 case "@keet-private-id/identity-swap":
5506 return Dn
5507 case "@keet-private-id/room-status":
5508 return Cn
5509 case "@keet-private-id/room":
5510 return Ln
5511 case "@keet-private-id/add-room-operation":
5512 return qn
5513 case "@keet-private-id/remove-room-operation":
5514 return En
5515 case "@keet-private-id/update-room-status-operation":
5516 return Nn
5517 case "@keet-private-id/contact-status":
5518 return Un
5519 case "@keet-private-id/contact-record":
5520 return Jn
5521 case "@keet-private-id/add-contact-operation":
5522 return Hn
5523 case "@keet-private-id/update-contact-status-operation":
5524 return Qn
5525 case "@keet-private-id/remove-contact-operation":
5526 return Yn
5527 case "@keet-private-id/contact-request-status":
5528 return Zn
5529 case "@keet-private-id/contact-request-body":
5530 return ec
5531 case "@keet-private-id/contact-request":
5532 return oc
5533 case "@keet-private-id/contact-request-record":
5534 return tc
5535 case "@keet-private-id/add-contact-request-operation":
5536 return ac
5537 case "@keet-private-id/update-contact-request-status-operation":
5538 return pc
5539 case "@keet-private-id/profile-discovery-record-v1":
5540 return uc
5541 case "@keet-private-id/profile-discovery-record":
5542 return fc
5543 case "@local/background-sync-room":
5544 return mc
5545 case "@local/stats":
5546 return yc
5547 case "@local/migration-status":
5548 return bc
5549 case "@local/v3-private-profile-migration":
5550 return vc
5551 case "@local/v3-room-migration":
5552 return Kc
5553 case "@local/room-migration-stats":
5554 return hc
5555 case "@local/room-migration":
5556 return Rc
5557 case "@local/identity-status":
5558 return Pc
5559 case "@local/identity-record":
5560 return Mc
5561 case "@local/tasks":
5562 return Cc
5563 case "@local/room-keys":
5564 return Sc
5565 case "@local/join-room-invitation-task":
5566 return jc
5567 case "@local/join-room-response-task":
5568 return Lc
5569 case "@local/fast-forward-to":
5570 return Fc
5571 case "@local/add-room-fields":
5572 return qc
5573 case "@local/join-room-keys-task":
5574 return Ec
5575 case "@local/create-room-task":
5576 return Oc
5577 case "@local/leave-room-task":
5578 return Nc
5579 case "@local/clear-room-task":
5580 return Uc
5581 case "@local/restore-identity-task":
5582 return Jc
5583 case "@local/send-contact-request-task":
5584 return Wc
5585 case "@local/migrate-v2-room-task":
5586 return zc
5587 case "@local/task":
5588 return dr
5589 case "@local/shared-invitation":
5590 return nr
5591 case "@local/room-status":
5592 return cr
5593 case "@local/room-timestamps":
5594 return rr
5595 case "@local/room":
5596 return kr
5597 case "@local/room-preferences":
5598 return Kr
5599 case "@local/writer":
5600 return hr
5601 case "@local/member":
5602 return Rr
5603 case "@local/device":
5604 return Tr
5605 case "@local/file":
5606 return Mr
5607 case "@keet/add-file-preview-operation":
5608 return Cr
5609 case "@keet/member-removed-event":
5610 return Sr
5611 case "@keet/member-contact-info":
5612 return jr
5613 case "@keet/remove-device-operation":
5614 return Fr
5615 case "@keet/device-identity":
5616 return qr
5617 case "@keet/readonly-room-invitation":
5618 return Br
5619 case "@keet-private-id/identity-swap-v2":
5620 return Er
5621 case "@keet-private-id/activate-contact-room-operation":
5622 return Or
5623 case "@local/identity-swap":
5624 return Nr
5625 case "@local/writer-append":
5626 return Ur
5627 case "@local/room-metadata":
5628 return Jr
5629 case "@local/debug-flag":
5630 return Wr
5631 case "@local/debug":
5632 return Hr
5633 case "@keet/display-type":
5634 return Qr
5635 case "@keet/test-increment-operation":
5636 return Yr
5637 case "@keet/test-collection-record-1":
5638 return Zr
5639 case "@keet/migrate-abi-operation":
5640 return _r
5641 case "@keet/system-settings-keys":
5642 return dt
5643 case "@local/hyperdht-record":
5644 return nt
5645 case "@keet/room-supported-language":
5646 return rt
5647 case "@keet/translation-display-item":
5648 return it
5649 case "@local/unread":
5650 return at
5651 case "@keet-private-id/unreads":
5652 return st
5653 case "@keet-private-id/add-unreads-key-operation":
5654 return pt
5655 case "@keet-private-id/remove-unreads-key-operation":
5656 return ft
5657 case "@keet/label-type":
5658 return yt
5659 case "@keet/chat-label":
5660 return bt
5661 case "@keet/add-chat-label-operation":
5662 return vt
5663 case "@keet/remove-chat-label-operation":
5664 return gt
5665 case "@keet/chat-label-summary":
5666 return Kt
5667 case "@keet/chat-label-digest":
5668 return wt
5669 case "@keet/update-read-length-operation":
5670 return Pt
5671 case "@keet/read-length":
5672 return Tt
5673 case "@keet/tmp-removed-member":
5674 return At
5675 case "@keet-private-id/settings":
5676 return Mt
5677 case "@keet-private-id/user-settings-key":
5678 return Ct
5679 case "@keet-private-id/update-settings-operation":
5680 return jt
5681 case "@local/error-record-details":
5682 return Lt
5683 case "@local/error-record":
5684 return qt
5685 case "@local/keet-state":
5686 return Et
5687 case "@local/file-stats":
5688 return Vt
5689 case "@keet/member-label-type":
5690 return Nt
5691 case "@keet/member-label":
5692 return Ut
5693 case "@keet/add-member-label-operation":
5694 return Wt
5695 case "@keet/member-label-summary":
5696 return zt
5697 case "@keet/member-label-digest":
5698 return Gt
5699 case "@keet/location-shared-event":
5700 return Qt
5701 case "@keet/move-indexer-operation":
5702 return Yt
5703 case "@keet/start-call":
5704 return _t
5705 case "@keet/join-call":
5706 return oi
5707 case "@keet/leave-call":
5708 return ci
5709 case "@keet/end-call":
5710 return ti
5711 case "@keet/add-call-stream":
5712 return ai
5713 case "@keet/remove-call-stream":
5714 return li
5715 case "@keet/call-record":
5716 return pi
5717 case "@keet/call-member-record":
5718 return ui
5719 case "@keet/call-device-record":
5720 return fi
5721 case "@keet/call-stream-record":
5722 return mi
5723 case "@local/active-call":
5724 return yi
5725 case "@local/file-gc-info":
5726 return bi
5727 case "@keet/build-type":
5728 return vi
5729 case "@keet/test-crash-operation":
5730 return gi
5731 case "@keet/test-dispatch-error-operation":
5732 return hi
5733 case "@local/environment-record":
5734 return wi
5735 case "@local/room-migration/hyperdb#3":
5736 return Pi
5737 case "@local/room/hyperdb#6":
5738 return Vi
5739 case "@local/room-preferences/hyperdb#13":
5740 return Ni
5741 case "@local/writer/hyperdb#14":
5742 return Ui
5743 case "@local/member/hyperdb#17":
5744 return Wi
5745 case "@keet/device/hyperdb#18":
5746 return Gi
5747 case "@local/device/hyperdb#18":
5748 return Xi
5749 case "@keet-private-id/contact/hyperdb#19":
5750 return Yi
5751 case "@local/task/hyperdb#21":
5752 return ta
5753 case "@keet/blob-pointer/hyperdb#23":
5754 return ia
5755 case "@keet/external-blob-pointer/hyperdb#23":
5756 return aa
5757 case "@keet/file-pointer/hyperdb#23":
5758 return pa
5759 case "@keet/file/hyperdb#23":
5760 return ma
5761 case "@local/file/hyperdb#23":
5762 return ba
5763 case "@keet/external-drive-pointer/hyperdb#24":
5764 return xa
5765 case "@keet/file-pointer/hyperdb#24":
5766 return ga
5767 case "@keet/file/hyperdb#24":
5768 return wa
5769 case "@local/file/hyperdb#24":
5770 return Pa
5771 case "@local/background-sync-room/hyperdb#27":
5772 return Ta
5773 case "@local/writer-append/hyperdb#29":
5774 return Aa
5775 case "@local/room-metadata/hyperdb#30":
5776 return Ma
5777 case "@local/unread/hyperdb#33":
5778 return Da
5779 case "@local/error-record/hyperdb#35":
5780 return Sa
5781 case "@local/file-stats/hyperdb#37":
5782 return Ia
5783 default:
5784 throw new Error("Encoder not found " + e)
5785 }
5786}
5787function us(e, d = 30) {
5788 const n = ps(e)
5789 return {
5790 preencode(e, c) {
5791 ;((o = d), n.preencode(e, c))
5792 },
5793 encode(e, c) {
5794 ;((o = d), n.encode(e, c))
5795 },
5796 decode: (e) => ((o = d), n.decode(e)),
5797 }
5798}
5799const fs = us
5800module.exports = {
5801 resolveStruct: fs,
5802 getStruct: us,
5803 getEnum: ls,
5804 getEncoding: ps,
5805 encode: as,
5806 decode: ss,
5807 setVersion: is,
5808 version: o,
5809}
keet-core-4.14.4-pretty/schema/spec/local/hyperschema/index.js +5096 -0
……@@ -0,0 +1,5096 @@
1const { c: e } = require("hyperschema/runtime"),
2 d = 30
3let o = d
4const n = {
5 preencode(d, o) {
6 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.length))
7 },
8 encode(d, o) {
9 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.length))
10 },
11 decode: (d) => ({ key: e.fixed32.decode(d), length: e.uint.decode(d) }),
12 },
13 c = {
14 preencode(d, o) {
15 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.seq))
16 },
17 encode(d, o) {
18 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.seq))
19 },
20 decode: (d) => ({ key: e.fixed32.decode(d), seq: e.uint.decode(d) }),
21 },
22 r = {
23 preencode(d, o) {
24 ;(e.fixed32.preencode(d, o.publicKey), e.fixed32.preencode(d, o.secretKey))
25 },
26 encode(d, o) {
27 ;(e.fixed32.encode(d, o.publicKey), e.fixed32.encode(d, o.secretKey))
28 },
29 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed32.decode(d) }),
30 },
31 t = {
32 preencode(d, o) {
33 ;(e.fixed32.preencode(d, o.publicKey), e.fixed64.preencode(d, o.secretKey))
34 },
35 encode(d, o) {
36 ;(e.fixed32.encode(d, o.publicKey), e.fixed64.encode(d, o.secretKey))
37 },
38 decode: (d) => ({ publicKey: e.fixed32.decode(d), secretKey: e.fixed64.decode(d) }),
39 },
40 i = {
41 preencode(d, o) {
42 ;(e.fixed32.preencode(d, o.key),
43 d.end++,
44 o.encryptionKey && e.buffer.preencode(d, o.encryptionKey),
45 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo))
46 },
47 encode(d, o) {
48 const n = (o.encryptionKey ? 1 : 0) | (o.fastForwardTo ? 2 : 0)
49 ;(e.fixed32.encode(d, o.key),
50 e.uint.encode(d, n),
51 o.encryptionKey && e.buffer.encode(d, o.encryptionKey),
52 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo))
53 },
54 decode(d) {
55 const o = e.fixed32.decode(d),
56 n = e.uint.decode(d)
57 return {
58 key: o,
59 encryptionKey: 1 & n ? e.buffer.decode(d) : null,
60 fastForwardTo: 2 & n ? e.fixed32.decode(d) : null,
61 }
62 },
63 },
64 a = {
65 preencode(d, o) {
66 e.uint.preencode(d, o.timestamp)
67 },
68 encode(d, o) {
69 e.uint.encode(d, o.timestamp)
70 },
71 decode: (d) => ({ timestamp: e.uint.decode(d) }),
72 },
73 s = {
74 preencode(d, o) {
75 ;(e.uint.preencode(d, o.blockOffset),
76 e.uint.preencode(d, o.blockLength),
77 e.uint.preencode(d, o.byteOffset),
78 e.uint.preencode(d, o.byteLength))
79 },
80 encode(d, o) {
81 ;(e.uint.encode(d, o.blockOffset),
82 e.uint.encode(d, o.blockLength),
83 e.uint.encode(d, o.byteOffset),
84 e.uint.encode(d, o.byteLength))
85 },
86 decode: (d) => ({
87 blockOffset: e.uint.decode(d),
88 blockLength: e.uint.decode(d),
89 byteOffset: e.uint.decode(d),
90 byteLength: e.uint.decode(d),
91 }),
92 },
93 p = {
94 preencode(d, o) {
95 ;(e.uint.preencode(d, o.width), e.uint.preencode(d, o.height))
96 },
97 encode(d, o) {
98 ;(e.uint.encode(d, o.width), e.uint.encode(d, o.height))
99 },
100 decode: (d) => ({ width: e.uint.decode(d), height: e.uint.decode(d) }),
101 },
102 u = e.frame(p),
103 l = {
104 preencode(d, o) {
105 ;(d.end++,
106 o.name && e.string.preencode(d, o.name),
107 o.mimetype && e.string.preencode(d, o.mimetype),
108 o.dimensions && u.preencode(d, o.dimensions),
109 o.userdata && e.buffer.preencode(d, o.userdata),
110 o.duration && e.uint.preencode(d, o.duration))
111 },
112 encode(d, o) {
113 const n =
114 (o.name ? 1 : 0) |
115 (o.mimetype ? 2 : 0) |
116 (o.dimensions ? 4 : 0) |
117 (o.userdata ? 8 : 0) |
118 (o.duration ? 16 : 0) |
119 (o.isPreview ? 32 : 0)
120 ;(e.uint.encode(d, n),
121 o.name && e.string.encode(d, o.name),
122 o.mimetype && e.string.encode(d, o.mimetype),
123 o.dimensions && u.encode(d, o.dimensions),
124 o.userdata && e.buffer.encode(d, o.userdata),
125 o.duration && e.uint.encode(d, o.duration))
126 },
127 decode(d) {
128 const o = e.uint.decode(d)
129 return {
130 name: 1 & o ? e.string.decode(d) : null,
131 mimetype: 2 & o ? e.string.decode(d) : null,
132 dimensions: 4 & o ? u.decode(d) : null,
133 userdata: 8 & o ? e.buffer.decode(d) : null,
134 duration: 16 & o ? e.uint.decode(d) : 0,
135 isPreview: !!(32 & o),
136 }
137 },
138 },
139 f = {
140 preencode(d, o) {
141 ;(e.fixed32.preencode(d, o.key),
142 e.string.preencode(d, o.path),
143 e.uint.preencode(d, o.version),
144 e.uint.preencode(d, o.size))
145 },
146 encode(d, o) {
147 ;(e.fixed32.encode(d, o.key),
148 e.string.encode(d, o.path),
149 e.uint.encode(d, o.version),
150 e.uint.encode(d, o.size))
151 },
152 decode: (d) => ({
153 key: e.fixed32.decode(d),
154 path: e.string.decode(d),
155 version: e.uint.decode(d),
156 size: e.uint.decode(d),
157 }),
158 },
159 m = {
160 preencode(d, o) {
161 ;(e.fixed32.preencode(d, o.key), s.preencode(d, o.blob))
162 },
163 encode(d, o) {
164 ;(e.fixed32.encode(d, o.key), s.encode(d, o.blob))
165 },
166 decode: (d) => ({ key: e.fixed32.decode(d), blob: s.decode(d) }),
167 },
168 y = e.frame(m),
169 x = e.frame(f),
170 b = {
171 preencode(d, o) {
172 ;(d.end++,
173 o.inlined && e.buffer.preencode(d, o.inlined),
174 o.blob && s.preencode(d, o.blob),
175 o.externalBlob && y.preencode(d, o.externalBlob),
176 o.externalDrive && x.preencode(d, o.externalDrive))
177 },
178 encode(d, o) {
179 const n =
180 (o.inlined ? 1 : 0) |
181 (o.blob ? 2 : 0) |
182 (o.externalBlob ? 4 : 0) |
183 (o.externalDrive ? 8 : 0)
184 ;(e.uint.encode(d, n),
185 o.inlined && e.buffer.encode(d, o.inlined),
186 o.blob && s.encode(d, o.blob),
187 o.externalBlob && y.encode(d, o.externalBlob),
188 o.externalDrive && x.encode(d, o.externalDrive))
189 },
190 decode(d) {
191 const o = e.uint.decode(d)
192 return {
193 inlined: 1 & o ? e.buffer.decode(d) : null,
194 blob: 2 & o ? s.decode(d) : null,
195 externalBlob: 4 & o ? y.decode(d) : null,
196 externalDrive: 8 & o ? x.decode(d) : null,
197 }
198 },
199 },
200 v = e.frame(b),
201 k = e.frame(l),
202 g = {
203 preencode(d, o) {
204 ;(v.preencode(d, o.pointer),
205 d.end++,
206 o.metadata && k.preencode(d, o.metadata),
207 o.preview && Pi.preencode(d, o.preview),
208 o.hash && e.fixed32.preencode(d, o.hash))
209 },
210 encode(d, o) {
211 const n = (o.metadata ? 1 : 0) | (o.preview ? 2 : 0) | (o.hash ? 4 : 0)
212 ;(v.encode(d, o.pointer),
213 e.uint.encode(d, n),
214 o.metadata && k.encode(d, o.metadata),
215 o.preview && Pi.encode(d, o.preview),
216 o.hash && e.fixed32.encode(d, o.hash))
217 },
218 decode(d) {
219 const o = v.decode(d),
220 n = e.uint.decode(d)
221 return {
222 pointer: o,
223 metadata: 1 & n ? k.decode(d) : null,
224 preview: 2 & n ? Pi.decode(d) : null,
225 hash: 4 & n ? e.fixed32.decode(d) : null,
226 }
227 },
228 },
229 K = e.frame(g),
230 h = K,
231 w = K,
232 P = {
233 preencode(e, d) {
234 ;(e.end++,
235 d.small && K.preencode(e, d.small),
236 d.medium && h.preencode(e, d.medium),
237 d.large && w.preencode(e, d.large))
238 },
239 encode(d, o) {
240 const n = (o.small ? 1 : 0) | (o.medium ? 2 : 0) | (o.large ? 4 : 0)
241 ;(e.uint.encode(d, n),
242 o.small && K.encode(d, o.small),
243 o.medium && h.encode(d, o.medium),
244 o.large && w.encode(d, o.large))
245 },
246 decode(d) {
247 const o = e.uint.decode(d)
248 return {
249 small: 1 & o ? K.decode(d) : null,
250 medium: 2 & o ? h.decode(d) : null,
251 large: 4 & o ? w.decode(d) : null,
252 }
253 },
254 },
255 T = {
256 preencode(e, d) {
257 e.end++
258 },
259 encode(d, o) {
260 const n = o.isDeleted ? 1 : 0
261 e.uint.encode(d, n)
262 },
263 decode: (d) => ({ isDeleted: !!(1 & e.uint.decode(d)) }),
264 },
265 R = e.frame(T),
266 A = K,
267 M = {
268 preencode(d, n) {
269 ;(e.uint.preencode(d, n.id),
270 c.preencode(d, n.oplog),
271 R.preencode(d, n.status),
272 A.preencode(d, n.file),
273 d.end++,
274 o >= 22 && n.version && e.uint.preencode(d, n.version))
275 },
276 encode(d, n) {
277 const r = o >= 22 && n.version ? 1 : 0
278 ;(e.uint.encode(d, n.id),
279 c.encode(d, n.oplog),
280 R.encode(d, n.status),
281 A.encode(d, n.file),
282 e.uint.encode(d, r),
283 o >= 22 && n.version && e.uint.encode(d, n.version))
284 },
285 decode(d) {
286 const n = e.uint.decode(d),
287 r = c.decode(d),
288 t = R.decode(d),
289 i = A.decode(d),
290 a = d.start < d.end ? e.uint.decode(d) : 0
291 return {
292 id: n,
293 oplog: r,
294 status: t,
295 file: i,
296 version: o >= 22 && 1 & a ? e.uint.decode(d) : 0,
297 }
298 },
299 },
300 D = {
301 preencode(e, d) {
302 e.end++
303 },
304 encode(d, o) {
305 const n = (o.isActive ? 1 : 0) | (o.isIndexing ? 2 : 0)
306 e.uint.encode(d, n)
307 },
308 decode(d) {
309 const o = e.uint.decode(d)
310 return { isActive: !!(1 & o), isIndexing: !!(2 & o) }
311 },
312 },
313 C = {
314 preencode(d, n) {
315 const c =
316 (n.isAdmin ? 1 : 0) |
317 (n.isModerator ? 2 : 0) |
318 (n.isPending ? 4 : 0) |
319 (n.isActive ? 8 : 0) |
320 (n.isMuted ? 16 : 0) |
321 (n.isBanned ? 32 : 0) |
322 (n.isShadowBanned ? 64 : 0) |
323 (o >= 19 && n.isRemoved ? 128 : 0)
324 e.uint.preencode(d, c)
325 },
326 encode(d, n) {
327 const c =
328 (n.isAdmin ? 1 : 0) |
329 (n.isModerator ? 2 : 0) |
330 (n.isPending ? 4 : 0) |
331 (n.isActive ? 8 : 0) |
332 (n.isMuted ? 16 : 0) |
333 (n.isBanned ? 32 : 0) |
334 (n.isShadowBanned ? 64 : 0) |
335 (o >= 19 && n.isRemoved ? 128 : 0)
336 e.uint.encode(d, c)
337 },
338 decode(d) {
339 const n = e.uint.decode(d)
340 return {
341 isAdmin: !!(1 & n),
342 isModerator: !!(2 & n),
343 isPending: !!(4 & n),
344 isActive: !!(8 & n),
345 isMuted: !!(16 & n),
346 isBanned: !!(32 & n),
347 isShadowBanned: !!(64 & n),
348 isRemoved: o >= 19 && !!(128 & n),
349 }
350 },
351 },
352 S = {
353 preencode(e, d) {
354 e.end++
355 },
356 encode(d, o) {
357 const n = (o.isMuted ? 1 : 0) | (o.isBanned ? 2 : 0) | (o.isShadowBanned ? 4 : 0)
358 e.uint.encode(d, n)
359 },
360 decode(d) {
361 const o = e.uint.decode(d)
362 return { isMuted: !!(1 & o), isBanned: !!(2 & o), isShadowBanned: !!(4 & o) }
363 },
364 },
365 F = {
366 preencode(d, o) {
367 e.uint.preencode(d, o.version)
368 },
369 encode(d, o) {
370 e.uint.encode(d, o.version)
371 },
372 decode: (d) => ({ version: e.uint.decode(d) }),
373 },
374 I = {
375 preencode(d, o) {
376 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active))
377 },
378 encode(d, o) {
379 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active))
380 },
381 decode: (d) => ({ total: e.uint.decode(d), active: e.uint.decode(d) }),
382 },
383 L = {
384 preencode(d, o) {
385 ;(e.uint.preencode(d, o.total), e.uint.preencode(d, o.active), e.uint.preencode(d, o.pending))
386 },
387 encode(d, o) {
388 ;(e.uint.encode(d, o.total), e.uint.encode(d, o.active), e.uint.encode(d, o.pending))
389 },
390 decode: (d) => ({
391 total: e.uint.decode(d),
392 active: e.uint.decode(d),
393 pending: e.uint.decode(d),
394 }),
395 },
396 q = {
397 preencode(d, n) {
398 ;(e.uint.preencode(d, n.clock),
399 e.uint.preencode(d, n.pinned),
400 e.uint.preencode(d, n.threads),
401 e.uint.preencode(d, n.timestamp),
402 d.end++,
403 o >= 24 && n.flagsClock && e.uint.preencode(d, n.flagsClock))
404 },
405 encode(d, n) {
406 const c = o >= 24 && n.flagsClock ? 1 : 0
407 ;(e.uint.encode(d, n.clock),
408 e.uint.encode(d, n.pinned),
409 e.uint.encode(d, n.threads),
410 e.uint.encode(d, n.timestamp),
411 e.uint.encode(d, c),
412 o >= 24 && n.flagsClock && e.uint.encode(d, n.flagsClock))
413 },
414 decode(d) {
415 const n = e.uint.decode(d),
416 c = e.uint.decode(d),
417 r = e.uint.decode(d),
418 t = e.uint.decode(d),
419 i = d.start < d.end ? e.uint.decode(d) : 0
420 return {
421 clock: n,
422 pinned: c,
423 threads: r,
424 timestamp: t,
425 flagsClock: o >= 24 && 1 & i ? e.uint.decode(d) : 0,
426 }
427 },
428 },
429 j = {
430 preencode(d, o) {
431 e.uint.preencode(d, o.clock)
432 },
433 encode(d, o) {
434 e.uint.encode(d, o.clock)
435 },
436 decode: (d) => ({ clock: e.uint.decode(d) }),
437 },
438 E = e.frame(I),
439 B = e.frame(L),
440 N = e.frame(q),
441 V = e.frame(j),
442 O = {
443 preencode(e, d) {
444 ;(E.preencode(e, d.devices),
445 B.preencode(e, d.members),
446 N.preencode(e, d.chat),
447 V.preencode(e, d.files))
448 },
449 encode(e, d) {
450 ;(E.encode(e, d.devices), B.encode(e, d.members), N.encode(e, d.chat), V.encode(e, d.files))
451 },
452 decode: (e) => ({
453 devices: E.decode(e),
454 members: B.decode(e),
455 chat: N.decode(e),
456 files: V.decode(e),
457 }),
458 },
459 U = { Default: 1, Broadcast: 2, DirectMessage: 3 },
460 J = {
461 preencode(e, d) {
462 e.end++
463 },
464 encode(d, o) {
465 if (o > 3) throw new Error("Unknown enum")
466 e.uint.encode(d, o)
467 },
468 decode: (d) => e.uint.decode(d),
469 },
470 W = {
471 preencode(d, n) {
472 const c =
473 (n.roomType ? 1 : 0) |
474 (n.isExperimental ? 2 : 0) |
475 (n.isJoiningDisabled ? 4 : 0) |
476 (n.isAppendingDisabled ? 8 : 0) |
477 (n.isCallingDisabled ? 16 : 0) |
478 (n.isMembershipEventsDisabled ? 32 : 0) |
479 (o >= 28 && n.isAttachmentsDisabled ? 64 : 0) |
480 (o >= 28 && n.isLinksDisabled ? 128 : 0) |
481 (o >= 29 && n.buildType ? 256 : 0)
482 ;(e.uint.preencode(d, c),
483 n.roomType && J.preencode(d, n.roomType),
484 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
485 },
486 encode(d, n) {
487 const c =
488 (n.roomType ? 1 : 0) |
489 (n.isExperimental ? 2 : 0) |
490 (n.isJoiningDisabled ? 4 : 0) |
491 (n.isAppendingDisabled ? 8 : 0) |
492 (n.isCallingDisabled ? 16 : 0) |
493 (n.isMembershipEventsDisabled ? 32 : 0) |
494 (o >= 28 && n.isAttachmentsDisabled ? 64 : 0) |
495 (o >= 28 && n.isLinksDisabled ? 128 : 0) |
496 (o >= 29 && n.buildType ? 256 : 0)
497 ;(e.uint.encode(d, c),
498 n.roomType && J.encode(d, n.roomType),
499 o >= 29 && n.buildType && vi.encode(d, n.buildType))
500 },
501 decode(d) {
502 const n = e.uint.decode(d)
503 return {
504 roomType: 1 & n ? J.decode(d) : 0,
505 isExperimental: !!(2 & n),
506 isJoiningDisabled: !!(4 & n),
507 isAppendingDisabled: !!(8 & n),
508 isCallingDisabled: !!(16 & n),
509 isMembershipEventsDisabled: !!(32 & n),
510 isAttachmentsDisabled: o >= 28 && !!(64 & n),
511 isLinksDisabled: o >= 28 && !!(128 & n),
512 buildType: o >= 29 && 256 & n ? vi.decode(d) : null,
513 }
514 },
515 },
516 H = e.frame(F),
517 z = e.frame(W),
518 G = {
519 preencode(d, o) {
520 ;(H.preencode(d, o.abi), z.preencode(d, o.settings), e.uint.preencode(d, o.creationTime))
521 },
522 encode(d, o) {
523 ;(H.encode(d, o.abi), z.encode(d, o.settings), e.uint.encode(d, o.creationTime))
524 },
525 decode: (d) => ({ abi: H.decode(d), settings: z.decode(d), creationTime: e.uint.decode(d) }),
526 },
527 Q = {
528 preencode(d, o) {
529 e.fixed32.preencode(d, o.seed)
530 },
531 encode(d, o) {
532 e.fixed32.encode(d, o.seed)
533 },
534 decode: (d) => ({ seed: e.fixed32.decode(d) }),
535 },
536 X = {
537 preencode(d, o) {
538 ;(r.preencode(d, o.mailboxKeyPair),
539 t.preencode(d, o.discoveryKeyPair),
540 e.fixed32.preencode(d, o.wakeupTopic),
541 e.fixed32.preencode(d, o.swarmTopic))
542 },
543 encode(d, o) {
544 ;(r.encode(d, o.mailboxKeyPair),
545 t.encode(d, o.discoveryKeyPair),
546 e.fixed32.encode(d, o.wakeupTopic),
547 e.fixed32.encode(d, o.swarmTopic))
548 },
549 decode: (d) => ({
550 mailboxKeyPair: r.decode(d),
551 discoveryKeyPair: t.decode(d),
552 wakeupTopic: e.fixed32.decode(d),
553 swarmTopic: e.fixed32.decode(d),
554 }),
555 },
556 Y = e.array(e.fixed32),
557 Z = {
558 preencode(d, n) {
559 ;(d.end++,
560 n.title && e.string.preencode(d, n.title),
561 n.avatar && Ti.preencode(d, n.avatar),
562 n.description && e.string.preencode(d, n.description),
563 o >= 17 && n.supportedLanguages && Ri.preencode(d, n.supportedLanguages),
564 o >= 19 && n.blindPeers && Y.preencode(d, n.blindPeers))
565 },
566 encode(d, n) {
567 const c =
568 (n.title ? 1 : 0) |
569 (n.avatar ? 2 : 0) |
570 (n.description ? 4 : 0) |
571 (o >= 17 && n.supportedLanguages ? 8 : 0) |
572 (o >= 19 && n.blindPeers ? 16 : 0)
573 ;(e.uint.encode(d, c),
574 n.title && e.string.encode(d, n.title),
575 n.avatar && Ti.encode(d, n.avatar),
576 n.description && e.string.encode(d, n.description),
577 o >= 17 && n.supportedLanguages && Ri.encode(d, n.supportedLanguages),
578 o >= 19 && n.blindPeers && Y.encode(d, n.blindPeers))
579 },
580 decode(d) {
581 const n = e.uint.decode(d)
582 return {
583 title: 1 & n ? e.string.decode(d) : null,
584 avatar: 2 & n ? Ti.decode(d) : null,
585 description: 4 & n ? e.string.decode(d) : null,
586 supportedLanguages: o >= 17 && 8 & n ? Ri.decode(d) : null,
587 blindPeers: o >= 19 && 16 & n ? Y.decode(d) : null,
588 }
589 },
590 },
591 $ = {
592 preencode(d, o) {
593 e.fixed32.preencode(d, o.key)
594 },
595 encode(d, o) {
596 e.fixed32.encode(d, o.key)
597 },
598 decode: (d) => ({ key: e.fixed32.decode(d) }),
599 },
600 _ = e.frame(a),
601 ee = e.frame($),
602 de = {
603 preencode(e, d) {
604 ;(_.preencode(e, d.header), ee.preencode(e, d.peer))
605 },
606 encode(e, d) {
607 ;(_.encode(e, d.header), ee.encode(e, d.peer))
608 },
609 decode: (e) => ({ header: _.decode(e), peer: ee.decode(e) }),
610 },
611 oe = _,
612 ne = {
613 preencode(d, o) {
614 ;(oe.preencode(d, o.header), e.fixed32.preencode(d, o.key))
615 },
616 encode(d, o) {
617 ;(oe.encode(d, o.header), e.fixed32.encode(d, o.key))
618 },
619 decode: (d) => ({ header: oe.decode(d), key: e.fixed32.decode(d) }),
620 },
621 ce = {
622 preencode(d, o) {
623 ;(e.fixed32.preencode(d, o.memberKey), e.buffer.preencode(d, o.proof))
624 },
625 encode(d, o) {
626 ;(e.fixed32.encode(d, o.memberKey), e.buffer.encode(d, o.proof))
627 },
628 decode: (d) => ({ memberKey: e.fixed32.decode(d), proof: e.buffer.decode(d) }),
629 },
630 re = {
631 preencode(d, o) {
632 ;(e.fixed32.preencode(d, o.id), e.buffer.preencode(d, o.response))
633 },
634 encode(d, o) {
635 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.response))
636 },
637 decode: (d) => ({ id: e.fixed32.decode(d), response: e.buffer.decode(d) }),
638 },
639 te = e.frame(D),
640 ie = e.frame(re),
641 ae = {
642 preencode(d, o) {
643 ;(e.fixed32.preencode(d, o.key),
644 e.fixed32.preencode(d, o.memberKey),
645 te.preencode(d, o.status),
646 Ai.preencode(d, o.profile),
647 d.end++,
648 o.invitation && ie.preencode(d, o.invitation))
649 },
650 encode(d, o) {
651 const n = o.invitation ? 1 : 0
652 ;(e.fixed32.encode(d, o.key),
653 e.fixed32.encode(d, o.memberKey),
654 te.encode(d, o.status),
655 Ai.encode(d, o.profile),
656 e.uint.encode(d, n),
657 o.invitation && ie.encode(d, o.invitation))
658 },
659 decode: (d) => ({
660 key: e.fixed32.decode(d),
661 memberKey: e.fixed32.decode(d),
662 status: te.decode(d),
663 profile: Ai.decode(d),
664 invitation: 1 & e.uint.decode(d) ? ie.decode(d) : null,
665 }),
666 },
667 se = {
668 preencode(d, o) {
669 ;(e.uint.preencode(d, o.timestamp),
670 d.end++,
671 o.mailbox && e.fixed32.preencode(d, o.mailbox),
672 o.displayName && e.string.preencode(d, o.displayName),
673 o.avatar && Mi.preencode(d, o.avatar),
674 o.username && e.string.preencode(d, o.username))
675 },
676 encode(d, o) {
677 const n =
678 (o.mailbox ? 1 : 0) | (o.displayName ? 2 : 0) | (o.avatar ? 4 : 0) | (o.username ? 8 : 0)
679 ;(e.uint.encode(d, o.timestamp),
680 e.uint.encode(d, n),
681 o.mailbox && e.fixed32.encode(d, o.mailbox),
682 o.displayName && e.string.encode(d, o.displayName),
683 o.avatar && Mi.encode(d, o.avatar),
684 o.username && e.string.encode(d, o.username))
685 },
686 decode(d) {
687 const o = e.uint.decode(d),
688 n = e.uint.decode(d)
689 return {
690 timestamp: o,
691 mailbox: 1 & n ? e.fixed32.decode(d) : null,
692 displayName: 2 & n ? e.string.decode(d) : null,
693 avatar: 4 & n ? Mi.decode(d) : null,
694 username: 8 & n ? e.string.decode(d) : null,
695 }
696 },
697 },
698 pe = {
699 preencode(d, n) {
700 ;(d.end++,
701 n.swarmKey && e.fixed32.preencode(d, n.swarmKey),
702 n.name && e.string.preencode(d, n.name),
703 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
704 },
705 encode(d, n) {
706 const c =
707 (n.swarmKey ? 1 : 0) |
708 (n.name ? 2 : 0) |
709 (n.isMobile ? 4 : 0) |
710 (o >= 29 && n.buildType ? 8 : 0)
711 ;(e.uint.encode(d, c),
712 n.swarmKey && e.fixed32.encode(d, n.swarmKey),
713 n.name && e.string.encode(d, n.name),
714 o >= 29 && n.buildType && vi.encode(d, n.buildType))
715 },
716 decode(d) {
717 const n = e.uint.decode(d)
718 return {
719 swarmKey: 1 & n ? e.fixed32.decode(d) : null,
720 name: 2 & n ? e.string.decode(d) : null,
721 isMobile: !!(4 & n),
722 buildType: o >= 29 && 8 & n ? vi.decode(d) : null,
723 }
724 },
725 },
726 ue = e.frame(se),
727 le = {
728 preencode(e, d) {
729 ;(ue.preencode(e, d.profile), ce.preencode(e, d.attestation))
730 },
731 encode(e, d) {
732 ;(ue.encode(e, d.profile), ce.encode(e, d.attestation))
733 },
734 decode: (e) => ({ profile: ue.decode(e), attestation: ce.decode(e) }),
735 },
736 fe = {
737 preencode(e, d) {
738 ;(Di.preencode(e, d.profile), ce.preencode(e, d.attestation))
739 },
740 encode(e, d) {
741 ;(Di.encode(e, d.profile), ce.encode(e, d.attestation))
742 },
743 decode: (e) => ({ profile: Di.decode(e), attestation: ce.decode(e) }),
744 },
745 me = {
746 preencode(d, o) {
747 ;(e.fixed32.preencode(d, o.id),
748 e.buffer.preencode(d, o.data),
749 e.buffer.preencode(d, o.signature))
750 },
751 encode(d, o) {
752 ;(e.fixed32.encode(d, o.id), e.buffer.encode(d, o.data), e.buffer.encode(d, o.signature))
753 },
754 decode: (d) => ({
755 id: e.fixed32.decode(d),
756 data: e.buffer.decode(d),
757 signature: e.buffer.decode(d),
758 }),
759 },
760 ye = {
761 preencode(d, o) {
762 e.fixed32.preencode(d, o.devicePublicKey)
763 },
764 encode(d, o) {
765 e.fixed32.encode(d, o.devicePublicKey)
766 },
767 decode: (d) => ({ devicePublicKey: e.fixed32.decode(d) }),
768 },
769 xe = {
770 preencode(d, o) {
771 ;(ce.preencode(d, o.privateProfileIdentity), e.buffer.preencode(d, o.deviceProof))
772 },
773 encode(d, o) {
774 ;(ce.encode(d, o.privateProfileIdentity), e.buffer.encode(d, o.deviceProof))
775 },
776 decode: (d) => ({ privateProfileIdentity: ce.decode(d), deviceProof: e.buffer.decode(d) }),
777 },
778 be = e.frame(fe),
779 ve = e.frame(le),
780 ke = e.frame(ye),
781 ge = {
782 preencode(d, o) {
783 ;(e.fixed32.preencode(d, o.deviceKey),
784 t.preencode(d, o.keyPair),
785 be.preencode(d, o.device),
786 ve.preencode(d, o.member),
787 d.end++,
788 o.identity && ke.preencode(d, o.identity))
789 },
790 encode(d, o) {
791 const n = o.identity ? 1 : 0
792 ;(e.fixed32.encode(d, o.deviceKey),
793 t.encode(d, o.keyPair),
794 be.encode(d, o.device),
795 ve.encode(d, o.member),
796 e.uint.encode(d, n),
797 o.identity && ke.encode(d, o.identity))
798 },
799 decode: (d) => ({
800 deviceKey: e.fixed32.decode(d),
801 keyPair: t.decode(d),
802 device: be.decode(d),
803 member: ve.decode(d),
804 identity: 1 & e.uint.decode(d) ? ke.decode(d) : null,
805 }),
806 },
807 Ke = e.frame(ge),
808 he = {
809 preencode(d, o) {
810 ;(e.fixed32.preencode(d, o.id),
811 Ke.preencode(d, o.request),
812 e.buffer.preencode(d, o.signature))
813 },
814 encode(d, o) {
815 ;(e.fixed32.encode(d, o.id), Ke.encode(d, o.request), e.buffer.encode(d, o.signature))
816 },
817 decode: (d) => ({
818 id: e.fixed32.decode(d),
819 request: Ke.decode(d),
820 signature: e.buffer.decode(d),
821 }),
822 },
823 we = be,
824 Pe = ve,
825 Te = {
826 preencode(e, d) {
827 ;(we.preencode(e, d.device), e.end++, d.member && Pe.preencode(e, d.member))
828 },
829 encode(d, o) {
830 const n = o.member ? 1 : 0
831 ;(we.encode(d, o.device), e.uint.encode(d, n), o.member && Pe.encode(d, o.member))
832 },
833 decode: (d) => ({ device: we.decode(d), member: 1 & e.uint.decode(d) ? Pe.decode(d) : null }),
834 },
835 Re = e.frame(he),
836 Ae = e.frame(Te),
837 Me = {
838 preencode(e, d) {
839 ;(e.end++,
840 d.withInvitation && Re.preencode(e, d.withInvitation),
841 d.withMemberProof && Ae.preencode(e, d.withMemberProof))
842 },
843 encode(d, o) {
844 const n = (o.withInvitation ? 1 : 0) | (o.withMemberProof ? 2 : 0)
845 ;(e.uint.encode(d, n),
846 o.withInvitation && Re.encode(d, o.withInvitation),
847 o.withMemberProof && Ae.encode(d, o.withMemberProof))
848 },
849 decode(d) {
850 const o = e.uint.decode(d)
851 return {
852 withInvitation: 1 & o ? Re.decode(d) : null,
853 withMemberProof: 2 & o ? Ae.decode(d) : null,
854 }
855 },
856 },
857 De = e.frame(me),
858 Ce = e.frame(xe),
859 Se = {
860 preencode(e, d) {
861 ;(De.preencode(e, d.signedKeys), e.end++, d.identity && Ce.preencode(e, d.identity))
862 },
863 encode(d, o) {
864 const n = o.identity ? 1 : 0
865 ;(De.encode(d, o.signedKeys), e.uint.encode(d, n), o.identity && Ce.encode(d, o.identity))
866 },
867 decode: (d) => ({
868 signedKeys: De.decode(d),
869 identity: 1 & e.uint.decode(d) ? Ce.decode(d) : null,
870 }),
871 },
872 Fe = {
873 preencode(d, n) {
874 ;(d.end++,
875 n.expiration && e.uint.preencode(d, n.expiration),
876 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
877 },
878 encode(d, n) {
879 const c =
880 (n.expiration ? 1 : 0) |
881 (n.requiresConfirmation ? 2 : 0) |
882 (n.canModerate ? 4 : 0) |
883 (n.canAdmin ? 8 : 0) |
884 (o >= 29 && n.buildType ? 16 : 0)
885 ;(e.uint.encode(d, c),
886 n.expiration && e.uint.encode(d, n.expiration),
887 o >= 29 && n.buildType && vi.encode(d, n.buildType))
888 },
889 decode(d) {
890 const n = e.uint.decode(d)
891 return {
892 expiration: 1 & n ? e.uint.decode(d) : 0,
893 requiresConfirmation: !!(2 & n),
894 canModerate: !!(4 & n),
895 canAdmin: !!(8 & n),
896 buildType: o >= 29 && 16 & n ? vi.decode(d) : null,
897 }
898 },
899 },
900 Ie = De,
901 Le = e.frame(Fe),
902 qe = {
903 preencode(d, o) {
904 ;(e.fixed32.preencode(d, o.id),
905 Ie.preencode(d, o.response),
906 Le.preencode(d, o.metadata),
907 d.end++,
908 o.anchor && n.preencode(d, o.anchor))
909 },
910 encode(d, o) {
911 const c = (o.anchor ? 1 : 0) | (o.isActive ? 2 : 0)
912 ;(e.fixed32.encode(d, o.id),
913 Ie.encode(d, o.response),
914 Le.encode(d, o.metadata),
915 e.uint.encode(d, c),
916 o.anchor && n.encode(d, o.anchor))
917 },
918 decode(d) {
919 const o = e.fixed32.decode(d),
920 c = Ie.decode(d),
921 r = Le.decode(d),
922 t = e.uint.decode(d)
923 return {
924 id: o,
925 response: c,
926 metadata: r,
927 anchor: 1 & t ? n.decode(d) : null,
928 isActive: !!(2 & t),
929 }
930 },
931 },
932 je = _,
933 Ee = e.frame(qe),
934 Be = {
935 preencode(e, d) {
936 ;(je.preencode(e, d.header), Ee.preencode(e, d.invitation))
937 },
938 encode(e, d) {
939 ;(je.encode(e, d.header), Ee.encode(e, d.invitation))
940 },
941 decode: (e) => ({ header: je.decode(e), invitation: Ee.decode(e) }),
942 },
943 Ne = _,
944 Ve = {
945 preencode(d, o) {
946 ;(Ne.preencode(d, o.header), e.fixed32.preencode(d, o.id))
947 },
948 encode(d, o) {
949 ;(Ne.encode(d, o.header), e.fixed32.encode(d, o.id))
950 },
951 decode: (d) => ({ header: Ne.decode(d), id: e.fixed32.decode(d) }),
952 },
953 Oe = {
954 preencode(d, o) {
955 ;(e.fixed32.preencode(d, o.mailbox),
956 e.fixed32.preencode(d, o.invitationSeed),
957 n.preencode(d, o.anchor))
958 },
959 encode(d, o) {
960 ;(e.fixed32.encode(d, o.mailbox),
961 e.fixed32.encode(d, o.invitationSeed),
962 n.encode(d, o.anchor))
963 },
964 decode: (d) => ({
965 mailbox: e.fixed32.decode(d),
966 invitationSeed: e.fixed32.decode(d),
967 anchor: n.decode(d),
968 }),
969 },
970 Ue = {
971 preencode(d, o) {
972 ;(e.fixed32.preencode(d, o.mailbox),
973 e.fixed32.preencode(d, o.invitationSeed),
974 n.preencode(d, o.anchor),
975 e.fixed32.preencode(d, o.identityPublicKey))
976 },
977 encode(d, o) {
978 ;(e.fixed32.encode(d, o.mailbox),
979 e.fixed32.encode(d, o.invitationSeed),
980 n.encode(d, o.anchor),
981 e.fixed32.encode(d, o.identityPublicKey))
982 },
983 decode: (d) => ({
984 mailbox: e.fixed32.decode(d),
985 invitationSeed: e.fixed32.decode(d),
986 anchor: n.decode(d),
987 identityPublicKey: e.fixed32.decode(d),
988 }),
989 },
990 Je = {
991 preencode(d, o) {
992 e.fixed32.preencode(d, o.mailbox)
993 },
994 encode(d, o) {
995 e.fixed32.encode(d, o.mailbox)
996 },
997 decode: (d) => ({ mailbox: e.fixed32.decode(d) }),
998 },
999 We = e.frame(Oe),
1000 He = e.frame(Ue),
1001 ze = e.frame(Je),
1002 Ge = e.array(e.ipv4Address),
1003 Qe = {
1004 preencode(e, d) {
1005 ;(e.end++,
1006 d.room && We.preencode(e, d.room),
1007 d.identity && He.preencode(e, d.identity),
1008 d.contact && ze.preencode(e, d.contact),
1009 o >= 9 && d.readonly && Ci.preencode(e, d.readonly),
1010 o >= 17 && d.additionalNodes && Ge.preencode(e, d.additionalNodes),
1011 o >= 29 && d.buildType && vi.preencode(e, d.buildType))
1012 },
1013 encode(d, n) {
1014 const c =
1015 (n.room ? 1 : 0) |
1016 (n.identity ? 2 : 0) |
1017 (n.contact ? 4 : 0) |
1018 (o >= 9 && n.readonly ? 8 : 0) |
1019 (o >= 17 && n.additionalNodes ? 16 : 0) |
1020 (o >= 29 && n.buildType ? 32 : 0)
1021 ;(e.uint.encode(d, c),
1022 n.room && We.encode(d, n.room),
1023 n.identity && He.encode(d, n.identity),
1024 n.contact && ze.encode(d, n.contact),
1025 o >= 9 && n.readonly && Ci.encode(d, n.readonly),
1026 o >= 17 && n.additionalNodes && Ge.encode(d, n.additionalNodes),
1027 o >= 29 && n.buildType && vi.encode(d, n.buildType))
1028 },
1029 decode(d) {
1030 const n = e.uint.decode(d)
1031 return {
1032 room: 1 & n ? We.decode(d) : null,
1033 identity: 2 & n ? He.decode(d) : null,
1034 contact: 4 & n ? ze.decode(d) : null,
1035 readonly: o >= 9 && 8 & n ? Ci.decode(d) : null,
1036 additionalNodes: o >= 17 && 16 & n ? Ge.decode(d) : null,
1037 buildType: o >= 29 && 32 & n ? vi.decode(d) : null,
1038 }
1039 },
1040 },
1041 Xe = _,
1042 Ye = {
1043 preencode(d, o) {
1044 ;(Xe.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
1045 },
1046 encode(d, o) {
1047 ;(Xe.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
1048 },
1049 decode: (d) => ({ header: Xe.decode(d), blindRequest: e.buffer.decode(d) }),
1050 },
1051 Ze = _,
1052 $e = {
1053 preencode(e, d) {
1054 ;(Ze.preencode(e, d.header), e.end++, d.profile && Si.preencode(e, d.profile))
1055 },
1056 encode(d, o) {
1057 const n = o.profile ? 1 : 0
1058 ;(Ze.encode(d, o.header), e.uint.encode(d, n), o.profile && Si.encode(d, o.profile))
1059 },
1060 decode: (d) => ({ header: Ze.decode(d), profile: 1 & e.uint.decode(d) ? Si.decode(d) : null }),
1061 },
1062 _e = { preencode(e, d) {}, encode(e, d) {}, decode: (e) => ({}) },
1063 ed = _e,
1064 dd = Ke,
1065 od = {
1066 preencode(d, o) {
1067 ;(e.fixed32.preencode(d, o.deviceKey),
1068 e.fixed32.preencode(d, o.id),
1069 dd.preencode(d, o.request))
1070 },
1071 encode(d, o) {
1072 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.id), dd.encode(d, o.request))
1073 },
1074 decode: (d) => ({
1075 deviceKey: e.fixed32.decode(d),
1076 id: e.fixed32.decode(d),
1077 request: dd.decode(d),
1078 }),
1079 },
1080 nd = _,
1081 cd = Ce,
1082 rd = {
1083 preencode(d, o) {
1084 ;(nd.preencode(d, o.header),
1085 e.fixed32.preencode(d, o.deviceKey),
1086 d.end++,
1087 o.identity && cd.preencode(d, o.identity))
1088 },
1089 encode(d, o) {
1090 const n = o.identity ? 1 : 0
1091 ;(nd.encode(d, o.header),
1092 e.fixed32.encode(d, o.deviceKey),
1093 e.uint.encode(d, n),
1094 o.identity && cd.encode(d, o.identity))
1095 },
1096 decode: (d) => ({
1097 header: nd.decode(d),
1098 deviceKey: e.fixed32.decode(d),
1099 identity: 1 & e.uint.decode(d) ? cd.decode(d) : null,
1100 }),
1101 },
1102 td = _,
1103 id = {
1104 preencode(d, o) {
1105 ;(td.preencode(d, o.header), e.fixed32.preencode(d, o.deviceKey))
1106 },
1107 encode(d, o) {
1108 ;(td.encode(d, o.header), e.fixed32.encode(d, o.deviceKey))
1109 },
1110 decode: (d) => ({ header: td.decode(d), deviceKey: e.fixed32.decode(d) }),
1111 },
1112 ad = e.frame(C),
1113 sd = ue,
1114 pd = {
1115 preencode(d, o) {
1116 ;(e.fixed32.preencode(d, o.key), ad.preencode(d, o.status), sd.preencode(d, o.profile))
1117 },
1118 encode(d, o) {
1119 ;(e.fixed32.encode(d, o.key), ad.encode(d, o.status), sd.encode(d, o.profile))
1120 },
1121 decode: (d) => ({ key: e.fixed32.decode(d), status: ad.decode(d), profile: sd.decode(d) }),
1122 },
1123 ud = ad,
1124 ld = ue,
1125 fd = {
1126 preencode(d, o) {
1127 ;(e.fixed32.preencode(d, o.key),
1128 ud.preencode(d, o.status),
1129 ld.preencode(d, o.profile),
1130 d.end++,
1131 o.proofs && Fi.preencode(d, o.proofs))
1132 },
1133 encode(d, o) {
1134 const n = o.proofs ? 1 : 0
1135 ;(e.fixed32.encode(d, o.key),
1136 ud.encode(d, o.status),
1137 ld.encode(d, o.profile),
1138 e.uint.encode(d, n),
1139 o.proofs && Fi.encode(d, o.proofs))
1140 },
1141 decode: (d) => ({
1142 key: e.fixed32.decode(d),
1143 status: ud.decode(d),
1144 profile: ld.decode(d),
1145 proofs: 1 & e.uint.decode(d) ? Fi.decode(d) : null,
1146 }),
1147 },
1148 md = {
1149 preencode(d, o) {
1150 ;(e.fixed32.preencode(d, o.key),
1151 d.end++,
1152 o.profileAttestation && e.buffer.preencode(d, o.profileAttestation),
1153 o.latestReceipt && e.buffer.preencode(d, o.latestReceipt))
1154 },
1155 encode(d, o) {
1156 const n = (o.profileAttestation ? 1 : 0) | (o.latestReceipt ? 2 : 0)
1157 ;(e.fixed32.encode(d, o.key),
1158 e.uint.encode(d, n),
1159 o.profileAttestation && e.buffer.encode(d, o.profileAttestation),
1160 o.latestReceipt && e.buffer.encode(d, o.latestReceipt))
1161 },
1162 decode(d) {
1163 const o = e.fixed32.decode(d),
1164 n = e.uint.decode(d)
1165 return {
1166 key: o,
1167 profileAttestation: 1 & n ? e.buffer.decode(d) : null,
1168 latestReceipt: 2 & n ? e.buffer.decode(d) : null,
1169 }
1170 },
1171 },
1172 yd = _,
1173 xd = ve,
1174 bd = {
1175 preencode(e, d) {
1176 ;(yd.preencode(e, d.header), xd.preencode(e, d.member))
1177 },
1178 encode(e, d) {
1179 ;(yd.encode(e, d.header), xd.encode(e, d.member))
1180 },
1181 decode: (e) => ({ header: yd.decode(e), member: xd.decode(e) }),
1182 },
1183 vd = _,
1184 kd = e.frame(S),
1185 gd = {
1186 preencode(d, o) {
1187 ;(vd.preencode(d, o.header),
1188 e.fixed32.preencode(d, o.memberKey),
1189 e.uint.preencode(d, o.key),
1190 kd.preencode(d, o.status))
1191 },
1192 encode(d, o) {
1193 ;(vd.encode(d, o.header),
1194 e.fixed32.encode(d, o.memberKey),
1195 e.uint.encode(d, o.key),
1196 kd.encode(d, o.status))
1197 },
1198 decode: (d) => ({
1199 header: vd.decode(d),
1200 memberKey: e.fixed32.decode(d),
1201 key: e.uint.decode(d),
1202 status: kd.decode(d),
1203 }),
1204 },
1205 Kd = _,
1206 hd = {
1207 preencode(d, o) {
1208 ;(Kd.preencode(d, o.header), e.fixed32.preencode(d, o.key), d.end++)
1209 },
1210 encode(d, o) {
1211 const n = (o.isModerator ? 1 : 0) | (o.isAdmin ? 2 : 0)
1212 ;(Kd.encode(d, o.header), e.fixed32.encode(d, o.key), e.uint.encode(d, n))
1213 },
1214 decode(d) {
1215 const o = Kd.decode(d),
1216 n = e.fixed32.decode(d),
1217 c = e.uint.decode(d)
1218 return { header: o, key: n, isModerator: !!(1 & c), isAdmin: !!(2 & c) }
1219 },
1220 },
1221 wd = _,
1222 Pd = {
1223 preencode(d, o) {
1224 ;(wd.preencode(d, o.header), e.fixed32.preencode(d, o.key))
1225 },
1226 encode(d, o) {
1227 ;(wd.encode(d, o.header), e.fixed32.encode(d, o.key))
1228 },
1229 decode: (d) => ({ header: wd.decode(d), key: e.fixed32.decode(d) }),
1230 },
1231 Td = {
1232 preencode(d, o) {
1233 ;(e.fixed32.preencode(d, o.key), e.uint.preencode(d, o.mentions))
1234 },
1235 encode(d, o) {
1236 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, o.mentions))
1237 },
1238 decode: (d) => ({ key: e.fixed32.decode(d), mentions: e.uint.decode(d) }),
1239 },
1240 Rd = {
1241 preencode(d, o) {
1242 ;(d.end++, o.memberKey && e.fixed32.preencode(d, o.memberKey))
1243 },
1244 encode(d, o) {
1245 const n = o.memberKey ? 1 : 0
1246 ;(e.uint.encode(d, n), o.memberKey && e.fixed32.encode(d, o.memberKey))
1247 },
1248 decode: (d) => ({ memberKey: 1 & e.uint.decode(d) ? e.fixed32.decode(d) : null }),
1249 },
1250 Ad = Rd,
1251 Md = {
1252 preencode(d, o) {
1253 ;(d.end++, o.from && e.string.preencode(d, o.from), o.to && e.string.preencode(d, o.to))
1254 },
1255 encode(d, o) {
1256 const n = (o.from ? 1 : 0) | (o.to ? 2 : 0)
1257 ;(e.uint.encode(d, n), o.from && e.string.encode(d, o.from), o.to && e.string.encode(d, o.to))
1258 },
1259 decode(d) {
1260 const o = e.uint.decode(d)
1261 return { from: 1 & o ? e.string.decode(d) : null, to: 2 & o ? e.string.decode(d) : null }
1262 },
1263 },
1264 Dd = e.frame(Rd),
1265 Cd = e.frame(Ad),
1266 Sd = e.frame(Md),
1267 Fd = {
1268 preencode(d, n) {
1269 const c =
1270 (n.memberJoined ? 1 : 0) |
1271 (n.memberLeft ? 2 : 0) |
1272 (n.titleChanged ? 4 : 0) |
1273 (n.callStarted ? 8 : 0) |
1274 (n.callHangup ? 16 : 0) |
1275 (n.callMissed ? 32 : 0) |
1276 (o >= 4 && n.roomAvatarChanged ? 64 : 0) |
1277 (o >= 4 && n.invitationCreated ? 128 : 0) |
1278 (o >= 4 && n.memberRemoved ? 256 : 0) |
1279 (o >= 27 && n.locationShared ? 512 : 0)
1280 ;(e.uint.preencode(d, c),
1281 n.memberJoined && Dd.preencode(d, n.memberJoined),
1282 n.memberLeft && Cd.preencode(d, n.memberLeft),
1283 n.titleChanged && Sd.preencode(d, n.titleChanged),
1284 o >= 4 && n.memberRemoved && Ii.preencode(d, n.memberRemoved),
1285 o >= 27 && n.locationShared && Li.preencode(d, n.locationShared))
1286 },
1287 encode(d, n) {
1288 const c =
1289 (n.memberJoined ? 1 : 0) |
1290 (n.memberLeft ? 2 : 0) |
1291 (n.titleChanged ? 4 : 0) |
1292 (n.callStarted ? 8 : 0) |
1293 (n.callHangup ? 16 : 0) |
1294 (n.callMissed ? 32 : 0) |
1295 (o >= 4 && n.roomAvatarChanged ? 64 : 0) |
1296 (o >= 4 && n.invitationCreated ? 128 : 0) |
1297 (o >= 4 && n.memberRemoved ? 256 : 0) |
1298 (o >= 27 && n.locationShared ? 512 : 0)
1299 ;(e.uint.encode(d, c),
1300 n.memberJoined && Dd.encode(d, n.memberJoined),
1301 n.memberLeft && Cd.encode(d, n.memberLeft),
1302 n.titleChanged && Sd.encode(d, n.titleChanged),
1303 o >= 4 && n.memberRemoved && Ii.encode(d, n.memberRemoved),
1304 o >= 27 && n.locationShared && Li.encode(d, n.locationShared))
1305 },
1306 decode(d) {
1307 const n = e.uint.decode(d)
1308 return {
1309 memberJoined: 1 & n ? Dd.decode(d) : null,
1310 memberLeft: 2 & n ? Cd.decode(d) : null,
1311 titleChanged: 4 & n ? Sd.decode(d) : null,
1312 callStarted: !!(8 & n),
1313 callHangup: !!(16 & n),
1314 callMissed: !!(32 & n),
1315 roomAvatarChanged: o >= 4 && !!(64 & n),
1316 invitationCreated: o >= 4 && !!(128 & n),
1317 memberRemoved: o >= 4 && 256 & n ? Ii.decode(d) : null,
1318 locationShared: o >= 27 && 512 & n ? Li.decode(d) : null,
1319 }
1320 },
1321 },
1322 Id = {
1323 preencode(e, d) {
1324 ;(e.end++, o >= 27 && d.locationShared && qi.preencode(e, d.locationShared))
1325 },
1326 encode(d, n) {
1327 const c =
1328 (n.callStarted ? 1 : 0) |
1329 (n.callHangup ? 2 : 0) |
1330 (n.callMissed ? 4 : 0) |
1331 (o >= 27 && n.locationShared ? 8 : 0)
1332 ;(e.uint.encode(d, c), o >= 27 && n.locationShared && qi.encode(d, n.locationShared))
1333 },
1334 decode(d) {
1335 const n = e.uint.decode(d)
1336 return {
1337 callStarted: !!(1 & n),
1338 callHangup: !!(2 & n),
1339 callMissed: !!(4 & n),
1340 locationShared: o >= 27 && 8 & n ? qi.decode(d) : null,
1341 }
1342 },
1343 },
1344 Ld = {
1345 preencode(d, o) {
1346 ;(e.uint.preencode(d, o.start), e.uint.preencode(d, o.length))
1347 },
1348 encode(d, o) {
1349 ;(e.uint.encode(d, o.start), e.uint.encode(d, o.length))
1350 },
1351 decode: (d) => ({ start: e.uint.decode(d), length: e.uint.decode(d) }),
1352 },
1353 qd = e.frame(Ld),
1354 jd = {
1355 preencode(d, o) {
1356 ;(qd.preencode(d, o.range), e.string.preencode(d, o.content))
1357 },
1358 encode(d, o) {
1359 ;(qd.encode(d, o.range), e.string.encode(d, o.content))
1360 },
1361 decode: (d) => ({ range: qd.decode(d), content: e.string.decode(d) }),
1362 },
1363 Ed = qd,
1364 Bd = {
1365 preencode(d, o) {
1366 ;(Ed.preencode(d, o.range), e.fixed32.preencode(d, o.memberKey))
1367 },
1368 encode(d, o) {
1369 ;(Ed.encode(d, o.range), e.fixed32.encode(d, o.memberKey))
1370 },
1371 decode: (d) => ({ range: Ed.decode(d), memberKey: e.fixed32.decode(d) }),
1372 },
1373 Nd = K,
1374 Vd = e.array(e.uint),
1375 Od = {
1376 preencode(d, n) {
1377 ;(d.end++,
1378 n.title && e.string.preencode(d, n.title),
1379 n.description && e.string.preencode(d, n.description),
1380 n.file && Nd.preencode(d, n.file),
1381 o >= 12 && n.files && Vd.preencode(d, n.files))
1382 },
1383 encode(d, n) {
1384 const c =
1385 (n.title ? 1 : 0) |
1386 (n.description ? 2 : 0) |
1387 (n.file ? 4 : 0) |
1388 (o >= 12 && n.files ? 8 : 0)
1389 ;(e.uint.encode(d, c),
1390 n.title && e.string.encode(d, n.title),
1391 n.description && e.string.encode(d, n.description),
1392 n.file && Nd.encode(d, n.file),
1393 o >= 12 && n.files && Vd.encode(d, n.files))
1394 },
1395 decode(d) {
1396 const n = e.uint.decode(d)
1397 return {
1398 title: 1 & n ? e.string.decode(d) : null,
1399 description: 2 & n ? e.string.decode(d) : null,
1400 file: 4 & n ? Nd.decode(d) : null,
1401 files: o >= 12 && 8 & n ? Vd.decode(d) : null,
1402 }
1403 },
1404 },
1405 Ud = qd,
1406 Jd = e.frame(Od),
1407 Wd = {
1408 preencode(d, o) {
1409 ;(Ud.preencode(d, o.range),
1410 e.string.preencode(d, o.url),
1411 d.end++,
1412 o.preview && Jd.preencode(d, o.preview))
1413 },
1414 encode(d, o) {
1415 const n = o.preview ? 1 : 0
1416 ;(Ud.encode(d, o.range),
1417 e.string.encode(d, o.url),
1418 e.uint.encode(d, n),
1419 o.preview && Jd.encode(d, o.preview))
1420 },
1421 decode: (d) => ({
1422 range: Ud.decode(d),
1423 url: e.string.decode(d),
1424 preview: 1 & e.uint.decode(d) ? Jd.decode(d) : null,
1425 }),
1426 },
1427 Hd = e.array(e.frame(Bd)),
1428 zd = e.array(e.frame(Wd)),
1429 Gd = zd,
1430 Qd = e.array(e.frame(Ld)),
1431 Xd = Qd,
1432 Yd = Qd,
1433 Zd = e.array(e.frame(jd)),
1434 $d = Qd,
1435 _d = Qd,
1436 eo = {
1437 preencode(d, n) {
1438 const c =
1439 (n.mention ? 1 : 0) |
1440 (n.httpLink ? 2 : 0) |
1441 (n.pearLink ? 4 : 0) |
1442 (n.bold ? 8 : 0) |
1443 (n.italic ? 16 : 0) |
1444 (n.code ? 32 : 0) |
1445 (n.emoji ? 64 : 0) |
1446 (n.codeBlock ? 128 : 0) |
1447 (n.strike ? 256 : 0) |
1448 (o >= 17 && n.translation ? 512 : 0)
1449 ;(e.uint.preencode(d, c),
1450 n.mention && Hd.preencode(d, n.mention),
1451 n.httpLink && zd.preencode(d, n.httpLink),
1452 n.pearLink && Gd.preencode(d, n.pearLink),
1453 n.bold && Qd.preencode(d, n.bold),
1454 n.italic && Xd.preencode(d, n.italic),
1455 n.code && Yd.preencode(d, n.code),
1456 n.emoji && Zd.preencode(d, n.emoji),
1457 n.codeBlock && $d.preencode(d, n.codeBlock),
1458 n.strike && _d.preencode(d, n.strike),
1459 o >= 17 && n.translation && ji.preencode(d, n.translation))
1460 },
1461 encode(d, n) {
1462 const c =
1463 (n.mention ? 1 : 0) |
1464 (n.httpLink ? 2 : 0) |
1465 (n.pearLink ? 4 : 0) |
1466 (n.bold ? 8 : 0) |
1467 (n.italic ? 16 : 0) |
1468 (n.code ? 32 : 0) |
1469 (n.emoji ? 64 : 0) |
1470 (n.codeBlock ? 128 : 0) |
1471 (n.strike ? 256 : 0) |
1472 (o >= 17 && n.translation ? 512 : 0)
1473 ;(e.uint.encode(d, c),
1474 n.mention && Hd.encode(d, n.mention),
1475 n.httpLink && zd.encode(d, n.httpLink),
1476 n.pearLink && Gd.encode(d, n.pearLink),
1477 n.bold && Qd.encode(d, n.bold),
1478 n.italic && Xd.encode(d, n.italic),
1479 n.code && Yd.encode(d, n.code),
1480 n.emoji && Zd.encode(d, n.emoji),
1481 n.codeBlock && $d.encode(d, n.codeBlock),
1482 n.strike && _d.encode(d, n.strike),
1483 o >= 17 && n.translation && ji.encode(d, n.translation))
1484 },
1485 decode(d) {
1486 const n = e.uint.decode(d)
1487 return {
1488 mention: 1 & n ? Hd.decode(d) : null,
1489 httpLink: 2 & n ? zd.decode(d) : null,
1490 pearLink: 4 & n ? Gd.decode(d) : null,
1491 bold: 8 & n ? Qd.decode(d) : null,
1492 italic: 16 & n ? Xd.decode(d) : null,
1493 code: 32 & n ? Yd.decode(d) : null,
1494 emoji: 64 & n ? Zd.decode(d) : null,
1495 codeBlock: 128 & n ? $d.decode(d) : null,
1496 strike: 256 & n ? _d.decode(d) : null,
1497 translation: o >= 17 && 512 & n ? ji.decode(d) : null,
1498 }
1499 },
1500 },
1501 oo = e.array(e.frame(g)),
1502 no = e.frame(eo),
1503 co = e.frame(Id),
1504 ro = {
1505 preencode(d, o) {
1506 ;(d.end++,
1507 o.text && e.string.preencode(d, o.text),
1508 o.files && oo.preencode(d, o.files),
1509 o.display && no.preencode(d, o.display),
1510 o.replyTo && c.preencode(d, o.replyTo),
1511 o.parent && c.preencode(d, o.parent),
1512 o.event && co.preencode(d, o.event))
1513 },
1514 encode(d, n) {
1515 const r =
1516 (n.text ? 1 : 0) |
1517 (n.files ? 2 : 0) |
1518 (n.display ? 4 : 0) |
1519 (n.replyTo ? 8 : 0) |
1520 (n.parent ? 16 : 0) |
1521 (n.event ? 32 : 0) |
1522 (o >= 27 && n.forwarded ? 64 : 0)
1523 ;(e.uint.encode(d, r),
1524 n.text && e.string.encode(d, n.text),
1525 n.files && oo.encode(d, n.files),
1526 n.display && no.encode(d, n.display),
1527 n.replyTo && c.encode(d, n.replyTo),
1528 n.parent && c.encode(d, n.parent),
1529 n.event && co.encode(d, n.event))
1530 },
1531 decode(d) {
1532 const n = e.uint.decode(d)
1533 return {
1534 text: 1 & n ? e.string.decode(d) : null,
1535 files: 2 & n ? oo.decode(d) : null,
1536 display: 4 & n ? no.decode(d) : null,
1537 replyTo: 8 & n ? c.decode(d) : null,
1538 parent: 16 & n ? c.decode(d) : null,
1539 event: 32 & n ? co.decode(d) : null,
1540 forwarded: o >= 27 && !!(64 & n),
1541 }
1542 },
1543 },
1544 to = Vd,
1545 io = no,
1546 ao = {
1547 preencode(d, o) {
1548 ;(d.end++,
1549 o.text && e.string.preencode(d, o.text),
1550 o.files && to.preencode(d, o.files),
1551 o.display && io.preencode(d, o.display),
1552 o.replyTo && c.preencode(d, o.replyTo),
1553 o.parent && c.preencode(d, o.parent))
1554 },
1555 encode(d, n) {
1556 const r =
1557 (n.text ? 1 : 0) |
1558 (n.files ? 2 : 0) |
1559 (n.display ? 4 : 0) |
1560 (n.replyTo ? 8 : 0) |
1561 (n.parent ? 16 : 0) |
1562 (o >= 27 && n.forwarded ? 32 : 0)
1563 ;(e.uint.encode(d, r),
1564 n.text && e.string.encode(d, n.text),
1565 n.files && to.encode(d, n.files),
1566 n.display && io.encode(d, n.display),
1567 n.replyTo && c.encode(d, n.replyTo),
1568 n.parent && c.encode(d, n.parent))
1569 },
1570 decode(d) {
1571 const n = e.uint.decode(d)
1572 return {
1573 text: 1 & n ? e.string.decode(d) : null,
1574 files: 2 & n ? to.decode(d) : null,
1575 display: 4 & n ? io.decode(d) : null,
1576 replyTo: 8 & n ? c.decode(d) : null,
1577 parent: 16 & n ? c.decode(d) : null,
1578 forwarded: o >= 27 && !!(32 & n),
1579 }
1580 },
1581 },
1582 so = oo,
1583 po = no,
1584 uo = {
1585 preencode(d, o) {
1586 ;(d.end++,
1587 o.text && e.string.preencode(d, o.text),
1588 o.files && so.preencode(d, o.files),
1589 o.display && po.preencode(d, o.display),
1590 o.replyTo && c.preencode(d, o.replyTo),
1591 o.parent && c.preencode(d, o.parent))
1592 },
1593 encode(d, n) {
1594 const r =
1595 (n.text ? 1 : 0) |
1596 (n.files ? 2 : 0) |
1597 (n.display ? 4 : 0) |
1598 (n.replyTo ? 8 : 0) |
1599 (n.parent ? 16 : 0) |
1600 (o >= 27 && n.forwarded ? 32 : 0)
1601 ;(e.uint.encode(d, r),
1602 n.text && e.string.encode(d, n.text),
1603 n.files && so.encode(d, n.files),
1604 n.display && po.encode(d, n.display),
1605 n.replyTo && c.encode(d, n.replyTo),
1606 n.parent && c.encode(d, n.parent))
1607 },
1608 decode(d) {
1609 const n = e.uint.decode(d)
1610 return {
1611 text: 1 & n ? e.string.decode(d) : null,
1612 files: 2 & n ? so.decode(d) : null,
1613 display: 4 & n ? po.decode(d) : null,
1614 replyTo: 8 & n ? c.decode(d) : null,
1615 parent: 16 & n ? c.decode(d) : null,
1616 forwarded: o >= 27 && !!(32 & n),
1617 }
1618 },
1619 },
1620 lo = {
1621 preencode(e, d) {
1622 e.end++
1623 },
1624 encode(d, o) {
1625 const n = (o.isEdited ? 1 : 0) | (o.isDeleted ? 2 : 0) | (o.isPinned ? 4 : 0)
1626 e.uint.encode(d, n)
1627 },
1628 decode(d) {
1629 const o = e.uint.decode(d)
1630 return { isEdited: !!(1 & o), isDeleted: !!(2 & o), isPinned: !!(4 & o) }
1631 },
1632 },
1633 fo = {
1634 preencode(d, o) {
1635 ;(e.uint.preencode(d, o.thread), e.uint.preencode(d, o.index))
1636 },
1637 encode(d, o) {
1638 ;(e.uint.encode(d, o.thread), e.uint.encode(d, o.index))
1639 },
1640 decode: (d) => ({ thread: e.uint.decode(d), index: e.uint.decode(d) }),
1641 },
1642 mo = e.frame(O),
1643 yo = {
1644 preencode(d, o) {
1645 ;(e.uint.preencode(d, o.id),
1646 e.uint.preencode(d, o.count),
1647 d.end++,
1648 o.parent && c.preencode(d, o.parent),
1649 o.stats && mo.preencode(d, o.stats))
1650 },
1651 encode(d, o) {
1652 const n = (o.parent ? 1 : 0) | (o.stats ? 2 : 0)
1653 ;(e.uint.encode(d, o.id),
1654 e.uint.encode(d, o.count),
1655 e.uint.encode(d, n),
1656 o.parent && c.encode(d, o.parent),
1657 o.stats && mo.encode(d, o.stats))
1658 },
1659 decode(d) {
1660 const o = e.uint.decode(d),
1661 n = e.uint.decode(d),
1662 r = e.uint.decode(d)
1663 return {
1664 id: o,
1665 count: n,
1666 parent: 1 & r ? c.decode(d) : null,
1667 stats: 2 & r ? mo.decode(d) : null,
1668 }
1669 },
1670 },
1671 xo = e.frame(lo),
1672 bo = e.frame(ao),
1673 vo = e.frame(Fd),
1674 ko = {
1675 preencode(d, o) {
1676 ;(fo.preencode(d, o.id),
1677 c.preencode(d, o.oplog),
1678 e.uint.preencode(d, o.clock),
1679 e.uint.preencode(d, o.timestamp),
1680 d.end++,
1681 o.editedAt && e.uint.preencode(d, o.editedAt),
1682 xo.preencode(d, o.status),
1683 o.message && bo.preencode(d, o.message),
1684 o.event && vo.preencode(d, o.event))
1685 },
1686 encode(d, o) {
1687 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1688 ;(fo.encode(d, o.id),
1689 c.encode(d, o.oplog),
1690 e.uint.encode(d, o.clock),
1691 e.uint.encode(d, o.timestamp),
1692 e.uint.encode(d, n),
1693 o.editedAt && e.uint.encode(d, o.editedAt),
1694 xo.encode(d, o.status),
1695 o.message && bo.encode(d, o.message),
1696 o.event && vo.encode(d, o.event))
1697 },
1698 decode(d) {
1699 const o = fo.decode(d),
1700 n = c.decode(d),
1701 r = e.uint.decode(d),
1702 t = e.uint.decode(d),
1703 i = e.uint.decode(d)
1704 return {
1705 id: o,
1706 oplog: n,
1707 clock: r,
1708 timestamp: t,
1709 editedAt: 1 & i ? e.uint.decode(d) : 0,
1710 status: xo.decode(d),
1711 message: 2 & i ? bo.decode(d) : null,
1712 event: 4 & i ? vo.decode(d) : null,
1713 }
1714 },
1715 },
1716 go = xo,
1717 Ko = e.frame(uo),
1718 ho = vo,
1719 wo = {
1720 preencode(d, o) {
1721 ;(fo.preencode(d, o.id),
1722 c.preencode(d, o.oplog),
1723 e.uint.preencode(d, o.clock),
1724 e.uint.preencode(d, o.timestamp),
1725 d.end++,
1726 o.editedAt && e.uint.preencode(d, o.editedAt),
1727 go.preencode(d, o.status),
1728 o.message && Ko.preencode(d, o.message),
1729 o.event && ho.preencode(d, o.event))
1730 },
1731 encode(d, o) {
1732 const n = (o.editedAt ? 1 : 0) | (o.message ? 2 : 0) | (o.event ? 4 : 0)
1733 ;(fo.encode(d, o.id),
1734 c.encode(d, o.oplog),
1735 e.uint.encode(d, o.clock),
1736 e.uint.encode(d, o.timestamp),
1737 e.uint.encode(d, n),
1738 o.editedAt && e.uint.encode(d, o.editedAt),
1739 go.encode(d, o.status),
1740 o.message && Ko.encode(d, o.message),
1741 o.event && ho.encode(d, o.event))
1742 },
1743 decode(d) {
1744 const o = fo.decode(d),
1745 n = c.decode(d),
1746 r = e.uint.decode(d),
1747 t = e.uint.decode(d),
1748 i = e.uint.decode(d)
1749 return {
1750 id: o,
1751 oplog: n,
1752 clock: r,
1753 timestamp: t,
1754 editedAt: 1 & i ? e.uint.decode(d) : 0,
1755 status: go.decode(d),
1756 message: 2 & i ? Ko.decode(d) : null,
1757 event: 4 & i ? ho.decode(d) : null,
1758 }
1759 },
1760 },
1761 Po = _,
1762 To = e.frame(ro),
1763 Ro = {
1764 preencode(e, d) {
1765 ;(Po.preencode(e, d.header), To.preencode(e, d.message))
1766 },
1767 encode(e, d) {
1768 ;(Po.encode(e, d.header), To.encode(e, d.message))
1769 },
1770 decode: (e) => ({ header: Po.decode(e), message: To.decode(e) }),
1771 },
1772 Ao = _,
1773 Mo = {
1774 preencode(e, d) {
1775 ;(Ao.preencode(e, d.header), c.preencode(e, d.oplog))
1776 },
1777 encode(e, d) {
1778 ;(Ao.encode(e, d.header), c.encode(e, d.oplog))
1779 },
1780 decode: (e) => ({ header: Ao.decode(e), oplog: c.decode(e) }),
1781 },
1782 Do = _,
1783 Co = To,
1784 So = {
1785 preencode(e, d) {
1786 ;(Do.preencode(e, d.header), c.preencode(e, d.oplog), Co.preencode(e, d.message))
1787 },
1788 encode(e, d) {
1789 ;(Do.encode(e, d.header), c.encode(e, d.oplog), Co.encode(e, d.message))
1790 },
1791 decode: (e) => ({ header: Do.decode(e), oplog: c.decode(e), message: Co.decode(e) }),
1792 },
1793 Fo = _,
1794 Io = {
1795 preencode(e, d) {
1796 ;(Fo.preencode(e, d.header), c.preencode(e, d.oplog), e.end++)
1797 },
1798 encode(d, o) {
1799 const n = o.isPinned ? 1 : 0
1800 ;(Fo.encode(d, o.header), c.encode(d, o.oplog), e.uint.encode(d, n))
1801 },
1802 decode: (d) => ({
1803 header: Fo.decode(d),
1804 oplog: c.decode(d),
1805 isPinned: !!(1 & e.uint.decode(d)),
1806 }),
1807 },
1808 Lo = {
1809 preencode(d, o) {
1810 ;(fo.preencode(d, o.id),
1811 e.fixed32.preencode(d, o.sender),
1812 e.uint.preencode(d, o.clock),
1813 e.string.preencode(d, o.reaction))
1814 },
1815 encode(d, o) {
1816 ;(fo.encode(d, o.id),
1817 e.fixed32.encode(d, o.sender),
1818 e.uint.encode(d, o.clock),
1819 e.string.encode(d, o.reaction))
1820 },
1821 decode: (d) => ({
1822 id: fo.decode(d),
1823 sender: e.fixed32.decode(d),
1824 clock: e.uint.decode(d),
1825 reaction: e.string.decode(d),
1826 }),
1827 },
1828 qo = {
1829 preencode(d, o) {
1830 ;(e.string.preencode(d, o.text), e.uint.preencode(d, o.count))
1831 },
1832 encode(d, o) {
1833 ;(e.string.encode(d, o.text), e.uint.encode(d, o.count))
1834 },
1835 decode: (d) => ({ text: e.string.decode(d), count: e.uint.decode(d) }),
1836 },
1837 jo = e.array(e.frame(qo)),
1838 Eo = {
1839 preencode(d, n) {
1840 ;(fo.preencode(d, n.id),
1841 e.uint.preencode(d, n.total),
1842 jo.preencode(d, n.reactions),
1843 d.end++,
1844 o >= 17 && n.editedAt && e.uint.preencode(d, n.editedAt))
1845 },
1846 encode(d, n) {
1847 const c = o >= 17 && n.editedAt ? 1 : 0
1848 ;(fo.encode(d, n.id),
1849 e.uint.encode(d, n.total),
1850 jo.encode(d, n.reactions),
1851 e.uint.encode(d, c),
1852 o >= 17 && n.editedAt && e.uint.encode(d, n.editedAt))
1853 },
1854 decode(d) {
1855 const n = fo.decode(d),
1856 c = e.uint.decode(d),
1857 r = jo.decode(d),
1858 t = d.start < d.end ? e.uint.decode(d) : 0
1859 return { id: n, total: c, reactions: r, editedAt: o >= 17 && 1 & t ? e.uint.decode(d) : 0 }
1860 },
1861 },
1862 Bo = _,
1863 No = {
1864 preencode(d, o) {
1865 ;(Bo.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
1866 },
1867 encode(d, o) {
1868 ;(Bo.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
1869 },
1870 decode: (d) => ({ header: Bo.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1871 },
1872 Vo = _,
1873 Oo = {
1874 preencode(d, o) {
1875 ;(Vo.preencode(d, o.header), c.preencode(d, o.oplog), e.string.preencode(d, o.reaction))
1876 },
1877 encode(d, o) {
1878 ;(Vo.encode(d, o.header), c.encode(d, o.oplog), e.string.encode(d, o.reaction))
1879 },
1880 decode: (d) => ({ header: Vo.decode(d), oplog: c.decode(d), reaction: e.string.decode(d) }),
1881 },
1882 Uo = _,
1883 Jo = e.frame(Z),
1884 Wo = {
1885 preencode(d, o) {
1886 ;(Uo.preencode(d, o.header), e.uint.preencode(d, o.key), Jo.preencode(d, o.config))
1887 },
1888 encode(d, o) {
1889 ;(Uo.encode(d, o.header), e.uint.encode(d, o.key), Jo.encode(d, o.config))
1890 },
1891 decode: (d) => ({ header: Uo.decode(d), key: e.uint.decode(d), config: Jo.decode(d) }),
1892 },
1893 Ho = {
1894 preencode(d, o) {
1895 ;(e.fixed32.preencode(d, o.memberKey),
1896 e.string.preencode(d, o.displayName),
1897 d.end++,
1898 o.avatar && Ei.preencode(d, o.avatar))
1899 },
1900 encode(d, o) {
1901 const n = o.avatar ? 1 : 0
1902 ;(e.fixed32.encode(d, o.memberKey),
1903 e.string.encode(d, o.displayName),
1904 e.uint.encode(d, n),
1905 o.avatar && Ei.encode(d, o.avatar))
1906 },
1907 decode: (d) => ({
1908 memberKey: e.fixed32.decode(d),
1909 displayName: e.string.decode(d),
1910 avatar: 1 & e.uint.decode(d) ? Ei.decode(d) : null,
1911 }),
1912 },
1913 zo = {
1914 preencode(d, o) {
1915 ;(e.fixed32.preencode(d, o.key), d.end++, o.username && e.string.preencode(d, o.username))
1916 },
1917 encode(d, o) {
1918 const n = o.username ? 1 : 0
1919 ;(e.fixed32.encode(d, o.key),
1920 e.uint.encode(d, n),
1921 o.username && e.string.encode(d, o.username))
1922 },
1923 decode: (d) => ({
1924 key: e.fixed32.decode(d),
1925 username: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
1926 }),
1927 },
1928 Go = e.frame(zo),
1929 Qo = {
1930 preencode(d, o) {
1931 ;(e.fixed32.preencode(d, o.publicKey),
1932 d.end++,
1933 o.discoveryCoreKey && e.fixed32.preencode(d, o.discoveryCoreKey),
1934 o.userRegistry && Go.preencode(d, o.userRegistry))
1935 },
1936 encode(d, o) {
1937 const n = (o.discoveryCoreKey ? 1 : 0) | (o.userRegistry ? 2 : 0)
1938 ;(e.fixed32.encode(d, o.publicKey),
1939 e.uint.encode(d, n),
1940 o.discoveryCoreKey && e.fixed32.encode(d, o.discoveryCoreKey),
1941 o.userRegistry && Go.encode(d, o.userRegistry))
1942 },
1943 decode(d) {
1944 const o = e.fixed32.decode(d),
1945 n = e.uint.decode(d)
1946 return {
1947 publicKey: o,
1948 discoveryCoreKey: 1 & n ? e.fixed32.decode(d) : null,
1949 userRegistry: 2 & n ? Go.decode(d) : null,
1950 }
1951 },
1952 },
1953 Xo = _,
1954 Yo = e.frame(G),
1955 Zo = e.frame(Q),
1956 $o = Jo,
1957 _o = e.frame(Qo),
1958 en = be,
1959 dn = e.array(e.frame(le)),
1960 on = {
1961 preencode(e, d) {
1962 ;(Xo.preencode(e, d.header),
1963 Yo.preencode(e, d.digest),
1964 Zo.preencode(e, d.capabilities),
1965 e.end++,
1966 d.config && $o.preencode(e, d.config),
1967 d.identity && _o.preencode(e, d.identity),
1968 d.bootstrapDevice && en.preencode(e, d.bootstrapDevice),
1969 d.initialMembers && dn.preencode(e, d.initialMembers))
1970 },
1971 encode(d, o) {
1972 const n =
1973 (o.config ? 1 : 0) |
1974 (o.identity ? 2 : 0) |
1975 (o.bootstrapDevice ? 4 : 0) |
1976 (o.initialMembers ? 8 : 0)
1977 ;(Xo.encode(d, o.header),
1978 Yo.encode(d, o.digest),
1979 Zo.encode(d, o.capabilities),
1980 e.uint.encode(d, n),
1981 o.config && $o.encode(d, o.config),
1982 o.identity && _o.encode(d, o.identity),
1983 o.bootstrapDevice && en.encode(d, o.bootstrapDevice),
1984 o.initialMembers && dn.encode(d, o.initialMembers))
1985 },
1986 decode(d) {
1987 const o = Xo.decode(d),
1988 n = Yo.decode(d),
1989 c = Zo.decode(d),
1990 r = e.uint.decode(d)
1991 return {
1992 header: o,
1993 digest: n,
1994 capabilities: c,
1995 config: 1 & r ? $o.decode(d) : null,
1996 identity: 2 & r ? _o.decode(d) : null,
1997 bootstrapDevice: 4 & r ? en.decode(d) : null,
1998 initialMembers: 8 & r ? dn.decode(d) : null,
1999 }
2000 },
2001 },
2002 nn = _,
2003 cn = {
2004 preencode(d, o) {
2005 ;(nn.preencode(d, o.header), e.uint.preencode(d, o.version))
2006 },
2007 encode(d, o) {
2008 ;(nn.encode(d, o.header), e.uint.encode(d, o.version))
2009 },
2010 decode: (d) => ({ header: nn.decode(d), version: e.uint.decode(d) }),
2011 },
2012 rn = _,
2013 tn = z,
2014 an = {
2015 preencode(d, o) {
2016 ;(rn.preencode(d, o.header), e.uint.preencode(d, o.key), tn.preencode(d, o.settings))
2017 },
2018 encode(d, o) {
2019 ;(rn.encode(d, o.header), e.uint.encode(d, o.key), tn.encode(d, o.settings))
2020 },
2021 decode: (d) => ({ header: rn.decode(d), key: e.uint.decode(d), settings: tn.decode(d) }),
2022 },
2023 sn = {
2024 preencode(d, o) {
2025 ;(e.fixed32.preencode(d, o.memberKey),
2026 Bi.preencode(d, o.status),
2027 d.end++,
2028 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2029 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2030 },
2031 encode(d, o) {
2032 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2033 ;(e.fixed32.encode(d, o.memberKey),
2034 Bi.encode(d, o.status),
2035 e.uint.encode(d, n),
2036 o.mailbox && e.fixed32.encode(d, o.mailbox),
2037 o.roomKey && e.fixed32.encode(d, o.roomKey))
2038 },
2039 decode(d) {
2040 const o = e.fixed32.decode(d),
2041 n = Bi.decode(d),
2042 c = e.uint.decode(d)
2043 return {
2044 memberKey: o,
2045 status: n,
2046 mailbox: 1 & c ? e.fixed32.decode(d) : null,
2047 roomKey: 2 & c ? e.fixed32.decode(d) : null,
2048 }
2049 },
2050 },
2051 pn = {
2052 preencode(d, o) {
2053 ;(e.fixed32.preencode(d, o.roomKey),
2054 e.buffer.preencode(d, o.encryptionKey),
2055 e.fixed32.preencode(d, o.seed),
2056 n.preencode(d, o.initiator),
2057 e.fixed32.preencode(d, o.fastForwardTo))
2058 },
2059 encode(d, o) {
2060 ;(e.fixed32.encode(d, o.roomKey),
2061 e.buffer.encode(d, o.encryptionKey),
2062 e.fixed32.encode(d, o.seed),
2063 n.encode(d, o.initiator),
2064 e.fixed32.encode(d, o.fastForwardTo))
2065 },
2066 decode: (d) => ({
2067 roomKey: e.fixed32.decode(d),
2068 encryptionKey: e.buffer.decode(d),
2069 seed: e.fixed32.decode(d),
2070 initiator: n.decode(d),
2071 fastForwardTo: e.fixed32.decode(d),
2072 }),
2073 },
2074 un = e.array(e.frame(pn)),
2075 ln = Y,
2076 fn = {
2077 preencode(e, d) {
2078 ;(un.preencode(e, d.sharedRooms), ln.preencode(e, d.blockedContacts))
2079 },
2080 encode(e, d) {
2081 ;(un.encode(e, d.sharedRooms), ln.encode(e, d.blockedContacts))
2082 },
2083 decode: (e) => ({ sharedRooms: un.decode(e), blockedContacts: ln.decode(e) }),
2084 },
2085 mn = _o,
2086 yn = {
2087 preencode(e, d) {
2088 mn.preencode(e, d.identity)
2089 },
2090 encode(e, d) {
2091 mn.encode(e, d.identity)
2092 },
2093 decode: (e) => ({ identity: mn.decode(e) }),
2094 },
2095 xn = {
2096 preencode(d, o) {
2097 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contacts))
2098 },
2099 encode(d, o) {
2100 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contacts))
2101 },
2102 decode: (d) => ({ rooms: e.uint.decode(d), contacts: e.uint.decode(d) }),
2103 },
2104 bn = {
2105 preencode(d, o) {
2106 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.contactRequests))
2107 },
2108 encode(d, o) {
2109 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.contactRequests))
2110 },
2111 decode: (d) => ({ rooms: e.uint.decode(d), contactRequests: e.uint.decode(d) }),
2112 },
2113 vn = {
2114 preencode(d, o) {
2115 e.buffer.preencode(d, o.entropy)
2116 },
2117 encode(d, o) {
2118 e.buffer.encode(d, o.entropy)
2119 },
2120 decode: (d) => ({ entropy: e.buffer.decode(d) }),
2121 },
2122 kn = {
2123 preencode(d, o) {
2124 ;(e.fixed32.preencode(d, o.publicKey),
2125 e.fixed32.preencode(d, o.devicePublicKey),
2126 e.fixed32.preencode(d, o.writerKey))
2127 },
2128 encode(d, o) {
2129 ;(e.fixed32.encode(d, o.publicKey),
2130 e.fixed32.encode(d, o.devicePublicKey),
2131 e.fixed32.encode(d, o.writerKey))
2132 },
2133 decode: (d) => ({
2134 publicKey: e.fixed32.decode(d),
2135 devicePublicKey: e.fixed32.decode(d),
2136 writerKey: e.fixed32.decode(d),
2137 }),
2138 },
2139 gn = e.frame(kn),
2140 Kn = {
2141 preencode(d, c) {
2142 ;(e.fixed32.preencode(d, c.id),
2143 e.fixed32.preencode(d, c.invitationSeed),
2144 e.fixed32.preencode(d, c.mailbox),
2145 t.preencode(d, c.responseKeyPair),
2146 n.preencode(d, c.initiator),
2147 n.preencode(d, c.inviter),
2148 d.end++,
2149 c.identity && gn.preencode(d, c.identity),
2150 o >= 29 && c.buildType && vi.preencode(d, c.buildType))
2151 },
2152 encode(d, c) {
2153 const r = (c.identity ? 1 : 0) | (o >= 29 && c.buildType ? 2 : 0)
2154 ;(e.fixed32.encode(d, c.id),
2155 e.fixed32.encode(d, c.invitationSeed),
2156 e.fixed32.encode(d, c.mailbox),
2157 t.encode(d, c.responseKeyPair),
2158 n.encode(d, c.initiator),
2159 n.encode(d, c.inviter),
2160 e.uint.encode(d, r),
2161 c.identity && gn.encode(d, c.identity),
2162 o >= 29 && c.buildType && vi.encode(d, c.buildType))
2163 },
2164 decode(d) {
2165 const c = e.fixed32.decode(d),
2166 r = e.fixed32.decode(d),
2167 i = e.fixed32.decode(d),
2168 a = t.decode(d),
2169 s = n.decode(d),
2170 p = n.decode(d),
2171 u = e.uint.decode(d)
2172 return {
2173 id: c,
2174 invitationSeed: r,
2175 mailbox: i,
2176 responseKeyPair: a,
2177 initiator: s,
2178 inviter: p,
2179 identity: 1 & u ? gn.decode(d) : null,
2180 buildType: o >= 29 && 2 & u ? vi.decode(d) : null,
2181 }
2182 },
2183 },
2184 hn = _,
2185 wn = {
2186 preencode(d, o) {
2187 ;(hn.preencode(d, o.header), e.buffer.preencode(d, o.blindResponse))
2188 },
2189 encode(d, o) {
2190 ;(hn.encode(d, o.header), e.buffer.encode(d, o.blindResponse))
2191 },
2192 decode: (d) => ({ header: hn.decode(d), blindResponse: e.buffer.decode(d) }),
2193 },
2194 Pn = _,
2195 Tn = e.frame(Kn),
2196 Rn = {
2197 preencode(e, d) {
2198 ;(Pn.preencode(e, d.header), Tn.preencode(e, d.invitation))
2199 },
2200 encode(e, d) {
2201 ;(Pn.encode(e, d.header), Tn.encode(e, d.invitation))
2202 },
2203 decode: (e) => ({ header: Pn.decode(e), invitation: Tn.decode(e) }),
2204 },
2205 An = _,
2206 Mn = {
2207 preencode(d, o) {
2208 ;(An.preencode(d, o.header), e.fixed32.preencode(d, o.id))
2209 },
2210 encode(d, o) {
2211 ;(An.encode(d, o.header), e.fixed32.encode(d, o.id))
2212 },
2213 decode: (d) => ({ header: An.decode(d), id: e.fixed32.decode(d) }),
2214 },
2215 Dn = {
2216 preencode(d, o) {
2217 ;(e.fixed32.preencode(d, o.publicKey),
2218 e.fixed32.preencode(d, o.devicePublicKey),
2219 d.end++,
2220 o.privateProfileKey && e.fixed32.preencode(d, o.privateProfileKey),
2221 o.deviceKeyPair && t.preencode(d, o.deviceKeyPair),
2222 e.buffer.preencode(d, o.deviceProof))
2223 },
2224 encode(d, o) {
2225 const n = (o.privateProfileKey ? 1 : 0) | (o.deviceKeyPair ? 2 : 0)
2226 ;(e.fixed32.encode(d, o.publicKey),
2227 e.fixed32.encode(d, o.devicePublicKey),
2228 e.uint.encode(d, n),
2229 o.privateProfileKey && e.fixed32.encode(d, o.privateProfileKey),
2230 o.deviceKeyPair && t.encode(d, o.deviceKeyPair),
2231 e.buffer.encode(d, o.deviceProof))
2232 },
2233 decode(d) {
2234 const o = e.fixed32.decode(d),
2235 n = e.fixed32.decode(d),
2236 c = e.uint.decode(d)
2237 return {
2238 publicKey: o,
2239 devicePublicKey: n,
2240 privateProfileKey: 1 & c ? e.fixed32.decode(d) : null,
2241 deviceKeyPair: 2 & c ? t.decode(d) : null,
2242 deviceProof: e.buffer.decode(d),
2243 }
2244 },
2245 },
2246 Cn = {
2247 preencode(e, d) {
2248 e.end++
2249 },
2250 encode(d, n) {
2251 const c =
2252 (n.isActive ? 1 : 0) |
2253 (n.isFullyMuted ? 2 : 0) |
2254 (n.isMentionsOnlyMuted ? 4 : 0) |
2255 (o >= 14 && n.isReadOnly ? 8 : 0) |
2256 (o >= 27 && n.isFavorite ? 16 : 0)
2257 e.uint.encode(d, c)
2258 },
2259 decode(d) {
2260 const n = e.uint.decode(d)
2261 return {
2262 isActive: !!(1 & n),
2263 isFullyMuted: !!(2 & n),
2264 isMentionsOnlyMuted: !!(4 & n),
2265 isReadOnly: o >= 14 && !!(8 & n),
2266 isFavorite: o >= 27 && !!(16 & n),
2267 }
2268 },
2269 },
2270 Sn = e.frame(Cn),
2271 Fn = e.frame(Dn),
2272 In = gn,
2273 Ln = {
2274 preencode(d, c) {
2275 ;(e.fixed32.preencode(d, c.roomKey),
2276 e.buffer.preencode(d, c.encryptionKey),
2277 e.fixed32.preencode(d, c.mailbox),
2278 Sn.preencode(d, c.status),
2279 e.uint.preencode(d, c.clock),
2280 d.end++,
2281 c.initiator && n.preencode(d, c.initiator),
2282 c.fastForwardTo && e.fixed32.preencode(d, c.fastForwardTo),
2283 c.identitySwap && Fn.preencode(d, c.identitySwap),
2284 o >= 9 && c.identitySwapV2 && In.preencode(d, c.identitySwapV2),
2285 o >= 15 && c.contact && e.fixed32.preencode(d, c.contact))
2286 },
2287 encode(d, c) {
2288 const r =
2289 (c.initiator ? 1 : 0) |
2290 (c.fastForwardTo ? 2 : 0) |
2291 (c.identitySwap ? 4 : 0) |
2292 (o >= 9 && c.identitySwapV2 ? 8 : 0) |
2293 (o >= 15 && c.contact ? 16 : 0)
2294 ;(e.fixed32.encode(d, c.roomKey),
2295 e.buffer.encode(d, c.encryptionKey),
2296 e.fixed32.encode(d, c.mailbox),
2297 Sn.encode(d, c.status),
2298 e.uint.encode(d, c.clock),
2299 e.uint.encode(d, r),
2300 c.initiator && n.encode(d, c.initiator),
2301 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2302 c.identitySwap && Fn.encode(d, c.identitySwap),
2303 o >= 9 && c.identitySwapV2 && In.encode(d, c.identitySwapV2),
2304 o >= 15 && c.contact && e.fixed32.encode(d, c.contact))
2305 },
2306 decode(d) {
2307 const c = e.fixed32.decode(d),
2308 r = e.buffer.decode(d),
2309 t = e.fixed32.decode(d),
2310 i = Sn.decode(d),
2311 a = e.uint.decode(d),
2312 s = e.uint.decode(d)
2313 return {
2314 roomKey: c,
2315 encryptionKey: r,
2316 mailbox: t,
2317 status: i,
2318 clock: a,
2319 initiator: 1 & s ? n.decode(d) : null,
2320 fastForwardTo: 2 & s ? e.fixed32.decode(d) : null,
2321 identitySwap: 4 & s ? Fn.decode(d) : null,
2322 identitySwapV2: o >= 9 && 8 & s ? In.decode(d) : null,
2323 contact: o >= 15 && 16 & s ? e.fixed32.decode(d) : null,
2324 }
2325 },
2326 },
2327 qn = _,
2328 jn = {
2329 preencode(d, o) {
2330 ;(qn.preencode(d, o.header),
2331 e.fixed32.preencode(d, o.roomKey),
2332 e.buffer.preencode(d, o.encryptionKey),
2333 e.fixed32.preencode(d, o.mailbox),
2334 d.end++,
2335 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2336 o.initiator && n.preencode(d, o.initiator),
2337 o.dm && e.fixed32.preencode(d, o.dm))
2338 },
2339 encode(d, c) {
2340 const r =
2341 (c.fastForwardTo ? 1 : 0) |
2342 (c.initiator ? 2 : 0) |
2343 (c.dm ? 4 : 0) |
2344 (o >= 14 && c.isReadOnly ? 8 : 0)
2345 ;(qn.encode(d, c.header),
2346 e.fixed32.encode(d, c.roomKey),
2347 e.buffer.encode(d, c.encryptionKey),
2348 e.fixed32.encode(d, c.mailbox),
2349 e.uint.encode(d, r),
2350 c.fastForwardTo && e.fixed32.encode(d, c.fastForwardTo),
2351 c.initiator && n.encode(d, c.initiator),
2352 c.dm && e.fixed32.encode(d, c.dm))
2353 },
2354 decode(d) {
2355 const c = qn.decode(d),
2356 r = e.fixed32.decode(d),
2357 t = e.buffer.decode(d),
2358 i = e.fixed32.decode(d),
2359 a = e.uint.decode(d)
2360 return {
2361 header: c,
2362 roomKey: r,
2363 encryptionKey: t,
2364 mailbox: i,
2365 fastForwardTo: 1 & a ? e.fixed32.decode(d) : null,
2366 initiator: 2 & a ? n.decode(d) : null,
2367 dm: 4 & a ? e.fixed32.decode(d) : null,
2368 isReadOnly: o >= 14 && !!(8 & a),
2369 }
2370 },
2371 },
2372 En = _,
2373 Bn = {
2374 preencode(d, o) {
2375 ;(En.preencode(d, o.header), e.fixed32.preencode(d, o.discoveryKey))
2376 },
2377 encode(d, o) {
2378 ;(En.encode(d, o.header), e.fixed32.encode(d, o.discoveryKey))
2379 },
2380 decode: (d) => ({ header: En.decode(d), discoveryKey: e.fixed32.decode(d) }),
2381 },
2382 Nn = _,
2383 Vn = Sn,
2384 On = {
2385 preencode(d, o) {
2386 ;(Nn.preencode(d, o.header),
2387 e.fixed32.preencode(d, o.roomKey),
2388 e.uint.preencode(d, o.key),
2389 Vn.preencode(d, o.status))
2390 },
2391 encode(d, o) {
2392 ;(Nn.encode(d, o.header),
2393 e.fixed32.encode(d, o.roomKey),
2394 e.uint.encode(d, o.key),
2395 Vn.encode(d, o.status))
2396 },
2397 decode: (d) => ({
2398 header: Nn.decode(d),
2399 roomKey: e.fixed32.decode(d),
2400 key: e.uint.decode(d),
2401 status: Vn.decode(d),
2402 }),
2403 },
2404 Un = {
2405 preencode(e, d) {
2406 e.end++
2407 },
2408 encode(d, o) {
2409 const n = o.isBlocked ? 1 : 0
2410 e.uint.encode(d, n)
2411 },
2412 decode: (d) => ({ isBlocked: !!(1 & e.uint.decode(d)) }),
2413 },
2414 Jn = {
2415 preencode(d, o) {
2416 ;(e.fixed32.preencode(d, o.memberKey),
2417 e.uint.preencode(d, o.clock),
2418 Ni.preencode(d, o.status),
2419 d.end++,
2420 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2421 o.roomKey && e.fixed32.preencode(d, o.roomKey))
2422 },
2423 encode(d, o) {
2424 const n = (o.mailbox ? 1 : 0) | (o.roomKey ? 2 : 0)
2425 ;(e.fixed32.encode(d, o.memberKey),
2426 e.uint.encode(d, o.clock),
2427 Ni.encode(d, o.status),
2428 e.uint.encode(d, n),
2429 o.mailbox && e.fixed32.encode(d, o.mailbox),
2430 o.roomKey && e.fixed32.encode(d, o.roomKey))
2431 },
2432 decode(d) {
2433 const o = e.fixed32.decode(d),
2434 n = e.uint.decode(d),
2435 c = Ni.decode(d),
2436 r = e.uint.decode(d)
2437 return {
2438 memberKey: o,
2439 clock: n,
2440 status: c,
2441 mailbox: 1 & r ? e.fixed32.decode(d) : null,
2442 roomKey: 2 & r ? e.fixed32.decode(d) : null,
2443 }
2444 },
2445 },
2446 Wn = _,
2447 Hn = e.frame(sn),
2448 zn = {
2449 preencode(e, d) {
2450 ;(Wn.preencode(e, d.header), Hn.preencode(e, d.contact))
2451 },
2452 encode(e, d) {
2453 ;(Wn.encode(e, d.header), Hn.encode(e, d.contact))
2454 },
2455 decode: (e) => ({ header: Wn.decode(e), contact: Hn.decode(e) }),
2456 },
2457 Gn = _,
2458 Qn = {
2459 preencode(d, o) {
2460 ;(Gn.preencode(d, o.header),
2461 e.fixed32.preencode(d, o.memberKey),
2462 e.uint.preencode(d, o.key),
2463 Vi.preencode(d, o.status))
2464 },
2465 encode(d, o) {
2466 ;(Gn.encode(d, o.header),
2467 e.fixed32.encode(d, o.memberKey),
2468 e.uint.encode(d, o.key),
2469 Vi.encode(d, o.status))
2470 },
2471 decode: (d) => ({
2472 header: Gn.decode(d),
2473 memberKey: e.fixed32.decode(d),
2474 key: e.uint.decode(d),
2475 status: Vi.decode(d),
2476 }),
2477 },
2478 Xn = _,
2479 Yn = {
2480 preencode(d, o) {
2481 ;(Xn.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
2482 },
2483 encode(d, o) {
2484 ;(Xn.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
2485 },
2486 decode: (d) => ({ header: Xn.decode(d), memberKey: e.fixed32.decode(d) }),
2487 },
2488 Zn = {
2489 preencode(e, d) {
2490 e.end++
2491 },
2492 encode(d, o) {
2493 const n =
2494 (o.isPending ? 1 : 0) |
2495 (o.isAccepted ? 2 : 0) |
2496 (o.isRejected ? 4 : 0) |
2497 (o.isDiscarded ? 8 : 0) |
2498 (o.isSeen ? 16 : 0)
2499 e.uint.encode(d, n)
2500 },
2501 decode(d) {
2502 const o = e.uint.decode(d)
2503 return {
2504 isPending: !!(1 & o),
2505 isAccepted: !!(2 & o),
2506 isRejected: !!(4 & o),
2507 isDiscarded: !!(8 & o),
2508 isSeen: !!(16 & o),
2509 }
2510 },
2511 },
2512 $n = ve,
2513 _n = e.frame(i),
2514 ec = {
2515 preencode(d, o) {
2516 ;($n.preencode(d, o.sender),
2517 _n.preencode(d, o.keys),
2518 e.fixed32.preencode(d, o.mailbox),
2519 d.end++,
2520 o.message && e.string.preencode(d, o.message))
2521 },
2522 encode(d, o) {
2523 const n = o.message ? 1 : 0
2524 ;($n.encode(d, o.sender),
2525 _n.encode(d, o.keys),
2526 e.fixed32.encode(d, o.mailbox),
2527 e.uint.encode(d, n),
2528 o.message && e.string.encode(d, o.message))
2529 },
2530 decode: (d) => ({
2531 sender: $n.decode(d),
2532 keys: _n.decode(d),
2533 mailbox: e.fixed32.decode(d),
2534 message: 1 & e.uint.decode(d) ? e.string.decode(d) : null,
2535 }),
2536 },
2537 dc = e.frame(ec),
2538 oc = {
2539 preencode(e, d) {
2540 ;(dc.preencode(e, d.body), ce.preencode(e, d.attestation))
2541 },
2542 encode(e, d) {
2543 ;(dc.encode(e, d.body), ce.encode(e, d.attestation))
2544 },
2545 decode: (e) => ({ body: dc.decode(e), attestation: ce.decode(e) }),
2546 },
2547 nc = ue,
2548 cc = e.frame(Zn),
2549 rc = _n,
2550 tc = {
2551 preencode(d, n) {
2552 ;(e.fixed32.preencode(d, n.memberKey),
2553 e.uint.preencode(d, n.clock),
2554 nc.preencode(d, n.sender),
2555 cc.preencode(d, n.status),
2556 rc.preencode(d, n.keys),
2557 e.fixed32.preencode(d, n.mailbox),
2558 d.end++,
2559 n.message && e.string.preencode(d, n.message),
2560 o >= 17 && n.sentAt && e.uint.preencode(d, n.sentAt))
2561 },
2562 encode(d, n) {
2563 const c = (n.message ? 1 : 0) | (o >= 17 && n.sentAt ? 2 : 0)
2564 ;(e.fixed32.encode(d, n.memberKey),
2565 e.uint.encode(d, n.clock),
2566 nc.encode(d, n.sender),
2567 cc.encode(d, n.status),
2568 rc.encode(d, n.keys),
2569 e.fixed32.encode(d, n.mailbox),
2570 e.uint.encode(d, c),
2571 n.message && e.string.encode(d, n.message),
2572 o >= 17 && n.sentAt && e.uint.encode(d, n.sentAt))
2573 },
2574 decode(d) {
2575 const n = e.fixed32.decode(d),
2576 c = e.uint.decode(d),
2577 r = nc.decode(d),
2578 t = cc.decode(d),
2579 i = rc.decode(d),
2580 a = e.fixed32.decode(d),
2581 s = e.uint.decode(d)
2582 return {
2583 memberKey: n,
2584 clock: c,
2585 sender: r,
2586 status: t,
2587 keys: i,
2588 mailbox: a,
2589 message: 1 & s ? e.string.decode(d) : null,
2590 sentAt: o >= 17 && 2 & s ? e.uint.decode(d) : 0,
2591 }
2592 },
2593 },
2594 ic = _,
2595 ac = {
2596 preencode(d, o) {
2597 ;(ic.preencode(d, o.header), e.buffer.preencode(d, o.blindRequest))
2598 },
2599 encode(d, o) {
2600 ;(ic.encode(d, o.header), e.buffer.encode(d, o.blindRequest))
2601 },
2602 decode: (d) => ({ header: ic.decode(d), blindRequest: e.buffer.decode(d) }),
2603 },
2604 sc = _,
2605 pc = cc,
2606 uc = {
2607 preencode(d, n) {
2608 ;(sc.preencode(d, n.header),
2609 e.fixed32.preencode(d, n.memberKey),
2610 e.uint.preencode(d, n.key),
2611 pc.preencode(d, n.status),
2612 d.end++,
2613 o >= 15 && n.roomKey && e.fixed32.preencode(d, n.roomKey))
2614 },
2615 encode(d, n) {
2616 const c = o >= 15 && n.roomKey ? 1 : 0
2617 ;(sc.encode(d, n.header),
2618 e.fixed32.encode(d, n.memberKey),
2619 e.uint.encode(d, n.key),
2620 pc.encode(d, n.status),
2621 e.uint.encode(d, c),
2622 o >= 15 && n.roomKey && e.fixed32.encode(d, n.roomKey))
2623 },
2624 decode(d) {
2625 const n = sc.decode(d),
2626 c = e.fixed32.decode(d),
2627 r = e.uint.decode(d),
2628 t = pc.decode(d),
2629 i = d.start < d.end ? e.uint.decode(d) : 0
2630 return {
2631 header: n,
2632 memberKey: c,
2633 key: r,
2634 status: t,
2635 roomKey: o >= 15 && 1 & i ? e.fixed32.decode(d) : null,
2636 }
2637 },
2638 },
2639 lc = {
2640 preencode(d, o) {
2641 ;(e.uint.preencode(d, o.timestamp),
2642 e.fixed32.preencode(d, o.key),
2643 e.fixed32.preencode(d, o.mailbox))
2644 },
2645 encode(d, o) {
2646 ;(e.uint.encode(d, o.timestamp), e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.mailbox))
2647 },
2648 decode: (d) => ({
2649 version: e.uint.decode(d),
2650 timestamp: e.uint.decode(d),
2651 key: e.fixed32.decode(d),
2652 mailbox: e.fixed32.decode(d),
2653 }),
2654 },
2655 fc = {
2656 preencode(d, o) {
2657 switch ((e.uint.preencode(d, o.version), o.version)) {
2658 case 0:
2659 case 1:
2660 lc.preencode(d, o)
2661 break
2662 default:
2663 throw new Error("Unsupported version")
2664 }
2665 },
2666 encode(d, o) {
2667 switch ((e.uint.encode(d, o.version), o.version)) {
2668 case 0:
2669 case 1:
2670 lc.encode(d, o)
2671 break
2672 default:
2673 throw new Error("Unsupported version")
2674 }
2675 },
2676 decode(d) {
2677 const o = d.start,
2678 n = e.uint.decode(d)
2679 switch (((d.start = o), n)) {
2680 case 0:
2681 case 1:
2682 return lc.decode(d)
2683 default:
2684 throw new Error("Unsupported version")
2685 }
2686 },
2687 },
2688 mc = {
2689 preencode(d, o) {
2690 ;(e.fixed32.preencode(d, o.discoveryPublicKey),
2691 e.uint.preencode(d, o.timestamp),
2692 d.end++,
2693 o.lastSynced && e.uint.preencode(d, o.lastSynced))
2694 },
2695 encode(d, o) {
2696 const n = (o.lastSynced ? 1 : 0) | (o.dirty ? 2 : 0)
2697 ;(e.fixed32.encode(d, o.discoveryPublicKey),
2698 e.uint.encode(d, o.timestamp),
2699 e.uint.encode(d, n),
2700 o.lastSynced && e.uint.encode(d, o.lastSynced))
2701 },
2702 decode(d) {
2703 const o = e.fixed32.decode(d),
2704 n = e.uint.decode(d),
2705 c = e.uint.decode(d)
2706 return {
2707 discoveryPublicKey: o,
2708 timestamp: n,
2709 lastSynced: 1 & c ? e.uint.decode(d) : 0,
2710 dirty: !!(2 & c),
2711 }
2712 },
2713 },
2714 yc = {
2715 preencode(d, o) {
2716 ;(e.uint.preencode(d, o.rooms), e.uint.preencode(d, o.activeRooms))
2717 },
2718 encode(d, o) {
2719 ;(e.uint.encode(d, o.rooms), e.uint.encode(d, o.activeRooms))
2720 },
2721 decode: (d) => ({ rooms: e.uint.decode(d), activeRooms: e.uint.decode(d) }),
2722 },
2723 xc = F,
2724 bc = Y,
2725 vc = {
2726 preencode(e, d) {
2727 ;(e.end++, d.blockedMembers && bc.preencode(e, d.blockedMembers))
2728 },
2729 encode(d, o) {
2730 const n = o.blockedMembers ? 1 : 0
2731 ;(e.uint.encode(d, n), o.blockedMembers && bc.encode(d, o.blockedMembers))
2732 },
2733 decode: (d) => ({ blockedMembers: 1 & e.uint.decode(d) ? bc.decode(d) : null }),
2734 },
2735 kc = e.frame(X),
2736 gc = e.frame(vc),
2737 Kc = {
2738 preencode(d, o) {
2739 ;(e.buffer.preencode(d, o.encryptionKey),
2740 e.fixed32.preencode(d, o.seed),
2741 kc.preencode(d, o.capabilities),
2742 n.preencode(d, o.initiator),
2743 e.fixed32.preencode(d, o.fastForwardTo),
2744 d.end++,
2745 o.privateProfile && gc.preencode(d, o.privateProfile))
2746 },
2747 encode(d, o) {
2748 const c = o.privateProfile ? 1 : 0
2749 ;(e.buffer.encode(d, o.encryptionKey),
2750 e.fixed32.encode(d, o.seed),
2751 kc.encode(d, o.capabilities),
2752 n.encode(d, o.initiator),
2753 e.fixed32.encode(d, o.fastForwardTo),
2754 e.uint.encode(d, c),
2755 o.privateProfile && gc.encode(d, o.privateProfile))
2756 },
2757 decode: (d) => ({
2758 encryptionKey: e.buffer.decode(d),
2759 seed: e.fixed32.decode(d),
2760 capabilities: kc.decode(d),
2761 initiator: n.decode(d),
2762 fastForwardTo: e.fixed32.decode(d),
2763 privateProfile: 1 & e.uint.decode(d) ? gc.decode(d) : null,
2764 }),
2765 },
2766 hc = {
2767 preencode(d, o) {
2768 ;(d.end++, o.count && e.uint.preencode(d, o.count))
2769 },
2770 encode(d, o) {
2771 const n = o.count ? 1 : 0
2772 ;(e.uint.encode(d, n), o.count && e.uint.encode(d, o.count))
2773 },
2774 decode: (d) => ({ count: 1 & e.uint.decode(d) ? e.uint.decode(d) : 0 }),
2775 },
2776 wc = e.frame(Kc),
2777 Pc = {
2778 preencode(d, n) {
2779 ;(e.fixed32.preencode(d, n.roomKey),
2780 e.uint.preencode(d, n.priority),
2781 d.end++,
2782 n.v3 && wc.preencode(d, n.v3),
2783 o >= 5 && n.timestamp && e.uint.preencode(d, n.timestamp))
2784 },
2785 encode(d, n) {
2786 const c = (n.v3 ? 1 : 0) | (o >= 3 && n.errored ? 2 : 0) | (o >= 5 && n.timestamp ? 4 : 0)
2787 ;(e.fixed32.encode(d, n.roomKey),
2788 e.uint.encode(d, n.priority),
2789 e.uint.encode(d, c),
2790 n.v3 && wc.encode(d, n.v3),
2791 o >= 5 && n.timestamp && e.uint.encode(d, n.timestamp))
2792 },
2793 decode(d) {
2794 const n = e.fixed32.decode(d),
2795 c = e.uint.decode(d),
2796 r = e.uint.decode(d)
2797 return {
2798 roomKey: n,
2799 priority: c,
2800 v3: 1 & r ? wc.decode(d) : null,
2801 errored: o >= 3 && !!(2 & r),
2802 timestamp: o >= 5 && 4 & r ? e.uint.decode(d) : 0,
2803 }
2804 },
2805 },
2806 Tc = {
2807 preencode(e, d) {
2808 e.end++
2809 },
2810 encode(d, o) {
2811 const n = o.isConfirmed ? 1 : 0
2812 e.uint.encode(d, n)
2813 },
2814 decode: (d) => ({ isConfirmed: !!(1 & e.uint.decode(d)) }),
2815 },
2816 Rc = e.frame(Tc),
2817 Ac = Fn,
2818 Mc = {
2819 preencode(d, n) {
2820 ;(e.fixed32.preencode(d, n.publicKey),
2821 e.fixed32.preencode(d, n.privateProfileKey),
2822 t.preencode(d, n.deviceKeyPair),
2823 e.buffer.preencode(d, n.deviceProof),
2824 Rc.preencode(d, n.status),
2825 d.end++,
2826 n.entropy && e.buffer.preencode(d, n.entropy),
2827 n.swap && Ac.preencode(d, n.swap),
2828 o >= 9 && n.swapV2 && Oi.preencode(d, n.swapV2))
2829 },
2830 encode(d, n) {
2831 const c = (n.entropy ? 1 : 0) | (n.swap ? 2 : 0) | (o >= 9 && n.swapV2 ? 4 : 0)
2832 ;(e.fixed32.encode(d, n.publicKey),
2833 e.fixed32.encode(d, n.privateProfileKey),
2834 t.encode(d, n.deviceKeyPair),
2835 e.buffer.encode(d, n.deviceProof),
2836 Rc.encode(d, n.status),
2837 e.uint.encode(d, c),
2838 n.entropy && e.buffer.encode(d, n.entropy),
2839 n.swap && Ac.encode(d, n.swap),
2840 o >= 9 && n.swapV2 && Oi.encode(d, n.swapV2))
2841 },
2842 decode(d) {
2843 const n = e.fixed32.decode(d),
2844 c = e.fixed32.decode(d),
2845 r = t.decode(d),
2846 i = e.buffer.decode(d),
2847 a = Rc.decode(d),
2848 s = e.uint.decode(d)
2849 return {
2850 publicKey: n,
2851 privateProfileKey: c,
2852 deviceKeyPair: r,
2853 deviceProof: i,
2854 status: a,
2855 entropy: 1 & s ? e.buffer.decode(d) : null,
2856 swap: 2 & s ? Ac.decode(d) : null,
2857 swapV2: o >= 9 && 4 & s ? Oi.decode(d) : null,
2858 }
2859 },
2860 },
2861 Dc = {
2862 RestoreIdentity: 1,
2863 CreateRoom: 2,
2864 LeaveRoom: 3,
2865 ClearRoom: 4,
2866 JoinRoomInvitation: 5,
2867 JoinRoomKeys: 6,
2868 JoinRoomResponse: 7,
2869 SendContactRequest: 8,
2870 TestFastTask: 9,
2871 TestSlowTask: 10,
2872 TestErrorTask: 11,
2873 },
2874 Cc = {
2875 preencode(e, d) {
2876 e.end++
2877 },
2878 encode(d, o) {
2879 if (o > 11) throw new Error("Unknown enum")
2880 e.uint.encode(d, o)
2881 },
2882 decode: (d) => e.uint.decode(d),
2883 },
2884 Sc = {
2885 preencode(d, o) {
2886 ;(e.fixed32.preencode(d, o.roomKey),
2887 e.buffer.preencode(d, o.encryptionKey),
2888 d.end++,
2889 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2890 o.initiator && n.preencode(d, o.initiator))
2891 },
2892 encode(d, o) {
2893 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0)
2894 ;(e.fixed32.encode(d, o.roomKey),
2895 e.buffer.encode(d, o.encryptionKey),
2896 e.uint.encode(d, c),
2897 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2898 o.initiator && n.encode(d, o.initiator))
2899 },
2900 decode(d) {
2901 const o = e.fixed32.decode(d),
2902 c = e.buffer.decode(d),
2903 r = e.uint.decode(d)
2904 return {
2905 roomKey: o,
2906 encryptionKey: c,
2907 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
2908 initiator: 2 & r ? n.decode(d) : null,
2909 }
2910 },
2911 },
2912 Fc = Tn,
2913 Ic = {
2914 preencode(e, d) {
2915 Fc.preencode(e, d.invitation)
2916 },
2917 encode(e, d) {
2918 Fc.encode(e, d.invitation)
2919 },
2920 decode: (e) => ({ invitation: Fc.decode(e) }),
2921 },
2922 Lc = {
2923 preencode(d, o) {
2924 ;(e.fixed32.preencode(d, o.mailbox),
2925 t.preencode(d, o.keyPair),
2926 e.buffer.preencode(d, o.response))
2927 },
2928 encode(d, o) {
2929 ;(e.fixed32.encode(d, o.mailbox), t.encode(d, o.keyPair), e.buffer.encode(d, o.response))
2930 },
2931 decode: (d) => ({
2932 mailbox: e.fixed32.decode(d),
2933 keyPair: t.decode(d),
2934 response: e.buffer.decode(d),
2935 }),
2936 },
2937 qc = $,
2938 jc = {
2939 preencode(d, o) {
2940 ;(e.fixed32.preencode(d, o.roomKey),
2941 e.buffer.preencode(d, o.encryptionKey),
2942 d.end++,
2943 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2944 o.initiator && n.preencode(d, o.initiator),
2945 o.mailbox && e.fixed32.preencode(d, o.mailbox))
2946 },
2947 encode(d, o) {
2948 const c = (o.fastForwardTo ? 1 : 0) | (o.initiator ? 2 : 0) | (o.mailbox ? 4 : 0)
2949 ;(e.fixed32.encode(d, o.roomKey),
2950 e.buffer.encode(d, o.encryptionKey),
2951 e.uint.encode(d, c),
2952 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
2953 o.initiator && n.encode(d, o.initiator),
2954 o.mailbox && e.fixed32.encode(d, o.mailbox))
2955 },
2956 decode(d) {
2957 const o = e.fixed32.decode(d),
2958 c = e.buffer.decode(d),
2959 r = e.uint.decode(d)
2960 return {
2961 roomKey: o,
2962 encryptionKey: c,
2963 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
2964 initiator: 2 & r ? n.decode(d) : null,
2965 mailbox: 4 & r ? e.fixed32.decode(d) : null,
2966 }
2967 },
2968 },
2969 Ec = e.frame(jc),
2970 Bc = {
2971 preencode(e, d) {
2972 Ec.preencode(e, d.keys)
2973 },
2974 encode(e, d) {
2975 Ec.encode(e, d.keys)
2976 },
2977 decode: (e) => ({ keys: Ec.decode(e) }),
2978 },
2979 Nc = e.frame(on),
2980 Vc = {
2981 preencode(d, o) {
2982 ;(e.fixed32.preencode(d, o.roomKey),
2983 e.buffer.preencode(d, o.encryptionKey),
2984 d.end++,
2985 o.fastForwardTo && e.fixed32.preencode(d, o.fastForwardTo),
2986 o.initiator && n.preencode(d, o.initiator),
2987 o.mailbox && e.fixed32.preencode(d, o.mailbox),
2988 o.keyPair && t.preencode(d, o.keyPair),
2989 o.genesis && Nc.preencode(d, o.genesis))
2990 },
2991 encode(d, o) {
2992 const c =
2993 (o.fastForwardTo ? 1 : 0) |
2994 (o.initiator ? 2 : 0) |
2995 (o.mailbox ? 4 : 0) |
2996 (o.keyPair ? 8 : 0) |
2997 (o.genesis ? 16 : 0) |
2998 (o.isPrivateProfile ? 32 : 0)
2999 ;(e.fixed32.encode(d, o.roomKey),
3000 e.buffer.encode(d, o.encryptionKey),
3001 e.uint.encode(d, c),
3002 o.fastForwardTo && e.fixed32.encode(d, o.fastForwardTo),
3003 o.initiator && n.encode(d, o.initiator),
3004 o.mailbox && e.fixed32.encode(d, o.mailbox),
3005 o.keyPair && t.encode(d, o.keyPair),
3006 o.genesis && Nc.encode(d, o.genesis))
3007 },
3008 decode(d) {
3009 const o = e.fixed32.decode(d),
3010 c = e.buffer.decode(d),
3011 r = e.uint.decode(d)
3012 return {
3013 roomKey: o,
3014 encryptionKey: c,
3015 fastForwardTo: 1 & r ? e.fixed32.decode(d) : null,
3016 initiator: 2 & r ? n.decode(d) : null,
3017 mailbox: 4 & r ? e.fixed32.decode(d) : null,
3018 keyPair: 8 & r ? t.decode(d) : null,
3019 genesis: 16 & r ? Nc.decode(d) : null,
3020 isPrivateProfile: !!(32 & r),
3021 }
3022 },
3023 },
3024 Oc = {
3025 preencode(d, o) {
3026 ;(e.fixed32.preencode(d, o.roomKey), d.end++)
3027 },
3028 encode(d, o) {
3029 const n = o.isGossiped ? 1 : 0
3030 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, n))
3031 },
3032 decode: (d) => ({ roomKey: e.fixed32.decode(d), isGossiped: !!(1 & e.uint.decode(d)) }),
3033 },
3034 Uc = {
3035 preencode(d, o) {
3036 e.fixed32.preencode(d, o.roomKey)
3037 },
3038 encode(d, o) {
3039 e.fixed32.encode(d, o.roomKey)
3040 },
3041 decode: (d) => ({ roomKey: e.fixed32.decode(d) }),
3042 },
3043 Jc = {
3044 preencode(d, o) {
3045 ;(e.string.preencode(d, o.mnemonic),
3046 d.end++,
3047 o.profileDiscoveryTimeout && e.uint.preencode(d, o.profileDiscoveryTimeout))
3048 },
3049 encode(d, o) {
3050 const n = (o.profileDiscoveryTimeout ? 1 : 0) | (o.recover ? 2 : 0)
3051 ;(e.string.encode(d, o.mnemonic),
3052 e.uint.encode(d, n),
3053 o.profileDiscoveryTimeout && e.uint.encode(d, o.profileDiscoveryTimeout))
3054 },
3055 decode(d) {
3056 const o = e.string.decode(d),
3057 n = e.uint.decode(d)
3058 return {
3059 mnemonic: o,
3060 profileDiscoveryTimeout: 1 & n ? e.uint.decode(d) : 0,
3061 recover: !!(2 & n),
3062 }
3063 },
3064 },
3065 Wc = {
3066 preencode(d, n) {
3067 ;(e.fixed32.preencode(d, n.roomKey),
3068 e.fixed32.preencode(d, n.memberKey),
3069 d.end++,
3070 n.message && e.string.preencode(d, n.message),
3071 o >= 6 && n.contactInfo && Ui.preencode(d, n.contactInfo))
3072 },
3073 encode(d, n) {
3074 const c = (n.message ? 1 : 0) | (o >= 6 && n.contactInfo ? 2 : 0)
3075 ;(e.fixed32.encode(d, n.roomKey),
3076 e.fixed32.encode(d, n.memberKey),
3077 e.uint.encode(d, c),
3078 n.message && e.string.encode(d, n.message),
3079 o >= 6 && n.contactInfo && Ui.encode(d, n.contactInfo))
3080 },
3081 decode(d) {
3082 const n = e.fixed32.decode(d),
3083 c = e.fixed32.decode(d),
3084 r = e.uint.decode(d)
3085 return {
3086 roomKey: n,
3087 memberKey: c,
3088 message: 1 & r ? e.string.decode(d) : null,
3089 contactInfo: o >= 6 && 2 & r ? Ui.decode(d) : null,
3090 }
3091 },
3092 },
3093 Hc = {
3094 preencode(d, o) {
3095 ;(e.fixed32.preencode(d, o.key), d.end++)
3096 },
3097 encode(d, o) {
3098 const n = o.isPrivateProfile ? 1 : 0
3099 ;(e.fixed32.encode(d, o.key), e.uint.encode(d, n))
3100 },
3101 decode: (d) => ({ key: e.fixed32.decode(d), isPrivateProfile: !!(1 & e.uint.decode(d)) }),
3102 },
3103 zc = e.frame(Jc),
3104 Gc = e.frame(Vc),
3105 Qc = e.frame(Oc),
3106 Xc = e.frame(Uc),
3107 Yc = e.frame(Ic),
3108 Zc = e.frame(Bc),
3109 $c = e.frame(Lc),
3110 _c = e.frame(Wc),
3111 er = e.frame(Hc),
3112 dr = {
3113 preencode(d, o) {
3114 const n =
3115 (o.restoreIdentity ? 1 : 0) |
3116 (o.createRoom ? 2 : 0) |
3117 (o.leaveRoom ? 4 : 0) |
3118 (o.clearRoom ? 8 : 0) |
3119 (o.joinRoomInvitation ? 16 : 0) |
3120 (o.joinRoomKeys ? 32 : 0) |
3121 (o.joinRoomResponse ? 64 : 0) |
3122 (o.sendContactRequest ? 128 : 0) |
3123 (o.migrateV2Room ? 256 : 0)
3124 ;(e.fixed32.preencode(d, o.discoveryKey),
3125 e.uint.preencode(d, o.priority),
3126 e.uint.preencode(d, o.timestamp),
3127 e.uint.preencode(d, o.type),
3128 e.uint.preencode(d, n),
3129 o.restoreIdentity && zc.preencode(d, o.restoreIdentity),
3130 o.createRoom && Gc.preencode(d, o.createRoom),
3131 o.leaveRoom && Qc.preencode(d, o.leaveRoom),
3132 o.clearRoom && Xc.preencode(d, o.clearRoom),
3133 o.joinRoomInvitation && Yc.preencode(d, o.joinRoomInvitation),
3134 o.joinRoomKeys && Zc.preencode(d, o.joinRoomKeys),
3135 o.joinRoomResponse && $c.preencode(d, o.joinRoomResponse),
3136 o.sendContactRequest && _c.preencode(d, o.sendContactRequest),
3137 o.migrateV2Room && er.preencode(d, o.migrateV2Room))
3138 },
3139 encode(d, o) {
3140 const n =
3141 (o.restoreIdentity ? 1 : 0) |
3142 (o.createRoom ? 2 : 0) |
3143 (o.leaveRoom ? 4 : 0) |
3144 (o.clearRoom ? 8 : 0) |
3145 (o.joinRoomInvitation ? 16 : 0) |
3146 (o.joinRoomKeys ? 32 : 0) |
3147 (o.joinRoomResponse ? 64 : 0) |
3148 (o.sendContactRequest ? 128 : 0) |
3149 (o.migrateV2Room ? 256 : 0)
3150 ;(e.fixed32.encode(d, o.discoveryKey),
3151 e.uint.encode(d, o.priority),
3152 e.uint.encode(d, o.timestamp),
3153 e.uint.encode(d, o.type),
3154 e.uint.encode(d, n),
3155 o.restoreIdentity && zc.encode(d, o.restoreIdentity),
3156 o.createRoom && Gc.encode(d, o.createRoom),
3157 o.leaveRoom && Qc.encode(d, o.leaveRoom),
3158 o.clearRoom && Xc.encode(d, o.clearRoom),
3159 o.joinRoomInvitation && Yc.encode(d, o.joinRoomInvitation),
3160 o.joinRoomKeys && Zc.encode(d, o.joinRoomKeys),
3161 o.joinRoomResponse && $c.encode(d, o.joinRoomResponse),
3162 o.sendContactRequest && _c.encode(d, o.sendContactRequest),
3163 o.migrateV2Room && er.encode(d, o.migrateV2Room))
3164 },
3165 decode(d) {
3166 const o = e.fixed32.decode(d),
3167 n = e.uint.decode(d),
3168 c = e.uint.decode(d),
3169 r = e.uint.decode(d),
3170 t = e.uint.decode(d)
3171 return {
3172 discoveryKey: o,
3173 priority: n,
3174 timestamp: c,
3175 type: r,
3176 restoreIdentity: 1 & t ? zc.decode(d) : null,
3177 createRoom: 2 & t ? Gc.decode(d) : null,
3178 leaveRoom: 4 & t ? Qc.decode(d) : null,
3179 clearRoom: 8 & t ? Xc.decode(d) : null,
3180 joinRoomInvitation: 16 & t ? Yc.decode(d) : null,
3181 joinRoomKeys: 32 & t ? Zc.decode(d) : null,
3182 joinRoomResponse: 64 & t ? $c.decode(d) : null,
3183 sendContactRequest: 128 & t ? _c.decode(d) : null,
3184 migrateV2Room: 256 & t ? er.decode(d) : null,
3185 }
3186 },
3187 },
3188 or = Ee,
3189 nr = {
3190 preencode(d, o) {
3191 ;(e.buffer.preencode(d, o.seed), or.preencode(d, o.invitation))
3192 },
3193 encode(d, o) {
3194 ;(e.buffer.encode(d, o.seed), or.encode(d, o.invitation))
3195 },
3196 decode: (d) => ({ seed: e.buffer.decode(d), invitation: or.decode(d) }),
3197 },
3198 cr = {
3199 preencode(e, d) {
3200 e.end++
3201 },
3202 encode(d, n) {
3203 const c =
3204 (n.isWritable ? 1 : 0) |
3205 (n.isReadable ? 2 : 0) |
3206 (n.isPrivateProfile ? 4 : 0) |
3207 (o >= 8 && n.isRemoved ? 8 : 0)
3208 e.uint.encode(d, c)
3209 },
3210 decode(d) {
3211 const n = e.uint.decode(d)
3212 return {
3213 isWritable: !!(1 & n),
3214 isReadable: !!(2 & n),
3215 isPrivateProfile: !!(4 & n),
3216 isRemoved: o >= 8 && !!(8 & n),
3217 }
3218 },
3219 },
3220 rr = {
3221 preencode(d, o) {
3222 ;(e.uint.preencode(d, o.creation),
3223 e.uint.preencode(d, o.latestSync),
3224 e.uint.preencode(d, o.latestChatMessage))
3225 },
3226 encode(d, o) {
3227 ;(e.uint.encode(d, o.creation),
3228 e.uint.encode(d, o.latestSync),
3229 e.uint.encode(d, o.latestChatMessage))
3230 },
3231 decode: (d) => ({
3232 creation: e.uint.decode(d),
3233 latestSync: e.uint.decode(d),
3234 latestChatMessage: e.uint.decode(d),
3235 }),
3236 },
3237 tr = Yo,
3238 ir = mo,
3239 ar = e.frame(rr),
3240 sr = kc,
3241 pr = e.frame(cr),
3242 ur = e.frame(ae),
3243 lr = e.frame(fd),
3244 fr = Jo,
3245 mr = _o,
3246 yr = e.frame(wo),
3247 xr = Y,
3248 br = e.frame(pd),
3249 vr = Sn,
3250 kr = {
3251 preencode(d, n) {
3252 const c =
3253 (n.selfDevice ? 1 : 0) |
3254 (n.selfMember ? 2 : 0) |
3255 (n.config ? 4 : 0) |
3256 (n.identity ? 8 : 0) |
3257 (n.lastMessage ? 16 : 0) |
3258 (n.dm ? 32 : 0) |
3259 (o >= 19 && n.readLengths ? 64 : 0) |
3260 (o >= 19 && n.lastMember ? 128 : 0) |
3261 (o >= 21 && n.version ? 256 : 0) |
3262 (o >= 27 && n.preferences ? 512 : 0) |
3263 (o >= 28 && n.activeCall ? 1024 : 0)
3264 ;(e.fixed32.preencode(d, n.roomKey),
3265 e.fixed32.preencode(d, n.discoveryKey),
3266 e.buffer.preencode(d, n.encryptionKey),
3267 tr.preencode(d, n.digest),
3268 ir.preencode(d, n.stats),
3269 ar.preencode(d, n.timestamps),
3270 e.uint.preencode(d, n.fork),
3271 e.uint.preencode(d, n.length),
3272 e.fixed32.preencode(d, n.seed),
3273 sr.preencode(d, n.capabilities),
3274 pr.preencode(d, n.status),
3275 e.uint.preencode(d, c),
3276 n.selfDevice && ur.preencode(d, n.selfDevice),
3277 n.selfMember && lr.preencode(d, n.selfMember),
3278 n.config && fr.preencode(d, n.config),
3279 n.identity && mr.preencode(d, n.identity),
3280 n.lastMessage && yr.preencode(d, n.lastMessage),
3281 n.dm && xr.preencode(d, n.dm),
3282 o >= 19 && n.readLengths && Ji.preencode(d, n.readLengths),
3283 o >= 19 && n.lastMember && br.preencode(d, n.lastMember),
3284 o >= 21 && n.version && e.uint.preencode(d, n.version),
3285 o >= 27 && n.preferences && vr.preencode(d, n.preferences),
3286 o >= 28 && n.activeCall && Wi.preencode(d, n.activeCall))
3287 },
3288 encode(d, n) {
3289 const c =
3290 (n.selfDevice ? 1 : 0) |
3291 (n.selfMember ? 2 : 0) |
3292 (n.config ? 4 : 0) |
3293 (n.identity ? 8 : 0) |
3294 (n.lastMessage ? 16 : 0) |
3295 (n.dm ? 32 : 0) |
3296 (o >= 19 && n.readLengths ? 64 : 0) |
3297 (o >= 19 && n.lastMember ? 128 : 0) |
3298 (o >= 21 && n.version ? 256 : 0) |
3299 (o >= 27 && n.preferences ? 512 : 0) |
3300 (o >= 28 && n.activeCall ? 1024 : 0)
3301 ;(e.fixed32.encode(d, n.roomKey),
3302 e.fixed32.encode(d, n.discoveryKey),
3303 e.buffer.encode(d, n.encryptionKey),
3304 tr.encode(d, n.digest),
3305 ir.encode(d, n.stats),
3306 ar.encode(d, n.timestamps),
3307 e.uint.encode(d, n.fork),
3308 e.uint.encode(d, n.length),
3309 e.fixed32.encode(d, n.seed),
3310 sr.encode(d, n.capabilities),
3311 pr.encode(d, n.status),
3312 e.uint.encode(d, c),
3313 n.selfDevice && ur.encode(d, n.selfDevice),
3314 n.selfMember && lr.encode(d, n.selfMember),
3315 n.config && fr.encode(d, n.config),
3316 n.identity && mr.encode(d, n.identity),
3317 n.lastMessage && yr.encode(d, n.lastMessage),
3318 n.dm && xr.encode(d, n.dm),
3319 o >= 19 && n.readLengths && Ji.encode(d, n.readLengths),
3320 o >= 19 && n.lastMember && br.encode(d, n.lastMember),
3321 o >= 21 && n.version && e.uint.encode(d, n.version),
3322 o >= 27 && n.preferences && vr.encode(d, n.preferences),
3323 o >= 28 && n.activeCall && Wi.encode(d, n.activeCall))
3324 },
3325 decode(d) {
3326 const n = e.fixed32.decode(d),
3327 c = e.fixed32.decode(d),
3328 r = e.buffer.decode(d),
3329 t = tr.decode(d),
3330 i = ir.decode(d),
3331 a = ar.decode(d),
3332 s = e.uint.decode(d),
3333 p = e.uint.decode(d),
3334 u = e.fixed32.decode(d),
3335 l = sr.decode(d),
3336 f = pr.decode(d),
3337 m = e.uint.decode(d)
3338 return {
3339 roomKey: n,
3340 discoveryKey: c,
3341 encryptionKey: r,
3342 digest: t,
3343 stats: i,
3344 timestamps: a,
3345 fork: s,
3346 length: p,
3347 seed: u,
3348 capabilities: l,
3349 status: f,
3350 selfDevice: 1 & m ? ur.decode(d) : null,
3351 selfMember: 2 & m ? lr.decode(d) : null,
3352 config: 4 & m ? fr.decode(d) : null,
3353 identity: 8 & m ? mr.decode(d) : null,
3354 lastMessage: 16 & m ? yr.decode(d) : null,
3355 dm: 32 & m ? xr.decode(d) : null,
3356 readLengths: o >= 19 && 64 & m ? Ji.decode(d) : null,
3357 lastMember: o >= 19 && 128 & m ? br.decode(d) : null,
3358 version: o >= 21 && 256 & m ? e.uint.decode(d) : 0,
3359 preferences: o >= 27 && 512 & m ? vr.decode(d) : null,
3360 activeCall: o >= 28 && 1024 & m ? Wi.decode(d) : null,
3361 }
3362 },
3363 },
3364 gr = Sn,
3365 Kr = {
3366 preencode(d, o) {
3367 ;(e.fixed32.preencode(d, o.roomKey), gr.preencode(d, o.status))
3368 },
3369 encode(d, o) {
3370 ;(e.fixed32.encode(d, o.roomKey), gr.encode(d, o.status))
3371 },
3372 decode: (d) => ({ roomKey: e.fixed32.decode(d), status: gr.decode(d) }),
3373 },
3374 hr = {
3375 preencode(d, o) {
3376 ;(e.fixed32.preencode(d, o.mailbox),
3377 e.fixed32.preencode(d, o.key),
3378 d.end++,
3379 o.roomKey && e.fixed32.preencode(d, o.roomKey),
3380 o.keyPair && t.preencode(d, o.keyPair),
3381 o.responseKeyPair && t.preencode(d, o.responseKeyPair))
3382 },
3383 encode(d, o) {
3384 const n = (o.roomKey ? 1 : 0) | (o.keyPair ? 2 : 0) | (o.responseKeyPair ? 4 : 0)
3385 ;(e.fixed32.encode(d, o.mailbox),
3386 e.fixed32.encode(d, o.key),
3387 e.uint.encode(d, n),
3388 o.roomKey && e.fixed32.encode(d, o.roomKey),
3389 o.keyPair && t.encode(d, o.keyPair),
3390 o.responseKeyPair && t.encode(d, o.responseKeyPair))
3391 },
3392 decode(d) {
3393 const o = e.fixed32.decode(d),
3394 n = e.fixed32.decode(d),
3395 c = e.uint.decode(d)
3396 return {
3397 mailbox: o,
3398 key: n,
3399 roomKey: 1 & c ? e.fixed32.decode(d) : null,
3400 keyPair: 2 & c ? t.decode(d) : null,
3401 responseKeyPair: 4 & c ? t.decode(d) : null,
3402 }
3403 },
3404 },
3405 wr = ue,
3406 Pr = {
3407 preencode(d, o) {
3408 ;(e.fixed32.preencode(d, o.key), wr.preencode(d, o.profile))
3409 },
3410 encode(d, o) {
3411 ;(e.fixed32.encode(d, o.key), wr.encode(d, o.profile))
3412 },
3413 decode: (d) => ({ key: e.fixed32.decode(d), profile: wr.decode(d) }),
3414 },
3415 Tr = ur,
3416 Rr = {
3417 preencode(d, o) {
3418 ;(e.fixed32.preencode(d, o.roomKey), Tr.preencode(d, o.device))
3419 },
3420 encode(d, o) {
3421 ;(e.fixed32.encode(d, o.roomKey), Tr.encode(d, o.device))
3422 },
3423 decode: (d) => ({ roomKey: e.fixed32.decode(d), device: Tr.decode(d) }),
3424 },
3425 Ar = K,
3426 Mr = {
3427 preencode(d, n) {
3428 ;(Ar.preencode(d, n.file),
3429 e.fixed32.preencode(d, n.roomKey),
3430 d.end++,
3431 n.encryptionKey && e.buffer.preencode(d, n.encryptionKey),
3432 o >= 28 && n.lastAccessed && e.uint.preencode(d, n.lastAccessed),
3433 o >= 28 && n.version && e.uint.preencode(d, n.version))
3434 },
3435 encode(d, n) {
3436 const c =
3437 (n.encryptionKey ? 1 : 0) |
3438 (n.cleared ? 2 : 0) |
3439 (n.own ? 4 : 0) |
3440 (o >= 28 && n.lastAccessed ? 8 : 0) |
3441 (o >= 28 && n.version ? 16 : 0)
3442 ;(Ar.encode(d, n.file),
3443 e.fixed32.encode(d, n.roomKey),
3444 e.uint.encode(d, c),
3445 n.encryptionKey && e.buffer.encode(d, n.encryptionKey),
3446 o >= 28 && n.lastAccessed && e.uint.encode(d, n.lastAccessed),
3447 o >= 28 && n.version && e.uint.encode(d, n.version))
3448 },
3449 decode(d) {
3450 const n = Ar.decode(d),
3451 c = e.fixed32.decode(d),
3452 r = e.uint.decode(d)
3453 return {
3454 file: n,
3455 roomKey: c,
3456 encryptionKey: 1 & r ? e.buffer.decode(d) : null,
3457 cleared: !!(2 & r),
3458 own: !!(4 & r),
3459 lastAccessed: o >= 28 && 8 & r ? e.uint.decode(d) : 0,
3460 version: o >= 28 && 16 & r ? e.uint.decode(d) : 0,
3461 }
3462 },
3463 },
3464 Dr = _,
3465 Cr = {
3466 preencode(d, n) {
3467 ;(Dr.preencode(d, n.header),
3468 c.preencode(d, n.oplog),
3469 e.uint.preencode(d, n.index),
3470 Hi.preencode(d, n.preview),
3471 d.end++,
3472 o >= 12 && n.displayType && Qr.preencode(d, n.displayType))
3473 },
3474 encode(d, n) {
3475 const r = o >= 12 && n.displayType ? 1 : 0
3476 ;(Dr.encode(d, n.header),
3477 c.encode(d, n.oplog),
3478 e.uint.encode(d, n.index),
3479 Hi.encode(d, n.preview),
3480 e.uint.encode(d, r),
3481 o >= 12 && n.displayType && Qr.encode(d, n.displayType))
3482 },
3483 decode(d) {
3484 const n = Dr.decode(d),
3485 r = c.decode(d),
3486 t = e.uint.decode(d),
3487 i = Hi.decode(d),
3488 a = d.start < d.end ? e.uint.decode(d) : 0
3489 return {
3490 header: n,
3491 oplog: r,
3492 index: t,
3493 preview: i,
3494 displayType: o >= 12 && 1 & a ? Qr.decode(d) : 0,
3495 }
3496 },
3497 },
3498 Sr = {
3499 preencode(d, n) {
3500 ;(d.end++, o >= 4 && n.memberKey && e.fixed32.preencode(d, n.memberKey))
3501 },
3502 encode(d, n) {
3503 const c = o >= 4 && n.memberKey ? 1 : 0
3504 ;(e.uint.encode(d, c), o >= 4 && n.memberKey && e.fixed32.encode(d, n.memberKey))
3505 },
3506 decode(d) {
3507 const n = e.uint.decode(d)
3508 return { memberKey: o >= 4 && 1 & n ? e.fixed32.decode(d) : null }
3509 },
3510 },
3511 Fr = ue,
3512 Ir = {
3513 preencode(e, d) {
3514 ;(Fr.preencode(e, d.profile), ce.preencode(e, d.attestation))
3515 },
3516 encode(e, d) {
3517 ;(Fr.encode(e, d.profile), ce.encode(e, d.attestation))
3518 },
3519 decode: (e) => ({ profile: Fr.decode(e), attestation: ce.decode(e) }),
3520 },
3521 Lr = _,
3522 qr = {
3523 preencode(d, o) {
3524 ;(Lr.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3525 },
3526 encode(d, o) {
3527 ;(Lr.encode(d, o.header), e.fixed32.encode(d, o.key))
3528 },
3529 decode: (d) => ({ header: Lr.decode(d), key: e.fixed32.decode(d) }),
3530 },
3531 jr = {
3532 preencode(d, o) {
3533 ;(e.fixed32.preencode(d, o.deviceKey),
3534 ce.preencode(d, o.privateProfileIdentity),
3535 e.buffer.preencode(d, o.deviceProof))
3536 },
3537 encode(d, o) {
3538 ;(e.fixed32.encode(d, o.deviceKey),
3539 ce.encode(d, o.privateProfileIdentity),
3540 e.buffer.encode(d, o.deviceProof))
3541 },
3542 decode: (d) => ({
3543 deviceKey: e.fixed32.decode(d),
3544 privateProfileIdentity: ce.decode(d),
3545 deviceProof: e.buffer.decode(d),
3546 }),
3547 },
3548 Er = {
3549 preencode(d, n) {
3550 ;(e.fixed32.preencode(d, n.roomKey),
3551 e.fixed32.preencode(d, n.encryptionKey),
3552 e.fixed32.preencode(d, n.seed),
3553 d.end++,
3554 o >= 9 && n.fastForwardTo && e.fixed32.preencode(d, n.fastForwardTo))
3555 },
3556 encode(d, n) {
3557 const c = o >= 9 && n.fastForwardTo ? 1 : 0
3558 ;(e.fixed32.encode(d, n.roomKey),
3559 e.fixed32.encode(d, n.encryptionKey),
3560 e.fixed32.encode(d, n.seed),
3561 e.uint.encode(d, c),
3562 o >= 9 && n.fastForwardTo && e.fixed32.encode(d, n.fastForwardTo))
3563 },
3564 decode(d) {
3565 const n = e.fixed32.decode(d),
3566 c = e.fixed32.decode(d),
3567 r = e.fixed32.decode(d),
3568 t = e.uint.decode(d)
3569 return {
3570 roomKey: n,
3571 encryptionKey: c,
3572 seed: r,
3573 fastForwardTo: o >= 9 && 1 & t ? e.fixed32.decode(d) : null,
3574 }
3575 },
3576 },
3577 Br = {
3578 preencode(d, n) {
3579 ;(e.fixed32.preencode(d, n.publicKey),
3580 e.fixed32.preencode(d, n.writerKey),
3581 e.fixed32.preencode(d, n.devicePublicKey),
3582 d.end++,
3583 o >= 9 && n.privateProfileKey && e.fixed32.preencode(d, n.privateProfileKey))
3584 },
3585 encode(d, n) {
3586 const c = o >= 9 && n.privateProfileKey ? 1 : 0
3587 ;(e.fixed32.encode(d, n.publicKey),
3588 e.fixed32.encode(d, n.writerKey),
3589 e.fixed32.encode(d, n.devicePublicKey),
3590 e.uint.encode(d, c),
3591 o >= 9 && n.privateProfileKey && e.fixed32.encode(d, n.privateProfileKey))
3592 },
3593 decode(d) {
3594 const n = e.fixed32.decode(d),
3595 c = e.fixed32.decode(d),
3596 r = e.fixed32.decode(d),
3597 t = e.uint.decode(d)
3598 return {
3599 publicKey: n,
3600 writerKey: c,
3601 devicePublicKey: r,
3602 privateProfileKey: o >= 9 && 1 & t ? e.fixed32.decode(d) : null,
3603 }
3604 },
3605 },
3606 Nr = _,
3607 Vr = {
3608 preencode(d, o) {
3609 ;(Nr.preencode(d, o.header), e.fixed32.preencode(d, o.memberKey))
3610 },
3611 encode(d, o) {
3612 ;(Nr.encode(d, o.header), e.fixed32.encode(d, o.memberKey))
3613 },
3614 decode: (d) => ({ header: Nr.decode(d), memberKey: e.fixed32.decode(d) }),
3615 },
3616 Or = {
3617 preencode(d, o) {
3618 e.fixed32.preencode(d, o.privateProfileKey)
3619 },
3620 encode(d, o) {
3621 e.fixed32.encode(d, o.privateProfileKey)
3622 },
3623 decode: (d) => ({ privateProfileKey: e.fixed32.decode(d) }),
3624 },
3625 Ur = {
3626 preencode(d, o) {
3627 ;(e.fixed32.preencode(d, o.key), e.fixed32.preencode(d, o.responsePublicKey))
3628 },
3629 encode(d, o) {
3630 ;(e.fixed32.encode(d, o.key), e.fixed32.encode(d, o.responsePublicKey))
3631 },
3632 decode: (d) => ({ key: e.fixed32.decode(d), responsePublicKey: e.fixed32.decode(d) }),
3633 },
3634 Jr = {
3635 preencode(d, n) {
3636 ;(e.fixed32.preencode(d, n.roomKey),
3637 d.end++,
3638 o >= 10 && n.repairs && e.uint.preencode(d, n.repairs))
3639 },
3640 encode(d, n) {
3641 const c = o >= 10 && n.repairs ? 1 : 0
3642 ;(e.fixed32.encode(d, n.roomKey),
3643 e.uint.encode(d, c),
3644 o >= 10 && n.repairs && e.uint.encode(d, n.repairs))
3645 },
3646 decode(d) {
3647 const n = e.fixed32.decode(d),
3648 c = e.uint.decode(d)
3649 return { roomKey: n, repairs: o >= 10 && 1 & c ? e.uint.decode(d) : 0 }
3650 },
3651 },
3652 Wr = {
3653 preencode(d, n) {
3654 ;(d.end++,
3655 o >= 11 && n.key && e.string.preencode(d, n.key),
3656 o >= 11 && n.description && e.string.preencode(d, n.description))
3657 },
3658 encode(d, n) {
3659 const c =
3660 (o >= 11 && n.key ? 1 : 0) |
3661 (o >= 11 && n.value ? 2 : 0) |
3662 (o >= 11 && n.description ? 4 : 0)
3663 ;(e.uint.encode(d, c),
3664 o >= 11 && n.key && e.string.encode(d, n.key),
3665 o >= 11 && n.description && e.string.encode(d, n.description))
3666 },
3667 decode(d) {
3668 const n = e.uint.decode(d)
3669 return {
3670 key: o >= 11 && 1 & n ? e.string.decode(d) : null,
3671 value: o >= 11 && !!(2 & n),
3672 description: o >= 11 && 4 & n ? e.string.decode(d) : null,
3673 }
3674 },
3675 },
3676 Hr = e.array(e.frame(Wr)),
3677 zr = {
3678 preencode(e, d) {
3679 ;(e.end++, o >= 11 && d.flags && Hr.preencode(e, d.flags))
3680 },
3681 encode(d, n) {
3682 const c = o >= 11 && n.flags ? 1 : 0
3683 ;(e.uint.encode(d, c), o >= 11 && n.flags && Hr.encode(d, n.flags))
3684 },
3685 decode(d) {
3686 const n = e.uint.decode(d)
3687 return { flags: o >= 11 && 1 & n ? Hr.decode(d) : null }
3688 },
3689 },
3690 Gr = { HttpLink: 1, PearLink: 2 },
3691 Qr = {
3692 preencode(e, d) {
3693 e.end++
3694 },
3695 encode(d, o) {
3696 if (o > 2) throw new Error("Unknown enum")
3697 e.uint.encode(d, o)
3698 },
3699 decode: (d) => e.uint.decode(d),
3700 },
3701 Xr = _,
3702 Yr = {
3703 preencode(d, o) {
3704 ;(Xr.preencode(d, o.header), e.uint.preencode(d, o.value))
3705 },
3706 encode(d, o) {
3707 ;(Xr.encode(d, o.header), e.uint.encode(d, o.value))
3708 },
3709 decode: (d) => ({ header: Xr.decode(d), value: e.uint.decode(d) }),
3710 },
3711 Zr = {
3712 preencode(d, o) {
3713 ;(e.uint.preencode(d, o.key), e.uint.preencode(d, o.value))
3714 },
3715 encode(d, o) {
3716 ;(e.uint.encode(d, o.key), e.uint.encode(d, o.value))
3717 },
3718 decode: (d) => ({ key: e.uint.decode(d), value: e.uint.decode(d) }),
3719 },
3720 $r = _,
3721 _r = {
3722 preencode(d, n) {
3723 ;($r.preencode(d, n.header),
3724 e.uint.preencode(d, n.from),
3725 e.uint.preencode(d, n.to),
3726 d.end++,
3727 o >= 29 && n.buildType && vi.preencode(d, n.buildType))
3728 },
3729 encode(d, n) {
3730 const c = o >= 29 && n.buildType ? 1 : 0
3731 ;($r.encode(d, n.header),
3732 e.uint.encode(d, n.from),
3733 e.uint.encode(d, n.to),
3734 e.uint.encode(d, c),
3735 o >= 29 && n.buildType && vi.encode(d, n.buildType))
3736 },
3737 decode(d) {
3738 const n = $r.decode(d),
3739 c = e.uint.decode(d),
3740 r = e.uint.decode(d),
3741 t = d.start < d.end ? e.uint.decode(d) : 0
3742 return { header: n, from: c, to: r, buildType: o >= 29 && 1 & t ? vi.decode(d) : null }
3743 },
3744 },
3745 et = {
3746 RoomType: 1,
3747 IsExperimental: 2,
3748 IsJoiningDisabled: 3,
3749 IsAppendingDisabled: 4,
3750 IsCallingDisabled: 5,
3751 IsMembershipEventsDisabled: 6,
3752 IsAttachmentsDisabled: 7,
3753 IsLinksDisabled: 8,
3754 },
3755 dt = {
3756 preencode(e, d) {
3757 e.end++
3758 },
3759 encode(d, o) {
3760 if (o > 8) throw new Error("Unknown enum")
3761 e.uint.encode(d, o)
3762 },
3763 decode: (d) => e.uint.decode(d),
3764 },
3765 ot = Ge,
3766 nt = {
3767 preencode(d, n) {
3768 ;(d.end++,
3769 o >= 16 && n.nodes && ot.preencode(d, n.nodes),
3770 o >= 24 && n.concurrency && e.uint.preencode(d, n.concurrency),
3771 o >= 24 && n.maxWindow && e.uint.preencode(d, n.maxWindow),
3772 o >= 24 && n.randomPunchInterval && e.uint.preencode(d, n.randomPunchInterval),
3773 o >= 24 && n.connectionKeepAlive && e.uint.preencode(d, n.connectionKeepAlive))
3774 },
3775 encode(d, n) {
3776 const c =
3777 (o >= 16 && n.nodes ? 1 : 0) |
3778 (o >= 24 && n.concurrency ? 2 : 0) |
3779 (o >= 24 && n.maxWindow ? 4 : 0) |
3780 (o >= 24 && n.randomPunchInterval ? 8 : 0) |
3781 (o >= 24 && n.connectionKeepAlive ? 16 : 0)
3782 ;(e.uint.encode(d, c),
3783 o >= 16 && n.nodes && ot.encode(d, n.nodes),
3784 o >= 24 && n.concurrency && e.uint.encode(d, n.concurrency),
3785 o >= 24 && n.maxWindow && e.uint.encode(d, n.maxWindow),
3786 o >= 24 && n.randomPunchInterval && e.uint.encode(d, n.randomPunchInterval),
3787 o >= 24 && n.connectionKeepAlive && e.uint.encode(d, n.connectionKeepAlive))
3788 },
3789 decode(d) {
3790 const n = e.uint.decode(d)
3791 return {
3792 nodes: o >= 16 && 1 & n ? ot.decode(d) : null,
3793 concurrency: o >= 24 && 2 & n ? e.uint.decode(d) : 0,
3794 maxWindow: o >= 24 && 4 & n ? e.uint.decode(d) : 0,
3795 randomPunchInterval: o >= 24 && 8 & n ? e.uint.decode(d) : 0,
3796 connectionKeepAlive: o >= 24 && 16 & n ? e.uint.decode(d) : 0,
3797 }
3798 },
3799 },
3800 ct = { en: "en", it: "it", ru: "ru", es: "es", de: "de" },
3801 rt = {
3802 preencode(e, d) {
3803 e.end++
3804 },
3805 encode(d, o) {
3806 switch (o) {
3807 case "en":
3808 e.uint.encode(d, 1)
3809 break
3810 case "it":
3811 e.uint.encode(d, 2)
3812 break
3813 case "ru":
3814 e.uint.encode(d, 3)
3815 break
3816 case "es":
3817 e.uint.encode(d, 4)
3818 break
3819 case "de":
3820 e.uint.encode(d, 5)
3821 break
3822 default:
3823 throw new Error("Unknown enum")
3824 }
3825 },
3826 decode(d) {
3827 switch (e.uint.decode(d)) {
3828 case 1:
3829 return "en"
3830 case 2:
3831 return "it"
3832 case 3:
3833 return "ru"
3834 case 4:
3835 return "es"
3836 case 5:
3837 return "de"
3838 default:
3839 return null
3840 }
3841 },
3842 },
3843 tt = qd,
3844 it = {
3845 preencode(d, o) {
3846 ;(tt.preencode(d, o.range), rt.preencode(d, o.language), e.string.preencode(d, o.text))
3847 },
3848 encode(d, o) {
3849 ;(tt.encode(d, o.range), rt.encode(d, o.language), e.string.encode(d, o.text))
3850 },
3851 decode: (d) => ({ range: tt.decode(d), language: rt.decode(d), text: e.string.decode(d) }),
3852 },
3853 at = {
3854 preencode(d, o) {
3855 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.count))
3856 },
3857 encode(d, o) {
3858 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.count))
3859 },
3860 decode: (d) => ({ roomKey: e.fixed32.decode(d), count: e.uint.decode(d) }),
3861 },
3862 st = {
3863 preencode(d, o) {
3864 ;(e.fixed32.preencode(d, o.deviceKey), e.fixed32.preencode(d, o.key))
3865 },
3866 encode(d, o) {
3867 ;(e.fixed32.encode(d, o.deviceKey), e.fixed32.encode(d, o.key))
3868 },
3869 decode: (d) => ({ deviceKey: e.fixed32.decode(d), key: e.fixed32.decode(d) }),
3870 },
3871 pt = _,
3872 ut = {
3873 preencode(d, o) {
3874 ;(pt.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3875 },
3876 encode(d, o) {
3877 ;(pt.encode(d, o.header), e.fixed32.encode(d, o.key))
3878 },
3879 decode: (d) => ({ header: pt.decode(d), key: e.fixed32.decode(d) }),
3880 },
3881 lt = _,
3882 ft = {
3883 preencode(d, o) {
3884 ;(lt.preencode(d, o.header), e.fixed32.preencode(d, o.key))
3885 },
3886 encode(d, o) {
3887 ;(lt.encode(d, o.header), e.fixed32.encode(d, o.key))
3888 },
3889 decode: (d) => ({ header: lt.decode(d), key: e.fixed32.decode(d) }),
3890 },
3891 mt = { Flag: 1 },
3892 yt = {
3893 preencode(e, d) {
3894 e.end++
3895 },
3896 encode(d, o) {
3897 if (o > 1) throw new Error("Unknown enum")
3898 e.uint.encode(d, o)
3899 },
3900 decode: (d) => e.uint.decode(d),
3901 },
3902 xt = {
3903 preencode(d, o) {
3904 ;(fo.preencode(d, o.id),
3905 e.fixed32.preencode(d, o.sender),
3906 e.uint.preencode(d, o.clock),
3907 yt.preencode(d, o.label))
3908 },
3909 encode(d, o) {
3910 ;(fo.encode(d, o.id),
3911 e.fixed32.encode(d, o.sender),
3912 e.uint.encode(d, o.clock),
3913 yt.encode(d, o.label))
3914 },
3915 decode: (d) => ({
3916 id: fo.decode(d),
3917 sender: e.fixed32.decode(d),
3918 clock: e.uint.decode(d),
3919 label: yt.decode(d),
3920 }),
3921 },
3922 bt = _,
3923 vt = {
3924 preencode(e, d) {
3925 ;(bt.preencode(e, d.header), c.preencode(e, d.oplog), yt.preencode(e, d.label))
3926 },
3927 encode(e, d) {
3928 ;(bt.encode(e, d.header), c.encode(e, d.oplog), yt.encode(e, d.label))
3929 },
3930 decode: (e) => ({ header: bt.decode(e), oplog: c.decode(e), label: yt.decode(e) }),
3931 },
3932 kt = _,
3933 gt = {
3934 preencode(e, d) {
3935 ;(kt.preencode(e, d.header), c.preencode(e, d.oplog), yt.preencode(e, d.label))
3936 },
3937 encode(e, d) {
3938 ;(kt.encode(e, d.header), c.encode(e, d.oplog), yt.encode(e, d.label))
3939 },
3940 decode: (e) => ({ header: kt.decode(e), oplog: c.decode(e), label: yt.decode(e) }),
3941 },
3942 Kt = {
3943 preencode(d, o) {
3944 ;(yt.preencode(d, o.label), e.uint.preencode(d, o.count))
3945 },
3946 encode(d, o) {
3947 ;(yt.encode(d, o.label), e.uint.encode(d, o.count))
3948 },
3949 decode: (d) => ({ label: yt.decode(d), count: e.uint.decode(d) }),
3950 },
3951 ht = e.array(e.frame(Kt)),
3952 wt = {
3953 preencode(d, n) {
3954 ;(fo.preencode(d, n.id),
3955 e.uint.preencode(d, n.total),
3956 ht.preencode(d, n.labels),
3957 e.uint.preencode(d, n.editedAt),
3958 d.end++,
3959 o >= 24 && n.flagsClock && e.uint.preencode(d, n.flagsClock),
3960 o >= 24 && n.version && e.uint.preencode(d, n.version))
3961 },
3962 encode(d, n) {
3963 const c =
3964 (o >= 24 && n.flagsClock ? 1 : 0) |
3965 (o >= 24 && n.version ? 2 : 0) |
3966 (o >= 25 && n.isDeleted ? 4 : 0)
3967 ;(fo.encode(d, n.id),
3968 e.uint.encode(d, n.total),
3969 ht.encode(d, n.labels),
3970 e.uint.encode(d, n.editedAt),
3971 e.uint.encode(d, c),
3972 o >= 24 && n.flagsClock && e.uint.encode(d, n.flagsClock),
3973 o >= 24 && n.version && e.uint.encode(d, n.version))
3974 },
3975 decode(d) {
3976 const n = fo.decode(d),
3977 c = e.uint.decode(d),
3978 r = ht.decode(d),
3979 t = e.uint.decode(d),
3980 i = d.start < d.end ? e.uint.decode(d) : 0
3981 return {
3982 id: n,
3983 total: c,
3984 labels: r,
3985 editedAt: t,
3986 flagsClock: o >= 24 && 1 & i ? e.uint.decode(d) : 0,
3987 version: o >= 24 && 2 & i ? e.uint.decode(d) : 0,
3988 isDeleted: o >= 25 && !!(4 & i),
3989 }
3990 },
3991 },
3992 Pt = _,
3993 Tt = {
3994 preencode(d, o) {
3995 ;(Pt.preencode(d, o.header), e.uint.preencode(d, o.length))
3996 },
3997 encode(d, o) {
3998 ;(Pt.encode(d, o.header), e.uint.encode(d, o.length))
3999 },
4000 decode: (d) => ({ header: Pt.decode(d), length: e.uint.decode(d) }),
4001 },
4002 Rt = {
4003 preencode(d, o) {
4004 ;(e.fixed32.preencode(d, o.memberKey), e.uint.preencode(d, o.length))
4005 },
4006 encode(d, o) {
4007 ;(e.fixed32.encode(d, o.memberKey), e.uint.encode(d, o.length))
4008 },
4009 decode: (d) => ({ memberKey: e.fixed32.decode(d), length: e.uint.decode(d) }),
4010 },
4011 At = $,
4012 Mt = {
4013 preencode(e, d) {
4014 e.end++
4015 },
4016 encode(d, n) {
4017 const c = o >= 19 && n.disableReadReceipts ? 1 : 0
4018 e.uint.encode(d, c)
4019 },
4020 decode(d) {
4021 const n = e.uint.decode(d)
4022 return { disableReadReceipts: o >= 19 && !!(1 & n) }
4023 },
4024 },
4025 Dt = { disableReadReceipts: "disableReadReceipts" },
4026 Ct = {
4027 preencode(e, d) {
4028 e.end++
4029 },
4030 encode(d, o) {
4031 if ("disableReadReceipts" !== o) throw new Error("Unknown enum")
4032 e.uint.encode(d, 1)
4033 },
4034 decode: (d) => (1 === e.uint.decode(d) ? "disableReadReceipts" : null),
4035 },
4036 St = _,
4037 Ft = e.frame(Mt),
4038 It = {
4039 preencode(e, d) {
4040 ;(St.preencode(e, d.header), Ct.preencode(e, d.key), Ft.preencode(e, d.settings))
4041 },
4042 encode(e, d) {
4043 ;(St.encode(e, d.header), Ct.encode(e, d.key), Ft.encode(e, d.settings))
4044 },
4045 decode: (e) => ({ header: St.decode(e), key: Ct.decode(e), settings: Ft.decode(e) }),
4046 },
4047 Lt = {
4048 preencode(d, n) {
4049 ;(d.end++,
4050 o >= 20 && n.roomKey && e.fixed32.preencode(d, n.roomKey),
4051 o >= 23 && n.coreKey && e.fixed32.preencode(d, n.coreKey))
4052 },
4053 encode(d, n) {
4054 const c = (o >= 20 && n.roomKey ? 1 : 0) | (o >= 23 && n.coreKey ? 2 : 0)
4055 ;(e.uint.encode(d, c),
4056 o >= 20 && n.roomKey && e.fixed32.encode(d, n.roomKey),
4057 o >= 23 && n.coreKey && e.fixed32.encode(d, n.coreKey))
4058 },
4059 decode(d) {
4060 const n = e.uint.decode(d)
4061 return {
4062 roomKey: o >= 20 && 1 & n ? e.fixed32.decode(d) : null,
4063 coreKey: o >= 23 && 2 & n ? e.fixed32.decode(d) : null,
4064 }
4065 },
4066 },
4067 qt = e.frame(Lt),
4068 jt = {
4069 preencode(d, n) {
4070 ;(e.string.preencode(d, n.code),
4071 e.string.preencode(d, n.message),
4072 e.string.preencode(d, n.stack),
4073 e.uint.preencode(d, n.timestamp),
4074 d.end++,
4075 o >= 20 && n.details && qt.preencode(d, n.details))
4076 },
4077 encode(d, n) {
4078 const c = o >= 20 && n.details ? 1 : 0
4079 ;(e.string.encode(d, n.code),
4080 e.string.encode(d, n.message),
4081 e.string.encode(d, n.stack),
4082 e.uint.encode(d, n.timestamp),
4083 e.uint.encode(d, c),
4084 o >= 20 && n.details && qt.encode(d, n.details))
4085 },
4086 decode(d) {
4087 const n = e.string.decode(d),
4088 c = e.string.decode(d),
4089 r = e.string.decode(d),
4090 t = e.uint.decode(d),
4091 i = e.uint.decode(d)
4092 return {
4093 code: n,
4094 message: c,
4095 stack: r,
4096 timestamp: t,
4097 details: o >= 20 && 1 & i ? qt.decode(d) : null,
4098 }
4099 },
4100 },
4101 Et = { RESUME: 1, WAKEUP: 2, PRESUSPEND: 3, SUSPEND: 4 },
4102 Bt = {
4103 preencode(e, d) {
4104 e.end++
4105 },
4106 encode(d, o) {
4107 if (o > 4) throw new Error("Unknown enum")
4108 e.uint.encode(d, o)
4109 },
4110 decode: (d) => e.uint.decode(d),
4111 },
4112 Nt = {
4113 preencode(d, o) {
4114 ;(e.fixed32.preencode(d, o.roomKey), e.uint.preencode(d, o.total))
4115 },
4116 encode(d, o) {
4117 ;(e.fixed32.encode(d, o.roomKey), e.uint.encode(d, o.total))
4118 },
4119 decode: (d) => ({ roomKey: e.fixed32.decode(d), total: e.uint.decode(d) }),
4120 },
4121 Vt = { Flag: 1 },
4122 Ot = {
4123 preencode(e, d) {
4124 e.end++
4125 },
4126 encode(d, o) {
4127 if (o > 1) throw new Error("Unknown enum")
4128 e.uint.encode(d, o)
4129 },
4130 decode: (d) => e.uint.decode(d),
4131 },
4132 Ut = {
4133 preencode(d, o) {
4134 ;(e.fixed32.preencode(d, o.key),
4135 e.fixed32.preencode(d, o.sender),
4136 e.uint.preencode(d, o.clock),
4137 Ot.preencode(d, o.label))
4138 },
4139 encode(d, o) {
4140 ;(e.fixed32.encode(d, o.key),
4141 e.fixed32.encode(d, o.sender),
4142 e.uint.encode(d, o.clock),
4143 Ot.encode(d, o.label))
4144 },
4145 decode: (d) => ({
4146 key: e.fixed32.decode(d),
4147 sender: e.fixed32.decode(d),
4148 clock: e.uint.decode(d),
4149 label: Ot.decode(d),
4150 }),
4151 },
4152 Jt = _,
4153 Wt = {
4154 preencode(d, o) {
4155 ;(Jt.preencode(d, o.header), e.fixed32.preencode(d, o.key), Ot.preencode(d, o.label))
4156 },
4157 encode(d, o) {
4158 ;(Jt.encode(d, o.header), e.fixed32.encode(d, o.key), Ot.encode(d, o.label))
4159 },
4160 decode: (d) => ({ header: Jt.decode(d), key: e.fixed32.decode(d), label: Ot.decode(d) }),
4161 },
4162 Ht = {
4163 preencode(d, o) {
4164 ;(Ot.preencode(d, o.label), e.uint.preencode(d, o.count))
4165 },
4166 encode(d, o) {
4167 ;(Ot.encode(d, o.label), e.uint.encode(d, o.count))
4168 },
4169 decode: (d) => ({ label: Ot.decode(d), count: e.uint.decode(d) }),
4170 },
4171 zt = e.array(e.frame(Ht)),
4172 Gt = {
4173 preencode(d, o) {
4174 ;(e.fixed32.preencode(d, o.key),
4175 e.uint.preencode(d, o.total),
4176 zt.preencode(d, o.labels),
4177 e.uint.preencode(d, o.editedAt),
4178 e.uint.preencode(d, o.flagsClock))
4179 },
4180 encode(d, o) {
4181 ;(e.fixed32.encode(d, o.key),
4182 e.uint.encode(d, o.total),
4183 zt.encode(d, o.labels),
4184 e.uint.encode(d, o.editedAt),
4185 e.uint.encode(d, o.flagsClock))
4186 },
4187 decode: (d) => ({
4188 key: e.fixed32.decode(d),
4189 total: e.uint.decode(d),
4190 labels: zt.decode(d),
4191 editedAt: e.uint.decode(d),
4192 flagsClock: e.uint.decode(d),
4193 }),
4194 },
4195 Qt = {
4196 preencode(d, o) {
4197 ;(e.float64.preencode(d, o.latitude), e.float64.preencode(d, o.longitude))
4198 },
4199 encode(d, o) {
4200 ;(e.float64.encode(d, o.latitude), e.float64.encode(d, o.longitude))
4201 },
4202 decode: (d) => ({ latitude: e.float64.decode(d), longitude: e.float64.decode(d) }),
4203 },
4204 Xt = _,
4205 Yt = {
4206 preencode(d, o) {
4207 ;(Xt.preencode(d, o.header),
4208 e.fixed32.preencode(d, o.deviceKey),
4209 e.fixed32.preencode(d, o.fromDeviceKey))
4210 },
4211 encode(d, o) {
4212 ;(Xt.encode(d, o.header),
4213 e.fixed32.encode(d, o.deviceKey),
4214 e.fixed32.encode(d, o.fromDeviceKey))
4215 },
4216 decode: (d) => ({
4217 header: Xt.decode(d),
4218 deviceKey: e.fixed32.decode(d),
4219 fromDeviceKey: e.fixed32.decode(d),
4220 }),
4221 },
4222 Zt = _,
4223 $t = Y,
4224 _t = {
4225 preencode(d, n) {
4226 ;(Zt.preencode(d, n.header),
4227 e.fixed32.preencode(d, n.callKey),
4228 e.buffer.preencode(d, n.encryptionKey),
4229 d.end++,
4230 o >= 28 && n.streams && $t.preencode(d, n.streams),
4231 o >= 28 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
4232 o >= 28 && n.version && e.uint.preencode(d, n.version))
4233 },
4234 encode(d, n) {
4235 const c =
4236 (o >= 28 && n.streams ? 1 : 0) |
4237 (o >= 28 && n.discoveryKey ? 2 : 0) |
4238 (o >= 28 && n.version ? 4 : 0)
4239 ;(Zt.encode(d, n.header),
4240 e.fixed32.encode(d, n.callKey),
4241 e.buffer.encode(d, n.encryptionKey),
4242 e.uint.encode(d, c),
4243 o >= 28 && n.streams && $t.encode(d, n.streams),
4244 o >= 28 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
4245 o >= 28 && n.version && e.uint.encode(d, n.version))
4246 },
4247 decode(d) {
4248 const n = Zt.decode(d),
4249 c = e.fixed32.decode(d),
4250 r = e.buffer.decode(d),
4251 t = e.uint.decode(d)
4252 return {
4253 header: n,
4254 callKey: c,
4255 encryptionKey: r,
4256 streams: o >= 28 && 1 & t ? $t.decode(d) : null,
4257 discoveryKey: o >= 28 && 2 & t ? e.fixed32.decode(d) : null,
4258 version: o >= 28 && 4 & t ? e.uint.decode(d) : 0,
4259 }
4260 },
4261 },
4262 ei = _,
4263 di = Y,
4264 oi = {
4265 preencode(d, n) {
4266 ;(ei.preencode(d, n.header),
4267 e.fixed32.preencode(d, n.callKey),
4268 d.end++,
4269 o >= 28 && n.streams && di.preencode(d, n.streams))
4270 },
4271 encode(d, n) {
4272 const c = o >= 28 && n.streams ? 1 : 0
4273 ;(ei.encode(d, n.header),
4274 e.fixed32.encode(d, n.callKey),
4275 e.uint.encode(d, c),
4276 o >= 28 && n.streams && di.encode(d, n.streams))
4277 },
4278 decode(d) {
4279 const n = ei.decode(d),
4280 c = e.fixed32.decode(d),
4281 r = e.uint.decode(d)
4282 return { header: n, callKey: c, streams: o >= 28 && 1 & r ? di.decode(d) : null }
4283 },
4284 },
4285 ni = _,
4286 ci = {
4287 preencode(d, o) {
4288 ;(ni.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
4289 },
4290 encode(d, o) {
4291 ;(ni.encode(d, o.header), e.fixed32.encode(d, o.callKey))
4292 },
4293 decode: (d) => ({ header: ni.decode(d), callKey: e.fixed32.decode(d) }),
4294 },
4295 ri = _,
4296 ti = {
4297 preencode(d, o) {
4298 ;(ri.preencode(d, o.header), e.fixed32.preencode(d, o.callKey))
4299 },
4300 encode(d, o) {
4301 ;(ri.encode(d, o.header), e.fixed32.encode(d, o.callKey))
4302 },
4303 decode: (d) => ({ header: ri.decode(d), callKey: e.fixed32.decode(d) }),
4304 },
4305 ii = _,
4306 ai = {
4307 preencode(d, o) {
4308 ;(ii.preencode(d, o.header),
4309 e.fixed32.preencode(d, o.callKey),
4310 e.fixed32.preencode(d, o.streamKey))
4311 },
4312 encode(d, o) {
4313 ;(ii.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
4314 },
4315 decode: (d) => ({
4316 header: ii.decode(d),
4317 callKey: e.fixed32.decode(d),
4318 streamKey: e.fixed32.decode(d),
4319 }),
4320 },
4321 si = _,
4322 pi = {
4323 preencode(d, o) {
4324 ;(si.preencode(d, o.header),
4325 e.fixed32.preencode(d, o.callKey),
4326 e.fixed32.preencode(d, o.streamKey))
4327 },
4328 encode(d, o) {
4329 ;(si.encode(d, o.header), e.fixed32.encode(d, o.callKey), e.fixed32.encode(d, o.streamKey))
4330 },
4331 decode: (d) => ({
4332 header: si.decode(d),
4333 callKey: e.fixed32.decode(d),
4334 streamKey: e.fixed32.decode(d),
4335 }),
4336 },
4337 ui = {
4338 preencode(d, n) {
4339 ;(e.fixed32.preencode(d, n.callKey),
4340 e.buffer.preencode(d, n.encryptionKey),
4341 e.uint.preencode(d, n.createdAt),
4342 d.end++,
4343 o >= 28 && n.endedAt && e.uint.preencode(d, n.endedAt),
4344 o >= 28 && n.discoveryKey && e.fixed32.preencode(d, n.discoveryKey),
4345 o >= 28 && n.version && e.uint.preencode(d, n.version))
4346 },
4347 encode(d, n) {
4348 const c =
4349 (o >= 28 && n.endedAt ? 1 : 0) |
4350 (o >= 28 && n.discoveryKey ? 2 : 0) |
4351 (o >= 28 && n.version ? 4 : 0)
4352 ;(e.fixed32.encode(d, n.callKey),
4353 e.buffer.encode(d, n.encryptionKey),
4354 e.uint.encode(d, n.createdAt),
4355 e.uint.encode(d, c),
4356 o >= 28 && n.endedAt && e.uint.encode(d, n.endedAt),
4357 o >= 28 && n.discoveryKey && e.fixed32.encode(d, n.discoveryKey),
4358 o >= 28 && n.version && e.uint.encode(d, n.version))
4359 },
4360 decode(d) {
4361 const n = e.fixed32.decode(d),
4362 c = e.buffer.decode(d),
4363 r = e.uint.decode(d),
4364 t = e.uint.decode(d)
4365 return {
4366 callKey: n,
4367 encryptionKey: c,
4368 createdAt: r,
4369 endedAt: o >= 28 && 1 & t ? e.uint.decode(d) : 0,
4370 discoveryKey: o >= 28 && 2 & t ? e.fixed32.decode(d) : null,
4371 version: o >= 28 && 4 & t ? e.uint.decode(d) : 0,
4372 }
4373 },
4374 },
4375 li = {
4376 preencode(d, o) {
4377 ;(e.fixed32.preencode(d, o.callKey),
4378 e.fixed32.preencode(d, o.memberKey),
4379 e.uint.preencode(d, o.createdAt))
4380 },
4381 encode(d, o) {
4382 ;(e.fixed32.encode(d, o.callKey),
4383 e.fixed32.encode(d, o.memberKey),
4384 e.uint.encode(d, o.createdAt))
4385 },
4386 decode: (d) => ({
4387 callKey: e.fixed32.decode(d),
4388 memberKey: e.fixed32.decode(d),
4389 createdAt: e.uint.decode(d),
4390 }),
4391 },
4392 fi = {
4393 preencode(d, n) {
4394 ;(e.fixed32.preencode(d, n.callKey),
4395 e.fixed32.preencode(d, n.deviceKey),
4396 e.fixed32.preencode(d, n.memberKey),
4397 e.uint.preencode(d, n.createdAt),
4398 d.end++,
4399 o >= 28 && n.swarmKey && e.fixed32.preencode(d, n.swarmKey))
4400 },
4401 encode(d, n) {
4402 const c = o >= 28 && n.swarmKey ? 1 : 0
4403 ;(e.fixed32.encode(d, n.callKey),
4404 e.fixed32.encode(d, n.deviceKey),
4405 e.fixed32.encode(d, n.memberKey),
4406 e.uint.encode(d, n.createdAt),
4407 e.uint.encode(d, c),
4408 o >= 28 && n.swarmKey && e.fixed32.encode(d, n.swarmKey))
4409 },
4410 decode(d) {
4411 const n = e.fixed32.decode(d),
4412 c = e.fixed32.decode(d),
4413 r = e.fixed32.decode(d),
4414 t = e.uint.decode(d),
4415 i = e.uint.decode(d)
4416 return {
4417 callKey: n,
4418 deviceKey: c,
4419 memberKey: r,
4420 createdAt: t,
4421 swarmKey: o >= 28 && 1 & i ? e.fixed32.decode(d) : null,
4422 }
4423 },
4424 },
4425 mi = {
4426 preencode(d, o) {
4427 ;(e.fixed32.preencode(d, o.callKey),
4428 e.fixed32.preencode(d, o.deviceKey),
4429 e.buffer.preencode(d, o.streamKey),
4430 e.uint.preencode(d, o.createdAt))
4431 },
4432 encode(d, o) {
4433 ;(e.fixed32.encode(d, o.callKey),
4434 e.fixed32.encode(d, o.deviceKey),
4435 e.buffer.encode(d, o.streamKey),
4436 e.uint.encode(d, o.createdAt))
4437 },
4438 decode: (d) => ({
4439 callKey: e.fixed32.decode(d),
4440 deviceKey: e.fixed32.decode(d),
4441 streamKey: e.buffer.decode(d),
4442 createdAt: e.uint.decode(d),
4443 }),
4444 },
4445 yi = {
4446 preencode(d, n) {
4447 ;(e.fixed32.preencode(d, n.callKey),
4448 d.end++,
4449 o >= 28 && n.selfDeviceKey && e.fixed32.preencode(d, n.selfDeviceKey))
4450 },
4451 encode(d, n) {
4452 const c = o >= 28 && n.selfDeviceKey ? 1 : 0
4453 ;(e.fixed32.encode(d, n.callKey),
4454 e.uint.encode(d, c),
4455 o >= 28 && n.selfDeviceKey && e.fixed32.encode(d, n.selfDeviceKey))
4456 },
4457 decode(d) {
4458 const n = e.fixed32.decode(d),
4459 c = e.uint.decode(d)
4460 return { callKey: n, selfDeviceKey: o >= 28 && 1 & c ? e.fixed32.decode(d) : null }
4461 },
4462 },
4463 xi = {
4464 preencode(d, o) {
4465 e.uint.preencode(d, o.lastCleared)
4466 },
4467 encode(d, o) {
4468 e.uint.encode(d, o.lastCleared)
4469 },
4470 decode: (d) => ({ lastCleared: e.uint.decode(d) }),
4471 },
4472 bi = { Nightly: "Nightly", Internal: "Internal", Production: "Production" },
4473 vi = {
4474 preencode(e, d) {
4475 e.end++
4476 },
4477 encode(d, o) {
4478 switch (o) {
4479 case "Nightly":
4480 e.uint.encode(d, 1)
4481 break
4482 case "Internal":
4483 e.uint.encode(d, 2)
4484 break
4485 case "Production":
4486 e.uint.encode(d, 3)
4487 break
4488 default:
4489 throw new Error("Unknown enum")
4490 }
4491 },
4492 decode(d) {
4493 switch (e.uint.decode(d)) {
4494 case 1:
4495 return "Nightly"
4496 case 2:
4497 return "Internal"
4498 case 3:
4499 return "Production"
4500 default:
4501 return null
4502 }
4503 },
4504 },
4505 ki = _,
4506 gi = {
4507 preencode(e, d) {
4508 ki.preencode(e, d.header)
4509 },
4510 encode(e, d) {
4511 ki.encode(e, d.header)
4512 },
4513 decode: (e) => ({ header: ki.decode(e) }),
4514 },
4515 Ki = _,
4516 hi = {
4517 preencode(e, d) {
4518 Ki.preencode(e, d.header)
4519 },
4520 encode(e, d) {
4521 Ki.encode(e, d.header)
4522 },
4523 decode: (e) => ({ header: Ki.decode(e) }),
4524 },
4525 wi = {
4526 preencode(d, n) {
4527 ;(vi.preencode(d, n.buildType),
4528 d.end++,
4529 o >= 30 && n.latestOfflineAbi && e.uint.preencode(d, n.latestOfflineAbi))
4530 },
4531 encode(d, n) {
4532 const c = o >= 30 && n.latestOfflineAbi ? 1 : 0
4533 ;(vi.encode(d, n.buildType),
4534 e.uint.encode(d, c),
4535 o >= 30 && n.latestOfflineAbi && e.uint.encode(d, n.latestOfflineAbi))
4536 },
4537 decode(d) {
4538 const n = vi.decode(d),
4539 c = d.start < d.end ? e.uint.decode(d) : 0
4540 return { buildType: n, latestOfflineAbi: o >= 30 && 1 & c ? e.uint.decode(d) : 0 }
4541 },
4542 },
4543 Pi = e.frame(P),
4544 Ti = Pi,
4545 Ri = e.array(rt),
4546 Ai = e.frame(pe),
4547 Mi = Pi,
4548 Di = Ai,
4549 Ci = e.frame(Er),
4550 Si = Ai,
4551 Fi = e.frame(md),
4552 Ii = e.frame(Sr),
4553 Li = e.frame(Qt),
4554 qi = Li,
4555 ji = e.array(e.frame(it)),
4556 Ei = Pi,
4557 Bi = e.frame(Un),
4558 Ni = Bi,
4559 Vi = Bi,
4560 Oi = e.frame(Br),
4561 Ui = e.frame(Ir),
4562 Ji = e.array(e.frame(Rt)),
4563 Wi = e.frame(yi),
4564 Hi = Pi
4565function zi(e) {
4566 o = e
4567}
4568function Gi(d, n, c = 30) {
4569 return ((o = c), e.encode(Yi(d), n))
4570}
4571function Qi(d, n, c = 30) {
4572 return ((o = c), e.decode(Yi(d), n))
4573}
4574function Xi(e) {
4575 switch (e) {
4576 case "@keet/room-type":
4577 return U
4578 case "@local/tasks":
4579 return Dc
4580 case "@keet/display-type":
4581 return Gr
4582 case "@keet/system-settings-keys":
4583 return et
4584 case "@keet/room-supported-language":
4585 return ct
4586 case "@keet/label-type":
4587 return mt
4588 case "@keet-private-id/user-settings-key":
4589 return Dt
4590 case "@local/keet-state":
4591 return Et
4592 case "@keet/member-label-type":
4593 return Vt
4594 case "@keet/build-type":
4595 return bi
4596 default:
4597 throw new Error("Enum not found " + e)
4598 }
4599}
4600function Yi(e) {
4601 switch (e) {
4602 case "@keet/head":
4603 return n
4604 case "@keet/oplog-id":
4605 return c
4606 case "@keet/encryption-keypair":
4607 return r
4608 case "@keet/signing-keypair":
4609 return t
4610 case "@keet/room-keys":
4611 return i
4612 case "@keet/operation-header":
4613 return a
4614 case "@keet/blob-pointer":
4615 return s
4616 case "@keet/file-dimensions":
4617 return p
4618 case "@keet/file-metadata":
4619 return l
4620 case "@keet/external-drive-pointer":
4621 return f
4622 case "@keet/external-blob-pointer":
4623 return m
4624 case "@keet/file-pointer":
4625 return b
4626 case "@keet/file":
4627 return g
4628 case "@keet/image-file":
4629 return P
4630 case "@keet/file-status":
4631 return T
4632 case "@keet/file-record":
4633 return M
4634 case "@keet/device-status":
4635 return D
4636 case "@keet/member-status":
4637 return C
4638 case "@keet/member-moderation-status":
4639 return S
4640 case "@keet/abi":
4641 return F
4642 case "@keet/device-stats":
4643 return I
4644 case "@keet/member-stats":
4645 return L
4646 case "@keet/chat-stats":
4647 return q
4648 case "@keet/file-stats":
4649 return j
4650 case "@keet/stats":
4651 return O
4652 case "@keet/room-type":
4653 return J
4654 case "@keet/system-settings":
4655 return W
4656 case "@keet/system-digest":
4657 return G
4658 case "@keet/room-seed":
4659 return Q
4660 case "@keet/room-capabilities":
4661 return X
4662 case "@keet/room-config":
4663 return Z
4664 case "@keet/blind-peer":
4665 return $
4666 case "@keet/add-blind-peer-operation":
4667 return de
4668 case "@keet/remove-blind-peer-operation":
4669 return ne
4670 case "@keet/identity-attestation":
4671 return ce
4672 case "@keet/device-invitation":
4673 return re
4674 case "@keet/device":
4675 return ae
4676 case "@keet/member-profile":
4677 return se
4678 case "@keet/device-profile":
4679 return pe
4680 case "@keet/member-update":
4681 return le
4682 case "@keet/device-update":
4683 return fe
4684 case "@keet/signed-pairing-data":
4685 return me
4686 case "@keet/device-request-identity":
4687 return ye
4688 case "@keet/device-response-identity":
4689 return xe
4690 case "@keet/device-request-with-invitation":
4691 return ge
4692 case "@keet/device-request-with-invitation-and-proof":
4693 return he
4694 case "@keet/device-request-with-member-proof":
4695 return Te
4696 case "@keet/device-request":
4697 return Me
4698 case "@keet/device-response":
4699 return Se
4700 case "@keet/invitation-metadata":
4701 return Fe
4702 case "@keet/invitation":
4703 return qe
4704 case "@keet/add-invitation-operation":
4705 return Be
4706 case "@keet/remove-invitation-operation":
4707 return Ve
4708 case "@keet/sendable-room-invitation":
4709 return Oe
4710 case "@keet/sendable-identity-invitation":
4711 return Ue
4712 case "@keet/sendable-contact-invitation":
4713 return Je
4714 case "@keet/sendable-invitation":
4715 return Qe
4716 case "@keet/add-device-operation":
4717 return Ye
4718 case "@keet/update-device-operation":
4719 return $e
4720 case "@keet/start-indexing-operation":
4721 return _e
4722 case "@keet/stop-indexing-operation":
4723 return ed
4724 case "@keet/join-request":
4725 return od
4726 case "@keet/accept-join-request-operation":
4727 return rd
4728 case "@keet/reject-join-request-operation":
4729 return id
4730 case "@keet/member":
4731 return pd
4732 case "@keet/full-member":
4733 return fd
4734 case "@keet/member-proofs":
4735 return md
4736 case "@keet/update-member-operation":
4737 return bd
4738 case "@keet/change-member-status-operation":
4739 return gd
4740 case "@keet/change-member-role-operation":
4741 return hd
4742 case "@keet/remove-member-operation":
4743 return Pd
4744 case "@keet/member-activity":
4745 return Td
4746 case "@keet/member-joined-event":
4747 return Rd
4748 case "@keet/member-left-event":
4749 return Ad
4750 case "@keet/title-changed-chat-event":
4751 return Md
4752 case "@keet/chat-event":
4753 return Fd
4754 case "@keet/sendable-event":
4755 return Id
4756 case "@keet/display-range":
4757 return Ld
4758 case "@keet/display-content-range":
4759 return jd
4760 case "@keet/mention-display-item":
4761 return Bd
4762 case "@keet/link-preview":
4763 return Od
4764 case "@keet/display-link-item":
4765 return Wd
4766 case "@keet/display":
4767 return eo
4768 case "@keet/oplog-message":
4769 return ro
4770 case "@keet/index-message":
4771 return ao
4772 case "@keet/full-index-message":
4773 return uo
4774 case "@keet/message-status":
4775 return lo
4776 case "@keet/message-index-id":
4777 return fo
4778 case "@keet/thread":
4779 return yo
4780 case "@keet/chat-message-record":
4781 return ko
4782 case "@keet/full-chat-message-record":
4783 return wo
4784 case "@keet/add-chat-message-operation":
4785 return Ro
4786 case "@keet/remove-chat-message-operation":
4787 return Mo
4788 case "@keet/update-chat-message-operation":
4789 return So
4790 case "@keet/pin-chat-message-operation":
4791 return Io
4792 case "@keet/reaction":
4793 return Lo
4794 case "@keet/reactions-summary":
4795 return qo
4796 case "@keet/reactions-digest":
4797 return Eo
4798 case "@keet/add-reaction-operation":
4799 return No
4800 case "@keet/remove-reaction-operation":
4801 return Oo
4802 case "@keet/update-room-config-operation":
4803 return Wo
4804 case "@keet/group-member":
4805 return Ho
4806 case "@keet/user-registry-info":
4807 return zo
4808 case "@keet/room-identity":
4809 return Qo
4810 case "@keet/genesis-operation":
4811 return on
4812 case "@keet/upgrade-operation":
4813 return cn
4814 case "@keet/update-system-settings-operation":
4815 return an
4816 case "@keet-private-id/contact":
4817 return sn
4818 case "@keet-private-id/v3-room-migration-info":
4819 return pn
4820 case "@keet-private-id/run-v3-migration-operation":
4821 return fn
4822 case "@keet-private-id/update-identity-operation":
4823 return yn
4824 case "@keet-private-id/counters":
4825 return xn
4826 case "@keet-private-id/stats":
4827 return bn
4828 case "@keet-private-id/add-entropy-operation":
4829 return vn
4830 case "@keet-private-id/pending-invitation-identity":
4831 return kn
4832 case "@keet-private-id/pending-invitation":
4833 return Kn
4834 case "@keet-private-id/resolve-pending-invitation-operation":
4835 return wn
4836 case "@keet-private-id/add-pending-invitation-operation":
4837 return Rn
4838 case "@keet-private-id/remove-pending-invitation-operation":
4839 return Mn
4840 case "@keet-private-id/identity-swap":
4841 return Dn
4842 case "@keet-private-id/room-status":
4843 return Cn
4844 case "@keet-private-id/room":
4845 return Ln
4846 case "@keet-private-id/add-room-operation":
4847 return jn
4848 case "@keet-private-id/remove-room-operation":
4849 return Bn
4850 case "@keet-private-id/update-room-status-operation":
4851 return On
4852 case "@keet-private-id/contact-status":
4853 return Un
4854 case "@keet-private-id/contact-record":
4855 return Jn
4856 case "@keet-private-id/add-contact-operation":
4857 return zn
4858 case "@keet-private-id/update-contact-status-operation":
4859 return Qn
4860 case "@keet-private-id/remove-contact-operation":
4861 return Yn
4862 case "@keet-private-id/contact-request-status":
4863 return Zn
4864 case "@keet-private-id/contact-request-body":
4865 return ec
4866 case "@keet-private-id/contact-request":
4867 return oc
4868 case "@keet-private-id/contact-request-record":
4869 return tc
4870 case "@keet-private-id/add-contact-request-operation":
4871 return ac
4872 case "@keet-private-id/update-contact-request-status-operation":
4873 return uc
4874 case "@keet-private-id/profile-discovery-record-v1":
4875 return lc
4876 case "@keet-private-id/profile-discovery-record":
4877 return fc
4878 case "@local/background-sync-room":
4879 return mc
4880 case "@local/stats":
4881 return yc
4882 case "@local/migration-status":
4883 return xc
4884 case "@local/v3-private-profile-migration":
4885 return vc
4886 case "@local/v3-room-migration":
4887 return Kc
4888 case "@local/room-migration-stats":
4889 return hc
4890 case "@local/room-migration":
4891 return Pc
4892 case "@local/identity-status":
4893 return Tc
4894 case "@local/identity-record":
4895 return Mc
4896 case "@local/tasks":
4897 return Cc
4898 case "@local/room-keys":
4899 return Sc
4900 case "@local/join-room-invitation-task":
4901 return Ic
4902 case "@local/join-room-response-task":
4903 return Lc
4904 case "@local/fast-forward-to":
4905 return qc
4906 case "@local/add-room-fields":
4907 return jc
4908 case "@local/join-room-keys-task":
4909 return Bc
4910 case "@local/create-room-task":
4911 return Vc
4912 case "@local/leave-room-task":
4913 return Oc
4914 case "@local/clear-room-task":
4915 return Uc
4916 case "@local/restore-identity-task":
4917 return Jc
4918 case "@local/send-contact-request-task":
4919 return Wc
4920 case "@local/migrate-v2-room-task":
4921 return Hc
4922 case "@local/task":
4923 return dr
4924 case "@local/shared-invitation":
4925 return nr
4926 case "@local/room-status":
4927 return cr
4928 case "@local/room-timestamps":
4929 return rr
4930 case "@local/room":
4931 return kr
4932 case "@local/room-preferences":
4933 return Kr
4934 case "@local/writer":
4935 return hr
4936 case "@local/member":
4937 return Pr
4938 case "@local/device":
4939 return Rr
4940 case "@local/file":
4941 return Mr
4942 case "@keet/add-file-preview-operation":
4943 return Cr
4944 case "@keet/member-removed-event":
4945 return Sr
4946 case "@keet/member-contact-info":
4947 return Ir
4948 case "@keet/remove-device-operation":
4949 return qr
4950 case "@keet/device-identity":
4951 return jr
4952 case "@keet/readonly-room-invitation":
4953 return Er
4954 case "@keet-private-id/identity-swap-v2":
4955 return Br
4956 case "@keet-private-id/activate-contact-room-operation":
4957 return Vr
4958 case "@local/identity-swap":
4959 return Or
4960 case "@local/writer-append":
4961 return Ur
4962 case "@local/room-metadata":
4963 return Jr
4964 case "@local/debug-flag":
4965 return Wr
4966 case "@local/debug":
4967 return zr
4968 case "@keet/display-type":
4969 return Qr
4970 case "@keet/test-increment-operation":
4971 return Yr
4972 case "@keet/test-collection-record-1":
4973 return Zr
4974 case "@keet/migrate-abi-operation":
4975 return _r
4976 case "@keet/system-settings-keys":
4977 return dt
4978 case "@local/hyperdht-record":
4979 return nt
4980 case "@keet/room-supported-language":
4981 return rt
4982 case "@keet/translation-display-item":
4983 return it
4984 case "@local/unread":
4985 return at
4986 case "@keet-private-id/unreads":
4987 return st
4988 case "@keet-private-id/add-unreads-key-operation":
4989 return ut
4990 case "@keet-private-id/remove-unreads-key-operation":
4991 return ft
4992 case "@keet/label-type":
4993 return yt
4994 case "@keet/chat-label":
4995 return xt
4996 case "@keet/add-chat-label-operation":
4997 return vt
4998 case "@keet/remove-chat-label-operation":
4999 return gt
5000 case "@keet/chat-label-summary":
5001 return Kt
5002 case "@keet/chat-label-digest":
5003 return wt
5004 case "@keet/update-read-length-operation":
5005 return Tt
5006 case "@keet/read-length":
5007 return Rt
5008 case "@keet/tmp-removed-member":
5009 return At
5010 case "@keet-private-id/settings":
5011 return Mt
5012 case "@keet-private-id/user-settings-key":
5013 return Ct
5014 case "@keet-private-id/update-settings-operation":
5015 return It
5016 case "@local/error-record-details":
5017 return Lt
5018 case "@local/error-record":
5019 return jt
5020 case "@local/keet-state":
5021 return Bt
5022 case "@local/file-stats":
5023 return Nt
5024 case "@keet/member-label-type":
5025 return Ot
5026 case "@keet/member-label":
5027 return Ut
5028 case "@keet/add-member-label-operation":
5029 return Wt
5030 case "@keet/member-label-summary":
5031 return Ht
5032 case "@keet/member-label-digest":
5033 return Gt
5034 case "@keet/location-shared-event":
5035 return Qt
5036 case "@keet/move-indexer-operation":
5037 return Yt
5038 case "@keet/start-call":
5039 return _t
5040 case "@keet/join-call":
5041 return oi
5042 case "@keet/leave-call":
5043 return ci
5044 case "@keet/end-call":
5045 return ti
5046 case "@keet/add-call-stream":
5047 return ai
5048 case "@keet/remove-call-stream":
5049 return pi
5050 case "@keet/call-record":
5051 return ui
5052 case "@keet/call-member-record":
5053 return li
5054 case "@keet/call-device-record":
5055 return fi
5056 case "@keet/call-stream-record":
5057 return mi
5058 case "@local/active-call":
5059 return yi
5060 case "@local/file-gc-info":
5061 return xi
5062 case "@keet/build-type":
5063 return vi
5064 case "@keet/test-crash-operation":
5065 return gi
5066 case "@keet/test-dispatch-error-operation":
5067 return hi
5068 case "@local/environment-record":
5069 return wi
5070 default:
5071 throw new Error("Encoder not found " + e)
5072 }
5073}
5074function Zi(e, d = 30) {
5075 const n = Yi(e)
5076 return {
5077 preencode(e, c) {
5078 ;((o = d), n.preencode(e, c))
5079 },
5080 encode(e, c) {
5081 ;((o = d), n.encode(e, c))
5082 },
5083 decode: (e) => ((o = d), n.decode(e)),
5084 }
5085}
5086const $i = Zi
5087module.exports = {
5088 resolveStruct: $i,
5089 getStruct: Zi,
5090 getEnum: Xi,
5091 getEncoding: Yi,
5092 encode: Gi,
5093 decode: Qi,
5094 setVersion: zi,
5095 version: o,
5096}
keet-core-4.14.4-pretty/schema/spec/local/hyperschema/schema.json +6266 -0
……@@ -0,0 +1,6266 @@
1{
2 "version": 30,
3 "schema": [
4 {
5 "name": "public-key",
6 "namespace": "keet",
7 "alias": "fixed32",
8 "version": 1
9 },
10 {
11 "name": "secret-key",
12 "namespace": "keet",
13 "alias": "buffer",
14 "version": 1
15 },
16 {
17 "name": "room-key",
18 "namespace": "keet",
19 "alias": "fixed32",
20 "version": 1
21 },
22 {
23 "name": "encryption-key",
24 "namespace": "keet",
25 "alias": "buffer",
26 "version": 1
27 },
28 {
29 "name": "room-discovery-key",
30 "namespace": "keet",
31 "alias": "fixed32",
32 "version": 1
33 },
34 {
35 "name": "core-key",
36 "namespace": "keet",
37 "alias": "fixed32",
38 "version": 1
39 },
40 {
41 "name": "device-key",
42 "namespace": "keet",
43 "alias": "fixed32",
44 "version": 1
45 },
46 {
47 "name": "invitation-id",
48 "namespace": "keet",
49 "alias": "fixed32",
50 "version": 1
51 },
52 {
53 "name": "member-key",
54 "namespace": "keet",
55 "alias": "fixed32",
56 "version": 1
57 },
58 {
59 "name": "swarm-key",
60 "namespace": "keet",
61 "alias": "fixed32",
62 "version": 1
63 },
64 {
65 "name": "core-seq",
66 "namespace": "keet",
67 "alias": "uint",
68 "version": 1
69 },
70 {
71 "name": "head",
72 "namespace": "keet",
73 "compact": true,
74 "flagsPosition": -1,
75 "fields": [
76 {
77 "name": "key",
78 "required": true,
79 "type": "@keet/device-key",
80 "version": 1
81 },
82 {
83 "name": "length",
84 "required": true,
85 "type": "uint",
86 "version": 1
87 }
88 ]
89 },
90 {
91 "name": "oplog-id",
92 "namespace": "keet",
93 "compact": true,
94 "flagsPosition": -1,
95 "fields": [
96 {
97 "name": "key",
98 "required": true,
99 "type": "@keet/device-key",
100 "version": 1
101 },
102 {
103 "name": "seq",
104 "required": true,
105 "type": "@keet/core-seq",
106 "version": 1
107 }
108 ]
109 },
110 {
111 "name": "encryption-keypair",
112 "namespace": "keet",
113 "compact": true,
114 "flagsPosition": -1,
115 "fields": [
116 {
117 "name": "publicKey",
118 "required": true,
119 "type": "fixed32",
120 "version": 1
121 },
122 {
123 "name": "secretKey",
124 "required": true,
125 "type": "fixed32",
126 "version": 1
127 }
128 ]
129 },
130 {
131 "name": "signing-keypair",
132 "namespace": "keet",
133 "compact": true,
134 "flagsPosition": -1,
135 "fields": [
136 {
137 "name": "publicKey",
138 "required": true,
139 "type": "fixed32",
140 "version": 1
141 },
142 {
143 "name": "secretKey",
144 "required": true,
145 "type": "fixed64",
146 "version": 1
147 }
148 ]
149 },
150 {
151 "name": "room-keys",
152 "namespace": "keet",
153 "compact": false,
154 "flagsPosition": 1,
155 "fields": [
156 {
157 "name": "key",
158 "required": true,
159 "type": "@keet/room-key",
160 "version": 1
161 },
162 {
163 "name": "encryptionKey",
164 "type": "@keet/encryption-key",
165 "version": 1
166 },
167 {
168 "name": "fastForwardTo",
169 "type": "fixed32",
170 "version": 1
171 }
172 ]
173 },
174 {
175 "name": "operation-header",
176 "namespace": "keet",
177 "compact": false,
178 "flagsPosition": -1,
179 "fields": [
180 {
181 "name": "timestamp",
182 "required": true,
183 "type": "uint",
184 "version": 1
185 }
186 ]
187 },
188 {
189 "name": "blob-pointer",
190 "namespace": "keet",
191 "compact": true,
192 "flagsPosition": -1,
193 "fields": [
194 {
195 "name": "blockOffset",
196 "required": true,
197 "type": "uint",
198 "version": 1
199 },
200 {
201 "name": "blockLength",
202 "required": true,
203 "type": "uint",
204 "version": 1
205 },
206 {
207 "name": "byteOffset",
208 "required": true,
209 "type": "uint",
210 "version": 1
211 },
212 {
213 "name": "byteLength",
214 "required": true,
215 "type": "uint",
216 "version": 1
217 }
218 ]
219 },
220 {
221 "name": "file-dimensions",
222 "namespace": "keet",
223 "compact": false,
224 "flagsPosition": -1,
225 "fields": [
226 {
227 "name": "width",
228 "required": true,
229 "type": "uint",
230 "version": 1
231 },
232 {
233 "name": "height",
234 "required": true,
235 "type": "uint",
236 "version": 1
237 }
238 ]
239 },
240 {
241 "name": "file-metadata",
242 "namespace": "keet",
243 "compact": false,
244 "flagsPosition": 0,
245 "fields": [
246 {
247 "name": "name",
248 "type": "string",
249 "version": 1
250 },
251 {
252 "name": "mimetype",
253 "type": "string",
254 "version": 1
255 },
256 {
257 "name": "dimensions",
258 "type": "@keet/file-dimensions",
259 "version": 1
260 },
261 {
262 "name": "userdata",
263 "type": "buffer",
264 "version": 1
265 },
266 {
267 "name": "duration",
268 "type": "uint",
269 "version": 1
270 },
271 {
272 "name": "isPreview",
273 "type": "bool",
274 "version": 1
275 }
276 ]
277 },
278 {
279 "name": "external-drive-pointer",
280 "namespace": "keet",
281 "compact": false,
282 "flagsPosition": -1,
283 "fields": [
284 {
285 "name": "key",
286 "required": true,
287 "type": "@keet/core-key",
288 "version": 1
289 },
290 {
291 "name": "path",
292 "required": true,
293 "type": "string",
294 "version": 1
295 },
296 {
297 "name": "version",
298 "required": true,
299 "type": "uint",
300 "version": 1
301 },
302 {
303 "name": "size",
304 "required": true,
305 "type": "uint",
306 "version": 1
307 }
308 ]
309 },
310 {
311 "name": "external-blob-pointer",
312 "namespace": "keet",
313 "compact": false,
314 "flagsPosition": -1,
315 "fields": [
316 {
317 "name": "key",
318 "required": true,
319 "type": "@keet/core-key",
320 "version": 1
321 },
322 {
323 "name": "blob",
324 "required": true,
325 "type": "@keet/blob-pointer",
326 "version": 1
327 }
328 ]
329 },
330 {
331 "name": "file-pointer",
332 "namespace": "keet",
333 "compact": false,
334 "flagsPosition": 0,
335 "fields": [
336 {
337 "name": "inlined",
338 "type": "buffer",
339 "version": 1
340 },
341 {
342 "name": "blob",
343 "type": "@keet/blob-pointer",
344 "version": 1
345 },
346 {
347 "name": "externalBlob",
348 "type": "@keet/external-blob-pointer",
349 "version": 1
350 },
351 {
352 "name": "externalDrive",
353 "type": "@keet/external-drive-pointer",
354 "version": 1
355 }
356 ]
357 },
358 {
359 "name": "file",
360 "namespace": "keet",
361 "compact": false,
362 "flagsPosition": 1,
363 "fields": [
364 {
365 "name": "pointer",
366 "required": true,
367 "type": "@keet/file-pointer",
368 "version": 1
369 },
370 {
371 "name": "metadata",
372 "type": "@keet/file-metadata",
373 "version": 1
374 },
375 {
376 "name": "preview",
377 "type": "@keet/image-file",
378 "version": 1
379 },
380 {
381 "name": "hash",
382 "type": "fixed32",
383 "version": 1
384 }
385 ]
386 },
387 {
388 "name": "image-file",
389 "namespace": "keet",
390 "compact": false,
391 "flagsPosition": 0,
392 "fields": [
393 {
394 "name": "small",
395 "type": "@keet/file",
396 "version": 1
397 },
398 {
399 "name": "medium",
400 "type": "@keet/file",
401 "version": 1
402 },
403 {
404 "name": "large",
405 "type": "@keet/file",
406 "version": 1
407 }
408 ]
409 },
410 {
411 "name": "file-status",
412 "namespace": "keet",
413 "compact": false,
414 "flagsPosition": 0,
415 "fields": [
416 {
417 "name": "isDeleted",
418 "type": "bool",
419 "version": 1
420 }
421 ]
422 },
423 {
424 "name": "file-record",
425 "namespace": "keet",
426 "compact": false,
427 "flagsPosition": 4,
428 "fields": [
429 {
430 "name": "id",
431 "required": true,
432 "type": "uint",
433 "version": 1
434 },
435 {
436 "name": "oplog",
437 "required": true,
438 "type": "@keet/oplog-id",
439 "version": 1
440 },
441 {
442 "name": "status",
443 "required": true,
444 "type": "@keet/file-status",
445 "version": 1
446 },
447 {
448 "name": "file",
449 "required": true,
450 "type": "@keet/file",
451 "version": 1
452 },
453 {
454 "name": "version",
455 "type": "uint",
456 "version": 22
457 }
458 ]
459 },
460 {
461 "name": "device-status",
462 "namespace": "keet",
463 "compact": false,
464 "flagsPosition": 0,
465 "fields": [
466 {
467 "name": "isActive",
468 "type": "bool",
469 "version": 1
470 },
471 {
472 "name": "isIndexing",
473 "type": "bool",
474 "version": 1
475 }
476 ]
477 },
478 {
479 "name": "member-status",
480 "namespace": "keet",
481 "compact": false,
482 "flagsPosition": 0,
483 "fields": [
484 {
485 "name": "isAdmin",
486 "type": "bool",
487 "version": 1
488 },
489 {
490 "name": "isModerator",
491 "type": "bool",
492 "version": 1
493 },
494 {
495 "name": "isPending",
496 "type": "bool",
497 "version": 1
498 },
499 {
500 "name": "isActive",
501 "type": "bool",
502 "version": 1
503 },
504 {
505 "name": "isMuted",
506 "type": "bool",
507 "version": 1
508 },
509 {
510 "name": "isBanned",
511 "type": "bool",
512 "version": 1
513 },
514 {
515 "name": "isShadowBanned",
516 "type": "bool",
517 "version": 1
518 },
519 {
520 "name": "isRemoved",
521 "type": "bool",
522 "version": 19
523 }
524 ]
525 },
526 {
527 "name": "member-moderation-status",
528 "namespace": "keet",
529 "compact": false,
530 "flagsPosition": 0,
531 "fields": [
532 {
533 "name": "isMuted",
534 "type": "bool",
535 "version": 1
536 },
537 {
538 "name": "isBanned",
539 "type": "bool",
540 "version": 1
541 },
542 {
543 "name": "isShadowBanned",
544 "type": "bool",
545 "version": 1
546 }
547 ]
548 },
549 {
550 "name": "abi",
551 "namespace": "keet",
552 "compact": false,
553 "flagsPosition": -1,
554 "fields": [
555 {
556 "name": "version",
557 "required": true,
558 "type": "uint",
559 "version": 1
560 }
561 ]
562 },
563 {
564 "name": "device-stats",
565 "namespace": "keet",
566 "compact": false,
567 "flagsPosition": -1,
568 "fields": [
569 {
570 "name": "total",
571 "required": true,
572 "type": "uint",
573 "version": 1
574 },
575 {
576 "name": "active",
577 "required": true,
578 "type": "uint",
579 "version": 1
580 }
581 ]
582 },
583 {
584 "name": "member-stats",
585 "namespace": "keet",
586 "compact": false,
587 "flagsPosition": -1,
588 "fields": [
589 {
590 "name": "total",
591 "required": true,
592 "type": "uint",
593 "version": 1
594 },
595 {
596 "name": "active",
597 "required": true,
598 "type": "uint",
599 "version": 1
600 },
601 {
602 "name": "pending",
603 "required": true,
604 "type": "uint",
605 "version": 1
606 }
607 ]
608 },
609 {
610 "name": "chat-stats",
611 "namespace": "keet",
612 "compact": false,
613 "flagsPosition": 4,
614 "fields": [
615 {
616 "name": "clock",
617 "required": true,
618 "type": "uint",
619 "version": 1
620 },
621 {
622 "name": "pinned",
623 "required": true,
624 "type": "uint",
625 "version": 1
626 },
627 {
628 "name": "threads",
629 "required": true,
630 "type": "uint",
631 "version": 1
632 },
633 {
634 "name": "timestamp",
635 "required": true,
636 "type": "uint",
637 "version": 1
638 },
639 {
640 "name": "flagsClock",
641 "type": "uint",
642 "version": 24
643 }
644 ]
645 },
646 {
647 "name": "file-stats",
648 "namespace": "keet",
649 "compact": false,
650 "flagsPosition": -1,
651 "fields": [
652 {
653 "name": "clock",
654 "required": true,
655 "type": "uint",
656 "version": 1
657 }
658 ]
659 },
660 {
661 "name": "stats",
662 "namespace": "keet",
663 "compact": false,
664 "flagsPosition": -1,
665 "fields": [
666 {
667 "name": "devices",
668 "required": true,
669 "type": "@keet/device-stats",
670 "version": 1
671 },
672 {
673 "name": "members",
674 "required": true,
675 "type": "@keet/member-stats",
676 "version": 1
677 },
678 {
679 "name": "chat",
680 "required": true,
681 "type": "@keet/chat-stats",
682 "version": 1
683 },
684 {
685 "name": "files",
686 "required": true,
687 "type": "@keet/file-stats",
688 "version": 1
689 }
690 ]
691 },
692 {
693 "name": "room-type",
694 "namespace": "keet",
695 "offset": 1,
696 "enum": [
697 {
698 "key": "Default",
699 "version": 1
700 },
701 {
702 "key": "Broadcast",
703 "version": 1
704 },
705 {
706 "key": "DirectMessage",
707 "version": 1
708 }
709 ],
710 "strings": false
711 },
712 {
713 "name": "system-settings",
714 "namespace": "keet",
715 "compact": false,
716 "flagsPosition": 0,
717 "fields": [
718 {
719 "name": "roomType",
720 "type": "@keet/room-type",
721 "version": 1
722 },
723 {
724 "name": "isExperimental",
725 "type": "bool",
726 "version": 1
727 },
728 {
729 "name": "isJoiningDisabled",
730 "type": "bool",
731 "version": 1
732 },
733 {
734 "name": "isAppendingDisabled",
735 "type": "bool",
736 "version": 1
737 },
738 {
739 "name": "isCallingDisabled",
740 "type": "bool",
741 "version": 1
742 },
743 {
744 "name": "isMembershipEventsDisabled",
745 "type": "bool",
746 "version": 1
747 },
748 {
749 "name": "isAttachmentsDisabled",
750 "type": "bool",
751 "version": 28
752 },
753 {
754 "name": "isLinksDisabled",
755 "type": "bool",
756 "version": 28
757 },
758 {
759 "name": "buildType",
760 "type": "@keet/build-type",
761 "version": 29
762 }
763 ]
764 },
765 {
766 "name": "system-digest",
767 "namespace": "keet",
768 "compact": false,
769 "flagsPosition": -1,
770 "fields": [
771 {
772 "name": "abi",
773 "required": true,
774 "type": "@keet/abi",
775 "version": 1
776 },
777 {
778 "name": "settings",
779 "required": true,
780 "type": "@keet/system-settings",
781 "version": 1
782 },
783 {
784 "name": "creationTime",
785 "required": true,
786 "type": "uint",
787 "version": 1
788 }
789 ]
790 },
791 {
792 "name": "room-seed",
793 "namespace": "keet",
794 "compact": false,
795 "flagsPosition": -1,
796 "fields": [
797 {
798 "name": "seed",
799 "required": true,
800 "type": "fixed32",
801 "version": 1
802 }
803 ]
804 },
805 {
806 "name": "room-capabilities",
807 "namespace": "keet",
808 "compact": false,
809 "flagsPosition": -1,
810 "fields": [
811 {
812 "name": "mailboxKeyPair",
813 "required": true,
814 "type": "@keet/encryption-keypair",
815 "version": 1
816 },
817 {
818 "name": "discoveryKeyPair",
819 "required": true,
820 "type": "@keet/signing-keypair",
821 "version": 1
822 },
823 {
824 "name": "wakeupTopic",
825 "required": true,
826 "type": "@keet/room-discovery-key",
827 "version": 1
828 },
829 {
830 "name": "swarmTopic",
831 "required": true,
832 "type": "@keet/room-discovery-key",
833 "version": 1
834 }
835 ]
836 },
837 {
838 "name": "room-config",
839 "namespace": "keet",
840 "compact": false,
841 "flagsPosition": 0,
842 "fields": [
843 {
844 "name": "title",
845 "type": "string",
846 "version": 1
847 },
848 {
849 "name": "avatar",
850 "type": "@keet/image-file",
851 "version": 1
852 },
853 {
854 "name": "description",
855 "type": "string",
856 "version": 1
857 },
858 {
859 "name": "supportedLanguages",
860 "array": true,
861 "type": "@keet/room-supported-language",
862 "version": 17
863 },
864 {
865 "name": "blindPeers",
866 "array": true,
867 "type": "fixed32",
868 "version": 19
869 }
870 ]
871 },
872 {
873 "name": "blind-peer",
874 "namespace": "keet",
875 "compact": false,
876 "flagsPosition": -1,
877 "fields": [
878 {
879 "name": "key",
880 "required": true,
881 "type": "@keet/public-key",
882 "version": 1
883 }
884 ]
885 },
886 {
887 "name": "add-blind-peer-operation",
888 "namespace": "keet",
889 "compact": false,
890 "flagsPosition": -1,
891 "fields": [
892 {
893 "name": "header",
894 "required": true,
895 "type": "@keet/operation-header",
896 "version": 1
897 },
898 {
899 "name": "peer",
900 "required": true,
901 "type": "@keet/blind-peer",
902 "version": 1
903 }
904 ]
905 },
906 {
907 "name": "remove-blind-peer-operation",
908 "namespace": "keet",
909 "compact": false,
910 "flagsPosition": -1,
911 "fields": [
912 {
913 "name": "header",
914 "required": true,
915 "type": "@keet/operation-header",
916 "version": 1
917 },
918 {
919 "name": "key",
920 "required": true,
921 "type": "@keet/public-key",
922 "version": 1
923 }
924 ]
925 },
926 {
927 "name": "identity-attestation",
928 "namespace": "keet",
929 "compact": true,
930 "flagsPosition": -1,
931 "fields": [
932 {
933 "name": "memberKey",
934 "required": true,
935 "type": "@keet/member-key",
936 "version": 1
937 },
938 {
939 "name": "proof",
940 "required": true,
941 "type": "buffer",
942 "version": 1
943 }
944 ]
945 },
946 {
947 "name": "device-invitation",
948 "namespace": "keet",
949 "compact": false,
950 "flagsPosition": -1,
951 "fields": [
952 {
953 "name": "id",
954 "required": true,
955 "type": "@keet/invitation-id",
956 "version": 1
957 },
958 {
959 "name": "response",
960 "required": true,
961 "type": "buffer",
962 "version": 1
963 }
964 ]
965 },
966 {
967 "name": "device",
968 "namespace": "keet",
969 "compact": false,
970 "flagsPosition": 4,
971 "fields": [
972 {
973 "name": "key",
974 "required": true,
975 "type": "@keet/device-key",
976 "version": 1
977 },
978 {
979 "name": "memberKey",
980 "required": true,
981 "type": "@keet/member-key",
982 "version": 1
983 },
984 {
985 "name": "status",
986 "required": true,
987 "type": "@keet/device-status",
988 "version": 1
989 },
990 {
991 "name": "profile",
992 "required": true,
993 "type": "@keet/device-profile",
994 "version": 1
995 },
996 {
997 "name": "invitation",
998 "type": "@keet/device-invitation",
999 "version": 1
1000 }
1001 ]
1002 },
1003 {
1004 "name": "member-profile",
1005 "namespace": "keet",
1006 "compact": false,
1007 "flagsPosition": 1,
1008 "fields": [
1009 {
1010 "name": "timestamp",
1011 "required": true,
1012 "type": "uint",
1013 "version": 1
1014 },
1015 {
1016 "name": "mailbox",
1017 "type": "@keet/public-key",
1018 "version": 1
1019 },
1020 {
1021 "name": "displayName",
1022 "type": "string",
1023 "version": 1
1024 },
1025 {
1026 "name": "avatar",
1027 "type": "@keet/image-file",
1028 "version": 1
1029 },
1030 {
1031 "name": "username",
1032 "type": "string",
1033 "version": 1
1034 }
1035 ]
1036 },
1037 {
1038 "name": "device-profile",
1039 "namespace": "keet",
1040 "compact": false,
1041 "flagsPosition": 0,
1042 "fields": [
1043 {
1044 "name": "swarmKey",
1045 "type": "@keet/swarm-key",
1046 "version": 1
1047 },
1048 {
1049 "name": "name",
1050 "type": "string",
1051 "version": 1
1052 },
1053 {
1054 "name": "isMobile",
1055 "type": "bool",
1056 "version": 1
1057 },
1058 {
1059 "name": "buildType",
1060 "type": "@keet/build-type",
1061 "version": 29
1062 }
1063 ]
1064 },
1065 {
1066 "name": "member-update",
1067 "namespace": "keet",
1068 "compact": false,
1069 "flagsPosition": -1,
1070 "fields": [
1071 {
1072 "name": "profile",
1073 "required": true,
1074 "type": "@keet/member-profile",
1075 "version": 1
1076 },
1077 {
1078 "name": "attestation",
1079 "required": true,
1080 "type": "@keet/identity-attestation",
1081 "version": 1
1082 }
1083 ]
1084 },
1085 {
1086 "name": "device-update",
1087 "namespace": "keet",
1088 "compact": false,
1089 "flagsPosition": -1,
1090 "fields": [
1091 {
1092 "name": "profile",
1093 "required": true,
1094 "type": "@keet/device-profile",
1095 "version": 1
1096 },
1097 {
1098 "name": "attestation",
1099 "required": true,
1100 "type": "@keet/identity-attestation",
1101 "version": 1
1102 }
1103 ]
1104 },
1105 {
1106 "name": "signed-pairing-data",
1107 "namespace": "keet",
1108 "compact": false,
1109 "flagsPosition": -1,
1110 "fields": [
1111 {
1112 "name": "id",
1113 "required": true,
1114 "type": "@keet/invitation-id",
1115 "version": 1
1116 },
1117 {
1118 "name": "data",
1119 "required": true,
1120 "type": "buffer",
1121 "version": 1
1122 },
1123 {
1124 "name": "signature",
1125 "required": true,
1126 "type": "buffer",
1127 "version": 1
1128 }
1129 ]
1130 },
1131 {
1132 "name": "device-request-identity",
1133 "namespace": "keet",
1134 "compact": false,
1135 "flagsPosition": -1,
1136 "fields": [
1137 {
1138 "name": "devicePublicKey",
1139 "required": true,
1140 "type": "@keet/public-key",
1141 "version": 1
1142 }
1143 ]
1144 },
1145 {
1146 "name": "device-response-identity",
1147 "namespace": "keet",
1148 "compact": false,
1149 "flagsPosition": -1,
1150 "fields": [
1151 {
1152 "name": "privateProfileIdentity",
1153 "required": true,
1154 "type": "@keet/identity-attestation",
1155 "version": 1
1156 },
1157 {
1158 "name": "deviceProof",
1159 "required": true,
1160 "type": "buffer",
1161 "version": 1
1162 }
1163 ]
1164 },
1165 {
1166 "name": "device-request-with-invitation",
1167 "namespace": "keet",
1168 "compact": false,
1169 "flagsPosition": 4,
1170 "fields": [
1171 {
1172 "name": "deviceKey",
1173 "required": true,
1174 "type": "@keet/device-key",
1175 "version": 1
1176 },
1177 {
1178 "name": "keyPair",
1179 "required": true,
1180 "type": "@keet/signing-keypair",
1181 "version": 1
1182 },
1183 {
1184 "name": "device",
1185 "required": true,
1186 "type": "@keet/device-update",
1187 "version": 1
1188 },
1189 {
1190 "name": "member",
1191 "required": true,
1192 "type": "@keet/member-update",
1193 "version": 1
1194 },
1195 {
1196 "name": "identity",
1197 "type": "@keet/device-request-identity",
1198 "version": 1
1199 }
1200 ]
1201 },
1202 {
1203 "name": "device-request-with-invitation-and-proof",
1204 "namespace": "keet",
1205 "compact": false,
1206 "flagsPosition": -1,
1207 "fields": [
1208 {
1209 "name": "id",
1210 "required": true,
1211 "type": "@keet/invitation-id",
1212 "version": 1
1213 },
1214 {
1215 "name": "request",
1216 "required": true,
1217 "type": "@keet/device-request-with-invitation",
1218 "version": 1
1219 },
1220 {
1221 "name": "signature",
1222 "required": true,
1223 "type": "buffer",
1224 "version": 1
1225 }
1226 ]
1227 },
1228 {
1229 "name": "device-request-with-member-proof",
1230 "namespace": "keet",
1231 "compact": false,
1232 "flagsPosition": 1,
1233 "fields": [
1234 {
1235 "name": "device",
1236 "required": true,
1237 "type": "@keet/device-update",
1238 "version": 1
1239 },
1240 {
1241 "name": "member",
1242 "type": "@keet/member-update",
1243 "version": 1
1244 }
1245 ]
1246 },
1247 {
1248 "name": "device-request",
1249 "namespace": "keet",
1250 "compact": false,
1251 "flagsPosition": 0,
1252 "fields": [
1253 {
1254 "name": "withInvitation",
1255 "type": "@keet/device-request-with-invitation-and-proof",
1256 "version": 1
1257 },
1258 {
1259 "name": "withMemberProof",
1260 "type": "@keet/device-request-with-member-proof",
1261 "version": 1
1262 }
1263 ]
1264 },
1265 {
1266 "name": "device-response",
1267 "namespace": "keet",
1268 "compact": false,
1269 "flagsPosition": 1,
1270 "fields": [
1271 {
1272 "name": "signedKeys",
1273 "required": true,
1274 "type": "@keet/signed-pairing-data",
1275 "version": 1
1276 },
1277 {
1278 "name": "identity",
1279 "type": "@keet/device-response-identity",
1280 "version": 1
1281 }
1282 ]
1283 },
1284 {
1285 "name": "invitation-metadata",
1286 "namespace": "keet",
1287 "compact": false,
1288 "flagsPosition": 0,
1289 "fields": [
1290 {
1291 "name": "expiration",
1292 "type": "uint",
1293 "version": 1
1294 },
1295 {
1296 "name": "requiresConfirmation",
1297 "type": "bool",
1298 "version": 1
1299 },
1300 {
1301 "name": "canModerate",
1302 "type": "bool",
1303 "version": 1
1304 },
1305 {
1306 "name": "canAdmin",
1307 "type": "bool",
1308 "version": 1
1309 },
1310 {
1311 "name": "buildType",
1312 "type": "@keet/build-type",
1313 "version": 29
1314 }
1315 ]
1316 },
1317 {
1318 "name": "invitation",
1319 "namespace": "keet",
1320 "compact": false,
1321 "flagsPosition": 3,
1322 "fields": [
1323 {
1324 "name": "id",
1325 "required": true,
1326 "type": "@keet/invitation-id",
1327 "version": 1
1328 },
1329 {
1330 "name": "response",
1331 "required": true,
1332 "type": "@keet/signed-pairing-data",
1333 "version": 1
1334 },
1335 {
1336 "name": "metadata",
1337 "required": true,
1338 "type": "@keet/invitation-metadata",
1339 "version": 1
1340 },
1341 {
1342 "name": "anchor",
1343 "type": "@keet/head",
1344 "version": 1
1345 },
1346 {
1347 "name": "isActive",
1348 "type": "bool",
1349 "version": 1
1350 }
1351 ]
1352 },
1353 {
1354 "name": "add-invitation-operation",
1355 "namespace": "keet",
1356 "compact": false,
1357 "flagsPosition": -1,
1358 "fields": [
1359 {
1360 "name": "header",
1361 "required": true,
1362 "type": "@keet/operation-header",
1363 "version": 1
1364 },
1365 {
1366 "name": "invitation",
1367 "required": true,
1368 "type": "@keet/invitation",
1369 "version": 1
1370 }
1371 ]
1372 },
1373 {
1374 "name": "remove-invitation-operation",
1375 "namespace": "keet",
1376 "compact": false,
1377 "flagsPosition": -1,
1378 "fields": [
1379 {
1380 "name": "header",
1381 "required": true,
1382 "type": "@keet/operation-header",
1383 "version": 1
1384 },
1385 {
1386 "name": "id",
1387 "required": true,
1388 "type": "fixed32",
1389 "version": 1
1390 }
1391 ]
1392 },
1393 {
1394 "name": "sendable-room-invitation",
1395 "namespace": "keet",
1396 "compact": false,
1397 "flagsPosition": -1,
1398 "fields": [
1399 {
1400 "name": "mailbox",
1401 "required": true,
1402 "type": "fixed32",
1403 "version": 1
1404 },
1405 {
1406 "name": "invitationSeed",
1407 "required": true,
1408 "type": "fixed32",
1409 "version": 1
1410 },
1411 {
1412 "name": "anchor",
1413 "required": true,
1414 "type": "@keet/head",
1415 "version": 1
1416 }
1417 ]
1418 },
1419 {
1420 "name": "sendable-identity-invitation",
1421 "namespace": "keet",
1422 "compact": false,
1423 "flagsPosition": -1,
1424 "fields": [
1425 {
1426 "name": "mailbox",
1427 "required": true,
1428 "type": "fixed32",
1429 "version": 1
1430 },
1431 {
1432 "name": "invitationSeed",
1433 "required": true,
1434 "type": "fixed32",
1435 "version": 1
1436 },
1437 {
1438 "name": "anchor",
1439 "required": true,
1440 "type": "@keet/head",
1441 "version": 1
1442 },
1443 {
1444 "name": "identityPublicKey",
1445 "required": true,
1446 "type": "@keet/member-key",
1447 "version": 1
1448 }
1449 ]
1450 },
1451 {
1452 "name": "sendable-contact-invitation",
1453 "namespace": "keet",
1454 "compact": false,
1455 "flagsPosition": -1,
1456 "fields": [
1457 {
1458 "name": "mailbox",
1459 "required": true,
1460 "type": "fixed32",
1461 "version": 1
1462 }
1463 ]
1464 },
1465 {
1466 "name": "sendable-invitation",
1467 "namespace": "keet",
1468 "compact": false,
1469 "flagsPosition": 0,
1470 "fields": [
1471 {
1472 "name": "room",
1473 "type": "@keet/sendable-room-invitation",
1474 "version": 1
1475 },
1476 {
1477 "name": "identity",
1478 "type": "@keet/sendable-identity-invitation",
1479 "version": 1
1480 },
1481 {
1482 "name": "contact",
1483 "type": "@keet/sendable-contact-invitation",
1484 "version": 1
1485 },
1486 {
1487 "name": "readonly",
1488 "type": "@keet/readonly-room-invitation",
1489 "version": 9
1490 },
1491 {
1492 "name": "additionalNodes",
1493 "array": true,
1494 "type": "ipv4Address",
1495 "version": 17
1496 },
1497 {
1498 "name": "buildType",
1499 "type": "@keet/build-type",
1500 "version": 29
1501 }
1502 ]
1503 },
1504 {
1505 "name": "add-device-operation",
1506 "namespace": "keet",
1507 "compact": false,
1508 "flagsPosition": -1,
1509 "fields": [
1510 {
1511 "name": "header",
1512 "required": true,
1513 "type": "@keet/operation-header",
1514 "version": 1
1515 },
1516 {
1517 "name": "blindRequest",
1518 "required": true,
1519 "type": "buffer",
1520 "version": 1
1521 }
1522 ]
1523 },
1524 {
1525 "name": "update-device-operation",
1526 "namespace": "keet",
1527 "compact": false,
1528 "flagsPosition": 1,
1529 "fields": [
1530 {
1531 "name": "header",
1532 "required": true,
1533 "type": "@keet/operation-header",
1534 "version": 1
1535 },
1536 {
1537 "name": "profile",
1538 "type": "@keet/device-profile",
1539 "version": 1
1540 }
1541 ]
1542 },
1543 {
1544 "name": "start-indexing-operation",
1545 "namespace": "keet",
1546 "compact": false,
1547 "flagsPosition": -1,
1548 "fields": []
1549 },
1550 {
1551 "name": "stop-indexing-operation",
1552 "namespace": "keet",
1553 "compact": false,
1554 "flagsPosition": -1,
1555 "fields": []
1556 },
1557 {
1558 "name": "join-request",
1559 "namespace": "keet",
1560 "compact": false,
1561 "flagsPosition": -1,
1562 "fields": [
1563 {
1564 "name": "deviceKey",
1565 "required": true,
1566 "type": "@keet/device-key",
1567 "version": 1
1568 },
1569 {
1570 "name": "id",
1571 "required": true,
1572 "type": "@keet/invitation-id",
1573 "version": 1
1574 },
1575 {
1576 "name": "request",
1577 "required": true,
1578 "type": "@keet/device-request-with-invitation",
1579 "version": 1
1580 }
1581 ]
1582 },
1583 {
1584 "name": "accept-join-request-operation",
1585 "namespace": "keet",
1586 "compact": false,
1587 "flagsPosition": 2,
1588 "fields": [
1589 {
1590 "name": "header",
1591 "required": true,
1592 "type": "@keet/operation-header",
1593 "version": 1
1594 },
1595 {
1596 "name": "deviceKey",
1597 "required": true,
1598 "type": "@keet/device-key",
1599 "version": 1
1600 },
1601 {
1602 "name": "identity",
1603 "type": "@keet/device-response-identity",
1604 "version": 1
1605 }
1606 ]
1607 },
1608 {
1609 "name": "reject-join-request-operation",
1610 "namespace": "keet",
1611 "compact": false,
1612 "flagsPosition": -1,
1613 "fields": [
1614 {
1615 "name": "header",
1616 "required": true,
1617 "type": "@keet/operation-header",
1618 "version": 1
1619 },
1620 {
1621 "name": "deviceKey",
1622 "required": true,
1623 "type": "@keet/device-key",
1624 "version": 1
1625 }
1626 ]
1627 },
1628 {
1629 "name": "member",
1630 "namespace": "keet",
1631 "compact": false,
1632 "flagsPosition": -1,
1633 "fields": [
1634 {
1635 "name": "key",
1636 "required": true,
1637 "type": "@keet/member-key",
1638 "version": 1
1639 },
1640 {
1641 "name": "status",
1642 "required": true,
1643 "type": "@keet/member-status",
1644 "version": 1
1645 },
1646 {
1647 "name": "profile",
1648 "required": true,
1649 "type": "@keet/member-profile",
1650 "version": 1
1651 }
1652 ]
1653 },
1654 {
1655 "name": "full-member",
1656 "namespace": "keet",
1657 "compact": false,
1658 "flagsPosition": 3,
1659 "fields": [
1660 {
1661 "name": "key",
1662 "required": true,
1663 "type": "@keet/member-key",
1664 "version": 1
1665 },
1666 {
1667 "name": "status",
1668 "required": true,
1669 "type": "@keet/member-status",
1670 "version": 1
1671 },
1672 {
1673 "name": "profile",
1674 "required": true,
1675 "type": "@keet/member-profile",
1676 "version": 1
1677 },
1678 {
1679 "name": "proofs",
1680 "type": "@keet/member-proofs",
1681 "version": 1
1682 }
1683 ]
1684 },
1685 {
1686 "name": "member-proofs",
1687 "namespace": "keet",
1688 "compact": false,
1689 "flagsPosition": 1,
1690 "fields": [
1691 {
1692 "name": "key",
1693 "required": true,
1694 "type": "@keet/member-key",
1695 "version": 1
1696 },
1697 {
1698 "name": "profileAttestation",
1699 "type": "buffer",
1700 "version": 1
1701 },
1702 {
1703 "name": "latestReceipt",
1704 "type": "buffer",
1705 "version": 1
1706 }
1707 ]
1708 },
1709 {
1710 "name": "update-member-operation",
1711 "namespace": "keet",
1712 "compact": false,
1713 "flagsPosition": -1,
1714 "fields": [
1715 {
1716 "name": "header",
1717 "required": true,
1718 "type": "@keet/operation-header",
1719 "version": 1
1720 },
1721 {
1722 "name": "member",
1723 "required": true,
1724 "type": "@keet/member-update",
1725 "version": 1
1726 }
1727 ]
1728 },
1729 {
1730 "name": "change-member-status-operation",
1731 "namespace": "keet",
1732 "compact": false,
1733 "flagsPosition": -1,
1734 "fields": [
1735 {
1736 "name": "header",
1737 "required": true,
1738 "type": "@keet/operation-header",
1739 "version": 1
1740 },
1741 {
1742 "name": "memberKey",
1743 "required": true,
1744 "type": "@keet/member-key",
1745 "version": 1
1746 },
1747 {
1748 "name": "key",
1749 "required": true,
1750 "type": "uint",
1751 "version": 1
1752 },
1753 {
1754 "name": "status",
1755 "required": true,
1756 "type": "@keet/member-moderation-status",
1757 "version": 1
1758 }
1759 ]
1760 },
1761 {
1762 "name": "change-member-role-operation",
1763 "namespace": "keet",
1764 "compact": false,
1765 "flagsPosition": 2,
1766 "fields": [
1767 {
1768 "name": "header",
1769 "required": true,
1770 "type": "@keet/operation-header",
1771 "version": 1
1772 },
1773 {
1774 "name": "key",
1775 "required": true,
1776 "type": "@keet/member-key",
1777 "version": 1
1778 },
1779 {
1780 "name": "isModerator",
1781 "type": "bool",
1782 "version": 1
1783 },
1784 {
1785 "name": "isAdmin",
1786 "type": "bool",
1787 "version": 1
1788 }
1789 ]
1790 },
1791 {
1792 "name": "remove-member-operation",
1793 "namespace": "keet",
1794 "compact": false,
1795 "flagsPosition": -1,
1796 "fields": [
1797 {
1798 "name": "header",
1799 "required": true,
1800 "type": "@keet/operation-header",
1801 "version": 1
1802 },
1803 {
1804 "name": "key",
1805 "required": true,
1806 "type": "@keet/member-key",
1807 "version": 1
1808 }
1809 ]
1810 },
1811 {
1812 "name": "member-activity",
1813 "namespace": "keet",
1814 "compact": false,
1815 "flagsPosition": -1,
1816 "fields": [
1817 {
1818 "name": "key",
1819 "required": true,
1820 "type": "@keet/member-key",
1821 "version": 1
1822 },
1823 {
1824 "name": "mentions",
1825 "required": true,
1826 "type": "uint",
1827 "version": 1
1828 }
1829 ]
1830 },
1831 {
1832 "name": "member-joined-event",
1833 "namespace": "keet",
1834 "compact": false,
1835 "flagsPosition": 0,
1836 "fields": [
1837 {
1838 "name": "memberKey",
1839 "type": "@keet/member-key",
1840 "version": 1
1841 }
1842 ]
1843 },
1844 {
1845 "name": "member-left-event",
1846 "namespace": "keet",
1847 "compact": false,
1848 "flagsPosition": 0,
1849 "fields": [
1850 {
1851 "name": "memberKey",
1852 "type": "@keet/member-key",
1853 "version": 1
1854 }
1855 ]
1856 },
1857 {
1858 "name": "title-changed-chat-event",
1859 "namespace": "keet",
1860 "compact": false,
1861 "flagsPosition": 0,
1862 "fields": [
1863 {
1864 "name": "from",
1865 "type": "string",
1866 "version": 1
1867 },
1868 {
1869 "name": "to",
1870 "type": "string",
1871 "version": 1
1872 }
1873 ]
1874 },
1875 {
1876 "name": "chat-event",
1877 "namespace": "keet",
1878 "compact": false,
1879 "flagsPosition": 0,
1880 "fields": [
1881 {
1882 "name": "memberJoined",
1883 "type": "@keet/member-joined-event",
1884 "version": 1
1885 },
1886 {
1887 "name": "memberLeft",
1888 "type": "@keet/member-left-event",
1889 "version": 1
1890 },
1891 {
1892 "name": "titleChanged",
1893 "type": "@keet/title-changed-chat-event",
1894 "version": 1
1895 },
1896 {
1897 "name": "callStarted",
1898 "type": "bool",
1899 "version": 1
1900 },
1901 {
1902 "name": "callHangup",
1903 "type": "bool",
1904 "version": 1
1905 },
1906 {
1907 "name": "callMissed",
1908 "type": "bool",
1909 "version": 1
1910 },
1911 {
1912 "name": "roomAvatarChanged",
1913 "type": "bool",
1914 "version": 4
1915 },
1916 {
1917 "name": "invitationCreated",
1918 "type": "bool",
1919 "version": 4
1920 },
1921 {
1922 "name": "memberRemoved",
1923 "type": "@keet/member-removed-event",
1924 "version": 4
1925 },
1926 {
1927 "name": "locationShared",
1928 "type": "@keet/location-shared-event",
1929 "version": 27
1930 }
1931 ]
1932 },
1933 {
1934 "name": "sendable-event",
1935 "namespace": "keet",
1936 "compact": false,
1937 "flagsPosition": 0,
1938 "fields": [
1939 {
1940 "name": "callStarted",
1941 "type": "bool",
1942 "version": 1
1943 },
1944 {
1945 "name": "callHangup",
1946 "type": "bool",
1947 "version": 1
1948 },
1949 {
1950 "name": "callMissed",
1951 "type": "bool",
1952 "version": 1
1953 },
1954 {
1955 "name": "locationShared",
1956 "type": "@keet/location-shared-event",
1957 "version": 27
1958 }
1959 ]
1960 },
1961 {
1962 "name": "display-range",
1963 "namespace": "keet",
1964 "compact": false,
1965 "flagsPosition": -1,
1966 "fields": [
1967 {
1968 "name": "start",
1969 "required": true,
1970 "type": "uint",
1971 "version": 1
1972 },
1973 {
1974 "name": "length",
1975 "required": true,
1976 "type": "uint",
1977 "version": 1
1978 }
1979 ]
1980 },
1981 {
1982 "name": "display-content-range",
1983 "namespace": "keet",
1984 "compact": false,
1985 "flagsPosition": -1,
1986 "fields": [
1987 {
1988 "name": "range",
1989 "required": true,
1990 "type": "@keet/display-range",
1991 "version": 1
1992 },
1993 {
1994 "name": "content",
1995 "required": true,
1996 "type": "string",
1997 "version": 1
1998 }
1999 ]
2000 },
2001 {
2002 "name": "mention-display-item",
2003 "namespace": "keet",
2004 "compact": false,
2005 "flagsPosition": -1,
2006 "fields": [
2007 {
2008 "name": "range",
2009 "required": true,
2010 "type": "@keet/display-range",
2011 "version": 1
2012 },
2013 {
2014 "name": "memberKey",
2015 "required": true,
2016 "type": "@keet/member-key",
2017 "version": 1
2018 }
2019 ]
2020 },
2021 {
2022 "name": "link-preview",
2023 "namespace": "keet",
2024 "compact": false,
2025 "flagsPosition": 0,
2026 "fields": [
2027 {
2028 "name": "title",
2029 "type": "string",
2030 "version": 1
2031 },
2032 {
2033 "name": "description",
2034 "type": "string",
2035 "version": 1
2036 },
2037 {
2038 "name": "file",
2039 "type": "@keet/file",
2040 "version": 1
2041 },
2042 {
2043 "name": "files",
2044 "array": true,
2045 "type": "uint",
2046 "version": 12
2047 }
2048 ]
2049 },
2050 {
2051 "name": "display-link-item",
2052 "namespace": "keet",
2053 "compact": false,
2054 "flagsPosition": 2,
2055 "fields": [
2056 {
2057 "name": "range",
2058 "required": true,
2059 "type": "@keet/display-range",
2060 "version": 1
2061 },
2062 {
2063 "name": "url",
2064 "required": true,
2065 "type": "string",
2066 "version": 1
2067 },
2068 {
2069 "name": "preview",
2070 "type": "@keet/link-preview",
2071 "version": 1
2072 }
2073 ]
2074 },
2075 {
2076 "name": "display",
2077 "namespace": "keet",
2078 "compact": false,
2079 "flagsPosition": 0,
2080 "fields": [
2081 {
2082 "name": "mention",
2083 "array": true,
2084 "type": "@keet/mention-display-item",
2085 "version": 1
2086 },
2087 {
2088 "name": "httpLink",
2089 "array": true,
2090 "type": "@keet/display-link-item",
2091 "version": 1
2092 },
2093 {
2094 "name": "pearLink",
2095 "array": true,
2096 "type": "@keet/display-link-item",
2097 "version": 1
2098 },
2099 {
2100 "name": "bold",
2101 "array": true,
2102 "type": "@keet/display-range",
2103 "version": 1
2104 },
2105 {
2106 "name": "italic",
2107 "array": true,
2108 "type": "@keet/display-range",
2109 "version": 1
2110 },
2111 {
2112 "name": "code",
2113 "array": true,
2114 "type": "@keet/display-range",
2115 "version": 1
2116 },
2117 {
2118 "name": "emoji",
2119 "array": true,
2120 "type": "@keet/display-content-range",
2121 "version": 1
2122 },
2123 {
2124 "name": "codeBlock",
2125 "array": true,
2126 "type": "@keet/display-range",
2127 "version": 1
2128 },
2129 {
2130 "name": "strike",
2131 "array": true,
2132 "type": "@keet/display-range",
2133 "version": 1
2134 },
2135 {
2136 "name": "translation",
2137 "array": true,
2138 "type": "@keet/translation-display-item",
2139 "version": 17
2140 }
2141 ]
2142 },
2143 {
2144 "name": "oplog-message",
2145 "namespace": "keet",
2146 "compact": false,
2147 "flagsPosition": 0,
2148 "fields": [
2149 {
2150 "name": "text",
2151 "type": "string",
2152 "version": 1
2153 },
2154 {
2155 "name": "files",
2156 "array": true,
2157 "type": "@keet/file",
2158 "version": 1
2159 },
2160 {
2161 "name": "display",
2162 "type": "@keet/display",
2163 "version": 1
2164 },
2165 {
2166 "name": "replyTo",
2167 "type": "@keet/oplog-id",
2168 "version": 1
2169 },
2170 {
2171 "name": "parent",
2172 "type": "@keet/oplog-id",
2173 "version": 1
2174 },
2175 {
2176 "name": "event",
2177 "type": "@keet/sendable-event",
2178 "version": 1
2179 },
2180 {
2181 "name": "forwarded",
2182 "type": "bool",
2183 "version": 27
2184 }
2185 ]
2186 },
2187 {
2188 "name": "index-message",
2189 "namespace": "keet",
2190 "compact": false,
2191 "flagsPosition": 0,
2192 "fields": [
2193 {
2194 "name": "text",
2195 "type": "string",
2196 "version": 1
2197 },
2198 {
2199 "name": "files",
2200 "array": true,
2201 "type": "uint",
2202 "version": 1
2203 },
2204 {
2205 "name": "display",
2206 "type": "@keet/display",
2207 "version": 1
2208 },
2209 {
2210 "name": "replyTo",
2211 "type": "@keet/oplog-id",
2212 "version": 1
2213 },
2214 {
2215 "name": "parent",
2216 "type": "@keet/oplog-id",
2217 "version": 1
2218 },
2219 {
2220 "name": "forwarded",
2221 "type": "bool",
2222 "version": 27
2223 }
2224 ]
2225 },
2226 {
2227 "name": "full-index-message",
2228 "namespace": "keet",
2229 "compact": false,
2230 "flagsPosition": 0,
2231 "fields": [
2232 {
2233 "name": "text",
2234 "type": "string",
2235 "version": 1
2236 },
2237 {
2238 "name": "files",
2239 "array": true,
2240 "type": "@keet/file",
2241 "version": 1
2242 },
2243 {
2244 "name": "display",
2245 "type": "@keet/display",
2246 "version": 1
2247 },
2248 {
2249 "name": "replyTo",
2250 "type": "@keet/oplog-id",
2251 "version": 1
2252 },
2253 {
2254 "name": "parent",
2255 "type": "@keet/oplog-id",
2256 "version": 1
2257 },
2258 {
2259 "name": "forwarded",
2260 "type": "bool",
2261 "version": 27
2262 }
2263 ]
2264 },
2265 {
2266 "name": "message-status",
2267 "namespace": "keet",
2268 "compact": false,
2269 "flagsPosition": 0,
2270 "fields": [
2271 {
2272 "name": "isEdited",
2273 "type": "bool",
2274 "version": 1
2275 },
2276 {
2277 "name": "isDeleted",
2278 "type": "bool",
2279 "version": 1
2280 },
2281 {
2282 "name": "isPinned",
2283 "type": "bool",
2284 "version": 1
2285 }
2286 ]
2287 },
2288 {
2289 "name": "message-index-id",
2290 "namespace": "keet",
2291 "compact": true,
2292 "flagsPosition": -1,
2293 "fields": [
2294 {
2295 "name": "thread",
2296 "required": true,
2297 "type": "uint",
2298 "version": 1
2299 },
2300 {
2301 "name": "index",
2302 "required": true,
2303 "type": "uint",
2304 "version": 1
2305 }
2306 ]
2307 },
2308 {
2309 "name": "thread",
2310 "namespace": "keet",
2311 "compact": false,
2312 "flagsPosition": 2,
2313 "fields": [
2314 {
2315 "name": "id",
2316 "required": true,
2317 "type": "uint",
2318 "version": 1
2319 },
2320 {
2321 "name": "count",
2322 "required": true,
2323 "type": "uint",
2324 "version": 1
2325 },
2326 {
2327 "name": "parent",
2328 "type": "@keet/oplog-id",
2329 "version": 1
2330 },
2331 {
2332 "name": "stats",
2333 "type": "@keet/stats",
2334 "version": 1
2335 }
2336 ]
2337 },
2338 {
2339 "name": "chat-message-record",
2340 "namespace": "keet",
2341 "compact": false,
2342 "flagsPosition": 4,
2343 "fields": [
2344 {
2345 "name": "id",
2346 "required": true,
2347 "type": "@keet/message-index-id",
2348 "version": 1
2349 },
2350 {
2351 "name": "oplog",
2352 "required": true,
2353 "type": "@keet/oplog-id",
2354 "version": 1
2355 },
2356 {
2357 "name": "clock",
2358 "required": true,
2359 "type": "uint",
2360 "version": 1
2361 },
2362 {
2363 "name": "timestamp",
2364 "required": true,
2365 "type": "uint",
2366 "version": 1
2367 },
2368 {
2369 "name": "editedAt",
2370 "type": "uint",
2371 "version": 1
2372 },
2373 {
2374 "name": "status",
2375 "required": true,
2376 "type": "@keet/message-status",
2377 "version": 1
2378 },
2379 {
2380 "name": "message",
2381 "type": "@keet/index-message",
2382 "version": 1
2383 },
2384 {
2385 "name": "event",
2386 "type": "@keet/chat-event",
2387 "version": 1
2388 }
2389 ]
2390 },
2391 {
2392 "name": "full-chat-message-record",
2393 "namespace": "keet",
2394 "compact": false,
2395 "flagsPosition": 4,
2396 "fields": [
2397 {
2398 "name": "id",
2399 "required": true,
2400 "type": "@keet/message-index-id",
2401 "version": 1
2402 },
2403 {
2404 "name": "oplog",
2405 "required": true,
2406 "type": "@keet/oplog-id",
2407 "version": 1
2408 },
2409 {
2410 "name": "clock",
2411 "required": true,
2412 "type": "uint",
2413 "version": 1
2414 },
2415 {
2416 "name": "timestamp",
2417 "required": true,
2418 "type": "uint",
2419 "version": 1
2420 },
2421 {
2422 "name": "editedAt",
2423 "type": "uint",
2424 "version": 1
2425 },
2426 {
2427 "name": "status",
2428 "required": true,
2429 "type": "@keet/message-status",
2430 "version": 1
2431 },
2432 {
2433 "name": "message",
2434 "type": "@keet/full-index-message",
2435 "version": 1
2436 },
2437 {
2438 "name": "event",
2439 "type": "@keet/chat-event",
2440 "version": 1
2441 }
2442 ]
2443 },
2444 {
2445 "name": "add-chat-message-operation",
2446 "namespace": "keet",
2447 "compact": false,
2448 "flagsPosition": -1,
2449 "fields": [
2450 {
2451 "name": "header",
2452 "required": true,
2453 "type": "@keet/operation-header",
2454 "version": 1
2455 },
2456 {
2457 "name": "message",
2458 "required": true,
2459 "type": "@keet/oplog-message",
2460 "version": 1
2461 }
2462 ]
2463 },
2464 {
2465 "name": "remove-chat-message-operation",
2466 "namespace": "keet",
2467 "compact": false,
2468 "flagsPosition": -1,
2469 "fields": [
2470 {
2471 "name": "header",
2472 "required": true,
2473 "type": "@keet/operation-header",
2474 "version": 1
2475 },
2476 {
2477 "name": "oplog",
2478 "required": true,
2479 "type": "@keet/oplog-id",
2480 "version": 1
2481 }
2482 ]
2483 },
2484 {
2485 "name": "update-chat-message-operation",
2486 "namespace": "keet",
2487 "compact": false,
2488 "flagsPosition": -1,
2489 "fields": [
2490 {
2491 "name": "header",
2492 "required": true,
2493 "type": "@keet/operation-header",
2494 "version": 1
2495 },
2496 {
2497 "name": "oplog",
2498 "required": true,
2499 "type": "@keet/oplog-id",
2500 "version": 1
2501 },
2502 {
2503 "name": "message",
2504 "required": true,
2505 "type": "@keet/oplog-message",
2506 "version": 1
2507 }
2508 ]
2509 },
2510 {
2511 "name": "pin-chat-message-operation",
2512 "namespace": "keet",
2513 "compact": false,
2514 "flagsPosition": 2,
2515 "fields": [
2516 {
2517 "name": "header",
2518 "required": true,
2519 "type": "@keet/operation-header",
2520 "version": 1
2521 },
2522 {
2523 "name": "oplog",
2524 "required": true,
2525 "type": "@keet/oplog-id",
2526 "version": 1
2527 },
2528 {
2529 "name": "isPinned",
2530 "type": "bool",
2531 "version": 1
2532 }
2533 ]
2534 },
2535 {
2536 "name": "reaction",
2537 "namespace": "keet",
2538 "compact": false,
2539 "flagsPosition": -1,
2540 "fields": [
2541 {
2542 "name": "id",
2543 "required": true,
2544 "type": "@keet/message-index-id",
2545 "version": 1
2546 },
2547 {
2548 "name": "sender",
2549 "required": true,
2550 "type": "@keet/member-key",
2551 "version": 1
2552 },
2553 {
2554 "name": "clock",
2555 "required": true,
2556 "type": "uint",
2557 "version": 1
2558 },
2559 {
2560 "name": "reaction",
2561 "required": true,
2562 "type": "string",
2563 "version": 1
2564 }
2565 ]
2566 },
2567 {
2568 "name": "reactions-summary",
2569 "namespace": "keet",
2570 "compact": false,
2571 "flagsPosition": -1,
2572 "fields": [
2573 {
2574 "name": "text",
2575 "required": true,
2576 "type": "string",
2577 "version": 1
2578 },
2579 {
2580 "name": "count",
2581 "required": true,
2582 "type": "uint",
2583 "version": 1
2584 }
2585 ]
2586 },
2587 {
2588 "name": "reactions-digest",
2589 "namespace": "keet",
2590 "compact": false,
2591 "flagsPosition": 3,
2592 "fields": [
2593 {
2594 "name": "id",
2595 "required": true,
2596 "type": "@keet/message-index-id",
2597 "version": 1
2598 },
2599 {
2600 "name": "total",
2601 "required": true,
2602 "type": "uint",
2603 "version": 1
2604 },
2605 {
2606 "name": "reactions",
2607 "required": true,
2608 "array": true,
2609 "type": "@keet/reactions-summary",
2610 "version": 1
2611 },
2612 {
2613 "name": "editedAt",
2614 "type": "uint",
2615 "version": 17
2616 }
2617 ]
2618 },
2619 {
2620 "name": "add-reaction-operation",
2621 "namespace": "keet",
2622 "compact": false,
2623 "flagsPosition": -1,
2624 "fields": [
2625 {
2626 "name": "header",
2627 "required": true,
2628 "type": "@keet/operation-header",
2629 "version": 1
2630 },
2631 {
2632 "name": "oplog",
2633 "required": true,
2634 "type": "@keet/oplog-id",
2635 "version": 1
2636 },
2637 {
2638 "name": "reaction",
2639 "required": true,
2640 "type": "string",
2641 "version": 1
2642 }
2643 ]
2644 },
2645 {
2646 "name": "remove-reaction-operation",
2647 "namespace": "keet",
2648 "compact": false,
2649 "flagsPosition": -1,
2650 "fields": [
2651 {
2652 "name": "header",
2653 "required": true,
2654 "type": "@keet/operation-header",
2655 "version": 1
2656 },
2657 {
2658 "name": "oplog",
2659 "required": true,
2660 "type": "@keet/oplog-id",
2661 "version": 1
2662 },
2663 {
2664 "name": "reaction",
2665 "required": true,
2666 "type": "string",
2667 "version": 1
2668 }
2669 ]
2670 },
2671 {
2672 "name": "update-room-config-operation",
2673 "namespace": "keet",
2674 "compact": false,
2675 "flagsPosition": -1,
2676 "fields": [
2677 {
2678 "name": "header",
2679 "required": true,
2680 "type": "@keet/operation-header",
2681 "version": 1
2682 },
2683 {
2684 "name": "key",
2685 "required": true,
2686 "type": "uint",
2687 "version": 1
2688 },
2689 {
2690 "name": "config",
2691 "required": true,
2692 "type": "@keet/room-config",
2693 "version": 1
2694 }
2695 ]
2696 },
2697 {
2698 "name": "group-member",
2699 "namespace": "keet",
2700 "compact": false,
2701 "flagsPosition": 2,
2702 "fields": [
2703 {
2704 "name": "memberKey",
2705 "required": true,
2706 "type": "@keet/member-key",
2707 "version": 1
2708 },
2709 {
2710 "name": "displayName",
2711 "required": true,
2712 "type": "string",
2713 "version": 1
2714 },
2715 {
2716 "name": "avatar",
2717 "type": "@keet/image-file",
2718 "version": 1
2719 }
2720 ]
2721 },
2722 {
2723 "name": "user-registry-info",
2724 "namespace": "keet",
2725 "compact": false,
2726 "flagsPosition": 1,
2727 "fields": [
2728 {
2729 "name": "key",
2730 "required": true,
2731 "type": "@keet/core-key",
2732 "version": 1
2733 },
2734 {
2735 "name": "username",
2736 "type": "string",
2737 "version": 1
2738 }
2739 ]
2740 },
2741 {
2742 "name": "room-identity",
2743 "namespace": "keet",
2744 "compact": false,
2745 "flagsPosition": 1,
2746 "fields": [
2747 {
2748 "name": "publicKey",
2749 "required": true,
2750 "type": "@keet/member-key",
2751 "version": 1
2752 },
2753 {
2754 "name": "discoveryCoreKey",
2755 "type": "@keet/core-key",
2756 "version": 1
2757 },
2758 {
2759 "name": "userRegistry",
2760 "type": "@keet/user-registry-info",
2761 "version": 1
2762 }
2763 ]
2764 },
2765 {
2766 "name": "genesis-operation",
2767 "namespace": "keet",
2768 "compact": false,
2769 "flagsPosition": 3,
2770 "fields": [
2771 {
2772 "name": "header",
2773 "required": true,
2774 "type": "@keet/operation-header",
2775 "version": 1
2776 },
2777 {
2778 "name": "digest",
2779 "required": true,
2780 "type": "@keet/system-digest",
2781 "version": 1
2782 },
2783 {
2784 "name": "capabilities",
2785 "required": true,
2786 "type": "@keet/room-seed",
2787 "version": 1
2788 },
2789 {
2790 "name": "config",
2791 "type": "@keet/room-config",
2792 "version": 1
2793 },
2794 {
2795 "name": "identity",
2796 "type": "@keet/room-identity",
2797 "version": 1
2798 },
2799 {
2800 "name": "bootstrapDevice",
2801 "type": "@keet/device-update",
2802 "version": 1
2803 },
2804 {
2805 "name": "initialMembers",
2806 "array": true,
2807 "type": "@keet/member-update",
2808 "version": 1
2809 }
2810 ]
2811 },
2812 {
2813 "name": "upgrade-operation",
2814 "namespace": "keet",
2815 "compact": false,
2816 "flagsPosition": -1,
2817 "fields": [
2818 {
2819 "name": "header",
2820 "required": true,
2821 "type": "@keet/operation-header",
2822 "version": 1
2823 },
2824 {
2825 "name": "version",
2826 "required": true,
2827 "type": "uint",
2828 "version": 1
2829 }
2830 ]
2831 },
2832 {
2833 "name": "update-system-settings-operation",
2834 "namespace": "keet",
2835 "compact": false,
2836 "flagsPosition": -1,
2837 "fields": [
2838 {
2839 "name": "header",
2840 "required": true,
2841 "type": "@keet/operation-header",
2842 "version": 1
2843 },
2844 {
2845 "name": "key",
2846 "required": true,
2847 "type": "uint",
2848 "version": 1
2849 },
2850 {
2851 "name": "settings",
2852 "required": true,
2853 "type": "@keet/system-settings",
2854 "version": 1
2855 }
2856 ]
2857 },
2858 {
2859 "name": "contact",
2860 "namespace": "keet-private-id",
2861 "compact": false,
2862 "flagsPosition": 2,
2863 "fields": [
2864 {
2865 "name": "memberKey",
2866 "required": true,
2867 "type": "@keet/member-key",
2868 "version": 1
2869 },
2870 {
2871 "name": "status",
2872 "required": true,
2873 "type": "@keet-private-id/contact-status",
2874 "version": 1
2875 },
2876 {
2877 "name": "mailbox",
2878 "type": "@keet/public-key",
2879 "version": 1
2880 },
2881 {
2882 "name": "roomKey",
2883 "type": "@keet/room-key",
2884 "version": 1
2885 }
2886 ]
2887 },
2888 {
2889 "name": "v3-room-migration-info",
2890 "namespace": "keet-private-id",
2891 "compact": false,
2892 "flagsPosition": -1,
2893 "fields": [
2894 {
2895 "name": "roomKey",
2896 "required": true,
2897 "type": "@keet/room-key",
2898 "version": 1
2899 },
2900 {
2901 "name": "encryptionKey",
2902 "required": true,
2903 "type": "@keet/encryption-key",
2904 "version": 1
2905 },
2906 {
2907 "name": "seed",
2908 "required": true,
2909 "type": "fixed32",
2910 "version": 1
2911 },
2912 {
2913 "name": "initiator",
2914 "required": true,
2915 "type": "@keet/head",
2916 "version": 1
2917 },
2918 {
2919 "name": "fastForwardTo",
2920 "required": true,
2921 "type": "fixed32",
2922 "version": 1
2923 }
2924 ]
2925 },
2926 {
2927 "name": "run-v3-migration-operation",
2928 "namespace": "keet-private-id",
2929 "compact": false,
2930 "flagsPosition": -1,
2931 "fields": [
2932 {
2933 "name": "sharedRooms",
2934 "required": true,
2935 "array": true,
2936 "type": "@keet-private-id/v3-room-migration-info",
2937 "version": 1
2938 },
2939 {
2940 "name": "blockedContacts",
2941 "required": true,
2942 "array": true,
2943 "type": "@keet/member-key",
2944 "version": 1
2945 }
2946 ]
2947 },
2948 {
2949 "name": "update-identity-operation",
2950 "namespace": "keet-private-id",
2951 "compact": false,
2952 "flagsPosition": -1,
2953 "fields": [
2954 {
2955 "name": "identity",
2956 "required": true,
2957 "type": "@keet/room-identity",
2958 "version": 1
2959 }
2960 ]
2961 },
2962 {
2963 "name": "counters",
2964 "namespace": "keet-private-id",
2965 "compact": false,
2966 "flagsPosition": -1,
2967 "fields": [
2968 {
2969 "name": "rooms",
2970 "required": true,
2971 "type": "uint",
2972 "version": 1
2973 },
2974 {
2975 "name": "contacts",
2976 "required": true,
2977 "type": "uint",
2978 "version": 1
2979 }
2980 ]
2981 },
2982 {
2983 "name": "stats",
2984 "namespace": "keet-private-id",
2985 "compact": false,
2986 "flagsPosition": -1,
2987 "fields": [
2988 {
2989 "name": "rooms",
2990 "required": true,
2991 "type": "uint",
2992 "version": 1
2993 },
2994 {
2995 "name": "contactRequests",
2996 "required": true,
2997 "type": "uint",
2998 "version": 1
2999 }
3000 ]
3001 },
3002 {
3003 "name": "add-entropy-operation",
3004 "namespace": "keet-private-id",
3005 "compact": false,
3006 "flagsPosition": -1,
3007 "fields": [
3008 {
3009 "name": "entropy",
3010 "required": true,
3011 "type": "buffer",
3012 "version": 1
3013 }
3014 ]
3015 },
3016 {
3017 "name": "pending-invitation-identity",
3018 "namespace": "keet-private-id",
3019 "compact": false,
3020 "flagsPosition": -1,
3021 "fields": [
3022 {
3023 "name": "publicKey",
3024 "required": true,
3025 "type": "@keet/member-key",
3026 "version": 1
3027 },
3028 {
3029 "name": "devicePublicKey",
3030 "required": true,
3031 "type": "@keet/public-key",
3032 "version": 1
3033 },
3034 {
3035 "name": "writerKey",
3036 "required": true,
3037 "type": "@keet/device-key",
3038 "version": 1
3039 }
3040 ]
3041 },
3042 {
3043 "name": "pending-invitation",
3044 "namespace": "keet-private-id",
3045 "compact": false,
3046 "flagsPosition": 6,
3047 "fields": [
3048 {
3049 "name": "id",
3050 "required": true,
3051 "type": "fixed32",
3052 "version": 1
3053 },
3054 {
3055 "name": "invitationSeed",
3056 "required": true,
3057 "type": "fixed32",
3058 "version": 1
3059 },
3060 {
3061 "name": "mailbox",
3062 "required": true,
3063 "type": "fixed32",
3064 "version": 1
3065 },
3066 {
3067 "name": "responseKeyPair",
3068 "required": true,
3069 "type": "@keet/signing-keypair",
3070 "version": 1
3071 },
3072 {
3073 "name": "initiator",
3074 "required": true,
3075 "type": "@keet/head",
3076 "version": 1
3077 },
3078 {
3079 "name": "inviter",
3080 "required": true,
3081 "type": "@keet/head",
3082 "version": 1
3083 },
3084 {
3085 "name": "identity",
3086 "type": "@keet-private-id/pending-invitation-identity",
3087 "version": 1
3088 },
3089 {
3090 "name": "buildType",
3091 "type": "@keet/build-type",
3092 "version": 29
3093 }
3094 ]
3095 },
3096 {
3097 "name": "resolve-pending-invitation-operation",
3098 "namespace": "keet-private-id",
3099 "compact": false,
3100 "flagsPosition": -1,
3101 "fields": [
3102 {
3103 "name": "header",
3104 "required": true,
3105 "type": "@keet/operation-header",
3106 "version": 1
3107 },
3108 {
3109 "name": "blindResponse",
3110 "required": true,
3111 "type": "buffer",
3112 "version": 1
3113 }
3114 ]
3115 },
3116 {
3117 "name": "add-pending-invitation-operation",
3118 "namespace": "keet-private-id",
3119 "compact": false,
3120 "flagsPosition": -1,
3121 "fields": [
3122 {
3123 "name": "header",
3124 "required": true,
3125 "type": "@keet/operation-header",
3126 "version": 1
3127 },
3128 {
3129 "name": "invitation",
3130 "required": true,
3131 "type": "@keet-private-id/pending-invitation",
3132 "version": 1
3133 }
3134 ]
3135 },
3136 {
3137 "name": "remove-pending-invitation-operation",
3138 "namespace": "keet-private-id",
3139 "compact": false,
3140 "flagsPosition": -1,
3141 "fields": [
3142 {
3143 "name": "header",
3144 "required": true,
3145 "type": "@keet/operation-header",
3146 "version": 1
3147 },
3148 {
3149 "name": "id",
3150 "required": true,
3151 "type": "fixed32",
3152 "version": 1
3153 }
3154 ]
3155 },
3156 {
3157 "name": "identity-swap",
3158 "namespace": "keet-private-id",
3159 "compact": false,
3160 "flagsPosition": 2,
3161 "fields": [
3162 {
3163 "name": "publicKey",
3164 "required": true,
3165 "type": "@keet/member-key",
3166 "version": 1
3167 },
3168 {
3169 "name": "devicePublicKey",
3170 "required": true,
3171 "type": "@keet/public-key",
3172 "version": 1
3173 },
3174 {
3175 "name": "privateProfileKey",
3176 "type": "@keet/room-key",
3177 "version": 1
3178 },
3179 {
3180 "name": "deviceKeyPair",
3181 "type": "@keet/signing-keypair",
3182 "version": 1
3183 },
3184 {
3185 "name": "deviceProof",
3186 "required": true,
3187 "type": "buffer",
3188 "version": 1
3189 }
3190 ]
3191 },
3192 {
3193 "name": "room-status",
3194 "namespace": "keet-private-id",
3195 "compact": false,
3196 "flagsPosition": 0,
3197 "fields": [
3198 {
3199 "name": "isActive",
3200 "type": "bool",
3201 "version": 1
3202 },
3203 {
3204 "name": "isFullyMuted",
3205 "type": "bool",
3206 "version": 1
3207 },
3208 {
3209 "name": "isMentionsOnlyMuted",
3210 "type": "bool",
3211 "version": 1
3212 },
3213 {
3214 "name": "isReadOnly",
3215 "type": "bool",
3216 "version": 14
3217 },
3218 {
3219 "name": "isFavorite",
3220 "type": "bool",
3221 "version": 27
3222 }
3223 ]
3224 },
3225 {
3226 "name": "room",
3227 "namespace": "keet-private-id",
3228 "compact": false,
3229 "flagsPosition": 5,
3230 "fields": [
3231 {
3232 "name": "roomKey",
3233 "required": true,
3234 "type": "@keet/room-key",
3235 "version": 1
3236 },
3237 {
3238 "name": "encryptionKey",
3239 "required": true,
3240 "type": "@keet/encryption-key",
3241 "version": 1
3242 },
3243 {
3244 "name": "mailbox",
3245 "required": true,
3246 "type": "@keet/public-key",
3247 "version": 1
3248 },
3249 {
3250 "name": "status",
3251 "required": true,
3252 "type": "@keet-private-id/room-status",
3253 "version": 1
3254 },
3255 {
3256 "name": "clock",
3257 "required": true,
3258 "type": "uint",
3259 "version": 1
3260 },
3261 {
3262 "name": "initiator",
3263 "type": "@keet/head",
3264 "version": 1
3265 },
3266 {
3267 "name": "fastForwardTo",
3268 "type": "fixed32",
3269 "version": 1
3270 },
3271 {
3272 "name": "identitySwap",
3273 "type": "@keet-private-id/identity-swap",
3274 "version": 1
3275 },
3276 {
3277 "name": "identitySwapV2",
3278 "type": "@keet-private-id/pending-invitation-identity",
3279 "version": 9
3280 },
3281 {
3282 "name": "contact",
3283 "type": "@keet/member-key",
3284 "version": 15
3285 }
3286 ]
3287 },
3288 {
3289 "name": "add-room-operation",
3290 "namespace": "keet-private-id",
3291 "compact": false,
3292 "flagsPosition": 4,
3293 "fields": [
3294 {
3295 "name": "header",
3296 "required": true,
3297 "type": "@keet/operation-header",
3298 "version": 1
3299 },
3300 {
3301 "name": "roomKey",
3302 "required": true,
3303 "type": "@keet/room-key",
3304 "version": 1
3305 },
3306 {
3307 "name": "encryptionKey",
3308 "required": true,
3309 "type": "@keet/encryption-key",
3310 "version": 1
3311 },
3312 {
3313 "name": "mailbox",
3314 "required": true,
3315 "type": "@keet/public-key",
3316 "version": 1
3317 },
3318 {
3319 "name": "fastForwardTo",
3320 "type": "fixed32",
3321 "version": 1
3322 },
3323 {
3324 "name": "initiator",
3325 "type": "@keet/head",
3326 "version": 1
3327 },
3328 {
3329 "name": "dm",
3330 "type": "@keet/member-key",
3331 "version": 1
3332 },
3333 {
3334 "name": "isReadOnly",
3335 "type": "bool",
3336 "version": 14
3337 }
3338 ]
3339 },
3340 {
3341 "name": "remove-room-operation",
3342 "namespace": "keet-private-id",
3343 "compact": false,
3344 "flagsPosition": -1,
3345 "fields": [
3346 {
3347 "name": "header",
3348 "required": true,
3349 "type": "@keet/operation-header",
3350 "version": 1
3351 },
3352 {
3353 "name": "discoveryKey",
3354 "required": true,
3355 "type": "@keet/room-discovery-key",
3356 "version": 1
3357 }
3358 ]
3359 },
3360 {
3361 "name": "update-room-status-operation",
3362 "namespace": "keet-private-id",
3363 "compact": false,
3364 "flagsPosition": -1,
3365 "fields": [
3366 {
3367 "name": "header",
3368 "required": true,
3369 "type": "@keet/operation-header",
3370 "version": 1
3371 },
3372 {
3373 "name": "roomKey",
3374 "required": true,
3375 "type": "@keet/room-key",
3376 "version": 1
3377 },
3378 {
3379 "name": "key",
3380 "required": true,
3381 "type": "uint",
3382 "version": 1
3383 },
3384 {
3385 "name": "status",
3386 "required": true,
3387 "type": "@keet-private-id/room-status",
3388 "version": 1
3389 }
3390 ]
3391 },
3392 {
3393 "name": "contact-status",
3394 "namespace": "keet-private-id",
3395 "compact": false,
3396 "flagsPosition": 0,
3397 "fields": [
3398 {
3399 "name": "isBlocked",
3400 "type": "bool",
3401 "version": 1
3402 }
3403 ]
3404 },
3405 {
3406 "name": "contact-record",
3407 "namespace": "keet-private-id",
3408 "compact": false,
3409 "flagsPosition": 3,
3410 "fields": [
3411 {
3412 "name": "memberKey",
3413 "required": true,
3414 "type": "@keet/member-key",
3415 "version": 1
3416 },
3417 {
3418 "name": "clock",
3419 "required": true,
3420 "type": "uint",
3421 "version": 1
3422 },
3423 {
3424 "name": "status",
3425 "required": true,
3426 "type": "@keet-private-id/contact-status",
3427 "version": 1
3428 },
3429 {
3430 "name": "mailbox",
3431 "type": "@keet/public-key",
3432 "version": 1
3433 },
3434 {
3435 "name": "roomKey",
3436 "type": "@keet/room-key",
3437 "version": 1
3438 }
3439 ]
3440 },
3441 {
3442 "name": "add-contact-operation",
3443 "namespace": "keet-private-id",
3444 "compact": false,
3445 "flagsPosition": -1,
3446 "fields": [
3447 {
3448 "name": "header",
3449 "required": true,
3450 "type": "@keet/operation-header",
3451 "version": 1
3452 },
3453 {
3454 "name": "contact",
3455 "required": true,
3456 "type": "@keet-private-id/contact",
3457 "version": 1
3458 }
3459 ]
3460 },
3461 {
3462 "name": "update-contact-status-operation",
3463 "namespace": "keet-private-id",
3464 "compact": false,
3465 "flagsPosition": -1,
3466 "fields": [
3467 {
3468 "name": "header",
3469 "required": true,
3470 "type": "@keet/operation-header",
3471 "version": 1
3472 },
3473 {
3474 "name": "memberKey",
3475 "required": true,
3476 "type": "@keet/member-key",
3477 "version": 1
3478 },
3479 {
3480 "name": "key",
3481 "required": true,
3482 "type": "uint",
3483 "version": 1
3484 },
3485 {
3486 "name": "status",
3487 "required": true,
3488 "type": "@keet-private-id/contact-status",
3489 "version": 1
3490 }
3491 ]
3492 },
3493 {
3494 "name": "remove-contact-operation",
3495 "namespace": "keet-private-id",
3496 "compact": false,
3497 "flagsPosition": -1,
3498 "fields": [
3499 {
3500 "name": "header",
3501 "required": true,
3502 "type": "@keet/operation-header",
3503 "version": 1
3504 },
3505 {
3506 "name": "memberKey",
3507 "required": true,
3508 "type": "@keet/member-key",
3509 "version": 1
3510 }
3511 ]
3512 },
3513 {
3514 "name": "contact-request-status",
3515 "namespace": "keet-private-id",
3516 "compact": false,
3517 "flagsPosition": 0,
3518 "fields": [
3519 {
3520 "name": "isPending",
3521 "type": "bool",
3522 "version": 1
3523 },
3524 {
3525 "name": "isAccepted",
3526 "type": "bool",
3527 "version": 1
3528 },
3529 {
3530 "name": "isRejected",
3531 "type": "bool",
3532 "version": 1
3533 },
3534 {
3535 "name": "isDiscarded",
3536 "type": "bool",
3537 "version": 1
3538 },
3539 {
3540 "name": "isSeen",
3541 "type": "bool",
3542 "version": 1
3543 }
3544 ]
3545 },
3546 {
3547 "name": "contact-request-body",
3548 "namespace": "keet-private-id",
3549 "compact": false,
3550 "flagsPosition": 3,
3551 "fields": [
3552 {
3553 "name": "sender",
3554 "required": true,
3555 "type": "@keet/member-update",
3556 "version": 1
3557 },
3558 {
3559 "name": "keys",
3560 "required": true,
3561 "type": "@keet/room-keys",
3562 "version": 1
3563 },
3564 {
3565 "name": "mailbox",
3566 "required": true,
3567 "type": "@keet/public-key",
3568 "version": 1
3569 },
3570 {
3571 "name": "message",
3572 "type": "string",
3573 "version": 1
3574 }
3575 ]
3576 },
3577 {
3578 "name": "contact-request",
3579 "namespace": "keet-private-id",
3580 "compact": false,
3581 "flagsPosition": -1,
3582 "fields": [
3583 {
3584 "name": "body",
3585 "required": true,
3586 "type": "@keet-private-id/contact-request-body",
3587 "version": 1
3588 },
3589 {
3590 "name": "attestation",
3591 "required": true,
3592 "type": "@keet/identity-attestation",
3593 "version": 1
3594 }
3595 ]
3596 },
3597 {
3598 "name": "contact-request-record",
3599 "namespace": "keet-private-id",
3600 "compact": false,
3601 "flagsPosition": 6,
3602 "fields": [
3603 {
3604 "name": "memberKey",
3605 "required": true,
3606 "type": "@keet/member-key",
3607 "version": 1
3608 },
3609 {
3610 "name": "clock",
3611 "required": true,
3612 "type": "uint",
3613 "version": 1
3614 },
3615 {
3616 "name": "sender",
3617 "required": true,
3618 "type": "@keet/member-profile",
3619 "version": 1
3620 },
3621 {
3622 "name": "status",
3623 "required": true,
3624 "type": "@keet-private-id/contact-request-status",
3625 "version": 1
3626 },
3627 {
3628 "name": "keys",
3629 "required": true,
3630 "type": "@keet/room-keys",
3631 "version": 1
3632 },
3633 {
3634 "name": "mailbox",
3635 "required": true,
3636 "type": "@keet/public-key",
3637 "version": 1
3638 },
3639 {
3640 "name": "message",
3641 "type": "string",
3642 "version": 1
3643 },
3644 {
3645 "name": "sentAt",
3646 "type": "uint",
3647 "version": 17
3648 }
3649 ]
3650 },
3651 {
3652 "name": "add-contact-request-operation",
3653 "namespace": "keet-private-id",
3654 "compact": false,
3655 "flagsPosition": -1,
3656 "fields": [
3657 {
3658 "name": "header",
3659 "required": true,
3660 "type": "@keet/operation-header",
3661 "version": 1
3662 },
3663 {
3664 "name": "blindRequest",
3665 "required": true,
3666 "type": "buffer",
3667 "version": 1
3668 }
3669 ]
3670 },
3671 {
3672 "name": "update-contact-request-status-operation",
3673 "namespace": "keet-private-id",
3674 "compact": false,
3675 "flagsPosition": 4,
3676 "fields": [
3677 {
3678 "name": "header",
3679 "required": true,
3680 "type": "@keet/operation-header",
3681 "version": 1
3682 },
3683 {
3684 "name": "memberKey",
3685 "required": true,
3686 "type": "@keet/member-key",
3687 "version": 1
3688 },
3689 {
3690 "name": "key",
3691 "required": true,
3692 "type": "uint",
3693 "version": 1
3694 },
3695 {
3696 "name": "status",
3697 "required": true,
3698 "type": "@keet-private-id/contact-request-status",
3699 "version": 1
3700 },
3701 {
3702 "name": "roomKey",
3703 "type": "@keet/room-key",
3704 "version": 15
3705 }
3706 ]
3707 },
3708 {
3709 "name": "profile-discovery-record-v1",
3710 "namespace": "keet-private-id",
3711 "compact": false,
3712 "flagsPosition": -1,
3713 "fields": [
3714 {
3715 "name": "timestamp",
3716 "required": true,
3717 "type": "uint",
3718 "version": 1
3719 },
3720 {
3721 "name": "key",
3722 "required": true,
3723 "type": "@keet/core-key",
3724 "version": 1
3725 },
3726 {
3727 "name": "mailbox",
3728 "required": true,
3729 "type": "@keet/public-key",
3730 "version": 1
3731 }
3732 ]
3733 },
3734 {
3735 "name": "profile-discovery-record",
3736 "namespace": "keet-private-id",
3737 "versions": [
3738 {
3739 "type": "@keet-private-id/profile-discovery-record-v1",
3740 "map": null,
3741 "version": 1
3742 }
3743 ]
3744 },
3745 {
3746 "name": "background-sync-room",
3747 "namespace": "local",
3748 "compact": false,
3749 "flagsPosition": 2,
3750 "fields": [
3751 {
3752 "name": "discoveryPublicKey",
3753 "required": true,
3754 "type": "@keet/room-discovery-key",
3755 "version": 1
3756 },
3757 {
3758 "name": "timestamp",
3759 "required": true,
3760 "type": "uint",
3761 "version": 1
3762 },
3763 {
3764 "name": "lastSynced",
3765 "type": "uint",
3766 "version": 1
3767 },
3768 {
3769 "name": "dirty",
3770 "type": "bool",
3771 "version": 1
3772 }
3773 ]
3774 },
3775 {
3776 "name": "stats",
3777 "namespace": "local",
3778 "compact": false,
3779 "flagsPosition": -1,
3780 "fields": [
3781 {
3782 "name": "rooms",
3783 "required": true,
3784 "type": "uint",
3785 "version": 1
3786 },
3787 {
3788 "name": "activeRooms",
3789 "required": true,
3790 "type": "uint",
3791 "version": 1
3792 }
3793 ]
3794 },
3795 {
3796 "name": "migration-status",
3797 "namespace": "local",
3798 "compact": false,
3799 "flagsPosition": -1,
3800 "fields": [
3801 {
3802 "name": "version",
3803 "required": true,
3804 "type": "uint",
3805 "version": 1
3806 }
3807 ]
3808 },
3809 {
3810 "name": "v3-private-profile-migration",
3811 "namespace": "local",
3812 "compact": false,
3813 "flagsPosition": 0,
3814 "fields": [
3815 {
3816 "name": "blockedMembers",
3817 "array": true,
3818 "type": "@keet/member-key",
3819 "version": 1
3820 }
3821 ]
3822 },
3823 {
3824 "name": "v3-room-migration",
3825 "namespace": "local",
3826 "compact": false,
3827 "flagsPosition": 5,
3828 "fields": [
3829 {
3830 "name": "encryptionKey",
3831 "required": true,
3832 "type": "@keet/encryption-key",
3833 "version": 1
3834 },
3835 {
3836 "name": "seed",
3837 "required": true,
3838 "type": "fixed32",
3839 "version": 1
3840 },
3841 {
3842 "name": "capabilities",
3843 "required": true,
3844 "type": "@keet/room-capabilities",
3845 "version": 1
3846 },
3847 {
3848 "name": "initiator",
3849 "required": true,
3850 "type": "@keet/head",
3851 "version": 1
3852 },
3853 {
3854 "name": "fastForwardTo",
3855 "required": true,
3856 "type": "fixed32",
3857 "version": 1
3858 },
3859 {
3860 "name": "privateProfile",
3861 "type": "@local/v3-private-profile-migration",
3862 "version": 1
3863 }
3864 ]
3865 },
3866 {
3867 "name": "room-migration-stats",
3868 "namespace": "local",
3869 "compact": false,
3870 "flagsPosition": 0,
3871 "fields": [
3872 {
3873 "name": "count",
3874 "type": "uint",
3875 "version": 1
3876 }
3877 ]
3878 },
3879 {
3880 "name": "room-migration",
3881 "namespace": "local",
3882 "compact": false,
3883 "flagsPosition": 2,
3884 "fields": [
3885 {
3886 "name": "roomKey",
3887 "required": true,
3888 "type": "@keet/room-key",
3889 "version": 1
3890 },
3891 {
3892 "name": "priority",
3893 "required": true,
3894 "type": "uint",
3895 "version": 1
3896 },
3897 {
3898 "name": "v3",
3899 "type": "@local/v3-room-migration",
3900 "version": 1
3901 },
3902 {
3903 "name": "errored",
3904 "type": "bool",
3905 "version": 3
3906 },
3907 {
3908 "name": "timestamp",
3909 "type": "uint",
3910 "version": 5
3911 }
3912 ]
3913 },
3914 {
3915 "name": "identity-status",
3916 "namespace": "local",
3917 "compact": false,
3918 "flagsPosition": 0,
3919 "fields": [
3920 {
3921 "name": "isConfirmed",
3922 "type": "bool",
3923 "version": 1
3924 }
3925 ]
3926 },
3927 {
3928 "name": "identity-record",
3929 "namespace": "local",
3930 "compact": false,
3931 "flagsPosition": 5,
3932 "fields": [
3933 {
3934 "name": "publicKey",
3935 "required": true,
3936 "type": "@keet/public-key",
3937 "version": 1
3938 },
3939 {
3940 "name": "privateProfileKey",
3941 "required": true,
3942 "type": "@keet/room-key",
3943 "version": 1
3944 },
3945 {
3946 "name": "deviceKeyPair",
3947 "required": true,
3948 "type": "@keet/signing-keypair",
3949 "version": 1
3950 },
3951 {
3952 "name": "deviceProof",
3953 "required": true,
3954 "type": "buffer",
3955 "version": 1
3956 },
3957 {
3958 "name": "status",
3959 "required": true,
3960 "type": "@local/identity-status",
3961 "version": 1
3962 },
3963 {
3964 "name": "entropy",
3965 "type": "buffer",
3966 "version": 1
3967 },
3968 {
3969 "name": "swap",
3970 "type": "@keet-private-id/identity-swap",
3971 "version": 1
3972 },
3973 {
3974 "name": "swapV2",
3975 "type": "@keet-private-id/identity-swap-v2",
3976 "version": 9
3977 }
3978 ]
3979 },
3980 {
3981 "name": "tasks",
3982 "namespace": "local",
3983 "offset": 1,
3984 "enum": [
3985 {
3986 "key": "RestoreIdentity",
3987 "version": 1
3988 },
3989 {
3990 "key": "CreateRoom",
3991 "version": 1
3992 },
3993 {
3994 "key": "LeaveRoom",
3995 "version": 1
3996 },
3997 {
3998 "key": "ClearRoom",
3999 "version": 1
4000 },
4001 {
4002 "key": "JoinRoomInvitation",
4003 "version": 1
4004 },
4005 {
4006 "key": "JoinRoomKeys",
4007 "version": 1
4008 },
4009 {
4010 "key": "JoinRoomResponse",
4011 "version": 1
4012 },
4013 {
4014 "key": "SendContactRequest",
4015 "version": 1
4016 },
4017 {
4018 "key": "TestFastTask",
4019 "version": 9
4020 },
4021 {
4022 "key": "TestSlowTask",
4023 "version": 9
4024 },
4025 {
4026 "key": "TestErrorTask",
4027 "version": 9
4028 }
4029 ],
4030 "strings": false
4031 },
4032 {
4033 "name": "room-keys",
4034 "namespace": "local",
4035 "compact": false,
4036 "flagsPosition": 2,
4037 "fields": [
4038 {
4039 "name": "roomKey",
4040 "required": true,
4041 "type": "@keet/room-key",
4042 "version": 1
4043 },
4044 {
4045 "name": "encryptionKey",
4046 "required": true,
4047 "type": "@keet/encryption-key",
4048 "version": 1
4049 },
4050 {
4051 "name": "fastForwardTo",
4052 "type": "fixed32",
4053 "version": 1
4054 },
4055 {
4056 "name": "initiator",
4057 "type": "@keet/head",
4058 "version": 1
4059 }
4060 ]
4061 },
4062 {
4063 "name": "join-room-invitation-task",
4064 "namespace": "local",
4065 "compact": false,
4066 "flagsPosition": -1,
4067 "fields": [
4068 {
4069 "name": "invitation",
4070 "required": true,
4071 "type": "@keet-private-id/pending-invitation",
4072 "version": 1
4073 }
4074 ]
4075 },
4076 {
4077 "name": "join-room-response-task",
4078 "namespace": "local",
4079 "compact": false,
4080 "flagsPosition": -1,
4081 "fields": [
4082 {
4083 "name": "mailbox",
4084 "required": true,
4085 "type": "@keet/public-key",
4086 "version": 1
4087 },
4088 {
4089 "name": "keyPair",
4090 "required": true,
4091 "type": "@keet/signing-keypair",
4092 "version": 1
4093 },
4094 {
4095 "name": "response",
4096 "required": true,
4097 "type": "buffer",
4098 "version": 1
4099 }
4100 ]
4101 },
4102 {
4103 "name": "fast-forward-to",
4104 "namespace": "local",
4105 "compact": false,
4106 "flagsPosition": -1,
4107 "fields": [
4108 {
4109 "name": "key",
4110 "required": true,
4111 "type": "@keet/core-key",
4112 "version": 1
4113 }
4114 ]
4115 },
4116 {
4117 "name": "add-room-fields",
4118 "namespace": "local",
4119 "compact": false,
4120 "flagsPosition": 2,
4121 "fields": [
4122 {
4123 "name": "roomKey",
4124 "required": true,
4125 "type": "@keet/room-key",
4126 "version": 1
4127 },
4128 {
4129 "name": "encryptionKey",
4130 "required": true,
4131 "type": "@keet/encryption-key",
4132 "version": 1
4133 },
4134 {
4135 "name": "fastForwardTo",
4136 "type": "fixed32",
4137 "version": 1
4138 },
4139 {
4140 "name": "initiator",
4141 "type": "@keet/head",
4142 "version": 1
4143 },
4144 {
4145 "name": "mailbox",
4146 "type": "@keet/public-key",
4147 "version": 1
4148 }
4149 ]
4150 },
4151 {
4152 "name": "join-room-keys-task",
4153 "namespace": "local",
4154 "compact": false,
4155 "flagsPosition": -1,
4156 "fields": [
4157 {
4158 "name": "keys",
4159 "required": true,
4160 "type": "@local/add-room-fields",
4161 "version": 1
4162 }
4163 ]
4164 },
4165 {
4166 "name": "create-room-task",
4167 "namespace": "local",
4168 "compact": false,
4169 "flagsPosition": 2,
4170 "fields": [
4171 {
4172 "name": "roomKey",
4173 "required": true,
4174 "type": "@keet/room-key",
4175 "version": 1
4176 },
4177 {
4178 "name": "encryptionKey",
4179 "required": true,
4180 "type": "@keet/encryption-key",
4181 "version": 1
4182 },
4183 {
4184 "name": "fastForwardTo",
4185 "type": "fixed32",
4186 "version": 1
4187 },
4188 {
4189 "name": "initiator",
4190 "type": "@keet/head",
4191 "version": 1
4192 },
4193 {
4194 "name": "mailbox",
4195 "type": "@keet/public-key",
4196 "version": 1
4197 },
4198 {
4199 "name": "keyPair",
4200 "type": "@keet/signing-keypair",
4201 "version": 1
4202 },
4203 {
4204 "name": "genesis",
4205 "type": "@keet/genesis-operation",
4206 "version": 1
4207 },
4208 {
4209 "name": "isPrivateProfile",
4210 "type": "bool",
4211 "version": 1
4212 }
4213 ]
4214 },
4215 {
4216 "name": "leave-room-task",
4217 "namespace": "local",
4218 "compact": false,
4219 "flagsPosition": 1,
4220 "fields": [
4221 {
4222 "name": "roomKey",
4223 "required": true,
4224 "type": "@keet/room-key",
4225 "version": 1
4226 },
4227 {
4228 "name": "isGossiped",
4229 "type": "bool",
4230 "version": 1
4231 }
4232 ]
4233 },
4234 {
4235 "name": "clear-room-task",
4236 "namespace": "local",
4237 "compact": false,
4238 "flagsPosition": -1,
4239 "fields": [
4240 {
4241 "name": "roomKey",
4242 "required": true,
4243 "type": "@keet/room-key",
4244 "version": 1
4245 }
4246 ]
4247 },
4248 {
4249 "name": "restore-identity-task",
4250 "namespace": "local",
4251 "compact": false,
4252 "flagsPosition": 1,
4253 "fields": [
4254 {
4255 "name": "mnemonic",
4256 "required": true,
4257 "type": "string",
4258 "version": 1
4259 },
4260 {
4261 "name": "profileDiscoveryTimeout",
4262 "type": "uint",
4263 "version": 1
4264 },
4265 {
4266 "name": "recover",
4267 "type": "bool",
4268 "version": 1
4269 }
4270 ]
4271 },
4272 {
4273 "name": "send-contact-request-task",
4274 "namespace": "local",
4275 "compact": false,
4276 "flagsPosition": 2,
4277 "fields": [
4278 {
4279 "name": "roomKey",
4280 "required": true,
4281 "type": "@keet/room-key",
4282 "version": 1
4283 },
4284 {
4285 "name": "memberKey",
4286 "required": true,
4287 "type": "@keet/member-key",
4288 "version": 1
4289 },
4290 {
4291 "name": "message",
4292 "type": "string",
4293 "version": 1
4294 },
4295 {
4296 "name": "contactInfo",
4297 "type": "@keet/member-contact-info",
4298 "version": 6
4299 }
4300 ]
4301 },
4302 {
4303 "name": "migrate-v2-room-task",
4304 "namespace": "local",
4305 "compact": false,
4306 "flagsPosition": 1,
4307 "fields": [
4308 {
4309 "name": "key",
4310 "required": true,
4311 "type": "@keet/room-key",
4312 "version": 1
4313 },
4314 {
4315 "name": "isPrivateProfile",
4316 "type": "bool",
4317 "version": 1
4318 }
4319 ]
4320 },
4321 {
4322 "name": "task",
4323 "namespace": "local",
4324 "compact": false,
4325 "flagsPosition": 4,
4326 "fields": [
4327 {
4328 "name": "discoveryKey",
4329 "required": true,
4330 "type": "@keet/room-discovery-key",
4331 "version": 1
4332 },
4333 {
4334 "name": "priority",
4335 "required": true,
4336 "type": "uint",
4337 "version": 1
4338 },
4339 {
4340 "name": "timestamp",
4341 "required": true,
4342 "type": "uint",
4343 "version": 1
4344 },
4345 {
4346 "name": "type",
4347 "required": true,
4348 "type": "uint",
4349 "version": 1
4350 },
4351 {
4352 "name": "restoreIdentity",
4353 "type": "@local/restore-identity-task",
4354 "version": 1
4355 },
4356 {
4357 "name": "createRoom",
4358 "type": "@local/create-room-task",
4359 "version": 1
4360 },
4361 {
4362 "name": "leaveRoom",
4363 "type": "@local/leave-room-task",
4364 "version": 1
4365 },
4366 {
4367 "name": "clearRoom",
4368 "type": "@local/clear-room-task",
4369 "version": 1
4370 },
4371 {
4372 "name": "joinRoomInvitation",
4373 "type": "@local/join-room-invitation-task",
4374 "version": 1
4375 },
4376 {
4377 "name": "joinRoomKeys",
4378 "type": "@local/join-room-keys-task",
4379 "version": 1
4380 },
4381 {
4382 "name": "joinRoomResponse",
4383 "type": "@local/join-room-response-task",
4384 "version": 1
4385 },
4386 {
4387 "name": "sendContactRequest",
4388 "type": "@local/send-contact-request-task",
4389 "version": 1
4390 },
4391 {
4392 "name": "migrateV2Room",
4393 "type": "@local/migrate-v2-room-task",
4394 "version": 1
4395 }
4396 ]
4397 },
4398 {
4399 "name": "shared-invitation",
4400 "namespace": "local",
4401 "compact": false,
4402 "flagsPosition": -1,
4403 "fields": [
4404 {
4405 "name": "seed",
4406 "required": true,
4407 "type": "buffer",
4408 "version": 1
4409 },
4410 {
4411 "name": "invitation",
4412 "required": true,
4413 "type": "@keet/invitation",
4414 "version": 1
4415 }
4416 ]
4417 },
4418 {
4419 "name": "room-status",
4420 "namespace": "local",
4421 "compact": false,
4422 "flagsPosition": 0,
4423 "fields": [
4424 {
4425 "name": "isWritable",
4426 "type": "bool",
4427 "version": 1
4428 },
4429 {
4430 "name": "isReadable",
4431 "type": "bool",
4432 "version": 1
4433 },
4434 {
4435 "name": "isPrivateProfile",
4436 "type": "bool",
4437 "version": 1
4438 },
4439 {
4440 "name": "isRemoved",
4441 "type": "bool",
4442 "version": 8
4443 }
4444 ]
4445 },
4446 {
4447 "name": "room-timestamps",
4448 "namespace": "local",
4449 "compact": false,
4450 "flagsPosition": -1,
4451 "fields": [
4452 {
4453 "name": "creation",
4454 "required": true,
4455 "type": "uint",
4456 "version": 1
4457 },
4458 {
4459 "name": "latestSync",
4460 "required": true,
4461 "type": "uint",
4462 "version": 1
4463 },
4464 {
4465 "name": "latestChatMessage",
4466 "required": true,
4467 "type": "uint",
4468 "version": 1
4469 }
4470 ]
4471 },
4472 {
4473 "name": "room",
4474 "namespace": "local",
4475 "compact": false,
4476 "flagsPosition": 11,
4477 "fields": [
4478 {
4479 "name": "roomKey",
4480 "required": true,
4481 "type": "@keet/room-key",
4482 "version": 1
4483 },
4484 {
4485 "name": "discoveryKey",
4486 "required": true,
4487 "type": "@keet/room-discovery-key",
4488 "version": 1
4489 },
4490 {
4491 "name": "encryptionKey",
4492 "required": true,
4493 "type": "@keet/encryption-key",
4494 "version": 1
4495 },
4496 {
4497 "name": "digest",
4498 "required": true,
4499 "type": "@keet/system-digest",
4500 "version": 1
4501 },
4502 {
4503 "name": "stats",
4504 "required": true,
4505 "type": "@keet/stats",
4506 "version": 1
4507 },
4508 {
4509 "name": "timestamps",
4510 "required": true,
4511 "type": "@local/room-timestamps",
4512 "version": 1
4513 },
4514 {
4515 "name": "fork",
4516 "required": true,
4517 "type": "uint",
4518 "version": 1
4519 },
4520 {
4521 "name": "length",
4522 "required": true,
4523 "type": "uint",
4524 "version": 1
4525 },
4526 {
4527 "name": "seed",
4528 "required": true,
4529 "type": "fixed32",
4530 "version": 1
4531 },
4532 {
4533 "name": "capabilities",
4534 "required": true,
4535 "type": "@keet/room-capabilities",
4536 "version": 1
4537 },
4538 {
4539 "name": "status",
4540 "required": true,
4541 "type": "@local/room-status",
4542 "version": 1
4543 },
4544 {
4545 "name": "selfDevice",
4546 "type": "@keet/device",
4547 "version": 1
4548 },
4549 {
4550 "name": "selfMember",
4551 "type": "@keet/full-member",
4552 "version": 1
4553 },
4554 {
4555 "name": "config",
4556 "type": "@keet/room-config",
4557 "version": 1
4558 },
4559 {
4560 "name": "identity",
4561 "type": "@keet/room-identity",
4562 "version": 1
4563 },
4564 {
4565 "name": "lastMessage",
4566 "type": "@keet/full-chat-message-record",
4567 "version": 1
4568 },
4569 {
4570 "name": "dm",
4571 "array": true,
4572 "type": "@keet/member-key",
4573 "version": 1
4574 },
4575 {
4576 "name": "readLengths",
4577 "array": true,
4578 "type": "@keet/read-length",
4579 "version": 19
4580 },
4581 {
4582 "name": "lastMember",
4583 "type": "@keet/member",
4584 "version": 19
4585 },
4586 {
4587 "name": "version",
4588 "type": "uint",
4589 "version": 21
4590 },
4591 {
4592 "name": "preferences",
4593 "type": "@keet-private-id/room-status",
4594 "version": 27
4595 },
4596 {
4597 "name": "activeCall",
4598 "type": "@local/active-call",
4599 "version": 28
4600 }
4601 ]
4602 },
4603 {
4604 "name": "room-preferences",
4605 "namespace": "local",
4606 "compact": false,
4607 "flagsPosition": -1,
4608 "fields": [
4609 {
4610 "name": "roomKey",
4611 "required": true,
4612 "type": "@keet/room-key",
4613 "version": 1
4614 },
4615 {
4616 "name": "status",
4617 "required": true,
4618 "type": "@keet-private-id/room-status",
4619 "version": 1
4620 }
4621 ]
4622 },
4623 {
4624 "name": "writer",
4625 "namespace": "local",
4626 "compact": false,
4627 "flagsPosition": 2,
4628 "fields": [
4629 {
4630 "name": "mailbox",
4631 "required": true,
4632 "type": "@keet/public-key",
4633 "version": 1
4634 },
4635 {
4636 "name": "key",
4637 "required": true,
4638 "type": "@keet/core-key",
4639 "version": 1
4640 },
4641 {
4642 "name": "roomKey",
4643 "type": "@keet/room-key",
4644 "version": 1
4645 },
4646 {
4647 "name": "keyPair",
4648 "type": "@keet/signing-keypair",
4649 "version": 1
4650 },
4651 {
4652 "name": "responseKeyPair",
4653 "type": "@keet/signing-keypair",
4654 "version": 1
4655 }
4656 ]
4657 },
4658 {
4659 "name": "member",
4660 "namespace": "local",
4661 "compact": false,
4662 "flagsPosition": -1,
4663 "fields": [
4664 {
4665 "name": "key",
4666 "required": true,
4667 "type": "@keet/member-key",
4668 "version": 1
4669 },
4670 {
4671 "name": "profile",
4672 "required": true,
4673 "type": "@keet/member-profile",
4674 "version": 1
4675 }
4676 ]
4677 },
4678 {
4679 "name": "device",
4680 "namespace": "local",
4681 "compact": false,
4682 "flagsPosition": -1,
4683 "fields": [
4684 {
4685 "name": "roomKey",
4686 "required": true,
4687 "type": "@keet/room-key",
4688 "version": 1
4689 },
4690 {
4691 "name": "device",
4692 "required": true,
4693 "type": "@keet/device",
4694 "version": 1
4695 }
4696 ]
4697 },
4698 {
4699 "name": "file",
4700 "namespace": "local",
4701 "compact": false,
4702 "flagsPosition": 2,
4703 "fields": [
4704 {
4705 "name": "file",
4706 "required": true,
4707 "type": "@keet/file",
4708 "version": 1
4709 },
4710 {
4711 "name": "roomKey",
4712 "required": true,
4713 "type": "@keet/room-key",
4714 "version": 1
4715 },
4716 {
4717 "name": "encryptionKey",
4718 "type": "@keet/encryption-key",
4719 "version": 1
4720 },
4721 {
4722 "name": "cleared",
4723 "type": "bool",
4724 "version": 1
4725 },
4726 {
4727 "name": "own",
4728 "type": "bool",
4729 "version": 1
4730 },
4731 {
4732 "name": "lastAccessed",
4733 "type": "uint",
4734 "version": 28
4735 },
4736 {
4737 "name": "version",
4738 "type": "uint",
4739 "version": 28
4740 }
4741 ]
4742 },
4743 {
4744 "name": "add-file-preview-operation",
4745 "namespace": "keet",
4746 "compact": false,
4747 "flagsPosition": 4,
4748 "fields": [
4749 {
4750 "name": "header",
4751 "required": true,
4752 "type": "@keet/operation-header",
4753 "version": 2
4754 },
4755 {
4756 "name": "oplog",
4757 "required": true,
4758 "type": "@keet/oplog-id",
4759 "version": 2
4760 },
4761 {
4762 "name": "index",
4763 "required": true,
4764 "type": "uint",
4765 "version": 2
4766 },
4767 {
4768 "name": "preview",
4769 "required": true,
4770 "type": "@keet/image-file",
4771 "version": 2
4772 },
4773 {
4774 "name": "displayType",
4775 "type": "@keet/display-type",
4776 "version": 12
4777 }
4778 ]
4779 },
4780 {
4781 "name": "member-removed-event",
4782 "namespace": "keet",
4783 "compact": false,
4784 "flagsPosition": 0,
4785 "fields": [
4786 {
4787 "name": "memberKey",
4788 "type": "@keet/member-key",
4789 "version": 4
4790 }
4791 ]
4792 },
4793 {
4794 "name": "member-contact-info",
4795 "namespace": "keet",
4796 "compact": false,
4797 "flagsPosition": -1,
4798 "fields": [
4799 {
4800 "name": "profile",
4801 "required": true,
4802 "type": "@keet/member-profile",
4803 "version": 6
4804 },
4805 {
4806 "name": "attestation",
4807 "required": true,
4808 "type": "@keet/identity-attestation",
4809 "version": 6
4810 }
4811 ]
4812 },
4813 {
4814 "name": "remove-device-operation",
4815 "namespace": "keet",
4816 "compact": false,
4817 "flagsPosition": -1,
4818 "fields": [
4819 {
4820 "name": "header",
4821 "required": true,
4822 "type": "@keet/operation-header",
4823 "version": 7
4824 },
4825 {
4826 "name": "key",
4827 "required": true,
4828 "type": "@keet/device-key",
4829 "version": 7
4830 }
4831 ]
4832 },
4833 {
4834 "name": "device-identity",
4835 "namespace": "keet",
4836 "compact": false,
4837 "flagsPosition": -1,
4838 "fields": [
4839 {
4840 "name": "deviceKey",
4841 "required": true,
4842 "type": "@keet/device-key",
4843 "version": 9
4844 },
4845 {
4846 "name": "privateProfileIdentity",
4847 "required": true,
4848 "type": "@keet/identity-attestation",
4849 "version": 9
4850 },
4851 {
4852 "name": "deviceProof",
4853 "required": true,
4854 "type": "buffer",
4855 "version": 9
4856 }
4857 ]
4858 },
4859 {
4860 "name": "readonly-room-invitation",
4861 "namespace": "keet",
4862 "compact": false,
4863 "flagsPosition": 3,
4864 "fields": [
4865 {
4866 "name": "roomKey",
4867 "required": true,
4868 "type": "fixed32",
4869 "version": 9
4870 },
4871 {
4872 "name": "encryptionKey",
4873 "required": true,
4874 "type": "fixed32",
4875 "version": 9
4876 },
4877 {
4878 "name": "seed",
4879 "required": true,
4880 "type": "fixed32",
4881 "version": 9
4882 },
4883 {
4884 "name": "fastForwardTo",
4885 "type": "fixed32",
4886 "version": 9
4887 }
4888 ]
4889 },
4890 {
4891 "name": "identity-swap-v2",
4892 "namespace": "keet-private-id",
4893 "compact": false,
4894 "flagsPosition": 3,
4895 "fields": [
4896 {
4897 "name": "publicKey",
4898 "required": true,
4899 "type": "@keet/member-key",
4900 "version": 9
4901 },
4902 {
4903 "name": "writerKey",
4904 "required": true,
4905 "type": "@keet/core-key",
4906 "version": 9
4907 },
4908 {
4909 "name": "devicePublicKey",
4910 "required": true,
4911 "type": "@keet/public-key",
4912 "version": 9
4913 },
4914 {
4915 "name": "privateProfileKey",
4916 "type": "@keet/room-key",
4917 "version": 9
4918 }
4919 ]
4920 },
4921 {
4922 "name": "activate-contact-room-operation",
4923 "namespace": "keet-private-id",
4924 "compact": false,
4925 "flagsPosition": -1,
4926 "fields": [
4927 {
4928 "name": "header",
4929 "required": true,
4930 "type": "@keet/operation-header",
4931 "version": 9
4932 },
4933 {
4934 "name": "memberKey",
4935 "required": true,
4936 "type": "@keet/member-key",
4937 "version": 9
4938 }
4939 ]
4940 },
4941 {
4942 "name": "identity-swap",
4943 "namespace": "local",
4944 "compact": false,
4945 "flagsPosition": -1,
4946 "fields": [
4947 {
4948 "name": "privateProfileKey",
4949 "required": true,
4950 "type": "@keet/room-key",
4951 "version": 9
4952 }
4953 ]
4954 },
4955 {
4956 "name": "writer-append",
4957 "namespace": "local",
4958 "compact": false,
4959 "flagsPosition": -1,
4960 "fields": [
4961 {
4962 "name": "key",
4963 "required": true,
4964 "type": "@keet/core-key",
4965 "version": 9
4966 },
4967 {
4968 "name": "responsePublicKey",
4969 "required": true,
4970 "type": "fixed32",
4971 "version": 9
4972 }
4973 ]
4974 },
4975 {
4976 "name": "room-metadata",
4977 "namespace": "local",
4978 "compact": false,
4979 "flagsPosition": 1,
4980 "fields": [
4981 {
4982 "name": "roomKey",
4983 "required": true,
4984 "type": "@keet/room-key",
4985 "version": 10
4986 },
4987 {
4988 "name": "repairs",
4989 "type": "uint",
4990 "version": 10
4991 }
4992 ]
4993 },
4994 {
4995 "name": "debug-flag",
4996 "namespace": "local",
4997 "compact": false,
4998 "flagsPosition": 0,
4999 "fields": [
5000 {
5001 "name": "key",
5002 "type": "string",
5003 "version": 11
5004 },
5005 {
5006 "name": "value",
5007 "type": "bool",
5008 "version": 11
5009 },
5010 {
5011 "name": "description",
5012 "type": "string",
5013 "version": 11
5014 }
5015 ]
5016 },
5017 {
5018 "name": "debug",
5019 "namespace": "local",
5020 "compact": false,
5021 "flagsPosition": 0,
5022 "fields": [
5023 {
5024 "name": "flags",
5025 "array": true,
5026 "type": "@local/debug-flag",
5027 "version": 11
5028 }
5029 ]
5030 },
5031 {
5032 "name": "display-type",
5033 "namespace": "keet",
5034 "offset": 1,
5035 "enum": [
5036 {
5037 "key": "HttpLink",
5038 "version": 12
5039 },
5040 {
5041 "key": "PearLink",
5042 "version": 12
5043 }
5044 ],
5045 "strings": false
5046 },
5047 {
5048 "name": "test-increment-operation",
5049 "namespace": "keet",
5050 "compact": false,
5051 "flagsPosition": -1,
5052 "fields": [
5053 {
5054 "name": "header",
5055 "required": true,
5056 "type": "@keet/operation-header",
5057 "version": 13
5058 },
5059 {
5060 "name": "value",
5061 "required": true,
5062 "type": "uint",
5063 "version": 13
5064 }
5065 ]
5066 },
5067 {
5068 "name": "test-collection-record-1",
5069 "namespace": "keet",
5070 "compact": false,
5071 "flagsPosition": -1,
5072 "fields": [
5073 {
5074 "name": "key",
5075 "required": true,
5076 "type": "uint",
5077 "version": 13
5078 },
5079 {
5080 "name": "value",
5081 "required": true,
5082 "type": "uint",
5083 "version": 13
5084 }
5085 ]
5086 },
5087 {
5088 "name": "migrate-abi-operation",
5089 "namespace": "keet",
5090 "compact": false,
5091 "flagsPosition": 3,
5092 "fields": [
5093 {
5094 "name": "header",
5095 "required": true,
5096 "type": "@keet/operation-header",
5097 "version": 15
5098 },
5099 {
5100 "name": "from",
5101 "required": true,
5102 "type": "uint",
5103 "version": 15
5104 },
5105 {
5106 "name": "to",
5107 "required": true,
5108 "type": "uint",
5109 "version": 15
5110 },
5111 {
5112 "name": "buildType",
5113 "type": "@keet/build-type",
5114 "version": 29
5115 }
5116 ]
5117 },
5118 {
5119 "name": "system-settings-keys",
5120 "namespace": "keet",
5121 "offset": 1,
5122 "enum": [
5123 {
5124 "key": "RoomType",
5125 "version": 15
5126 },
5127 {
5128 "key": "IsExperimental",
5129 "version": 15
5130 },
5131 {
5132 "key": "IsJoiningDisabled",
5133 "version": 15
5134 },
5135 {
5136 "key": "IsAppendingDisabled",
5137 "version": 15
5138 },
5139 {
5140 "key": "IsCallingDisabled",
5141 "version": 15
5142 },
5143 {
5144 "key": "IsMembershipEventsDisabled",
5145 "version": 15
5146 },
5147 {
5148 "key": "IsAttachmentsDisabled",
5149 "version": 28
5150 },
5151 {
5152 "key": "IsLinksDisabled",
5153 "version": 28
5154 }
5155 ],
5156 "strings": false
5157 },
5158 {
5159 "name": "hyperdht-record",
5160 "namespace": "local",
5161 "compact": false,
5162 "flagsPosition": 0,
5163 "fields": [
5164 {
5165 "name": "nodes",
5166 "array": true,
5167 "type": "ipv4Address",
5168 "version": 16
5169 },
5170 {
5171 "name": "concurrency",
5172 "type": "uint",
5173 "version": 24
5174 },
5175 {
5176 "name": "maxWindow",
5177 "type": "uint",
5178 "version": 24
5179 },
5180 {
5181 "name": "randomPunchInterval",
5182 "type": "uint",
5183 "version": 24
5184 },
5185 {
5186 "name": "connectionKeepAlive",
5187 "type": "uint",
5188 "version": 24
5189 }
5190 ]
5191 },
5192 {
5193 "name": "room-supported-language",
5194 "namespace": "keet",
5195 "offset": 1,
5196 "enum": [
5197 {
5198 "key": "en",
5199 "version": 17
5200 },
5201 {
5202 "key": "it",
5203 "version": 17
5204 },
5205 {
5206 "key": "ru",
5207 "version": 17
5208 },
5209 {
5210 "key": "es",
5211 "version": 17
5212 },
5213 {
5214 "key": "de",
5215 "version": 17
5216 }
5217 ],
5218 "strings": true
5219 },
5220 {
5221 "name": "translation-display-item",
5222 "namespace": "keet",
5223 "compact": false,
5224 "flagsPosition": -1,
5225 "fields": [
5226 {
5227 "name": "range",
5228 "required": true,
5229 "type": "@keet/display-range",
5230 "version": 17
5231 },
5232 {
5233 "name": "language",
5234 "required": true,
5235 "type": "@keet/room-supported-language",
5236 "version": 17
5237 },
5238 {
5239 "name": "text",
5240 "required": true,
5241 "type": "string",
5242 "version": 17
5243 }
5244 ]
5245 },
5246 {
5247 "name": "unread",
5248 "namespace": "local",
5249 "compact": false,
5250 "flagsPosition": -1,
5251 "fields": [
5252 {
5253 "name": "roomKey",
5254 "required": true,
5255 "type": "@keet/room-key",
5256 "version": 17
5257 },
5258 {
5259 "name": "count",
5260 "required": true,
5261 "type": "uint",
5262 "version": 17
5263 }
5264 ]
5265 },
5266 {
5267 "name": "unreads",
5268 "namespace": "keet-private-id",
5269 "compact": false,
5270 "flagsPosition": -1,
5271 "fields": [
5272 {
5273 "name": "deviceKey",
5274 "required": true,
5275 "type": "@keet/device-key",
5276 "version": 18
5277 },
5278 {
5279 "name": "key",
5280 "required": true,
5281 "type": "@keet/core-key",
5282 "version": 18
5283 }
5284 ]
5285 },
5286 {
5287 "name": "add-unreads-key-operation",
5288 "namespace": "keet-private-id",
5289 "compact": false,
5290 "flagsPosition": -1,
5291 "fields": [
5292 {
5293 "name": "header",
5294 "required": true,
5295 "type": "@keet/operation-header",
5296 "version": 18
5297 },
5298 {
5299 "name": "key",
5300 "required": true,
5301 "type": "@keet/core-key",
5302 "version": 18
5303 }
5304 ]
5305 },
5306 {
5307 "name": "remove-unreads-key-operation",
5308 "namespace": "keet-private-id",
5309 "compact": false,
5310 "flagsPosition": -1,
5311 "fields": [
5312 {
5313 "name": "header",
5314 "required": true,
5315 "type": "@keet/operation-header",
5316 "version": 18
5317 },
5318 {
5319 "name": "key",
5320 "required": true,
5321 "type": "@keet/core-key",
5322 "version": 18
5323 }
5324 ]
5325 },
5326 {
5327 "name": "label-type",
5328 "namespace": "keet",
5329 "offset": 1,
5330 "enum": [
5331 {
5332 "key": "Flag",
5333 "version": 19
5334 }
5335 ],
5336 "strings": false
5337 },
5338 {
5339 "name": "chat-label",
5340 "namespace": "keet",
5341 "compact": false,
5342 "flagsPosition": -1,
5343 "fields": [
5344 {
5345 "name": "id",
5346 "required": true,
5347 "type": "@keet/message-index-id",
5348 "version": 19
5349 },
5350 {
5351 "name": "sender",
5352 "required": true,
5353 "type": "@keet/member-key",
5354 "version": 19
5355 },
5356 {
5357 "name": "clock",
5358 "required": true,
5359 "type": "uint",
5360 "version": 19
5361 },
5362 {
5363 "name": "label",
5364 "required": true,
5365 "type": "@keet/label-type",
5366 "version": 19
5367 }
5368 ]
5369 },
5370 {
5371 "name": "add-chat-label-operation",
5372 "namespace": "keet",
5373 "compact": false,
5374 "flagsPosition": -1,
5375 "fields": [
5376 {
5377 "name": "header",
5378 "required": true,
5379 "type": "@keet/operation-header",
5380 "version": 19
5381 },
5382 {
5383 "name": "oplog",
5384 "required": true,
5385 "type": "@keet/oplog-id",
5386 "version": 19
5387 },
5388 {
5389 "name": "label",
5390 "required": true,
5391 "type": "@keet/label-type",
5392 "version": 19
5393 }
5394 ]
5395 },
5396 {
5397 "name": "remove-chat-label-operation",
5398 "namespace": "keet",
5399 "compact": false,
5400 "flagsPosition": -1,
5401 "fields": [
5402 {
5403 "name": "header",
5404 "required": true,
5405 "type": "@keet/operation-header",
5406 "version": 19
5407 },
5408 {
5409 "name": "oplog",
5410 "required": true,
5411 "type": "@keet/oplog-id",
5412 "version": 19
5413 },
5414 {
5415 "name": "label",
5416 "required": true,
5417 "type": "@keet/label-type",
5418 "version": 19
5419 }
5420 ]
5421 },
5422 {
5423 "name": "chat-label-summary",
5424 "namespace": "keet",
5425 "compact": false,
5426 "flagsPosition": -1,
5427 "fields": [
5428 {
5429 "name": "label",
5430 "required": true,
5431 "type": "@keet/label-type",
5432 "version": 19
5433 },
5434 {
5435 "name": "count",
5436 "required": true,
5437 "type": "uint",
5438 "version": 19
5439 }
5440 ]
5441 },
5442 {
5443 "name": "chat-label-digest",
5444 "namespace": "keet",
5445 "compact": false,
5446 "flagsPosition": 4,
5447 "fields": [
5448 {
5449 "name": "id",
5450 "required": true,
5451 "type": "@keet/message-index-id",
5452 "version": 19
5453 },
5454 {
5455 "name": "total",
5456 "required": true,
5457 "type": "uint",
5458 "version": 19
5459 },
5460 {
5461 "name": "labels",
5462 "required": true,
5463 "array": true,
5464 "type": "@keet/chat-label-summary",
5465 "version": 19
5466 },
5467 {
5468 "name": "editedAt",
5469 "required": true,
5470 "type": "uint",
5471 "version": 19
5472 },
5473 {
5474 "name": "flagsClock",
5475 "type": "uint",
5476 "version": 24
5477 },
5478 {
5479 "name": "version",
5480 "type": "uint",
5481 "version": 24
5482 },
5483 {
5484 "name": "isDeleted",
5485 "type": "bool",
5486 "version": 25
5487 }
5488 ]
5489 },
5490 {
5491 "name": "update-read-length-operation",
5492 "namespace": "keet",
5493 "compact": false,
5494 "flagsPosition": -1,
5495 "fields": [
5496 {
5497 "name": "header",
5498 "required": true,
5499 "type": "@keet/operation-header",
5500 "version": 19
5501 },
5502 {
5503 "name": "length",
5504 "required": true,
5505 "type": "uint",
5506 "version": 19
5507 }
5508 ]
5509 },
5510 {
5511 "name": "read-length",
5512 "namespace": "keet",
5513 "compact": false,
5514 "flagsPosition": -1,
5515 "fields": [
5516 {
5517 "name": "memberKey",
5518 "required": true,
5519 "type": "@keet/member-key",
5520 "version": 19
5521 },
5522 {
5523 "name": "length",
5524 "required": true,
5525 "type": "uint",
5526 "version": 19
5527 }
5528 ]
5529 },
5530 {
5531 "name": "tmp-removed-member",
5532 "namespace": "keet",
5533 "compact": false,
5534 "flagsPosition": -1,
5535 "fields": [
5536 {
5537 "name": "key",
5538 "required": true,
5539 "type": "@keet/member-key",
5540 "version": 19
5541 }
5542 ]
5543 },
5544 {
5545 "name": "settings",
5546 "namespace": "keet-private-id",
5547 "compact": false,
5548 "flagsPosition": 0,
5549 "fields": [
5550 {
5551 "name": "disableReadReceipts",
5552 "type": "bool",
5553 "version": 19
5554 }
5555 ]
5556 },
5557 {
5558 "name": "user-settings-key",
5559 "namespace": "keet-private-id",
5560 "offset": 1,
5561 "enum": [
5562 {
5563 "key": "disableReadReceipts",
5564 "version": 19
5565 }
5566 ],
5567 "strings": true
5568 },
5569 {
5570 "name": "update-settings-operation",
5571 "namespace": "keet-private-id",
5572 "compact": false,
5573 "flagsPosition": -1,
5574 "fields": [
5575 {
5576 "name": "header",
5577 "required": true,
5578 "type": "@keet/operation-header",
5579 "version": 19
5580 },
5581 {
5582 "name": "key",
5583 "required": true,
5584 "type": "@keet-private-id/user-settings-key",
5585 "version": 19
5586 },
5587 {
5588 "name": "settings",
5589 "required": true,
5590 "type": "@keet-private-id/settings",
5591 "version": 19
5592 }
5593 ]
5594 },
5595 {
5596 "name": "error-record-details",
5597 "namespace": "local",
5598 "compact": false,
5599 "flagsPosition": 0,
5600 "fields": [
5601 {
5602 "name": "roomKey",
5603 "type": "@keet/room-key",
5604 "version": 20
5605 },
5606 {
5607 "name": "coreKey",
5608 "type": "@keet/core-key",
5609 "version": 23
5610 }
5611 ]
5612 },
5613 {
5614 "name": "error-record",
5615 "namespace": "local",
5616 "compact": false,
5617 "flagsPosition": 4,
5618 "fields": [
5619 {
5620 "name": "code",
5621 "required": true,
5622 "type": "string",
5623 "version": 20
5624 },
5625 {
5626 "name": "message",
5627 "required": true,
5628 "type": "string",
5629 "version": 20
5630 },
5631 {
5632 "name": "stack",
5633 "required": true,
5634 "type": "string",
5635 "version": 20
5636 },
5637 {
5638 "name": "timestamp",
5639 "required": true,
5640 "type": "uint",
5641 "version": 20
5642 },
5643 {
5644 "name": "details",
5645 "type": "@local/error-record-details",
5646 "version": 20
5647 }
5648 ]
5649 },
5650 {
5651 "name": "keet-state",
5652 "namespace": "local",
5653 "offset": 1,
5654 "enum": [
5655 {
5656 "key": "RESUME",
5657 "version": 22
5658 },
5659 {
5660 "key": "WAKEUP",
5661 "version": 22
5662 },
5663 {
5664 "key": "PRESUSPEND",
5665 "version": 22
5666 },
5667 {
5668 "key": "SUSPEND",
5669 "version": 22
5670 }
5671 ],
5672 "strings": false
5673 },
5674 {
5675 "name": "file-stats",
5676 "namespace": "local",
5677 "compact": false,
5678 "flagsPosition": -1,
5679 "fields": [
5680 {
5681 "name": "roomKey",
5682 "required": true,
5683 "type": "@keet/room-key",
5684 "version": 25
5685 },
5686 {
5687 "name": "total",
5688 "required": true,
5689 "type": "uint",
5690 "version": 25
5691 }
5692 ]
5693 },
5694 {
5695 "name": "member-label-type",
5696 "namespace": "keet",
5697 "offset": 1,
5698 "enum": [
5699 {
5700 "key": "Flag",
5701 "version": 26
5702 }
5703 ],
5704 "strings": false
5705 },
5706 {
5707 "name": "member-label",
5708 "namespace": "keet",
5709 "compact": false,
5710 "flagsPosition": -1,
5711 "fields": [
5712 {
5713 "name": "key",
5714 "required": true,
5715 "type": "@keet/member-key",
5716 "version": 26
5717 },
5718 {
5719 "name": "sender",
5720 "required": true,
5721 "type": "@keet/member-key",
5722 "version": 26
5723 },
5724 {
5725 "name": "clock",
5726 "required": true,
5727 "type": "uint",
5728 "version": 26
5729 },
5730 {
5731 "name": "label",
5732 "required": true,
5733 "type": "@keet/member-label-type",
5734 "version": 26
5735 }
5736 ]
5737 },
5738 {
5739 "name": "add-member-label-operation",
5740 "namespace": "keet",
5741 "compact": false,
5742 "flagsPosition": -1,
5743 "fields": [
5744 {
5745 "name": "header",
5746 "required": true,
5747 "type": "@keet/operation-header",
5748 "version": 26
5749 },
5750 {
5751 "name": "key",
5752 "required": true,
5753 "type": "@keet/member-key",
5754 "version": 26
5755 },
5756 {
5757 "name": "label",
5758 "required": true,
5759 "type": "@keet/member-label-type",
5760 "version": 26
5761 }
5762 ]
5763 },
5764 {
5765 "name": "member-label-summary",
5766 "namespace": "keet",
5767 "compact": false,
5768 "flagsPosition": -1,
5769 "fields": [
5770 {
5771 "name": "label",
5772 "required": true,
5773 "type": "@keet/member-label-type",
5774 "version": 26
5775 },
5776 {
5777 "name": "count",
5778 "required": true,
5779 "type": "uint",
5780 "version": 26
5781 }
5782 ]
5783 },
5784 {
5785 "name": "member-label-digest",
5786 "namespace": "keet",
5787 "compact": false,
5788 "flagsPosition": -1,
5789 "fields": [
5790 {
5791 "name": "key",
5792 "required": true,
5793 "type": "@keet/member-key",
5794 "version": 26
5795 },
5796 {
5797 "name": "total",
5798 "required": true,
5799 "type": "uint",
5800 "version": 26
5801 },
5802 {
5803 "name": "labels",
5804 "required": true,
5805 "array": true,
5806 "type": "@keet/member-label-summary",
5807 "version": 26
5808 },
5809 {
5810 "name": "editedAt",
5811 "required": true,
5812 "type": "uint",
5813 "version": 26
5814 },
5815 {
5816 "name": "flagsClock",
5817 "required": true,
5818 "type": "uint",
5819 "version": 26
5820 }
5821 ]
5822 },
5823 {
5824 "name": "location-shared-event",
5825 "namespace": "keet",
5826 "compact": false,
5827 "flagsPosition": -1,
5828 "fields": [
5829 {
5830 "name": "latitude",
5831 "required": true,
5832 "type": "float64",
5833 "version": 27
5834 },
5835 {
5836 "name": "longitude",
5837 "required": true,
5838 "type": "float64",
5839 "version": 27
5840 }
5841 ]
5842 },
5843 {
5844 "name": "move-indexer-operation",
5845 "namespace": "keet",
5846 "compact": false,
5847 "flagsPosition": -1,
5848 "fields": [
5849 {
5850 "name": "header",
5851 "required": true,
5852 "type": "@keet/operation-header",
5853 "version": 27
5854 },
5855 {
5856 "name": "deviceKey",
5857 "required": true,
5858 "type": "@keet/device-key",
5859 "version": 27
5860 },
5861 {
5862 "name": "fromDeviceKey",
5863 "required": true,
5864 "type": "@keet/device-key",
5865 "version": 27
5866 }
5867 ]
5868 },
5869 {
5870 "name": "start-call",
5871 "namespace": "keet",
5872 "compact": false,
5873 "flagsPosition": 3,
5874 "fields": [
5875 {
5876 "name": "header",
5877 "required": true,
5878 "type": "@keet/operation-header",
5879 "version": 28
5880 },
5881 {
5882 "name": "callKey",
5883 "required": true,
5884 "type": "fixed32",
5885 "version": 28
5886 },
5887 {
5888 "name": "encryptionKey",
5889 "required": true,
5890 "type": "@keet/encryption-key",
5891 "version": 28
5892 },
5893 {
5894 "name": "streams",
5895 "array": true,
5896 "type": "@keet/core-key",
5897 "version": 28
5898 },
5899 {
5900 "name": "discoveryKey",
5901 "type": "@keet/room-discovery-key",
5902 "version": 28
5903 },
5904 {
5905 "name": "version",
5906 "type": "uint",
5907 "version": 28
5908 }
5909 ]
5910 },
5911 {
5912 "name": "join-call",
5913 "namespace": "keet",
5914 "compact": false,
5915 "flagsPosition": 2,
5916 "fields": [
5917 {
5918 "name": "header",
5919 "required": true,
5920 "type": "@keet/operation-header",
5921 "version": 28
5922 },
5923 {
5924 "name": "callKey",
5925 "required": true,
5926 "type": "fixed32",
5927 "version": 28
5928 },
5929 {
5930 "name": "streams",
5931 "array": true,
5932 "type": "@keet/core-key",
5933 "version": 28
5934 }
5935 ]
5936 },
5937 {
5938 "name": "leave-call",
5939 "namespace": "keet",
5940 "compact": false,
5941 "flagsPosition": -1,
5942 "fields": [
5943 {
5944 "name": "header",
5945 "required": true,
5946 "type": "@keet/operation-header",
5947 "version": 28
5948 },
5949 {
5950 "name": "callKey",
5951 "required": true,
5952 "type": "fixed32",
5953 "version": 28
5954 }
5955 ]
5956 },
5957 {
5958 "name": "end-call",
5959 "namespace": "keet",
5960 "compact": false,
5961 "flagsPosition": -1,
5962 "fields": [
5963 {
5964 "name": "header",
5965 "required": true,
5966 "type": "@keet/operation-header",
5967 "version": 28
5968 },
5969 {
5970 "name": "callKey",
5971 "required": true,
5972 "type": "fixed32",
5973 "version": 28
5974 }
5975 ]
5976 },
5977 {
5978 "name": "add-call-stream",
5979 "namespace": "keet",
5980 "compact": false,
5981 "flagsPosition": -1,
5982 "fields": [
5983 {
5984 "name": "header",
5985 "required": true,
5986 "type": "@keet/operation-header",
5987 "version": 28
5988 },
5989 {
5990 "name": "callKey",
5991 "required": true,
5992 "type": "fixed32",
5993 "version": 28
5994 },
5995 {
5996 "name": "streamKey",
5997 "required": true,
5998 "type": "@keet/core-key",
5999 "version": 28
6000 }
6001 ]
6002 },
6003 {
6004 "name": "remove-call-stream",
6005 "namespace": "keet",
6006 "compact": false,
6007 "flagsPosition": -1,
6008 "fields": [
6009 {
6010 "name": "header",
6011 "required": true,
6012 "type": "@keet/operation-header",
6013 "version": 28
6014 },
6015 {
6016 "name": "callKey",
6017 "required": true,
6018 "type": "fixed32",
6019 "version": 28
6020 },
6021 {
6022 "name": "streamKey",
6023 "required": true,
6024 "type": "@keet/core-key",
6025 "version": 28
6026 }
6027 ]
6028 },
6029 {
6030 "name": "call-record",
6031 "namespace": "keet",
6032 "compact": false,
6033 "flagsPosition": 3,
6034 "fields": [
6035 {
6036 "name": "callKey",
6037 "required": true,
6038 "type": "fixed32",
6039 "version": 28
6040 },
6041 {
6042 "name": "encryptionKey",
6043 "required": true,
6044 "type": "@keet/encryption-key",
6045 "version": 28
6046 },
6047 {
6048 "name": "createdAt",
6049 "required": true,
6050 "type": "uint",
6051 "version": 28
6052 },
6053 {
6054 "name": "endedAt",
6055 "type": "uint",
6056 "version": 28
6057 },
6058 {
6059 "name": "discoveryKey",
6060 "type": "@keet/room-discovery-key",
6061 "version": 28
6062 },
6063 {
6064 "name": "version",
6065 "type": "uint",
6066 "version": 28
6067 }
6068 ]
6069 },
6070 {
6071 "name": "call-member-record",
6072 "namespace": "keet",
6073 "compact": false,
6074 "flagsPosition": -1,
6075 "fields": [
6076 {
6077 "name": "callKey",
6078 "required": true,
6079 "type": "fixed32",
6080 "version": 28
6081 },
6082 {
6083 "name": "memberKey",
6084 "required": true,
6085 "type": "@keet/member-key",
6086 "version": 28
6087 },
6088 {
6089 "name": "createdAt",
6090 "required": true,
6091 "type": "uint",
6092 "version": 28
6093 }
6094 ]
6095 },
6096 {
6097 "name": "call-device-record",
6098 "namespace": "keet",
6099 "compact": false,
6100 "flagsPosition": 4,
6101 "fields": [
6102 {
6103 "name": "callKey",
6104 "required": true,
6105 "type": "fixed32",
6106 "version": 28
6107 },
6108 {
6109 "name": "deviceKey",
6110 "required": true,
6111 "type": "@keet/device-key",
6112 "version": 28
6113 },
6114 {
6115 "name": "memberKey",
6116 "required": true,
6117 "type": "@keet/member-key",
6118 "version": 28
6119 },
6120 {
6121 "name": "createdAt",
6122 "required": true,
6123 "type": "uint",
6124 "version": 28
6125 },
6126 {
6127 "name": "swarmKey",
6128 "type": "@keet/swarm-key",
6129 "version": 28
6130 }
6131 ]
6132 },
6133 {
6134 "name": "call-stream-record",
6135 "namespace": "keet",
6136 "compact": false,
6137 "flagsPosition": -1,
6138 "fields": [
6139 {
6140 "name": "callKey",
6141 "required": true,
6142 "type": "fixed32",
6143 "version": 28
6144 },
6145 {
6146 "name": "deviceKey",
6147 "required": true,
6148 "type": "@keet/device-key",
6149 "version": 28
6150 },
6151 {
6152 "name": "streamKey",
6153 "required": true,
6154 "type": "buffer",
6155 "version": 28
6156 },
6157 {
6158 "name": "createdAt",
6159 "required": true,
6160 "type": "uint",
6161 "version": 28
6162 }
6163 ]
6164 },
6165 {
6166 "name": "active-call",
6167 "namespace": "local",
6168 "compact": false,
6169 "flagsPosition": 1,
6170 "fields": [
6171 {
6172 "name": "callKey",
6173 "required": true,
6174 "type": "fixed32",
6175 "version": 28
6176 },
6177 {
6178 "name": "selfDeviceKey",
6179 "type": "@keet/device-key",
6180 "version": 28
6181 }
6182 ]
6183 },
6184 {
6185 "name": "file-gc-info",
6186 "namespace": "local",
6187 "compact": false,
6188 "flagsPosition": -1,
6189 "fields": [
6190 {
6191 "name": "lastCleared",
6192 "required": true,
6193 "type": "uint",
6194 "version": 28
6195 }
6196 ]
6197 },
6198 {
6199 "name": "build-type",
6200 "namespace": "keet",
6201 "offset": 1,
6202 "enum": [
6203 {
6204 "key": "Nightly",
6205 "version": 29
6206 },
6207 {
6208 "key": "Internal",
6209 "version": 29
6210 },
6211 {
6212 "key": "Production",
6213 "version": 29
6214 }
6215 ],
6216 "strings": true
6217 },
6218 {
6219 "name": "test-crash-operation",
6220 "namespace": "keet",
6221 "compact": false,
6222 "flagsPosition": -1,
6223 "fields": [
6224 {
6225 "name": "header",
6226 "required": true,
6227 "type": "@keet/operation-header",
6228 "version": 29
6229 }
6230 ]
6231 },
6232 {
6233 "name": "test-dispatch-error-operation",
6234 "namespace": "keet",
6235 "compact": false,
6236 "flagsPosition": -1,
6237 "fields": [
6238 {
6239 "name": "header",
6240 "required": true,
6241 "type": "@keet/operation-header",
6242 "version": 29
6243 }
6244 ]
6245 },
6246 {
6247 "name": "environment-record",
6248 "namespace": "local",
6249 "compact": false,
6250 "flagsPosition": 1,
6251 "fields": [
6252 {
6253 "name": "buildType",
6254 "required": true,
6255 "type": "@keet/build-type",
6256 "version": 29
6257 },
6258 {
6259 "name": "latestOfflineAbi",
6260 "type": "uint",
6261 "version": 30
6262 }
6263 ]
6264 }
6265 ]
6266}
keet-core-4.14.4-pretty/schema/versions.js +91 -0
……@@ -0,0 +1,91 @@
1const E = 1,
2 _ = {
3 DMS: 1,
4 LEAVE_ROOM: 2,
5 V2_CONFIG: 3,
6 PINNED_MESSAGES: 4,
7 ROOM_RENAME_EVENT: 5,
8 REPLY_TO: 6,
9 PERMISSION_DOWNGRADE: 7,
10 REMOVE_MEMBER: 8,
11 MUTE_MEMBER: 9,
12 V2_PRIVATE_PROFILE: 10,
13 ROOM_LOCKING: 11,
14 DISABLE_MEMBERSHIP_EVENTS: 12,
15 DISPLAY_NAME_VALIDATION: 13,
16 CALL_HANGUP_EVENT: 14,
17 CALL_MISSED_EVENT: 15,
18 UNREADS: 16,
19 PRIVATE_PROFILE_SETTINGS: 17,
20 READ_LENGTH: 18,
21 REMOVE_MEMBER_V2: 19,
22 CHAT_LABELS: 20,
23 MULTI_FILES: 21,
24 REPORTED_MSG_INDEX: 22,
25 REPORTED_MEMBER_INDEX: 23,
26 LOCATION_SHARED_EVENT: 24,
27 FAVORITE_ROOMS: 25,
28 FORWARDED_MESSAGE: 26,
29 CALLS_V2: 27,
30 MOVE_INDEXER: 28,
31 DISABLE_FILE_ATTACHMENTS: 29,
32 DISABLE_LINKS: 30,
33 DM_PEERS_TO_MODS: 31,
34 V2_UNREADS: 32,
35 },
36 e = {},
37 R = [
38 { abi: 1, features: [_.LEAVE_ROOM, _.V2_CONFIG] },
39 { abi: 2, features: [_.PINNED_MESSAGES, _.ROOM_RENAME_EVENT, _.REPLY_TO] },
40 { abi: 3, features: [_.MUTE_MEMBER] },
41 { abi: 4, features: [_.DMS] },
42 { abi: 5, features: [_.PERMISSION_DOWNGRADE] },
43 { abi: 6, features: [_.REMOVE_MEMBER] },
44 { abi: 7, features: [_.ROOM_LOCKING] },
45 { abi: 8, features: [_.V2_PRIVATE_PROFILE] },
46 { abi: 9, features: [] },
47 { abi: 10, features: [] },
48 { abi: 11, features: [] },
49 { abi: 12, features: [] },
50 { abi: 13, features: [] },
51 { abi: 14, features: [] },
52 { abi: 15, features: [_.UNREADS] },
53 { abi: 16, features: [] },
54 {
55 abi: 17,
56 features: [_.PRIVATE_PROFILE_SETTINGS, _.READ_LENGTH, _.REMOVE_MEMBER_V2, _.CHAT_LABELS],
57 },
58 { abi: 18, features: [_.MULTI_FILES] },
59 { abi: 19, features: [_.REPORTED_MSG_INDEX] },
60 { abi: 20, features: [_.REPORTED_MEMBER_INDEX] },
61 { abi: 21, features: [_.LOCATION_SHARED_EVENT, _.FAVORITE_ROOMS, _.FORWARDED_MESSAGE] },
62 { abi: 22, features: [] },
63 { abi: 23, features: [_.CALLS_V2, _.MOVE_INDEXER], autoupgrade: !0 },
64 { abi: 24, features: [_.DISABLE_FILE_ATTACHMENTS, _.DISABLE_LINKS, _.DM_PEERS_TO_MODS] },
65 { abi: 25, features: [] },
66 { abi: 26, features: [] },
67 { abi: 27, features: [] },
68 { abi: 28, features: [_.V2_UNREADS], stable: !0 },
69 ],
70 a = new Map()
71let A = -1,
72 M = -1,
73 S = -1
74for (const { abi: E, features: _, stable: e, autoupgrade: O } of R) {
75 for (const e of _) a.set(e, E)
76 ;(O && (S = E), e && (A = E), (M = E))
77}
78for (const [E, R] of Object.entries(_)) a.has(R) && (e[E] = a.get(R))
79function O(E, _) {
80 const e = a.get(_)
81 return !!e && e <= E
82}
83module.exports = {
84 isFeatureSupported: O,
85 FEATURES_TO_ABI: e,
86 FEATURES: _,
87 STABLE: A,
88 AUTOUPGRADE: S,
89 EXPERIMENTAL: M,
90 FORCE_UPDATE: 1,
91}
keet-core-4.14.4-pretty/workers/core.js +17 -0
……@@ -0,0 +1,17 @@
1const e = require("tiny-buffer-rpc"),
2 n = require("framed-stream"),
3 t = require("tiny-buffer-rpc/any"),
4 { load: a } = require("#runtime"),
5 r = new n(Bare.IPC),
6 c = new e((e) => r.write(e))
7r.on("data", (e) => c.recv(e))
8const o = c.register(768, { request: t, response: t })
9async function s(e) {
10 console.log("[uncaught] [boot]", e)
11 const n = JSON.stringify({ message: e?.message, code: e?.code, stack: e?.stack, fatal: e?.fatal })
12 await o.request(n)
13}
14async function i() {
15 await a(c, s)
16}
17;(Bare.on("uncaughtException", s).on("unhandledRejection", s), i())
keet-core-4.14.4-pretty/workers/desktop.js +40 -0
……@@ -0,0 +1,40 @@
1const { registerDebugMode: e } = require("@holepunchto/keet-debug-helper"),
2 r = require(".."),
3 o = require("../lib/rpc/server")
4async function a(a) {
5 const n = await Pear.versions(),
6 c = Pear.config.args[0] || Pear.config.storage,
7 l = "true" === Pear.config.args[1],
8 s = "true" === Pear.config.args[2],
9 t = "true" === Pear.config.args[3],
10 g = "true" === Pear.config.args[4],
11 i = "undefined" === Pear.config.args[5] ? void 0 : Pear.config.args[5],
12 { keet: p } = r.from(c, {
13 experimental: l,
14 devMirrors: s,
15 devUserRegistry: t,
16 swarming: g,
17 hyperconfKey: i,
18 production: !0,
19 onerror: (e) => console.log("background error:", e),
20 }),
21 d = p.backendAPI
22 ;(await d.ready(),
23 d
24 .ready()
25 .then(() => {
26 ;(e({ store: null, call: d.api.call, core: d.api.core }, () => {
27 console.log("Enabled debug mode")
28 }),
29 console.log(`Keet core worker started on ${c}`),
30 console.log(
31 `Platform version: ${n.platform.fork}.${n.platform.length}.${n.platform.key}`,
32 ),
33 n.app.key
34 ? console.log(`App version: ${n.app.fork}.${n.app.length}.${n.app.key}`)
35 : console.log("Local version"))
36 })
37 .catch((e) => console.error("Failed to start core worker", e)),
38 o(d, a))
39}
40module.exports = { load: a }
keet-core-4.14.4-pretty/workers/mobile.js +237 -0
……@@ -0,0 +1,237 @@
1const e = require("tiny-buffer-rpc/any"),
2 a = require(".."),
3 n = require("../lib/rpc/server"),
4 { GENERIC_EVENTS: i } = require("@holepunchto/keet-core-api"),
5 t = require("hypercore-proof-queue"),
6 r = require("b4a"),
7 o = require("xache"),
8 s = require("suspendify"),
9 c = require("fs-native-lock"),
10 { getNotificationBody: u, getNotificationTitle: d } = require("./utils/notification")
11async function l(l, g) {
12 const p = Bare.argv[0],
13 f = Bare.argv[1],
14 y = Bare.argv[2],
15 w = "true" === Bare.argv[3],
16 h = "store" !== Bare.argv[1] || w,
17 k = h,
18 m = "ios" === Bare.platform,
19 b = Math.random().toString(16).slice(2),
20 v = "true" === Bare.argv[4],
21 q = Bare.argv[5],
22 B = Bare.argv[6],
23 S = Bare.argv[7],
24 x = Bare.argv[8] ? JSON.parse(r.toString(r.from(Bare.argv[8], "base64"))) : {},
25 A = x?.strings,
26 I = x.logFile || x.logFilePath || x.fileLogPath,
27 L = x.logFileMaxSize,
28 N = x.logLevel || "info"
29 let C = null,
30 E = 0,
31 R = !1
32 const F = (...e) => {
33 ;(E++, M.logger.info(b, E, ...e))
34 },
35 { keet: M } = a.from(p, {
36 buildType: f,
37 logger: { logFile: I, logLevel: N, logFileMaxSize: L },
38 devMirrors: k,
39 devUserRegistry: h,
40 hyperconfKey: S,
41 production: !0,
42 appVersion: B,
43 apiLogger: F,
44 mobile: !0,
45 storage: { id: y, wait: !0 },
46 })
47 function P(e) {
48 M.onerror(e)
49 }
50 v &&
51 require("sentry-bare").init({
52 release: q,
53 dsn: "https://cbea8d749dec25aa3e4443fe1ad280b4@o139579.ingest.us.sentry.io/4509075596967936",
54 })
55 const z = M.backendAPI,
56 D = new o({ maxSize: 1024 })
57 F("Started bare worker...")
58 const K = new s({
59 wakeupLinger: 6e3,
60 async pollLinger() {
61 const e = await U(),
62 a = Math.round(Math.max(1e3 * e - 1e4, 0))
63 return (F("app says we have", a, "left to suspend"), a)
64 },
65 async suspend() {
66 try {
67 ;(F("Suspending..."),
68 await H,
69 F("Suspending queue"),
70 await T.suspend(),
71 F("Freeing lock so push can run"),
72 C && (await C.unlock()),
73 (C = null),
74 F("Suspending backend"),
75 await z.suspend(),
76 F("Signalling frontend to suspend"),
77 await G.request(!0),
78 K.interrupted
79 ? F("interrupted skipping idle")
80 : (F("Asking bare to go Idle"), Bare.idle()))
81 } catch (e) {
82 F("Caught suspension error: " + e.stack)
83 }
84 },
85 async suspendCancelled() {
86 ;(F("Signalling frontend to suspend (cancelled)"), await G.request(!1))
87 },
88 async presuspend() {
89 ;(F("Presuspending..."), await M.presuspend())
90 },
91 async resume() {
92 await H
93 try {
94 ;(F("Resuming..."),
95 await z.resume(),
96 F("Acquiring push lock"),
97 await J(),
98 F("Resuming push queue"),
99 await T.resume(),
100 F("Resuming concluded"))
101 } catch (e) {
102 F("Caught suspension error: " + e.stack)
103 }
104 },
105 async wakeup() {
106 ;(F("Waking up"),
107 await H,
108 F("resuming backend"),
109 await z.resume(),
110 F("backgrounding the core"),
111 await M.wakeup(),
112 F("Wake up done"))
113 },
114 })
115 ;(Bare.on("idle", function () {
116 console.log("Bare has fully idled, zzz....")
117 }),
118 Bare.on("suspend", function (e) {
119 ;((R = !0),
120 (e = Math.max(e - 1e4, 0)),
121 F("Bare suspend, linger", e),
122 (null !== z.api.call && z.api.call.callIsActive) ||
123 (F("Asking suspendify to suspend"), K.suspend(e)))
124 }),
125 Bare.on("resume", function () {
126 ;(F("Bare resume"), (R = !1), K.resume())
127 }),
128 Bare.on("wakeup", function () {
129 ;(F("Bare wakeup"), K.wakeup())
130 }),
131 n(z, l))
132 const T = new t(`${p}/notifications`, async function (e) {
133 try {
134 ;(!1 === z.opened && (await z.ready()),
135 F("Draining notification handler, got", e.length, "proofs"),
136 z.api.core.setProcessingNotifications(!0))
137 const a = M.rootCorestore,
138 n = new Set()
139 for (const i of e) {
140 const e = a.get({ discoveryKey: i.discoveryKey })
141 try {
142 ;(await e.ready(),
143 i.data.block &&
144 e.length === i.data.block.index &&
145 i.data.upgrade &&
146 ((i.data.block.nodes = []),
147 (i.data.upgrade.start = e.length),
148 (i.data.upgrade.length = 1),
149 (i.data.upgrade.nodes = [])),
150 await e.core.verify(i.data, null),
151 n.add(r.toString(i.discoveryKey, "hex")))
152 } catch (e) {
153 F("Ignoring proof update due to:", e.message)
154 }
155 try {
156 await e.close()
157 } catch {}
158 }
159 for (const e of n)
160 (F("Waking up", e), M.scheduleDiscoverySwarmingFromDiscoveryKey(r.from(e, "hex")))
161 F("Draining notification complete")
162 } catch (e) {
163 F("Error handling notifications queue", e)
164 } finally {
165 ;(F("Draining notification complete, enabling notifications"),
166 z.api.core.setProcessingNotifications(!1))
167 }
168 }),
169 _ = l.register(512, { request: e, response: e }),
170 W = l.register(1280, { request: e, response: e }),
171 j = l.register(1536, { request: e, response: e }),
172 G = l.register(2816, { request: e, response: e }),
173 U = () => (m ? W.request({}) : 30),
174 V = (e) => _.request(e),
175 $ = () => j.request(),
176 H = (async function () {
177 ;(F("Booting backend"),
178 await z.ready(),
179 Bare.off("uncaughtException", g).off("unhandledRejection", g),
180 Bare.on("uncaughtException", P).on("unhandledRejection", P),
181 F("Backend ready"),
182 await J(),
183 F("Acquired push lock"))
184 })()
185 async function J() {
186 ;(C && (await C.unlock()), (C = new c(`${p}/lock`, { wait: !0 })), await C.lock())
187 }
188 !(async function () {
189 ;(F("await booting in notifications"),
190 await H,
191 z.api.call.on("call-active", function () {
192 R && (F("Call started in bg, resuming"), K.resume())
193 }),
194 z.api.call.on("call-inactive", function () {
195 R &&
196 (F("Call ended in bg, suspending"),
197 z.api.call.callIsActive || (F("suspending now in 5000"), K.suspend(5e3)))
198 }),
199 F("subscribing to notifications"))
200 const e = await z.api.core.subscribeNotifications()
201 for await (const a of e)
202 switch (a.type) {
203 case i.CALL_HANGUP:
204 ;(F("stopping call ring"),
205 await $(),
206 !z.api.call.callIsActive && R && (F("call hangup - suspending 5000"), K.suspend(5e3)))
207 break
208 case i.CALL_STARTED:
209 ;(F("suspending"), R && K.suspend())
210 break
211 default:
212 if (!R) {
213 F("Not backgrounded, dropping")
214 continue
215 }
216 if (D.get(a.id)) {
217 F("message is in cache already, dropping", a.id)
218 continue
219 }
220 if ((D.set(a.id, !0), (a.strings = A), a.message)) {
221 const e = {
222 id: a.id,
223 threadIdentifier: a.roomId,
224 avatar: a.avatar,
225 title: d(a),
226 body: u(a),
227 userInfo: a.userInfo,
228 sound: { type: "named", name: "notif_default.wav" },
229 }
230 ;(F("sending push notification"), V(e))
231 break
232 }
233 F("skipping push notification, no message")
234 }
235 })()
236}
237module.exports = { load: l }
keet-core-4.14.4-pretty/workers/push.js +86 -0
……@@ -0,0 +1,86 @@
1const e = require("hypercore-id-encoding"),
2 o = require("hypercore-proof-queue"),
3 s = require("fs-native-lock"),
4 i = require("b4a"),
5 {
6 getNotificationBody: n,
7 getNotificationTitle: t,
8 ROOM_TYPE: a,
9 MESSAGE_TYPE: r,
10 } = require("./utils/notification.js"),
11 l = require("../lib/push"),
12 u = Bare.argv[0],
13 p = Bare.argv[1],
14 c = JSON.parse(i.toString(i.from(p, "base64"), "utf8")),
15 g = (...e) => console.log("[keet-push]", ...e)
16BareKit.on("push", async (p, f) => {
17 const d = new s(`${u}/lock`)
18 try {
19 await d.lock()
20 } catch {
21 return (g("skipping push cause lock can not be acquired (app is running)"), f(null, null))
22 }
23 g("running push handler")
24 try {
25 const s = JSON.parse(p.toString()),
26 d = s.data ? s.data.payload : s.payload,
27 m = await l(u, Buffer.from(d, "base64"), { log: g })
28 if ((g("result", m), null === m)) return (g("skipping push cause no result"), f(null, null))
29 if (m.proof) {
30 g("processing proof queue")
31 const e = new o(`${u}/notifications`)
32 ;(e.push(m.proof), await e.close(), g("done processing proof queue"))
33 }
34 const {
35 sender: y,
36 room: { key: h, title: k, type: b },
37 } = m,
38 q = e.encode(h),
39 { type: S } = m.message,
40 w = { title: k, roomType: b },
41 v = b === a.DM,
42 B = b === a.BROADCAST,
43 N = v && S === r.CALL_JOINED
44 if ((y.self && !N) || y.blocked || !m.message)
45 return (
46 g(
47 "skipping push, self=" + !!y.self + " blocked=" + !!y.blocked + " message=" + !!m.message,
48 ),
49 f(null, null)
50 )
51 y.self &&
52 N &&
53 g(
54 "not skipping self push because message type is call_joined, to hangup call on this linked device",
55 )
56 const O = t({ sender: y, config: w }),
57 T = n({ ...m, config: w, strings: c }),
58 A = m?.room?.roomAvatar?.small?.pointer?.inlined,
59 E = A ? i.toString(A, "base64") : ""
60 ;(g("replying with push, title=" + O + " body=" + T),
61 f(
62 null,
63 JSON.stringify({
64 id: m.id,
65 title: O,
66 body: T,
67 type: m.message.type,
68 timestamp: m.message.timestamp,
69 threadIdentifier: q,
70 avatar: E,
71 userInfo: {
72 roomKey: q,
73 isDmRoom: v,
74 isBroadcast: B,
75 messageType: S,
76 profileName: y.name,
77 },
78 sound: { type: "named", name: "notif_default.wav" },
79 }),
80 ))
81 } catch (e) {
82 ;(g("error", e.message), f(e, null))
83 } finally {
84 await d.unlock()
85 }
86})
keet-core-4.14.4-pretty/workers/utils/notification.js +57 -0
……@@ -0,0 +1,57 @@
1const e = {
2 sharedImage: "shared an image 🖼️",
3 sharedVideo: "shared a video 📹",
4 sharedFile: "shared a file 📁",
5 callStarted: "has started a call 📞",
6 sharedAudio: "Shared an audio 🔊",
7 sharedVoice: "Shared a voice message 🎤",
8 sharedLink: "Shared a link 🔗",
9 },
10 t = { ROOM: "0", BROADCAST: "1", DM: "2" },
11 r = { CALL_JOINED: "call_joined" },
12 i = (e) => {
13 try {
14 const t = e.startsWith("www.") ? `https://${e}` : e,
15 r = new URL(t)
16 return "http:" === r.protocol || "https:" === r.protocol
17 } catch {
18 return !1
19 }
20 },
21 a = (e) => {
22 if (!e || "string" != typeof e) return !1
23 const t = e.trim()
24 return !/\s/.test(t) && i(t)
25 },
26 s = ({ roomType: e, title: r }) =>
27 e ? { isChannel: e === t.BROADCAST, isDm: e === t.DM || !r } : { isChannel: !1, isDm: !1 },
28 n = ({ sender: e, config: t }) => {
29 const { isDm: r } = s(t)
30 return r ? e.name : t.title
31 },
32 o = ({ message: t, sender: r, config: i, strings: n }) => {
33 const o = n || e,
34 { type: d, chatText: h, fileType: l } = t,
35 { name: c } = r,
36 g = c?.split("\n").join(" ") || "👋",
37 u = "call" === d,
38 { isDm: m, isChannel: f } = s(i),
39 S = (() => {
40 if (h) return a(h) ? o.sharedLink : h
41 if ("file" === d && l) {
42 if (String(l).startsWith("image/")) return o.sharedImage
43 if (String(l).startsWith("video/")) return o.sharedVideo
44 if (String(l).startsWith("audio/x-m4a")) return o.sharedVoice
45 if (String(l).startsWith("audio/")) return o.sharedAudio
46 }
47 return u ? (m ? o.callStarted : `${g} ${o.callStarted}`) : o.sharedFile
48 })()
49 return m || f || u ? S : `${g}: ${S}`
50 }
51module.exports = {
52 ROOM_TYPE: t,
53 MESSAGE_TYPE: r,
54 getRoomTypeFlags: s,
55 getNotificationTitle: n,
56 getNotificationBody: o,
57}
tools/keet-audit.cjs +357 -0
……@@ -0,0 +1,357 @@
1#!/usr/bin/env node
2/**
3 * keet-audit.cjs — automate phases A + B + C-scaffold + E-raw-diff of a
4 * Keet ecosystem audit.
5 *
6 * Reads the currently-running Keet AppImage's `@holepunchto/*` packages
7 * (plus `keet-identity-key`) and produces a frozen, prettified mirror
8 * plus a structural scaffold:
9 *
10 * keet-audit-4.x/
11 * raw/ — verbatim copy of every package as shipped
12 * pretty/ — same tree, all .js prettified for reading
13 * MANIFEST.md — package → version + AppImage release
14 * STRUCTURE.md — per-package factual scaffold (exports,
15 * top-level requires, file inventory) ready
16 * to fill with narrative
17 * DIFF-RAW.md — file-level diff of overlapping packages
18 * vs prior keet-core-hyperdb 1.22.0 source
19 *
20 * What this script does NOT do: narrative analysis. The STRUCTURE.md
21 * skeleton is intentionally minimal — the audit value is in the prose
22 * an analyst writes on top. Same for DIFF-RAW.md: it lists structural
23 * changes; "what those changes mean" is the deep-dive step.
24 *
25 * Usage: node keet-audit.cjs [--src <appimage-mount>] [--out <dir>]
26 */
27
28'use strict'
29
30const fs = require('fs')
31const path = require('path')
32const { spawnSync } = require('child_process')
33
34const argv = process.argv.slice(2)
35function arg (name, def) {
36 const i = argv.indexOf(name)
37 return i >= 0 && i + 1 < argv.length ? argv[i + 1] : def
38}
39
40const SRC_ROOT = arg('--src', '/tmp/.mount_Keet.AjtX4HI/resources/app/node_modules')
41const OUT_ROOT = arg('--out', path.resolve(__dirname, '../../keet-audit-4.x'))
42const PRIOR_DEOBFUSC = arg('--prior',
43 path.resolve(__dirname, '../deobfuscated'))
44
45const PKG_SOURCES = []
46// Every @holepunchto/* package
47const hpDir = path.join(SRC_ROOT, '@holepunchto')
48if (fs.existsSync(hpDir)) {
49 for (const p of fs.readdirSync(hpDir)) {
50 const full = path.join(hpDir, p)
51 if (fs.statSync(full).isDirectory() && fs.existsSync(path.join(full, 'package.json'))) {
52 PKG_SOURCES.push({ name: '@holepunchto/' + p, srcDir: full })
53 }
54 }
55}
56// Plus keet-identity-key (not under @holepunchto but Keet-specific)
57const idkDir = path.join(SRC_ROOT, 'keet-identity-key')
58if (fs.existsSync(path.join(idkDir, 'package.json'))) {
59 PKG_SOURCES.push({ name: 'keet-identity-key', srcDir: idkDir })
60}
61
62if (PKG_SOURCES.length === 0) {
63 console.error('No source packages found at ' + SRC_ROOT)
64 console.error('Hint: is the Keet AppImage running so its FUSE mount is up?')
65 process.exit(1)
66}
67
68console.error('audit source: ' + SRC_ROOT)
69console.error('audit output: ' + OUT_ROOT)
70console.error('prior compare: ' + PRIOR_DEOBFUSC)
71console.error('packages: ' + PKG_SOURCES.length)
72
73const RAW = path.join(OUT_ROOT, 'raw')
74const PRETTY = path.join(OUT_ROOT, 'pretty')
75fs.mkdirSync(RAW, { recursive: true })
76fs.mkdirSync(PRETTY, { recursive: true })
77
78// ──────────────────────────────────────────────────────────────
79// Phase A — freeze raw source
80// ──────────────────────────────────────────────────────────────
81console.error('\n[A] freeze raw source')
82function cpRecursive (src, dst) {
83 // Use system cp -r; it handles permissions, symlinks, and large trees
84 // faster than walking with node's fs. The AppImage FUSE mount has
85 // weird permission bits we don't want to faithfully replicate, so we
86 // re-chmod readable on the destination at the end.
87 const r = spawnSync('cp', ['-rL', src + '/.', dst], { stdio: 'inherit' })
88 if (r.status !== 0) throw new Error('cp failed for ' + src)
89}
90
91for (const pkg of PKG_SOURCES) {
92 const dst = path.join(RAW, pkg.name)
93 fs.mkdirSync(dst, { recursive: true })
94 cpRecursive(pkg.srcDir, dst)
95}
96spawnSync('chmod', ['-R', 'u+rw,go+r', RAW])
97console.error(' raw frozen at ' + RAW)
98
99// Read AppImage release number (best-effort) for the manifest. We
100// already know it from `pear info pear://keet` so just record what we
101// can find on disk.
102let appimageRelease = null
103const peerVersion = path.join(SRC_ROOT, '..', 'package.json')
104if (fs.existsSync(peerVersion)) {
105 try {
106 const pkg = JSON.parse(fs.readFileSync(peerVersion, 'utf8'))
107 if (pkg.version) appimageRelease = pkg.version
108 } catch {}
109}
110
111// ──────────────────────────────────────────────────────────────
112// Phase A.2 — MANIFEST.md
113// ──────────────────────────────────────────────────────────────
114const manifestLines = []
115manifestLines.push('# Keet 4.x audit — package manifest')
116manifestLines.push('')
117manifestLines.push('Captured: ' + new Date().toISOString())
118manifestLines.push('Source: ' + SRC_ROOT)
119if (appimageRelease) manifestLines.push('AppImage app version: ' + appimageRelease)
120manifestLines.push('')
121manifestLines.push('| Package | Version | Description |')
122manifestLines.push('|---|---|---|')
123
124const PKG_META = []
125for (const pkg of PKG_SOURCES) {
126 let meta = { name: pkg.name, version: '?', description: '' }
127 try {
128 const pj = JSON.parse(fs.readFileSync(path.join(pkg.srcDir, 'package.json'), 'utf8'))
129 meta = { name: pj.name || pkg.name, version: pj.version || '?', description: pj.description || '' }
130 } catch {}
131 PKG_META.push({ ...pkg, meta })
132 manifestLines.push('| `' + meta.name + '` | ' + meta.version + ' | ' + escapeMd(meta.description) + ' |')
133}
134manifestLines.push('')
135fs.writeFileSync(path.join(OUT_ROOT, 'MANIFEST.md'), manifestLines.join('\n') + '\n')
136console.error(' wrote ' + path.join(OUT_ROOT, 'MANIFEST.md'))
137
138// ──────────────────────────────────────────────────────────────
139// Phase B — prettify
140// ──────────────────────────────────────────────────────────────
141console.error('\n[B] prettify')
142cpRecursive(RAW, PRETTY)
143const prettierBin = path.resolve(__dirname, '../node_modules/.bin/prettier')
144const prettierCmd = fs.existsSync(prettierBin) ? prettierBin : 'npx'
145const prettierArgs = fs.existsSync(prettierBin)
146 ? ['--parser', 'babel', '--no-semi', '--print-width', '100', '--tab-width', '2', '--write']
147 : ['--yes', 'prettier', '--parser', 'babel', '--no-semi', '--print-width', '100', '--tab-width', '2', '--write']
148
149// Find all .js files
150function findJs (dir, acc = []) {
151 for (const ent of fs.readdirSync(dir, { withFileTypes: true })) {
152 const full = path.join(dir, ent.name)
153 if (ent.isDirectory()) {
154 if (ent.name === 'node_modules' || ent.name.startsWith('.')) continue
155 findJs(full, acc)
156 } else if (ent.isFile() && ent.name.endsWith('.js') && !ent.name.endsWith('.min.js')) {
157 acc.push(full)
158 }
159 }
160 return acc
161}
162const jsFiles = findJs(PRETTY)
163console.error(' prettifying ' + jsFiles.length + ' .js files in batches…')
164const BATCH = 50
165let prettified = 0
166let prettierErrors = 0
167for (let i = 0; i < jsFiles.length; i += BATCH) {
168 const batch = jsFiles.slice(i, i + BATCH)
169 const r = spawnSync(prettierCmd, [...prettierArgs, ...batch], {
170 stdio: ['ignore', 'ignore', 'pipe']
171 })
172 if (r.status !== 0) {
173 prettierErrors += batch.length
174 const err = r.stderr ? r.stderr.toString().slice(0, 200) : ''
175 console.error(' batch ' + i + ' failed: ' + err.split('\n')[0])
176 } else {
177 prettified += batch.length
178 }
179 if ((i / BATCH) % 4 === 0) process.stderr.write('.')
180}
181process.stderr.write('\n')
182console.error(' prettified ' + prettified + ' / errors ' + prettierErrors + ' / total ' + jsFiles.length)
183
184// ──────────────────────────────────────────────────────────────
185// Phase C — STRUCTURE.md scaffold
186// ──────────────────────────────────────────────────────────────
187console.error('\n[C] STRUCTURE.md scaffold')
188const structLines = []
189structLines.push('# Keet 4.x audit — structure scaffold')
190structLines.push('')
191structLines.push('Auto-generated by `tools/keet-audit.cjs`. Each section below contains the')
192structLines.push('FACTUAL data extracted from the package (version, exports, top-level imports,')
193structLines.push('file inventory). The "## Notes" subsection is intentionally blank — fill it')
194structLines.push('with narrative analysis as the deep dives happen.')
195structLines.push('')
196structLines.push('Sections are alphabetized by package name. Skim the manifest in MANIFEST.md')
197structLines.push('first for a high-level inventory.')
198structLines.push('')
199
200for (const pkg of PKG_META.slice().sort((a, b) => a.meta.name.localeCompare(b.meta.name))) {
201 const meta = pkg.meta
202 const pkgPretty = path.join(PRETTY, pkg.name)
203 structLines.push('## `' + meta.name + '`')
204 structLines.push('')
205 structLines.push('- **Version**: ' + meta.version)
206 if (meta.description) structLines.push('- **Description**: ' + meta.description)
207
208 // package.json fields of interest
209 try {
210 const pj = JSON.parse(fs.readFileSync(path.join(pkgPretty, 'package.json'), 'utf8'))
211 if (pj.main) structLines.push('- **Main**: `' + pj.main + '`')
212 if (pj.exports) {
213 const exportsKeys = typeof pj.exports === 'object'
214 ? Object.keys(pj.exports).slice(0, 8).map(k => '`' + k + '`').join(', ')
215 : '`' + pj.exports + '`'
216 structLines.push('- **Exports**: ' + exportsKeys)
217 }
218 if (pj.dependencies) {
219 const deps = Object.keys(pj.dependencies)
220 structLines.push('- **Dependencies** (' + deps.length + '): ' +
221 deps.slice(0, 12).map(d => '`' + d + '`').join(', ') +
222 (deps.length > 12 ? ', …' : ''))
223 }
224 } catch {}
225
226 // File inventory
227 let pkgFiles = []
228 try { pkgFiles = findJs(pkgPretty) } catch {}
229 structLines.push('- **JS files**: ' + pkgFiles.length)
230
231 // Top-level requires of the main entry
232 const mainPath = path.join(pkgPretty, 'index.js')
233 if (fs.existsSync(mainPath)) {
234 const src = fs.readFileSync(mainPath, 'utf8')
235 const reqs = [...src.matchAll(/require\(["']([^"']+)["']\)/g)].map(m => m[1])
236 const uniq = [...new Set(reqs)]
237 if (uniq.length) {
238 structLines.push('- **Top-level `require()` (index.js)**:')
239 structLines.push(' ```')
240 for (const r of uniq.slice(0, 25)) structLines.push(' ' + r)
241 if (uniq.length > 25) structLines.push(' … ' + (uniq.length - 25) + ' more')
242 structLines.push(' ```')
243 }
244 }
245
246 // Directory layout (1 level)
247 try {
248 const ents = fs.readdirSync(pkgPretty, { withFileTypes: true })
249 const dirs = ents.filter(e => e.isDirectory() && !e.name.startsWith('.') && e.name !== 'node_modules')
250 .map(e => e.name).sort()
251 const files = ents.filter(e => e.isFile()).map(e => e.name).sort()
252 if (dirs.length || files.length) {
253 structLines.push('- **Top-level layout**:')
254 structLines.push(' ```')
255 for (const d of dirs) structLines.push(' ' + d + '/')
256 for (const f of files) structLines.push(' ' + f)
257 structLines.push(' ```')
258 }
259 } catch {}
260
261 structLines.push('')
262 structLines.push('### Notes')
263 structLines.push('')
264 structLines.push('_(fill in during deep dives)_')
265 structLines.push('')
266 structLines.push('---')
267 structLines.push('')
268}
269fs.writeFileSync(path.join(OUT_ROOT, 'STRUCTURE.md'), structLines.join('\n'))
270console.error(' wrote ' + path.join(OUT_ROOT, 'STRUCTURE.md'))
271
272// ──────────────────────────────────────────────────────────────
273// Phase E — raw diff vs 1.22.0
274// ──────────────────────────────────────────────────────────────
275console.error('\n[E] raw diff vs prior')
276const diffLines = []
277diffLines.push('# Keet audit — diff vs keet-core-hyperdb 1.22.0')
278diffLines.push('')
279diffLines.push('Captured: ' + new Date().toISOString())
280diffLines.push('Prior source: ' + PRIOR_DEOBFUSC)
281diffLines.push('')
282
283if (!fs.existsSync(PRIOR_DEOBFUSC)) {
284 diffLines.push('Prior `deobfuscated/` source not found — skipping diff.')
285} else {
286 // The prior tree was the deobfuscation of keet-core-hyperdb 1.22.0
287 // (one package). The new architecture splits it into keet-core,
288 // keet-core-api, keet-core-schemas plus much else. The most useful
289 // diffs are between the prior root and the new keet-core/keet-core-api
290 // / keet-core-schemas trees.
291 for (const newPkg of ['@holepunchto/keet-core']) {
292 const newPretty = path.join(PRETTY, newPkg)
293 if (!fs.existsSync(newPretty)) continue
294 diffLines.push('## ' + newPkg + ' vs prior 1.22.0')
295 diffLines.push('')
296 diffLines.push('```')
297 const r = spawnSync('diff', ['-rq', PRIOR_DEOBFUSC, newPretty], {
298 encoding: 'utf8'
299 })
300 // diff exit 0 = identical, 1 = differences, 2 = error
301 const lines = (r.stdout || '').split('\n')
302 // Summarize by category
303 let onlyOld = 0, onlyNew = 0, differ = 0
304 const onlyOldEx = [], onlyNewEx = [], differEx = []
305 for (const line of lines) {
306 if (line.startsWith('Only in ' + PRIOR_DEOBFUSC)) { onlyOld++; if (onlyOldEx.length < 8) onlyOldEx.push(line) }
307 else if (line.startsWith('Only in ' + newPretty)) { onlyNew++; if (onlyNewEx.length < 8) onlyNewEx.push(line) }
308 else if (line.startsWith('Files ')) { differ++; if (differEx.length < 8) differEx.push(line) }
309 }
310 diffLines.push('only in prior (1.22.0): ' + onlyOld)
311 diffLines.push('only in current (4.x): ' + onlyNew)
312 diffLines.push('present in both, differ: ' + differ)
313 diffLines.push('```')
314 diffLines.push('')
315 if (onlyOldEx.length) {
316 diffLines.push('### Samples — only in prior (gone from 4.x)')
317 diffLines.push('')
318 diffLines.push('```')
319 for (const x of onlyOldEx) diffLines.push(x)
320 if (onlyOld > onlyOldEx.length) diffLines.push('… ' + (onlyOld - onlyOldEx.length) + ' more')
321 diffLines.push('```')
322 diffLines.push('')
323 }
324 if (onlyNewEx.length) {
325 diffLines.push('### Samples — new in 4.x')
326 diffLines.push('')
327 diffLines.push('```')
328 for (const x of onlyNewEx) diffLines.push(x)
329 if (onlyNew > onlyNewEx.length) diffLines.push('… ' + (onlyNew - onlyNewEx.length) + ' more')
330 diffLines.push('```')
331 diffLines.push('')
332 }
333 if (differEx.length) {
334 diffLines.push('### Samples — present in both, content differs')
335 diffLines.push('')
336 diffLines.push('```')
337 for (const x of differEx) diffLines.push(x)
338 if (differ > differEx.length) diffLines.push('… ' + (differ - differEx.length) + ' more')
339 diffLines.push('```')
340 diffLines.push('')
341 }
342 }
343}
344
345fs.writeFileSync(path.join(OUT_ROOT, 'DIFF-RAW.md'), diffLines.join('\n'))
346console.error(' wrote ' + path.join(OUT_ROOT, 'DIFF-RAW.md'))
347
348console.error('\nDone.')
349console.error('Next: read MANIFEST.md → STRUCTURE.md → DIFF-RAW.md, then start filling Notes sections.')
350
351// ──────────────────────────────────────────────────────────────
352// helpers
353// ──────────────────────────────────────────────────────────────
354function escapeMd (s) {
355 if (!s) return ''
356 return String(s).replace(/\|/g, '\\|').replace(/\n/g, ' ')
357}