| … | … | @@ -1,5 +1,17 @@ |
| 1 | 1 | # keet-core-hyperdb v1.22.0 — Deobfuscated Reference |
| 2 | 2 | |
| 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 | ||
| 3 | 15 | **Package**: `@holepunchto/keet-core-hyperdb` |
| 4 | 16 | **Version**: 1.22.0 |
| 5 | 17 | **Files**: 161 JS files deobfuscated (120 obfuscated + 11 clean + 30 duplicates in lib/contract) |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,2432 @@ |
| 1 | const 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([])) | |
| 28 | const 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 | |
| 99 | class 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 | } | |
| 157 | class 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 | } | |
| 439 | module.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 | } | |
| 2376 | const 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 | } | |
| 2385 | function $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 | } | |
| 2398 | function 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 | } | |
| 2403 | function 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 | } | |
| 2412 | function 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 | } | |
| 2424 | function Je() {} | |
| 2425 | function Ye() { | |
| 2426 | return !0 | |
| 2427 | } | |
| 2428 | function 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 | } |
| … | … | @@ -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 | ] |
| … | … | @@ -0,0 +1,72 @@ |
| 1 | const e = require("hypercore-id-encoding") | |
| 2 | module.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 | } | |
| 33 | class 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 | } |
| … | … | @@ -0,0 +1,152 @@ |
| 1 | const e = require("hypercore-id-encoding"), | |
| 2 | t = require("b4a") | |
| 3 | function 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 | } | |
| 6 | function 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 | } | |
| 11 | function 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 | } | |
| 16 | function 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 | } | |
| 26 | function 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 | } | |
| 32 | function a(e) { | |
| 33 | return e ? { small: d(e.small), medium: d(e.medium), large: d(e.large) } : null | |
| 34 | } | |
| 35 | function 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 | } | |
| 78 | function 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 | } | |
| 88 | function 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 | } | |
| 101 | function 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 | } | |
| 121 | function g(t) { | |
| 122 | return { key: e.decode(t.deviceId), seq: t.seq } | |
| 123 | } | |
| 124 | function p(e) { | |
| 125 | return e ? { ...e, avatar: a(e.avatar), blindPeers: y(e.blindPeers) } : null | |
| 126 | } | |
| 127 | function m(e) { | |
| 128 | return e ? { disableReadReceipts: !0 === e.disableReadReceipts } : null | |
| 129 | } | |
| 130 | function y(t) { | |
| 131 | return t && Array.isArray(t) ? t.map((t) => e.decode(t)) : [] | |
| 132 | } | |
| 133 | function b({ memberId: t, blindWriters: n, displayName: r, avatar: i }) { | |
| 134 | return { memberKey: e.decode(t), blindWriters: f(n), displayName: r, avatar: a(i) } | |
| 135 | } | |
| 136 | function f(t) { | |
| 137 | return t && Array.isArray(t) | |
| 138 | ? t.map((t) => ({ publicKey: e.decode(t.publicKey), blindingKey: e.decode(t.blindingKey) })) | |
| 139 | : [] | |
| 140 | } | |
| 141 | module.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 | } |
| … | … | @@ -0,0 +1,513 @@ |
| 1 | const 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") | |
| 15 | function d({ key: t, seq: n }) { | |
| 16 | return { deviceId: e.encode(t), seq: n } | |
| 17 | } | |
| 18 | function 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 | } | |
| 28 | function c(t) { | |
| 29 | if (!t) return null | |
| 30 | const { key: n, blob: a } = t | |
| 31 | return { id: e.encode(n), blob: a } | |
| 32 | } | |
| 33 | function 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 | } | |
| 38 | function 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 | } | |
| 48 | function 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 | } | |
| 60 | function 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 | } | |
| 74 | function g(e) { | |
| 75 | return e ? { small: p(e.small), medium: p(e.medium), large: p(e.large) } : null | |
| 76 | } | |
| 77 | function 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 | } | |
| 84 | function 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 | } | |
| 126 | function 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 | } | |
| 135 | function I(e) { | |
| 136 | return e.map((e) => e.reaction) | |
| 137 | } | |
| 138 | function k(t) { | |
| 139 | return { sender: e.encode(t.sender), clock: t.clock, reaction: t.reaction } | |
| 140 | } | |
| 141 | function 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 | } | |
| 149 | function 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 | } | |
| 175 | function 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 | } | |
| 183 | function 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 | } | |
| 201 | function 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 | } | |
| 216 | function 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 | } | |
| 226 | function 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 | } | |
| 234 | function T(e) { | |
| 235 | return { ...e } | |
| 236 | } | |
| 237 | function L(t) { | |
| 238 | return t ? t.map(e.encode) : null | |
| 239 | } | |
| 240 | function N(e) { | |
| 241 | return { disableReadReceipts: e?.disableReadReceipts || !1 } | |
| 242 | } | |
| 243 | function w(e) { | |
| 244 | return { | |
| 245 | concurrency: e.concurrency, | |
| 246 | maxWindow: e.maxWindow, | |
| 247 | randomPunchInterval: e.randomPunchInterval, | |
| 248 | connectionKeepAlive: e.connectionKeepAlive, | |
| 249 | } | |
| 250 | } | |
| 251 | function 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 | } | |
| 267 | function 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 | } | |
| 279 | function S(t) { | |
| 280 | return t ? { username: t.username, memberId: t.memberKey ? e.encode(t.memberKey) : null } : null | |
| 281 | } | |
| 282 | function 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 | } | |
| 301 | function O(t) { | |
| 302 | return t ? { roomId: t.roomKey ? e.encode(t.roomKey) : null } : {} | |
| 303 | } | |
| 304 | function 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 | } | |
| 316 | function _(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 | } | |
| 339 | function 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 | } | |
| 351 | function 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 | } | |
| 359 | function 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 | } | |
| 369 | function 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 | } | |
| 377 | function 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 | } | |
| 424 | function 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 | } | |
| 434 | function 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 | } | |
| 445 | function W(e) { | |
| 446 | return { ...z(e), type: a.PEAR_LINK } | |
| 447 | } | |
| 448 | function 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 | } | |
| 460 | function Y(e) { | |
| 461 | const a = e.isAdmin ? n.ADMIN : e.isModerator ? n.MODERATOR : n.PEER | |
| 462 | return t(a) | |
| 463 | } | |
| 464 | function 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 | } | |
| 476 | function 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 | } | |
| 487 | module.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 | } |
| … | … | @@ -0,0 +1,157 @@ |
| 1 | const { | |
| 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") | |
| 15 | async 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 | } | |
| 23 | async 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 | } | |
| 43 | async 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 | } | |
| 61 | function 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 | } | |
| 67 | async 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 | } | |
| 85 | async 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 | } | |
| 91 | function 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 | } | |
| 109 | async function u(e, t) { | |
| 110 | const s = b(e), | |
| 111 | n = await e.findOne(t) | |
| 112 | return n ? s(n) : null | |
| 113 | } | |
| 114 | async function h(e, t, s = !0) { | |
| 115 | const n = b(e, s) | |
| 116 | return k(e.find(t), n) | |
| 117 | } | |
| 118 | function 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 | } | |
| 144 | async function k(e, t) { | |
| 145 | const s = [] | |
| 146 | for await (const n of e) s.push(t(n)) | |
| 147 | return Promise.all(s) | |
| 148 | } | |
| 149 | module.exports = { | |
| 150 | getChatMessages: r, | |
| 151 | getReactions: c, | |
| 152 | getChatLabels: d, | |
| 153 | getChatMessage: f, | |
| 154 | getCalls: h, | |
| 155 | getCall: u, | |
| 156 | isDMRead: m, | |
| 157 | } |
| … | … | @@ -0,0 +1,2591 @@ |
| 1 | const 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 | } | |
| 115 | class 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 | } | |
| 164 | class 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 | } | |
| 237 | class 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 | } | |
| 2228 | class 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 | } | |
| 2236 | class 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 | } | |
| 2270 | class 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 | } | |
| 2343 | class 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 | } | |
| 2366 | class 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 | } | |
| 2413 | class $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 | } | |
| 2424 | function 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 | } | |
| 2434 | function 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 | } | |
| 2450 | function 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 | } | |
| 2461 | function 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 | } | |
| 2470 | function 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 | } | |
| 2494 | async 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 | } | |
| 2518 | module.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 | } |
| … | … | @@ -0,0 +1,52 @@ |
| 1 | const { Console: s, Server: e } = require("bare-inspector"), | |
| 2 | { once: o } = require("bare-events") | |
| 3 | class 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 | } | |
| 52 | module.exports = l |
| … | … | @@ -0,0 +1,58 @@ |
| 1 | const t = require("ready-resource") | |
| 2 | class 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 | } | |
| 39 | class 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 | } | |
| 58 | module.exports = { KeetMethod: o } |
| … | … | @@ -0,0 +1,2 @@ |
| 1 | const e = require("ready-resource") | |
| 2 | module.exports = class extends e {} |
| … | … | @@ -0,0 +1,790 @@ |
| 1 | const 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 } | |
| 19 | class 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 | } | |
| 54 | class 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 | } | |
| 103 | class 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 | } | |
| 142 | class 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 | } | |
| 290 | class 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 | } | |
| 459 | class g extends r {} | |
| 460 | class u extends i { | |
| 461 | async _run() { | |
| 462 | return { roomKey: await this.keet.createRoom(this.req) } | |
| 463 | } | |
| 464 | } | |
| 465 | class l extends i { | |
| 466 | _run() { | |
| 467 | return this.keet.leaveRoom(this.req.roomKey) | |
| 468 | } | |
| 469 | } | |
| 470 | class p extends i { | |
| 471 | _run() { | |
| 472 | return this.keet.activateRoom(this.req.roomKey) | |
| 473 | } | |
| 474 | } | |
| 475 | class C extends i { | |
| 476 | _run() { | |
| 477 | return this.keet.deactivateRoom(this.req.roomKey) | |
| 478 | } | |
| 479 | } | |
| 480 | class _ 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 | } | |
| 494 | class R extends i { | |
| 495 | async _run() { | |
| 496 | return { invitation: await this.keet.createIdentityInvitation() } | |
| 497 | } | |
| 498 | } | |
| 499 | class b extends i { | |
| 500 | _run() { | |
| 501 | return this.keet.updateProfile(this.req) | |
| 502 | } | |
| 503 | } | |
| 504 | class 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 | } | |
| 511 | class k extends i { | |
| 512 | _run() { | |
| 513 | return this.keet.acceptJoinRequest(this.req.roomKey, this.req.request.deviceKey) | |
| 514 | } | |
| 515 | } | |
| 516 | class v extends i { | |
| 517 | _run() { | |
| 518 | return this.keet.rejectJoinRequest(this.req.roomKey, this.req.request.deviceKey) | |
| 519 | } | |
| 520 | } | |
| 521 | class f extends i { | |
| 522 | _run() { | |
| 523 | return this.keet.stopPairing(this.req.id) | |
| 524 | } | |
| 525 | } | |
| 526 | class w extends i { | |
| 527 | _run() { | |
| 528 | return this.keet.dispatch(this.req.roomKey, "@keet/update-room-config", this.req) | |
| 529 | } | |
| 530 | } | |
| 531 | class I extends i { | |
| 532 | _run() {} | |
| 533 | } | |
| 534 | class M extends i { | |
| 535 | _run() {} | |
| 536 | } | |
| 537 | class 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 | } | |
| 544 | class 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 | } | |
| 552 | class P extends i { | |
| 553 | _run() { | |
| 554 | return this.keet.dispatch(this.req.roomKey, "@keet/remove-chat-message", { oplog: this.req.id }) | |
| 555 | } | |
| 556 | } | |
| 557 | class 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 | } | |
| 565 | class 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 | } | |
| 573 | function 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 | } | |
| 583 | function D(e) { | |
| 584 | return { member: e.selfMember?.status, device: e.status } | |
| 585 | } | |
| 586 | function 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 | } | |
| 598 | function 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 | } | |
| 608 | module.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 | } |
| … | … | @@ -0,0 +1,79 @@ |
| 1 | const 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 | |
| 8 | class 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 | } | |
| 37 | module.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 | } |
| … | … | @@ -0,0 +1,2 @@ |
| 1 | const e = require("ready-resource") | |
| 2 | module.exports = class extends e {} |
| … | … | @@ -0,0 +1,159 @@ |
| 1 | const 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") | |
| 13 | class d extends i { | |
| 14 | _run() { | |
| 15 | return this.backend.coreAPI.boot() | |
| 16 | } | |
| 17 | } | |
| 18 | class u extends i { | |
| 19 | async _run() {} | |
| 20 | } | |
| 21 | module.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 | } |
| … | … | @@ -0,0 +1,2 @@ |
| 1 | const e = require("ready-resource") | |
| 2 | module.exports = class extends e {} |
| … | … | @@ -0,0 +1,78 @@ |
| 1 | const 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" | |
| 16 | function 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 | } | |
| 24 | module.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 | } |
| … | … | @@ -0,0 +1,6 @@ |
| 1 | const b4a = require("b4a") | |
| 2 | ||
| 3 | module.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 | ) |
| … | … | @@ -0,0 +1,2 @@ |
| 1 | const e = { Title: 1, Description: 2, Avatar: 3, SupportedLanguages: 4, BlindPeers: 5 } | |
| 2 | module.exports = { ConfigKey: e } |
| … | … | @@ -0,0 +1,281 @@ |
| 1 | const 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 | |
| 8 | module.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 | } |
| … | … | @@ -0,0 +1,623 @@ |
| 1 | const e = require("bare-events"), | |
| 2 | s = require("b4a"), | |
| 3 | t = 200 | |
| 4 | class i { | |
| 5 | constructor(e) { | |
| 6 | ;((this.value = e), (this.prev = null), (this.next = null)) | |
| 7 | } | |
| 8 | } | |
| 9 | class h { | |
| 10 | constructor(e) { | |
| 11 | ;((this.value = e), (this.refs = 0), (this.gc = null)) | |
| 12 | } | |
| 13 | } | |
| 14 | class 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 | } | |
| 37 | class 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 | } | |
| 72 | class 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 | } | |
| 105 | class 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 | } | |
| 116 | class 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 | } | |
| 131 | class 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 | } | |
| 142 | class 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 | } | |
| 153 | class 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 | } | |
| 164 | class 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 | } | |
| 216 | class 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 | } | |
| 231 | class 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 | } | |
| 290 | class 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 | } | |
| 305 | class _ 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 | } | |
| 374 | class 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 | } | |
| 408 | class 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 | } | |
| 474 | class 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 | } | |
| 577 | function 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 | } | |
| 582 | module.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 | } |
| … | … | @@ -0,0 +1,152 @@ |
| 1 | const e = require("b4a"), | |
| 2 | { KeetContractError: i } = require("./errors"), | |
| 3 | { fileStats: r } = require("./stats"), | |
| 4 | n = 524288 | |
| 5 | async 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 | } | |
| 20 | async 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 | } | |
| 27 | async function a(e, i, r) { | |
| 28 | return await l(e, i, r) | |
| 29 | } | |
| 30 | async function s(e, i) { | |
| 31 | return o(e, i) | |
| 32 | } | |
| 33 | async function o(e, i) { | |
| 34 | i && (await Promise.all([p(e, i.small), p(e, i.medium), p(e, i.large)])) | |
| 35 | } | |
| 36 | async 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 | } | |
| 42 | async 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 | } | |
| 49 | async 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 | } | |
| 57 | async 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 | } | |
| 65 | async 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 | } | |
| 94 | async 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 | } | |
| 102 | async 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 | } | |
| 110 | function 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 | } | |
| 120 | function 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 | } | |
| 126 | function 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 | } | |
| 138 | function 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 | } | |
| 143 | module.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 | } |
| … | … | @@ -0,0 +1,199 @@ |
| 1 | const 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") | |
| 11 | async 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 | } | |
| 54 | async 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 | } | |
| 95 | async 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 | } | |
| 128 | async 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 | } | |
| 156 | async 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 | } | |
| 176 | async 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 | } | |
| 191 | function 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 | } | |
| 199 | module.exports = { [e]: n } |
| … | … | @@ -0,0 +1,171 @@ |
| 1 | const 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") | |
| 13 | async 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 | } | |
| 25 | async 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 | } | |
| 59 | async 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 | } | |
| 90 | async 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 | } | |
| 106 | async 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 | } | |
| 118 | async 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 | } | |
| 138 | async 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 | } | |
| 145 | function 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 | } | |
| 153 | function 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 | } | |
| 161 | function 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 | } | |
| 168 | function _(e) { | |
| 169 | return e.display?.httpLink?.length > 0 || e?.display?.pearLink?.length > 0 | |
| 170 | } | |
| 171 | module.exports = { addEvent: h, [t]: f } |
| … | … | @@ -0,0 +1,32 @@ |
| 1 | const 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 } | |
| 9 | async 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 | } | |
| 29 | function c(e) { | |
| 30 | e.add("@keet/update-room-config", u) | |
| 31 | } | |
| 32 | module.exports = { [e]: c, CONFIG_INDEX_TO_KEY: s, Config: l } |
| … | … | @@ -0,0 +1,157 @@ |
| 1 | const _ = { | |
| 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 | } | |
| 38 | class 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 | } | |
| 157 | module.exports = { CONTRACT_ERRORS: _, KeetContractError: E } |
| … | … | @@ -0,0 +1,10 @@ |
| 1 | const { | |
| 2 | contract: { | |
| 3 | hyperschema: { getEnum: e }, | |
| 4 | }, | |
| 5 | } = require("../../../schema/spec"), | |
| 6 | t = e("@keet/build-type") | |
| 7 | function c(e, c) { | |
| 8 | return !(e !== t.Production || c) || e === c | |
| 9 | } | |
| 10 | module.exports = { isValidBuildType: c } |
| … | … | @@ -0,0 +1,6 @@ |
| 1 | const e = require("../registration"), | |
| 2 | r = require("./private.js") | |
| 3 | function i(i) { | |
| 4 | r[e](i) | |
| 5 | } | |
| 6 | module.exports = { [e]: i, private: r } |
| … | … | @@ -0,0 +1,354 @@ |
| 1 | const 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 } | |
| 29 | async 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 | } | |
| 52 | async 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 | } | |
| 58 | async 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 | } | |
| 64 | async 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 | } | |
| 72 | async 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 | } | |
| 77 | async 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 | } | |
| 125 | async 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 | } | |
| 142 | async 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 | } | |
| 146 | async 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 | } | |
| 167 | async 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 | } | |
| 186 | async 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 | } | |
| 201 | async 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 | } | |
| 209 | async 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 | } | |
| 261 | async 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 | } | |
| 306 | async function F({ memberKey: e }, { db: t, writer: i }) {} | |
| 307 | async 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 | } | |
| 312 | async 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 | } | |
| 317 | function 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 | } | |
| 336 | function E(e) { | |
| 337 | return p[e - 1] | |
| 338 | } | |
| 339 | function L(e) { | |
| 340 | return e >= 1 && e <= p.length | |
| 341 | } | |
| 342 | function W(e) { | |
| 343 | return w[e - 1] | |
| 344 | } | |
| 345 | function _(e) { | |
| 346 | return e >= 1 && e <= w.length | |
| 347 | } | |
| 348 | function N(e) { | |
| 349 | return b[e - 1] | |
| 350 | } | |
| 351 | function U(e) { | |
| 352 | return e >= 1 && e <= b.length | |
| 353 | } | |
| 354 | module.exports = { [n]: V, RoomStatus: v, ContactStatus: f, ContactRequestStatus: g } |
| … | … | @@ -0,0 +1,93 @@ |
| 1 | const 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") | |
| 23 | class 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 | } | |
| 60 | class 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 | } | |
| 77 | function 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 | } | |
| 93 | module.exports = { KeetContract: A, createRouter: f, encodeOperation: c, spec: s } |
| … | … | @@ -0,0 +1,164 @@ |
| 1 | const 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 | } | |
| 33 | async 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 | } | |
| 67 | async 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 | } | |
| 77 | async 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 | } | |
| 87 | async 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 | } | |
| 91 | async 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 | } | |
| 95 | async 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 | } | |
| 104 | async 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 | } | |
| 109 | async 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 | } | |
| 114 | async 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 | } | |
| 127 | async 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 | } | |
| 137 | async 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 | } | |
| 145 | function A(e, t, i) { | |
| 146 | return Promise.resolve() | |
| 147 | } | |
| 148 | function 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 | } | |
| 156 | function 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 | } | |
| 164 | module.exports = { [t]: M, Settings: u } |
| … | … | @@ -0,0 +1,33 @@ |
| 1 | const e = require("./registration"), | |
| 2 | { isMemberActive: t, getMemberForDeviceKey: a } = require("./query"), | |
| 3 | s = require("b4a"), | |
| 4 | { KeetContractError: i } = require("./errors"), | |
| 5 | { chatLabelStats: r } = require("./stats") | |
| 6 | async 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 | } | |
| 18 | async 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 | } | |
| 30 | function o(e) { | |
| 31 | ;(e.add("@keet/add-chat-label", l), e.add("@keet/remove-chat-label", d)) | |
| 32 | } | |
| 33 | module.exports = { [e]: o } |
| … | … | @@ -0,0 +1,413 @@ |
| 1 | const 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 } | |
| 26 | async 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 | } | |
| 45 | async 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 | } | |
| 79 | async 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 | } | |
| 110 | async 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 | } | |
| 130 | async 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 | } | |
| 176 | async 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 | } | |
| 190 | async 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 | } | |
| 215 | async 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 | } | |
| 224 | async 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 | } | |
| 230 | async 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 | } | |
| 249 | async 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 | } | |
| 254 | async 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 | } | |
| 276 | async 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 | } | |
| 283 | async 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 | } | |
| 290 | async 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 | } | |
| 305 | async function S({ header: e, member: { profile: t, attestation: i } }, a) { | |
| 306 | return M(e, t, i, a) | |
| 307 | } | |
| 308 | async 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 | } | |
| 313 | async 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 | } | |
| 327 | async 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 | } | |
| 336 | async 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 | } | |
| 358 | async 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 | } | |
| 397 | function 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 | } | |
| 413 | module.exports = { [b]: U, MemberStatus: h, addDevice: R, addMember: T } |
| … | … | @@ -0,0 +1,48 @@ |
| 1 | const e = require("../registration"), | |
| 2 | { isMemberActive: t, getMemberForDeviceKey: l } = require("../query"), | |
| 3 | a = require("b4a"), | |
| 4 | { KeetContractError: s } = require("../errors") | |
| 5 | async 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 | } | |
| 16 | function c(e) { | |
| 17 | e.add("@keet/add-member-label", r) | |
| 18 | } | |
| 19 | async 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 | } | |
| 38 | function 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 | } | |
| 42 | function 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 | } | |
| 48 | module.exports = { [e]: c } |
| … | … | @@ -0,0 +1,67 @@ |
| 1 | const 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 | } | |
| 67 | module.exports = { InvitationAdditionalData: d, InvitationUserData: i } |
| … | … | @@ -0,0 +1,8 @@ |
| 1 | async 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 | } | |
| 5 | function t(e) { | |
| 6 | return e && e.status.isActive | |
| 7 | } | |
| 8 | module.exports = { getMemberForDeviceKey: e, isMemberActive: t } |
| … | … | @@ -0,0 +1,30 @@ |
| 1 | const e = require("./registration"), | |
| 2 | { isMemberActive: t, getMemberForDeviceKey: i } = require("./query"), | |
| 3 | { reactionStats: r } = require("./stats"), | |
| 4 | { KeetContractError: a } = require("./errors") | |
| 5 | async 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 | } | |
| 16 | async 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 | } | |
| 27 | function n(e) { | |
| 28 | ;(e.add("@keet/add-reaction", o), e.add("@keet/remove-reaction", s)) | |
| 29 | } | |
| 30 | module.exports = { [e]: n } |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = Symbol("register-routes") |
| … | … | @@ -0,0 +1,32 @@ |
| 1 | const t = require("b4a") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,9 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,3 @@ |
| 1 | module.exports = async function (t, e, s, a) { | |
| 2 | ;(s && !a && (e.stats.files.clock += 1), await t.insert("@keet/threads", e)) | |
| 3 | } |
| … | … | @@ -0,0 +1,14 @@ |
| 1 | const 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") | |
| 7 | module.exports = { | |
| 8 | chatStats: e, | |
| 9 | chatLabelStats: t, | |
| 10 | fileStats: r, | |
| 11 | reactionStats: s, | |
| 12 | deviceStats: a, | |
| 13 | memberStats: i, | |
| 14 | } |
| … | … | @@ -0,0 +1,29 @@ |
| 1 | function 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 | } | |
| 5 | function 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 | } | |
| 11 | module.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 | } |
| … | … | @@ -0,0 +1,3 @@ |
| 1 | const o = require("./room.js"), | |
| 2 | r = require("./room-migrations.js") | |
| 3 | module.exports = { roomsStats: o, roomMigrationsStats: r } |
| … | … | @@ -0,0 +1,8 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,17 @@ |
| 1 | function t(t) { | |
| 2 | return t.status.isRemoved || t.identity || (t.dm && !t.config.title) | |
| 3 | ? 0 | |
| 4 | : t.timestamps.latestChatMessage || t.timestamps.latestSync | |
| 5 | } | |
| 6 | module.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 | } |
| … | … | @@ -0,0 +1,13 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,6 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,6 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,4 @@ |
| 1 | const t = require("./rooms.js"), | |
| 2 | e = require("./contacts.js"), | |
| 3 | o = require("./contact-requests.js") | |
| 4 | module.exports = { profileRoomStats: t, profileContactStats: e, profileContactRequestStats: o } |
| … | … | @@ -0,0 +1,15 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,27 @@ |
| 1 | const t = 32 | |
| 2 | function 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 | } | |
| 7 | function 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 | } | |
| 13 | module.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 | } |
| … | … | @@ -0,0 +1,27 @@ |
| 1 | const 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") | |
| 9 | async 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 | } | |
| 16 | async function a() { | |
| 17 | throw new Error("test crash") | |
| 18 | } | |
| 19 | async function s() { | |
| 20 | throw i.HANDLER_NOT_FOUND_BY_ID() | |
| 21 | } | |
| 22 | function 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 | } | |
| 27 | module.exports = { [e]: n } |
| … | … | @@ -0,0 +1,67 @@ |
| 1 | const r = require("sodium-native"), | |
| 2 | o = 1, | |
| 3 | t = 1 | |
| 4 | function 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 | } | |
| 34 | function 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 | } | |
| 64 | function _(o) { | |
| 65 | ;(r.sodium_memzero(o), r.sodium_free(o)) | |
| 66 | } | |
| 67 | module.exports = { encryptPhrase: e, decryptPhrase: s, free: _ } |
| … | … | @@ -0,0 +1,9 @@ |
| 1 | const 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() | |
| 8 | for (let r = 0; r < e.length; r++) a.set(e[r].key, r) | |
| 9 | module.exports = { DEBUG_FLAGS: e, DEBUG_FLAG_INDEX_BY_KEY: a, DHT_SETTINGS: r } |
| … | … | @@ -0,0 +1,6 @@ |
| 1 | const e = require("hypercore-crypto"), | |
| 2 | r = require("b4a"), | |
| 3 | a = r.from("9ddc90e82a1ebb1e20826ad12d75bca6f8c3caa9d92aa9bcffe7619e42310c0e", "hex") | |
| 4 | module.exports.hashDebugPassword = function (r) { | |
| 5 | return e.hash([r, a]) | |
| 6 | } |
| … | … | @@ -0,0 +1,369 @@ |
| 1 | const 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 | |
| 10 | module.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 | } |
| … | … | @@ -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 | })) |
| … | … | @@ -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 | })) |
| … | … | @@ -0,0 +1,47 @@ |
| 1 | const e = require("hypercore-crypto") | |
| 2 | function t(e) { | |
| 3 | return e.status.isRemoved || e.identity || (e.dm && !e.config.title) | |
| 4 | ? 0 | |
| 5 | : e.timestamps.latestChatMessage || e.timestamps.latestSync | |
| 6 | } | |
| 7 | function 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 | })) |
| … | … | @@ -0,0 +1,202 @@ |
| 1 | const 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) | |
| 15 | function 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 | } | |
| 25 | function 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 | } | |
| 41 | function 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 | } | |
| 48 | function 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 | } | |
| 56 | function 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 | } | |
| 60 | function P(e, t, r, n, i, o) { | |
| 61 | const { blindRequest: c } = w(e, t, r, n, i, o) | |
| 62 | return k(c, o) | |
| 63 | } | |
| 64 | function g(e, t, r) { | |
| 65 | const { blindRequest: n } = R(e, t) | |
| 66 | return k(n, r) | |
| 67 | } | |
| 68 | function 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 | } | |
| 72 | function 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 | } | |
| 81 | function 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 | } | |
| 86 | function 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 | } | |
| 90 | function 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 | } | |
| 94 | function T(e, t) { | |
| 95 | const n = r.decrypt(t, e) | |
| 96 | return n ? c("@keet/device-request", n) : null | |
| 97 | } | |
| 98 | function M(e, t) { | |
| 99 | const r = i.decrypt(t, e) | |
| 100 | return r ? c("@keet-private-id/contact-request", r) : null | |
| 101 | } | |
| 102 | function 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 | } | |
| 114 | function 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 | } | |
| 126 | function O() { | |
| 127 | return i.encryptionKeyPair() | |
| 128 | } | |
| 129 | function B() { | |
| 130 | return i.keyPair() | |
| 131 | } | |
| 132 | function J(e) { | |
| 133 | return i.keyPair(i.hash([d, e])) | |
| 134 | } | |
| 135 | function W(e) { | |
| 136 | return J(e).publicKey | |
| 137 | } | |
| 138 | function N(e) { | |
| 139 | return t.key({ version: 2, signers: [{ publicKey: e }] }) | |
| 140 | } | |
| 141 | function V(e) { | |
| 142 | return { key: e, discoveryKey: i.discoveryKey(e) } | |
| 143 | } | |
| 144 | function E(e, t) { | |
| 145 | return i.encryptionKeyPair(i.hash([v, e, t])) | |
| 146 | } | |
| 147 | function S(e) { | |
| 148 | return i.keyPair(e) | |
| 149 | } | |
| 150 | function U(e) { | |
| 151 | return i.discoveryKey(e) | |
| 152 | } | |
| 153 | function j(e) { | |
| 154 | return i.discoveryKey(e) | |
| 155 | } | |
| 156 | function 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 | } | |
| 162 | function F(e) { | |
| 163 | const t = S(e), | |
| 164 | r = U(e) | |
| 165 | return { discoveryKeyPair: t, swarmTopic: j(t.publicKey), wakeupTopic: r } | |
| 166 | } | |
| 167 | function G(e) { | |
| 168 | return i.hash([l, e]) | |
| 169 | } | |
| 170 | function H(e) { | |
| 171 | return i.hash([m, e]) | |
| 172 | } | |
| 173 | module.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 | } |
| … | … | @@ -0,0 +1,12 @@ |
| 1 | const e = require("hyperdb"), | |
| 2 | { | |
| 3 | local: { hyperdb: r }, | |
| 4 | } = require("../../../schema/spec") | |
| 5 | module.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 | } |
| … | … | @@ -0,0 +1,51 @@ |
| 1 | const e = require("bare-file-logger"), | |
| 2 | i = require("bare-system-logger"), | |
| 3 | t = { debug: 0, info: 1, warn: 2, error: 3 } | |
| 4 | class 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 | } | |
| 51 | module.exports = s |
| … | … | @@ -0,0 +1,485 @@ |
| 1 | const 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 | |
| 22 | function y(e) { | |
| 23 | if (!e) throw new Error("Encryption key is required") | |
| 24 | return t.hash([f, e]) | |
| 25 | } | |
| 26 | async 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 | } | |
| 31 | async function g(e, t) { | |
| 32 | return (await h(e, t, "autobase/local")) || t | |
| 33 | } | |
| 34 | async 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 | } | |
| 50 | async 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 | } | |
| 93 | async 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 | } | |
| 151 | async 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 | } | |
| 206 | async 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 | } | |
| 219 | async 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 | } | |
| 246 | async 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 | } | |
| 252 | async function P(e, t, i) { | |
| 253 | return [t, (await e.members.avatars.get(i)).value] | |
| 254 | } | |
| 255 | async 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 | } | |
| 291 | async 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 | } | |
| 300 | async 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 | } | |
| 309 | function 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 | } | |
| 322 | function 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 | } | |
| 343 | function 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 | } | |
| 367 | function 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 | } | |
| 416 | function 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 | } | |
| 441 | async function O(e) { | |
| 442 | const t = await e.get(n.CodeVersionKey, n.UpgraderEncoding) | |
| 443 | return t ? t.value : 0 | |
| 444 | } | |
| 445 | function 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 | } | |
| 453 | function _(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 | } | |
| 464 | function q(e) { | |
| 465 | return { isIndexing: !!(2 & e.capabilities), isActive: !0 } | |
| 466 | } | |
| 467 | function 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 | } | |
| 479 | module.exports = { | |
| 480 | generateCompatSeed: y, | |
| 481 | getLegacyUserData: h, | |
| 482 | getLegacyLocalKey: g, | |
| 483 | autobaseApply: b, | |
| 484 | migrate: k, | |
| 485 | } |
| … | … | @@ -0,0 +1,122 @@ |
| 1 | const 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") | |
| 18 | async 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 | } | |
| 33 | function 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 | } | |
| 43 | module.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 | } |
| … | … | @@ -0,0 +1,133 @@ |
| 1 | const 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 | })) | |
| 20 | const 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 | })) | |
| 85 | const 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 | } | |
| 109 | module.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 | } |
| … | … | @@ -0,0 +1,112 @@ |
| 1 | const 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" | |
| 9 | function s(e) { | |
| 10 | for (const i of e.peers) if (!(i.remoteLength <= e.signedLength)) return !0 | |
| 11 | return !1 | |
| 12 | } | |
| 13 | async 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 | } | |
| 25 | async 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 | } | |
| 77 | async 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 | } | |
| 89 | module.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 | } |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = async function (n, o) {} |
| … | … | @@ -0,0 +1,9 @@ |
| 1 | async 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 | } | |
| 7 | module.exports = async function (r) { | |
| 8 | o(r).catch(r.onerror) | |
| 9 | } |
| … | … | @@ -0,0 +1,5 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,14 @@ |
| 1 | const o = require("hypercore-id-encoding") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,2 @@ |
| 1 | const r = require("./worker") | |
| 2 | module.exports = { SwarmWorker: r } |
| … | … | @@ -0,0 +1,234 @@ |
| 1 | const 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 | |
| 17 | async 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 | } | |
| 24 | module.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 | } |
| … | … | @@ -0,0 +1,194 @@ |
| 1 | const e = require("hypercore-id-encoding"), | |
| 2 | t = require("ready-resource"), | |
| 3 | s = require("./updater"), | |
| 4 | { roomsStats: a } = require("../contract/stats/local") | |
| 5 | module.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 | } |
| … | … | @@ -0,0 +1,376 @@ |
| 1 | const 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 | |
| 16 | module.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 | } |
| … | … | @@ -0,0 +1,482 @@ |
| 1 | const 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 | |
| 21 | function f(e, t) { | |
| 22 | return s.equals(e.oplog.key, t.oplog.key) && e.oplog.seq === t.oplog.seq | |
| 23 | } | |
| 24 | module.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 | } |
| … | … | @@ -0,0 +1,292 @@ |
| 1 | const 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") | |
| 18 | module.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 | } |
| … | … | @@ -0,0 +1,180 @@ |
| 1 | const 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 | |
| 8 | module.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 | } |
| … | … | @@ -0,0 +1,224 @@ |
| 1 | const 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 | |
| 25 | class 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 | } | |
| 109 | function f(e) { | |
| 110 | const t = { type: e.type, discoveryKey: e.discoveryKey } | |
| 111 | return { gte: t, lte: t } | |
| 112 | } | |
| 113 | module.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 | } |
| … | … | @@ -0,0 +1,208 @@ |
| 1 | const 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") | |
| 11 | module.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 | } |
| … | … | @@ -0,0 +1,119 @@ |
| 1 | const 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 | |
| 7 | module.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 | } |
| … | … | @@ -0,0 +1,30 @@ |
| 1 | const { Task: e } = require("../task") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,10 @@ |
| 1 | const { Task: s } = require("../task") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,99 @@ |
| 1 | const { | |
| 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") | |
| 11 | module.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 | } |
| … | … | @@ -0,0 +1,67 @@ |
| 1 | const { Task: i } = require("../task"), | |
| 2 | t = require("b4a") | |
| 3 | module.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 | } |
| … | … | @@ -0,0 +1,34 @@ |
| 1 | const t = require("ready-resource"), | |
| 2 | i = require("hypercore-id-encoding") | |
| 3 | class 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 | } | |
| 34 | module.exports = { Task: e } |
| … | … | @@ -0,0 +1,6 @@ |
| 1 | const { Task: e } = require("../task") | |
| 2 | module.exports = class extends e { | |
| 3 | _run() { | |
| 4 | return Promise.reject(new Error("Simulated task failure")) | |
| 5 | } | |
| 6 | } |
| … | … | @@ -0,0 +1,14 @@ |
| 1 | const e = require("resolve-reject-promise"), | |
| 2 | { Task: s } = require("../task") | |
| 3 | module.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 | } |
| … | … | @@ -0,0 +1,14 @@ |
| 1 | const e = require("resolve-reject-promise"), | |
| 2 | { Task: s } = require("../task") | |
| 3 | module.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 | } |
| … | … | @@ -0,0 +1,235 @@ |
| 1 | const 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") | |
| 8 | class 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 | } | |
| 227 | function 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 | } | |
| 235 | module.exports = o |
| … | … | @@ -0,0 +1,10 @@ |
| 1 | const e = require("hypercore-id-encoding"), | |
| 2 | n = require("../env.json") | |
| 3 | module.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 | } |
| … | … | @@ -0,0 +1,152 @@ |
| 1 | const 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 | } | |
| 15 | class 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 | } | |
| 93 | class 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 | } | |
| 143 | function 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 | } | |
| 152 | module.exports = { ERRORS: a, KeetErrorV2: n, KeetErrorManager: o } |
| … | … | @@ -0,0 +1,2 @@ |
| 1 | const { FEATURES: e, isFeatureSupported: r } = require("../schema/versions") | |
| 2 | module.exports = { FEATURES: e, isFeatureSupported: r } |
| … | … | @@ -0,0 +1,17 @@ |
| 1 | const 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 | |
| 10 | module.exports = { | |
| 11 | ERRORS: S, | |
| 12 | DISPLAY_TYPES: R, | |
| 13 | DM_STATUSES: e, | |
| 14 | PREFERENCES: p, | |
| 15 | GENERIC_EVENTS: o, | |
| 16 | isDisplaySupported: T, | |
| 17 | } |
| … | … | @@ -0,0 +1,213 @@ |
| 1 | const 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") | |
| 16 | function 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 | } | |
| 25 | function 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 | } | |
| 34 | function 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 | } | |
| 46 | function f(e, l, t) { | |
| 47 | try { | |
| 48 | return !!u.verify(e, l, { expectedIdentity: t }) | |
| 49 | } catch { | |
| 50 | return !1 | |
| 51 | } | |
| 52 | } | |
| 53 | module.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 | } |
| … | … | @@ -0,0 +1,1381 @@ |
| 1 | const e = require("tiny-buffer-rpc/any"), | |
| 2 | r = require("safety-catch") | |
| 3 | module.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 | } |
| … | … | @@ -0,0 +1,1388 @@ |
| 1 | const e = require("tiny-buffer-rpc/any"), | |
| 2 | { pipeline: r } = require("streamx") | |
| 3 | function s() {} | |
| 4 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = function (o) {} |
| … | … | @@ -0,0 +1,13 @@ |
| 1 | function e(e = []) { | |
| 2 | return [{ name: "header", type: "@api/request-header", required: !0 }, ...e] | |
| 3 | } | |
| 4 | function r(e = []) { | |
| 5 | return [{ name: "header", type: "@api/response-header", required: !0 }, ...e] | |
| 6 | } | |
| 7 | function n(e = []) { | |
| 8 | return [{ name: "clock", type: "uint", required: !0 }, ...e] | |
| 9 | } | |
| 10 | function t() { | |
| 11 | return [{ name: "clock", type: "uint", required: !0 }] | |
| 12 | } | |
| 13 | module.exports = { createRequest: e, createResponse: r, createWant: n, createUnwant: t } |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = function (o) {} |
| … | … | @@ -0,0 +1,35 @@ |
| 1 | const { createRequest: e, createWant: t, createUnwant: i } = require("../common.js") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,18 @@ |
| 1 | const e = require("./identity"), | |
| 2 | r = require("./pairing"), | |
| 3 | i = require("./files"), | |
| 4 | a = require("./users"), | |
| 5 | n = require("./room") | |
| 6 | module.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 | } |
| … | … | @@ -0,0 +1,99 @@ |
| 1 | const { | |
| 2 | createRequest: e, | |
| 3 | createResponse: i, | |
| 4 | createWant: r, | |
| 5 | createUnwant: t, | |
| 6 | } = require("../common.js") | |
| 7 | module.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 | } |
| … | … | @@ -0,0 +1,305 @@ |
| 1 | const { | |
| 2 | createRequest: e, | |
| 3 | createResponse: r, | |
| 4 | createWant: t, | |
| 5 | createUnwant: i, | |
| 6 | } = require("../common.js") | |
| 7 | module.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 | } |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = function (o) {} |
| … | … | @@ -0,0 +1,13 @@ |
| 1 | const { createRequest: e, createResponse: s } = require("../common.js") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = function (o) {} |
| … | … | @@ -0,0 +1,35 @@ |
| 1 | const 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") | |
| 8 | module.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 | } |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = function (o) {} |
| … | … | @@ -0,0 +1 @@ |
| 1 | module.exports = function (o) {} |
| … | … | @@ -0,0 +1,213 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,469 @@ |
| 1 | const e = require("path") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,110 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,69 @@ |
| 1 | const 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") | |
| 14 | function 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 | } | |
| 30 | function 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 | } | |
| 40 | function 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 | } | |
| 47 | function 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 | } | |
| 54 | function 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 | } | |
| 61 | module.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 | } |
| … | … | @@ -0,0 +1,217 @@ |
| 1 | const e = require("path") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,11 @@ |
| 1 | const o = require("b4a"), | |
| 2 | n = require("./internal.js"), | |
| 3 | e = require("./production.js") | |
| 4 | module.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 | } |
| … | … | @@ -0,0 +1,59 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,66 @@ |
| 1 | const e = require("hypercore-id-encoding") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,65 @@ |
| 1 | const e = require("hypercore-id-encoding") | |
| 2 | module.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 | } |
| … | … | @@ -0,0 +1,1378 @@ |
| 1 | module.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 | } |
| … | … | @@ -0,0 +1,10 @@ |
| 1 | const e = require("./contract"), | |
| 2 | r = require("./config"), | |
| 3 | a = require("./local"), | |
| 4 | c = require("./api") | |
| 5 | module.exports = { | |
| 6 | generateContractSchema: e, | |
| 7 | generateConfigSchema: r, | |
| 8 | generateLocalSchema: a, | |
| 9 | generateAPISchema: c, | |
| 10 | } |
| … | … | @@ -0,0 +1,359 @@ |
| 1 | const e = require("../contract") | |
| 2 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,700 @@ |
| 1 | const { 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 | ]) | |
| 129 | class 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 | } | |
| 700 | module.exports = c |
| … | … | @@ -0,0 +1,6234 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 6 | |
| 3 | let o = 6 | |
| 4 | const 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 | |
| 5525 | function ou(e) { | |
| 5526 | o = e | |
| 5527 | } | |
| 5528 | function nu(d, n, c = 6) { | |
| 5529 | return ((o = c), e.encode(tu(d), n)) | |
| 5530 | } | |
| 5531 | function cu(d, n, c = 6) { | |
| 5532 | return ((o = c), e.decode(tu(d), n)) | |
| 5533 | } | |
| 5534 | function 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 | } | |
| 5562 | function 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 | } | |
| 6212 | function 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 | } | |
| 6224 | const au = iu | |
| 6225 | module.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 | } |
| … | … | @@ -0,0 +1,6234 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 6 | |
| 3 | let o = 6 | |
| 4 | const 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 | |
| 5525 | function ou(e) { | |
| 5526 | o = e | |
| 5527 | } | |
| 5528 | function nu(d, n, c = 6) { | |
| 5529 | return ((o = c), e.encode(tu(d), n)) | |
| 5530 | } | |
| 5531 | function cu(d, n, c = 6) { | |
| 5532 | return ((o = c), e.decode(tu(d), n)) | |
| 5533 | } | |
| 5534 | function 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 | } | |
| 5562 | function 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 | } | |
| 6212 | function 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 | } | |
| 6224 | const au = iu | |
| 6225 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,22 @@ |
| 1 | const 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 | ) | |
| 19 | function e(o, U) { | |
| 20 | return o.decode({ start: 0, end: U.byteLength, buffer: U }) | |
| 21 | } | |
| 22 | module.exports = { production: s, development: c, productionEncoding: d, developmentEncoding: w } |
| … | … | @@ -0,0 +1,251 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 6 | |
| 3 | let n = 6 | |
| 4 | const 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) | |
| 195 | function E(e) { | |
| 196 | n = e | |
| 197 | } | |
| 198 | function H(d, o, c = 6) { | |
| 199 | return ((n = c), e.encode(S(d), o)) | |
| 200 | } | |
| 201 | function P(d, o, c = 6) { | |
| 202 | return ((n = c), e.decode(S(d), o)) | |
| 203 | } | |
| 204 | function w(e) { | |
| 205 | throw new Error("Enum not found " + e) | |
| 206 | } | |
| 207 | function 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 | } | |
| 229 | function 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 | } | |
| 241 | const q = j | |
| 242 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,3301 @@ |
| 1 | const { 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 }) | |
| 7 | function i(e) { | |
| 8 | return [] | |
| 9 | } | |
| 10 | const a = o("@keet/system-digest") | |
| 11 | function f(e, n, t) { | |
| 12 | r(e) | |
| 13 | const c = { start: 0, end: t.byteLength, buffer: t } | |
| 14 | return a.decode(c) | |
| 15 | } | |
| 16 | function g(e) { | |
| 17 | return {} | |
| 18 | } | |
| 19 | const 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 }) | |
| 43 | function p(e) { | |
| 44 | const n = e.key | |
| 45 | return void 0 === n ? [] : [n] | |
| 46 | } | |
| 47 | const K = o("@keet/blind-peer/hyperdb#1") | |
| 48 | function 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 | } | |
| 55 | function m(e) { | |
| 56 | return { key: b.decode(e)[0] } | |
| 57 | } | |
| 58 | const 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 }) | |
| 85 | function x(e) { | |
| 86 | return [] | |
| 87 | } | |
| 88 | const R = o("@keet/room-config") | |
| 89 | function U(e, n, t) { | |
| 90 | r(e) | |
| 91 | const c = { start: 0, end: t.byteLength, buffer: t } | |
| 92 | return R.decode(c) | |
| 93 | } | |
| 94 | function F(e) { | |
| 95 | return {} | |
| 96 | } | |
| 97 | const 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 }) | |
| 121 | function I(e) { | |
| 122 | return [] | |
| 123 | } | |
| 124 | const E = o("@keet/room-seed") | |
| 125 | function B(e, n, t) { | |
| 126 | r(e) | |
| 127 | const c = { start: 0, end: t.byteLength, buffer: t } | |
| 128 | return E.decode(c) | |
| 129 | } | |
| 130 | function T(e) { | |
| 131 | return {} | |
| 132 | } | |
| 133 | const 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 }) | |
| 157 | function L(e) { | |
| 158 | const n = e.deviceKey | |
| 159 | return void 0 === n ? [] : [n] | |
| 160 | } | |
| 161 | const M = o("@keet/join-request/hyperdb#4") | |
| 162 | function 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 | } | |
| 169 | function j(e) { | |
| 170 | return { deviceKey: q.decode(e)[0] } | |
| 171 | } | |
| 172 | const 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 }) | |
| 199 | function S(e) { | |
| 200 | const n = e.key | |
| 201 | return void 0 === n ? [] : [n] | |
| 202 | } | |
| 203 | const D = o("@keet/device/hyperdb#5"), | |
| 204 | P = l.devicesTrigger | |
| 205 | function 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 | } | |
| 212 | function H(e) { | |
| 213 | return { key: G.decode(e)[0] } | |
| 214 | } | |
| 215 | const 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 }) | |
| 242 | function 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 | } | |
| 250 | const 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 | } | |
| 268 | J.indexes.push(W) | |
| 269 | const X = new e([e.BUFFER], { prefix: 7 }) | |
| 270 | function Y(e) { | |
| 271 | const n = e.profile?.swarmKey | |
| 272 | return void 0 === n ? [] : [n] | |
| 273 | } | |
| 274 | const 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 | } | |
| 292 | J.indexes.push(Z) | |
| 293 | const $ = new e([e.BUFFER, e.BUFFER], { prefix: 8 }), | |
| 294 | _ = l.activeDevicesByMemberKeyMap | |
| 295 | function ee(e) { | |
| 296 | const n = e.memberKey | |
| 297 | return void 0 === n ? [] : [n] | |
| 298 | } | |
| 299 | const 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 | } | |
| 325 | J.indexes.push(ne) | |
| 326 | const te = new e([e.BUFFER], { prefix: 9 }), | |
| 327 | ce = l.activeDevicesMap | |
| 328 | function oe(e) { | |
| 329 | const n = e.key | |
| 330 | return void 0 === n ? [] : [n] | |
| 331 | } | |
| 332 | const 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 | } | |
| 358 | J.indexes.push(re) | |
| 359 | const de = new e([e.BUFFER], { prefix: 10 }) | |
| 360 | function le(e) { | |
| 361 | const n = e.key | |
| 362 | return void 0 === n ? [] : [n] | |
| 363 | } | |
| 364 | const se = o("@keet/member-proofs/hyperdb#10") | |
| 365 | function 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 | } | |
| 372 | function ie(e) { | |
| 373 | return { key: de.decode(e)[0] } | |
| 374 | } | |
| 375 | const 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 }) | |
| 402 | function ge(e) { | |
| 403 | const n = e.key | |
| 404 | return void 0 === n ? [] : [n] | |
| 405 | } | |
| 406 | const ye = o("@keet/member/hyperdb#11"), | |
| 407 | be = l.membersTrigger | |
| 408 | function 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 | } | |
| 415 | function Ke(e) { | |
| 416 | return { key: fe.decode(e)[0] } | |
| 417 | } | |
| 418 | const 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 | |
| 446 | function ke(e) { | |
| 447 | const n = e.key | |
| 448 | return void 0 === n ? [] : [n] | |
| 449 | } | |
| 450 | const 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 | } | |
| 476 | ve.indexes.push(xe) | |
| 477 | const Re = new e([e.BUFFER], { prefix: 13 }), | |
| 478 | Ue = l.adminsMap | |
| 479 | function Fe(e) { | |
| 480 | const n = e.key | |
| 481 | return void 0 === n ? [] : [n] | |
| 482 | } | |
| 483 | const 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 | } | |
| 509 | ve.indexes.push(we) | |
| 510 | const Ve = new e([e.BUFFER], { prefix: 14 }), | |
| 511 | Ie = l.activeMembersMap | |
| 512 | function Ee(e) { | |
| 513 | const n = e.key | |
| 514 | return void 0 === n ? [] : [n] | |
| 515 | } | |
| 516 | const 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 | } | |
| 542 | ve.indexes.push(Be) | |
| 543 | const Te = new e([e.BUFFER], { prefix: 15 }), | |
| 544 | Ne = l.mutedMembersMap | |
| 545 | function qe(e) { | |
| 546 | const n = e.key | |
| 547 | return void 0 === n ? [] : [n] | |
| 548 | } | |
| 549 | const 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 | } | |
| 575 | ve.indexes.push(Le) | |
| 576 | const Me = new e([e.STRING, e.BUFFER], { prefix: 16 }), | |
| 577 | Ae = l.membersByMemberNameMap | |
| 578 | function je(e) { | |
| 579 | const n = e.name | |
| 580 | return void 0 === n ? [] : [n] | |
| 581 | } | |
| 582 | const 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 | } | |
| 608 | ve.indexes.push(Ce) | |
| 609 | const Ge = new e([e.BUFFER], { prefix: 17 }) | |
| 610 | function Se(e) { | |
| 611 | const n = e.key | |
| 612 | return void 0 === n ? [] : [n] | |
| 613 | } | |
| 614 | const De = o("@keet/member-activity/hyperdb#17") | |
| 615 | function 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 | } | |
| 622 | function ze(e) { | |
| 623 | return { key: Ge.decode(e)[0] } | |
| 624 | } | |
| 625 | const 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 }) | |
| 652 | function Oe(e) { | |
| 653 | const n = e.id | |
| 654 | return void 0 === n ? [] : [n] | |
| 655 | } | |
| 656 | const Qe = o("@keet/invitation/hyperdb#18") | |
| 657 | function 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 | } | |
| 664 | function Xe(e) { | |
| 665 | return { id: Je.decode(e)[0] } | |
| 666 | } | |
| 667 | const 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 }) | |
| 694 | function $e(e) { | |
| 695 | const n = e.id | |
| 696 | return void 0 === n ? [] : [n] | |
| 697 | } | |
| 698 | const _e = o("@keet/thread/hyperdb#19") | |
| 699 | function 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 | } | |
| 706 | function nn(e) { | |
| 707 | return { id: Ze.decode(e)[0] } | |
| 708 | } | |
| 709 | const 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 | |
| 737 | function 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 | } | |
| 745 | const 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 | } | |
| 771 | tn.indexes.push(dn) | |
| 772 | const ln = new e([e.UINT, e.UINT], { prefix: 21 }) | |
| 773 | function 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 | } | |
| 781 | const un = o("@keet/chat-message-record/hyperdb#21"), | |
| 782 | an = l.chatTrigger | |
| 783 | function 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 | } | |
| 790 | function gn(e) { | |
| 791 | return { id: { index: ln.decode(e)[1] } } | |
| 792 | } | |
| 793 | const 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 }) | |
| 820 | function 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 | } | |
| 828 | const 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 | } | |
| 846 | yn.indexes.push(Kn) | |
| 847 | const vn = new e([e.BUFFER, e.UINT, e.UINT, e.UINT], { prefix: 23 }), | |
| 848 | mn = l.chatMentionsByMemberIdMap | |
| 849 | function 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 | } | |
| 857 | const 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 | } | |
| 883 | yn.indexes.push(kn) | |
| 884 | const xn = new e([e.UINT, e.UINT, e.UINT, e.UINT], { prefix: 24 }), | |
| 885 | Rn = l.pinnedChatMessagesMap | |
| 886 | function 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 | } | |
| 894 | const 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 | } | |
| 920 | yn.indexes.push(Fn) | |
| 921 | const wn = new e([e.UINT, e.UINT], { prefix: 25 }) | |
| 922 | function 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 | } | |
| 930 | const In = o("@keet/reactions-digest/hyperdb#25") | |
| 931 | function 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 | } | |
| 938 | function Bn(e) { | |
| 939 | return { id: { index: wn.decode(e)[1] } } | |
| 940 | } | |
| 941 | const 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 }) | |
| 968 | function 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 | } | |
| 982 | const Ln = o("@keet/reaction/hyperdb#26"), | |
| 983 | Mn = l.reactionsTrigger | |
| 984 | function 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 | } | |
| 991 | function jn(e) { | |
| 992 | const n = Nn.decode(e) | |
| 993 | return { id: { index: n[1] }, sender: n[2], reaction: n[3] } | |
| 994 | } | |
| 995 | const 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 | }) | |
| 1024 | function 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 | } | |
| 1053 | const 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 | } | |
| 1083 | Cn.indexes.push(Dn) | |
| 1084 | const Pn = new e([e.UINT], { prefix: 28 }) | |
| 1085 | function zn(e) { | |
| 1086 | const n = e.id | |
| 1087 | return void 0 === n ? [] : [n] | |
| 1088 | } | |
| 1089 | const Hn = o("@keet/file-record/hyperdb#28"), | |
| 1090 | Jn = l.filesTrigger | |
| 1091 | function 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 | } | |
| 1098 | function Qn(e) { | |
| 1099 | return { id: Pn.decode(e)[0] } | |
| 1100 | } | |
| 1101 | const 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 }) | |
| 1134 | function 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 | } | |
| 1145 | const 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 | } | |
| 1163 | Wn.indexes.push(Zn) | |
| 1164 | const $n = new e([e.STRING, e.UINT, e.UINT], { prefix: 30 }), | |
| 1165 | _n = l.filesByTypeMap | |
| 1166 | function 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 | } | |
| 1174 | const 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 | |
| 1202 | function ot(e) { | |
| 1203 | const n = e.id | |
| 1204 | return void 0 === n ? [] : [n] | |
| 1205 | } | |
| 1206 | const 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 }) | |
| 1233 | function lt(e) { | |
| 1234 | return [] | |
| 1235 | } | |
| 1236 | const st = o("@keet/room-identity") | |
| 1237 | function ut(e, n, t) { | |
| 1238 | r(e) | |
| 1239 | const c = { start: 0, end: t.byteLength, buffer: t } | |
| 1240 | return st.decode(c) | |
| 1241 | } | |
| 1242 | function it(e) { | |
| 1243 | return {} | |
| 1244 | } | |
| 1245 | const 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 }) | |
| 1269 | function gt(e) { | |
| 1270 | return [] | |
| 1271 | } | |
| 1272 | const yt = o("@keet-private-id/stats") | |
| 1273 | function bt(e, n, t) { | |
| 1274 | r(e) | |
| 1275 | const c = { start: 0, end: t.byteLength, buffer: t } | |
| 1276 | return yt.decode(c) | |
| 1277 | } | |
| 1278 | function pt(e) { | |
| 1279 | return {} | |
| 1280 | } | |
| 1281 | const 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 }) | |
| 1305 | function mt(e) { | |
| 1306 | return [] | |
| 1307 | } | |
| 1308 | const ht = o("@keet-private-id/counters") | |
| 1309 | function kt(e, n, t) { | |
| 1310 | r(e) | |
| 1311 | const c = { start: 0, end: t.byteLength, buffer: t } | |
| 1312 | return ht.decode(c) | |
| 1313 | } | |
| 1314 | function xt(e) { | |
| 1315 | return {} | |
| 1316 | } | |
| 1317 | const 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 }) | |
| 1341 | function Ft(e) { | |
| 1342 | const n = e.id | |
| 1343 | return void 0 === n ? [] : [n] | |
| 1344 | } | |
| 1345 | const wt = o("@keet-private-id/pending-invitation/hyperdb#35") | |
| 1346 | function 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 | } | |
| 1353 | function It(e) { | |
| 1354 | return { id: Ut.decode(e)[0] } | |
| 1355 | } | |
| 1356 | const 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 }) | |
| 1383 | function Tt(e) { | |
| 1384 | const n = e.roomKey | |
| 1385 | return void 0 === n ? [] : [n] | |
| 1386 | } | |
| 1387 | const Nt = o("@keet-private-id/room/hyperdb#36"), | |
| 1388 | qt = s.roomsTrigger | |
| 1389 | function 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 | } | |
| 1396 | function Mt(e) { | |
| 1397 | return { roomKey: Bt.decode(e)[0] } | |
| 1398 | } | |
| 1399 | const 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 }) | |
| 1426 | function 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 | } | |
| 1434 | const 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 | } | |
| 1452 | At.indexes.push(Gt) | |
| 1453 | const St = new e([e.BUFFER], { prefix: 38 }) | |
| 1454 | function Dt(e) { | |
| 1455 | const n = e.memberKey | |
| 1456 | return void 0 === n ? [] : [n] | |
| 1457 | } | |
| 1458 | const Pt = o("@keet-private-id/contact-record/hyperdb#38"), | |
| 1459 | zt = s.contactsTrigger | |
| 1460 | function 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 | } | |
| 1467 | function Jt(e) { | |
| 1468 | return { memberKey: St.decode(e)[0] } | |
| 1469 | } | |
| 1470 | const 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 }) | |
| 1497 | function 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 | } | |
| 1505 | const 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 | } | |
| 1523 | Ot.indexes.push(Xt) | |
| 1524 | const Yt = new e([e.BUFFER], { prefix: 40 }) | |
| 1525 | function Zt(e) { | |
| 1526 | const n = e.memberKey | |
| 1527 | return void 0 === n ? [] : [n] | |
| 1528 | } | |
| 1529 | const $t = o("@keet-private-id/contact-request-record/hyperdb#40"), | |
| 1530 | _t = s.contactRequestsTrigger | |
| 1531 | function 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 | } | |
| 1538 | function nc(e) { | |
| 1539 | return { memberKey: Yt.decode(e)[0] } | |
| 1540 | } | |
| 1541 | const 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 }) | |
| 1568 | function 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 | } | |
| 1576 | const 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 | } | |
| 1594 | tc.indexes.push(rc) | |
| 1595 | const dc = new e([e.UINT, e.BUFFER], { prefix: 42 }), | |
| 1596 | lc = s.pendingContactRequestsMap | |
| 1597 | function sc(e) { | |
| 1598 | const n = e.clock | |
| 1599 | return void 0 === n ? [] : [n] | |
| 1600 | } | |
| 1601 | const 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 | } | |
| 1627 | tc.indexes.push(uc) | |
| 1628 | const ic = new e([e.UINT, e.BUFFER], { prefix: 43 }), | |
| 1629 | ac = s.acceptedContactRequestsMap | |
| 1630 | function fc(e) { | |
| 1631 | const n = e.clock | |
| 1632 | return void 0 === n ? [] : [n] | |
| 1633 | } | |
| 1634 | const 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 | } | |
| 1660 | tc.indexes.push(gc) | |
| 1661 | const yc = new e([e.UINT, e.BUFFER], { prefix: 44 }), | |
| 1662 | bc = s.rejectedContactRequestsMap | |
| 1663 | function pc(e) { | |
| 1664 | const n = e.clock | |
| 1665 | return void 0 === n ? [] : [n] | |
| 1666 | } | |
| 1667 | const 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 | } | |
| 1693 | tc.indexes.push(Kc) | |
| 1694 | const vc = new e([e.UINT, e.BUFFER], { prefix: 45 }), | |
| 1695 | mc = s.discardedContactRequestsMap | |
| 1696 | function hc(e) { | |
| 1697 | const n = e.clock | |
| 1698 | return void 0 === n ? [] : [n] | |
| 1699 | } | |
| 1700 | const 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 | } | |
| 1726 | tc.indexes.push(kc) | |
| 1727 | const xc = new e([e.UINT], { prefix: 46 }) | |
| 1728 | function Rc(e) { | |
| 1729 | const n = e.key | |
| 1730 | return void 0 === n ? [] : [n] | |
| 1731 | } | |
| 1732 | const Uc = o("@keet/test-collection-record-1/hyperdb#46") | |
| 1733 | function 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 | } | |
| 1740 | function wc(e) { | |
| 1741 | return { key: xc.decode(e)[0] } | |
| 1742 | } | |
| 1743 | const 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 | |
| 1771 | function 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 | } | |
| 1779 | const 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 | } | |
| 1805 | Wn.indexes.push(Tc) | |
| 1806 | const Nc = new e([e.UINT, e.UINT], { prefix: 48 }), | |
| 1807 | qc = l.activeFilesMap | |
| 1808 | function Lc(e) { | |
| 1809 | const n = e.id | |
| 1810 | return void 0 === n ? [] : [n] | |
| 1811 | } | |
| 1812 | const 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 | } | |
| 1838 | Wn.indexes.push(Mc) | |
| 1839 | const Ac = new e([e.BUFFER, e.BUFFER], { prefix: 49 }), | |
| 1840 | jc = s.roomsByContactMap | |
| 1841 | function Cc(e) { | |
| 1842 | const n = e.contact | |
| 1843 | return void 0 === n ? [] : [n] | |
| 1844 | } | |
| 1845 | const 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 | } | |
| 1871 | At.indexes.push(Gc) | |
| 1872 | const Sc = new e([e.BUFFER], { prefix: 50 }) | |
| 1873 | function Dc(e) { | |
| 1874 | const n = e.deviceKey | |
| 1875 | return void 0 === n ? [] : [n] | |
| 1876 | } | |
| 1877 | const Pc = o("@keet/device-identity/hyperdb#50") | |
| 1878 | function 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 | } | |
| 1885 | function Hc(e) { | |
| 1886 | return { deviceKey: Sc.decode(e)[0] } | |
| 1887 | } | |
| 1888 | const 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 }) | |
| 1915 | function 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 | } | |
| 1923 | const Wc = o("@keet-private-id/contact-request-record/hyperdb#51"), | |
| 1924 | Xc = s.contactRequestsTrigger | |
| 1925 | function 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 | } | |
| 1932 | function Zc(e) { | |
| 1933 | const n = Oc.decode(e) | |
| 1934 | return { memberKey: n[0], keys: { key: n[1] } } | |
| 1935 | } | |
| 1936 | const $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 }) | |
| 1963 | function 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 | } | |
| 1974 | const 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) | |
| 1993 | const to = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 53 }) | |
| 1994 | function 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 | } | |
| 2005 | const 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) | |
| 2024 | const ro = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 54 }), | |
| 2025 | lo = s.pendingContactRequestsMap | |
| 2026 | function so(e) { | |
| 2027 | const n = e.clock | |
| 2028 | return void 0 === n ? [] : [n] | |
| 2029 | } | |
| 2030 | const 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) | |
| 2057 | const io = new e([e.BUFFER, e.BUFFER, e.BUFFER], { prefix: 55 }), | |
| 2058 | ao = s.pendingContactRequestsByMemberMap | |
| 2059 | function fo(e) { | |
| 2060 | const n = e.memberKey | |
| 2061 | return void 0 === n ? [] : [n] | |
| 2062 | } | |
| 2063 | const 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) | |
| 2090 | const yo = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 56 }), | |
| 2091 | bo = s.acceptedContactRequestsMap | |
| 2092 | function po(e) { | |
| 2093 | const n = e.clock | |
| 2094 | return void 0 === n ? [] : [n] | |
| 2095 | } | |
| 2096 | const 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) | |
| 2123 | const vo = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 57 }), | |
| 2124 | mo = s.rejectedContactRequestsMap | |
| 2125 | function ho(e) { | |
| 2126 | const n = e.clock | |
| 2127 | return void 0 === n ? [] : [n] | |
| 2128 | } | |
| 2129 | const 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) | |
| 2156 | const xo = new e([e.UINT, e.BUFFER, e.BUFFER], { prefix: 58 }), | |
| 2157 | Ro = s.discardedContactRequestsMap | |
| 2158 | function Uo(e) { | |
| 2159 | const n = e.clock | |
| 2160 | return void 0 === n ? [] : [n] | |
| 2161 | } | |
| 2162 | const 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) | |
| 2189 | const wo = new e([e.BUFFER], { prefix: 59 }) | |
| 2190 | function Vo(e) { | |
| 2191 | const n = e.deviceKey | |
| 2192 | return void 0 === n ? [] : [n] | |
| 2193 | } | |
| 2194 | const Io = o("@keet-private-id/unreads/hyperdb#59") | |
| 2195 | function 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 | } | |
| 2202 | function Bo(e) { | |
| 2203 | return { deviceKey: wo.decode(e)[0] } | |
| 2204 | } | |
| 2205 | const 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 }) | |
| 2232 | function 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 | } | |
| 2246 | const Lo = o("@keet/chat-label/hyperdb#60"), | |
| 2247 | Mo = l.chatLabelTrigger | |
| 2248 | function 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 | } | |
| 2255 | function jo(e) { | |
| 2256 | const n = No.decode(e) | |
| 2257 | return { id: { index: n[1] }, sender: n[2], label: n[3] } | |
| 2258 | } | |
| 2259 | const 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 }) | |
| 2286 | function 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 | } | |
| 2294 | const Do = o("@keet/chat-label-digest/hyperdb#61") | |
| 2295 | function 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 | } | |
| 2302 | function zo(e) { | |
| 2303 | return { id: { index: Go.decode(e)[1] } } | |
| 2304 | } | |
| 2305 | const 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 }) | |
| 2338 | function Oo(e) { | |
| 2339 | const n = e.memberKey | |
| 2340 | return void 0 === n ? [] : [n] | |
| 2341 | } | |
| 2342 | const Qo = o("@keet/read-length/hyperdb#62") | |
| 2343 | function 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 | } | |
| 2350 | function Xo(e) { | |
| 2351 | return { memberKey: Jo.decode(e)[0] } | |
| 2352 | } | |
| 2353 | const 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 }) | |
| 2380 | function $o(e) { | |
| 2381 | const n = e.key | |
| 2382 | return void 0 === n ? [] : [n] | |
| 2383 | } | |
| 2384 | const _o = o("@keet/tmp-removed-member/hyperdb#63") | |
| 2385 | function 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 | } | |
| 2392 | function nr(e) { | |
| 2393 | return { key: Zo.decode(e)[0] } | |
| 2394 | } | |
| 2395 | const 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 }) | |
| 2422 | function or(e) { | |
| 2423 | return [] | |
| 2424 | } | |
| 2425 | const rr = o("@keet-private-id/settings") | |
| 2426 | function dr(e, n, t) { | |
| 2427 | r(e) | |
| 2428 | const c = { start: 0, end: t.byteLength, buffer: t } | |
| 2429 | return rr.decode(c) | |
| 2430 | } | |
| 2431 | function lr(e) { | |
| 2432 | return {} | |
| 2433 | } | |
| 2434 | const 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 | |
| 2459 | function 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 | } | |
| 2467 | const 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 | } | |
| 2493 | Ho.indexes.push(fr) | |
| 2494 | const gr = new e([e.BUFFER, e.BUFFER, e.UINT], { prefix: 66 }) | |
| 2495 | function 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 | } | |
| 2506 | const br = o("@keet/member-label/hyperdb#66") | |
| 2507 | function 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 | } | |
| 2517 | function Kr(e) { | |
| 2518 | const n = gr.decode(e) | |
| 2519 | return { key: n[0], sender: n[1], label: n[2] } | |
| 2520 | } | |
| 2521 | const 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 }) | |
| 2555 | function hr(e) { | |
| 2556 | const n = e.key | |
| 2557 | return void 0 === n ? [] : [n] | |
| 2558 | } | |
| 2559 | const kr = o("@keet/member-label-digest/hyperdb#67") | |
| 2560 | function 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 | } | |
| 2570 | function Rr(e) { | |
| 2571 | return { key: mr.decode(e)[0] } | |
| 2572 | } | |
| 2573 | const 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 | |
| 2608 | function 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 | } | |
| 2616 | const 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 | } | |
| 2642 | Ur.indexes.push(Ir) | |
| 2643 | const Er = new e([e.BUFFER], { prefix: 69 }) | |
| 2644 | function Br(e) { | |
| 2645 | const n = e.callKey | |
| 2646 | return void 0 === n ? [] : [n] | |
| 2647 | } | |
| 2648 | const Tr = o("@keet/call-record/hyperdb#69") | |
| 2649 | function 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 | } | |
| 2659 | function qr(e) { | |
| 2660 | return { callKey: Er.decode(e)[0] } | |
| 2661 | } | |
| 2662 | const 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 }) | |
| 2696 | function 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 | } | |
| 2704 | const 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 | } | |
| 2722 | Lr.indexes.push(jr) | |
| 2723 | const Cr = new e([e.UINT, e.BUFFER], { prefix: 71 }), | |
| 2724 | Gr = l.activeCallsMap | |
| 2725 | function Sr(e) { | |
| 2726 | const n = e.createdAt | |
| 2727 | return void 0 === n ? [] : [n] | |
| 2728 | } | |
| 2729 | const 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 | } | |
| 2755 | Lr.indexes.push(Dr) | |
| 2756 | const Pr = new e([e.BUFFER, e.BUFFER], { prefix: 72 }) | |
| 2757 | function 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 | } | |
| 2765 | const Hr = o("@keet/call-member-record/hyperdb#72") | |
| 2766 | function 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 | } | |
| 2776 | function Or(e) { | |
| 2777 | const n = Pr.decode(e) | |
| 2778 | return { callKey: n[0], memberKey: n[1] } | |
| 2779 | } | |
| 2780 | const 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 }) | |
| 2814 | function 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 | } | |
| 2822 | const Yr = o("@keet/call-device-record/hyperdb#73") | |
| 2823 | function 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 | } | |
| 2833 | function $r(e) { | |
| 2834 | const n = Wr.decode(e) | |
| 2835 | return { callKey: n[0], deviceKey: n[1] } | |
| 2836 | } | |
| 2837 | const _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 }) | |
| 2871 | function 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 | } | |
| 2885 | const 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) | |
| 2904 | const cd = new e([e.BUFFER, e.BUFFER], { prefix: 75 }) | |
| 2905 | function 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 | } | |
| 2913 | const rd = o("@keet/call-stream-record/hyperdb#75") | |
| 2914 | function 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 | } | |
| 2924 | function ld(e) { | |
| 2925 | const n = cd.decode(e) | |
| 2926 | return { callKey: n[0], streamKey: n[1] } | |
| 2927 | } | |
| 2928 | const 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 }) | |
| 2962 | function 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 | } | |
| 2976 | const 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 | } | |
| 2994 | sd.indexes.push(ad) | |
| 2995 | const fd = new e([e.BUFFER], { prefix: 77 }) | |
| 2996 | function gd(e) { | |
| 2997 | const n = e.deviceKey | |
| 2998 | return void 0 === n ? [] : [n] | |
| 2999 | } | |
| 3000 | const yd = o("@keet-private-id/unreads/hyperdb#77") | |
| 3001 | function 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 | } | |
| 3011 | function pd(e) { | |
| 3012 | return { deviceKey: fd.decode(e)[0] } | |
| 3013 | } | |
| 3014 | const 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 | ] | |
| 3127 | function 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 | } | |
| 3209 | function 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 | } | |
| 3295 | module.exports = { | |
| 3296 | versions: d, | |
| 3297 | collections: vd, | |
| 3298 | indexes: md, | |
| 3299 | resolveCollection: hd, | |
| 3300 | resolveIndex: kd, | |
| 3301 | } |
| … | … | @@ -0,0 +1,4747 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 20 | |
| 3 | let n = d | |
| 4 | const 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 | |
| 4238 | function gi(e) { | |
| 4239 | n = e | |
| 4240 | } | |
| 4241 | function hi(d, o, c = 20) { | |
| 4242 | return ((n = c), e.encode(Ai(d), o)) | |
| 4243 | } | |
| 4244 | function Ki(d, o, c = 20) { | |
| 4245 | return ((n = c), e.decode(Ai(d), o)) | |
| 4246 | } | |
| 4247 | function 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 | } | |
| 4269 | function 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 | } | |
| 4725 | function 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 | } | |
| 4737 | const Pi = Ti | |
| 4738 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,836 @@ |
| 1 | const { 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 | |
| 4 | class 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 | } | |
| 441 | function 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 | } | |
| 454 | function 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 | } | |
| 462 | const 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") } | |
| 592 | function 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 | } | |
| 714 | function _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 | } | |
| 836 | module.exports = { version: i, encode: c, decode: u, Router: h, DispatchError: r, ERRORS: n } |
| … | … | @@ -0,0 +1,3980 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 20 | |
| 3 | let n = d | |
| 4 | const 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 | |
| 3545 | function st(e) { | |
| 3546 | n = e | |
| 3547 | } | |
| 3548 | function pt(d, o, c = 20) { | |
| 3549 | return ((n = c), e.encode(ft(d), o)) | |
| 3550 | } | |
| 3551 | function ut(d, o, c = 20) { | |
| 3552 | return ((n = c), e.decode(ft(d), o)) | |
| 3553 | } | |
| 3554 | function 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 | } | |
| 3576 | function 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 | } | |
| 3958 | function 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 | } | |
| 3970 | const yt = mt | |
| 3971 | module.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 | } |
| … | … | @@ -0,0 +1,3980 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 20 | |
| 3 | let n = d | |
| 4 | const 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 | |
| 3545 | function st(e) { | |
| 3546 | n = e | |
| 3547 | } | |
| 3548 | function pt(d, o, c = 20) { | |
| 3549 | return ((n = c), e.encode(ft(d), o)) | |
| 3550 | } | |
| 3551 | function ut(d, o, c = 20) { | |
| 3552 | return ((n = c), e.decode(ft(d), o)) | |
| 3553 | } | |
| 3554 | function 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 | } | |
| 3576 | function 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 | } | |
| 3958 | function 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 | } | |
| 3970 | const yt = mt | |
| 3971 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,14 @@ |
| 1 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,1765 @@ |
| 1 | const { 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 }) | |
| 6 | function u(e) { | |
| 7 | return [] | |
| 8 | } | |
| 9 | const i = r("@local/stats") | |
| 10 | function a(e, n, t) { | |
| 11 | c(e) | |
| 12 | const o = { start: 0, end: t.byteLength, buffer: t } | |
| 13 | return i.decode(o) | |
| 14 | } | |
| 15 | function f(e) { | |
| 16 | return {} | |
| 17 | } | |
| 18 | const 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 }) | |
| 42 | function p(e) { | |
| 43 | return [] | |
| 44 | } | |
| 45 | const b = r("@local/migration-status") | |
| 46 | function m(e, n, t) { | |
| 47 | c(e) | |
| 48 | const o = { start: 0, end: t.byteLength, buffer: t } | |
| 49 | return b.decode(o) | |
| 50 | } | |
| 51 | function K(e) { | |
| 52 | return {} | |
| 53 | } | |
| 54 | const 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 }) | |
| 78 | function h(e) { | |
| 79 | return [] | |
| 80 | } | |
| 81 | const R = r("@local/room-migration-stats") | |
| 82 | function U(e, n, t) { | |
| 83 | c(e) | |
| 84 | const o = { start: 0, end: t.byteLength, buffer: t } | |
| 85 | return R.decode(o) | |
| 86 | } | |
| 87 | function w(e) { | |
| 88 | return {} | |
| 89 | } | |
| 90 | const 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 }) | |
| 114 | function k(e) { | |
| 115 | const n = e.roomKey | |
| 116 | return void 0 === n ? [] : [n] | |
| 117 | } | |
| 118 | const B = r("@local/room-migration/hyperdb#3"), | |
| 119 | I = d.roomMigrationsTrigger | |
| 120 | function 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 | } | |
| 127 | function T(e) { | |
| 128 | return { roomKey: V.decode(e)[0] } | |
| 129 | } | |
| 130 | const 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 }) | |
| 157 | function 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 | } | |
| 165 | const 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 | } | |
| 183 | L.indexes.push(A) | |
| 184 | const P = new e([], { prefix: 5 }) | |
| 185 | function M(e) { | |
| 186 | return [] | |
| 187 | } | |
| 188 | const O = r("@local/identity-record") | |
| 189 | function G(e, n, t) { | |
| 190 | c(e) | |
| 191 | const o = { start: 0, end: t.byteLength, buffer: t } | |
| 192 | return O.decode(o) | |
| 193 | } | |
| 194 | function S(e) { | |
| 195 | return {} | |
| 196 | } | |
| 197 | const 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 }) | |
| 221 | function j(e) { | |
| 222 | const n = e.roomKey | |
| 223 | return void 0 === n ? [] : [n] | |
| 224 | } | |
| 225 | const W = r("@local/room/hyperdb#6"), | |
| 226 | z = d.roomsTrigger | |
| 227 | function 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 | } | |
| 234 | function J(e) { | |
| 235 | return { roomKey: C.decode(e)[0] } | |
| 236 | } | |
| 237 | const 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 }) | |
| 270 | function Y(e) { | |
| 271 | const n = e.discoveryKey | |
| 272 | return void 0 === n ? [] : [n] | |
| 273 | } | |
| 274 | const 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 | } | |
| 292 | Q.indexes.push(Z) | |
| 293 | const $ = new e([e.UINT, e.BUFFER], { prefix: 8 }), | |
| 294 | _ = d.roomsByTimestampMap | |
| 295 | function ee(e) { | |
| 296 | const n = e.timestamp | |
| 297 | return void 0 === n ? [] : [n] | |
| 298 | } | |
| 299 | const 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 | } | |
| 325 | Q.indexes.push(ne) | |
| 326 | const te = new e([e.UINT, e.UINT, e.BUFFER], { prefix: 9 }), | |
| 327 | oe = d.roomsByTypeAndTimestampMap | |
| 328 | function 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 | } | |
| 336 | const 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 | } | |
| 362 | Q.indexes.push(ce) | |
| 363 | const le = new e([e.BUFFER], { prefix: 10 }) | |
| 364 | function de(e) { | |
| 365 | const n = e.capabilities?.wakeupTopic | |
| 366 | return void 0 === n ? [] : [n] | |
| 367 | } | |
| 368 | const 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 | } | |
| 386 | Q.indexes.push(se) | |
| 387 | const ue = new e([e.BUFFER], { prefix: 11 }) | |
| 388 | function ie(e) { | |
| 389 | const n = e.capabilities?.mailboxKeyPair?.publicKey | |
| 390 | return void 0 === n ? [] : [n] | |
| 391 | } | |
| 392 | const 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 | } | |
| 410 | Q.indexes.push(ae) | |
| 411 | const fe = new e([e.BUFFER], { prefix: 12 }) | |
| 412 | function ye(e) { | |
| 413 | const n = e.capabilities?.discoveryKeyPair?.publicKey | |
| 414 | return void 0 === n ? [] : [n] | |
| 415 | } | |
| 416 | const 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 | } | |
| 434 | Q.indexes.push(ge) | |
| 435 | const pe = new e([e.BUFFER], { prefix: 13 }) | |
| 436 | function be(e) { | |
| 437 | const n = e.roomKey | |
| 438 | return void 0 === n ? [] : [n] | |
| 439 | } | |
| 440 | const me = r("@local/room-preferences/hyperdb#13") | |
| 441 | function 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 | } | |
| 448 | function ve(e) { | |
| 449 | return { roomKey: pe.decode(e)[0] } | |
| 450 | } | |
| 451 | const 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 }) | |
| 478 | function Re(e) { | |
| 479 | const n = e.mailbox | |
| 480 | return void 0 === n ? [] : [n] | |
| 481 | } | |
| 482 | const Ue = r("@local/writer/hyperdb#14") | |
| 483 | function 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 | } | |
| 490 | function Fe(e) { | |
| 491 | return { mailbox: he.decode(e)[0] } | |
| 492 | } | |
| 493 | const 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 | |
| 521 | function Ie(e) { | |
| 522 | const n = e.wakeupTopic | |
| 523 | return void 0 === n ? [] : [n] | |
| 524 | } | |
| 525 | const 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 | } | |
| 551 | Ve.indexes.push(Ee) | |
| 552 | const Te = new e([e.BUFFER], { prefix: 16 }), | |
| 553 | Le = d.writersByRoomKeyMap | |
| 554 | function Ne(e) { | |
| 555 | const n = e.roomKey | |
| 556 | return void 0 === n ? [] : [n] | |
| 557 | } | |
| 558 | const 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 | } | |
| 584 | Ve.indexes.push(De) | |
| 585 | const Ae = new e([e.BUFFER], { prefix: 17 }) | |
| 586 | function Pe(e) { | |
| 587 | const n = e.key | |
| 588 | return void 0 === n ? [] : [n] | |
| 589 | } | |
| 590 | const Me = r("@local/member/hyperdb#17") | |
| 591 | function 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 | } | |
| 598 | function Ge(e) { | |
| 599 | return { key: Ae.decode(e)[0] } | |
| 600 | } | |
| 601 | const 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 }) | |
| 628 | function Ce(e) { | |
| 629 | const n = e.device?.key | |
| 630 | return void 0 === n ? [] : [n] | |
| 631 | } | |
| 632 | const je = r("@local/device/hyperdb#18") | |
| 633 | function 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 | } | |
| 640 | function ze(e) { | |
| 641 | return { device: { key: qe.decode(e)[0] } } | |
| 642 | } | |
| 643 | const 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 }) | |
| 670 | function Qe(e) { | |
| 671 | const n = e.memberKey | |
| 672 | return void 0 === n ? [] : [n] | |
| 673 | } | |
| 674 | const Xe = r("@keet-private-id/contact/hyperdb#19") | |
| 675 | function 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 | } | |
| 682 | function Ze(e) { | |
| 683 | return { memberKey: Je.decode(e)[0] } | |
| 684 | } | |
| 685 | const $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 | |
| 713 | function nn(e) { | |
| 714 | const n = e.memberKey | |
| 715 | return void 0 === n ? [] : [n] | |
| 716 | } | |
| 717 | const 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) | |
| 744 | const on = new e([e.UINT, e.UINT, e.UINT, e.BUFFER], { prefix: 21 }) | |
| 745 | function 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 | } | |
| 759 | const cn = r("@local/task/hyperdb#21") | |
| 760 | function 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 | } | |
| 767 | function dn(e) { | |
| 768 | const n = on.decode(e) | |
| 769 | return { priority: n[0], timestamp: n[1], type: n[2], discoveryKey: n[3] } | |
| 770 | } | |
| 771 | const 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 }) | |
| 798 | function 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 | } | |
| 806 | const 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 | } | |
| 824 | sn.indexes.push(fn) | |
| 825 | const yn = new e([e.BUFFER, e.UINT], { prefix: 23 }) | |
| 826 | function 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 | } | |
| 834 | const pn = r("@local/file/hyperdb#23") | |
| 835 | function 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 | } | |
| 847 | function mn(e) { | |
| 848 | return { file: { pointer: { externalBlob: { blob: { blockOffset: yn.decode(e)[1] } } } } } | |
| 849 | } | |
| 850 | const 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 }) | |
| 883 | function 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 | } | |
| 894 | const hn = r("@local/file/hyperdb#24") | |
| 895 | function 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 | } | |
| 908 | function Un(e) { | |
| 909 | return { file: { pointer: { externalDrive: { version: vn.decode(e)[2] } } } } | |
| 910 | } | |
| 911 | const 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 }) | |
| 948 | function 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 | } | |
| 959 | const 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 | } | |
| 983 | Kn.indexes.push(kn) | |
| 984 | const Bn = new e([e.BUFFER, e.BUFFER, e.STRING, e.UINT], { prefix: 26 }) | |
| 985 | function 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 | } | |
| 999 | const 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 | } | |
| 1024 | wn.indexes.push(En) | |
| 1025 | const Tn = new e([e.BUFFER], { prefix: 27 }) | |
| 1026 | function Ln(e) { | |
| 1027 | const n = e.discoveryPublicKey | |
| 1028 | return void 0 === n ? [] : [n] | |
| 1029 | } | |
| 1030 | const Nn = r("@local/background-sync-room/hyperdb#27") | |
| 1031 | function 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 | } | |
| 1038 | function An(e) { | |
| 1039 | return { discoveryPublicKey: Tn.decode(e)[0] } | |
| 1040 | } | |
| 1041 | const 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 | |
| 1069 | function Gn(e) { | |
| 1070 | const n = e.timestamp | |
| 1071 | return void 0 === n ? [] : [n] | |
| 1072 | } | |
| 1073 | const 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 | } | |
| 1099 | Pn.indexes.push(Sn) | |
| 1100 | const qn = new e([e.BUFFER, e.BUFFER], { prefix: 29 }) | |
| 1101 | function 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 | } | |
| 1109 | const jn = r("@local/writer-append/hyperdb#29") | |
| 1110 | function 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 | } | |
| 1117 | function zn(e) { | |
| 1118 | const n = qn.decode(e) | |
| 1119 | return { key: n[0], responsePublicKey: n[1] } | |
| 1120 | } | |
| 1121 | const 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 }) | |
| 1148 | function Qn(e) { | |
| 1149 | const n = e.roomKey | |
| 1150 | return void 0 === n ? [] : [n] | |
| 1151 | } | |
| 1152 | const Xn = r("@local/room-metadata/hyperdb#30") | |
| 1153 | function 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 | } | |
| 1160 | function Zn(e) { | |
| 1161 | return { roomKey: Jn.decode(e)[0] } | |
| 1162 | } | |
| 1163 | const $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 }) | |
| 1190 | function et(e) { | |
| 1191 | return [] | |
| 1192 | } | |
| 1193 | const nt = r("@local/debug") | |
| 1194 | function tt(e, n, t) { | |
| 1195 | c(e) | |
| 1196 | const o = { start: 0, end: t.byteLength, buffer: t } | |
| 1197 | return nt.decode(o) | |
| 1198 | } | |
| 1199 | function ot(e) { | |
| 1200 | return {} | |
| 1201 | } | |
| 1202 | const 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 | |
| 1227 | function dt(e) { | |
| 1228 | const n = e.contact | |
| 1229 | return void 0 === n ? [] : [n] | |
| 1230 | } | |
| 1231 | const 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 | } | |
| 1257 | Q.indexes.push(st) | |
| 1258 | const ut = new e([e.BUFFER], { prefix: 33 }) | |
| 1259 | function it(e) { | |
| 1260 | const n = e.roomKey | |
| 1261 | return void 0 === n ? [] : [n] | |
| 1262 | } | |
| 1263 | const at = r("@local/unread/hyperdb#33") | |
| 1264 | function 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 | } | |
| 1271 | function yt(e) { | |
| 1272 | return { roomKey: ut.decode(e)[0] } | |
| 1273 | } | |
| 1274 | const 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 }) | |
| 1301 | function bt(e) { | |
| 1302 | return [] | |
| 1303 | } | |
| 1304 | const mt = r("@local/hyperdht-record") | |
| 1305 | function Kt(e, n, t) { | |
| 1306 | c(e) | |
| 1307 | const o = { start: 0, end: t.byteLength, buffer: t } | |
| 1308 | return mt.decode(o) | |
| 1309 | } | |
| 1310 | function vt(e) { | |
| 1311 | return {} | |
| 1312 | } | |
| 1313 | const 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 }) | |
| 1337 | function Rt(e) { | |
| 1338 | const n = e.timestamp | |
| 1339 | return void 0 === n ? [] : [n] | |
| 1340 | } | |
| 1341 | const Ut = r("@local/error-record/hyperdb#35") | |
| 1342 | function 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 | } | |
| 1349 | function Ft(e) { | |
| 1350 | return { timestamp: ht.decode(e)[0] } | |
| 1351 | } | |
| 1352 | const 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 }) | |
| 1379 | function 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 | } | |
| 1387 | const 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 | } | |
| 1405 | Vt.indexes.push(It) | |
| 1406 | const Et = new e([e.BUFFER], { prefix: 37 }) | |
| 1407 | function Tt(e) { | |
| 1408 | const n = e.roomKey | |
| 1409 | return void 0 === n ? [] : [n] | |
| 1410 | } | |
| 1411 | const Lt = r("@local/file-stats/hyperdb#37") | |
| 1412 | function 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 | } | |
| 1422 | function Dt(e) { | |
| 1423 | return { roomKey: Et.decode(e)[0] } | |
| 1424 | } | |
| 1425 | const 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 | |
| 1460 | function Ot(e) { | |
| 1461 | const n = e.timestamp | |
| 1462 | return void 0 === n ? [] : [n] | |
| 1463 | } | |
| 1464 | const 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 | } | |
| 1490 | Q.indexes.push(Gt) | |
| 1491 | const St = new e([e.UINT, e.BUFFER, e.UINT], { prefix: 39 }) | |
| 1492 | function 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 | } | |
| 1503 | const 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 | } | |
| 1527 | Kn.indexes.push(Ct) | |
| 1528 | const jt = new e([e.UINT, e.BUFFER, e.STRING, e.UINT], { prefix: 40 }) | |
| 1529 | function 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 | } | |
| 1543 | const 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 | } | |
| 1568 | wn.indexes.push(zt) | |
| 1569 | const Ht = new e([], { prefix: 41 }) | |
| 1570 | function Jt(e) { | |
| 1571 | return [] | |
| 1572 | } | |
| 1573 | const Qt = r("@local/file-gc-info") | |
| 1574 | function 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 | } | |
| 1581 | function Yt(e) { | |
| 1582 | return {} | |
| 1583 | } | |
| 1584 | const 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 }) | |
| 1615 | function _t(e) { | |
| 1616 | return [] | |
| 1617 | } | |
| 1618 | const eo = r("@local/environment-record") | |
| 1619 | function 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 | } | |
| 1626 | function to(e) { | |
| 1627 | return {} | |
| 1628 | } | |
| 1629 | const 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] | |
| 1661 | function 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 | } | |
| 1715 | function 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 | } | |
| 1759 | module.exports = { | |
| 1760 | versions: l, | |
| 1761 | collections: ro, | |
| 1762 | indexes: co, | |
| 1763 | resolveCollection: lo, | |
| 1764 | resolveIndex: so, | |
| 1765 | } |
| … | … | @@ -0,0 +1,5809 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 30 | |
| 3 | let o = d | |
| 4 | const 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 | |
| 5230 | function is(e) { | |
| 5231 | o = e | |
| 5232 | } | |
| 5233 | function as(d, n, c = 30) { | |
| 5234 | return ((o = c), e.encode(ps(d), n)) | |
| 5235 | } | |
| 5236 | function ss(d, n, c = 30) { | |
| 5237 | return ((o = c), e.decode(ps(d), n)) | |
| 5238 | } | |
| 5239 | function 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 | } | |
| 5265 | function 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 | } | |
| 5787 | function 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 | } | |
| 5799 | const fs = us | |
| 5800 | module.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 | } |
| … | … | @@ -0,0 +1,5096 @@ |
| 1 | const { c: e } = require("hyperschema/runtime"), | |
| 2 | d = 30 | |
| 3 | let o = d | |
| 4 | const 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 | |
| 4565 | function zi(e) { | |
| 4566 | o = e | |
| 4567 | } | |
| 4568 | function Gi(d, n, c = 30) { | |
| 4569 | return ((o = c), e.encode(Yi(d), n)) | |
| 4570 | } | |
| 4571 | function Qi(d, n, c = 30) { | |
| 4572 | return ((o = c), e.decode(Yi(d), n)) | |
| 4573 | } | |
| 4574 | function 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 | } | |
| 4600 | function 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 | } | |
| 5074 | function 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 | } | |
| 5086 | const $i = Zi | |
| 5087 | module.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 | } |
| … | … | @@ -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 | } |
| … | … | @@ -0,0 +1,91 @@ |
| 1 | const 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() | |
| 71 | let A = -1, | |
| 72 | M = -1, | |
| 73 | S = -1 | |
| 74 | for (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 | } | |
| 78 | for (const [E, R] of Object.entries(_)) a.has(R) && (e[E] = a.get(R)) | |
| 79 | function O(E, _) { | |
| 80 | const e = a.get(_) | |
| 81 | return !!e && e <= E | |
| 82 | } | |
| 83 | module.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 | } |
| … | … | @@ -0,0 +1,17 @@ |
| 1 | const 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)) | |
| 7 | r.on("data", (e) => c.recv(e)) | |
| 8 | const o = c.register(768, { request: t, response: t }) | |
| 9 | async 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 | } | |
| 14 | async function i() { | |
| 15 | await a(c, s) | |
| 16 | } | |
| 17 | ;(Bare.on("uncaughtException", s).on("unhandledRejection", s), i()) |
| … | … | @@ -0,0 +1,40 @@ |
| 1 | const { registerDebugMode: e } = require("@holepunchto/keet-debug-helper"), | |
| 2 | r = require(".."), | |
| 3 | o = require("../lib/rpc/server") | |
| 4 | async 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 | } | |
| 40 | module.exports = { load: a } |
| … | … | @@ -0,0 +1,237 @@ |
| 1 | const 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") | |
| 11 | async 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 | } | |
| 237 | module.exports = { load: l } |
| … | … | @@ -0,0 +1,86 @@ |
| 1 | const 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) | |
| 16 | BareKit.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 | }) |
| … | … | @@ -0,0 +1,57 @@ |
| 1 | const 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 | } | |
| 51 | module.exports = { | |
| 52 | ROOM_TYPE: t, | |
| 53 | MESSAGE_TYPE: r, | |
| 54 | getRoomTypeFlags: s, | |
| 55 | getNotificationTitle: n, | |
| 56 | getNotificationBody: o, | |
| 57 | } |
| … | … | @@ -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 | ||
| 30 | const fs = require('fs') | |
| 31 | const path = require('path') | |
| 32 | const { spawnSync } = require('child_process') | |
| 33 | ||
| 34 | const argv = process.argv.slice(2) | |
| 35 | function arg (name, def) { | |
| 36 | const i = argv.indexOf(name) | |
| 37 | return i >= 0 && i + 1 < argv.length ? argv[i + 1] : def | |
| 38 | } | |
| 39 | ||
| 40 | const SRC_ROOT = arg('--src', '/tmp/.mount_Keet.AjtX4HI/resources/app/node_modules') | |
| 41 | const OUT_ROOT = arg('--out', path.resolve(__dirname, '../../keet-audit-4.x')) | |
| 42 | const PRIOR_DEOBFUSC = arg('--prior', | |
| 43 | path.resolve(__dirname, '../deobfuscated')) | |
| 44 | ||
| 45 | const PKG_SOURCES = [] | |
| 46 | // Every @holepunchto/* package | |
| 47 | const hpDir = path.join(SRC_ROOT, '@holepunchto') | |
| 48 | if (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) | |
| 57 | const idkDir = path.join(SRC_ROOT, 'keet-identity-key') | |
| 58 | if (fs.existsSync(path.join(idkDir, 'package.json'))) { | |
| 59 | PKG_SOURCES.push({ name: 'keet-identity-key', srcDir: idkDir }) | |
| 60 | } | |
| 61 | ||
| 62 | if (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 | ||
| 68 | console.error('audit source: ' + SRC_ROOT) | |
| 69 | console.error('audit output: ' + OUT_ROOT) | |
| 70 | console.error('prior compare: ' + PRIOR_DEOBFUSC) | |
| 71 | console.error('packages: ' + PKG_SOURCES.length) | |
| 72 | ||
| 73 | const RAW = path.join(OUT_ROOT, 'raw') | |
| 74 | const PRETTY = path.join(OUT_ROOT, 'pretty') | |
| 75 | fs.mkdirSync(RAW, { recursive: true }) | |
| 76 | fs.mkdirSync(PRETTY, { recursive: true }) | |
| 77 | ||
| 78 | // ────────────────────────────────────────────────────────────── | |
| 79 | // Phase A — freeze raw source | |
| 80 | // ────────────────────────────────────────────────────────────── | |
| 81 | console.error('\n[A] freeze raw source') | |
| 82 | function 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 | ||
| 91 | for (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 | } | |
| 96 | spawnSync('chmod', ['-R', 'u+rw,go+r', RAW]) | |
| 97 | console.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. | |
| 102 | let appimageRelease = null | |
| 103 | const peerVersion = path.join(SRC_ROOT, '..', 'package.json') | |
| 104 | if (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 | // ────────────────────────────────────────────────────────────── | |
| 114 | const manifestLines = [] | |
| 115 | manifestLines.push('# Keet 4.x audit — package manifest') | |
| 116 | manifestLines.push('') | |
| 117 | manifestLines.push('Captured: ' + new Date().toISOString()) | |
| 118 | manifestLines.push('Source: ' + SRC_ROOT) | |
| 119 | if (appimageRelease) manifestLines.push('AppImage app version: ' + appimageRelease) | |
| 120 | manifestLines.push('') | |
| 121 | manifestLines.push('| Package | Version | Description |') | |
| 122 | manifestLines.push('|---|---|---|') | |
| 123 | ||
| 124 | const PKG_META = [] | |
| 125 | for (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 | } | |
| 134 | manifestLines.push('') | |
| 135 | fs.writeFileSync(path.join(OUT_ROOT, 'MANIFEST.md'), manifestLines.join('\n') + '\n') | |
| 136 | console.error(' wrote ' + path.join(OUT_ROOT, 'MANIFEST.md')) | |
| 137 | ||
| 138 | // ────────────────────────────────────────────────────────────── | |
| 139 | // Phase B — prettify | |
| 140 | // ────────────────────────────────────────────────────────────── | |
| 141 | console.error('\n[B] prettify') | |
| 142 | cpRecursive(RAW, PRETTY) | |
| 143 | const prettierBin = path.resolve(__dirname, '../node_modules/.bin/prettier') | |
| 144 | const prettierCmd = fs.existsSync(prettierBin) ? prettierBin : 'npx' | |
| 145 | const 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 | |
| 150 | function 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 | } | |
| 162 | const jsFiles = findJs(PRETTY) | |
| 163 | console.error(' prettifying ' + jsFiles.length + ' .js files in batches…') | |
| 164 | const BATCH = 50 | |
| 165 | let prettified = 0 | |
| 166 | let prettierErrors = 0 | |
| 167 | for (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 | } | |
| 181 | process.stderr.write('\n') | |
| 182 | console.error(' prettified ' + prettified + ' / errors ' + prettierErrors + ' / total ' + jsFiles.length) | |
| 183 | ||
| 184 | // ────────────────────────────────────────────────────────────── | |
| 185 | // Phase C — STRUCTURE.md scaffold | |
| 186 | // ────────────────────────────────────────────────────────────── | |
| 187 | console.error('\n[C] STRUCTURE.md scaffold') | |
| 188 | const structLines = [] | |
| 189 | structLines.push('# Keet 4.x audit — structure scaffold') | |
| 190 | structLines.push('') | |
| 191 | structLines.push('Auto-generated by `tools/keet-audit.cjs`. Each section below contains the') | |
| 192 | structLines.push('FACTUAL data extracted from the package (version, exports, top-level imports,') | |
| 193 | structLines.push('file inventory). The "## Notes" subsection is intentionally blank — fill it') | |
| 194 | structLines.push('with narrative analysis as the deep dives happen.') | |
| 195 | structLines.push('') | |
| 196 | structLines.push('Sections are alphabetized by package name. Skim the manifest in MANIFEST.md') | |
| 197 | structLines.push('first for a high-level inventory.') | |
| 198 | structLines.push('') | |
| 199 | ||
| 200 | for (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 | } | |
| 269 | fs.writeFileSync(path.join(OUT_ROOT, 'STRUCTURE.md'), structLines.join('\n')) | |
| 270 | console.error(' wrote ' + path.join(OUT_ROOT, 'STRUCTURE.md')) | |
| 271 | ||
| 272 | // ────────────────────────────────────────────────────────────── | |
| 273 | // Phase E — raw diff vs 1.22.0 | |
| 274 | // ────────────────────────────────────────────────────────────── | |
| 275 | console.error('\n[E] raw diff vs prior') | |
| 276 | const diffLines = [] | |
| 277 | diffLines.push('# Keet audit — diff vs keet-core-hyperdb 1.22.0') | |
| 278 | diffLines.push('') | |
| 279 | diffLines.push('Captured: ' + new Date().toISOString()) | |
| 280 | diffLines.push('Prior source: ' + PRIOR_DEOBFUSC) | |
| 281 | diffLines.push('') | |
| 282 | ||
| 283 | if (!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 | ||
| 345 | fs.writeFileSync(path.join(OUT_ROOT, 'DIFF-RAW.md'), diffLines.join('\n')) | |
| 346 | console.error(' wrote ' + path.join(OUT_ROOT, 'DIFF-RAW.md')) | |
| 347 | ||
| 348 | console.error('\nDone.') | |
| 349 | console.error('Next: read MANIFEST.md → STRUCTURE.md → DIFF-RAW.md, then start filling Notes sections.') | |
| 350 | ||
| 351 | // ────────────────────────────────────────────────────────────── | |
| 352 | // helpers | |
| 353 | // ────────────────────────────────────────────────────────────── | |
| 354 | function escapeMd (s) { | |
| 355 | if (!s) return '' | |
| 356 | return String(s).replace(/\|/g, '\\|').replace(/\n/g, ' ') | |
| 357 | } |