@liveblocks/core 3.15.5 → 3.16.0-feeds2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +449 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +252 -15
- package/dist/index.d.ts +252 -15
- package/dist/index.js +407 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ var __export = (target, all) => {
|
|
|
6
6
|
|
|
7
7
|
// src/version.ts
|
|
8
8
|
var PKG_NAME = "@liveblocks/core";
|
|
9
|
-
var PKG_VERSION = "3.
|
|
9
|
+
var PKG_VERSION = "3.16.0-feeds2";
|
|
10
10
|
var PKG_FORMAT = "esm";
|
|
11
11
|
|
|
12
12
|
// src/dupe-detection.ts
|
|
@@ -3219,10 +3219,26 @@ var ServerMsgCode = Object.freeze({
|
|
|
3219
3219
|
COMMENT_REACTION_ADDED: 405,
|
|
3220
3220
|
COMMENT_REACTION_REMOVED: 406,
|
|
3221
3221
|
COMMENT_METADATA_UPDATED: 409,
|
|
3222
|
+
// For Feeds
|
|
3223
|
+
FEEDS_LIST: 500,
|
|
3224
|
+
FEEDS_ADDED: 501,
|
|
3225
|
+
FEEDS_UPDATED: 502,
|
|
3226
|
+
FEED_DELETED: 503,
|
|
3227
|
+
FEED_MESSAGES_LIST: 504,
|
|
3228
|
+
FEED_MESSAGES_ADDED: 505,
|
|
3229
|
+
FEED_MESSAGES_UPDATED: 506,
|
|
3230
|
+
FEED_MESSAGES_DELETED: 507,
|
|
3231
|
+
FEED_REQUEST_FAILED: 508,
|
|
3222
3232
|
// Error codes
|
|
3223
3233
|
REJECT_STORAGE_OP: 299
|
|
3224
3234
|
// Sent if a mutation was not allowed on the server (i.e. due to permissions, limit exceeded, etc)
|
|
3225
3235
|
});
|
|
3236
|
+
var FeedRequestErrorCode = {
|
|
3237
|
+
INTERNAL: "INTERNAL",
|
|
3238
|
+
FEED_ALREADY_EXISTS: "FEED_ALREADY_EXISTS",
|
|
3239
|
+
FEED_NOT_FOUND: "FEED_NOT_FOUND",
|
|
3240
|
+
FEED_MESSAGE_NOT_FOUND: "FEED_MESSAGE_NOT_FOUND"
|
|
3241
|
+
};
|
|
3226
3242
|
|
|
3227
3243
|
// src/types/IWebSocket.ts
|
|
3228
3244
|
var WebsocketCloseCodes = /* @__PURE__ */ ((WebsocketCloseCodes2) => {
|
|
@@ -5186,6 +5202,7 @@ var Permission = /* @__PURE__ */ ((Permission2) => {
|
|
|
5186
5202
|
Permission2["PresenceWrite"] = "room:presence:write";
|
|
5187
5203
|
Permission2["CommentsWrite"] = "comments:write";
|
|
5188
5204
|
Permission2["CommentsRead"] = "comments:read";
|
|
5205
|
+
Permission2["FeedsWrite"] = "feeds:write";
|
|
5189
5206
|
return Permission2;
|
|
5190
5207
|
})(Permission || {});
|
|
5191
5208
|
function canWriteStorage(scopes) {
|
|
@@ -8774,7 +8791,16 @@ var ClientMsgCode = Object.freeze({
|
|
|
8774
8791
|
UPDATE_STORAGE: 201,
|
|
8775
8792
|
// For Yjs support
|
|
8776
8793
|
FETCH_YDOC: 300,
|
|
8777
|
-
UPDATE_YDOC: 301
|
|
8794
|
+
UPDATE_YDOC: 301,
|
|
8795
|
+
// For Feeds
|
|
8796
|
+
FETCH_FEEDS: 510,
|
|
8797
|
+
FETCH_FEED_MESSAGES: 511,
|
|
8798
|
+
ADD_FEED: 512,
|
|
8799
|
+
UPDATE_FEED: 513,
|
|
8800
|
+
DELETE_FEED: 514,
|
|
8801
|
+
ADD_FEED_MESSAGE: 515,
|
|
8802
|
+
UPDATE_FEED_MESSAGE: 516,
|
|
8803
|
+
DELETE_FEED_MESSAGE: 517
|
|
8778
8804
|
});
|
|
8779
8805
|
|
|
8780
8806
|
// src/refs/ManagedOthers.ts
|
|
@@ -9010,12 +9036,15 @@ function defaultMessageFromContext(context) {
|
|
|
9010
9036
|
return "Could not update notification settings";
|
|
9011
9037
|
case "LARGE_MESSAGE_ERROR":
|
|
9012
9038
|
return "Could not send large message";
|
|
9039
|
+
case "FEED_REQUEST_ERROR":
|
|
9040
|
+
return context.reason ?? "Feed request failed";
|
|
9013
9041
|
default:
|
|
9014
9042
|
return assertNever(context, "Unhandled case");
|
|
9015
9043
|
}
|
|
9016
9044
|
}
|
|
9017
9045
|
|
|
9018
9046
|
// src/room.ts
|
|
9047
|
+
var FEEDS_TIMEOUT = 5e3;
|
|
9019
9048
|
function makeIdFactory(connectionId) {
|
|
9020
9049
|
let count = 0;
|
|
9021
9050
|
return () => `${connectionId}:${count++}`;
|
|
@@ -9250,6 +9279,7 @@ function createRoom(options, config) {
|
|
|
9250
9279
|
storageStatus: makeEventSource(),
|
|
9251
9280
|
ydoc: makeEventSource(),
|
|
9252
9281
|
comments: makeEventSource(),
|
|
9282
|
+
feeds: makeEventSource(),
|
|
9253
9283
|
roomWillDestroy: makeEventSource()
|
|
9254
9284
|
};
|
|
9255
9285
|
async function createTextMention(mentionId, mention) {
|
|
@@ -9670,6 +9700,9 @@ function createRoom(options, config) {
|
|
|
9670
9700
|
notify(result.updates);
|
|
9671
9701
|
sendMessages(messages);
|
|
9672
9702
|
}
|
|
9703
|
+
function isFeedRequestFailedMsg(msg) {
|
|
9704
|
+
return msg.type === ServerMsgCode.FEED_REQUEST_FAILED;
|
|
9705
|
+
}
|
|
9673
9706
|
function handleServerMessage(event) {
|
|
9674
9707
|
if (typeof event.data !== "string") {
|
|
9675
9708
|
return;
|
|
@@ -9783,6 +9816,94 @@ function createRoom(options, config) {
|
|
|
9783
9816
|
eventHub.comments.notify(message);
|
|
9784
9817
|
break;
|
|
9785
9818
|
}
|
|
9819
|
+
case ServerMsgCode.FEEDS_LIST: {
|
|
9820
|
+
const feedsListMsg = message;
|
|
9821
|
+
const pending = pendingFeedsRequests.get(feedsListMsg.requestId);
|
|
9822
|
+
if (pending) {
|
|
9823
|
+
pending.resolve({
|
|
9824
|
+
feeds: feedsListMsg.feeds,
|
|
9825
|
+
nextCursor: feedsListMsg.nextCursor
|
|
9826
|
+
});
|
|
9827
|
+
pendingFeedsRequests.delete(feedsListMsg.requestId);
|
|
9828
|
+
}
|
|
9829
|
+
eventHub.feeds.notify(feedsListMsg);
|
|
9830
|
+
break;
|
|
9831
|
+
}
|
|
9832
|
+
case ServerMsgCode.FEEDS_ADDED: {
|
|
9833
|
+
const feedsAddedMsg = message;
|
|
9834
|
+
eventHub.feeds.notify(feedsAddedMsg);
|
|
9835
|
+
tryResolvePendingFeedMutationsFromFeedsEvent(feedsAddedMsg);
|
|
9836
|
+
break;
|
|
9837
|
+
}
|
|
9838
|
+
case ServerMsgCode.FEEDS_UPDATED: {
|
|
9839
|
+
const feedsUpdatedMsg = message;
|
|
9840
|
+
eventHub.feeds.notify(feedsUpdatedMsg);
|
|
9841
|
+
tryResolvePendingFeedMutationsFromFeedsEvent(feedsUpdatedMsg);
|
|
9842
|
+
break;
|
|
9843
|
+
}
|
|
9844
|
+
case ServerMsgCode.FEED_DELETED: {
|
|
9845
|
+
eventHub.feeds.notify(message);
|
|
9846
|
+
tryResolvePendingFeedMutationsFromFeedsEvent(message);
|
|
9847
|
+
break;
|
|
9848
|
+
}
|
|
9849
|
+
case ServerMsgCode.FEED_MESSAGES_LIST: {
|
|
9850
|
+
const feedMsgsListMsg = message;
|
|
9851
|
+
const pending = pendingFeedMessagesRequests.get(
|
|
9852
|
+
feedMsgsListMsg.requestId
|
|
9853
|
+
);
|
|
9854
|
+
if (pending) {
|
|
9855
|
+
pending.resolve({
|
|
9856
|
+
messages: feedMsgsListMsg.messages,
|
|
9857
|
+
nextCursor: feedMsgsListMsg.nextCursor
|
|
9858
|
+
});
|
|
9859
|
+
pendingFeedMessagesRequests.delete(feedMsgsListMsg.requestId);
|
|
9860
|
+
}
|
|
9861
|
+
eventHub.feeds.notify(feedMsgsListMsg);
|
|
9862
|
+
break;
|
|
9863
|
+
}
|
|
9864
|
+
case ServerMsgCode.FEED_MESSAGES_ADDED: {
|
|
9865
|
+
const feedMsgsAddedMsg = message;
|
|
9866
|
+
eventHub.feeds.notify(feedMsgsAddedMsg);
|
|
9867
|
+
tryResolvePendingFeedMutationsFromFeedsEvent(feedMsgsAddedMsg);
|
|
9868
|
+
break;
|
|
9869
|
+
}
|
|
9870
|
+
case ServerMsgCode.FEED_MESSAGES_UPDATED: {
|
|
9871
|
+
const feedMsgsUpdatedMsg = message;
|
|
9872
|
+
eventHub.feeds.notify(feedMsgsUpdatedMsg);
|
|
9873
|
+
tryResolvePendingFeedMutationsFromFeedsEvent(feedMsgsUpdatedMsg);
|
|
9874
|
+
break;
|
|
9875
|
+
}
|
|
9876
|
+
case ServerMsgCode.FEED_MESSAGES_DELETED: {
|
|
9877
|
+
eventHub.feeds.notify(message);
|
|
9878
|
+
tryResolvePendingFeedMutationsFromFeedsEvent(message);
|
|
9879
|
+
break;
|
|
9880
|
+
}
|
|
9881
|
+
case ServerMsgCode.FEED_REQUEST_FAILED: {
|
|
9882
|
+
if (!isFeedRequestFailedMsg(message)) {
|
|
9883
|
+
break;
|
|
9884
|
+
}
|
|
9885
|
+
const { requestId, code, reason } = message;
|
|
9886
|
+
const err = new LiveblocksError(reason ?? "Feed request failed", {
|
|
9887
|
+
type: "FEED_REQUEST_ERROR",
|
|
9888
|
+
roomId,
|
|
9889
|
+
requestId,
|
|
9890
|
+
code,
|
|
9891
|
+
reason
|
|
9892
|
+
});
|
|
9893
|
+
if (pendingFeedMutations.has(requestId)) {
|
|
9894
|
+
settleFeedMutation(requestId, "error", err);
|
|
9895
|
+
} else if (pendingFeedsRequests.has(requestId)) {
|
|
9896
|
+
const pending = pendingFeedsRequests.get(requestId);
|
|
9897
|
+
pendingFeedsRequests.delete(requestId);
|
|
9898
|
+
pending?.reject(err);
|
|
9899
|
+
} else if (pendingFeedMessagesRequests.has(requestId)) {
|
|
9900
|
+
const pending = pendingFeedMessagesRequests.get(requestId);
|
|
9901
|
+
pendingFeedMessagesRequests.delete(requestId);
|
|
9902
|
+
pending?.reject(err);
|
|
9903
|
+
}
|
|
9904
|
+
eventHub.feeds.notify(message);
|
|
9905
|
+
break;
|
|
9906
|
+
}
|
|
9786
9907
|
case ServerMsgCode.STORAGE_STATE_V7:
|
|
9787
9908
|
// No longer used in V8
|
|
9788
9909
|
default:
|
|
@@ -9886,6 +10007,141 @@ function createRoom(options, config) {
|
|
|
9886
10007
|
}
|
|
9887
10008
|
let _getStorage$ = null;
|
|
9888
10009
|
let _resolveStoragePromise = null;
|
|
10010
|
+
const pendingFeedsRequests = /* @__PURE__ */ new Map();
|
|
10011
|
+
const pendingFeedMessagesRequests = /* @__PURE__ */ new Map();
|
|
10012
|
+
const pendingFeedMutations = /* @__PURE__ */ new Map();
|
|
10013
|
+
const pendingAddMessageFifoByFeed = /* @__PURE__ */ new Map();
|
|
10014
|
+
function settleFeedMutation(requestId, outcome, error3) {
|
|
10015
|
+
const pending = pendingFeedMutations.get(requestId);
|
|
10016
|
+
if (pending === void 0) {
|
|
10017
|
+
return;
|
|
10018
|
+
}
|
|
10019
|
+
clearTimeout(pending.timeoutId);
|
|
10020
|
+
pendingFeedMutations.delete(requestId);
|
|
10021
|
+
if (pending.kind === "add-message" && !pending.expectedClientMessageId) {
|
|
10022
|
+
const q = pendingAddMessageFifoByFeed.get(pending.feedId);
|
|
10023
|
+
if (q !== void 0) {
|
|
10024
|
+
const idx = q.indexOf(requestId);
|
|
10025
|
+
if (idx >= 0) {
|
|
10026
|
+
q.splice(idx, 1);
|
|
10027
|
+
}
|
|
10028
|
+
if (q.length === 0) {
|
|
10029
|
+
pendingAddMessageFifoByFeed.delete(pending.feedId);
|
|
10030
|
+
}
|
|
10031
|
+
}
|
|
10032
|
+
}
|
|
10033
|
+
if (outcome === "ok") {
|
|
10034
|
+
pending.resolve();
|
|
10035
|
+
} else {
|
|
10036
|
+
pending.reject(error3 ?? new Error("Feed mutation failed"));
|
|
10037
|
+
}
|
|
10038
|
+
}
|
|
10039
|
+
function registerFeedMutation(requestId, kind, feedId, options2) {
|
|
10040
|
+
const { promise, resolve, reject } = Promise_withResolvers();
|
|
10041
|
+
const timeoutId = setTimeout(() => {
|
|
10042
|
+
if (pendingFeedMutations.has(requestId)) {
|
|
10043
|
+
settleFeedMutation(
|
|
10044
|
+
requestId,
|
|
10045
|
+
"error",
|
|
10046
|
+
new Error("Feed mutation timeout")
|
|
10047
|
+
);
|
|
10048
|
+
}
|
|
10049
|
+
}, FEEDS_TIMEOUT);
|
|
10050
|
+
pendingFeedMutations.set(requestId, {
|
|
10051
|
+
resolve,
|
|
10052
|
+
reject,
|
|
10053
|
+
timeoutId,
|
|
10054
|
+
kind,
|
|
10055
|
+
feedId,
|
|
10056
|
+
messageId: options2?.messageId,
|
|
10057
|
+
expectedClientMessageId: options2?.expectedClientMessageId
|
|
10058
|
+
});
|
|
10059
|
+
if (kind === "add-message" && options2?.expectedClientMessageId === void 0) {
|
|
10060
|
+
const q = pendingAddMessageFifoByFeed.get(feedId) ?? [];
|
|
10061
|
+
q.push(requestId);
|
|
10062
|
+
pendingAddMessageFifoByFeed.set(feedId, q);
|
|
10063
|
+
}
|
|
10064
|
+
return promise;
|
|
10065
|
+
}
|
|
10066
|
+
function tryResolvePendingFeedMutationsFromFeedsEvent(message) {
|
|
10067
|
+
switch (message.type) {
|
|
10068
|
+
case ServerMsgCode.FEEDS_ADDED: {
|
|
10069
|
+
for (const feed of message.feeds) {
|
|
10070
|
+
for (const [requestId, pending] of [...pendingFeedMutations]) {
|
|
10071
|
+
if (pending.kind === "add-feed" && pending.feedId === feed.feedId) {
|
|
10072
|
+
settleFeedMutation(requestId, "ok");
|
|
10073
|
+
break;
|
|
10074
|
+
}
|
|
10075
|
+
}
|
|
10076
|
+
}
|
|
10077
|
+
break;
|
|
10078
|
+
}
|
|
10079
|
+
case ServerMsgCode.FEEDS_UPDATED: {
|
|
10080
|
+
for (const feed of message.feeds) {
|
|
10081
|
+
for (const [requestId, pending] of [...pendingFeedMutations]) {
|
|
10082
|
+
if (pending.kind === "update-feed" && pending.feedId === feed.feedId) {
|
|
10083
|
+
settleFeedMutation(requestId, "ok");
|
|
10084
|
+
}
|
|
10085
|
+
}
|
|
10086
|
+
}
|
|
10087
|
+
break;
|
|
10088
|
+
}
|
|
10089
|
+
case ServerMsgCode.FEED_DELETED: {
|
|
10090
|
+
for (const [requestId, pending] of [...pendingFeedMutations]) {
|
|
10091
|
+
if (pending.kind === "delete-feed" && pending.feedId === message.feedId) {
|
|
10092
|
+
settleFeedMutation(requestId, "ok");
|
|
10093
|
+
break;
|
|
10094
|
+
}
|
|
10095
|
+
}
|
|
10096
|
+
break;
|
|
10097
|
+
}
|
|
10098
|
+
case ServerMsgCode.FEED_MESSAGES_ADDED: {
|
|
10099
|
+
for (const m of message.messages) {
|
|
10100
|
+
let matched = false;
|
|
10101
|
+
for (const [requestId, pending] of [...pendingFeedMutations]) {
|
|
10102
|
+
if (pending.kind === "add-message" && pending.feedId === message.feedId && pending.expectedClientMessageId === m.id) {
|
|
10103
|
+
settleFeedMutation(requestId, "ok");
|
|
10104
|
+
matched = true;
|
|
10105
|
+
break;
|
|
10106
|
+
}
|
|
10107
|
+
}
|
|
10108
|
+
if (!matched) {
|
|
10109
|
+
const q = pendingAddMessageFifoByFeed.get(message.feedId);
|
|
10110
|
+
const headId = q?.[0];
|
|
10111
|
+
if (headId !== void 0) {
|
|
10112
|
+
const pending = pendingFeedMutations.get(headId);
|
|
10113
|
+
if (pending?.kind === "add-message" && pending.expectedClientMessageId === void 0) {
|
|
10114
|
+
settleFeedMutation(headId, "ok");
|
|
10115
|
+
}
|
|
10116
|
+
}
|
|
10117
|
+
}
|
|
10118
|
+
}
|
|
10119
|
+
break;
|
|
10120
|
+
}
|
|
10121
|
+
case ServerMsgCode.FEED_MESSAGES_UPDATED: {
|
|
10122
|
+
for (const m of message.messages) {
|
|
10123
|
+
for (const [requestId, pending] of [...pendingFeedMutations]) {
|
|
10124
|
+
if (pending.kind === "update-message" && pending.feedId === message.feedId && pending.messageId === m.id) {
|
|
10125
|
+
settleFeedMutation(requestId, "ok");
|
|
10126
|
+
}
|
|
10127
|
+
}
|
|
10128
|
+
}
|
|
10129
|
+
break;
|
|
10130
|
+
}
|
|
10131
|
+
case ServerMsgCode.FEED_MESSAGES_DELETED: {
|
|
10132
|
+
for (const mid of message.messageIds) {
|
|
10133
|
+
for (const [requestId, pending] of [...pendingFeedMutations]) {
|
|
10134
|
+
if (pending.kind === "delete-message" && pending.feedId === message.feedId && pending.messageId === mid) {
|
|
10135
|
+
settleFeedMutation(requestId, "ok");
|
|
10136
|
+
}
|
|
10137
|
+
}
|
|
10138
|
+
}
|
|
10139
|
+
break;
|
|
10140
|
+
}
|
|
10141
|
+
default:
|
|
10142
|
+
break;
|
|
10143
|
+
}
|
|
10144
|
+
}
|
|
9889
10145
|
function processInitialStorage(nodes) {
|
|
9890
10146
|
const unacknowledgedOps = new Map(context.unacknowledgedOps);
|
|
9891
10147
|
createOrUpdateRootFromMessage(nodes);
|
|
@@ -9957,6 +10213,138 @@ function createRoom(options, config) {
|
|
|
9957
10213
|
}
|
|
9958
10214
|
flushNowOrSoon();
|
|
9959
10215
|
}
|
|
10216
|
+
async function fetchFeeds(options2) {
|
|
10217
|
+
const requestId = nanoid();
|
|
10218
|
+
const { promise, resolve, reject } = Promise_withResolvers();
|
|
10219
|
+
pendingFeedsRequests.set(requestId, { resolve, reject });
|
|
10220
|
+
const message = {
|
|
10221
|
+
type: ClientMsgCode.FETCH_FEEDS,
|
|
10222
|
+
requestId,
|
|
10223
|
+
cursor: options2?.cursor,
|
|
10224
|
+
since: options2?.since,
|
|
10225
|
+
limit: options2?.limit,
|
|
10226
|
+
metadata: options2?.metadata
|
|
10227
|
+
};
|
|
10228
|
+
context.buffer.messages.push(message);
|
|
10229
|
+
flushNowOrSoon();
|
|
10230
|
+
setTimeout(() => {
|
|
10231
|
+
if (pendingFeedsRequests.has(requestId)) {
|
|
10232
|
+
pendingFeedsRequests.delete(requestId);
|
|
10233
|
+
reject(new Error("Feeds fetch timeout"));
|
|
10234
|
+
}
|
|
10235
|
+
}, FEEDS_TIMEOUT);
|
|
10236
|
+
return promise;
|
|
10237
|
+
}
|
|
10238
|
+
async function fetchFeedMessages(feedId, options2) {
|
|
10239
|
+
const requestId = nanoid();
|
|
10240
|
+
const { promise, resolve, reject } = Promise_withResolvers();
|
|
10241
|
+
pendingFeedMessagesRequests.set(requestId, { resolve, reject });
|
|
10242
|
+
const message = {
|
|
10243
|
+
type: ClientMsgCode.FETCH_FEED_MESSAGES,
|
|
10244
|
+
requestId,
|
|
10245
|
+
feedId,
|
|
10246
|
+
cursor: options2?.cursor,
|
|
10247
|
+
since: options2?.since,
|
|
10248
|
+
limit: options2?.limit
|
|
10249
|
+
};
|
|
10250
|
+
context.buffer.messages.push(message);
|
|
10251
|
+
flushNowOrSoon();
|
|
10252
|
+
setTimeout(() => {
|
|
10253
|
+
if (pendingFeedMessagesRequests.has(requestId)) {
|
|
10254
|
+
pendingFeedMessagesRequests.delete(requestId);
|
|
10255
|
+
reject(new Error("Feed messages fetch timeout"));
|
|
10256
|
+
}
|
|
10257
|
+
}, FEEDS_TIMEOUT);
|
|
10258
|
+
return promise;
|
|
10259
|
+
}
|
|
10260
|
+
function addFeed(feedId, options2) {
|
|
10261
|
+
const requestId = nanoid();
|
|
10262
|
+
const promise = registerFeedMutation(requestId, "add-feed", feedId);
|
|
10263
|
+
const message = {
|
|
10264
|
+
type: ClientMsgCode.ADD_FEED,
|
|
10265
|
+
requestId,
|
|
10266
|
+
feedId,
|
|
10267
|
+
metadata: options2?.metadata,
|
|
10268
|
+
createdAt: options2?.createdAt
|
|
10269
|
+
};
|
|
10270
|
+
context.buffer.messages.push(message);
|
|
10271
|
+
flushNowOrSoon();
|
|
10272
|
+
return promise;
|
|
10273
|
+
}
|
|
10274
|
+
function updateFeed(feedId, metadata) {
|
|
10275
|
+
const requestId = nanoid();
|
|
10276
|
+
const promise = registerFeedMutation(requestId, "update-feed", feedId);
|
|
10277
|
+
const message = {
|
|
10278
|
+
type: ClientMsgCode.UPDATE_FEED,
|
|
10279
|
+
requestId,
|
|
10280
|
+
feedId,
|
|
10281
|
+
metadata
|
|
10282
|
+
};
|
|
10283
|
+
context.buffer.messages.push(message);
|
|
10284
|
+
flushNowOrSoon();
|
|
10285
|
+
return promise;
|
|
10286
|
+
}
|
|
10287
|
+
function deleteFeed(feedId) {
|
|
10288
|
+
const requestId = nanoid();
|
|
10289
|
+
const promise = registerFeedMutation(requestId, "delete-feed", feedId);
|
|
10290
|
+
const message = {
|
|
10291
|
+
type: ClientMsgCode.DELETE_FEED,
|
|
10292
|
+
requestId,
|
|
10293
|
+
feedId
|
|
10294
|
+
};
|
|
10295
|
+
context.buffer.messages.push(message);
|
|
10296
|
+
flushNowOrSoon();
|
|
10297
|
+
return promise;
|
|
10298
|
+
}
|
|
10299
|
+
function addFeedMessage(feedId, data, options2) {
|
|
10300
|
+
const requestId = nanoid();
|
|
10301
|
+
const promise = registerFeedMutation(requestId, "add-message", feedId, {
|
|
10302
|
+
expectedClientMessageId: options2?.id
|
|
10303
|
+
});
|
|
10304
|
+
const message = {
|
|
10305
|
+
type: ClientMsgCode.ADD_FEED_MESSAGE,
|
|
10306
|
+
requestId,
|
|
10307
|
+
feedId,
|
|
10308
|
+
data,
|
|
10309
|
+
id: options2?.id,
|
|
10310
|
+
createdAt: options2?.createdAt
|
|
10311
|
+
};
|
|
10312
|
+
context.buffer.messages.push(message);
|
|
10313
|
+
flushNowOrSoon();
|
|
10314
|
+
return promise;
|
|
10315
|
+
}
|
|
10316
|
+
function updateFeedMessage(feedId, messageId, data, options2) {
|
|
10317
|
+
const requestId = nanoid();
|
|
10318
|
+
const promise = registerFeedMutation(requestId, "update-message", feedId, {
|
|
10319
|
+
messageId
|
|
10320
|
+
});
|
|
10321
|
+
const message = {
|
|
10322
|
+
type: ClientMsgCode.UPDATE_FEED_MESSAGE,
|
|
10323
|
+
requestId,
|
|
10324
|
+
feedId,
|
|
10325
|
+
messageId,
|
|
10326
|
+
data,
|
|
10327
|
+
updatedAt: options2?.updatedAt
|
|
10328
|
+
};
|
|
10329
|
+
context.buffer.messages.push(message);
|
|
10330
|
+
flushNowOrSoon();
|
|
10331
|
+
return promise;
|
|
10332
|
+
}
|
|
10333
|
+
function deleteFeedMessage(feedId, messageId) {
|
|
10334
|
+
const requestId = nanoid();
|
|
10335
|
+
const promise = registerFeedMutation(requestId, "delete-message", feedId, {
|
|
10336
|
+
messageId
|
|
10337
|
+
});
|
|
10338
|
+
const message = {
|
|
10339
|
+
type: ClientMsgCode.DELETE_FEED_MESSAGE,
|
|
10340
|
+
requestId,
|
|
10341
|
+
feedId,
|
|
10342
|
+
messageId
|
|
10343
|
+
};
|
|
10344
|
+
context.buffer.messages.push(message);
|
|
10345
|
+
flushNowOrSoon();
|
|
10346
|
+
return promise;
|
|
10347
|
+
}
|
|
9960
10348
|
function undo() {
|
|
9961
10349
|
if (context.activeBatch) {
|
|
9962
10350
|
throw new Error("undo is not allowed during a batch");
|
|
@@ -10099,6 +10487,7 @@ function createRoom(options, config) {
|
|
|
10099
10487
|
storageStatus: eventHub.storageStatus.observable,
|
|
10100
10488
|
ydoc: eventHub.ydoc.observable,
|
|
10101
10489
|
comments: eventHub.comments.observable,
|
|
10490
|
+
feeds: eventHub.feeds.observable,
|
|
10102
10491
|
roomWillDestroy: eventHub.roomWillDestroy.observable
|
|
10103
10492
|
};
|
|
10104
10493
|
async function getThreadsSince(options2) {
|
|
@@ -10308,13 +10697,19 @@ function createRoom(options, config) {
|
|
|
10308
10697
|
id: roomId,
|
|
10309
10698
|
subscribe: makeClassicSubscribeFn(
|
|
10310
10699
|
roomId,
|
|
10311
|
-
|
|
10700
|
+
eventHub,
|
|
10312
10701
|
config.errorEventSource
|
|
10313
10702
|
),
|
|
10314
10703
|
connect: () => managedSocket.connect(),
|
|
10315
10704
|
reconnect: () => managedSocket.reconnect(),
|
|
10316
10705
|
disconnect: () => managedSocket.disconnect(),
|
|
10317
10706
|
destroy: () => {
|
|
10707
|
+
pendingFeedsRequests.forEach(
|
|
10708
|
+
(request) => request.reject(new Error("Room destroyed"))
|
|
10709
|
+
);
|
|
10710
|
+
pendingFeedMessagesRequests.forEach(
|
|
10711
|
+
(request) => request.reject(new Error("Room destroyed"))
|
|
10712
|
+
);
|
|
10318
10713
|
const { roomWillDestroy, ...eventsExceptDestroy } = eventHub;
|
|
10319
10714
|
for (const source of Object.values(eventsExceptDestroy)) {
|
|
10320
10715
|
source.dispose();
|
|
@@ -10343,6 +10738,14 @@ function createRoom(options, config) {
|
|
|
10343
10738
|
resume: resumeHistory
|
|
10344
10739
|
},
|
|
10345
10740
|
fetchYDoc,
|
|
10741
|
+
fetchFeeds,
|
|
10742
|
+
fetchFeedMessages,
|
|
10743
|
+
addFeed,
|
|
10744
|
+
updateFeed,
|
|
10745
|
+
deleteFeed,
|
|
10746
|
+
addFeedMessage,
|
|
10747
|
+
updateFeedMessage,
|
|
10748
|
+
deleteFeedMessage,
|
|
10346
10749
|
getStorage,
|
|
10347
10750
|
getStorageSnapshot,
|
|
10348
10751
|
getStorageStatus,
|
|
@@ -11724,6 +12127,7 @@ export {
|
|
|
11724
12127
|
DefaultMap,
|
|
11725
12128
|
Deque,
|
|
11726
12129
|
DerivedSignal,
|
|
12130
|
+
FeedRequestErrorCode,
|
|
11727
12131
|
HttpError,
|
|
11728
12132
|
LiveList,
|
|
11729
12133
|
LiveMap,
|