@stream-io/feeds-client 0.2.4 → 0.2.5
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/CHANGELOG.md +15 -0
- package/dist/index-react-bindings.browser.cjs +33 -18
- package/dist/index-react-bindings.browser.cjs.map +1 -1
- package/dist/index-react-bindings.browser.js +33 -18
- package/dist/index-react-bindings.browser.js.map +1 -1
- package/dist/index-react-bindings.node.cjs +33 -18
- package/dist/index-react-bindings.node.cjs.map +1 -1
- package/dist/index-react-bindings.node.js +33 -18
- package/dist/index-react-bindings.node.js.map +1 -1
- package/dist/index.browser.cjs +33 -18
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +33 -18
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.cjs +33 -18
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +33 -18
- package/dist/index.node.js.map +1 -1
- package/dist/src/common/real-time/StableWSConnection.d.ts +3 -3
- package/dist/src/common/real-time/event-models.d.ts +14 -0
- package/dist/src/feed/event-handlers/feed/handle-feed-updated.d.ts +2 -2
- package/dist/src/feeds-client/feeds-client.d.ts +3 -2
- package/dist/src/types.d.ts +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/common/real-time/event-models.ts +16 -0
- package/src/feed/event-handlers/feed/handle-feed-updated.ts +2 -2
- package/src/feeds-client/feeds-client.ts +51 -20
- package/src/types.ts +5 -2
package/dist/index.node.cjs
CHANGED
|
@@ -5732,6 +5732,11 @@ function handleUserUpdated(event) {
|
|
|
5732
5732
|
});
|
|
5733
5733
|
}
|
|
5734
5734
|
|
|
5735
|
+
var UnhandledErrorType;
|
|
5736
|
+
(function (UnhandledErrorType) {
|
|
5737
|
+
UnhandledErrorType["ReconnectionReconciliation"] = "reconnection-reconciliation";
|
|
5738
|
+
})(UnhandledErrorType || (UnhandledErrorType = {}));
|
|
5739
|
+
|
|
5735
5740
|
class FeedsClient extends FeedsApi {
|
|
5736
5741
|
constructor(apiKey, options) {
|
|
5737
5742
|
const tokenManager = new TokenManager();
|
|
@@ -5741,6 +5746,22 @@ class FeedsClient extends FeedsApi {
|
|
|
5741
5746
|
this.eventDispatcher = new EventDispatcher();
|
|
5742
5747
|
this.activeFeeds = {};
|
|
5743
5748
|
this.healthyConnectionChangedEventCount = 0;
|
|
5749
|
+
this.recoverOnReconnect = async () => {
|
|
5750
|
+
this.healthyConnectionChangedEventCount++;
|
|
5751
|
+
// we skip the first event as we could potentially be querying twice
|
|
5752
|
+
if (this.healthyConnectionChangedEventCount > 1) {
|
|
5753
|
+
const entries = Object.entries(this.activeFeeds);
|
|
5754
|
+
const results = await Promise.allSettled(entries.map(([, feed]) => feed.synchronize()));
|
|
5755
|
+
const failures = results.flatMap((result, index) => result.status === 'rejected'
|
|
5756
|
+
? [{ feed: entries[index][0], reason: result.reason }]
|
|
5757
|
+
: []);
|
|
5758
|
+
this.eventDispatcher.dispatch({
|
|
5759
|
+
type: 'errors.unhandled',
|
|
5760
|
+
error_type: UnhandledErrorType.ReconnectionReconciliation,
|
|
5761
|
+
failures,
|
|
5762
|
+
});
|
|
5763
|
+
}
|
|
5764
|
+
};
|
|
5744
5765
|
this.pollFromState = (id) => this.polls_by_id.get(id);
|
|
5745
5766
|
this.connectUser = async (user, tokenProvider) => {
|
|
5746
5767
|
if (this.state.getLatestValue().connected_user !== undefined ||
|
|
@@ -5836,18 +5857,18 @@ class FeedsClient extends FeedsApi {
|
|
|
5836
5857
|
};
|
|
5837
5858
|
this.getOrCreateActiveFeed = (group, id, data, watch) => {
|
|
5838
5859
|
const fid = `${group}:${id}`;
|
|
5839
|
-
if (this.activeFeeds[fid]) {
|
|
5840
|
-
|
|
5841
|
-
if (watch && !feed.currentState.watch) {
|
|
5842
|
-
handleWatchStarted.bind(feed)();
|
|
5843
|
-
}
|
|
5844
|
-
return feed;
|
|
5860
|
+
if (!this.activeFeeds[fid]) {
|
|
5861
|
+
this.activeFeeds[fid] = new Feed(this, group, id, data, watch);
|
|
5845
5862
|
}
|
|
5846
|
-
|
|
5847
|
-
|
|
5848
|
-
|
|
5849
|
-
|
|
5863
|
+
const feed = this.activeFeeds[fid];
|
|
5864
|
+
if (!feed.currentState.watch) {
|
|
5865
|
+
// feed isn't watched and may be stale, update it
|
|
5866
|
+
if (data)
|
|
5867
|
+
handleFeedUpdated.call(feed, { feed: data });
|
|
5868
|
+
if (watch)
|
|
5869
|
+
handleWatchStarted.call(feed);
|
|
5850
5870
|
}
|
|
5871
|
+
return feed;
|
|
5851
5872
|
};
|
|
5852
5873
|
this.state = new StateStore({
|
|
5853
5874
|
connected_user: undefined,
|
|
@@ -5865,13 +5886,7 @@ class FeedsClient extends FeedsApi {
|
|
|
5865
5886
|
const { online } = event;
|
|
5866
5887
|
this.state.partialNext({ is_ws_connection_healthy: online });
|
|
5867
5888
|
if (online) {
|
|
5868
|
-
this.
|
|
5869
|
-
// we skip the first event as we could potentially be querying twice
|
|
5870
|
-
if (this.healthyConnectionChangedEventCount > 1) {
|
|
5871
|
-
for (const activeFeed of Object.values(this.activeFeeds)) {
|
|
5872
|
-
activeFeed.synchronize();
|
|
5873
|
-
}
|
|
5874
|
-
}
|
|
5889
|
+
this.recoverOnReconnect();
|
|
5875
5890
|
}
|
|
5876
5891
|
else {
|
|
5877
5892
|
for (const activeFeed of Object.values(this.activeFeeds)) {
|
|
@@ -5985,7 +6000,7 @@ class FeedsClient extends FeedsApi {
|
|
|
5985
6000
|
}
|
|
5986
6001
|
async queryFeeds(request) {
|
|
5987
6002
|
const response = await this._queryFeeds(request);
|
|
5988
|
-
const feeds = response.feeds.map((
|
|
6003
|
+
const feeds = response.feeds.map((feedResponse) => this.getOrCreateActiveFeed(feedResponse.group_id, feedResponse.id, feedResponse, request?.watch));
|
|
5989
6004
|
return {
|
|
5990
6005
|
feeds,
|
|
5991
6006
|
next: response.next,
|