@bitsocial/bitsocial-react-hooks 0.1.14 → 0.1.16

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.
@@ -5,6 +5,7 @@ export declare const sanitizeAccountCommentForState: (comment: Comment) => any;
5
5
  export declare const sanitizeStoredAccountComment: (comment: Comment) => any;
6
6
  export declare const getAccountCommentsIndex: (accountComments: AccountComment[] | undefined) => AccountCommentsIndex;
7
7
  export declare const getAccountsCommentsIndexes: (accountsComments: AccountsComments) => AccountsCommentsIndexes;
8
+ export declare const COMMENT_MODERATION_AUTHOR_SUMMARY_KEY = "commentModeration.author";
8
9
  export declare const getAccountEditPropertySummary: (accountEdits: AccountEdit[] | undefined) => {
9
10
  [propertyName: string]: import("../../types.js").AccountEditPropertySummary;
10
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/stores/accounts/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,EAC7B,OAAO,EACP,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAoBrB,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,EAAE,aAAa,WAAW,QAiB/E,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAAI,kBAAkB,gBAAgB,kCAalF,CAAC;AA0FF,eAAO,MAAM,8BAA8B,GAAI,SAAS,OAAO,QAuB9D,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,SAAS,OAAO,QAoB5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,iBAAiB,cAAc,EAAE,GAAG,SAAS,KAC5C,oBAoBF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,kBAAkB,gBAAgB,4BAM5E,CAAC;AA2BF,eAAO,MAAM,6BAA6B,GAAI,cAAc,WAAW,EAAE,GAAG,SAAS;;CAqBpF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,cAAc;IACpD,CAAC,4BAA4B,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACvD,wBAMA,CAAC;AAEF,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;CAC7C;AAgBD,eAAO,MAAM,0BAA0B,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,qBAAqB,CA4H5F,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,kBAAkB,gBAAgB;oBAC9B,cAAc;eAAa,MAAM;GAkBnF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,OAAO,uBAkBtD,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI,SAAS,OAAO,YAcjE,CAAC;AAEF,QAAA,MAAM,KAAK;qCA9coC,OAAO,eAAe,WAAW;yDAmBb,gBAAgB;+CAuJhE,cAAc,EAAE,GAAG,SAAS,KAC5C,oBAAoB;mDAsBsC,gBAAgB;8CAvErB,OAAO;4CAyBT,OAAO;kDA+ED,WAAW,EAAE,GAAG,SAAS;;;4CAuB/B;QACpD,CAAC,4BAA4B,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KACvD;uCA4BsD,MAAM,KAAG,OAAO,CAAC,qBAAqB,CAAC;uDA8H7B,gBAAgB;wBAC9B,cAAc;mBAAa,MAAM;;sCAoBpC,OAAO;iDAoBI,OAAO;iBApL9C,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,EAAE,KAAG,OAAO,CAAC,CAAC,CAAC;CAkNzD,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/stores/accounts/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,EAC7B,OAAO,EACP,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAoBrB,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,EAAE,aAAa,WAAW,QAiB/E,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAAI,kBAAkB,gBAAgB,kCAalF,CAAC;AA0FF,eAAO,MAAM,8BAA8B,GAAI,SAAS,OAAO,QAuB9D,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,SAAS,OAAO,QAoB5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,iBAAiB,cAAc,EAAE,GAAG,SAAS,KAC5C,oBAoBF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,kBAAkB,gBAAgB,4BAM5E,CAAC;AAYF,eAAO,MAAM,qCAAqC,6BAA6B,CAAC;AAsBhF,eAAO,MAAM,6BAA6B,GAAI,cAAc,WAAW,EAAE,GAAG,SAAS;;CAsBpF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,cAAc;IACpD,CAAC,4BAA4B,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACvD,wBAMA,CAAC;AAEF,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;CAC7C;AAgBD,eAAO,MAAM,0BAA0B,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,qBAAqB,CA4H5F,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,kBAAkB,gBAAgB;oBAC9B,cAAc;eAAa,MAAM;GAkBnF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,OAAO,uBAkBtD,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI,SAAS,OAAO,YAcjE,CAAC;AAEF,QAAA,MAAM,KAAK;qCAtdoC,OAAO,eAAe,WAAW;yDAmBb,gBAAgB;+CAuJhE,cAAc,EAAE,GAAG,SAAS,KAC5C,oBAAoB;mDAsBsC,gBAAgB;8CAvErB,OAAO;4CAyBT,OAAO;kDAsFD,WAAW,EAAE,GAAG,SAAS;;;4CAwB/B;QACpD,CAAC,4BAA4B,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KACvD;uCA4BsD,MAAM,KAAG,OAAO,CAAC,qBAAqB,CAAC;uDA8H7B,gBAAgB;wBAC9B,cAAc;mBAAa,MAAM;;sCAoBpC,OAAO;iDAoBI,OAAO;iBApL9C,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,EAAE,KAAG,OAAO,CAAC,CAAC,CAAC;CAkNzD,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -7,6 +7,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
10
21
  import assert from "assert";
11
22
  import Logger from "@pkcprotocol/pkc-logger";
12
23
  const log = Logger("bitsocial-react-hooks:accounts:stores");
@@ -190,11 +201,17 @@ const accountEditNonPropertyNames = new Set([
190
201
  "communityAddress",
191
202
  "timestamp",
192
203
  ]);
204
+ export const COMMENT_MODERATION_AUTHOR_SUMMARY_KEY = "commentModeration.author";
193
205
  const normalizeAccountEditForSummary = (accountEdit) => {
194
206
  var _a;
195
207
  const normalizedAccountEdit = Object.assign({}, accountEdit);
196
- if (normalizedAccountEdit.commentModeration) {
197
- Object.assign(normalizedAccountEdit, normalizedAccountEdit.commentModeration);
208
+ const commentModeration = normalizedAccountEdit.commentModeration;
209
+ if (commentModeration && typeof commentModeration === "object") {
210
+ const { author } = commentModeration, commentModerationProperties = __rest(commentModeration, ["author"]);
211
+ Object.assign(normalizedAccountEdit, commentModerationProperties);
212
+ if (Object.prototype.hasOwnProperty.call(commentModeration, "author")) {
213
+ normalizedAccountEdit[COMMENT_MODERATION_AUTHOR_SUMMARY_KEY] = author;
214
+ }
198
215
  delete normalizedAccountEdit.commentModeration;
199
216
  }
200
217
  const communityEdit = (_a = normalizedAccountEdit.communityEdit) !== null && _a !== void 0 ? _a : normalizedAccountEdit.communityEdit;
@@ -211,7 +228,8 @@ export const getAccountEditPropertySummary = (accountEdits) => {
211
228
  for (const accountEdit of accountEdits || []) {
212
229
  const normalizedAccountEdit = normalizeAccountEditForSummary(accountEdit);
213
230
  for (const propertyName in normalizedAccountEdit) {
214
- if (normalizedAccountEdit[propertyName] === undefined ||
231
+ if ((normalizedAccountEdit[propertyName] === undefined &&
232
+ propertyName !== COMMENT_MODERATION_AUTHOR_SUMMARY_KEY) ||
215
233
  accountEditNonPropertyNames.has(propertyName)) {
216
234
  continue;
217
235
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/stores/accounts/utils.ts"],"names":[],"mappings":";;;;;;;;;AAaA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAC5D,OAAO,aAAa,MAAM,aAAa,CAAC;AACxC,OAAO,iBAAiB,MAAM,kBAAkB,CAAC;AACjD,OAAO,qBAAqB,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,MAAM,oCAAoC,GAAG,CAAC,aAAqB,EAAE,WAAwB,EAAE,EAAE;;IAC/F,MAAM,KAAK,GAAyC,EAAE,CAAC;IACvD,KAAK,MAAM,gBAAgB,IAAI,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAA,MAAA,WAAW,CAAC,gBAAgB,CAAC,0CAAE,KAAK,0CAAG,aAAa,CAAC,CAAC;QACnE,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAE,WAAwB,EAAE,EAAE;;IAClF,MAAM,CACJ,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,OAAO,KAAI,OAAO,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,OAAO,CAAA,KAAK,QAAQ,EACxE,6EAA6E,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,OAAO,GAAG,CACzG,CAAC;IACF,MAAM,CACJ,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAC9C,kEAAkE,WAAW,GAAG,CACjF,CAAC;IAEF,MAAM,KAAK,GAAG,oCAAoC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACxF,MAAM,kBAAkB,qBAAQ,OAAO,CAAC,WAAW,CAAE,CAAC;IACtD,KAAK,MAAM,gBAAgB,IAAI,KAAK,EAAE,CAAC;QACrC,kBAAkB,CAAC,gBAAgB,CAAC,qBAAQ,kBAAkB,CAAC,gBAAgB,CAAC,CAAE,CAAC;QACnF,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,gBAAkC,EAAE,EAAE;IACrF,MAAM,6BAA6B,GAAkC,EAAE,CAAC;IACxE,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,KAAK,MAAM,cAAc,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC;gBACvB,6BAA6B,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG;oBAClD,SAAS;oBACT,mBAAmB,EAAE,cAAc,CAAC,KAAK;iBAC1C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,6BAA6B,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,KAAU,EAAO,EAAE;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;aAC5C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACzD,CAAC;IAED,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC;YACrC,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,MAAW,EAAE,EAAE;IACjD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,qBAAqB,CAAC;QAC1C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;IAEH,OAAO,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,eAAoB,EAAE,EAAE;IAC5D,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;QACnD,GAAG,EAAE,eAAe,CAAC,GAAG;QACxB,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,KAAK,EAAE,eAAe,CAAC,KAAK;QAC5B,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,UAAU,EAAE,eAAe,CAAC,UAAU;QACtC,eAAe,EAAE,eAAe,CAAC,eAAe;QAChD,YAAY,EAAE,eAAe,CAAC,YAAY;QAC1C,KAAK,EAAE,eAAe,CAAC,KAAK;QAC5B,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,MAAM,EAAE,eAAe,CAAC,MAAM;QAC9B,UAAU,EAAE,eAAe,CAAC,UAAU;QACtC,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,gBAAgB,EAAE,eAAe,CAAC,gBAAgB;QAClD,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,MAAM,EAAE,0BAA0B,CAAC,eAAe,CAAC,MAAM,CAAC;KAC3D,CAAC,CAAC;IAEH,OAAO,sBAAsB,IAAI,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,GAAG,CAAC;QAC7E,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAY,EAAE,EAAE;IAC5C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,cAAc,GAAG,qBAAqB,CAC1C,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAC5B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,CAC/D,CACF,CACF,CAAC;IAEF,OAAO,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,OAAgB,EAAE,EAAE;;IACjE,MAAM,gBAAgB,GAAG,qBAAqB,iCACzC,OAAO,KACV,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO;YACvB,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,CAAC,CAC7E;YACH,CAAC,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,IACpB,CAAC;IAEH,IAAI,CAAC,gBAAgB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC9D,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,0CAAE,KAAK,EAAE,CAAC;QACrC,gBAAgB,CAAC,OAAO,qBAAQ,gBAAgB,CAAC,OAAO,CAAE,CAAC;QAC3D,OAAO,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;IACxC,CAAC;IACD,IAAI,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpF,OAAO,gBAAgB,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC/D,MAAM,mBAAmB,mCACpB,OAAO,KACV,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,oBAAoB,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,EAC/C,QAAQ,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAC,CAAC,CAAC,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GACrF,CAAC;IACF,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACpE,IAAI,CAAC,gBAAgB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC9D,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpF,OAAO,gBAAgB,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,IAAI,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,QAAQ,KAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtF,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,eAA6C,EACvB,EAAE;IACxB,MAAM,KAAK,GAAyB;QAClC,kBAAkB,EAAE,EAAE;QACtB,WAAW,EAAE,EAAE;KAChB,CAAC;IACF,KAAK,MAAM,cAAc,IAAI,eAAe,IAAI,EAAE,EAAE,CAAC;QACnD,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,kBAAkB,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;YACjE,CAAC;YACD,KAAK,CAAC,kBAAkB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjD,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YACnD,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,gBAAkC,EAAE,EAAE;IAC/E,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,OAAO,CAAC,SAAS,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,8BAA8B,GAAG,CAAC,WAAwB,EAAE,EAAE;;IAClE,MAAM,qBAAqB,qBAAQ,WAAW,CAAE,CAAC;IACjD,IAAI,qBAAqB,CAAC,iBAAiB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;QAC9E,OAAO,qBAAqB,CAAC,iBAAiB,CAAC;IACjD,CAAC;IACD,MAAM,aAAa,GAAG,MAAA,qBAAqB,CAAC,aAAa,mCAAI,qBAAqB,CAAC,aAAa,CAAC;IACjG,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,qBAAqB,CAAC,aAAa,CAAC;IAC3C,OAAO,qBAAqB,CAAC,aAAa,CAAC;IAC3C,OAAO,qBAAqB,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,YAAuC,EAAE,EAAE;;IACvF,MAAM,0BAA0B,GAAgC,EAAE,CAAC;IACnE,KAAK,MAAM,WAAW,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,qBAAqB,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;QAC1E,KAAK,MAAM,YAAY,IAAI,qBAAqB,EAAE,CAAC;YACjD,IACE,qBAAqB,CAAC,YAAY,CAAC,KAAK,SAAS;gBACjD,2BAA2B,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7C,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,iBAAiB,GAAG,CAAA,MAAA,0BAA0B,CAAC,YAAY,CAAC,0CAAE,SAAS,KAAI,CAAC,CAAC;YACnF,IAAI,CAAC,qBAAqB,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBAChE,0BAA0B,CAAC,YAAY,CAAC,GAAG;oBACzC,SAAS,EAAE,qBAAqB,CAAC,SAAS;oBAC1C,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC;iBAC3C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,0BAA0B,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,YAEvC,EAAE,EAAE;IACH,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,MAAM,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,GAAG,6BAA6B,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAQF,yEAAyE;AACzE,MAAM,UAAU,GAAG,CAAI,QAAsB,EAAc,EAAE,CAC3D,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACvB,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;SACf,IAAI,CAAC,GAAG,CAAC;SACT,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,IAAI,EAAE,KAAK,KAAK,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAO,IAAY,EAAkC,EAAE;IAC/F,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3C,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;YAClB,yBAAyB;YACzB,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC,KAAK,CAAC,6CAA6C,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,CAAC;gBACN,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,UAAU,EAAE,KAAK,CAAC,MAAM;gBACxB,eAAe,EAAE,KAAK;aACvB,CAAC,CAAC;YAEH,2BAA2B;YAC3B,IAAI,CAAC;gBACH,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC,CAAC;QACF,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,CAAC,KAAK,CAAC,6CAA6C,GAAG,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC;QAEF,mBAAmB;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,UAAU,CACR,GAAG,EAAE,CACH,MAAM,CAAC,KAAK,CAAC,6CAA6C,GAAG,cAAc,OAAO,GAAG,CAAC,CAAC,EACzF,OAAO,CACR,CAAC;QAEF,gBAAgB;QAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3C,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;YACxC,yBAAyB;YACzB,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,6CAA6C,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,CAAC;gBACN,SAAS,EAAE,KAAK,CAAC,UAAU;gBAC3B,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,eAAe,EAAE,OAAO;aACzB,CAAC,CAAC;YACH,6BAA6B;YAC7B,IAAI,CAAC;gBACH,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;YACd,6BAA6B;YAC7B,IAAI,CAAC;gBACH,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,MAAM,CAAC,KAAK,CAAC,6CAA6C,GAAG,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,UAAU,CACR,GAAG,EAAE,CACH,MAAM,CAAC,KAAK,CAAC,6CAA6C,GAAG,cAAc,OAAO,GAAG,CAAC,CAAC,EACzF,OAAO,CACR,CAAC;QAEF,gBAAgB;QAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CACjC,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;YACxC,OAAO,CAAC;gBACN,eAAe,EAAE,OAAO;aACzB,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;YAAC,WAAM,CAAC,CAAA,CAAC;YACV,IAAI,CAAC;gBACH,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;YACjB,CAAC;YAAC,WAAM,CAAC,CAAA,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CACnC,MAAM,CAAC,KAAK,CAAC,gDAAgD,GAAG,GAAG,CAAC,CAAC,CACtE,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,UAAU,CACR,GAAG,EAAE,CACH,MAAM,CACJ,KAAK,CAAC,gDAAgD,GAAG,cAAc,OAAO,GAAG,CAAC,CACnF,EACH,OAAO,CACR,CAAC;QAEF,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,IAAI,CAAC;QACH,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,KAAK,CAAC,qDAAqD,IAAI,sBAAsB,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC;YAClC,oBAAoB,CAAC,IAAI,CAAC;YAC1B,oBAAoB,CAAC,IAAI,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC;SACjB,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,GAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,gBAAkC,EAAE,EAAE;IACnF,MAAM,uBAAuB,GAA4D,EAAE,CAAC;IAC5F,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,KAAK,MAAM,cAAc,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,uBAAuB,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAEhG,2EAA2E;IAC3E,IAAI,uBAAuB,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACxC,uBAAuB,CAAC,MAAM,GAAG,EAAE,CAAC;IACtC,CAAC;IAED,6EAA6E;IAC7E,yDAAyD;IACzD,OAAO,uBAAuB,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAE,EAAE;;IACzD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,kBAAkB,GAAG,MAAA,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,0CAAE,KAAK,CAAC;IACrF,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,kBAAkB,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,kBAAkB,GAAG,MAAA,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,0CAAE,KAAK,CAAC;IACrF,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,kBAAkB,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,kBAAkB,GAAG,MAAA,qBAAqB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,0CAAE,KAAK,CAAC;IACzF,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,kBAAkB,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,6FAA6F;IAC7F,yEAAyE;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,OAAgB,EAAE,EAAE;IACpE,OAAO,qBAAQ,OAAO,CAAE,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;YACxD,OAAO,EAAE,OAAO,CAAC,gBAAgB;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IACd,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,qBAAQ,OAAO,CAAC,MAAM,CAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;YACtD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IACd,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG;IACZ,qBAAqB;IACrB,gCAAgC;IAChC,uBAAuB;IACvB,0BAA0B;IAC1B,8BAA8B;IAC9B,4BAA4B;IAC5B,6BAA6B;IAC7B,uBAAuB;IACvB,0BAA0B;IAC1B,8BAA8B;IAC9B,sBAAsB;IACtB,iCAAiC;IACjC,UAAU;CACX,CAAC;AAEF,eAAe,KAAK,CAAC","sourcesContent":["import {\n Account,\n Role,\n Communities,\n AccountComment,\n AccountsComments,\n AccountsCommentsIndexes,\n AccountCommentsIndex,\n CommentCidsToAccountsComments,\n Comment,\n AccountEdit,\n AccountEditsSummary,\n} from \"../../types\";\nimport assert from \"assert\";\nimport Logger from \"@pkcprotocol/pkc-logger\";\nconst log = Logger(\"bitsocial-react-hooks:accounts:stores\");\nimport commentsStore from \"../comments\";\nimport repliesPagesStore from \"../replies-pages\";\nimport communitiesPagesStore from \"../communities-pages\";\nimport PkcJs from \"../../lib/pkc-js\";\n\nconst getAuthorAddressRolesFromCommunities = (authorAddress: string, communities: Communities) => {\n const roles: { [communityAddress: string]: Role } = {};\n for (const communityAddress in communities) {\n const role = communities[communityAddress]?.roles?.[authorAddress];\n if (role) {\n roles[communityAddress] = role;\n }\n }\n return roles;\n};\n\nexport const getAccountCommunities = (account: Account, communities: Communities) => {\n assert(\n account?.author?.address && typeof account?.author?.address === \"string\",\n `accountsStore utils getAccountCommunities invalid account.author.address '${account?.author?.address}'`,\n );\n assert(\n communities && typeof communities === \"object\",\n `accountsStore utils getAccountCommunities invalid communities '${communities}'`,\n );\n\n const roles = getAuthorAddressRolesFromCommunities(account.author.address, communities);\n const accountCommunities = { ...account.communities };\n for (const communityAddress in roles) {\n accountCommunities[communityAddress] = { ...accountCommunities[communityAddress] };\n accountCommunities[communityAddress].role = roles[communityAddress];\n }\n return accountCommunities;\n};\n\nexport const getCommentCidsToAccountsComments = (accountsComments: AccountsComments) => {\n const commentCidsToAccountsComments: CommentCidsToAccountsComments = {};\n for (const accountId in accountsComments) {\n for (const accountComment of accountsComments[accountId]) {\n if (accountComment.cid) {\n commentCidsToAccountsComments[accountComment.cid] = {\n accountId,\n accountCommentIndex: accountComment.index,\n };\n }\n }\n }\n return commentCidsToAccountsComments;\n};\n\nconst cloneWithoutFunctions = (value: any): any => {\n if (Array.isArray(value)) {\n return value\n .map((entry) => cloneWithoutFunctions(entry))\n .filter((entry) => entry !== undefined);\n }\n if (!value || typeof value !== \"object\") {\n return typeof value === \"function\" ? undefined : value;\n }\n\n const clonedValue: Record<string, any> = {};\n for (const key in value) {\n if (typeof value[key] === \"function\") {\n continue;\n }\n const clonedChild = cloneWithoutFunctions(value[key]);\n if (clonedChild !== undefined) {\n clonedValue[key] = clonedChild;\n }\n }\n return clonedValue;\n};\n\nconst compactStoredCommentAuthor = (author: any) => {\n if (!author || typeof author !== \"object\") {\n return undefined;\n }\n\n const compactAuthor = cloneWithoutFunctions({\n address: author.address,\n shortAddress: author.shortAddress,\n displayName: author.displayName,\n avatar: author.avatar,\n flair: author.flair,\n });\n\n return compactAuthor && Object.keys(compactAuthor).length > 0 ? compactAuthor : undefined;\n};\n\nconst compactStoredOriginalComment = (originalComment: any) => {\n if (!originalComment || typeof originalComment !== \"object\") {\n return undefined;\n }\n\n const compactOriginalComment = cloneWithoutFunctions({\n cid: originalComment.cid,\n content: originalComment.content,\n title: originalComment.title,\n link: originalComment.link,\n linkWidth: originalComment.linkWidth,\n linkHeight: originalComment.linkHeight,\n linkHtmlTagName: originalComment.linkHtmlTagName,\n thumbnailUrl: originalComment.thumbnailUrl,\n media: originalComment.media,\n spoiler: originalComment.spoiler,\n nsfw: originalComment.nsfw,\n deleted: originalComment.deleted,\n removed: originalComment.removed,\n reason: originalComment.reason,\n quotedCids: originalComment.quotedCids,\n parentCid: originalComment.parentCid,\n postCid: originalComment.postCid,\n communityAddress: originalComment.communityAddress,\n timestamp: originalComment.timestamp,\n author: compactStoredCommentAuthor(originalComment.author),\n });\n\n return compactOriginalComment && Object.keys(compactOriginalComment).length > 0\n ? compactOriginalComment\n : undefined;\n};\n\nconst compactStoredReplies = (replies: any) => {\n if (!replies || typeof replies !== \"object\") {\n return undefined;\n }\n\n const compactReplies = cloneWithoutFunctions(\n Object.fromEntries(\n Object.entries(replies).filter(\n ([replyKey]) => replyKey !== \"pages\" && replyKey !== \"clients\",\n ),\n ),\n );\n\n return compactReplies && Object.keys(compactReplies).length > 0 ? compactReplies : undefined;\n};\n\nexport const sanitizeAccountCommentForState = (comment: Comment) => {\n const sanitizedComment = cloneWithoutFunctions({\n ...comment,\n signer: undefined,\n raw: undefined,\n replies: comment?.replies\n ? Object.fromEntries(\n Object.entries(comment.replies).filter(([replyKey]) => replyKey !== \"pages\"),\n )\n : comment?.replies,\n });\n\n if (!sanitizedComment || typeof sanitizedComment !== \"object\") {\n return sanitizedComment;\n }\n if (sanitizedComment?.replies?.pages) {\n sanitizedComment.replies = { ...sanitizedComment.replies };\n delete sanitizedComment.replies.pages;\n }\n if (sanitizedComment?.replies && Object.keys(sanitizedComment.replies).length === 0) {\n delete sanitizedComment.replies;\n }\n return sanitizedComment;\n};\n\nexport const sanitizeStoredAccountComment = (comment: Comment) => {\n const preprocessedComment = {\n ...comment,\n signer: undefined,\n clients: undefined,\n raw: undefined,\n replies: compactStoredReplies(comment?.replies),\n original: comment?.edit ? compactStoredOriginalComment(comment.original) : undefined,\n };\n const sanitizedComment = cloneWithoutFunctions(preprocessedComment);\n if (!sanitizedComment || typeof sanitizedComment !== \"object\") {\n return sanitizedComment;\n }\n if (sanitizedComment?.replies && Object.keys(sanitizedComment.replies).length === 0) {\n delete sanitizedComment.replies;\n }\n if (sanitizedComment?.original && Object.keys(sanitizedComment.original).length === 0) {\n delete sanitizedComment.original;\n }\n return sanitizedComment;\n};\n\nexport const getAccountCommentsIndex = (\n accountComments: AccountComment[] | undefined,\n): AccountCommentsIndex => {\n const index: AccountCommentsIndex = {\n byCommunityAddress: {},\n byParentCid: {},\n };\n for (const accountComment of accountComments || []) {\n if (accountComment.communityAddress) {\n if (!index.byCommunityAddress[accountComment.communityAddress]) {\n index.byCommunityAddress[accountComment.communityAddress] = [];\n }\n index.byCommunityAddress[accountComment.communityAddress].push(accountComment.index);\n }\n if (accountComment.parentCid) {\n if (!index.byParentCid[accountComment.parentCid]) {\n index.byParentCid[accountComment.parentCid] = [];\n }\n index.byParentCid[accountComment.parentCid].push(accountComment.index);\n }\n }\n return index;\n};\n\nexport const getAccountsCommentsIndexes = (accountsComments: AccountsComments) => {\n const indexes: AccountsCommentsIndexes = {};\n for (const accountId in accountsComments) {\n indexes[accountId] = getAccountCommentsIndex(accountsComments[accountId]);\n }\n return indexes;\n};\n\nconst accountEditNonPropertyNames = new Set([\n \"author\",\n \"signer\",\n \"clientId\",\n \"commentCid\",\n \"communityAddress\",\n \"communityAddress\",\n \"timestamp\",\n]);\n\nconst normalizeAccountEditForSummary = (accountEdit: AccountEdit) => {\n const normalizedAccountEdit = { ...accountEdit };\n if (normalizedAccountEdit.commentModeration) {\n Object.assign(normalizedAccountEdit, normalizedAccountEdit.commentModeration);\n delete normalizedAccountEdit.commentModeration;\n }\n const communityEdit = normalizedAccountEdit.communityEdit ?? normalizedAccountEdit.communityEdit;\n if (communityEdit && typeof communityEdit === \"object\") {\n Object.assign(normalizedAccountEdit, communityEdit);\n }\n delete normalizedAccountEdit.communityEdit;\n delete normalizedAccountEdit.communityEdit;\n return normalizedAccountEdit;\n};\n\nexport const getAccountEditPropertySummary = (accountEdits: AccountEdit[] | undefined) => {\n const accountEditPropertySummary: AccountEditsSummary[string] = {};\n for (const accountEdit of accountEdits || []) {\n const normalizedAccountEdit = normalizeAccountEditForSummary(accountEdit);\n for (const propertyName in normalizedAccountEdit) {\n if (\n normalizedAccountEdit[propertyName] === undefined ||\n accountEditNonPropertyNames.has(propertyName)\n ) {\n continue;\n }\n const previousTimestamp = accountEditPropertySummary[propertyName]?.timestamp || 0;\n if ((normalizedAccountEdit.timestamp || 0) >= previousTimestamp) {\n accountEditPropertySummary[propertyName] = {\n timestamp: normalizedAccountEdit.timestamp,\n value: normalizedAccountEdit[propertyName],\n };\n }\n }\n }\n return accountEditPropertySummary;\n};\n\nexport const getAccountsEditsSummary = (accountEdits: {\n [commentCidOrCommunityAddress: string]: AccountEdit[];\n}) => {\n const summary: AccountEditsSummary = {};\n for (const target in accountEdits || {}) {\n summary[target] = getAccountEditPropertySummary(accountEdits[target]);\n }\n return summary;\n};\n\ninterface CommentLinkDimensions {\n linkWidth?: number;\n linkHeight?: number;\n linkHtmlTagName?: \"img\" | \"video\" | \"audio\";\n}\n\n// polyfill Promise.any, exported for test coverage of empty-array branch\nconst promiseAny = <T>(promises: Promise<T>[]): Promise<T> =>\n new Promise((res, rej) => {\n let count = promises.length;\n if (count === 0) return rej(Error(\"all promises rejected\"));\n promises.forEach((p) =>\n Promise.resolve(p)\n .then(res)\n .catch((e) => {\n if (--count === 0) rej(Error(\"all promises rejected\"));\n }),\n );\n });\n\nexport const fetchCommentLinkDimensions = async (link: string): Promise<CommentLinkDimensions> => {\n if (!link) {\n return {};\n }\n\n const fetchImageDimensions = (url: string) =>\n new Promise<CommentLinkDimensions>((resolve, reject) => {\n const image = new Image();\n image.onload = () => {\n // don't accept 0px value\n if (!image.width || !image.height) {\n return reject(Error(`failed fetching image dimensions for url '${url}'`));\n }\n resolve({\n linkWidth: image.width,\n linkHeight: image.height,\n linkHtmlTagName: \"img\",\n });\n\n // remove image from memory\n try {\n image.src = \"\";\n } catch (e) {}\n };\n image.onerror = (error) => {\n reject(Error(`failed fetching image dimensions for url '${url}'`));\n };\n\n // max loading time\n const timeout = 10000;\n setTimeout(\n () =>\n reject(Error(`failed fetching image dimensions for url '${url}' timeout '${timeout}'`)),\n timeout,\n );\n\n // start loading\n image.src = url;\n });\n\n const fetchVideoDimensions = (url: string) =>\n new Promise<CommentLinkDimensions>((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.muted = true;\n video.loop = false;\n video.addEventListener(\"loadeddata\", () => {\n // don't accept 0px value\n if (!video.videoWidth || !video.videoHeight) {\n return reject(Error(`failed fetching video dimensions for url '${url}'`));\n }\n resolve({\n linkWidth: video.videoWidth,\n linkHeight: video.videoHeight,\n linkHtmlTagName: \"video\",\n });\n // prevent video from playing\n try {\n video.pause();\n } catch (e) {}\n // prevent video from loading\n try {\n video.src = \"\";\n } catch (e) {}\n });\n video.addEventListener(\"error\", (error) => {\n reject(Error(`failed fetching video dimensions for url '${url}'`));\n });\n\n // max loading time\n const timeout = 30000;\n setTimeout(\n () =>\n reject(Error(`failed fetching video dimensions for url '${url}' timeout '${timeout}'`)),\n timeout,\n );\n\n // start loading\n video.src = url;\n });\n\n const fetchAudio = (url: string) =>\n new Promise<CommentLinkDimensions>((resolve, reject) => {\n const audio = document.createElement(\"audio\");\n audio.addEventListener(\"loadeddata\", () => {\n resolve({\n linkHtmlTagName: \"audio\",\n });\n try {\n audio.pause();\n } catch {}\n try {\n audio.src = \"\";\n } catch {}\n });\n audio.addEventListener(\"error\", () =>\n reject(Error(`failed fetching audio html tag name for url '${url}'`)),\n );\n\n const timeout = 20000;\n setTimeout(\n () =>\n reject(\n Error(`failed fetching audio html tag name for url '${url}' timeout '${timeout}'`),\n ),\n timeout,\n );\n\n audio.src = url;\n });\n\n try {\n if (new URL(link).protocol !== \"https:\") {\n throw Error(`failed fetching comment.link dimensions for link '${link}' not https protocol`);\n }\n const dimensions = await promiseAny([\n fetchImageDimensions(link),\n fetchVideoDimensions(link),\n fetchAudio(link),\n ]);\n return dimensions;\n } catch (error: any) {\n log.error(\"fetchCommentLinkDimensions error\", { error, link });\n return {};\n }\n};\n\nexport const getInitAccountCommentsToUpdate = (accountsComments: AccountsComments) => {\n const accountCommentsToUpdate: { accountComment: AccountComment; accountId: string }[] = [];\n for (const accountId in accountsComments) {\n for (const accountComment of accountsComments[accountId]) {\n accountCommentsToUpdate.push({ accountComment, accountId });\n }\n }\n\n // update newer comments first, more likely to have notifications\n accountCommentsToUpdate.sort((a, b) => b.accountComment.timestamp - a.accountComment.timestamp);\n\n // updating too many comments during init slows down fetching comments/subs\n if (accountCommentsToUpdate.length > 10) {\n accountCommentsToUpdate.length = 10;\n }\n\n // TODO: add some algo to fetch all notifications (even old), but not on init\n // during downtimes when we're not fetching anything else\n return accountCommentsToUpdate;\n};\n\nexport const getAccountCommentDepth = (comment: Comment) => {\n if (!comment.parentCid) {\n return 0;\n }\n let parentCommentDepth = commentsStore.getState().comments[comment.parentCid]?.depth;\n if (typeof parentCommentDepth === \"number\") {\n return parentCommentDepth + 1;\n }\n parentCommentDepth = repliesPagesStore.getState().comments[comment.parentCid]?.depth;\n if (typeof parentCommentDepth === \"number\") {\n return parentCommentDepth + 1;\n }\n parentCommentDepth = communitiesPagesStore.getState().comments[comment.parentCid]?.depth;\n if (typeof parentCommentDepth === \"number\") {\n return parentCommentDepth + 1;\n }\n // if can't find the parent comment depth anywhere, don't include it with the account comment\n // it will be added automatically when challenge verification is received\n};\n\nexport const addShortAddressesToAccountComment = (comment: Comment) => {\n comment = { ...comment };\n try {\n comment.shortCommunityAddress = PkcJs.PKC.getShortAddress({\n address: comment.communityAddress,\n });\n } catch (e) {}\n try {\n comment.author = { ...comment.author };\n comment.author.shortAddress = PkcJs.PKC.getShortAddress({\n address: comment.author.address,\n });\n } catch (e) {}\n return comment;\n};\n\nconst utils = {\n getAccountCommunities,\n getCommentCidsToAccountsComments,\n getAccountCommentsIndex,\n getAccountsCommentsIndexes,\n sanitizeAccountCommentForState,\n sanitizeStoredAccountComment,\n getAccountEditPropertySummary,\n getAccountsEditsSummary,\n fetchCommentLinkDimensions,\n getInitAccountCommentsToUpdate,\n getAccountCommentDepth,\n addShortAddressesToAccountComment,\n promiseAny,\n};\n\nexport default utils;\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/stores/accounts/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Account,\n Role,\n Communities,\n AccountComment,\n AccountsComments,\n AccountsCommentsIndexes,\n AccountCommentsIndex,\n CommentCidsToAccountsComments,\n Comment,\n AccountEdit,\n AccountEditsSummary,\n} from \"../../types\";\nimport assert from \"assert\";\nimport Logger from \"@pkcprotocol/pkc-logger\";\nconst log = Logger(\"bitsocial-react-hooks:accounts:stores\");\nimport commentsStore from \"../comments\";\nimport repliesPagesStore from \"../replies-pages\";\nimport communitiesPagesStore from \"../communities-pages\";\nimport PkcJs from \"../../lib/pkc-js\";\n\nconst getAuthorAddressRolesFromCommunities = (authorAddress: string, communities: Communities) => {\n const roles: { [communityAddress: string]: Role } = {};\n for (const communityAddress in communities) {\n const role = communities[communityAddress]?.roles?.[authorAddress];\n if (role) {\n roles[communityAddress] = role;\n }\n }\n return roles;\n};\n\nexport const getAccountCommunities = (account: Account, communities: Communities) => {\n assert(\n account?.author?.address && typeof account?.author?.address === \"string\",\n `accountsStore utils getAccountCommunities invalid account.author.address '${account?.author?.address}'`,\n );\n assert(\n communities && typeof communities === \"object\",\n `accountsStore utils getAccountCommunities invalid communities '${communities}'`,\n );\n\n const roles = getAuthorAddressRolesFromCommunities(account.author.address, communities);\n const accountCommunities = { ...account.communities };\n for (const communityAddress in roles) {\n accountCommunities[communityAddress] = { ...accountCommunities[communityAddress] };\n accountCommunities[communityAddress].role = roles[communityAddress];\n }\n return accountCommunities;\n};\n\nexport const getCommentCidsToAccountsComments = (accountsComments: AccountsComments) => {\n const commentCidsToAccountsComments: CommentCidsToAccountsComments = {};\n for (const accountId in accountsComments) {\n for (const accountComment of accountsComments[accountId]) {\n if (accountComment.cid) {\n commentCidsToAccountsComments[accountComment.cid] = {\n accountId,\n accountCommentIndex: accountComment.index,\n };\n }\n }\n }\n return commentCidsToAccountsComments;\n};\n\nconst cloneWithoutFunctions = (value: any): any => {\n if (Array.isArray(value)) {\n return value\n .map((entry) => cloneWithoutFunctions(entry))\n .filter((entry) => entry !== undefined);\n }\n if (!value || typeof value !== \"object\") {\n return typeof value === \"function\" ? undefined : value;\n }\n\n const clonedValue: Record<string, any> = {};\n for (const key in value) {\n if (typeof value[key] === \"function\") {\n continue;\n }\n const clonedChild = cloneWithoutFunctions(value[key]);\n if (clonedChild !== undefined) {\n clonedValue[key] = clonedChild;\n }\n }\n return clonedValue;\n};\n\nconst compactStoredCommentAuthor = (author: any) => {\n if (!author || typeof author !== \"object\") {\n return undefined;\n }\n\n const compactAuthor = cloneWithoutFunctions({\n address: author.address,\n shortAddress: author.shortAddress,\n displayName: author.displayName,\n avatar: author.avatar,\n flair: author.flair,\n });\n\n return compactAuthor && Object.keys(compactAuthor).length > 0 ? compactAuthor : undefined;\n};\n\nconst compactStoredOriginalComment = (originalComment: any) => {\n if (!originalComment || typeof originalComment !== \"object\") {\n return undefined;\n }\n\n const compactOriginalComment = cloneWithoutFunctions({\n cid: originalComment.cid,\n content: originalComment.content,\n title: originalComment.title,\n link: originalComment.link,\n linkWidth: originalComment.linkWidth,\n linkHeight: originalComment.linkHeight,\n linkHtmlTagName: originalComment.linkHtmlTagName,\n thumbnailUrl: originalComment.thumbnailUrl,\n media: originalComment.media,\n spoiler: originalComment.spoiler,\n nsfw: originalComment.nsfw,\n deleted: originalComment.deleted,\n removed: originalComment.removed,\n reason: originalComment.reason,\n quotedCids: originalComment.quotedCids,\n parentCid: originalComment.parentCid,\n postCid: originalComment.postCid,\n communityAddress: originalComment.communityAddress,\n timestamp: originalComment.timestamp,\n author: compactStoredCommentAuthor(originalComment.author),\n });\n\n return compactOriginalComment && Object.keys(compactOriginalComment).length > 0\n ? compactOriginalComment\n : undefined;\n};\n\nconst compactStoredReplies = (replies: any) => {\n if (!replies || typeof replies !== \"object\") {\n return undefined;\n }\n\n const compactReplies = cloneWithoutFunctions(\n Object.fromEntries(\n Object.entries(replies).filter(\n ([replyKey]) => replyKey !== \"pages\" && replyKey !== \"clients\",\n ),\n ),\n );\n\n return compactReplies && Object.keys(compactReplies).length > 0 ? compactReplies : undefined;\n};\n\nexport const sanitizeAccountCommentForState = (comment: Comment) => {\n const sanitizedComment = cloneWithoutFunctions({\n ...comment,\n signer: undefined,\n raw: undefined,\n replies: comment?.replies\n ? Object.fromEntries(\n Object.entries(comment.replies).filter(([replyKey]) => replyKey !== \"pages\"),\n )\n : comment?.replies,\n });\n\n if (!sanitizedComment || typeof sanitizedComment !== \"object\") {\n return sanitizedComment;\n }\n if (sanitizedComment?.replies?.pages) {\n sanitizedComment.replies = { ...sanitizedComment.replies };\n delete sanitizedComment.replies.pages;\n }\n if (sanitizedComment?.replies && Object.keys(sanitizedComment.replies).length === 0) {\n delete sanitizedComment.replies;\n }\n return sanitizedComment;\n};\n\nexport const sanitizeStoredAccountComment = (comment: Comment) => {\n const preprocessedComment = {\n ...comment,\n signer: undefined,\n clients: undefined,\n raw: undefined,\n replies: compactStoredReplies(comment?.replies),\n original: comment?.edit ? compactStoredOriginalComment(comment.original) : undefined,\n };\n const sanitizedComment = cloneWithoutFunctions(preprocessedComment);\n if (!sanitizedComment || typeof sanitizedComment !== \"object\") {\n return sanitizedComment;\n }\n if (sanitizedComment?.replies && Object.keys(sanitizedComment.replies).length === 0) {\n delete sanitizedComment.replies;\n }\n if (sanitizedComment?.original && Object.keys(sanitizedComment.original).length === 0) {\n delete sanitizedComment.original;\n }\n return sanitizedComment;\n};\n\nexport const getAccountCommentsIndex = (\n accountComments: AccountComment[] | undefined,\n): AccountCommentsIndex => {\n const index: AccountCommentsIndex = {\n byCommunityAddress: {},\n byParentCid: {},\n };\n for (const accountComment of accountComments || []) {\n if (accountComment.communityAddress) {\n if (!index.byCommunityAddress[accountComment.communityAddress]) {\n index.byCommunityAddress[accountComment.communityAddress] = [];\n }\n index.byCommunityAddress[accountComment.communityAddress].push(accountComment.index);\n }\n if (accountComment.parentCid) {\n if (!index.byParentCid[accountComment.parentCid]) {\n index.byParentCid[accountComment.parentCid] = [];\n }\n index.byParentCid[accountComment.parentCid].push(accountComment.index);\n }\n }\n return index;\n};\n\nexport const getAccountsCommentsIndexes = (accountsComments: AccountsComments) => {\n const indexes: AccountsCommentsIndexes = {};\n for (const accountId in accountsComments) {\n indexes[accountId] = getAccountCommentsIndex(accountsComments[accountId]);\n }\n return indexes;\n};\n\nconst accountEditNonPropertyNames = new Set([\n \"author\",\n \"signer\",\n \"clientId\",\n \"commentCid\",\n \"communityAddress\",\n \"communityAddress\",\n \"timestamp\",\n]);\n\nexport const COMMENT_MODERATION_AUTHOR_SUMMARY_KEY = \"commentModeration.author\";\n\nconst normalizeAccountEditForSummary = (accountEdit: AccountEdit) => {\n const normalizedAccountEdit = { ...accountEdit };\n const commentModeration = normalizedAccountEdit.commentModeration;\n if (commentModeration && typeof commentModeration === \"object\") {\n const { author, ...commentModerationProperties } = commentModeration;\n Object.assign(normalizedAccountEdit, commentModerationProperties);\n if (Object.prototype.hasOwnProperty.call(commentModeration, \"author\")) {\n normalizedAccountEdit[COMMENT_MODERATION_AUTHOR_SUMMARY_KEY] = author;\n }\n delete normalizedAccountEdit.commentModeration;\n }\n const communityEdit = normalizedAccountEdit.communityEdit ?? normalizedAccountEdit.communityEdit;\n if (communityEdit && typeof communityEdit === \"object\") {\n Object.assign(normalizedAccountEdit, communityEdit);\n }\n delete normalizedAccountEdit.communityEdit;\n delete normalizedAccountEdit.communityEdit;\n return normalizedAccountEdit;\n};\n\nexport const getAccountEditPropertySummary = (accountEdits: AccountEdit[] | undefined) => {\n const accountEditPropertySummary: AccountEditsSummary[string] = {};\n for (const accountEdit of accountEdits || []) {\n const normalizedAccountEdit = normalizeAccountEditForSummary(accountEdit);\n for (const propertyName in normalizedAccountEdit) {\n if (\n (normalizedAccountEdit[propertyName] === undefined &&\n propertyName !== COMMENT_MODERATION_AUTHOR_SUMMARY_KEY) ||\n accountEditNonPropertyNames.has(propertyName)\n ) {\n continue;\n }\n const previousTimestamp = accountEditPropertySummary[propertyName]?.timestamp || 0;\n if ((normalizedAccountEdit.timestamp || 0) >= previousTimestamp) {\n accountEditPropertySummary[propertyName] = {\n timestamp: normalizedAccountEdit.timestamp,\n value: normalizedAccountEdit[propertyName],\n };\n }\n }\n }\n return accountEditPropertySummary;\n};\n\nexport const getAccountsEditsSummary = (accountEdits: {\n [commentCidOrCommunityAddress: string]: AccountEdit[];\n}) => {\n const summary: AccountEditsSummary = {};\n for (const target in accountEdits || {}) {\n summary[target] = getAccountEditPropertySummary(accountEdits[target]);\n }\n return summary;\n};\n\ninterface CommentLinkDimensions {\n linkWidth?: number;\n linkHeight?: number;\n linkHtmlTagName?: \"img\" | \"video\" | \"audio\";\n}\n\n// polyfill Promise.any, exported for test coverage of empty-array branch\nconst promiseAny = <T>(promises: Promise<T>[]): Promise<T> =>\n new Promise((res, rej) => {\n let count = promises.length;\n if (count === 0) return rej(Error(\"all promises rejected\"));\n promises.forEach((p) =>\n Promise.resolve(p)\n .then(res)\n .catch((e) => {\n if (--count === 0) rej(Error(\"all promises rejected\"));\n }),\n );\n });\n\nexport const fetchCommentLinkDimensions = async (link: string): Promise<CommentLinkDimensions> => {\n if (!link) {\n return {};\n }\n\n const fetchImageDimensions = (url: string) =>\n new Promise<CommentLinkDimensions>((resolve, reject) => {\n const image = new Image();\n image.onload = () => {\n // don't accept 0px value\n if (!image.width || !image.height) {\n return reject(Error(`failed fetching image dimensions for url '${url}'`));\n }\n resolve({\n linkWidth: image.width,\n linkHeight: image.height,\n linkHtmlTagName: \"img\",\n });\n\n // remove image from memory\n try {\n image.src = \"\";\n } catch (e) {}\n };\n image.onerror = (error) => {\n reject(Error(`failed fetching image dimensions for url '${url}'`));\n };\n\n // max loading time\n const timeout = 10000;\n setTimeout(\n () =>\n reject(Error(`failed fetching image dimensions for url '${url}' timeout '${timeout}'`)),\n timeout,\n );\n\n // start loading\n image.src = url;\n });\n\n const fetchVideoDimensions = (url: string) =>\n new Promise<CommentLinkDimensions>((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.muted = true;\n video.loop = false;\n video.addEventListener(\"loadeddata\", () => {\n // don't accept 0px value\n if (!video.videoWidth || !video.videoHeight) {\n return reject(Error(`failed fetching video dimensions for url '${url}'`));\n }\n resolve({\n linkWidth: video.videoWidth,\n linkHeight: video.videoHeight,\n linkHtmlTagName: \"video\",\n });\n // prevent video from playing\n try {\n video.pause();\n } catch (e) {}\n // prevent video from loading\n try {\n video.src = \"\";\n } catch (e) {}\n });\n video.addEventListener(\"error\", (error) => {\n reject(Error(`failed fetching video dimensions for url '${url}'`));\n });\n\n // max loading time\n const timeout = 30000;\n setTimeout(\n () =>\n reject(Error(`failed fetching video dimensions for url '${url}' timeout '${timeout}'`)),\n timeout,\n );\n\n // start loading\n video.src = url;\n });\n\n const fetchAudio = (url: string) =>\n new Promise<CommentLinkDimensions>((resolve, reject) => {\n const audio = document.createElement(\"audio\");\n audio.addEventListener(\"loadeddata\", () => {\n resolve({\n linkHtmlTagName: \"audio\",\n });\n try {\n audio.pause();\n } catch {}\n try {\n audio.src = \"\";\n } catch {}\n });\n audio.addEventListener(\"error\", () =>\n reject(Error(`failed fetching audio html tag name for url '${url}'`)),\n );\n\n const timeout = 20000;\n setTimeout(\n () =>\n reject(\n Error(`failed fetching audio html tag name for url '${url}' timeout '${timeout}'`),\n ),\n timeout,\n );\n\n audio.src = url;\n });\n\n try {\n if (new URL(link).protocol !== \"https:\") {\n throw Error(`failed fetching comment.link dimensions for link '${link}' not https protocol`);\n }\n const dimensions = await promiseAny([\n fetchImageDimensions(link),\n fetchVideoDimensions(link),\n fetchAudio(link),\n ]);\n return dimensions;\n } catch (error: any) {\n log.error(\"fetchCommentLinkDimensions error\", { error, link });\n return {};\n }\n};\n\nexport const getInitAccountCommentsToUpdate = (accountsComments: AccountsComments) => {\n const accountCommentsToUpdate: { accountComment: AccountComment; accountId: string }[] = [];\n for (const accountId in accountsComments) {\n for (const accountComment of accountsComments[accountId]) {\n accountCommentsToUpdate.push({ accountComment, accountId });\n }\n }\n\n // update newer comments first, more likely to have notifications\n accountCommentsToUpdate.sort((a, b) => b.accountComment.timestamp - a.accountComment.timestamp);\n\n // updating too many comments during init slows down fetching comments/subs\n if (accountCommentsToUpdate.length > 10) {\n accountCommentsToUpdate.length = 10;\n }\n\n // TODO: add some algo to fetch all notifications (even old), but not on init\n // during downtimes when we're not fetching anything else\n return accountCommentsToUpdate;\n};\n\nexport const getAccountCommentDepth = (comment: Comment) => {\n if (!comment.parentCid) {\n return 0;\n }\n let parentCommentDepth = commentsStore.getState().comments[comment.parentCid]?.depth;\n if (typeof parentCommentDepth === \"number\") {\n return parentCommentDepth + 1;\n }\n parentCommentDepth = repliesPagesStore.getState().comments[comment.parentCid]?.depth;\n if (typeof parentCommentDepth === \"number\") {\n return parentCommentDepth + 1;\n }\n parentCommentDepth = communitiesPagesStore.getState().comments[comment.parentCid]?.depth;\n if (typeof parentCommentDepth === \"number\") {\n return parentCommentDepth + 1;\n }\n // if can't find the parent comment depth anywhere, don't include it with the account comment\n // it will be added automatically when challenge verification is received\n};\n\nexport const addShortAddressesToAccountComment = (comment: Comment) => {\n comment = { ...comment };\n try {\n comment.shortCommunityAddress = PkcJs.PKC.getShortAddress({\n address: comment.communityAddress,\n });\n } catch (e) {}\n try {\n comment.author = { ...comment.author };\n comment.author.shortAddress = PkcJs.PKC.getShortAddress({\n address: comment.author.address,\n });\n } catch (e) {}\n return comment;\n};\n\nconst utils = {\n getAccountCommunities,\n getCommentCidsToAccountsComments,\n getAccountCommentsIndex,\n getAccountsCommentsIndexes,\n sanitizeAccountCommentForState,\n sanitizeStoredAccountComment,\n getAccountEditPropertySummary,\n getAccountsEditsSummary,\n fetchCommentLinkDimensions,\n getInitAccountCommentsToUpdate,\n getAccountCommentDepth,\n addShortAddressesToAccountComment,\n promiseAny,\n};\n\nexport default utils;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"comments-store.d.ts","sourceRoot":"","sources":["../../../src/stores/comments/comments-store.ts"],"names":[],"mappings":"AAKA,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,eAAO,MAAM,GAAG,QAAkD,CAAC;AACnE,OAAO,EAAW,QAAQ,EAAW,MAAM,aAAa,CAAC;AAkBzD,eAAO,MAAM,SAAS,EAAE,GAAQ,CAAC;AAEjC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE,CAAA;KAAE,CAAC;IAC1C,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,sBAAsB,EAAE,QAAQ,CAAC;IACjC,qBAAqB,EAAE,QAAQ,CAAC;IAChC,cAAc,EAAE,QAAQ,CAAC;CAC1B,CAAC;AAuDF,QAAA,MAAM,aAAa,4EA2UjB,CAAC;AA8BH,eAAO,MAAM,kBAAkB,qBAgC9B,CAAC;AAGF,eAAO,MAAM,6BAA6B,qBAGzC,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"comments-store.d.ts","sourceRoot":"","sources":["../../../src/stores/comments/comments-store.ts"],"names":[],"mappings":"AAKA,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,eAAO,MAAM,GAAG,QAAkD,CAAC;AACnE,OAAO,EAAW,QAAQ,EAAW,MAAM,aAAa,CAAC;AAmBzD,eAAO,MAAM,SAAS,EAAE,GAAQ,CAAC;AAEjC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE,CAAA;KAAE,CAAC;IAC1C,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,sBAAsB,EAAE,QAAQ,CAAC;IACjC,qBAAqB,EAAE,QAAQ,CAAC;IAChC,cAAc,EAAE,QAAQ,CAAC;CAC1B,CAAC;AAuDF,QAAA,MAAM,aAAa,4EAqZjB,CAAC;AA8BH,eAAO,MAAM,kBAAkB,qBAmC9B,CAAC;AAGF,eAAO,MAAM,6BAA6B,qBAGzC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -24,6 +24,7 @@ const liveComments = {};
24
24
  const liveCommentPromises = {};
25
25
  const commentAutoUpdateSubscribers = {};
26
26
  const stopCommentAfterNextUpdate = {};
27
+ const sparseCommentFollowupRequested = {};
27
28
  const initializedComments = new WeakSet();
28
29
  const trackedListeners = new WeakSet();
29
30
  // reset all event listeners in between tests
@@ -89,7 +90,11 @@ const commentsStore = createStore((setState, getState) => {
89
90
  repliesPagesStore.getState().addRepliesPageCommentsToStore(nextComment);
90
91
  return normalizedComment;
91
92
  });
93
+ const clearCommentUpdateFollowup = (commentCid) => {
94
+ delete sparseCommentFollowupRequested[commentCid];
95
+ };
92
96
  const stopLiveComment = (commentCid, comment) => __awaiter(void 0, void 0, void 0, function* () {
97
+ clearCommentUpdateFollowup(commentCid);
93
98
  const liveComment = comment || liveComments[commentCid];
94
99
  if (typeof (liveComment === null || liveComment === void 0 ? void 0 : liveComment.stop) !== "function") {
95
100
  return;
@@ -113,6 +118,41 @@ const commentsStore = createStore((setState, getState) => {
113
118
  maybeReleaseStoppedLiveComment(commentCid, comment);
114
119
  });
115
120
  };
121
+ const toCommentUpdateError = (error) => error instanceof Error ? error : Error("comment update failed");
122
+ const emitCommentError = (comment, error) => {
123
+ const emit = comment === null || comment === void 0 ? void 0 : comment.emit;
124
+ if (typeof emit !== "function") {
125
+ return;
126
+ }
127
+ try {
128
+ emit.call(comment, "error", error);
129
+ }
130
+ catch (emitError) {
131
+ if (emitError !== error) {
132
+ log.trace("comment.update error event error", { comment, error: emitError });
133
+ }
134
+ }
135
+ };
136
+ const handleCommentUpdateError = (commentCid, comment, error) => {
137
+ var _a, _b;
138
+ const updateError = toCommentUpdateError(error);
139
+ clearCommentUpdateFollowup(commentCid);
140
+ if (!((_a = getState().errors[commentCid]) === null || _a === void 0 ? void 0 : _a.includes(updateError))) {
141
+ emitCommentError(comment, updateError);
142
+ if (!((_b = getState().errors[commentCid]) === null || _b === void 0 ? void 0 : _b.includes(updateError))) {
143
+ addCommentError(commentCid, updateError);
144
+ }
145
+ }
146
+ maybeStopCommentAfterOneShotUpdate(commentCid, comment);
147
+ return updateError;
148
+ };
149
+ const isSparseCommentUpdate = (comment) => !!(comment === null || comment === void 0 ? void 0 : comment.timestamp) && !(comment === null || comment === void 0 ? void 0 : comment.updatedAt);
150
+ // A CID-only comment update can settle after immutable IPFS data; one follow-up
151
+ // update gives PKC a chance to load mutable community data such as replies.
152
+ const shouldRequestSparseCommentFollowup = (commentCid, comment) => !sparseCommentFollowupRequested[commentCid] &&
153
+ (stopCommentAfterNextUpdate[commentCid] || hasCommentAutoUpdateSubscribers(commentCid)) &&
154
+ isSparseCommentUpdate(comment);
155
+ const shouldWaitForSparseCommentFollowup = (commentCid, comment) => sparseCommentFollowupRequested[commentCid] && isSparseCommentUpdate(comment);
116
156
  const initializeComment = (commentCid, comment, account) => {
117
157
  var _a, _b, _c, _d;
118
158
  if (initializedComments.has(comment)) {
@@ -129,6 +169,21 @@ const commentsStore = createStore((setState, getState) => {
129
169
  setState((state) => ({
130
170
  comments: Object.assign(Object.assign({}, state.comments), { [commentCid]: Object.assign(Object.assign({}, state.comments[commentCid]), { updatingState }) }),
131
171
  }));
172
+ if (updatingState === "succeeded" &&
173
+ shouldRequestSparseCommentFollowup(commentCid, comment)) {
174
+ sparseCommentFollowupRequested[commentCid] = true;
175
+ requestCommentUpdate(commentCid, comment, {
176
+ stopAfterNextUpdate: !!stopCommentAfterNextUpdate[commentCid],
177
+ });
178
+ return;
179
+ }
180
+ if (updatingState === "succeeded" &&
181
+ (comment.updatedAt || sparseCommentFollowupRequested[commentCid])) {
182
+ clearCommentUpdateFollowup(commentCid);
183
+ }
184
+ if (updatingState === "failed") {
185
+ clearCommentUpdateFollowup(commentCid);
186
+ }
132
187
  if (updatingState === "succeeded" || updatingState === "failed") {
133
188
  maybeStopCommentAfterOneShotUpdate(commentCid, comment);
134
189
  }
@@ -205,13 +260,19 @@ const commentsStore = createStore((setState, getState) => {
205
260
  else {
206
261
  delete stopCommentAfterNextUpdate[commentCid];
207
262
  }
208
- (_a = comment === null || comment === void 0 ? void 0 : comment.update) === null || _a === void 0 ? void 0 : _a.call(comment).catch((error) => log.trace("comment.update error", { commentCid, comment, error }));
263
+ (_a = comment === null || comment === void 0 ? void 0 : comment.update) === null || _a === void 0 ? void 0 : _a.call(comment).catch((error) => {
264
+ const updateError = handleCommentUpdateError(commentCid, comment, error);
265
+ log.trace("comment.update error", { commentCid, comment, error: updateError });
266
+ });
209
267
  };
210
268
  const waitForCommentUpdateCycle = (commentCid, comment) => new Promise((resolve, reject) => {
211
269
  var _a, _b;
212
270
  const onUpdatingStateChange = (updatingState) => {
213
271
  var _a;
214
272
  if (updatingState === "succeeded") {
273
+ if (shouldWaitForSparseCommentFollowup(commentCid, comment)) {
274
+ return;
275
+ }
215
276
  cleanup();
216
277
  resolve(normalizeCommentCommunityAddress(utils.clone(comment)));
217
278
  return;
@@ -362,6 +423,9 @@ export const resetCommentsStore = () => __awaiter(void 0, void 0, void 0, functi
362
423
  for (const commentCid in stopCommentAfterNextUpdate) {
363
424
  delete stopCommentAfterNextUpdate[commentCid];
364
425
  }
426
+ for (const commentCid in sparseCommentFollowupRequested) {
427
+ delete sparseCommentFollowupRequested[commentCid];
428
+ }
365
429
  for (const commentCid in liveCommentPromises) {
366
430
  delete liveCommentPromises[commentCid];
367
431
  }
@@ -1 +1 @@
1
- {"version":3,"file":"comments-store.js","sourceRoot":"","sources":["../../../src/stores/comments/comments-store.ts"],"names":[],"mappings":"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","sourcesContent":["import localForageLru from \"../../lib/localforage-lru\";\nconst commentsDatabase = localForageLru.createInstance({\n name: \"bitsocialReactHooks-comments\",\n size: 5000,\n});\nimport Logger from \"@pkcprotocol/pkc-logger\";\nexport const log = Logger(\"bitsocial-react-hooks:comments:stores\");\nimport { Comment, Comments, Account } from \"../../types\";\nimport utils from \"../../lib/utils\";\nimport createStore from \"zustand\";\nimport accountsStore from \"../accounts\";\nimport repliesPagesStore from \"../replies-pages\";\nimport { normalizeCommentCommunityAddress } from \"../../lib/pkc-compat\";\n\nlet pkcGetCommentPending: { [key: string]: boolean } = {};\nconst liveComments: { [commentCid: string]: Comment } = {};\nconst liveCommentPromises: { [commentCid: string]: Promise<Comment> | undefined } = {};\nconst commentAutoUpdateSubscribers: {\n [commentCid: string]: { [subscriberId: string]: true };\n} = {};\nconst stopCommentAfterNextUpdate: { [commentCid: string]: boolean } = {};\nconst initializedComments = new WeakSet<object>();\nconst trackedListeners = new WeakSet<object>();\n\n// reset all event listeners in between tests\nexport const listeners: any = [];\n\nexport type CommentsState = {\n comments: Comments;\n errors: { [commentCid: string]: Error[] };\n addCommentToStore: Function;\n startCommentAutoUpdate: Function;\n stopCommentAutoUpdate: Function;\n refreshComment: Function;\n};\n\nconst removeCommentListener = (comment: any, event: string, listener: (...args: any[]) => void) => {\n if (typeof comment?.off === \"function\") {\n comment.off(event, listener);\n return;\n }\n if (typeof comment?.removeListener === \"function\") {\n comment.removeListener(event, listener);\n }\n};\n\nconst getCommentAutoUpdateSubscribersCount = (commentCid: string) =>\n Object.keys(commentAutoUpdateSubscribers[commentCid] || {}).length;\n\nconst hasCommentAutoUpdateSubscribers = (commentCid: string) =>\n getCommentAutoUpdateSubscribersCount(commentCid) > 0;\n\nconst mergeCommentData = (\n commentCid: string,\n ...commentDataList: (Comment | undefined)[]\n): Comment => {\n const mergedCommentData: Comment = { cid: commentCid };\n for (const commentData of commentDataList) {\n if (commentData && typeof commentData === \"object\") {\n Object.assign(mergedCommentData, utils.clone(commentData));\n }\n }\n mergedCommentData.cid = commentCid;\n return mergedCommentData;\n};\n\nconst releaseLiveComment = (commentCid: string, comment?: Comment) => {\n const liveComment = comment || liveComments[commentCid];\n if (liveComment) {\n const listenerIndex = listeners.indexOf(liveComment);\n if (listenerIndex !== -1) {\n listeners.splice(listenerIndex, 1);\n }\n }\n if (!comment || liveComments[commentCid] === liveComment) {\n delete liveComments[commentCid];\n }\n};\n\nconst maybeReleaseStoppedLiveComment = (commentCid: string, comment?: Comment) => {\n if (!comment || hasCommentAutoUpdateSubscribers(commentCid)) {\n return;\n }\n if (liveComments[commentCid] !== comment) {\n return;\n }\n releaseLiveComment(commentCid, comment);\n};\n\nconst commentsStore = createStore<CommentsState>((setState: Function, getState: Function) => {\n const addCommentError = (commentCid: string, error: Error) => {\n setState((state: CommentsState) => {\n let commentErrors = state.errors[commentCid] || [];\n commentErrors = [...commentErrors, error];\n return { ...state, errors: { ...state.errors, [commentCid]: commentErrors } };\n });\n };\n\n const persistComment = async (commentCid: string, nextComment: Comment) => {\n const normalizedComment = normalizeCommentCommunityAddress(utils.clone(nextComment)) as Comment;\n await commentsDatabase.setItem(commentCid, normalizedComment);\n log(\"commentsStore comment update\", { commentCid, updatedComment: normalizedComment });\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: normalizedComment },\n }));\n\n // add comment replies pages to repliesPagesStore so they can be used in useComment\n repliesPagesStore.getState().addRepliesPageCommentsToStore(nextComment);\n\n return normalizedComment;\n };\n\n const stopLiveComment = async (commentCid: string, comment?: Comment) => {\n const liveComment = comment || liveComments[commentCid];\n if (typeof liveComment?.stop !== \"function\") {\n return;\n }\n try {\n await liveComment.stop();\n } catch (error) {\n log.trace(\"comment.stop error\", { commentCid, comment: liveComment, error });\n }\n };\n\n const maybeStopCommentAfterOneShotUpdate = (commentCid: string, comment: Comment) => {\n if (!stopCommentAfterNextUpdate[commentCid]) {\n return;\n }\n delete stopCommentAfterNextUpdate[commentCid];\n if (hasCommentAutoUpdateSubscribers(commentCid)) {\n return;\n }\n void stopLiveComment(commentCid, comment).finally(() => {\n maybeReleaseStoppedLiveComment(commentCid, comment);\n });\n };\n\n const initializeComment = (commentCid: string, comment: Comment, account: Account) => {\n if (initializedComments.has(comment as object)) {\n liveComments[commentCid] = comment;\n return;\n }\n initializedComments.add(comment as object);\n liveComments[commentCid] = comment;\n\n comment?.on?.(\"update\", async (updatedComment: Comment) => {\n updatedComment = normalizeCommentCommunityAddress(utils.clone(updatedComment)) as Comment;\n await persistComment(commentCid, updatedComment);\n });\n\n comment?.on?.(\"updatingstatechange\", (updatingState: string) => {\n setState((state: CommentsState) => ({\n comments: {\n ...state.comments,\n [commentCid]: { ...state.comments[commentCid], updatingState },\n },\n }));\n\n if (updatingState === \"succeeded\" || updatingState === \"failed\") {\n maybeStopCommentAfterOneShotUpdate(commentCid, comment);\n }\n });\n\n comment?.on?.(\"error\", (error: Error) => {\n addCommentError(commentCid, error);\n });\n\n // set clients on comment so the frontend can display it, dont persist in db because a reload cancels updating\n utils.clientsOnStateChange(\n comment?.clients,\n (clientState: string, clientType: string, clientUrl: string, chainTicker?: string) => {\n setState((state: CommentsState) => {\n // make sure not undefined, sometimes happens in e2e tests\n if (!state.comments[commentCid]) {\n return {};\n }\n const clients = { ...state.comments[commentCid]?.clients };\n const client = { state: clientState };\n if (chainTicker) {\n const chainProviders = { ...clients[clientType][chainTicker], [clientUrl]: client };\n clients[clientType] = { ...clients[clientType], [chainTicker]: chainProviders };\n } else {\n clients[clientType] = { ...clients[clientType], [clientUrl]: client };\n }\n return {\n comments: {\n ...state.comments,\n [commentCid]: { ...state.comments[commentCid], clients },\n },\n };\n });\n },\n );\n\n // when publishing a comment, you don't yet know its CID\n // so when a new comment is fetched, check to see if it's your own\n // comment, and if yes, add the CID to your account comments database\n // if comment.timestamp isn't defined, it means the next update will contain the timestamp and author\n // which is used in addCidToAccountComment\n if (!comment?.timestamp) {\n comment?.once?.(\"update\", () =>\n accountsStore\n .getState()\n .accountsActionsInternal.addCidToAccountComment(comment)\n .catch((error: any) =>\n log.error(\"accountsActionsInternal.addCidToAccountComment error\", { comment, error }),\n ),\n );\n }\n\n if (!trackedListeners.has(comment as object)) {\n trackedListeners.add(comment as object);\n listeners.push(comment);\n }\n };\n\n const ensureLiveComment = async (commentCid: string, account: Account, commentData?: Comment) => {\n if (liveComments[commentCid]) {\n return liveComments[commentCid];\n }\n if (liveCommentPromises[commentCid]) {\n return liveCommentPromises[commentCid] as Promise<Comment>;\n }\n\n const liveCommentPromise = (async () => {\n const initialComment = normalizeCommentCommunityAddress(\n mergeCommentData(commentCid, commentData),\n );\n const liveComment = normalizeCommentCommunityAddress(\n await account.pkc.createComment(initialComment),\n ) as Comment;\n initializeComment(commentCid, liveComment, account);\n return liveComment;\n })();\n liveCommentPromises[commentCid] = liveCommentPromise;\n\n try {\n return await liveCommentPromise;\n } finally {\n if (liveCommentPromises[commentCid] === liveCommentPromise) {\n delete liveCommentPromises[commentCid];\n }\n }\n };\n\n const requestCommentUpdate = (\n commentCid: string,\n comment: Comment,\n options?: { stopAfterNextUpdate?: boolean },\n ) => {\n if (options?.stopAfterNextUpdate) {\n stopCommentAfterNextUpdate[commentCid] = true;\n } else {\n delete stopCommentAfterNextUpdate[commentCid];\n }\n\n comment\n ?.update?.()\n .catch((error: unknown) => log.trace(\"comment.update error\", { commentCid, comment, error }));\n };\n\n const waitForCommentUpdateCycle = (commentCid: string, comment: Comment) =>\n new Promise<Comment>((resolve, reject) => {\n const onUpdatingStateChange = (updatingState: string) => {\n if (updatingState === \"succeeded\") {\n cleanup();\n resolve(normalizeCommentCommunityAddress(utils.clone(comment)) as Comment);\n return;\n }\n if (updatingState === \"failed\") {\n cleanup();\n reject(getState().errors[commentCid]?.slice(-1)[0] || Error(\"comment update failed\"));\n }\n };\n\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n const cleanup = () => {\n removeCommentListener(comment, \"updatingstatechange\", onUpdatingStateChange);\n removeCommentListener(comment, \"error\", onError);\n };\n\n comment?.on?.(\"updatingstatechange\", onUpdatingStateChange);\n comment?.on?.(\"error\", onError);\n });\n\n return {\n comments: {},\n errors: {},\n\n async addCommentToStore(commentCid: string, account: Account, commentData?: Comment) {\n const { comments } = getState();\n const pendingKey = commentCid + account.id;\n\n // comment is in store already, do nothing\n let comment: Comment | undefined = comments[commentCid];\n if (comment || pkcGetCommentPending[pendingKey]) {\n return;\n }\n pkcGetCommentPending[pendingKey] = true;\n\n try {\n // try to find comment in database\n comment = await getCommentFromDatabase(commentCid, account, commentData);\n\n if (!comment) {\n comment = await ensureLiveComment(commentCid, account, commentData);\n comment = normalizeCommentCommunityAddress(comment);\n log(\"commentsStore.addCommentToStore\", { commentCid, comment, account });\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: utils.clone(comment) },\n }));\n } else {\n comment = normalizeCommentCommunityAddress(comment);\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: utils.clone(comment) },\n }));\n\n // add comment replies pages to repliesPagesStore so they can be used in useComment\n repliesPagesStore.getState().addRepliesPageCommentsToStore(comment);\n\n comment = await ensureLiveComment(\n commentCid,\n account,\n mergeCommentData(commentCid, comment, commentData),\n );\n }\n\n if (comment) {\n requestCommentUpdate(commentCid, comment, { stopAfterNextUpdate: true });\n }\n } catch (e: any) {\n addCommentError(commentCid, e);\n throw e;\n } finally {\n pkcGetCommentPending[pendingKey] = false;\n }\n },\n\n async startCommentAutoUpdate(\n commentCid: string,\n subscriberId: string,\n account: Account,\n commentData?: Comment,\n ) {\n const hadAutoUpdateSubscribers = hasCommentAutoUpdateSubscribers(commentCid);\n commentAutoUpdateSubscribers[commentCid] = {\n ...(commentAutoUpdateSubscribers[commentCid] || {}),\n [subscriberId]: true,\n };\n\n if (hadAutoUpdateSubscribers && liveComments[commentCid]) {\n return;\n }\n\n const storedComment = getState().comments[commentCid];\n const liveComment = await ensureLiveComment(\n commentCid,\n account,\n mergeCommentData(commentCid, storedComment, commentData),\n );\n\n if (!storedComment) {\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: utils.clone(liveComment) },\n }));\n }\n\n if (!hasCommentAutoUpdateSubscribers(commentCid)) {\n await stopLiveComment(commentCid, liveComment);\n maybeReleaseStoppedLiveComment(commentCid, liveComment);\n return;\n }\n\n requestCommentUpdate(commentCid, liveComment);\n },\n\n async stopCommentAutoUpdate(commentCid: string, subscriberId: string) {\n if (commentAutoUpdateSubscribers[commentCid]) {\n delete commentAutoUpdateSubscribers[commentCid][subscriberId];\n if (Object.keys(commentAutoUpdateSubscribers[commentCid]).length === 0) {\n delete commentAutoUpdateSubscribers[commentCid];\n }\n }\n\n if (hasCommentAutoUpdateSubscribers(commentCid)) {\n return;\n }\n\n delete stopCommentAfterNextUpdate[commentCid];\n const liveComment = liveComments[commentCid];\n await stopLiveComment(commentCid, liveComment);\n maybeReleaseStoppedLiveComment(commentCid, liveComment);\n },\n\n async refreshComment(commentCid: string, account: Account, commentData?: Comment) {\n const storedComment = getState().comments[commentCid];\n const liveComment = await ensureLiveComment(\n commentCid,\n account,\n mergeCommentData(commentCid, storedComment, commentData),\n );\n\n if (\n !hasCommentAutoUpdateSubscribers(commentCid) &&\n liveComment?.updatingState !== \"stopped\"\n ) {\n await stopLiveComment(commentCid, liveComment);\n }\n\n const waitForUpdate = waitForCommentUpdateCycle(commentCid, liveComment);\n requestCommentUpdate(commentCid, liveComment, {\n stopAfterNextUpdate: !hasCommentAutoUpdateSubscribers(commentCid),\n });\n return waitForUpdate;\n },\n };\n});\n\nconst getCommentFromDatabase = async (\n commentCid: string,\n account: Account,\n initialCommentData?: Comment,\n) => {\n const commentData: any = await commentsDatabase.getItem(commentCid);\n if (!commentData) {\n return;\n }\n try {\n const comment = normalizeCommentCommunityAddress(\n await account.pkc.createComment(\n mergeCommentData(commentCid, commentData, initialCommentData),\n ),\n );\n return comment;\n } catch (e) {\n // need to log this always or it could silently fail in production and cache never be used\n console.error(\"failed pkc.createComment(cachedComment)\", {\n cachedComment: commentData,\n error: e,\n });\n }\n};\n\n// reset store in between tests\nconst originalState = commentsStore.getState();\n// async function because some stores have async init\nexport const resetCommentsStore = async () => {\n pkcGetCommentPending = {};\n for (const commentCid in commentAutoUpdateSubscribers) {\n delete commentAutoUpdateSubscribers[commentCid];\n }\n for (const commentCid in stopCommentAfterNextUpdate) {\n delete stopCommentAfterNextUpdate[commentCid];\n }\n for (const commentCid in liveCommentPromises) {\n delete liveCommentPromises[commentCid];\n }\n for (const commentCid in liveComments) {\n delete liveComments[commentCid];\n }\n\n // remove all event listeners\n await Promise.all(\n listeners.map(async (listener: any) => {\n try {\n if (typeof listener?.stop === \"function\") {\n await listener.stop();\n }\n } catch {}\n listener?.removeAllListeners?.();\n }),\n );\n listeners.length = 0;\n\n // destroy all component subscriptions to the store\n commentsStore.destroy();\n // restore original state\n commentsStore.setState(originalState);\n};\n\n// reset database and store in between tests\nexport const resetCommentsDatabaseAndStore = async () => {\n await localForageLru.createInstance({ name: \"bitsocialReactHooks-comments\" }).clear();\n await resetCommentsStore();\n};\n\nexport default commentsStore;\n"]}
1
+ {"version":3,"file":"comments-store.js","sourceRoot":"","sources":["../../../src/stores/comments/comments-store.ts"],"names":[],"mappings":"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","sourcesContent":["import localForageLru from \"../../lib/localforage-lru\";\nconst commentsDatabase = localForageLru.createInstance({\n name: \"bitsocialReactHooks-comments\",\n size: 5000,\n});\nimport Logger from \"@pkcprotocol/pkc-logger\";\nexport const log = Logger(\"bitsocial-react-hooks:comments:stores\");\nimport { Comment, Comments, Account } from \"../../types\";\nimport utils from \"../../lib/utils\";\nimport createStore from \"zustand\";\nimport accountsStore from \"../accounts\";\nimport repliesPagesStore from \"../replies-pages\";\nimport { normalizeCommentCommunityAddress } from \"../../lib/pkc-compat\";\n\nlet pkcGetCommentPending: { [key: string]: boolean } = {};\nconst liveComments: { [commentCid: string]: Comment } = {};\nconst liveCommentPromises: { [commentCid: string]: Promise<Comment> | undefined } = {};\nconst commentAutoUpdateSubscribers: {\n [commentCid: string]: { [subscriberId: string]: true };\n} = {};\nconst stopCommentAfterNextUpdate: { [commentCid: string]: boolean } = {};\nconst sparseCommentFollowupRequested: { [commentCid: string]: boolean } = {};\nconst initializedComments = new WeakSet<object>();\nconst trackedListeners = new WeakSet<object>();\n\n// reset all event listeners in between tests\nexport const listeners: any = [];\n\nexport type CommentsState = {\n comments: Comments;\n errors: { [commentCid: string]: Error[] };\n addCommentToStore: Function;\n startCommentAutoUpdate: Function;\n stopCommentAutoUpdate: Function;\n refreshComment: Function;\n};\n\nconst removeCommentListener = (comment: any, event: string, listener: (...args: any[]) => void) => {\n if (typeof comment?.off === \"function\") {\n comment.off(event, listener);\n return;\n }\n if (typeof comment?.removeListener === \"function\") {\n comment.removeListener(event, listener);\n }\n};\n\nconst getCommentAutoUpdateSubscribersCount = (commentCid: string) =>\n Object.keys(commentAutoUpdateSubscribers[commentCid] || {}).length;\n\nconst hasCommentAutoUpdateSubscribers = (commentCid: string) =>\n getCommentAutoUpdateSubscribersCount(commentCid) > 0;\n\nconst mergeCommentData = (\n commentCid: string,\n ...commentDataList: (Comment | undefined)[]\n): Comment => {\n const mergedCommentData: Comment = { cid: commentCid };\n for (const commentData of commentDataList) {\n if (commentData && typeof commentData === \"object\") {\n Object.assign(mergedCommentData, utils.clone(commentData));\n }\n }\n mergedCommentData.cid = commentCid;\n return mergedCommentData;\n};\n\nconst releaseLiveComment = (commentCid: string, comment?: Comment) => {\n const liveComment = comment || liveComments[commentCid];\n if (liveComment) {\n const listenerIndex = listeners.indexOf(liveComment);\n if (listenerIndex !== -1) {\n listeners.splice(listenerIndex, 1);\n }\n }\n if (!comment || liveComments[commentCid] === liveComment) {\n delete liveComments[commentCid];\n }\n};\n\nconst maybeReleaseStoppedLiveComment = (commentCid: string, comment?: Comment) => {\n if (!comment || hasCommentAutoUpdateSubscribers(commentCid)) {\n return;\n }\n if (liveComments[commentCid] !== comment) {\n return;\n }\n releaseLiveComment(commentCid, comment);\n};\n\nconst commentsStore = createStore<CommentsState>((setState: Function, getState: Function) => {\n const addCommentError = (commentCid: string, error: Error) => {\n setState((state: CommentsState) => {\n let commentErrors = state.errors[commentCid] || [];\n commentErrors = [...commentErrors, error];\n return { ...state, errors: { ...state.errors, [commentCid]: commentErrors } };\n });\n };\n\n const persistComment = async (commentCid: string, nextComment: Comment) => {\n const normalizedComment = normalizeCommentCommunityAddress(utils.clone(nextComment)) as Comment;\n await commentsDatabase.setItem(commentCid, normalizedComment);\n log(\"commentsStore comment update\", { commentCid, updatedComment: normalizedComment });\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: normalizedComment },\n }));\n\n // add comment replies pages to repliesPagesStore so they can be used in useComment\n repliesPagesStore.getState().addRepliesPageCommentsToStore(nextComment);\n\n return normalizedComment;\n };\n\n const clearCommentUpdateFollowup = (commentCid: string) => {\n delete sparseCommentFollowupRequested[commentCid];\n };\n\n const stopLiveComment = async (commentCid: string, comment?: Comment) => {\n clearCommentUpdateFollowup(commentCid);\n const liveComment = comment || liveComments[commentCid];\n if (typeof liveComment?.stop !== \"function\") {\n return;\n }\n try {\n await liveComment.stop();\n } catch (error) {\n log.trace(\"comment.stop error\", { commentCid, comment: liveComment, error });\n }\n };\n\n const maybeStopCommentAfterOneShotUpdate = (commentCid: string, comment: Comment) => {\n if (!stopCommentAfterNextUpdate[commentCid]) {\n return;\n }\n delete stopCommentAfterNextUpdate[commentCid];\n if (hasCommentAutoUpdateSubscribers(commentCid)) {\n return;\n }\n void stopLiveComment(commentCid, comment).finally(() => {\n maybeReleaseStoppedLiveComment(commentCid, comment);\n });\n };\n\n const toCommentUpdateError = (error: unknown) =>\n error instanceof Error ? error : Error(\"comment update failed\");\n\n const emitCommentError = (comment: Comment, error: Error) => {\n const emit = (comment as any)?.emit;\n if (typeof emit !== \"function\") {\n return;\n }\n try {\n emit.call(comment, \"error\", error);\n } catch (emitError) {\n if (emitError !== error) {\n log.trace(\"comment.update error event error\", { comment, error: emitError });\n }\n }\n };\n\n const handleCommentUpdateError = (commentCid: string, comment: Comment, error: unknown) => {\n const updateError = toCommentUpdateError(error);\n clearCommentUpdateFollowup(commentCid);\n\n if (!getState().errors[commentCid]?.includes(updateError)) {\n emitCommentError(comment, updateError);\n if (!getState().errors[commentCid]?.includes(updateError)) {\n addCommentError(commentCid, updateError);\n }\n }\n\n maybeStopCommentAfterOneShotUpdate(commentCid, comment);\n return updateError;\n };\n\n const isSparseCommentUpdate = (comment: Comment) => !!comment?.timestamp && !comment?.updatedAt;\n\n // A CID-only comment update can settle after immutable IPFS data; one follow-up\n // update gives PKC a chance to load mutable community data such as replies.\n const shouldRequestSparseCommentFollowup = (commentCid: string, comment: Comment) =>\n !sparseCommentFollowupRequested[commentCid] &&\n (stopCommentAfterNextUpdate[commentCid] || hasCommentAutoUpdateSubscribers(commentCid)) &&\n isSparseCommentUpdate(comment);\n\n const shouldWaitForSparseCommentFollowup = (commentCid: string, comment: Comment) =>\n sparseCommentFollowupRequested[commentCid] && isSparseCommentUpdate(comment);\n\n const initializeComment = (commentCid: string, comment: Comment, account: Account) => {\n if (initializedComments.has(comment as object)) {\n liveComments[commentCid] = comment;\n return;\n }\n initializedComments.add(comment as object);\n liveComments[commentCid] = comment;\n\n comment?.on?.(\"update\", async (updatedComment: Comment) => {\n updatedComment = normalizeCommentCommunityAddress(utils.clone(updatedComment)) as Comment;\n await persistComment(commentCid, updatedComment);\n });\n\n comment?.on?.(\"updatingstatechange\", (updatingState: string) => {\n setState((state: CommentsState) => ({\n comments: {\n ...state.comments,\n [commentCid]: { ...state.comments[commentCid], updatingState },\n },\n }));\n\n if (\n updatingState === \"succeeded\" &&\n shouldRequestSparseCommentFollowup(commentCid, comment)\n ) {\n sparseCommentFollowupRequested[commentCid] = true;\n requestCommentUpdate(commentCid, comment, {\n stopAfterNextUpdate: !!stopCommentAfterNextUpdate[commentCid],\n });\n return;\n }\n\n if (\n updatingState === \"succeeded\" &&\n (comment.updatedAt || sparseCommentFollowupRequested[commentCid])\n ) {\n clearCommentUpdateFollowup(commentCid);\n }\n if (updatingState === \"failed\") {\n clearCommentUpdateFollowup(commentCid);\n }\n\n if (updatingState === \"succeeded\" || updatingState === \"failed\") {\n maybeStopCommentAfterOneShotUpdate(commentCid, comment);\n }\n });\n\n comment?.on?.(\"error\", (error: Error) => {\n addCommentError(commentCid, error);\n });\n\n // set clients on comment so the frontend can display it, dont persist in db because a reload cancels updating\n utils.clientsOnStateChange(\n comment?.clients,\n (clientState: string, clientType: string, clientUrl: string, chainTicker?: string) => {\n setState((state: CommentsState) => {\n // make sure not undefined, sometimes happens in e2e tests\n if (!state.comments[commentCid]) {\n return {};\n }\n const clients = { ...state.comments[commentCid]?.clients };\n const client = { state: clientState };\n if (chainTicker) {\n const chainProviders = { ...clients[clientType][chainTicker], [clientUrl]: client };\n clients[clientType] = { ...clients[clientType], [chainTicker]: chainProviders };\n } else {\n clients[clientType] = { ...clients[clientType], [clientUrl]: client };\n }\n return {\n comments: {\n ...state.comments,\n [commentCid]: { ...state.comments[commentCid], clients },\n },\n };\n });\n },\n );\n\n // when publishing a comment, you don't yet know its CID\n // so when a new comment is fetched, check to see if it's your own\n // comment, and if yes, add the CID to your account comments database\n // if comment.timestamp isn't defined, it means the next update will contain the timestamp and author\n // which is used in addCidToAccountComment\n if (!comment?.timestamp) {\n comment?.once?.(\"update\", () =>\n accountsStore\n .getState()\n .accountsActionsInternal.addCidToAccountComment(comment)\n .catch((error: any) =>\n log.error(\"accountsActionsInternal.addCidToAccountComment error\", { comment, error }),\n ),\n );\n }\n\n if (!trackedListeners.has(comment as object)) {\n trackedListeners.add(comment as object);\n listeners.push(comment);\n }\n };\n\n const ensureLiveComment = async (commentCid: string, account: Account, commentData?: Comment) => {\n if (liveComments[commentCid]) {\n return liveComments[commentCid];\n }\n if (liveCommentPromises[commentCid]) {\n return liveCommentPromises[commentCid] as Promise<Comment>;\n }\n\n const liveCommentPromise = (async () => {\n const initialComment = normalizeCommentCommunityAddress(\n mergeCommentData(commentCid, commentData),\n );\n const liveComment = normalizeCommentCommunityAddress(\n await account.pkc.createComment(initialComment),\n ) as Comment;\n initializeComment(commentCid, liveComment, account);\n return liveComment;\n })();\n liveCommentPromises[commentCid] = liveCommentPromise;\n\n try {\n return await liveCommentPromise;\n } finally {\n if (liveCommentPromises[commentCid] === liveCommentPromise) {\n delete liveCommentPromises[commentCid];\n }\n }\n };\n\n const requestCommentUpdate = (\n commentCid: string,\n comment: Comment,\n options?: { stopAfterNextUpdate?: boolean },\n ) => {\n if (options?.stopAfterNextUpdate) {\n stopCommentAfterNextUpdate[commentCid] = true;\n } else {\n delete stopCommentAfterNextUpdate[commentCid];\n }\n\n comment?.update?.().catch((error: unknown) => {\n const updateError = handleCommentUpdateError(commentCid, comment, error);\n log.trace(\"comment.update error\", { commentCid, comment, error: updateError });\n });\n };\n\n const waitForCommentUpdateCycle = (commentCid: string, comment: Comment) =>\n new Promise<Comment>((resolve, reject) => {\n const onUpdatingStateChange = (updatingState: string) => {\n if (updatingState === \"succeeded\") {\n if (shouldWaitForSparseCommentFollowup(commentCid, comment)) {\n return;\n }\n cleanup();\n resolve(normalizeCommentCommunityAddress(utils.clone(comment)) as Comment);\n return;\n }\n if (updatingState === \"failed\") {\n cleanup();\n reject(getState().errors[commentCid]?.slice(-1)[0] || Error(\"comment update failed\"));\n }\n };\n\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n const cleanup = () => {\n removeCommentListener(comment, \"updatingstatechange\", onUpdatingStateChange);\n removeCommentListener(comment, \"error\", onError);\n };\n\n comment?.on?.(\"updatingstatechange\", onUpdatingStateChange);\n comment?.on?.(\"error\", onError);\n });\n\n return {\n comments: {},\n errors: {},\n\n async addCommentToStore(commentCid: string, account: Account, commentData?: Comment) {\n const { comments } = getState();\n const pendingKey = commentCid + account.id;\n\n // comment is in store already, do nothing\n let comment: Comment | undefined = comments[commentCid];\n if (comment || pkcGetCommentPending[pendingKey]) {\n return;\n }\n pkcGetCommentPending[pendingKey] = true;\n\n try {\n // try to find comment in database\n comment = await getCommentFromDatabase(commentCid, account, commentData);\n\n if (!comment) {\n comment = await ensureLiveComment(commentCid, account, commentData);\n comment = normalizeCommentCommunityAddress(comment);\n log(\"commentsStore.addCommentToStore\", { commentCid, comment, account });\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: utils.clone(comment) },\n }));\n } else {\n comment = normalizeCommentCommunityAddress(comment);\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: utils.clone(comment) },\n }));\n\n // add comment replies pages to repliesPagesStore so they can be used in useComment\n repliesPagesStore.getState().addRepliesPageCommentsToStore(comment);\n\n comment = await ensureLiveComment(\n commentCid,\n account,\n mergeCommentData(commentCid, comment, commentData),\n );\n }\n\n if (comment) {\n requestCommentUpdate(commentCid, comment, { stopAfterNextUpdate: true });\n }\n } catch (e: any) {\n addCommentError(commentCid, e);\n throw e;\n } finally {\n pkcGetCommentPending[pendingKey] = false;\n }\n },\n\n async startCommentAutoUpdate(\n commentCid: string,\n subscriberId: string,\n account: Account,\n commentData?: Comment,\n ) {\n const hadAutoUpdateSubscribers = hasCommentAutoUpdateSubscribers(commentCid);\n commentAutoUpdateSubscribers[commentCid] = {\n ...(commentAutoUpdateSubscribers[commentCid] || {}),\n [subscriberId]: true,\n };\n\n if (hadAutoUpdateSubscribers && liveComments[commentCid]) {\n return;\n }\n\n const storedComment = getState().comments[commentCid];\n const liveComment = await ensureLiveComment(\n commentCid,\n account,\n mergeCommentData(commentCid, storedComment, commentData),\n );\n\n if (!storedComment) {\n setState((state: CommentsState) => ({\n comments: { ...state.comments, [commentCid]: utils.clone(liveComment) },\n }));\n }\n\n if (!hasCommentAutoUpdateSubscribers(commentCid)) {\n await stopLiveComment(commentCid, liveComment);\n maybeReleaseStoppedLiveComment(commentCid, liveComment);\n return;\n }\n\n requestCommentUpdate(commentCid, liveComment);\n },\n\n async stopCommentAutoUpdate(commentCid: string, subscriberId: string) {\n if (commentAutoUpdateSubscribers[commentCid]) {\n delete commentAutoUpdateSubscribers[commentCid][subscriberId];\n if (Object.keys(commentAutoUpdateSubscribers[commentCid]).length === 0) {\n delete commentAutoUpdateSubscribers[commentCid];\n }\n }\n\n if (hasCommentAutoUpdateSubscribers(commentCid)) {\n return;\n }\n\n delete stopCommentAfterNextUpdate[commentCid];\n const liveComment = liveComments[commentCid];\n await stopLiveComment(commentCid, liveComment);\n maybeReleaseStoppedLiveComment(commentCid, liveComment);\n },\n\n async refreshComment(commentCid: string, account: Account, commentData?: Comment) {\n const storedComment = getState().comments[commentCid];\n const liveComment = await ensureLiveComment(\n commentCid,\n account,\n mergeCommentData(commentCid, storedComment, commentData),\n );\n\n if (\n !hasCommentAutoUpdateSubscribers(commentCid) &&\n liveComment?.updatingState !== \"stopped\"\n ) {\n await stopLiveComment(commentCid, liveComment);\n }\n\n const waitForUpdate = waitForCommentUpdateCycle(commentCid, liveComment);\n requestCommentUpdate(commentCid, liveComment, {\n stopAfterNextUpdate: !hasCommentAutoUpdateSubscribers(commentCid),\n });\n return waitForUpdate;\n },\n };\n});\n\nconst getCommentFromDatabase = async (\n commentCid: string,\n account: Account,\n initialCommentData?: Comment,\n) => {\n const commentData: any = await commentsDatabase.getItem(commentCid);\n if (!commentData) {\n return;\n }\n try {\n const comment = normalizeCommentCommunityAddress(\n await account.pkc.createComment(\n mergeCommentData(commentCid, commentData, initialCommentData),\n ),\n );\n return comment;\n } catch (e) {\n // need to log this always or it could silently fail in production and cache never be used\n console.error(\"failed pkc.createComment(cachedComment)\", {\n cachedComment: commentData,\n error: e,\n });\n }\n};\n\n// reset store in between tests\nconst originalState = commentsStore.getState();\n// async function because some stores have async init\nexport const resetCommentsStore = async () => {\n pkcGetCommentPending = {};\n for (const commentCid in commentAutoUpdateSubscribers) {\n delete commentAutoUpdateSubscribers[commentCid];\n }\n for (const commentCid in stopCommentAfterNextUpdate) {\n delete stopCommentAfterNextUpdate[commentCid];\n }\n for (const commentCid in sparseCommentFollowupRequested) {\n delete sparseCommentFollowupRequested[commentCid];\n }\n for (const commentCid in liveCommentPromises) {\n delete liveCommentPromises[commentCid];\n }\n for (const commentCid in liveComments) {\n delete liveComments[commentCid];\n }\n\n // remove all event listeners\n await Promise.all(\n listeners.map(async (listener: any) => {\n try {\n if (typeof listener?.stop === \"function\") {\n await listener.stop();\n }\n } catch {}\n listener?.removeAllListeners?.();\n }),\n );\n listeners.length = 0;\n\n // destroy all component subscriptions to the store\n commentsStore.destroy();\n // restore original state\n commentsStore.setState(originalState);\n};\n\n// reset database and store in between tests\nexport const resetCommentsDatabaseAndStore = async () => {\n await localForageLru.createInstance({ name: \"bitsocialReactHooks-comments\" }).clear();\n await resetCommentsStore();\n};\n\nexport default commentsStore;\n"]}
package/dist/types.d.ts CHANGED
@@ -320,6 +320,17 @@ export interface UseCreateCommunityResult extends Result {
320
320
  createdCommunity: Community | undefined;
321
321
  createCommunity(): Promise<void>;
322
322
  }
323
+ export interface UseExportCommunityOptions extends Options {
324
+ communityAddress?: string;
325
+ communityAddresses?: string[];
326
+ includePrivateKey?: boolean;
327
+ exportPath?: string;
328
+ signal?: AbortSignal;
329
+ }
330
+ export interface UseExportCommunityResult extends Result {
331
+ communityExports: CommunityExport[];
332
+ exportCommunity(): Promise<void>;
333
+ }
323
334
  export interface UseSubscribeOptions extends Options {
324
335
  communityAddress?: string;
325
336
  multisubAddress?: string;
@@ -402,6 +413,12 @@ export type PublishCommentModerationOptions = {
402
413
  export type PublishCommunityEditOptions = {
403
414
  [key: string]: any;
404
415
  };
416
+ export interface ExportCommunityOptions {
417
+ includePrivateKey?: boolean;
418
+ exportPath?: string;
419
+ signal?: AbortSignal;
420
+ [key: string]: unknown;
421
+ }
405
422
  export type Challenge = {
406
423
  [key: string]: any;
407
424
  };
@@ -435,6 +452,16 @@ export type CommunityEdit = {
435
452
  export type Community = {
436
453
  [key: string]: any;
437
454
  };
455
+ export type CommunityExport = {
456
+ communityAddress: string;
457
+ exportId: string;
458
+ name?: string;
459
+ publicKey?: string;
460
+ includePrivateKey?: boolean;
461
+ progress?: number;
462
+ url?: string;
463
+ [key: string]: unknown;
464
+ };
438
465
  export type CommunityStats = {
439
466
  [key: string]: any;
440
467
  };