@nolag/feed 0.1.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -18
- package/dist/FeedChannel.d.ts +14 -1
- package/dist/NoLagFeed.d.ts +121 -10
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/index.cjs +549 -133
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +549 -133
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.ts +10 -7
- package/dist/utils.d.ts +4 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -24,18 +24,24 @@ npm install @nolag/js-sdk @nolag/feed
|
|
|
24
24
|
|
|
25
25
|
## Quick Start
|
|
26
26
|
|
|
27
|
+
The app owns one core NoLag client; wrappers attach to it. Any number of
|
|
28
|
+
wrapper SDKs (feed, chat, notify, ...) can share the same connection as
|
|
29
|
+
long as each uses its own app.
|
|
30
|
+
|
|
27
31
|
```typescript
|
|
32
|
+
import { NoLag } from "@nolag/js-sdk";
|
|
28
33
|
import { NoLagFeed } from "@nolag/feed";
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
// One client for the whole app. In a browser, use a token provider so the
|
|
36
|
+
// SDK can mint fresh short-lived client tokens from your backend.
|
|
37
|
+
const client = NoLag(async () => (await (await fetch("/api/nolag-token")).json()).token);
|
|
38
|
+
const feed = new NoLagFeed({ client, username: "Alice" });
|
|
33
39
|
|
|
34
|
-
await
|
|
40
|
+
await client.connect(); // the app owns the connection
|
|
41
|
+
await feed.ready(); // wrapper setup done (identity, presence, channels)
|
|
35
42
|
|
|
43
|
+
// Join a channel and create a post
|
|
36
44
|
const channel = feed.joinChannel("main");
|
|
37
|
-
|
|
38
|
-
// Create a post
|
|
39
45
|
channel.createPost({
|
|
40
46
|
content: "Just shipped v2.0!",
|
|
41
47
|
media: [{ type: "image", url: "https://example.com/screenshot.png" }],
|
|
@@ -50,12 +56,41 @@ channel.on("postCreated", (post) => {
|
|
|
50
56
|
channel.likePost(postId);
|
|
51
57
|
channel.addComment(postId, "Congrats!");
|
|
52
58
|
|
|
53
|
-
// Real-time updates
|
|
54
|
-
channel.on("postLiked", (
|
|
55
|
-
updateLikeCount(
|
|
59
|
+
// Real-time reaction updates
|
|
60
|
+
channel.on("postLiked", ({ postId, likeCount }) => {
|
|
61
|
+
updateLikeCount(postId, likeCount);
|
|
56
62
|
});
|
|
63
|
+
|
|
64
|
+
// See who's online
|
|
65
|
+
feed.on("userOnline", (user) => {
|
|
66
|
+
console.log(`${user.username} came online`);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// Teardown: the wrapper releases its handlers and topics; the app closes
|
|
70
|
+
// the socket (never the other way around).
|
|
71
|
+
feed.detach();
|
|
72
|
+
client.disconnect();
|
|
57
73
|
```
|
|
58
74
|
|
|
75
|
+
## Lifecycle
|
|
76
|
+
|
|
77
|
+
- **Construction = attach.** The wrapper wires its handlers onto the injected
|
|
78
|
+
client immediately. If the client is already connected, setup runs on the
|
|
79
|
+
next microtask; otherwise it runs when the client's `connect` event fires.
|
|
80
|
+
- **`ready()`** resolves once the first setup completed (identity, online
|
|
81
|
+
lobby, configured channels). Auth failures surface via your own
|
|
82
|
+
`await client.connect()`, not via `ready()`.
|
|
83
|
+
- **Reconnects are automatic.** The wrapper restores presence and reconciles
|
|
84
|
+
the online-user list, emitting only real deltas.
|
|
85
|
+
- **`detach()`** removes exactly this wrapper's handlers and topics and never
|
|
86
|
+
touches the socket. It is terminal: construct a new instance to re-attach.
|
|
87
|
+
Detach while the client is still connected so server-side unsubscribes go
|
|
88
|
+
through. In frameworks, call it from your dispose hook (`onUnmounted`,
|
|
89
|
+
HMR dispose).
|
|
90
|
+
- **One wrapper per (client, app).** Sharing a client across wrappers of
|
|
91
|
+
DIFFERENT apps is the intended pattern; two wrappers on the same app would
|
|
92
|
+
collide on topics and presence (the SDK warns if you do this).
|
|
93
|
+
|
|
59
94
|
## API Reference
|
|
60
95
|
|
|
61
96
|
### `NoLagFeed`
|
|
@@ -63,40 +98,53 @@ channel.on("postLiked", (post) => {
|
|
|
63
98
|
#### Constructor
|
|
64
99
|
|
|
65
100
|
```typescript
|
|
66
|
-
const feed = new NoLagFeed(
|
|
101
|
+
const feed = new NoLagFeed(options: NoLagFeedOptions);
|
|
67
102
|
```
|
|
68
103
|
|
|
69
104
|
**Options:**
|
|
70
105
|
|
|
71
106
|
| Option | Type | Default | Description |
|
|
72
107
|
|--------|------|---------|-------------|
|
|
108
|
+
| `client` | `NoLagSocket` | *required* | The injected core NoLag client |
|
|
73
109
|
| `username` | `string` | *required* | Display name |
|
|
74
110
|
| `avatar` | `string` | — | Avatar URL |
|
|
75
111
|
| `metadata` | `Record<string, unknown>` | — | Custom user data |
|
|
112
|
+
| `appName` | `string` | `'feed'` | NoLag app for topic prefixes |
|
|
76
113
|
| `channels` | `string[]` | — | Auto-join these channels on connect |
|
|
77
114
|
| `maxPostCache` | `number` | `200` | Max posts kept in memory |
|
|
78
115
|
| `maxCommentCache` | `number` | `100` | Max comments per post |
|
|
79
116
|
| `debug` | `boolean` | `false` | Enable debug logging |
|
|
80
|
-
| `reconnect` | `boolean` | `true` | Auto-reconnect on disconnect |
|
|
81
117
|
|
|
82
118
|
#### Methods
|
|
83
119
|
|
|
84
120
|
| Method | Returns | Description |
|
|
85
121
|
|--------|---------|-------------|
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
122
|
+
| `ready()` | `Promise<void>` | Resolves when wrapper setup completed |
|
|
123
|
+
| `detach()` | `void` | Release handlers and topics (terminal; never closes the socket) |
|
|
88
124
|
| `joinChannel(name)` | `FeedChannel` | Join a feed channel |
|
|
89
125
|
| `leaveChannel(name)` | `void` | Leave a channel |
|
|
126
|
+
| `getChannels()` | `FeedChannel[]` | Get all joined channels |
|
|
90
127
|
| `getOnlineUsers()` | `FeedUser[]` | Get all online users |
|
|
128
|
+
| `updateProfile(updates)` | `void` | Update username, avatar, or metadata |
|
|
129
|
+
|
|
130
|
+
#### Properties
|
|
131
|
+
|
|
132
|
+
| Property | Type | Description |
|
|
133
|
+
|----------|------|-------------|
|
|
134
|
+
| `connected` | `boolean` | Whether currently connected |
|
|
135
|
+
| `client` | `NoLagSocket` | The injected core client |
|
|
136
|
+
| `localUser` | `FeedUser \| null` | The current user |
|
|
137
|
+
| `channels` | `Map<string, FeedChannel>` | All joined channels |
|
|
91
138
|
|
|
92
139
|
#### Events
|
|
93
140
|
|
|
94
141
|
| Event | Payload | Description |
|
|
95
142
|
|-------|---------|-------------|
|
|
96
|
-
| `connected` | — | Connected |
|
|
97
|
-
| `disconnected` |
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
143
|
+
| `connected` | — | Connected to NoLag |
|
|
144
|
+
| `disconnected` | `reason` | Disconnected |
|
|
145
|
+
| `reconnecting` | — | Reconnect in progress |
|
|
146
|
+
| `reconnected` | — | Reconnected after disconnect |
|
|
147
|
+
| `error` | `Error` | Connection or protocol error |
|
|
100
148
|
| `userOnline` | `FeedUser` | User came online |
|
|
101
149
|
| `userOffline` | `FeedUser` | User went offline |
|
|
102
150
|
|
|
@@ -154,7 +202,7 @@ interface FeedPost {
|
|
|
154
202
|
commentCount: number;
|
|
155
203
|
likedByMe: boolean;
|
|
156
204
|
timestamp: number;
|
|
157
|
-
status: "sending" | "sent" | "
|
|
205
|
+
status: "sending" | "sent" | "delivered";
|
|
158
206
|
isReplay: boolean;
|
|
159
207
|
}
|
|
160
208
|
|
package/dist/FeedChannel.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { RoomContext } from '@nolag/js-sdk';
|
|
2
2
|
import { EventEmitter } from './EventEmitter';
|
|
3
3
|
import type { FeedChannelEvents, FeedPost, FeedComment, FeedUser, FeedPresenceData, ResolvedFeedOptions, CreatePostOptions } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* FeedChannel — a single feed channel with posts, comments, reactions, and
|
|
6
|
+
* presence.
|
|
7
|
+
*
|
|
8
|
+
* Created via `NoLagFeed.joinChannel(name)`. Do not instantiate directly.
|
|
9
|
+
*/
|
|
4
10
|
export declare class FeedChannel extends EventEmitter<FeedChannelEvents> {
|
|
5
11
|
readonly name: string;
|
|
6
12
|
private _roomContext;
|
|
@@ -11,9 +17,14 @@ export declare class FeedChannel extends EventEmitter<FeedChannelEvents> {
|
|
|
11
17
|
private _reactionManager;
|
|
12
18
|
private _comments;
|
|
13
19
|
private _log;
|
|
20
|
+
private _isConnected;
|
|
14
21
|
private _unreadCount;
|
|
15
22
|
private _active;
|
|
16
|
-
|
|
23
|
+
private _onPostsRef;
|
|
24
|
+
private _onReactionsRef;
|
|
25
|
+
private _onCommentsRef;
|
|
26
|
+
/** @internal */
|
|
27
|
+
constructor(name: string, roomContext: RoomContext, localUser: FeedUser, options: ResolvedFeedOptions, log: (...args: unknown[]) => void, isConnected: () => boolean);
|
|
17
28
|
get posts(): FeedPost[];
|
|
18
29
|
get unreadCount(): number;
|
|
19
30
|
get active(): boolean;
|
|
@@ -25,6 +36,7 @@ export declare class FeedChannel extends EventEmitter<FeedChannelEvents> {
|
|
|
25
36
|
getComments(postId: string): FeedComment[];
|
|
26
37
|
markRead(): void;
|
|
27
38
|
getUsers(): FeedUser[];
|
|
39
|
+
/** @internal Subscribe to post/reaction/comment topics and attach listeners (all channels) */
|
|
28
40
|
_subscribe(): void;
|
|
29
41
|
_activate(): void;
|
|
30
42
|
_deactivate(): void;
|
|
@@ -34,6 +46,7 @@ export declare class FeedChannel extends EventEmitter<FeedChannelEvents> {
|
|
|
34
46
|
_handleReplayStart(count: number): void;
|
|
35
47
|
_handleReplayEnd(replayed: number): void;
|
|
36
48
|
_updateLocalPresence(): void;
|
|
49
|
+
/** @internal Unsubscribe and clean up */
|
|
37
50
|
_cleanup(): void;
|
|
38
51
|
private _handleIncomingPost;
|
|
39
52
|
private _handleIncomingReaction;
|
package/dist/NoLagFeed.d.ts
CHANGED
|
@@ -1,35 +1,146 @@
|
|
|
1
|
+
import type { NoLagSocket } from '@nolag/js-sdk';
|
|
1
2
|
import { EventEmitter } from './EventEmitter';
|
|
2
3
|
import { FeedChannel } from './FeedChannel';
|
|
3
4
|
import type { NoLagFeedOptions, FeedClientEvents, FeedUser } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* NoLagFeed — high-level activity-feed SDK built on @nolag/js-sdk.
|
|
7
|
+
*
|
|
8
|
+
* Provides multi-channel feeds, posts, likes, comments, presence (who's
|
|
9
|
+
* online), replay, and user mapping — all framework-agnostic via events.
|
|
10
|
+
*
|
|
11
|
+
* The wrapper NEVER manages the connection. The app owns one core NoLag
|
|
12
|
+
* client (shared by any number of wrappers on distinct apps) and the
|
|
13
|
+
* wrapper attaches to it at construction and releases it via `detach()`.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { NoLag } from '@nolag/js-sdk';
|
|
18
|
+
* import { NoLagFeed } from '@nolag/feed';
|
|
19
|
+
*
|
|
20
|
+
* const client = NoLag(async () => (await (await fetch('/api/nolag-token')).json()).token);
|
|
21
|
+
* const feed = new NoLagFeed({ client, appName: 'my-feed', username: 'Alice' });
|
|
22
|
+
*
|
|
23
|
+
* feed.on('userOnline', (user) => console.log(user.username, 'is online'));
|
|
24
|
+
*
|
|
25
|
+
* await client.connect(); // the app owns the connection
|
|
26
|
+
* await feed.ready(); // wrapper setup done (identity, lobby, channels)
|
|
27
|
+
*
|
|
28
|
+
* const channel = feed.joinChannel('general');
|
|
29
|
+
* channel.on('postCreated', (post) => console.log(post.username + ':', post.content));
|
|
30
|
+
* channel.createPost({ content: 'Hello!' });
|
|
31
|
+
*
|
|
32
|
+
* feed.detach(); // wrapper releases its handlers and topics
|
|
33
|
+
* client.disconnect(); // the app closes the socket
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
4
36
|
export declare class NoLagFeed extends EventEmitter<FeedClientEvents> {
|
|
5
|
-
private _token;
|
|
6
|
-
private _options;
|
|
7
37
|
private _client;
|
|
38
|
+
private _options;
|
|
8
39
|
private _localUser;
|
|
9
40
|
private _channels;
|
|
10
41
|
private _lobby;
|
|
11
42
|
private _onlineUsers;
|
|
12
43
|
private _actorToUserId;
|
|
13
|
-
private _userId;
|
|
14
44
|
private _activeChannel;
|
|
45
|
+
private _userId;
|
|
15
46
|
private _log;
|
|
16
|
-
|
|
47
|
+
private _epoch;
|
|
48
|
+
private _detached;
|
|
49
|
+
private _isReady;
|
|
50
|
+
private _readyResolve;
|
|
51
|
+
private _readyReject;
|
|
52
|
+
private _readyPromise;
|
|
53
|
+
private _lobbyRefreshTimer;
|
|
54
|
+
private _onConnectRef;
|
|
55
|
+
private _onDisconnectRef;
|
|
56
|
+
private _onReconnectRef;
|
|
57
|
+
private _onErrorRef;
|
|
58
|
+
private _onReplayStartRef;
|
|
59
|
+
private _onReplayEndRef;
|
|
60
|
+
private _onPresenceJoinRef;
|
|
61
|
+
private _onPresenceLeaveRef;
|
|
62
|
+
private _onPresenceUpdateRef;
|
|
63
|
+
private _onLobbyJoinRef;
|
|
64
|
+
private _onLobbyLeaveRef;
|
|
65
|
+
private _onLobbyUpdateRef;
|
|
66
|
+
constructor(options: NoLagFeedOptions);
|
|
67
|
+
/** Whether the underlying connection is established (connected ≠ ready) */
|
|
17
68
|
get connected(): boolean;
|
|
69
|
+
/** The injected core client (owned by the app, not the wrapper) */
|
|
70
|
+
get client(): NoLagSocket;
|
|
71
|
+
/** The local user's info (available after ready) */
|
|
18
72
|
get localUser(): FeedUser | null;
|
|
73
|
+
/** All currently joined channels */
|
|
19
74
|
get channels(): Map<string, FeedChannel>;
|
|
20
|
-
|
|
21
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Resolves once the wrapper's first setup completed (identity, lobby and
|
|
77
|
+
* configured channels ready — equivalently, once 'connected' has fired).
|
|
78
|
+
* Rejects only if detach() is called before that. Client auth failures
|
|
79
|
+
* surface via the app's own `await client.connect()`, not here.
|
|
80
|
+
*/
|
|
81
|
+
ready(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Detach from the client: remove every handler this wrapper added,
|
|
84
|
+
* unsubscribe its topics and lobby (when connected), clear state.
|
|
85
|
+
* Terminal and idempotent; never touches the socket. To use the feed again,
|
|
86
|
+
* construct a new instance.
|
|
87
|
+
*/
|
|
88
|
+
detach(): void;
|
|
89
|
+
private _onConnect;
|
|
90
|
+
/**
|
|
91
|
+
* One setup pass per connection epoch. Serves both initial setup (epoch 1)
|
|
92
|
+
* and reconnect restore (epoch > 1). Aborts silently whenever a newer
|
|
93
|
+
* epoch started or the wrapper detached — checked after every await.
|
|
94
|
+
*/
|
|
95
|
+
private _runSetup;
|
|
96
|
+
private _scheduleLobbyRefresh;
|
|
97
|
+
/**
|
|
98
|
+
* Join (activate) a feed channel. Deactivates the previous active channel.
|
|
99
|
+
* If the channel was pre-subscribed via the `channels` option, activates it.
|
|
100
|
+
* Otherwise creates, subscribes, and activates it.
|
|
101
|
+
*/
|
|
22
102
|
joinChannel(name: string): FeedChannel;
|
|
103
|
+
/**
|
|
104
|
+
* Leave a feed channel. Fully unsubscribes and removes it.
|
|
105
|
+
*/
|
|
23
106
|
leaveChannel(name: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* Get all joined channels.
|
|
109
|
+
*/
|
|
110
|
+
getChannels(): FeedChannel[];
|
|
111
|
+
/**
|
|
112
|
+
* Get all users currently online across all channels.
|
|
113
|
+
*/
|
|
24
114
|
getOnlineUsers(): FeedUser[];
|
|
25
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Update the local user's profile info (broadcast to the active channel).
|
|
117
|
+
*/
|
|
118
|
+
updateProfile(updates: {
|
|
119
|
+
username?: string;
|
|
120
|
+
avatar?: string;
|
|
121
|
+
metadata?: Record<string, unknown>;
|
|
122
|
+
}): void;
|
|
123
|
+
private _assertUsable;
|
|
124
|
+
private _subscribeChannelInternal;
|
|
125
|
+
/**
|
|
126
|
+
* On a shared client, presence events from other apps' wrappers arrive on
|
|
127
|
+
* the same connection-level events. Wrappers stamp their presence with a
|
|
128
|
+
* `__scope` (their appName); a mismatched tag means another app's data.
|
|
129
|
+
* Untagged presence is accepted (older peers in this same app).
|
|
130
|
+
*/
|
|
131
|
+
private _foreignScope;
|
|
26
132
|
private _handleRoomPresenceJoin;
|
|
27
133
|
private _handleRoomPresenceLeave;
|
|
28
134
|
private _handleRoomPresenceUpdate;
|
|
29
|
-
private _setupLobby;
|
|
30
135
|
private _handleLobbyJoin;
|
|
31
136
|
private _handleLobbyLeave;
|
|
32
|
-
private
|
|
137
|
+
private _handleLobbyUpdate;
|
|
138
|
+
/**
|
|
139
|
+
* Reconcile the online-user map against a fresh lobby snapshot, emitting
|
|
140
|
+
* only the deltas (userOffline for vanished, userOnline for new). One path
|
|
141
|
+
* for initial hydration, reconnect restore, and the deferred refetch.
|
|
142
|
+
*/
|
|
143
|
+
private _diffHydrateOnlineUsers;
|
|
33
144
|
private _presenceToUser;
|
|
34
|
-
private
|
|
145
|
+
private _findUserIdByActorId;
|
|
35
146
|
}
|
package/dist/browser.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{NoLag as e}from"@nolag/js-sdk";class t{constructor(){this._handlers=new Map}on(e,t){return this._handlers.has(e)||this._handlers.set(e,new Set),this._handlers.get(e).add(t),this}off(e,t){return t?this._handlers.get(e)?.delete(t):this._handlers.delete(e),this}removeAllListeners(){return this._handlers.clear(),this}emit(e,...t){const s=this._handlers.get(e);if(s)for(const n of s)try{n(...t)}catch(t){console.error(`Error in ${String(e)} handler:`,t)}}listenerCount(e){return this._handlers.get(e)?.size??0}}class s{constructor(e){this._posts=[],this._ids=new Set,this._maxSize=e}add(e){if(this._ids.has(e.id))return!1;for(this._ids.add(e.id),this._posts.push(e),this._posts.length>1&&e.timestamp<this._posts[this._posts.length-2].timestamp&&this._posts.sort((e,t)=>e.timestamp-t.timestamp);this._posts.length>this._maxSize;){const e=this._posts.shift();this._ids.delete(e.id)}return!0}get(e){return this._posts.find(t=>t.id===e)}getAll(){return[...this._posts]}updateLikeCount(e,t,s){const n=this._posts.find(t=>t.id===e);n&&(n.likeCount=t,n.likedByMe=s)}incrementCommentCount(e){const t=this._posts.find(t=>t.id===e);t&&t.commentCount++}has(e){return this._ids.has(e)}get size(){return this._posts.length}clear(){this._posts=[],this._ids.clear()}}class n{constructor(){this._likes=new Map}like(e,t){this._likes.has(e)||this._likes.set(e,new Set);const s=this._likes.get(e),n=!s.has(t);return s.add(t),{postId:e,likeCount:s.size,isNew:n}}unlike(e,t){const s=this._likes.get(e);if(!s)return{postId:e,likeCount:0,wasLiked:!1};const n=s.has(t);return s.delete(t),{postId:e,likeCount:s.size,wasLiked:n}}isLikedBy(e,t){return this._likes.get(e)?.has(t)??!1}getLikeCount(e){return this._likes.get(e)?.size??0}clear(){this._likes.clear()}}class i{constructor(e){this._users=new Map,this._actorToUserId=new Map,this._localActorId=e}addFromPresence(e,t,s){if(e===this._localActorId)return null;const n=this._actorToUserId.get(e),i=t.userId||n||e,o={userId:i,actorTokenId:e,username:t.username,avatar:t.avatar,metadata:t.metadata,joinedAt:s||Date.now(),isLocal:!1};return this._users.set(i,o),this._actorToUserId.set(e,i),o}removeByActorId(e){if(e===this._localActorId)return null;const t=this._actorToUserId.get(e);if(!t)return null;const s=this._users.get(t)||null;return this._users.delete(t),this._actorToUserId.delete(e),s}getUser(e){return this._users.get(e)}getUserByActorId(e){const t=this._actorToUserId.get(e);return t?this._users.get(t):void 0}getAll(){return Array.from(this._users.values())}get users(){return this._users}clear(){this._users.clear(),this._actorToUserId.clear()}}function o(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxx-xxxx-xxxx-xxxx".replace(/x/g,()=>Math.floor(16*Math.random()).toString(16))}function r(e,t){return t?(...t)=>{console.log(`[${e}]`,...t)}:(...e)=>{}}const a="posts",h="reactions",c="comments";class l extends t{constructor(e,t,o,r,a){super(),this._comments=new Map,this._unreadCount=0,this._active=!1,this.name=e,this._roomContext=t,this._localUser=o,this._options=r,this._log=a,this._presenceManager=new i(o.actorTokenId),this._postStore=new s(r.maxPostCache),this._reactionManager=new n}get posts(){return this._postStore.getAll()}get unreadCount(){return this._unreadCount}get active(){return this._active}createPost(e){const t={id:o(),userId:this._localUser.userId,username:this._localUser.username,avatar:this._localUser.avatar,content:e.content,media:e.media,data:e.data,likeCount:0,commentCount:0,likedByMe:!1,timestamp:Date.now(),status:"sending",isReplay:!1};return this._postStore.add(t),this.emit("postSent",t),this._roomContext.emit(a,{id:t.id,userId:t.userId,username:t.username,avatar:t.avatar,content:t.content,media:t.media,data:t.data,timestamp:t.timestamp},{echo:!1}),t.status="sent",t}getPosts(){return this._postStore.getAll()}likePost(e){const{likeCount:t,isNew:s}=this._reactionManager.like(e,this._localUser.userId);s&&(this._postStore.updateLikeCount(e,t,!0),this._roomContext.emit(h,{postId:e,userId:this._localUser.userId,type:"like",timestamp:Date.now()},{echo:!1}),this.emit("postLiked",{postId:e,userId:this._localUser.userId,likeCount:t}))}unlikePost(e){const{likeCount:t,wasLiked:s}=this._reactionManager.unlike(e,this._localUser.userId);s&&(this._postStore.updateLikeCount(e,t,!1),this._roomContext.emit(h,{postId:e,userId:this._localUser.userId,type:"unlike",timestamp:Date.now()},{echo:!1}),this.emit("postUnliked",{postId:e,userId:this._localUser.userId,likeCount:t}))}addComment(e,t){const s={id:o(),postId:e,userId:this._localUser.userId,username:this._localUser.username,avatar:this._localUser.avatar,text:t,timestamp:Date.now(),isReplay:!1};return this._comments.has(e)||this._comments.set(e,[]),this._comments.get(e).push(s),this._postStore.incrementCommentCount(e),this.emit("commentSent",s),this._roomContext.emit(c,{id:s.id,postId:e,userId:s.userId,username:s.username,avatar:s.avatar,text:s.text,timestamp:s.timestamp},{echo:!1}),s}getComments(e){return this._comments.get(e)??[]}markRead(){0!==this._unreadCount&&(this._unreadCount=0,this.emit("unreadChanged",{channel:this.name,count:0}))}getUsers(){return this._presenceManager.getAll()}_subscribe(){this._roomContext.subscribe(a),this._roomContext.subscribe(h),this._roomContext.subscribe(c),this._roomContext.on(a,(e,t)=>this._handleIncomingPost(e,t)),this._roomContext.on(h,e=>this._handleIncomingReaction(e)),this._roomContext.on(c,(e,t)=>this._handleIncomingComment(e,t))}_activate(){this._active=!0,this._markRead(),this._setPresence(),this._roomContext.fetchPresence().then(e=>{for(const t of e)if(t.presence){const e=this._presenceManager.addFromPresence(t.actorTokenId,t.presence,t.joinedAt);e&&this.emit("subscriberJoined",e)}}).catch(()=>{})}_deactivate(){this._active=!1,this._presenceManager.clear()}_handlePresenceJoin(e,t){const s=this._presenceManager.addFromPresence(e,t);s&&this.emit("subscriberJoined",s)}_handlePresenceLeave(e){const t=this._presenceManager.removeByActorId(e);t&&this.emit("subscriberLeft",t)}_handlePresenceUpdate(e,t){this._presenceManager.addFromPresence(e,t)}_handleReplayStart(e){this.emit("replayStart",{count:e})}_handleReplayEnd(e){this.emit("replayEnd",{replayed:e})}_updateLocalPresence(){this._setPresence()}_cleanup(){this._roomContext.unsubscribe(a),this._roomContext.unsubscribe(h),this._roomContext.unsubscribe(c),this._roomContext.off(a),this._roomContext.off(h),this._roomContext.off(c),this._postStore.clear(),this._reactionManager.clear(),this._comments.clear(),this._presenceManager.clear(),this.removeAllListeners()}_handleIncomingPost(e,t){const s=e,n={id:s.id,userId:s.userId,username:s.username,avatar:s.avatar,content:s.content,media:s.media,data:s.data,likeCount:0,commentCount:0,likedByMe:!1,timestamp:s.timestamp,status:"delivered",isReplay:t.isReplay??!1};this._postStore.add(n)&&(this.emit("postCreated",n),this._active||n.isReplay||(this._unreadCount++,this.emit("unreadChanged",{channel:this.name,count:this._unreadCount})))}_handleIncomingReaction(e){const t=e;if("like"===t.type){const{likeCount:e}=this._reactionManager.like(t.postId,t.userId),s=this._reactionManager.isLikedBy(t.postId,this._localUser.userId);this._postStore.updateLikeCount(t.postId,e,s),this.emit("postLiked",{postId:t.postId,userId:t.userId,likeCount:e})}else if("unlike"===t.type){const{likeCount:e}=this._reactionManager.unlike(t.postId,t.userId),s=this._reactionManager.isLikedBy(t.postId,this._localUser.userId);this._postStore.updateLikeCount(t.postId,e,s),this.emit("postUnliked",{postId:t.postId,userId:t.userId,likeCount:e})}}_handleIncomingComment(e,t){const s=e,n={id:s.id,postId:s.postId,userId:s.userId,username:s.username,avatar:s.avatar,text:s.text,timestamp:s.timestamp,isReplay:t.isReplay??!1};this._comments.has(n.postId)||this._comments.set(n.postId,[]),this._comments.get(n.postId).push(n),this._postStore.incrementCommentCount(n.postId),this.emit("commentAdded",n)}_markRead(){0!==this._unreadCount&&(this._unreadCount=0,this.emit("unreadChanged",{channel:this.name,count:0}))}_setPresence(){this._roomContext.setPresence({userId:this._localUser.userId,username:this._localUser.username,avatar:this._localUser.avatar,metadata:this._localUser.metadata})}}class d extends t{constructor(e,t){super(),this._client=null,this._localUser=null,this._channels=new Map,this._lobby=null,this._onlineUsers=new Map,this._actorToUserId=new Map,this._activeChannel=null,this._token=e,this._userId=o(),this._options={username:t.username,avatar:t.avatar,metadata:t.metadata,appName:t.appName??"feed",url:t.url,maxPostCache:t.maxPostCache??200,maxCommentCache:t.maxCommentCache??100,debug:t.debug??!1,reconnect:t.reconnect??!0,channels:t.channels??[]},this._log=r("NoLagFeed",this._options.debug)}get connected(){return this._client?.connected??!1}get localUser(){return this._localUser}get channels(){return this._channels}async connect(){const t={debug:this._options.debug,reconnect:this._options.reconnect};this._options.url&&(t.url=this._options.url),this._client=e(this._token,t),this._client.on("connect",()=>{this._channels.size>0&&(this._restoreChannels(),this.emit("reconnected"))}),this._client.on("disconnect",e=>this.emit("disconnected",e)),this._client.on("reconnect",()=>{}),this._client.on("error",e=>this.emit("error",e)),this._client.on("replay:start",e=>{for(const t of this._channels.values())t._handleReplayStart(e.count)}),this._client.on("replay:end",e=>{for(const t of this._channels.values())t._handleReplayEnd(e.replayed)}),await this._client.connect(),this._client.on("presence:join",e=>this._handleRoomPresenceJoin(e)),this._client.on("presence:leave",e=>this._handleRoomPresenceLeave(e)),this._client.on("presence:update",e=>this._handleRoomPresenceUpdate(e)),this._localUser={userId:this._userId,actorTokenId:this._client.actorId,username:this._options.username,avatar:this._options.avatar,metadata:this._options.metadata,joinedAt:Date.now(),isLocal:!0},await this._setupLobby();for(const e of this._options.channels)this._subscribeChannel(e);this.emit("connected"),setTimeout(()=>{this._lobby&&this._client?.connected&&this._lobby.fetchPresence().then(e=>this._hydrateOnlineUsers(e)).catch(()=>{})},2e3)}disconnect(){for(const e of[...this._channels.keys()])this.leaveChannel(e);this._lobby?.unsubscribe(),this._lobby=null,this._client?.disconnect(),this._client=null,this._onlineUsers.clear(),this._actorToUserId.clear(),this._localUser=null}joinChannel(e){if(!this._client||!this._localUser)throw new Error("Not connected — call connect() first");this._activeChannel&&this._activeChannel!==e&&this._channels.get(this._activeChannel)?._deactivate();let t=this._channels.get(e);return t||(t=this._subscribeChannel(e)),this._activeChannel=e,t._activate(),t}leaveChannel(e){const t=this._channels.get(e);t&&(t._cleanup(),this._channels.delete(e),this._activeChannel===e&&(this._activeChannel=null))}getOnlineUsers(){return Array.from(this._onlineUsers.values())}_subscribeChannel(e){if(!this._client||!this._localUser)throw new Error("Not connected");const t=this._client.setApp(this._options.appName).setRoom(e),s=new l(e,t,this._localUser,this._options,r(`FeedChannel:${e}`,this._options.debug));return this._channels.set(e,s),s._subscribe(),s}_handleRoomPresenceJoin(e){if(e.actorTokenId===this._localUser?.actorTokenId)return;const t=e.presence;if(!t?.userId)return;const s=this._presenceToUser(e.actorTokenId,t);this._actorToUserId.set(e.actorTokenId,s.userId),this._onlineUsers.has(s.userId)||(this._onlineUsers.set(s.userId,s),this.emit("userOnline",s));const n=this._activeChannel?this._channels.get(this._activeChannel):void 0;n&&n._handlePresenceJoin(e.actorTokenId,t)}_handleRoomPresenceLeave(e){if(e.actorTokenId===this._localUser?.actorTokenId)return;const t=this._activeChannel?this._channels.get(this._activeChannel):void 0;t&&t._handlePresenceLeave(e.actorTokenId)}_handleRoomPresenceUpdate(e){if(e.actorTokenId===this._localUser?.actorTokenId)return;const t=e.presence;if(!t?.userId)return;const s=this._activeChannel?this._channels.get(this._activeChannel):void 0;s&&s._handlePresenceUpdate(e.actorTokenId,t)}async _setupLobby(){if(!this._client)return;this._lobby=this._client.setApp(this._options.appName).setLobby("online");const e=e=>t=>{const s=t;"join"===e?this._handleLobbyJoin(s):"leave"===e&&this._handleLobbyLeave(s)};this._client.on("lobbyPresence:join",e("join")),this._client.on("lobbyPresence:leave",e("leave")),this._client.on("lobbyPresence:update",e("update"));try{const e=await this._lobby.subscribe();this._hydrateOnlineUsers(e)}catch{}}_handleLobbyJoin(e){const{actorId:t,data:s}=e;if(t===this._localUser?.actorTokenId)return;const n=s;if(!n.userId)return;const i=this._presenceToUser(t,n);this._actorToUserId.set(t,i.userId),this._onlineUsers.has(i.userId)||(this._onlineUsers.set(i.userId,i),this.emit("userOnline",i))}_handleLobbyLeave(e){const{actorId:t,data:s}=e;if(t===this._localUser?.actorTokenId)return;const n=s,i=n?.userId||this._actorToUserId.get(t);if(i){const e=this._onlineUsers.get(i);e&&(this._onlineUsers.delete(i),this._actorToUserId.delete(t),this.emit("userOffline",e))}}_hydrateOnlineUsers(e){for(const t of Object.keys(e))for(const s of Object.keys(e[t])){if(s===this._localUser?.actorTokenId)continue;const n=e[t][s],i=n?.presence??n;if(i?.userId){const e=this._presenceToUser(s,i);this._actorToUserId.set(s,e.userId),this._onlineUsers.has(e.userId)||(this._onlineUsers.set(e.userId,e),this.emit("userOnline",e))}}}_presenceToUser(e,t){return{userId:t.userId,actorTokenId:e,username:t.username,avatar:t.avatar,metadata:t.metadata,joinedAt:Date.now(),isLocal:!1}}_restoreChannels(){if(this._activeChannel){const e=this._channels.get(this._activeChannel);e&&e._updateLocalPresence()}this._lobby?.fetchPresence().then(e=>{this._onlineUsers.clear(),this._actorToUserId.clear(),this._hydrateOnlineUsers(e)}).catch(()=>{})}}export{t as EventEmitter,l as FeedChannel,d as NoLagFeed};
|
|
1
|
+
class e{constructor(){this._handlers=new Map}on(e,t){return this._handlers.has(e)||this._handlers.set(e,new Set),this._handlers.get(e).add(t),this}off(e,t){return t?this._handlers.get(e)?.delete(t):this._handlers.delete(e),this}removeAllListeners(){return this._handlers.clear(),this}emit(e,...t){const s=this._handlers.get(e);if(s)for(const n of s)try{n(...t)}catch(t){console.error(`Error in ${String(e)} handler:`,t)}}listenerCount(e){return this._handlers.get(e)?.size??0}}class t{constructor(e){this._posts=[],this._ids=new Set,this._maxSize=e}add(e){if(this._ids.has(e.id))return!1;for(this._ids.add(e.id),this._posts.push(e),this._posts.length>1&&e.timestamp<this._posts[this._posts.length-2].timestamp&&this._posts.sort((e,t)=>e.timestamp-t.timestamp);this._posts.length>this._maxSize;){const e=this._posts.shift();this._ids.delete(e.id)}return!0}get(e){return this._posts.find(t=>t.id===e)}getAll(){return[...this._posts]}updateLikeCount(e,t,s){const n=this._posts.find(t=>t.id===e);n&&(n.likeCount=t,n.likedByMe=s)}incrementCommentCount(e){const t=this._posts.find(t=>t.id===e);t&&t.commentCount++}has(e){return this._ids.has(e)}get size(){return this._posts.length}clear(){this._posts=[],this._ids.clear()}}class s{constructor(){this._likes=new Map}like(e,t){this._likes.has(e)||this._likes.set(e,new Set);const s=this._likes.get(e),n=!s.has(t);return s.add(t),{postId:e,likeCount:s.size,isNew:n}}unlike(e,t){const s=this._likes.get(e);if(!s)return{postId:e,likeCount:0,wasLiked:!1};const n=s.has(t);return s.delete(t),{postId:e,likeCount:s.size,wasLiked:n}}isLikedBy(e,t){return this._likes.get(e)?.has(t)??!1}getLikeCount(e){return this._likes.get(e)?.size??0}clear(){this._likes.clear()}}class n{constructor(e){this._users=new Map,this._actorToUserId=new Map,this._localActorId=e}addFromPresence(e,t,s){if(e===this._localActorId)return null;const n=this._actorToUserId.get(e),i=t.userId||n||e,o={userId:i,actorTokenId:e,username:t.username,avatar:t.avatar,metadata:t.metadata,joinedAt:s||Date.now(),isLocal:!1};return this._users.set(i,o),this._actorToUserId.set(e,i),o}removeByActorId(e){if(e===this._localActorId)return null;const t=this._actorToUserId.get(e);if(!t)return null;const s=this._users.get(t)||null;return this._users.delete(t),this._actorToUserId.delete(e),s}getUser(e){return this._users.get(e)}getUserByActorId(e){const t=this._actorToUserId.get(e);return t?this._users.get(t):void 0}getAll(){return Array.from(this._users.values())}get users(){return this._users}clear(){this._users.clear(),this._actorToUserId.clear()}}function i(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxx-xxxx-xxxx-xxxx".replace(/x/g,()=>Math.floor(16*Math.random()).toString(16))}function o(e,t){return t?(...t)=>{console.log(`[${e}]`,...t)}:(...e)=>{}}const r=new WeakMap;const a="posts",h="reactions",c="comments";class l extends e{constructor(e,i,o,r,a,h){super(),this._comments=new Map,this._unreadCount=0,this._active=!1,this._onPostsRef=null,this._onReactionsRef=null,this._onCommentsRef=null,this.name=e,this._roomContext=i,this._localUser=o,this._options=r,this._log=a,this._isConnected=h,this._presenceManager=new n(o.actorTokenId),this._postStore=new t(r.maxPostCache),this._reactionManager=new s}get posts(){return this._postStore.getAll()}get unreadCount(){return this._unreadCount}get active(){return this._active}createPost(e){const t={id:i(),userId:this._localUser.userId,username:this._localUser.username,avatar:this._localUser.avatar,content:e.content,media:e.media,data:e.data,likeCount:0,commentCount:0,likedByMe:!1,timestamp:Date.now(),status:"sending",isReplay:!1};return this._postStore.add(t),this.emit("postSent",t),this._roomContext.emit(a,{id:t.id,userId:t.userId,username:t.username,avatar:t.avatar,content:t.content,media:t.media,data:t.data,timestamp:t.timestamp},{echo:!1}),t.status="sent",t}getPosts(){return this._postStore.getAll()}likePost(e){const{likeCount:t,isNew:s}=this._reactionManager.like(e,this._localUser.userId);s&&(this._postStore.updateLikeCount(e,t,!0),this._roomContext.emit(h,{postId:e,userId:this._localUser.userId,type:"like",timestamp:Date.now()},{echo:!1}),this.emit("postLiked",{postId:e,userId:this._localUser.userId,likeCount:t}))}unlikePost(e){const{likeCount:t,wasLiked:s}=this._reactionManager.unlike(e,this._localUser.userId);s&&(this._postStore.updateLikeCount(e,t,!1),this._roomContext.emit(h,{postId:e,userId:this._localUser.userId,type:"unlike",timestamp:Date.now()},{echo:!1}),this.emit("postUnliked",{postId:e,userId:this._localUser.userId,likeCount:t}))}addComment(e,t){const s={id:i(),postId:e,userId:this._localUser.userId,username:this._localUser.username,avatar:this._localUser.avatar,text:t,timestamp:Date.now(),isReplay:!1};return this._comments.has(e)||this._comments.set(e,[]),this._comments.get(e).push(s),this._postStore.incrementCommentCount(e),this.emit("commentSent",s),this._roomContext.emit(c,{id:s.id,postId:e,userId:s.userId,username:s.username,avatar:s.avatar,text:s.text,timestamp:s.timestamp},{echo:!1}),s}getComments(e){return this._comments.get(e)??[]}markRead(){0!==this._unreadCount&&(this._unreadCount=0,this.emit("unreadChanged",{channel:this.name,count:0}))}getUsers(){return this._presenceManager.getAll()}_subscribe(){this._log("Channel subscribe:",this.name),this._roomContext.subscribe(a),this._roomContext.subscribe(h),this._roomContext.subscribe(c),this._onPostsRef=(e,t)=>{this._handleIncomingPost(e,t)},this._roomContext.on(a,this._onPostsRef),this._onReactionsRef=e=>{this._handleIncomingReaction(e)},this._roomContext.on(h,this._onReactionsRef),this._onCommentsRef=(e,t)=>{this._handleIncomingComment(e,t)},this._roomContext.on(c,this._onCommentsRef)}_activate(){this._active=!0,this._markRead(),this._setPresence(),this._roomContext.fetchPresence().then(e=>{for(const t of e)if(t.presence){const e=this._presenceManager.addFromPresence(t.actorTokenId,t.presence,t.joinedAt);e&&this.emit("subscriberJoined",e)}}).catch(()=>{})}_deactivate(){this._active=!1,this._presenceManager.clear()}_handlePresenceJoin(e,t){const s=this._presenceManager.addFromPresence(e,t);s&&this.emit("subscriberJoined",s)}_handlePresenceLeave(e){const t=this._presenceManager.removeByActorId(e);t&&this.emit("subscriberLeft",t)}_handlePresenceUpdate(e,t){this._presenceManager.addFromPresence(e,t)}_handleReplayStart(e){this.emit("replayStart",{count:e})}_handleReplayEnd(e){this.emit("replayEnd",{replayed:e})}_updateLocalPresence(){this._setPresence()}_cleanup(){this._log("Channel cleanup:",this.name),this._isConnected()&&(this._roomContext.unsubscribe(a),this._roomContext.unsubscribe(h),this._roomContext.unsubscribe(c)),this._onPostsRef&&this._roomContext.off(a,this._onPostsRef),this._onReactionsRef&&this._roomContext.off(h,this._onReactionsRef),this._onCommentsRef&&this._roomContext.off(c,this._onCommentsRef),this._onPostsRef=null,this._onReactionsRef=null,this._onCommentsRef=null,this._postStore.clear(),this._reactionManager.clear(),this._comments.clear(),this._presenceManager.clear(),this.removeAllListeners()}_handleIncomingPost(e,t){const s=e,n={id:s.id,userId:s.userId,username:s.username,avatar:s.avatar,content:s.content,media:s.media,data:s.data,likeCount:0,commentCount:0,likedByMe:!1,timestamp:s.timestamp,status:"delivered",isReplay:t.isReplay??!1};this._postStore.add(n)&&(this.emit("postCreated",n),this._active||n.isReplay||(this._unreadCount++,this.emit("unreadChanged",{channel:this.name,count:this._unreadCount})))}_handleIncomingReaction(e){const t=e;if("like"===t.type){const{likeCount:e}=this._reactionManager.like(t.postId,t.userId),s=this._reactionManager.isLikedBy(t.postId,this._localUser.userId);this._postStore.updateLikeCount(t.postId,e,s),this.emit("postLiked",{postId:t.postId,userId:t.userId,likeCount:e})}else if("unlike"===t.type){const{likeCount:e}=this._reactionManager.unlike(t.postId,t.userId),s=this._reactionManager.isLikedBy(t.postId,this._localUser.userId);this._postStore.updateLikeCount(t.postId,e,s),this.emit("postUnliked",{postId:t.postId,userId:t.userId,likeCount:e})}}_handleIncomingComment(e,t){const s=e,n={id:s.id,postId:s.postId,userId:s.userId,username:s.username,avatar:s.avatar,text:s.text,timestamp:s.timestamp,isReplay:t.isReplay??!1};this._comments.has(n.postId)||this._comments.set(n.postId,[]),this._comments.get(n.postId).push(n),this._postStore.incrementCommentCount(n.postId),this.emit("commentAdded",n)}_markRead(){0!==this._unreadCount&&(this._unreadCount=0,this.emit("unreadChanged",{channel:this.name,count:0}))}_setPresence(){this._roomContext.setPresence({userId:this._localUser.userId,username:this._localUser.username,avatar:this._localUser.avatar,metadata:this._localUser.metadata,__scope:this._options.appName})}}class _ extends e{constructor(e){if(super(),this._localUser=null,this._channels=new Map,this._lobby=null,this._onlineUsers=new Map,this._actorToUserId=new Map,this._activeChannel=null,this._epoch=0,this._detached=!1,this._isReady=!1,this._lobbyRefreshTimer=null,this._onConnectRef=()=>this._onConnect(),this._onDisconnectRef=e=>{this._log("Disconnected:",e),this.emit("disconnected",e)},this._onReconnectRef=()=>{this._log("Reconnecting..."),this.emit("reconnecting")},this._onErrorRef=e=>{this._log("Error:",e),this.emit("error",e)},this._onReplayStartRef=e=>{const t=e;for(const e of this._channels.values())e._handleReplayStart(t.count)},this._onReplayEndRef=e=>{const t=e;for(const e of this._channels.values())e._handleReplayEnd(t.replayed)},this._onPresenceJoinRef=e=>this._handleRoomPresenceJoin(e),this._onPresenceLeaveRef=e=>this._handleRoomPresenceLeave(e),this._onPresenceUpdateRef=e=>this._handleRoomPresenceUpdate(e),this._onLobbyJoinRef=e=>this._handleLobbyJoin(e),this._onLobbyLeaveRef=e=>this._handleLobbyLeave(e),this._onLobbyUpdateRef=e=>this._handleLobbyUpdate(e),!e?.client)throw new TypeError("NoLagFeed requires an injected NoLag client: new NoLagFeed({ client, username, ... })");this._client=e.client,this._userId=i(),this._options={username:e.username,avatar:e.avatar,metadata:e.metadata,appName:e.appName??"feed",maxPostCache:e.maxPostCache??200,maxCommentCache:e.maxCommentCache??100,debug:e.debug??!1,channels:e.channels??[]},this._log=o("NoLagFeed",this._options.debug),this._readyPromise=new Promise((e,t)=>{this._readyResolve=e,this._readyReject=t}),this._readyPromise.catch(()=>{}),function(e,t,s){let n=r.get(e);n||(n=new Map,r.set(e,n));const i=n.get(t);i&&console.warn(`[${s}] Another wrapper (${i}) is already attached to this client for app "${t}". Use one wrapper per (client, app) — detach the other instance first.`),n.set(t,s)}(this._client,this._options.appName,"NoLagFeed"),this._client.on("connect",this._onConnectRef),this._client.on("disconnect",this._onDisconnectRef),this._client.on("reconnect",this._onReconnectRef),this._client.on("error",this._onErrorRef),this._client.on("replay:start",this._onReplayStartRef),this._client.on("replay:end",this._onReplayEndRef),this._client.on("presence:join",this._onPresenceJoinRef),this._client.on("presence:leave",this._onPresenceLeaveRef),this._client.on("presence:update",this._onPresenceUpdateRef),this._client.on("lobbyPresence:join",this._onLobbyJoinRef),this._client.on("lobbyPresence:leave",this._onLobbyLeaveRef),this._client.on("lobbyPresence:update",this._onLobbyUpdateRef),queueMicrotask(()=>{0===this._epoch&&!this._detached&&this._client.connected&&this._onConnect()})}get connected(){return!this._detached&&this._client.connected}get client(){return this._client}get localUser(){return this._localUser}get channels(){return this._channels}ready(){return this._readyPromise}detach(){if(!this._detached){this._log("Detaching..."),this._detached=!0,this._epoch++,this._lobbyRefreshTimer&&(clearTimeout(this._lobbyRefreshTimer),this._lobbyRefreshTimer=null),this._client.off("connect",this._onConnectRef),this._client.off("disconnect",this._onDisconnectRef),this._client.off("reconnect",this._onReconnectRef),this._client.off("error",this._onErrorRef),this._client.off("replay:start",this._onReplayStartRef),this._client.off("replay:end",this._onReplayEndRef),this._client.off("presence:join",this._onPresenceJoinRef),this._client.off("presence:leave",this._onPresenceLeaveRef),this._client.off("presence:update",this._onPresenceUpdateRef),this._client.off("lobbyPresence:join",this._onLobbyJoinRef),this._client.off("lobbyPresence:leave",this._onLobbyLeaveRef),this._client.off("lobbyPresence:update",this._onLobbyUpdateRef);for(const e of[...this._channels.keys()])this._channels.get(e)._cleanup(),this._channels.delete(e);if(this._activeChannel=null,this._lobby&&this._client.connected)try{this._lobby.unsubscribe()}catch{}var e,t;this._lobby=null,this._onlineUsers.clear(),this._actorToUserId.clear(),this._localUser=null,e=this._client,t=this._options.appName,r.get(e)?.delete(t),this._isReady||this._readyReject(new Error("NoLagFeed detached before ready"))}}_onConnect(){this._epoch++,this._runSetup(this._epoch)}async _runSetup(e){const t=()=>e!==this._epoch||this._detached;this._log(this._isReady?"Restoring after reconnect...":"Setting up..."),this._localUser?this._localUser.actorTokenId=this._client.actorId:(this._localUser={userId:this._userId,actorTokenId:this._client.actorId,username:this._options.username,avatar:this._options.avatar,metadata:this._options.metadata,joinedAt:Date.now(),isLocal:!0},this._log("Local user:",this._localUser.userId,"→",this._localUser.actorTokenId)),this._lobby||(this._lobby=this._client.setApp(this._options.appName).setLobby("online"));try{const e=await this._lobby.subscribe();if(t())return;this._diffHydrateOnlineUsers(e),this._log("Lobby subscribed, online users:",this._onlineUsers.size)}catch(e){if(t())return;this._log("Lobby subscription failed:",e)}if(this._isReady)this._activeChannel&&this._channels.get(this._activeChannel)?._updateLocalPresence();else for(const e of this._options.channels)this._subscribeChannelInternal(e);t()||(this._isReady?this.emit("reconnected"):(this._isReady=!0,this._readyResolve(),this.emit("connected")),this._scheduleLobbyRefresh(e))}_scheduleLobbyRefresh(e){this._lobbyRefreshTimer&&clearTimeout(this._lobbyRefreshTimer),this._lobbyRefreshTimer=setTimeout(()=>{this._lobbyRefreshTimer=null,e===this._epoch&&!this._detached&&this._client.connected&&this._lobby&&this._lobby.fetchPresence().then(t=>{e!==this._epoch||this._detached||this._diffHydrateOnlineUsers(t)}).catch(()=>{})},2e3)}joinChannel(e){if(this._assertUsable(),this._activeChannel&&this._activeChannel!==e){const e=this._channels.get(this._activeChannel);e&&e._deactivate()}let t=this._channels.get(e);return t||(t=this._subscribeChannelInternal(e)),this._activeChannel=e,t._activate(),t}leaveChannel(e){const t=this._channels.get(e);t&&(this._log("Leaving channel:",e),t._cleanup(),this._channels.delete(e),this._activeChannel===e&&(this._activeChannel=null))}getChannels(){return Array.from(this._channels.values())}getOnlineUsers(){return Array.from(this._onlineUsers.values())}updateProfile(e){if(this._localUser&&(void 0!==e.username&&(this._localUser.username=e.username,this._options.username=e.username),void 0!==e.avatar&&(this._localUser.avatar=e.avatar,this._options.avatar=e.avatar),void 0!==e.metadata&&(this._localUser.metadata={...this._localUser.metadata,...e.metadata},this._options.metadata=this._localUser.metadata),this._activeChannel)){const e=this._channels.get(this._activeChannel);e&&e._updateLocalPresence()}}_assertUsable(){if(this._detached)throw new Error("NoLagFeed has been detached — construct a new instance");if(!this._isReady||!this._localUser)throw new Error('NoLagFeed not ready — await ready() or the "connected" event')}_subscribeChannelInternal(e){this._log("Subscribing channel:",e);const t=this._client.setApp(this._options.appName).setRoom(e),s=new l(e,t,this._localUser,this._options,o(`FeedChannel:${e}`,this._options.debug),()=>this._client.connected);return this._channels.set(e,s),s._subscribe(),s}_foreignScope(e){const t=e?.__scope;return"string"==typeof t&&t!==this._options.appName}_handleRoomPresenceJoin(e){if(e.actorTokenId===this._localUser?.actorTokenId)return;const t=e.presence;if(!t?.userId||this._foreignScope(t))return;const s=this._presenceToUser(e.actorTokenId,t);this._actorToUserId.set(e.actorTokenId,s.userId),this._onlineUsers.has(s.userId)||(this._onlineUsers.set(s.userId,s),this.emit("userOnline",s));const n=this._activeChannel?this._channels.get(this._activeChannel):void 0;n&&n._handlePresenceJoin(e.actorTokenId,t)}_handleRoomPresenceLeave(e){if(e.actorTokenId===this._localUser?.actorTokenId)return;const t=this._activeChannel?this._channels.get(this._activeChannel):void 0;t&&t._handlePresenceLeave(e.actorTokenId)}_handleRoomPresenceUpdate(e){if(e.actorTokenId===this._localUser?.actorTokenId)return;const t=e.presence;if(!t?.userId||this._foreignScope(t))return;if(this._onlineUsers.has(t.userId)){const s=this._presenceToUser(e.actorTokenId,t);this._onlineUsers.set(s.userId,s)}const s=this._activeChannel?this._channels.get(this._activeChannel):void 0;s&&s._handlePresenceUpdate(e.actorTokenId,t)}_handleLobbyJoin(e){const{actorId:t,data:s}=e;if(t===this._localUser?.actorTokenId)return;const n=s;if(!n.userId||this._foreignScope(n))return;const i=this._presenceToUser(t,n);this._actorToUserId.set(t,i.userId),this._onlineUsers.has(i.userId)||(this._onlineUsers.set(i.userId,i),this.emit("userOnline",i))}_handleLobbyLeave(e){const{actorId:t,data:s}=e;if(t===this._localUser?.actorTokenId)return;const n=s;if(this._foreignScope(n))return;const i=n?.userId||this._actorToUserId.get(t)||this._findUserIdByActorId(t);if(i){const e=this._onlineUsers.get(i);e&&(this._onlineUsers.delete(i),this._actorToUserId.delete(t),this.emit("userOffline",e))}}_handleLobbyUpdate(e){const{actorId:t,data:s}=e;if(t===this._localUser?.actorTokenId)return;const n=s;if(!n.userId||this._foreignScope(n))return;const i=this._presenceToUser(t,n);this._onlineUsers.set(i.userId,i)}_diffHydrateOnlineUsers(e){const t=new Map,s=new Map;for(const n of Object.keys(e)){const i=e[n];for(const e of Object.keys(i)){if(e===this._localUser?.actorTokenId)continue;const n=i[e],o=n?.presence??n;o?.userId&&!this._foreignScope(o)&&(t.has(o.userId)||t.set(o.userId,this._presenceToUser(e,o)),s.set(e,o.userId))}}for(const[e,s]of[...this._onlineUsers])if(!t.has(e)){this._onlineUsers.delete(e);for(const[t,s]of[...this._actorToUserId])s===e&&this._actorToUserId.delete(t);this.emit("userOffline",s)}for(const[e,s]of t)this._onlineUsers.has(e)||(this._onlineUsers.set(e,s),this.emit("userOnline",s));for(const[e,t]of s)this._actorToUserId.set(e,t)}_presenceToUser(e,t){return{userId:t.userId,actorTokenId:e,username:t.username,avatar:t.avatar,metadata:t.metadata,joinedAt:Date.now(),isLocal:!1}}_findUserIdByActorId(e){for(const t of this._onlineUsers.values())if(t.actorTokenId===e)return t.userId}}export{e as EventEmitter,l as FeedChannel,_ as NoLagFeed};
|
|
2
2
|
//# sourceMappingURL=browser.js.map
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sources":["../src/EventEmitter.ts","../src/PostStore.ts","../src/ReactionManager.ts","../src/PresenceManager.ts","../src/utils.ts","../src/constants.ts","../src/FeedChannel.ts","../src/NoLagFeed.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["EventEmitter","constructor","this","_handlers","Map","on","event","handler","has","set","Set","get","add","off","delete","removeAllListeners","clear","emit","args","handlers","e","console","error","String","listenerCount","size","PostStore","maxSize","_posts","_ids","_maxSize","post","id","push","length","timestamp","sort","a","b","removed","shift","find","p","getAll","updateLikeCount","postId","count","likedByMe","likeCount","incrementCommentCount","commentCount","ReactionManager","_likes","like","userId","likers","isNew","unlike","wasLiked","isLikedBy","getLikeCount","PresenceManager","localActorId","_users","_actorToUserId","_localActorId","addFromPresence","actorTokenId","presence","joinedAt","existing","user","username","avatar","metadata","Date","now","isLocal","removeByActorId","getUser","getUserByActorId","undefined","Array","from","values","users","generateId","crypto","randomUUID","replace","Math","floor","random","toString","createLogger","prefix","enabled","log","_args","TOPIC_POSTS","TOPIC_REACTIONS","TOPIC_COMMENTS","FeedChannel","name","roomContext","localUser","options","super","_comments","_unreadCount","_active","_roomContext","_localUser","_options","_log","_presenceManager","_postStore","maxPostCache","_reactionManager","posts","unreadCount","active","createPost","opts","content","media","data","status","isReplay","echo","getPosts","likePost","type","unlikePost","addComment","text","comment","getComments","markRead","channel","getUsers","_subscribe","subscribe","meta","_handleIncomingPost","_handleIncomingReaction","_handleIncomingComment","_activate","_markRead","_setPresence","fetchPresence","then","actors","actor","catch","_deactivate","_handlePresenceJoin","presenceData","_handlePresenceLeave","_handlePresenceUpdate","_handleReplayStart","_handleReplayEnd","replayed","_updateLocalPresence","_cleanup","unsubscribe","raw","setPresence","NoLagFeed","token","_client","_channels","_lobby","_onlineUsers","_activeChannel","_token","_userId","appName","url","maxCommentCache","debug","reconnect","channels","connected","connect","clientOptions","NoLag","_restoreChannels","reason","ch","_handleRoomPresenceJoin","_handleRoomPresenceLeave","_handleRoomPresenceUpdate","actorId","_setupLobby","_subscribeChannel","setTimeout","s","_hydrateOnlineUsers","disconnect","keys","leaveChannel","joinChannel","Error","getOnlineUsers","setApp","setRoom","pd","_presenceToUser","room","setLobby","lh","_handleLobbyJoin","_handleLobbyLeave","state","roomId","Object"],"mappings":"4CAAaA,EAAb,WAAAC,GACUC,KAAAC,UAAY,IAAIC,GAmC1B,CAjCE,EAAAC,CAA6BC,EAAUC,GAKrC,OAJKL,KAAKC,UAAUK,IAAIF,IACtBJ,KAAKC,UAAUM,IAAIH,EAAO,IAAII,KAEhCR,KAAKC,UAAUQ,IAAIL,GAAQM,IAAIL,GACxBL,IACT,CAEA,GAAAW,CAA8BP,EAAUC,GAMtC,OALIA,EACFL,KAAKC,UAAUQ,IAAIL,IAAQQ,OAAOP,GAElCL,KAAKC,UAAUW,OAAOR,GAEjBJ,IACT,CAEA,kBAAAa,GAEE,OADAb,KAAKC,UAAUa,QACRd,IACT,CAEU,IAAAe,CAA+BX,KAAaY,GACpD,MAAMC,EAAWjB,KAAKC,UAAUQ,IAAIL,GACpC,GAAKa,EACL,IAAK,MAAMZ,KAAWY,EACpB,IAAMZ,KAAWW,EAAO,CAAE,MAAOE,GAAKC,QAAQC,MAAM,YAAYC,OAAOjB,cAAmBc,EAAI,CAElG,CAEA,aAAAI,CAAwClB,GACtC,OAAOJ,KAAKC,UAAUQ,IAAIL,IAAQmB,MAAQ,CAC5C,QC9BWC,EAKX,WAAAzB,CAAY0B,GAJJzB,KAAA0B,OAAqB,GACrB1B,KAAA2B,KAAO,IAAInB,IAIjBR,KAAK4B,SAAWH,CAClB,CAKA,GAAAf,CAAImB,GACF,GAAI7B,KAAK2B,KAAKrB,IAAIuB,EAAKC,IACrB,OAAO,EAeT,IAZA9B,KAAK2B,KAAKjB,IAAImB,EAAKC,IACnB9B,KAAK0B,OAAOK,KAAKF,GAIf7B,KAAK0B,OAAOM,OAAS,GACrBH,EAAKI,UAAYjC,KAAK0B,OAAO1B,KAAK0B,OAAOM,OAAS,GAAGC,WAErDjC,KAAK0B,OAAOQ,KAAK,CAACC,EAAGC,IAAMD,EAAEF,UAAYG,EAAEH,WAItCjC,KAAK0B,OAAOM,OAAShC,KAAK4B,UAAU,CACzC,MAAMS,EAAUrC,KAAK0B,OAAOY,QAC5BtC,KAAK2B,KAAKf,OAAOyB,EAAQP,GAC3B,CAEA,OAAO,CACT,CAKA,GAAArB,CAAIqB,GACF,OAAO9B,KAAK0B,OAAOa,KAAMC,GAAMA,EAAEV,KAAOA,EAC1C,CAKA,MAAAW,GACE,MAAO,IAAIzC,KAAK0B,OAClB,CAKA,eAAAgB,CAAgBC,EAAgBC,EAAeC,GAC7C,MAAMhB,EAAO7B,KAAK0B,OAAOa,KAAMC,GAAMA,EAAEV,KAAOa,GAC1Cd,IACFA,EAAKiB,UAAYF,EACjBf,EAAKgB,UAAYA,EAErB,CAKA,qBAAAE,CAAsBJ,GACpB,MAAMd,EAAO7B,KAAK0B,OAAOa,KAAMC,GAAMA,EAAEV,KAAOa,GAC1Cd,GACFA,EAAKmB,cAET,CAKA,GAAA1C,CAAIwB,GACF,OAAO9B,KAAK2B,KAAKrB,IAAIwB,EACvB,CAKA,QAAIP,GACF,OAAOvB,KAAK0B,OAAOM,MACrB,CAKA,KAAAlB,GACEd,KAAK0B,OAAS,GACd1B,KAAK2B,KAAKb,OACZ,QC5FWmC,EAAb,WAAAlD,GACUC,KAAAkD,OAAS,IAAIhD,GAkDvB,CA5CE,IAAAiD,CAAKR,EAAgBS,GACdpD,KAAKkD,OAAO5C,IAAIqC,IACnB3C,KAAKkD,OAAO3C,IAAIoC,EAAQ,IAAInC,KAE9B,MAAM6C,EAASrD,KAAKkD,OAAOzC,IAAIkC,GACzBW,GAASD,EAAO/C,IAAI8C,GAE1B,OADAC,EAAO3C,IAAI0C,GACJ,CAAET,SAAQG,UAAWO,EAAO9B,KAAM+B,QAC3C,CAMA,MAAAC,CAAOZ,EAAgBS,GACrB,MAAMC,EAASrD,KAAKkD,OAAOzC,IAAIkC,GAC/B,IAAKU,EACH,MAAO,CAAEV,SAAQG,UAAW,EAAGU,UAAU,GAE3C,MAAMA,EAAWH,EAAO/C,IAAI8C,GAE5B,OADAC,EAAOzC,OAAOwC,GACP,CAAET,SAAQG,UAAWO,EAAO9B,KAAMiC,WAC3C,CAKA,SAAAC,CAAUd,EAAgBS,GACxB,OAAOpD,KAAKkD,OAAOzC,IAAIkC,IAASrC,IAAI8C,KAAW,CACjD,CAKA,YAAAM,CAAaf,GACX,OAAO3C,KAAKkD,OAAOzC,IAAIkC,IAASpB,MAAQ,CAC1C,CAKA,KAAAT,GACEd,KAAKkD,OAAOpC,OACd,QClDW6C,EAKX,WAAA5D,CAAY6D,GAJJ5D,KAAA6D,OAAS,IAAI3D,IACbF,KAAA8D,eAAiB,IAAI5D,IAI3BF,KAAK+D,cAAgBH,CACvB,CAMA,eAAAI,CAAgBC,EAAsBC,EAA4BC,GAIhE,GAHgBF,IAAiBjE,KAAK+D,cAGzB,OAAO,KAEpB,MAAMK,EAAWpE,KAAK8D,eAAerD,IAAIwD,GACnCb,EAASc,EAASd,QAAUgB,GAAYH,EAExCI,EAAiB,CACrBjB,SACAa,eACAK,SAAUJ,EAASI,SACnBC,OAAQL,EAASK,OACjBC,SAAUN,EAASM,SACnBL,SAAUA,GAAYM,KAAKC,MAC3BC,SAAS,GAMX,OAHA3E,KAAK6D,OAAOtD,IAAI6C,EAAQiB,GACxBrE,KAAK8D,eAAevD,IAAI0D,EAAcb,GAE/BiB,CACT,CAMA,eAAAO,CAAgBX,GACd,GAAIA,IAAiBjE,KAAK+D,cAAe,OAAO,KAEhD,MAAMX,EAASpD,KAAK8D,eAAerD,IAAIwD,GACvC,IAAKb,EAAQ,OAAO,KAEpB,MAAMiB,EAAOrE,KAAK6D,OAAOpD,IAAI2C,IAAW,KAIxC,OAHApD,KAAK6D,OAAOjD,OAAOwC,GACnBpD,KAAK8D,eAAelD,OAAOqD,GAEpBI,CACT,CAKA,OAAAQ,CAAQzB,GACN,OAAOpD,KAAK6D,OAAOpD,IAAI2C,EACzB,CAKA,gBAAA0B,CAAiBb,GACf,MAAMb,EAASpD,KAAK8D,eAAerD,IAAIwD,GACvC,OAAOb,EAASpD,KAAK6D,OAAOpD,IAAI2C,QAAU2B,CAC5C,CAKA,MAAAtC,GACE,OAAOuC,MAAMC,KAAKjF,KAAK6D,OAAOqB,SAChC,CAKA,SAAIC,GACF,OAAOnF,KAAK6D,MACd,CAKA,KAAA/C,GACEd,KAAK6D,OAAO/C,QACZd,KAAK8D,eAAehD,OACtB,WC/FcsE,IACd,MAAsB,oBAAXC,QAAuD,mBAAtBA,OAAOC,WAC1CD,OAAOC,aAET,sBAAsBC,QAAQ,KAAM,IAAMC,KAAKC,MAAsB,GAAhBD,KAAKE,UAAeC,SAAS,IAC3F,CAEM,SAAUC,EAAaC,EAAgBC,GAC3C,OAAKA,EACE,IAAI9E,KAAsBG,QAAQ4E,IAAI,IAAIF,QAAc7E,IADxC,IAAIgF,MAE7B,CCVO,MAGMC,EAAc,QACdC,EAAkB,YAClBC,EAAiB,WCOxB,MAAOC,UAAoBtG,EAc/B,WAAAC,CACEsG,EAAcC,EAA0BC,EACxCC,EAA8BT,GAE9BU,QATMzG,KAAA0G,UAAY,IAAIxG,IAEhBF,KAAA2G,aAAe,EACf3G,KAAA4G,SAAU,EAOhB5G,KAAKqG,KAAOA,EACZrG,KAAK6G,aAAeP,EACpBtG,KAAK8G,WAAaP,EAClBvG,KAAK+G,SAAWP,EAChBxG,KAAKgH,KAAOjB,EACZ/F,KAAKiH,iBAAmB,IAAItD,EAAgB4C,EAAUtC,cACtDjE,KAAKkH,WAAa,IAAI1F,EAAUgF,EAAQW,cACxCnH,KAAKoH,iBAAmB,IAAInE,CAC9B,CAEA,SAAIoE,GAAsB,OAAOrH,KAAKkH,WAAWzE,QAAU,CAC3D,eAAI6E,GAAwB,OAAOtH,KAAK2G,YAAc,CACtD,UAAIY,GAAoB,OAAOvH,KAAK4G,OAAS,CAE7C,UAAAY,CAAWC,GACT,MAAM5F,EAAiB,CACrBC,GAAIsD,IAAchC,OAAQpD,KAAK8G,WAAW1D,OAAQkB,SAAUtE,KAAK8G,WAAWxC,SAC5EC,OAAQvE,KAAK8G,WAAWvC,OAAQmD,QAASD,EAAKC,QAASC,MAAOF,EAAKE,MAAOC,KAAMH,EAAKG,KACrF9E,UAAW,EAAGE,aAAc,EAAGH,WAAW,EAAOZ,UAAWwC,KAAKC,MAAOmD,OAAQ,UAAWC,UAAU,GASvG,OAPA9H,KAAKkH,WAAWxG,IAAImB,GACpB7B,KAAKe,KAAK,WAAYc,GACtB7B,KAAK6G,aAAa9F,KAAKkF,EAAa,CAClCnE,GAAID,EAAKC,GAAIsB,OAAQvB,EAAKuB,OAAQkB,SAAUzC,EAAKyC,SAAUC,OAAQ1C,EAAK0C,OACxEmD,QAAS7F,EAAK6F,QAASC,MAAO9F,EAAK8F,MAAOC,KAAM/F,EAAK+F,KAAM3F,UAAWJ,EAAKI,WAC1E,CAAE8F,MAAM,IACXlG,EAAKgG,OAAS,OACPhG,CACT,CAEA,QAAAmG,GAAyB,OAAOhI,KAAKkH,WAAWzE,QAAU,CAE1D,QAAAwF,CAAStF,GACP,MAAMG,UAAEA,EAASQ,MAAEA,GAAUtD,KAAKoH,iBAAiBjE,KAAKR,EAAQ3C,KAAK8G,WAAW1D,QAC5EE,IACFtD,KAAKkH,WAAWxE,gBAAgBC,EAAQG,GAAW,GACnD9C,KAAK6G,aAAa9F,KAAKmF,EAAiB,CAAEvD,SAAQS,OAAQpD,KAAK8G,WAAW1D,OAAQ8E,KAAM,OAAQjG,UAAWwC,KAAKC,OAAS,CAAEqD,MAAM,IACjI/H,KAAKe,KAAK,YAAa,CAAE4B,SAAQS,OAAQpD,KAAK8G,WAAW1D,OAAQN,cAErE,CAEA,UAAAqF,CAAWxF,GACT,MAAMG,UAAEA,EAASU,SAAEA,GAAaxD,KAAKoH,iBAAiB7D,OAAOZ,EAAQ3C,KAAK8G,WAAW1D,QACjFI,IACFxD,KAAKkH,WAAWxE,gBAAgBC,EAAQG,GAAW,GACnD9C,KAAK6G,aAAa9F,KAAKmF,EAAiB,CAAEvD,SAAQS,OAAQpD,KAAK8G,WAAW1D,OAAQ8E,KAAM,SAAUjG,UAAWwC,KAAKC,OAAS,CAAEqD,MAAM,IACnI/H,KAAKe,KAAK,cAAe,CAAE4B,SAAQS,OAAQpD,KAAK8G,WAAW1D,OAAQN,cAEvE,CAEA,UAAAsF,CAAWzF,EAAgB0F,GACzB,MAAMC,EAAuB,CAC3BxG,GAAIsD,IAAczC,SAAQS,OAAQpD,KAAK8G,WAAW1D,OAAQkB,SAAUtE,KAAK8G,WAAWxC,SACpFC,OAAQvE,KAAK8G,WAAWvC,OAAQ8D,OAAMpG,UAAWwC,KAAKC,MAAOoD,UAAU,GAUzE,OARK9H,KAAK0G,UAAUpG,IAAIqC,IAAS3C,KAAK0G,UAAUnG,IAAIoC,EAAQ,IAC5D3C,KAAK0G,UAAUjG,IAAIkC,GAASZ,KAAKuG,GACjCtI,KAAKkH,WAAWnE,sBAAsBJ,GACtC3C,KAAKe,KAAK,cAAeuH,GACzBtI,KAAK6G,aAAa9F,KAAKoF,EAAgB,CACrCrE,GAAIwG,EAAQxG,GAAIa,SAAQS,OAAQkF,EAAQlF,OAAQkB,SAAUgE,EAAQhE,SAClEC,OAAQ+D,EAAQ/D,OAAQ8D,KAAMC,EAAQD,KAAMpG,UAAWqG,EAAQrG,WAC9D,CAAE8F,MAAM,IACJO,CACT,CAEA,WAAAC,CAAY5F,GACV,OAAO3C,KAAK0G,UAAUjG,IAAIkC,IAAW,EACvC,CAEA,QAAA6F,GAC4B,IAAtBxI,KAAK2G,eACP3G,KAAK2G,aAAe,EACpB3G,KAAKe,KAAK,gBAAiB,CAAE0H,QAASzI,KAAKqG,KAAMzD,MAAO,IAE5D,CAEA,QAAA8F,GAAyB,OAAO1I,KAAKiH,iBAAiBxE,QAAU,CAEhE,UAAAkG,GACE3I,KAAK6G,aAAa+B,UAAU3C,GAC5BjG,KAAK6G,aAAa+B,UAAU1C,GAC5BlG,KAAK6G,aAAa+B,UAAUzC,GAE5BnG,KAAK6G,aAAa1G,GAAG8F,EAAa,CAAC2B,EAAeiB,IAAsB7I,KAAK8I,oBAAoBlB,EAAMiB,IACvG7I,KAAK6G,aAAa1G,GAAG+F,EAAkB0B,GAAkB5H,KAAK+I,wBAAwBnB,IACtF5H,KAAK6G,aAAa1G,GAAGgG,EAAgB,CAACyB,EAAeiB,IAAsB7I,KAAKgJ,uBAAuBpB,EAAMiB,GAC/G,CAEA,SAAAI,GACEjJ,KAAK4G,SAAU,EACf5G,KAAKkJ,YACLlJ,KAAKmJ,eACLnJ,KAAK6G,aAAauC,gBAAgBC,KAAMC,IACtC,IAAK,MAAMC,KAASD,EAClB,GAAIC,EAAMrF,SAAU,CAClB,MAAMG,EAAOrE,KAAKiH,iBAAiBjD,gBAAgBuF,EAAMtF,aAAcsF,EAAMrF,SAA8BqF,EAAMpF,UAC7GE,GAAMrE,KAAKe,KAAK,mBAAoBsD,EAC1C,IAEDmF,MAAM,OACX,CAEA,WAAAC,GAAsBzJ,KAAK4G,SAAU,EAAO5G,KAAKiH,iBAAiBnG,OAAS,CAE3E,mBAAA4I,CAAoBzF,EAAsB0F,GACxC,MAAMtF,EAAOrE,KAAKiH,iBAAiBjD,gBAAgBC,EAAc0F,GAC7DtF,GAAMrE,KAAKe,KAAK,mBAAoBsD,EAC1C,CAEA,oBAAAuF,CAAqB3F,GACnB,MAAMI,EAAOrE,KAAKiH,iBAAiBrC,gBAAgBX,GAC/CI,GAAMrE,KAAKe,KAAK,iBAAkBsD,EACxC,CAEA,qBAAAwF,CAAsB5F,EAAsB0F,GAC1C3J,KAAKiH,iBAAiBjD,gBAAgBC,EAAc0F,EACtD,CAEA,kBAAAG,CAAmBlH,GAAuB5C,KAAKe,KAAK,cAAe,CAAE6B,SAAU,CAC/E,gBAAAmH,CAAiBC,GAA0BhK,KAAKe,KAAK,YAAa,CAAEiJ,YAAa,CAEjF,oBAAAC,GAA+BjK,KAAKmJ,cAAgB,CAEpD,QAAAe,GACElK,KAAK6G,aAAasD,YAAYlE,GAC9BjG,KAAK6G,aAAasD,YAAYjE,GAC9BlG,KAAK6G,aAAasD,YAAYhE,GAC9BnG,KAAK6G,aAAalG,IAAIsF,GACtBjG,KAAK6G,aAAalG,IAAIuF,GACtBlG,KAAK6G,aAAalG,IAAIwF,GACtBnG,KAAKkH,WAAWpG,QAChBd,KAAKoH,iBAAiBtG,QACtBd,KAAK0G,UAAU5F,QACfd,KAAKiH,iBAAiBnG,QACtBd,KAAKa,oBACP,CAEQ,mBAAAiI,CAAoBlB,EAAeiB,GACzC,MAAMuB,EAAMxC,EACN/F,EAAiB,CACrBC,GAAIsI,EAAItI,GAAcsB,OAAQgH,EAAIhH,OAAkBkB,SAAU8F,EAAI9F,SAClEC,OAAQ6F,EAAI7F,OAA8BmD,QAAS0C,EAAI1C,QACvDC,MAAOyC,EAAIzC,MAAcC,KAAMwC,EAAIxC,KACnC9E,UAAW,EAAGE,aAAc,EAAGH,WAAW,EAC1CZ,UAAWmI,EAAInI,UAAqB4F,OAAQ,YAAaC,SAAUe,EAAKf,WAAY,GAElF9H,KAAKkH,WAAWxG,IAAImB,KACtB7B,KAAKe,KAAK,cAAec,GACpB7B,KAAK4G,SAAY/E,EAAKiG,WACzB9H,KAAK2G,eACL3G,KAAKe,KAAK,gBAAiB,CAAE0H,QAASzI,KAAKqG,KAAMzD,MAAO5C,KAAK2G,gBAGnE,CAEQ,uBAAAoC,CAAwBnB,GAC9B,MAAMwC,EAAMxC,EACZ,GAAiB,SAAbwC,EAAIlC,KAAiB,CACvB,MAAMpF,UAAEA,GAAc9C,KAAKoH,iBAAiBjE,KAAKiH,EAAIzH,OAAQyH,EAAIhH,QAC3DP,EAAY7C,KAAKoH,iBAAiB3D,UAAU2G,EAAIzH,OAAQ3C,KAAK8G,WAAW1D,QAC9EpD,KAAKkH,WAAWxE,gBAAgB0H,EAAIzH,OAAQG,EAAWD,GACvD7C,KAAKe,KAAK,YAAa,CAAE4B,OAAQyH,EAAIzH,OAAQS,OAAQgH,EAAIhH,OAAQN,aACnE,MAAO,GAAiB,WAAbsH,EAAIlC,KAAmB,CAChC,MAAMpF,UAAEA,GAAc9C,KAAKoH,iBAAiB7D,OAAO6G,EAAIzH,OAAQyH,EAAIhH,QAC7DP,EAAY7C,KAAKoH,iBAAiB3D,UAAU2G,EAAIzH,OAAQ3C,KAAK8G,WAAW1D,QAC9EpD,KAAKkH,WAAWxE,gBAAgB0H,EAAIzH,OAAQG,EAAWD,GACvD7C,KAAKe,KAAK,cAAe,CAAE4B,OAAQyH,EAAIzH,OAAQS,OAAQgH,EAAIhH,OAAQN,aACrE,CACF,CAEQ,sBAAAkG,CAAuBpB,EAAeiB,GAC5C,MAAMuB,EAAMxC,EACNU,EAAuB,CAC3BxG,GAAIsI,EAAItI,GAAca,OAAQyH,EAAIzH,OAAkBS,OAAQgH,EAAIhH,OAChEkB,SAAU8F,EAAI9F,SAAoBC,OAAQ6F,EAAI7F,OAC9C8D,KAAM+B,EAAI/B,KAAgBpG,UAAWmI,EAAInI,UAAqB6F,SAAUe,EAAKf,WAAY,GAEtF9H,KAAK0G,UAAUpG,IAAIgI,EAAQ3F,SAAS3C,KAAK0G,UAAUnG,IAAI+H,EAAQ3F,OAAQ,IAC5E3C,KAAK0G,UAAUjG,IAAI6H,EAAQ3F,QAASZ,KAAKuG,GACzCtI,KAAKkH,WAAWnE,sBAAsBuF,EAAQ3F,QAC9C3C,KAAKe,KAAK,eAAgBuH,EAC5B,CAEQ,SAAAY,GACoB,IAAtBlJ,KAAK2G,eAAsB3G,KAAK2G,aAAe,EAAG3G,KAAKe,KAAK,gBAAiB,CAAE0H,QAASzI,KAAKqG,KAAMzD,MAAO,IAChH,CAEQ,YAAAuG,GACNnJ,KAAK6G,aAAawD,YAAY,CAC5BjH,OAAQpD,KAAK8G,WAAW1D,OAAQkB,SAAUtE,KAAK8G,WAAWxC,SAC1DC,OAAQvE,KAAK8G,WAAWvC,OAAQC,SAAUxE,KAAK8G,WAAWtC,UAE9D,ECtNI,MAAO8F,UAAkBxK,EAa7B,WAAAC,CAAYwK,EAAe/D,GACzBC,QAXMzG,KAAAwK,QAA8B,KAC9BxK,KAAA8G,WAA8B,KAC9B9G,KAAAyK,UAAY,IAAIvK,IAChBF,KAAA0K,OAA8B,KAC9B1K,KAAA2K,aAAe,IAAIzK,IACnBF,KAAA8D,eAAiB,IAAI5D,IAErBF,KAAA4K,eAAgC,KAKtC5K,KAAK6K,OAASN,EACdvK,KAAK8K,QAAU1F,IACfpF,KAAK+G,SAAW,CACdzC,SAAUkC,EAAQlC,SAAUC,OAAQiC,EAAQjC,OAAQC,SAAUgC,EAAQhC,SACtEuG,QAASvE,EAAQuE,SF7BS,OE6BoBC,IAAKxE,EAAQwE,IAC3D7D,aAAcX,EAAQW,cF7BU,IE8BhC8D,gBAAiBzE,EAAQyE,iBF7BU,IE8BnCC,MAAO1E,EAAQ0E,QAAS,EAAOC,UAAW3E,EAAQ2E,YAAa,EAAMC,SAAU5E,EAAQ4E,UAAY,IAErGpL,KAAKgH,KAAOpB,EAAa,YAAa5F,KAAK+G,SAASmE,MACtD,CAEA,aAAIG,GAAuB,OAAOrL,KAAKwK,SAASa,YAAa,CAAO,CACpE,aAAI9E,GAA+B,OAAOvG,KAAK8G,UAAY,CAC3D,YAAIsE,GAAuC,OAAOpL,KAAKyK,SAAW,CAElE,aAAMa,GACJ,MAAMC,EAA8B,CAAEL,MAAOlL,KAAK+G,SAASmE,MAAOC,UAAWnL,KAAK+G,SAASoE,WACvFnL,KAAK+G,SAASiE,MAAKO,EAAcP,IAAMhL,KAAK+G,SAASiE,KACzDhL,KAAKwK,QAAUgB,EAAMxL,KAAK6K,OAAQU,GAElCvL,KAAKwK,QAAQrK,GAAG,UAAW,KAAYH,KAAKyK,UAAUlJ,KAAO,IAAKvB,KAAKyL,mBAAoBzL,KAAKe,KAAK,kBACrGf,KAAKwK,QAAQrK,GAAG,aAAeuL,GAAmB1L,KAAKe,KAAK,eAAgB2K,IAC5E1L,KAAKwK,QAAQrK,GAAG,YAAa,QAC7BH,KAAKwK,QAAQrK,GAAG,QAAUiB,GAAiBpB,KAAKe,KAAK,QAASK,IAC9DpB,KAAKwK,QAAQrK,GAAG,eAAiByH,IAAoB,IAAK,MAAM+D,KAAM3L,KAAKyK,UAAUvF,SAAUyG,EAAG7B,mBAAoBlC,EAAahF,SACnI5C,KAAKwK,QAAQrK,GAAG,aAAeyH,IAAoB,IAAK,MAAM+D,KAAM3L,KAAKyK,UAAUvF,SAAUyG,EAAG5B,iBAAkBnC,EAAaoC,kBAEzHhK,KAAKwK,QAAQc,UAEnBtL,KAAKwK,QAAQrK,GAAG,gBAAkByH,GAAwB5H,KAAK4L,wBAAwBhE,IACvF5H,KAAKwK,QAAQrK,GAAG,iBAAmByH,GAAwB5H,KAAK6L,yBAAyBjE,IACzF5H,KAAKwK,QAAQrK,GAAG,kBAAoByH,GAAwB5H,KAAK8L,0BAA0BlE,IAE3F5H,KAAK8G,WAAa,CAChB1D,OAAQpD,KAAK8K,QAAS7G,aAAcjE,KAAKwK,QAAQuB,QAAUzH,SAAUtE,KAAK+G,SAASzC,SACnFC,OAAQvE,KAAK+G,SAASxC,OAAQC,SAAUxE,KAAK+G,SAASvC,SAAUL,SAAUM,KAAKC,MAAOC,SAAS,SAG3F3E,KAAKgM,cACX,IAAK,MAAM3F,KAAQrG,KAAK+G,SAASqE,SAAUpL,KAAKiM,kBAAkB5F,GAClErG,KAAKe,KAAK,aACVmL,WAAW,KAAYlM,KAAK0K,QAAU1K,KAAKwK,SAASa,WAAWrL,KAAK0K,OAAOtB,gBAAgBC,KAAM8C,GAAMnM,KAAKoM,oBAAoBD,IAAI3C,MAAM,SAAc,IAC1J,CAEA,UAAA6C,GACE,IAAK,MAAMhG,IAAQ,IAAIrG,KAAKyK,UAAU6B,QAAStM,KAAKuM,aAAalG,GACjErG,KAAK0K,QAAQP,cAAenK,KAAK0K,OAAS,KAC1C1K,KAAKwK,SAAS6B,aAAcrM,KAAKwK,QAAU,KAC3CxK,KAAK2K,aAAa7J,QAASd,KAAK8D,eAAehD,QAASd,KAAK8G,WAAa,IAC5E,CAEA,WAAA0F,CAAYnG,GACV,IAAKrG,KAAKwK,UAAYxK,KAAK8G,WAAY,MAAM,IAAI2F,MAAM,wCACnDzM,KAAK4K,gBAAkB5K,KAAK4K,iBAAmBvE,GAAQrG,KAAKyK,UAAUhK,IAAIT,KAAK4K,iBAAiBnB,cACpG,IAAIkC,EAAK3L,KAAKyK,UAAUhK,IAAI4F,GAI5B,OAHKsF,IAAIA,EAAK3L,KAAKiM,kBAAkB5F,IACrCrG,KAAK4K,eAAiBvE,EACtBsF,EAAG1C,YACI0C,CACT,CAEA,YAAAY,CAAalG,GACX,MAAMsF,EAAK3L,KAAKyK,UAAUhK,IAAI4F,GACzBsF,IACLA,EAAGzB,WACHlK,KAAKyK,UAAU7J,OAAOyF,GAClBrG,KAAK4K,iBAAmBvE,IAAMrG,KAAK4K,eAAiB,MAC1D,CAEA,cAAA8B,GAA+B,OAAO1H,MAAMC,KAAKjF,KAAK2K,aAAazF,SAAW,CAEtE,iBAAA+G,CAAkB5F,GACxB,IAAKrG,KAAKwK,UAAYxK,KAAK8G,WAAY,MAAM,IAAI2F,MAAM,iBACvD,MAAMnG,EAActG,KAAKwK,QAAQmC,OAAO3M,KAAK+G,SAASgE,SAAS6B,QAAQvG,GACjEsF,EAAK,IAAIvF,EAAYC,EAAMC,EAAatG,KAAK8G,WAAY9G,KAAK+G,SAAUnB,EAAa,eAAeS,IAAQrG,KAAK+G,SAASmE,QAGhI,OAFAlL,KAAKyK,UAAUlK,IAAI8F,EAAMsF,GACzBA,EAAGhD,aACIgD,CACT,CAEQ,uBAAAC,CAAwBhE,GAC9B,GAAIA,EAAK3D,eAAiBjE,KAAK8G,YAAY7C,aAAc,OACzD,MAAM4I,EAAKjF,EAAK1D,SAChB,IAAK2I,GAAIzJ,OAAQ,OACjB,MAAMiB,EAAOrE,KAAK8M,gBAAgBlF,EAAK3D,aAAc4I,GACrD7M,KAAK8D,eAAevD,IAAIqH,EAAK3D,aAAcI,EAAKjB,QAC3CpD,KAAK2K,aAAarK,IAAI+D,EAAKjB,UAAWpD,KAAK2K,aAAapK,IAAI8D,EAAKjB,OAAQiB,GAAOrE,KAAKe,KAAK,aAAcsD,IAC7G,MAAM0I,EAAO/M,KAAK4K,eAAiB5K,KAAKyK,UAAUhK,IAAIT,KAAK4K,qBAAkB7F,EACzEgI,GAAMA,EAAKrD,oBAAoB9B,EAAK3D,aAAc4I,EACxD,CAEQ,wBAAAhB,CAAyBjE,GAC/B,GAAIA,EAAK3D,eAAiBjE,KAAK8G,YAAY7C,aAAc,OACzD,MAAM8I,EAAO/M,KAAK4K,eAAiB5K,KAAKyK,UAAUhK,IAAIT,KAAK4K,qBAAkB7F,EACzEgI,GAAMA,EAAKnD,qBAAqBhC,EAAK3D,aAC3C,CAEQ,yBAAA6H,CAA0BlE,GAChC,GAAIA,EAAK3D,eAAiBjE,KAAK8G,YAAY7C,aAAc,OACzD,MAAM4I,EAAKjF,EAAK1D,SAChB,IAAK2I,GAAIzJ,OAAQ,OACjB,MAAM2J,EAAO/M,KAAK4K,eAAiB5K,KAAKyK,UAAUhK,IAAIT,KAAK4K,qBAAkB7F,EACzEgI,GAAMA,EAAKlD,sBAAsBjC,EAAK3D,aAAc4I,EAC1D,CAEQ,iBAAMb,GACZ,IAAKhM,KAAKwK,QAAS,OACnBxK,KAAK0K,OAAS1K,KAAKwK,QAAQmC,OAAO3M,KAAK+G,SAASgE,SAASiC,SF/HrC,UEgIpB,MAAMC,EAAM/E,GAAuCN,IACjD,MAAM1G,EAAI0G,EACG,SAATM,EAAiBlI,KAAKkN,iBAAiBhM,GACzB,UAATgH,GAAkBlI,KAAKmN,kBAAkBjM,IAEpDlB,KAAKwK,QAAQrK,GAAG,qBAAsB8M,EAAG,SACzCjN,KAAKwK,QAAQrK,GAAG,sBAAuB8M,EAAG,UAC1CjN,KAAKwK,QAAQrK,GAAG,uBAAwB8M,EAAG,WAC3C,IAAM,MAAMd,QAAUnM,KAAK0K,OAAO9B,YAAa5I,KAAKoM,oBAAoBD,EAAI,CAAE,MAAO,CACvF,CAEQ,gBAAAe,CAAiB9M,GACvB,MAAM2L,QAAEA,EAAOnE,KAAEA,GAASxH,EAC1B,GAAI2L,IAAY/L,KAAK8G,YAAY7C,aAAc,OAC/C,MAAM4I,EAAKjF,EACX,IAAKiF,EAAGzJ,OAAQ,OAChB,MAAMiB,EAAOrE,KAAK8M,gBAAgBf,EAASc,GAC3C7M,KAAK8D,eAAevD,IAAIwL,EAAS1H,EAAKjB,QACjCpD,KAAK2K,aAAarK,IAAI+D,EAAKjB,UAAWpD,KAAK2K,aAAapK,IAAI8D,EAAKjB,OAAQiB,GAAOrE,KAAKe,KAAK,aAAcsD,GAC/G,CAEQ,iBAAA8I,CAAkB/M,GACxB,MAAM2L,QAAEA,EAAOnE,KAAEA,GAASxH,EAC1B,GAAI2L,IAAY/L,KAAK8G,YAAY7C,aAAc,OAC/C,MAAM4I,EAAKjF,EACLxE,EAASyJ,GAAIzJ,QAAUpD,KAAK8D,eAAerD,IAAIsL,GACrD,GAAI3I,EAAQ,CAAE,MAAMiB,EAAOrE,KAAK2K,aAAalK,IAAI2C,GAAaiB,IAAQrE,KAAK2K,aAAa/J,OAAOwC,GAASpD,KAAK8D,eAAelD,OAAOmL,GAAU/L,KAAKe,KAAK,cAAesD,GAAS,CACjL,CAEQ,mBAAA+H,CAAoBgB,GAC1B,IAAK,MAAMC,KAAUC,OAAOhB,KAAKc,GAC/B,IAAK,MAAMrB,KAAWuB,OAAOhB,KAAKc,EAAMC,IAAU,CAChD,GAAItB,IAAY/L,KAAK8G,YAAY7C,aAAc,SAC/C,MAAMmG,EAAMgD,EAAMC,GAAQtB,GACpBc,EAAMzC,GAAKlG,UAAYkG,EAC7B,GAAIyC,GAAIzJ,OAAQ,CACd,MAAMiB,EAAOrE,KAAK8M,gBAAgBf,EAASc,GAC3C7M,KAAK8D,eAAevD,IAAIwL,EAAS1H,EAAKjB,QACjCpD,KAAK2K,aAAarK,IAAI+D,EAAKjB,UAAWpD,KAAK2K,aAAapK,IAAI8D,EAAKjB,OAAQiB,GAAOrE,KAAKe,KAAK,aAAcsD,GAC/G,CACF,CAEJ,CAEQ,eAAAyI,CAAgB7I,EAAsB2D,GAC5C,MAAO,CAAExE,OAAQwE,EAAKxE,OAAQa,eAAcK,SAAUsD,EAAKtD,SAAUC,OAAQqD,EAAKrD,OAAQC,SAAUoD,EAAKpD,SAAUL,SAAUM,KAAKC,MAAOC,SAAS,EACpJ,CAEQ,gBAAA8G,GACN,GAAIzL,KAAK4K,eAAgB,CAAE,MAAMe,EAAK3L,KAAKyK,UAAUhK,IAAIT,KAAK4K,gBAAqBe,GAAIA,EAAG1B,sBAAwB,CAClHjK,KAAK0K,QAAQtB,gBAAgBC,KAAM8C,IAAQnM,KAAK2K,aAAa7J,QAASd,KAAK8D,eAAehD,QAASd,KAAKoM,oBAAoBD,KAAO3C,MAAM,OAC3I"}
|
|
1
|
+
{"version":3,"file":"browser.js","sources":["../src/EventEmitter.ts","../src/PostStore.ts","../src/ReactionManager.ts","../src/PresenceManager.ts","../src/utils.ts","../src/constants.ts","../src/FeedChannel.ts","../src/NoLagFeed.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["EventEmitter","constructor","this","_handlers","Map","on","event","handler","has","set","Set","get","add","off","delete","removeAllListeners","clear","emit","args","handlers","e","console","error","String","listenerCount","size","PostStore","maxSize","_posts","_ids","_maxSize","post","id","push","length","timestamp","sort","a","b","removed","shift","find","p","getAll","updateLikeCount","postId","count","likedByMe","likeCount","incrementCommentCount","commentCount","ReactionManager","_likes","like","userId","likers","isNew","unlike","wasLiked","isLikedBy","getLikeCount","PresenceManager","localActorId","_users","_actorToUserId","_localActorId","addFromPresence","actorTokenId","presence","joinedAt","existing","user","username","avatar","metadata","Date","now","isLocal","removeByActorId","getUser","getUserByActorId","undefined","Array","from","values","users","generateId","crypto","randomUUID","replace","Math","floor","random","toString","createLogger","prefix","enabled","log","_args","wrapperRegistry","WeakMap","TOPIC_POSTS","TOPIC_REACTIONS","TOPIC_COMMENTS","FeedChannel","name","roomContext","localUser","options","isConnected","super","_comments","_unreadCount","_active","_onPostsRef","_onReactionsRef","_onCommentsRef","_roomContext","_localUser","_options","_log","_isConnected","_presenceManager","_postStore","maxPostCache","_reactionManager","posts","unreadCount","active","createPost","opts","content","media","data","status","isReplay","echo","getPosts","likePost","type","unlikePost","addComment","text","comment","getComments","markRead","channel","getUsers","_subscribe","subscribe","meta","_handleIncomingPost","_handleIncomingReaction","_handleIncomingComment","_activate","_markRead","_setPresence","fetchPresence","then","actors","actor","catch","_deactivate","_handlePresenceJoin","presenceData","_handlePresenceLeave","_handlePresenceUpdate","_handleReplayStart","_handleReplayEnd","replayed","_updateLocalPresence","_cleanup","unsubscribe","raw","setPresence","__scope","appName","NoLagFeed","_channels","_lobby","_onlineUsers","_activeChannel","_epoch","_detached","_isReady","_lobbyRefreshTimer","_onConnectRef","_onConnect","_onDisconnectRef","reason","_onReconnectRef","_onErrorRef","_onReplayStartRef","_onReplayEndRef","_onPresenceJoinRef","_handleRoomPresenceJoin","_onPresenceLeaveRef","_handleRoomPresenceLeave","_onPresenceUpdateRef","_handleRoomPresenceUpdate","_onLobbyJoinRef","_handleLobbyJoin","_onLobbyLeaveRef","_handleLobbyLeave","_onLobbyUpdateRef","_handleLobbyUpdate","client","TypeError","_client","_userId","maxCommentCache","debug","channels","_readyPromise","Promise","resolve","reject","_readyResolve","_readyReject","wrapperName","apps","warn","registerWrapper","queueMicrotask","connected","ready","detach","clearTimeout","keys","Error","_runSetup","epoch","stale","actorId","setApp","setLobby","state","_diffHydrateOnlineUsers","err","channelName","_subscribeChannelInternal","_scheduleLobbyRefresh","setTimeout","joinChannel","_assertUsable","prev","leaveChannel","getChannels","getOnlineUsers","updateProfile","updates","activeChannel","setRoom","_foreignScope","scope","_presenceToUser","_findUserIdByActorId","fresh","freshActors","roomId","Object","roomPresence","mappedUserId"],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -5,3 +5,5 @@ export declare const TOPIC_POSTS = "posts";
|
|
|
5
5
|
export declare const TOPIC_REACTIONS = "reactions";
|
|
6
6
|
export declare const TOPIC_COMMENTS = "comments";
|
|
7
7
|
export declare const LOBBY_ID = "online";
|
|
8
|
+
/** Delay before the post-setup lobby presence refetch (catches simultaneous joiners) */
|
|
9
|
+
export declare const LOBBY_REFRESH_DELAY_MS = 2000;
|