@bitsocial/bitsocial-react-hooks 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +1365 -0
  3. package/dist/hooks/accounts/accounts.d.ts +64 -0
  4. package/dist/hooks/accounts/accounts.d.ts.map +1 -0
  5. package/dist/hooks/accounts/accounts.js +706 -0
  6. package/dist/hooks/accounts/accounts.js.map +1 -0
  7. package/dist/hooks/accounts/index.d.ts +2 -0
  8. package/dist/hooks/accounts/index.d.ts.map +1 -0
  9. package/dist/hooks/accounts/index.js +2 -0
  10. package/dist/hooks/accounts/index.js.map +1 -0
  11. package/dist/hooks/accounts/utils.d.ts +6 -0
  12. package/dist/hooks/accounts/utils.d.ts.map +1 -0
  13. package/dist/hooks/accounts/utils.js +226 -0
  14. package/dist/hooks/accounts/utils.js.map +1 -0
  15. package/dist/hooks/actions/actions.d.ts +19 -0
  16. package/dist/hooks/actions/actions.d.ts.map +1 -0
  17. package/dist/hooks/actions/actions.js +552 -0
  18. package/dist/hooks/actions/actions.js.map +1 -0
  19. package/dist/hooks/actions/index.d.ts +2 -0
  20. package/dist/hooks/actions/index.d.ts.map +1 -0
  21. package/dist/hooks/actions/index.js +2 -0
  22. package/dist/hooks/actions/index.js.map +1 -0
  23. package/dist/hooks/authors/author-avatars.d.ts +28 -0
  24. package/dist/hooks/authors/author-avatars.d.ts.map +1 -0
  25. package/dist/hooks/authors/author-avatars.js +191 -0
  26. package/dist/hooks/authors/author-avatars.js.map +1 -0
  27. package/dist/hooks/authors/authors.d.ts +37 -0
  28. package/dist/hooks/authors/authors.d.ts.map +1 -0
  29. package/dist/hooks/authors/authors.js +509 -0
  30. package/dist/hooks/authors/authors.js.map +1 -0
  31. package/dist/hooks/authors/index.d.ts +2 -0
  32. package/dist/hooks/authors/index.d.ts.map +1 -0
  33. package/dist/hooks/authors/index.js +2 -0
  34. package/dist/hooks/authors/index.js.map +1 -0
  35. package/dist/hooks/authors/utils.d.ts +4 -0
  36. package/dist/hooks/authors/utils.d.ts.map +1 -0
  37. package/dist/hooks/authors/utils.js +21 -0
  38. package/dist/hooks/authors/utils.js.map +1 -0
  39. package/dist/hooks/comments.d.ts +17 -0
  40. package/dist/hooks/comments.d.ts.map +1 -0
  41. package/dist/hooks/comments.js +351 -0
  42. package/dist/hooks/comments.js.map +1 -0
  43. package/dist/hooks/communities.d.ts +31 -0
  44. package/dist/hooks/communities.d.ts.map +1 -0
  45. package/dist/hooks/communities.js +389 -0
  46. package/dist/hooks/communities.js.map +1 -0
  47. package/dist/hooks/feeds/feeds.d.ts +18 -0
  48. package/dist/hooks/feeds/feeds.d.ts.map +1 -0
  49. package/dist/hooks/feeds/feeds.js +315 -0
  50. package/dist/hooks/feeds/feeds.js.map +1 -0
  51. package/dist/hooks/feeds/index.d.ts +2 -0
  52. package/dist/hooks/feeds/index.d.ts.map +1 -0
  53. package/dist/hooks/feeds/index.js +2 -0
  54. package/dist/hooks/feeds/index.js.map +1 -0
  55. package/dist/hooks/pkc-rpc.d.ts +7 -0
  56. package/dist/hooks/pkc-rpc.d.ts.map +1 -0
  57. package/dist/hooks/pkc-rpc.js +88 -0
  58. package/dist/hooks/pkc-rpc.js.map +1 -0
  59. package/dist/hooks/replies.d.ts +5 -0
  60. package/dist/hooks/replies.d.ts.map +1 -0
  61. package/dist/hooks/replies.js +155 -0
  62. package/dist/hooks/replies.js.map +1 -0
  63. package/dist/hooks/states.d.ts +15 -0
  64. package/dist/hooks/states.d.ts.map +1 -0
  65. package/dist/hooks/states.js +213 -0
  66. package/dist/hooks/states.js.map +1 -0
  67. package/dist/hooks/utils/use-interval.d.ts +3 -0
  68. package/dist/hooks/utils/use-interval.d.ts.map +1 -0
  69. package/dist/hooks/utils/use-interval.js +36 -0
  70. package/dist/hooks/utils/use-interval.js.map +1 -0
  71. package/dist/hooks/utils/use-previous.d.ts +1 -0
  72. package/dist/hooks/utils/use-previous.js +10 -0
  73. package/dist/index.d.ts +82 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +128 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/lib/chain/chain.d.ts +36 -0
  78. package/dist/lib/chain/chain.d.ts.map +1 -0
  79. package/dist/lib/chain/chain.js +195 -0
  80. package/dist/lib/chain/chain.js.map +1 -0
  81. package/dist/lib/chain/index.d.ts +4 -0
  82. package/dist/lib/chain/index.d.ts.map +1 -0
  83. package/dist/lib/chain/index.js +4 -0
  84. package/dist/lib/chain/index.js.map +1 -0
  85. package/dist/lib/community-address.d.ts +6 -0
  86. package/dist/lib/community-address.d.ts.map +1 -0
  87. package/dist/lib/community-address.js +26 -0
  88. package/dist/lib/community-address.js.map +1 -0
  89. package/dist/lib/community-ref.d.ts +23 -0
  90. package/dist/lib/community-ref.d.ts.map +1 -0
  91. package/dist/lib/community-ref.js +113 -0
  92. package/dist/lib/community-ref.js.map +1 -0
  93. package/dist/lib/debug-utils.d.ts +9 -0
  94. package/dist/lib/debug-utils.d.ts.map +1 -0
  95. package/dist/lib/debug-utils.js +21 -0
  96. package/dist/lib/debug-utils.js.map +1 -0
  97. package/dist/lib/feed-sort-type.d.ts +2 -0
  98. package/dist/lib/feed-sort-type.d.ts.map +1 -0
  99. package/dist/lib/feed-sort-type.js +22 -0
  100. package/dist/lib/feed-sort-type.js.map +1 -0
  101. package/dist/lib/localforage-lru/index.d.ts +3 -0
  102. package/dist/lib/localforage-lru/index.d.ts.map +1 -0
  103. package/dist/lib/localforage-lru/index.js +46 -0
  104. package/dist/lib/localforage-lru/index.js.map +1 -0
  105. package/dist/lib/localforage-lru/localforage-lru.d.ts +6 -0
  106. package/dist/lib/localforage-lru/localforage-lru.d.ts.map +1 -0
  107. package/dist/lib/localforage-lru/localforage-lru.js +182 -0
  108. package/dist/lib/localforage-lru/localforage-lru.js.map +1 -0
  109. package/dist/lib/pkc-compat.d.ts +25 -0
  110. package/dist/lib/pkc-compat.d.ts.map +1 -0
  111. package/dist/lib/pkc-compat.js +131 -0
  112. package/dist/lib/pkc-compat.js.map +1 -0
  113. package/dist/lib/pkc-js/fixtures/markdown-example.d.ts +3 -0
  114. package/dist/lib/pkc-js/fixtures/markdown-example.d.ts.map +1 -0
  115. package/dist/lib/pkc-js/fixtures/markdown-example.js +280 -0
  116. package/dist/lib/pkc-js/fixtures/markdown-example.js.map +1 -0
  117. package/dist/lib/pkc-js/index.d.ts +11 -0
  118. package/dist/lib/pkc-js/index.d.ts.map +1 -0
  119. package/dist/lib/pkc-js/index.js +85 -0
  120. package/dist/lib/pkc-js/index.js.map +1 -0
  121. package/dist/lib/pkc-js/pkc-js-mock-content.d.ts +3 -0
  122. package/dist/lib/pkc-js/pkc-js-mock-content.d.ts.map +1 -0
  123. package/dist/lib/pkc-js/pkc-js-mock-content.js +1235 -0
  124. package/dist/lib/pkc-js/pkc-js-mock-content.js.map +1 -0
  125. package/dist/lib/pkc-js/pkc-js-mock.d.ts +137 -0
  126. package/dist/lib/pkc-js/pkc-js-mock.d.ts.map +1 -0
  127. package/dist/lib/pkc-js/pkc-js-mock.js +644 -0
  128. package/dist/lib/pkc-js/pkc-js-mock.js.map +1 -0
  129. package/dist/lib/polyfill.d.ts +3 -0
  130. package/dist/lib/polyfill.d.ts.map +1 -0
  131. package/dist/lib/polyfill.js +14 -0
  132. package/dist/lib/polyfill.js.map +1 -0
  133. package/dist/lib/protocol-compat.d.ts +14 -0
  134. package/dist/lib/protocol-compat.d.ts.map +1 -0
  135. package/dist/lib/protocol-compat.js +67 -0
  136. package/dist/lib/protocol-compat.js.map +1 -0
  137. package/dist/lib/test-utils.d.ts +29 -0
  138. package/dist/lib/test-utils.d.ts.map +1 -0
  139. package/dist/lib/test-utils.js +184 -0
  140. package/dist/lib/test-utils.js.map +1 -0
  141. package/dist/lib/utils/comment-moderation.d.ts +4 -0
  142. package/dist/lib/utils/comment-moderation.d.ts.map +1 -0
  143. package/dist/lib/utils/comment-moderation.js +56 -0
  144. package/dist/lib/utils/comment-moderation.js.map +1 -0
  145. package/dist/lib/utils/index.d.ts +4 -0
  146. package/dist/lib/utils/index.d.ts.map +1 -0
  147. package/dist/lib/utils/index.js +4 -0
  148. package/dist/lib/utils/index.js.map +1 -0
  149. package/dist/lib/utils/utils.d.ts +23 -0
  150. package/dist/lib/utils/utils.d.ts.map +1 -0
  151. package/dist/lib/utils/utils.js +375 -0
  152. package/dist/lib/utils/utils.js.map +1 -0
  153. package/dist/lib/validator.d.ts +30 -0
  154. package/dist/lib/validator.d.ts.map +1 -0
  155. package/dist/lib/validator.js +307 -0
  156. package/dist/lib/validator.js.map +1 -0
  157. package/dist/stores/accounts/account-generator.d.ts +51 -0
  158. package/dist/stores/accounts/account-generator.d.ts.map +1 -0
  159. package/dist/stores/accounts/account-generator.js +160 -0
  160. package/dist/stores/accounts/account-generator.js.map +1 -0
  161. package/dist/stores/accounts/accounts-actions-internal.d.ts +8 -0
  162. package/dist/stores/accounts/accounts-actions-internal.d.ts.map +1 -0
  163. package/dist/stores/accounts/accounts-actions-internal.js +403 -0
  164. package/dist/stores/accounts/accounts-actions-internal.js.map +1 -0
  165. package/dist/stores/accounts/accounts-actions.d.ts +46 -0
  166. package/dist/stores/accounts/accounts-actions.d.ts.map +1 -0
  167. package/dist/stores/accounts/accounts-actions.js +1341 -0
  168. package/dist/stores/accounts/accounts-actions.js.map +1 -0
  169. package/dist/stores/accounts/accounts-database.d.ts +34 -0
  170. package/dist/stores/accounts/accounts-database.d.ts.map +1 -0
  171. package/dist/stores/accounts/accounts-database.js +685 -0
  172. package/dist/stores/accounts/accounts-database.js.map +1 -0
  173. package/dist/stores/accounts/accounts-store.d.ts +32 -0
  174. package/dist/stores/accounts/accounts-store.d.ts.map +1 -0
  175. package/dist/stores/accounts/accounts-store.js +169 -0
  176. package/dist/stores/accounts/accounts-store.js.map +1 -0
  177. package/dist/stores/accounts/index.d.ts +4 -0
  178. package/dist/stores/accounts/index.d.ts.map +1 -0
  179. package/dist/stores/accounts/index.js +4 -0
  180. package/dist/stores/accounts/index.js.map +1 -0
  181. package/dist/stores/accounts/utils.d.ts +49 -0
  182. package/dist/stores/accounts/utils.d.ts.map +1 -0
  183. package/dist/stores/accounts/utils.js +419 -0
  184. package/dist/stores/accounts/utils.js.map +1 -0
  185. package/dist/stores/authors-comments/authors-comments-store.d.ts +37 -0
  186. package/dist/stores/authors-comments/authors-comments-store.d.ts.map +1 -0
  187. package/dist/stores/authors-comments/authors-comments-store.js +338 -0
  188. package/dist/stores/authors-comments/authors-comments-store.js.map +1 -0
  189. package/dist/stores/authors-comments/index.d.ts +4 -0
  190. package/dist/stores/authors-comments/index.d.ts.map +1 -0
  191. package/dist/stores/authors-comments/index.js +4 -0
  192. package/dist/stores/authors-comments/index.js.map +1 -0
  193. package/dist/stores/authors-comments/utils.d.ts +14 -0
  194. package/dist/stores/authors-comments/utils.d.ts.map +1 -0
  195. package/dist/stores/authors-comments/utils.js +81 -0
  196. package/dist/stores/authors-comments/utils.js.map +1 -0
  197. package/dist/stores/comments/comments-store.d.ts +19 -0
  198. package/dist/stores/comments/comments-store.d.ts.map +1 -0
  199. package/dist/stores/comments/comments-store.js +385 -0
  200. package/dist/stores/comments/comments-store.js.map +1 -0
  201. package/dist/stores/comments/index.d.ts +4 -0
  202. package/dist/stores/comments/index.d.ts.map +1 -0
  203. package/dist/stores/comments/index.js +4 -0
  204. package/dist/stores/comments/index.js.map +1 -0
  205. package/dist/stores/communities/communities-store.d.ts +17 -0
  206. package/dist/stores/communities/communities-store.d.ts.map +1 -0
  207. package/dist/stores/communities/communities-store.js +304 -0
  208. package/dist/stores/communities/communities-store.js.map +1 -0
  209. package/dist/stores/communities/index.d.ts +4 -0
  210. package/dist/stores/communities/index.d.ts.map +1 -0
  211. package/dist/stores/communities/index.js +4 -0
  212. package/dist/stores/communities/index.js.map +1 -0
  213. package/dist/stores/communities-pages/communities-pages-store.d.ts +23 -0
  214. package/dist/stores/communities-pages/communities-pages-store.d.ts.map +1 -0
  215. package/dist/stores/communities-pages/communities-pages-store.js +316 -0
  216. package/dist/stores/communities-pages/communities-pages-store.js.map +1 -0
  217. package/dist/stores/communities-pages/index.d.ts +4 -0
  218. package/dist/stores/communities-pages/index.d.ts.map +1 -0
  219. package/dist/stores/communities-pages/index.js +4 -0
  220. package/dist/stores/communities-pages/index.js.map +1 -0
  221. package/dist/stores/feeds/feed-sorter.d.ts +5 -0
  222. package/dist/stores/feeds/feed-sorter.d.ts.map +1 -0
  223. package/dist/stores/feeds/feed-sorter.js +135 -0
  224. package/dist/stores/feeds/feed-sorter.js.map +1 -0
  225. package/dist/stores/feeds/feeds-store.d.ts +25 -0
  226. package/dist/stores/feeds/feeds-store.d.ts.map +1 -0
  227. package/dist/stores/feeds/feeds-store.js +459 -0
  228. package/dist/stores/feeds/feeds-store.js.map +1 -0
  229. package/dist/stores/feeds/index.d.ts +4 -0
  230. package/dist/stores/feeds/index.d.ts.map +1 -0
  231. package/dist/stores/feeds/index.js +4 -0
  232. package/dist/stores/feeds/index.js.map +1 -0
  233. package/dist/stores/feeds/utils.d.ts +43 -0
  234. package/dist/stores/feeds/utils.d.ts.map +1 -0
  235. package/dist/stores/feeds/utils.js +736 -0
  236. package/dist/stores/feeds/utils.js.map +1 -0
  237. package/dist/stores/replies/index.d.ts +4 -0
  238. package/dist/stores/replies/index.d.ts.map +1 -0
  239. package/dist/stores/replies/index.js +4 -0
  240. package/dist/stores/replies/index.js.map +1 -0
  241. package/dist/stores/replies/replies-comments-store.d.ts +8 -0
  242. package/dist/stores/replies/replies-comments-store.d.ts.map +1 -0
  243. package/dist/stores/replies/replies-comments-store.js +23 -0
  244. package/dist/stores/replies/replies-comments-store.js.map +1 -0
  245. package/dist/stores/replies/replies-store.d.ts +29 -0
  246. package/dist/stores/replies/replies-store.d.ts.map +1 -0
  247. package/dist/stores/replies/replies-store.js +413 -0
  248. package/dist/stores/replies/replies-store.js.map +1 -0
  249. package/dist/stores/replies/utils.d.ts +25 -0
  250. package/dist/stores/replies/utils.d.ts.map +1 -0
  251. package/dist/stores/replies/utils.js +549 -0
  252. package/dist/stores/replies/utils.js.map +1 -0
  253. package/dist/stores/replies-pages/index.d.ts +4 -0
  254. package/dist/stores/replies-pages/index.d.ts.map +1 -0
  255. package/dist/stores/replies-pages/index.js +4 -0
  256. package/dist/stores/replies-pages/index.js.map +1 -0
  257. package/dist/stores/replies-pages/replies-pages-store.d.ts +20 -0
  258. package/dist/stores/replies-pages/replies-pages-store.d.ts.map +1 -0
  259. package/dist/stores/replies-pages/replies-pages-store.js +270 -0
  260. package/dist/stores/replies-pages/replies-pages-store.js.map +1 -0
  261. package/dist/stores/replies-pages/utils.d.ts +3 -0
  262. package/dist/stores/replies-pages/utils.d.ts.map +1 -0
  263. package/dist/stores/replies-pages/utils.js +43 -0
  264. package/dist/stores/replies-pages/utils.js.map +1 -0
  265. package/dist/types.d.ts +638 -0
  266. package/dist/types.d.ts.map +1 -0
  267. package/dist/types.js +3 -0
  268. package/dist/types.js.map +1 -0
  269. package/package.json +160 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts-actions.js","sourceRoot":"","sources":["../../../src/stores/accounts/accounts-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// public accounts actions that are called by the user\n\nimport accountsStore, { listeners } from \"./accounts-store\";\nimport communitiesStore from \"../communities\";\nimport accountsDatabase from \"./accounts-database\";\nimport accountGenerator from \"./account-generator\";\nimport Logger from \"@pkcprotocol/pkc-logger\";\nimport validator from \"../../lib/validator\";\nimport chain from \"../../lib/chain\";\nimport assert from \"assert\";\nconst log = Logger(\"bitsocial-react-hooks:accounts:stores\");\nimport {\n Account,\n Accounts,\n PublishCommentOptions,\n Challenge,\n ChallengeVerification,\n PublishVoteOptions,\n PublishCommentEditOptions,\n PublishCommentModerationOptions,\n PublishCommunityEditOptions,\n CreateCommunityOptions,\n Communities,\n AccountComment,\n} from \"../../types\";\nimport * as accountsActionsInternal from \"./accounts-actions-internal\";\nimport {\n backfillPublicationCommunityAddress,\n createPkcCommunityEdit,\n getPkcCommunityAddresses,\n normalizeCommunityEditOptionsForPkc,\n normalizePublicationOptionsForStore,\n normalizePublicationOptionsForPkc,\n} from \"../../lib/pkc-compat\";\nimport {\n getAccountCommentsIndex,\n getAccountCommunities,\n getCommentCidsToAccountsComments,\n getAccountsCommentsIndexes,\n getAccountEditPropertySummary,\n fetchCommentLinkDimensions,\n getAccountCommentDepth,\n addShortAddressesToAccountComment,\n sanitizeAccountCommentForState,\n sanitizeStoredAccountComment,\n} from \"./utils\";\nimport isEqual from \"lodash.isequal\";\nimport { v4 as uuid } from \"uuid\";\nimport utils from \"../../lib/utils\";\n\ntype PublishSession = {\n accountId: string;\n originalIndex: number;\n currentIndex: number;\n comment?: any;\n};\n\n// Active publish-session tracking for pending comments (Task 3)\nconst activePublishSessions = new Map<string, PublishSession>();\nconst abandonedPublishSessionIds = new Set<string>();\n\nconst getClientsSnapshotForState = (clients: any): any => {\n if (!clients || typeof clients !== \"object\") {\n return undefined;\n }\n if (typeof clients.on === \"function\" || \"state\" in clients) {\n return { state: clients.state };\n }\n\n const snapshot: Record<string, any> = {};\n for (const key in clients) {\n const childSnapshot = getClientsSnapshotForState(clients[key]);\n if (childSnapshot !== undefined) {\n snapshot[key] = childSnapshot;\n }\n }\n return Object.keys(snapshot).length > 0 ? snapshot : undefined;\n};\n\nconst syncCommentClientsSnapshot = (\n publishSessionId: string,\n accountId: string,\n publication: any,\n) => {\n const session = getPublishSession(publishSessionId);\n if (session?.currentIndex === undefined) {\n return;\n }\n\n const snapshot = getClientsSnapshotForState(publication?.clients);\n accountsStore.setState(({ accountsComments }) =>\n maybeUpdateAccountComment(accountsComments, accountId, session.currentIndex, (ac, acc) => {\n const updatedAccountComment = { ...acc };\n if (snapshot === undefined) {\n delete updatedAccountComment.clients;\n } else {\n updatedAccountComment.clients = snapshot;\n }\n ac[session.currentIndex] = updatedAccountComment;\n }),\n );\n};\n\nconst accountOwnsCommunityLocally = (account: Account, communityAddress: string) => {\n const localCommunityAddresses = getPkcCommunityAddresses(account.pkc);\n if (localCommunityAddresses.includes(communityAddress)) {\n return true;\n }\n\n const storedCommunity = communitiesStore.getState().communities[communityAddress];\n if (storedCommunity?.roles?.[account.author.address]?.role === \"owner\") {\n return true;\n }\n if (\n storedCommunity?.signer?.address &&\n storedCommunity.signer.address === account.signer?.address\n ) {\n return true;\n }\n\n return account.communities?.[communityAddress]?.role?.role === \"owner\";\n};\n\nconst createPublishSession = (accountId: string, index: number) => {\n const sessionId = uuid();\n activePublishSessions.set(sessionId, {\n accountId,\n originalIndex: index,\n currentIndex: index,\n });\n return sessionId;\n};\n\nconst updatePublishSessionComment = (sessionId: string, comment?: any) => {\n const session = activePublishSessions.get(sessionId);\n if (!session) {\n return;\n }\n activePublishSessions.set(sessionId, { ...session, comment });\n};\n\nconst abandonAndStopPublishSession = (accountId: string, index: number) => {\n const session = getPublishSessionByCurrentIndex(accountId, index);\n if (!session) return;\n abandonedPublishSessionIds.add(session.sessionId);\n try {\n const stop = session.comment?.stop?.bind(session.comment);\n if (typeof stop === \"function\") stop();\n } catch (e) {\n log.error(\"comment.stop() error during abandon\", { accountId, index, error: e });\n }\n activePublishSessions.delete(session.sessionId);\n};\n\nconst isPublishSessionAbandoned = (sessionId: string) => abandonedPublishSessionIds.has(sessionId);\n\nconst getPublishSession = (sessionId: string) => activePublishSessions.get(sessionId);\n\n/** Returns state update or {} when accountComment not yet in state (no-op). Exported for coverage. */\nexport const maybeUpdateAccountComment = (\n accountsComments: Record<string, any[]>,\n accountId: string,\n index: number,\n updater: (accountComments: any[], accountComment: any) => void,\n) => {\n const accountComments = [...(accountsComments[accountId] || [])];\n const accountComment = accountComments[index];\n if (!accountComment) return {};\n updater(accountComments, accountComment);\n return { accountsComments: { ...accountsComments, [accountId]: accountComments } };\n};\n\nconst getPublishSessionByCurrentIndex = (\n accountId: string,\n index: number,\n): ({ sessionId: string } & PublishSession) | undefined => {\n for (const [key, session] of activePublishSessions) {\n if (session.accountId === accountId && session.currentIndex === index) {\n return { sessionId: key, ...session };\n }\n }\n return undefined;\n};\n\nconst shiftPublishSessionIndicesAfterDelete = (accountId: string, deletedIndex: number) => {\n for (const session of activePublishSessions.values()) {\n if (session.accountId === accountId && session.currentIndex > deletedIndex) {\n session.currentIndex -= 1;\n }\n }\n};\n\nconst cleanupPublishSessionOnTerminal = (sessionId: string) => {\n activePublishSessions.delete(sessionId);\n abandonedPublishSessionIds.delete(sessionId);\n};\n\nexport const doesStoredAccountEditMatch = (storedAccountEdit: any, targetStoredAccountEdit: any) =>\n storedAccountEdit?.clientId && targetStoredAccountEdit?.clientId\n ? storedAccountEdit.clientId === targetStoredAccountEdit.clientId\n : isEqual(storedAccountEdit, targetStoredAccountEdit);\n\nexport const sanitizeStoredAccountEdit = (storedAccountEdit: any) => {\n const sanitizedStoredAccountEdit = { ...storedAccountEdit };\n delete sanitizedStoredAccountEdit.signer;\n delete sanitizedStoredAccountEdit.author;\n return sanitizedStoredAccountEdit;\n};\n\nconst accountEditNonPropertyNames = new Set([\n \"author\",\n \"signer\",\n \"clientId\",\n \"commentCid\",\n \"communityAddress\",\n \"communityAddress\",\n \"communityEdit\",\n \"communityEdit\",\n \"timestamp\",\n]);\n\nconst normalizeStoredAccountEditForSummary = (storedAccountEdit: any) => {\n const normalizedEdit = storedAccountEdit.commentModeration\n ? { ...storedAccountEdit, ...storedAccountEdit.commentModeration, commentModeration: undefined }\n : { ...storedAccountEdit };\n const communityEdit = normalizedEdit.communityEdit ?? normalizedEdit.communityEdit;\n if (communityEdit && typeof communityEdit === \"object\") {\n Object.assign(normalizedEdit, communityEdit);\n }\n delete normalizedEdit.communityEdit;\n delete normalizedEdit.communityEdit;\n return normalizedEdit;\n};\n\nconst getStoredAccountEditTarget = (storedAccountEdit: any) =>\n storedAccountEdit.commentCid ||\n storedAccountEdit.communityAddress ||\n storedAccountEdit.communityAddress;\n\nexport const addStoredAccountEditSummaryToState = (\n accountsEditsSummaries: Record<string, Record<string, any>>,\n accountId: string,\n storedAccountEdit: any,\n) => {\n const editTarget = getStoredAccountEditTarget(storedAccountEdit);\n if (!editTarget) {\n return { accountsEditsSummaries };\n }\n\n const accountEditsSummary = accountsEditsSummaries[accountId] || {};\n const targetSummary = accountEditsSummary[editTarget] || {};\n const nextSummary = { ...targetSummary };\n const normalizedEdit = normalizeStoredAccountEditForSummary(storedAccountEdit);\n\n for (const propertyName in normalizedEdit) {\n if (\n normalizedEdit[propertyName] === undefined ||\n accountEditNonPropertyNames.has(propertyName)\n ) {\n continue;\n }\n const previousTimestamp = nextSummary[propertyName]?.timestamp || 0;\n if ((normalizedEdit.timestamp || 0) >= previousTimestamp) {\n nextSummary[propertyName] = {\n timestamp: normalizedEdit.timestamp,\n value: normalizedEdit[propertyName],\n };\n }\n }\n\n return {\n accountsEditsSummaries: {\n ...accountsEditsSummaries,\n [accountId]: {\n ...accountEditsSummary,\n [editTarget]: nextSummary,\n },\n },\n };\n};\n\nexport const removeStoredAccountEditSummaryFromState = (\n accountsEditsSummaries: Record<string, Record<string, any>>,\n accountsEdits: Record<string, Record<string, any[]>>,\n accountId: string,\n storedAccountEdit: any,\n) => {\n const editTarget = getStoredAccountEditTarget(storedAccountEdit);\n if (!editTarget) {\n return { accountsEditsSummaries };\n }\n\n let deletedEdit = false;\n const editsForTarget = (accountsEdits[accountId]?.[editTarget] || []).filter((storedEdit) => {\n if (!deletedEdit && doesStoredAccountEditMatch(storedEdit, storedAccountEdit)) {\n deletedEdit = true;\n return false;\n }\n return true;\n });\n const nextTargetSummary = getAccountEditPropertySummary(editsForTarget);\n const nextAccountSummary = { ...(accountsEditsSummaries[accountId] || {}) };\n if (Object.keys(nextTargetSummary).length > 0) {\n nextAccountSummary[editTarget] = nextTargetSummary;\n } else {\n delete nextAccountSummary[editTarget];\n }\n\n return {\n accountsEditsSummaries: {\n ...accountsEditsSummaries,\n [accountId]: nextAccountSummary,\n },\n };\n};\n\nexport const hasTerminalChallengeVerificationError = (challengeVerification: any) => {\n const challengeErrors = challengeVerification?.challengeErrors;\n const hasChallengeErrors = Array.isArray(challengeErrors)\n ? challengeErrors.length > 0\n : challengeErrors && typeof challengeErrors === \"object\"\n ? Object.keys(challengeErrors).length > 0\n : Boolean(challengeErrors);\n\n return (\n !challengeVerification?.challengeSuccess &&\n (hasChallengeErrors || Boolean(challengeVerification?.reason))\n );\n};\n\nexport const addStoredAccountEditToState = (\n accountsEdits: Record<string, Record<string, any[]>>,\n accountId: string,\n storedAccountEdit: any,\n) => {\n const accountEdits = accountsEdits[accountId] || {};\n const editTarget = getStoredAccountEditTarget(storedAccountEdit);\n if (!editTarget) {\n return { accountsEdits };\n }\n const commentEdits = accountEdits[editTarget] || [];\n return {\n accountsEdits: {\n ...accountsEdits,\n [accountId]: {\n ...accountEdits,\n [editTarget]: [...commentEdits, storedAccountEdit],\n },\n },\n };\n};\n\nexport const removeStoredAccountEditFromState = (\n accountsEdits: Record<string, Record<string, any[]>>,\n accountId: string,\n storedAccountEdit: any,\n) => {\n const accountEdits = accountsEdits[accountId] || {};\n const editTarget = getStoredAccountEditTarget(storedAccountEdit);\n if (!editTarget) {\n return { accountsEdits };\n }\n const commentEdits = accountEdits[editTarget] || [];\n let deletedEdit = false;\n const nextCommentEdits = commentEdits.filter((commentEdit) => {\n if (!deletedEdit && doesStoredAccountEditMatch(commentEdit, storedAccountEdit)) {\n deletedEdit = true;\n return false;\n }\n return true;\n });\n\n const nextAccountEdits =\n nextCommentEdits.length > 0\n ? {\n ...accountEdits,\n [editTarget]: nextCommentEdits,\n }\n : Object.fromEntries(\n Object.entries(accountEdits).filter(([target]) => target !== editTarget),\n );\n\n return {\n accountsEdits: {\n ...accountsEdits,\n [accountId]: nextAccountEdits,\n },\n };\n};\n\nconst addNewAccountToDatabaseAndState = async (newAccount: Account) => {\n // add to database first to init the account\n await accountsDatabase.addAccount(newAccount);\n // use database data for these because it's easier\n const [newAccountIds, newAccountNamesToAccountIds] = await Promise.all<any>([\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountIds\"),\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\"),\n ]);\n\n // set the new state\n const {\n accounts,\n accountsComments,\n accountsCommentsIndexes,\n accountsVotes,\n accountsEdits,\n accountsEditsSummaries,\n accountsEditsLoaded,\n accountsCommentsReplies,\n } = accountsStore.getState();\n const newAccounts = { ...accounts, [newAccount.id]: newAccount };\n const newState: any = {\n accounts: newAccounts,\n accountIds: newAccountIds,\n accountNamesToAccountIds: newAccountNamesToAccountIds,\n accountsComments: { ...accountsComments, [newAccount.id]: [] },\n accountsCommentsIndexes: {\n ...accountsCommentsIndexes,\n [newAccount.id]: getAccountCommentsIndex([]),\n },\n accountsVotes: { ...accountsVotes, [newAccount.id]: {} },\n accountsEdits: { ...accountsEdits, [newAccount.id]: {} },\n accountsEditsSummaries: { ...accountsEditsSummaries, [newAccount.id]: {} },\n accountsEditsLoaded: { ...accountsEditsLoaded, [newAccount.id]: false },\n accountsCommentsReplies: { ...accountsCommentsReplies, [newAccount.id]: {} },\n };\n // if there is only 1 account, make it active\n // otherwise stay on the same active account\n if (newAccountIds.length === 1) {\n newState.activeAccountId = newAccount.id;\n }\n accountsStore.setState(newState);\n};\n\nexport const createAccount = async (accountName?: string) => {\n const newAccount = await accountGenerator.generateDefaultAccount();\n if (accountName) {\n newAccount.name = accountName;\n }\n await addNewAccountToDatabaseAndState(newAccount);\n log(\"accountsActions.createAccount\", { accountName, account: newAccount });\n};\n\nexport const deleteAccount = async (accountName?: string) => {\n const {\n accounts,\n accountNamesToAccountIds,\n activeAccountId,\n accountsComments,\n accountsCommentsIndexes,\n accountsVotes,\n accountsEdits,\n accountsEditsSummaries,\n accountsEditsLoaded,\n } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.deleteAccount account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n await accountsDatabase.removeAccount(account);\n const newAccounts = { ...accounts };\n delete newAccounts[account.id];\n const [newAccountIds, newActiveAccountId, newAccountNamesToAccountIds] = await Promise.all<any>([\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountIds\"),\n accountsDatabase.accountsMetadataDatabase.getItem(\"activeAccountId\"),\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\"),\n ]);\n const newAccountsComments = { ...accountsComments };\n delete newAccountsComments[account.id];\n const newAccountsCommentsIndexes = { ...accountsCommentsIndexes };\n delete newAccountsCommentsIndexes[account.id];\n const newCommentCidsToAccountsComments = getCommentCidsToAccountsComments(newAccountsComments);\n const newAccountsVotes = { ...accountsVotes };\n delete newAccountsVotes[account.id];\n const newAccountsEdits = { ...accountsEdits };\n delete newAccountsEdits[account.id];\n const newAccountsEditsSummaries = { ...accountsEditsSummaries };\n delete newAccountsEditsSummaries[account.id];\n const newAccountsEditsLoaded = { ...accountsEditsLoaded };\n delete newAccountsEditsLoaded[account.id];\n\n accountsStore.setState({\n accounts: newAccounts,\n accountIds: newAccountIds,\n activeAccountId: newActiveAccountId,\n accountNamesToAccountIds: newAccountNamesToAccountIds,\n accountsComments: newAccountsComments,\n accountsCommentsIndexes: newAccountsCommentsIndexes,\n commentCidsToAccountsComments: newCommentCidsToAccountsComments,\n accountsVotes: newAccountsVotes,\n accountsEdits: newAccountsEdits,\n accountsEditsSummaries: newAccountsEditsSummaries,\n accountsEditsLoaded: newAccountsEditsLoaded,\n });\n};\n\nexport const setActiveAccount = async (accountName: string) => {\n const { accountNamesToAccountIds } = accountsStore.getState();\n assert(accountNamesToAccountIds, `can't use accountsStore.accountActions before initialized`);\n validator.validateAccountsActionsSetActiveAccountArguments(accountName);\n const accountId = accountNamesToAccountIds[accountName];\n await accountsDatabase.accountsMetadataDatabase.setItem(\"activeAccountId\", accountId);\n log(\"accountsActions.setActiveAccount\", { accountName, accountId });\n accountsStore.setState({ activeAccountId: accountId });\n};\n\nexport const setAccount = async (account: Account) => {\n const { accounts } = accountsStore.getState();\n validator.validateAccountsActionsSetAccountArguments(account);\n assert(\n accounts?.[account.id],\n `cannot set account with account.id '${account.id}' id does not exist in database`,\n );\n\n // if author.address has changed, add new community roles of author.address found in communities store\n // TODO: add test to check if roles get added\n if (account.author.address !== accounts[account.id].author.address) {\n const communities = getAccountCommunities(account, communitiesStore.getState().communities);\n account = { ...account, communities };\n\n // wallet.signature changes if author.address changes\n if (account.author.wallets?.eth) {\n const pkcSignerWalletWithNewAuthorAddress = await chain.getEthWalletFromPkcPrivateKey(\n account.signer.privateKey,\n account.author.address,\n );\n // wallet is using pkc signer, redo signature with new author.address\n if (account.author.wallets.eth.address === pkcSignerWalletWithNewAuthorAddress?.address) {\n account.author.wallets = {\n ...account.author.wallets,\n eth: pkcSignerWalletWithNewAuthorAddress,\n };\n }\n }\n }\n\n // use this function to serialize and update all databases\n await accountsDatabase.addAccount(account);\n const [newAccount, newAccountNamesToAccountIds] = await Promise.all<any>([\n // use this function to deserialize\n accountsDatabase.getAccount(account.id),\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\"),\n ]);\n const newAccounts: Accounts = { ...accounts, [newAccount.id]: newAccount };\n log(\"accountsActions.setAccount\", { account: newAccount });\n accountsStore.setState({\n accounts: newAccounts,\n accountNamesToAccountIds: newAccountNamesToAccountIds,\n });\n};\n\nexport const setAccountsOrder = async (newOrderedAccountNames: string[]) => {\n const { accounts, accountNamesToAccountIds } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds,\n `can't use accountsStore.accountActions before initialized`,\n );\n const accountIds = [];\n const accountNames = [];\n for (const accountName of newOrderedAccountNames) {\n const accountId = accountNamesToAccountIds[accountName];\n accountIds.push(accountId);\n accountNames.push(accounts[accountId].name);\n }\n validator.validateAccountsActionsSetAccountsOrderArguments(newOrderedAccountNames, accountNames);\n log(\"accountsActions.setAccountsOrder\", {\n previousAccountNames: accountNames,\n newAccountNames: newOrderedAccountNames,\n });\n await accountsDatabase.accountsMetadataDatabase.setItem(\"accountIds\", accountIds);\n accountsStore.setState({ accountIds });\n};\n\nexport const importAccount = async (serializedAccount: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let imported;\n try {\n imported = JSON.parse(serializedAccount);\n } catch (e) {}\n assert(\n imported?.account && imported?.account?.id && imported?.account?.name,\n `accountsActions.importAccount failed JSON.stringify json serializedAccount '${serializedAccount}'`,\n );\n\n // add community roles already in communities store to imported account\n // TODO: add test to check if roles get added\n const communities = getAccountCommunities(\n imported.account,\n communitiesStore.getState().communities,\n );\n\n // if imported.account.name already exists, add ' 2', don't overwrite\n if (accountNamesToAccountIds[imported.account.name]) {\n imported.account.name += \" 2\";\n }\n\n // generate new account\n const generatedAccount = await accountGenerator.generateDefaultAccount();\n // use generatedAccount to init properties like .pkc and .id on a new account\n // overwrite account.id to avoid duplicate ids\n const newAccount = {\n ...generatedAccount,\n ...imported.account,\n communities,\n id: generatedAccount.id,\n };\n\n // add account to database\n await accountsDatabase.addAccount(newAccount);\n\n // add account comments, votes, edits to database\n for (const accountComment of imported.accountComments || []) {\n await accountsDatabase.addAccountComment(newAccount.id, accountComment);\n }\n for (const accountVote of imported.accountVotes || []) {\n await accountsDatabase.addAccountVote(newAccount.id, accountVote);\n }\n for (const accountEdit of imported.accountEdits || []) {\n await accountsDatabase.addAccountEdit(newAccount.id, accountEdit);\n }\n\n // set new state\n\n // get new state data from database because it's easier\n const [\n accountComments,\n accountVotes,\n accountEditsSummary,\n accountIds,\n newAccountNamesToAccountIds,\n ] = await Promise.all<any>([\n accountsDatabase.getAccountComments(newAccount.id),\n accountsDatabase.getAccountVotes(newAccount.id),\n accountsDatabase.getAccountEditsSummary(newAccount.id),\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountIds\"),\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\"),\n ]);\n\n accountsStore.setState((state) => ({\n accounts: { ...state.accounts, [newAccount.id]: newAccount },\n accountIds,\n accountNamesToAccountIds: newAccountNamesToAccountIds,\n accountsComments: { ...state.accountsComments, [newAccount.id]: accountComments },\n accountsCommentsIndexes: {\n ...state.accountsCommentsIndexes,\n [newAccount.id]: getAccountCommentsIndex(accountComments),\n },\n commentCidsToAccountsComments: getCommentCidsToAccountsComments({\n ...state.accountsComments,\n [newAccount.id]: accountComments,\n }),\n accountsVotes: { ...state.accountsVotes, [newAccount.id]: accountVotes },\n accountsEdits: { ...state.accountsEdits, [newAccount.id]: {} },\n accountsEditsSummaries: {\n ...state.accountsEditsSummaries,\n [newAccount.id]: accountEditsSummary,\n },\n accountsEditsLoaded: { ...state.accountsEditsLoaded, [newAccount.id]: false },\n // don't import/export replies to own comments, those are just cached and can be refetched\n accountsCommentsReplies: { ...state.accountsCommentsReplies, [newAccount.id]: {} },\n }));\n\n log(\"accountsActions.importAccount\", {\n account: newAccount,\n accountComments,\n accountVotes,\n accountEditsSummary,\n });\n\n // start looking for updates for all accounts comments in database\n for (const accountComment of accountComments) {\n accountsStore\n .getState()\n .accountsActionsInternal.startUpdatingAccountCommentOnCommentUpdateEvents(\n accountComment,\n newAccount,\n accountComment.index,\n )\n .catch((error: unknown) =>\n log.error(\n \"accountsActions.importAccount startUpdatingAccountCommentOnCommentUpdateEvents error\",\n {\n accountComment,\n accountCommentIndex: accountComment.index,\n importedAccount: newAccount,\n error,\n },\n ),\n );\n }\n\n // TODO: add options to only import private key, account settings, or include all account comments/votes history\n};\n\nexport const exportAccount = async (accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.exportAccount account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n const exportedAccountJson = await accountsDatabase.getExportedAccountJson(account.id);\n log(\"accountsActions.exportAccount\", { exportedAccountJson });\n return exportedAccountJson;\n};\n\nexport const subscribe = async (communityAddress: string, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n communityAddress && typeof communityAddress === \"string\",\n `accountsActions.subscribe invalid communityAddress '${communityAddress}'`,\n );\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.subscribe account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n\n let subscriptions: string[] = account.subscriptions || [];\n if (subscriptions.includes(communityAddress)) {\n throw Error(`account '${account.id}' already subscribed to '${communityAddress}'`);\n }\n subscriptions = [...subscriptions, communityAddress];\n\n const updatedAccount: Account = { ...account, subscriptions };\n // update account in db async for instant feedback speed\n accountsDatabase.addAccount(updatedAccount);\n const updatedAccounts = { ...accounts, [updatedAccount.id]: updatedAccount };\n log(\"accountsActions.subscribe\", { account: updatedAccount, accountName, communityAddress });\n accountsStore.setState({ accounts: updatedAccounts });\n};\n\nexport const unsubscribe = async (communityAddress: string, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n communityAddress && typeof communityAddress === \"string\",\n `accountsActions.unsubscribe invalid communityAddress '${communityAddress}'`,\n );\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.unsubscribe account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n\n let subscriptions: string[] = account.subscriptions || [];\n if (!subscriptions.includes(communityAddress)) {\n throw Error(`account '${account.id}' already unsubscribed from '${communityAddress}'`);\n }\n // remove communityAddress\n subscriptions = subscriptions.filter((address) => address !== communityAddress);\n\n const updatedAccount: Account = { ...account, subscriptions };\n // update account in db async for instant feedback speed\n accountsDatabase.addAccount(updatedAccount);\n const updatedAccounts = { ...accounts, [updatedAccount.id]: updatedAccount };\n log(\"accountsActions.unsubscribe\", { account: updatedAccount, accountName, communityAddress });\n accountsStore.setState({ accounts: updatedAccounts });\n};\n\nexport const blockAddress = async (address: string, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n address && typeof address === \"string\",\n `accountsActions.blockAddress invalid address '${address}'`,\n );\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.blockAddress account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n\n const blockedAddresses: { [address: string]: boolean } = { ...account.blockedAddresses };\n if (blockedAddresses[address] === true) {\n throw Error(`account '${account.id}' already blocked address '${address}'`);\n }\n blockedAddresses[address] = true;\n\n const updatedAccount: Account = { ...account, blockedAddresses };\n // update account in db async for instant feedback speed\n accountsDatabase.addAccount(updatedAccount);\n const updatedAccounts = { ...accounts, [updatedAccount.id]: updatedAccount };\n log(\"accountsActions.blockAddress\", { account: updatedAccount, accountName, address });\n accountsStore.setState({ accounts: updatedAccounts });\n};\n\nexport const unblockAddress = async (address: string, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n address && typeof address === \"string\",\n `accountsActions.unblockAddress invalid address '${address}'`,\n );\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.unblockAddress account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n\n const blockedAddresses: { [address: string]: boolean } = { ...account.blockedAddresses };\n if (!blockedAddresses[address]) {\n throw Error(`account '${account.id}' already unblocked address '${address}'`);\n }\n delete blockedAddresses[address];\n\n const updatedAccount: Account = { ...account, blockedAddresses };\n // update account in db async for instant feedback speed\n accountsDatabase.addAccount(updatedAccount);\n const updatedAccounts = { ...accounts, [updatedAccount.id]: updatedAccount };\n log(\"accountsActions.unblockAddress\", { account: updatedAccount, accountName, address });\n accountsStore.setState({ accounts: updatedAccounts });\n};\n\nexport const blockCid = async (cid: string, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(cid && typeof cid === \"string\", `accountsActions.blockCid invalid cid '${cid}'`);\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.blockCid account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n\n const blockedCids: { [cid: string]: boolean } = { ...account.blockedCids };\n if (blockedCids[cid] === true) {\n throw Error(`account '${account.id}' already blocked cid '${cid}'`);\n }\n blockedCids[cid] = true;\n\n const updatedAccount: Account = { ...account, blockedCids };\n // update account in db async for instant feedback speed\n accountsDatabase.addAccount(updatedAccount);\n const updatedAccounts = { ...accounts, [updatedAccount.id]: updatedAccount };\n log(\"accountsActions.blockCid\", { account: updatedAccount, accountName, cid });\n accountsStore.setState({ accounts: updatedAccounts });\n};\n\nexport const unblockCid = async (cid: string, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(cid && typeof cid === \"string\", `accountsActions.unblockCid invalid cid '${cid}'`);\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(\n account?.id,\n `accountsActions.unblockCid account.id '${account?.id}' doesn't exist, activeAccountId '${activeAccountId}' accountName '${accountName}'`,\n );\n\n const blockedCids: { [cid: string]: boolean } = { ...account.blockedCids };\n if (!blockedCids[cid]) {\n throw Error(`account '${account.id}' already unblocked cid '${cid}'`);\n }\n delete blockedCids[cid];\n\n const updatedAccount: Account = { ...account, blockedCids };\n // update account in db async for instant feedback speed\n accountsDatabase.addAccount(updatedAccount);\n const updatedAccounts = { ...accounts, [updatedAccount.id]: updatedAccount };\n log(\"accountsActions.unblockCid\", { account: updatedAccount, accountName, cid });\n accountsStore.setState({ accounts: updatedAccounts });\n};\n\nexport const publishComment = async (\n publishCommentOptions: PublishCommentOptions,\n accountName?: string,\n) => {\n const { accounts, accountsComments, accountNamesToAccountIds, activeAccountId } =\n accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n validator.validateAccountsActionsPublishCommentArguments({\n publishCommentOptions,\n accountName,\n account,\n });\n\n // find author.previousCommentCid if any\n const accountCommentsWithCids = accountsComments[account.id]\n .filter((comment: AccountComment) => comment.cid)\n // author can change his address, his previousCommentCid becomes invalid\n .filter((comment: AccountComment) => comment.author?.address === account.author?.address);\n const previousCommentCid = accountCommentsWithCids[accountCommentsWithCids.length - 1]?.cid;\n const author = { ...account.author };\n if (previousCommentCid) {\n author.previousCommentCid = previousCommentCid;\n }\n\n let createCommentOptions: any = normalizePublicationOptionsForPkc(account.pkc, {\n timestamp: Math.floor(Date.now() / 1000),\n author,\n signer: account.signer,\n ...publishCommentOptions,\n });\n delete createCommentOptions.onChallenge;\n delete createCommentOptions.onChallengeVerification;\n delete createCommentOptions.onError;\n delete createCommentOptions.onPublishingStateChange;\n delete createCommentOptions._onPendingCommentIndex;\n const storedCreateCommentOptions = normalizePublicationOptionsForStore(createCommentOptions);\n\n // make sure the options dont throw\n await account.pkc.createComment(createCommentOptions);\n\n // try to get comment depth needed for custom depth flat account replies\n const depth = getAccountCommentDepth(createCommentOptions);\n\n // set fetching link dimensions state\n let fetchingLinkDimensionsStates: { state: string; publishingState: string };\n if (publishCommentOptions.link) {\n publishCommentOptions.onPublishingStateChange?.(\"fetching-link-dimensions\");\n fetchingLinkDimensionsStates = {\n state: \"publishing\",\n publishingState: \"fetching-link-dimensions\",\n };\n }\n\n // save comment to db\n let accountCommentIndex = accountsComments[account.id].length;\n const publishSessionId = createPublishSession(account.id, accountCommentIndex);\n let savedOnce = false;\n const saveCreatedAccountComment = async (accountComment: AccountComment) => {\n if (isPublishSessionAbandoned(publishSessionId)) {\n return;\n }\n const isUpdate = savedOnce;\n const session = getPublishSession(publishSessionId);\n const currentIndex = session?.currentIndex ?? accountCommentIndex;\n const persistedAccountComment = addShortAddressesToAccountComment(\n sanitizeStoredAccountComment(accountComment),\n ) as AccountComment;\n const liveAccountComment = addShortAddressesToAccountComment(\n sanitizeAccountCommentForState(accountComment),\n ) as AccountComment;\n const liveAccountComments = accountsStore.getState().accountsComments[account.id] || [];\n if (isUpdate && !liveAccountComments[currentIndex]) {\n return;\n }\n await accountsDatabase.addAccountComment(\n account.id,\n persistedAccountComment,\n isUpdate ? currentIndex : undefined,\n );\n savedOnce = true;\n accountsStore.setState(({ accountsComments, accountsCommentsIndexes }) => {\n const accountComments = [...accountsComments[account.id]];\n if (isUpdate && !accountComments[currentIndex]) {\n return {};\n }\n accountComments[currentIndex] = {\n ...liveAccountComment,\n index: currentIndex,\n accountId: account.id,\n };\n return {\n accountsComments: { ...accountsComments, [account.id]: accountComments },\n accountsCommentsIndexes: {\n ...accountsCommentsIndexes,\n [account.id]: getAccountCommentsIndex(accountComments),\n },\n };\n });\n };\n let createdAccountComment = {\n ...storedCreateCommentOptions,\n depth,\n index: accountCommentIndex,\n accountId: account.id,\n };\n createdAccountComment = addShortAddressesToAccountComment(\n sanitizeAccountCommentForState(createdAccountComment),\n );\n await saveCreatedAccountComment(createdAccountComment);\n publishCommentOptions._onPendingCommentIndex?.(accountCommentIndex, createdAccountComment);\n\n let comment: any;\n (async () => {\n // fetch comment.link dimensions\n if (publishCommentOptions.link) {\n const commentLinkDimensions = await fetchCommentLinkDimensions(publishCommentOptions.link);\n createCommentOptions = { ...createCommentOptions, ...commentLinkDimensions };\n // save dimensions to db\n createdAccountComment = { ...createdAccountComment, ...commentLinkDimensions };\n await saveCreatedAccountComment(createdAccountComment);\n }\n if (isPublishSessionAbandoned(publishSessionId)) {\n return;\n }\n comment = backfillPublicationCommunityAddress(\n await account.pkc.createComment(createCommentOptions),\n createCommentOptions,\n );\n syncCommentClientsSnapshot(publishSessionId, account.id, comment);\n publishAndRetryFailedChallengeVerification();\n log(\"accountsActions.publishComment\", { createCommentOptions });\n })();\n\n let lastChallenge: Challenge | undefined;\n let lastReportedPublishError: Error | undefined;\n const normalizePublishError = (error: unknown): Error =>\n error instanceof Error ? error : new Error(String(error));\n const getActiveSessionForComment = (activeComment: any) => {\n const session = getPublishSession(publishSessionId);\n if (\n !session ||\n isPublishSessionAbandoned(publishSessionId) ||\n session.comment !== activeComment\n ) {\n return undefined;\n }\n return session;\n };\n const queueCleanupFailedPublishSession = (activeComment: any) => {\n if (!getActiveSessionForComment(activeComment)) return;\n queueMicrotask(() => {\n if (getActiveSessionForComment(activeComment)) {\n cleanupPublishSessionOnTerminal(publishSessionId);\n }\n });\n };\n const recordPublishCommentError = (rawError: unknown, activeComment: any) => {\n const error = normalizePublishError(rawError);\n if (lastReportedPublishError === error) {\n return error;\n }\n lastReportedPublishError = error;\n\n const session = getActiveSessionForComment(activeComment);\n if (!session) return error;\n const currentIndex = session.currentIndex;\n accountsStore.setState(({ accountsComments }) =>\n maybeUpdateAccountComment(accountsComments, account.id, currentIndex, (ac, acc) => {\n const previousErrors = Array.isArray(acc.errors) ? acc.errors : [];\n const errors =\n previousErrors[previousErrors.length - 1] === error\n ? previousErrors\n : [...previousErrors, error];\n ac[currentIndex] = { ...acc, errors, error };\n }),\n );\n return error;\n };\n const reportActivePublishCommentError = (rawError: unknown, activeComment: any) => {\n if (!getActiveSessionForComment(activeComment)) return;\n const error = recordPublishCommentError(rawError, activeComment);\n queueCleanupFailedPublishSession(activeComment);\n publishCommentOptions.onError?.(error, activeComment);\n };\n async function publishAndRetryFailedChallengeVerification() {\n if (isPublishSessionAbandoned(publishSessionId)) {\n return;\n }\n const activeComment = comment;\n updatePublishSessionComment(publishSessionId, activeComment);\n activeComment.once(\"challenge\", async (challenge: Challenge) => {\n lastChallenge = challenge;\n publishCommentOptions.onChallenge(challenge, activeComment);\n });\n activeComment.once(\n \"challengeverification\",\n async (challengeVerification: ChallengeVerification) => {\n publishCommentOptions.onChallengeVerification(challengeVerification, activeComment);\n if (!challengeVerification.challengeSuccess && lastChallenge) {\n // publish again automatically on fail\n const timestamp = Math.floor(Date.now() / 1000);\n createCommentOptions = { ...createCommentOptions, timestamp };\n createdAccountComment = { ...createdAccountComment, timestamp };\n updatePublishSessionComment(publishSessionId, undefined);\n await saveCreatedAccountComment(createdAccountComment);\n if (isPublishSessionAbandoned(publishSessionId)) {\n return;\n }\n comment = backfillPublicationCommunityAddress(\n await account.pkc.createComment(createCommentOptions),\n createCommentOptions,\n );\n syncCommentClientsSnapshot(publishSessionId, account.id, comment);\n lastChallenge = undefined;\n publishAndRetryFailedChallengeVerification();\n } else {\n // the challengeverification message of a comment publication should in theory send back the CID\n // of the published comment which is needed to resolve it for replies, upvotes, etc\n const session = getPublishSession(publishSessionId);\n const currentIndex = session?.currentIndex ?? accountCommentIndex;\n if (!session || isPublishSessionAbandoned(publishSessionId)) return;\n queueMicrotask(() => cleanupPublishSessionOnTerminal(publishSessionId));\n if (challengeVerification?.commentUpdate?.cid) {\n const persistedCommentWithCid = addShortAddressesToAccountComment(\n sanitizeStoredAccountComment(normalizePublicationOptionsForStore(comment as any)),\n );\n const liveCommentWithCid = addShortAddressesToAccountComment(\n sanitizeAccountCommentForState(normalizePublicationOptionsForStore(comment as any)),\n );\n delete (persistedCommentWithCid as any).clients;\n delete (persistedCommentWithCid as any).publishingState;\n delete (persistedCommentWithCid as any).error;\n delete (persistedCommentWithCid as any).errors;\n delete (liveCommentWithCid as any).clients;\n delete (liveCommentWithCid as any).publishingState;\n delete (liveCommentWithCid as any).error;\n delete (liveCommentWithCid as any).errors;\n await accountsDatabase.addAccountComment(\n account.id,\n persistedCommentWithCid,\n currentIndex,\n );\n accountsStore.setState(\n ({ accountsComments, accountsCommentsIndexes, commentCidsToAccountsComments }) => {\n const updatedAccountComments = [...accountsComments[account.id]];\n const updatedAccountComment = {\n ...liveCommentWithCid,\n index: currentIndex,\n accountId: account.id,\n };\n updatedAccountComments[currentIndex] = updatedAccountComment;\n return {\n accountsComments: { ...accountsComments, [account.id]: updatedAccountComments },\n accountsCommentsIndexes: {\n ...accountsCommentsIndexes,\n [account.id]: getAccountCommentsIndex(updatedAccountComments),\n },\n commentCidsToAccountsComments: {\n ...commentCidsToAccountsComments,\n [challengeVerification?.commentUpdate?.cid]: {\n accountId: account.id,\n accountCommentIndex: currentIndex,\n },\n },\n };\n },\n );\n\n // clone the comment or it bugs publishing callbacks\n const updatingComment = await account.pkc.createComment(\n normalizePublicationOptionsForPkc(account.pkc, { ...comment }),\n );\n accountsActionsInternal\n .startUpdatingAccountCommentOnCommentUpdateEvents(\n updatingComment,\n account,\n currentIndex,\n )\n .catch((error: unknown) =>\n log.error(\n \"accountsActions.publishComment startUpdatingAccountCommentOnCommentUpdateEvents error\",\n { comment, account, accountCommentIndex, error },\n ),\n );\n }\n }\n },\n );\n\n activeComment.on(\"error\", (error: Error) => {\n reportActivePublishCommentError(error, activeComment);\n });\n activeComment.on(\"statechange\", (state: string) => {\n const session = getActiveSessionForComment(activeComment);\n if (!session) return;\n const currentIndex = session.currentIndex;\n let hasTerminalFailedState = false;\n accountsStore.setState(({ accountsComments }) =>\n maybeUpdateAccountComment(accountsComments, account.id, currentIndex, (ac, acc) => {\n const nextAccountComment = { ...acc, state };\n ac[currentIndex] = nextAccountComment;\n hasTerminalFailedState =\n nextAccountComment.state === \"stopped\" &&\n nextAccountComment.publishingState === \"failed\";\n }),\n );\n if (hasTerminalFailedState) {\n queueCleanupFailedPublishSession(activeComment);\n }\n });\n activeComment.on(\"publishingstatechange\", async (publishingState: string) => {\n const session = getActiveSessionForComment(activeComment);\n if (!session) return;\n const currentIndex = session.currentIndex;\n let hasTerminalFailedState = false;\n accountsStore.setState(({ accountsComments }) =>\n maybeUpdateAccountComment(accountsComments, account.id, currentIndex, (ac, acc) => {\n const nextAccountComment = { ...acc, publishingState };\n ac[currentIndex] = nextAccountComment;\n hasTerminalFailedState =\n nextAccountComment.state === \"stopped\" &&\n nextAccountComment.publishingState === \"failed\";\n }),\n );\n if (hasTerminalFailedState) {\n queueCleanupFailedPublishSession(activeComment);\n }\n publishCommentOptions.onPublishingStateChange?.(publishingState);\n });\n\n // set clients on account comment so the frontend can display it, dont persist in db because a reload cancels publishing\n utils.clientsOnStateChange(\n activeComment.clients,\n (clientState: string, clientType: string, clientUrl: string, chainTicker?: string) => {\n const session = getActiveSessionForComment(activeComment);\n if (!session) return;\n const currentIndex = session.currentIndex;\n accountsStore.setState(({ accountsComments }) =>\n maybeUpdateAccountComment(accountsComments, account.id, currentIndex, (ac, acc) => {\n const clients = getClientsSnapshotForState(activeComment.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 ac[currentIndex] = { ...acc, clients };\n }),\n );\n },\n );\n\n listeners.push(activeComment);\n try {\n // publish will resolve after the challenge request\n // if it fails before, like failing to resolve ENS, we can emit the error\n await activeComment.publish();\n } catch (error) {\n reportActivePublishCommentError(error, activeComment);\n }\n }\n\n return createdAccountComment;\n};\n\nexport const deleteComment = async (\n commentCidOrAccountCommentIndex: string | number,\n accountName?: string,\n) => {\n const {\n accounts,\n accountsComments,\n accountNamesToAccountIds,\n activeAccountId,\n commentCidsToAccountsComments,\n } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n assert(account?.id, `accountsActions.deleteComment account.id '${account?.id}' doesn't exist`);\n const accountComments = accountsComments[account.id] || [];\n assert(accountComments.length > 0, `accountsActions.deleteComment no comments for account`);\n\n let accountCommentIndex: number;\n if (typeof commentCidOrAccountCommentIndex === \"number\") {\n accountCommentIndex = commentCidOrAccountCommentIndex;\n } else {\n const mapping = commentCidsToAccountsComments[commentCidOrAccountCommentIndex];\n assert(\n mapping && mapping.accountId === account.id,\n `accountsActions.deleteComment cid '${commentCidOrAccountCommentIndex}' not found for account`,\n );\n accountCommentIndex = mapping.accountCommentIndex;\n }\n assert(\n accountCommentIndex >= 0 && accountCommentIndex < accountComments.length,\n `accountsActions.deleteComment index '${accountCommentIndex}' out of range`,\n );\n\n abandonAndStopPublishSession(account.id, accountCommentIndex);\n shiftPublishSessionIndicesAfterDelete(account.id, accountCommentIndex);\n\n const spliced = [...accountComments];\n spliced.splice(accountCommentIndex, 1);\n const reindexed = spliced.map((c, i) => ({ ...c, index: i, accountId: account.id }));\n const newAccountsComments = { ...accountsComments, [account.id]: reindexed };\n const newCommentCidsToAccountsComments = getCommentCidsToAccountsComments(newAccountsComments);\n\n accountsStore.setState(({ accountsCommentsIndexes }) => ({\n accountsComments: newAccountsComments,\n accountsCommentsIndexes: {\n ...accountsCommentsIndexes,\n [account.id]: getAccountCommentsIndex(reindexed),\n },\n commentCidsToAccountsComments: newCommentCidsToAccountsComments,\n }));\n\n await accountsDatabase.deleteAccountComment(account.id, accountCommentIndex);\n\n log(\"accountsActions.deleteComment\", { accountId: account.id, accountCommentIndex });\n};\n\nexport const publishVote = async (publishVoteOptions: PublishVoteOptions, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n validator.validateAccountsActionsPublishVoteArguments({\n publishVoteOptions,\n accountName,\n account,\n });\n\n let createVoteOptions: any = normalizePublicationOptionsForPkc(account.pkc, {\n timestamp: Math.floor(Date.now() / 1000),\n author: account.author,\n signer: account.signer,\n ...publishVoteOptions,\n });\n delete createVoteOptions.onChallenge;\n delete createVoteOptions.onChallengeVerification;\n delete createVoteOptions.onError;\n delete createVoteOptions.onPublishingStateChange;\n const storedCreateVoteOptions = normalizePublicationOptionsForStore(createVoteOptions);\n\n let vote = backfillPublicationCommunityAddress(\n await account.pkc.createVote(createVoteOptions),\n createVoteOptions,\n );\n let lastChallenge: Challenge | undefined;\n const publishAndRetryFailedChallengeVerification = async () => {\n vote.once(\"challenge\", async (challenge: Challenge) => {\n lastChallenge = challenge;\n publishVoteOptions.onChallenge(challenge, vote);\n });\n vote.once(\"challengeverification\", async (challengeVerification: ChallengeVerification) => {\n publishVoteOptions.onChallengeVerification(challengeVerification, vote);\n if (!challengeVerification.challengeSuccess && lastChallenge) {\n // publish again automatically on fail\n createVoteOptions = { ...createVoteOptions, timestamp: Math.floor(Date.now() / 1000) };\n vote = backfillPublicationCommunityAddress(\n await account.pkc.createVote(createVoteOptions),\n createVoteOptions,\n );\n lastChallenge = undefined;\n publishAndRetryFailedChallengeVerification();\n }\n });\n vote.on(\"error\", (error: Error) => publishVoteOptions.onError?.(error, vote));\n // TODO: add publishingState to account votes\n vote.on(\"publishingstatechange\", (publishingState: string) =>\n publishVoteOptions.onPublishingStateChange?.(publishingState),\n );\n listeners.push(vote);\n try {\n // publish will resolve after the challenge request\n // if it fails before, like failing to resolve ENS, we can emit the error\n await vote.publish();\n } catch (error) {\n publishVoteOptions.onError?.(error, vote);\n }\n };\n\n publishAndRetryFailedChallengeVerification();\n await accountsDatabase.addAccountVote(account.id, storedCreateVoteOptions);\n log(\"accountsActions.publishVote\", { createVoteOptions });\n accountsStore.setState(({ accountsVotes }) => ({\n accountsVotes: {\n ...accountsVotes,\n [account.id]: {\n ...accountsVotes[account.id],\n [storedCreateVoteOptions.commentCid]:\n // remove signer and author because not needed and they expose private key\n { ...storedCreateVoteOptions, signer: undefined, author: undefined },\n },\n },\n }));\n};\n\nexport const publishCommentEdit = async (\n publishCommentEditOptions: PublishCommentEditOptions,\n accountName?: string,\n) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n validator.validateAccountsActionsPublishCommentEditArguments({\n publishCommentEditOptions,\n accountName,\n account,\n });\n\n let createCommentEditOptions: any = normalizePublicationOptionsForPkc(account.pkc, {\n timestamp: Math.floor(Date.now() / 1000),\n author: account.author,\n signer: account.signer,\n ...publishCommentEditOptions,\n });\n delete createCommentEditOptions.onChallenge;\n delete createCommentEditOptions.onChallengeVerification;\n delete createCommentEditOptions.onError;\n delete createCommentEditOptions.onPublishingStateChange;\n const storedCreateCommentEditOptions = {\n ...normalizePublicationOptionsForStore(createCommentEditOptions),\n clientId: uuid(),\n };\n const storedCommentEdit = sanitizeStoredAccountEdit(storedCreateCommentEditOptions);\n\n let commentEdit = backfillPublicationCommunityAddress(\n await account.pkc.createCommentEdit(createCommentEditOptions),\n createCommentEditOptions,\n );\n let lastChallenge: Challenge | undefined;\n let challengeSucceeded = false;\n let rollbackPendingEditPromise: Promise<void> | undefined;\n const rollbackStoredCommentEdit = () => {\n if (!rollbackPendingEditPromise && !challengeSucceeded) {\n rollbackPendingEditPromise = Promise.all([\n accountsDatabase.deleteAccountEdit(account.id, storedCommentEdit),\n Promise.resolve(\n accountsStore.setState(({ accountsEdits, accountsEditsSummaries }) => {\n const nextState: any = removeStoredAccountEditSummaryFromState(\n accountsEditsSummaries,\n accountsEdits,\n account.id,\n storedCommentEdit,\n );\n Object.assign(\n nextState,\n removeStoredAccountEditFromState(accountsEdits, account.id, storedCommentEdit),\n );\n return nextState;\n }),\n ),\n ]).then(() => {});\n }\n return rollbackPendingEditPromise;\n };\n\n await accountsDatabase.addAccountEdit(account.id, storedCreateCommentEditOptions);\n log(\"accountsActions.publishCommentEdit\", { createCommentEditOptions });\n accountsStore.setState(({ accountsEdits, accountsEditsSummaries }) => {\n const nextState: any = addStoredAccountEditSummaryToState(\n accountsEditsSummaries,\n account.id,\n storedCommentEdit,\n );\n Object.assign(\n nextState,\n addStoredAccountEditToState(accountsEdits, account.id, storedCommentEdit),\n );\n return nextState;\n });\n\n const publishAndRetryFailedChallengeVerification = async () => {\n commentEdit.once(\"challenge\", async (challenge: Challenge) => {\n lastChallenge = challenge;\n publishCommentEditOptions.onChallenge(challenge, commentEdit);\n });\n commentEdit.once(\n \"challengeverification\",\n async (challengeVerification: ChallengeVerification) => {\n publishCommentEditOptions.onChallengeVerification(challengeVerification, commentEdit);\n if (challengeVerification.challengeSuccess) {\n challengeSucceeded = true;\n }\n if (hasTerminalChallengeVerificationError(challengeVerification)) {\n lastChallenge = undefined;\n await rollbackStoredCommentEdit();\n return;\n }\n if (!challengeVerification.challengeSuccess && lastChallenge) {\n // publish again automatically on fail\n createCommentEditOptions = {\n ...createCommentEditOptions,\n timestamp: Math.floor(Date.now() / 1000),\n };\n commentEdit = backfillPublicationCommunityAddress(\n await account.pkc.createCommentEdit(createCommentEditOptions),\n createCommentEditOptions,\n );\n lastChallenge = undefined;\n publishAndRetryFailedChallengeVerification();\n }\n },\n );\n commentEdit.on(\"error\", async (error: Error) => {\n await rollbackStoredCommentEdit();\n publishCommentEditOptions.onError?.(error, commentEdit);\n });\n // TODO: add publishingState to account edits\n commentEdit.on(\"publishingstatechange\", (publishingState: string) =>\n publishCommentEditOptions.onPublishingStateChange?.(publishingState),\n );\n listeners.push(commentEdit);\n try {\n // publish will resolve after the challenge request\n // if it fails before, like failing to resolve ENS, we can emit the error\n await commentEdit.publish();\n } catch (error) {\n await rollbackStoredCommentEdit();\n publishCommentEditOptions.onError?.(error, commentEdit);\n }\n };\n\n publishAndRetryFailedChallengeVerification();\n};\n\nexport const publishCommentModeration = async (\n publishCommentModerationOptions: PublishCommentModerationOptions,\n accountName?: string,\n) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n validator.validateAccountsActionsPublishCommentModerationArguments({\n publishCommentModerationOptions,\n accountName,\n account,\n });\n\n let createCommentModerationOptions: any = normalizePublicationOptionsForPkc(account.pkc, {\n timestamp: Math.floor(Date.now() / 1000),\n author: account.author,\n signer: account.signer,\n ...publishCommentModerationOptions,\n });\n delete createCommentModerationOptions.onChallenge;\n delete createCommentModerationOptions.onChallengeVerification;\n delete createCommentModerationOptions.onError;\n delete createCommentModerationOptions.onPublishingStateChange;\n const storedCreateCommentModerationOptions = {\n ...normalizePublicationOptionsForStore(createCommentModerationOptions),\n clientId: uuid(),\n };\n const storedCommentModeration = sanitizeStoredAccountEdit(storedCreateCommentModerationOptions);\n\n let commentModeration = backfillPublicationCommunityAddress(\n await account.pkc.createCommentModeration(createCommentModerationOptions),\n createCommentModerationOptions,\n );\n let lastChallenge: Challenge | undefined;\n let challengeSucceeded = false;\n let storedCommentModerationAdded = false;\n let rollbackStoredCommentModerationRequested = false;\n let rollbackPendingEditPromise: Promise<void> | undefined;\n const rollbackStoredCommentModeration = () => {\n rollbackStoredCommentModerationRequested = true;\n if (!storedCommentModerationAdded) {\n return Promise.resolve();\n }\n if (!rollbackPendingEditPromise && !challengeSucceeded) {\n rollbackPendingEditPromise = Promise.all([\n accountsDatabase.deleteAccountEdit(account.id, storedCommentModeration),\n Promise.resolve(\n accountsStore.setState(({ accountsEdits, accountsEditsSummaries }) => {\n const nextState: any = removeStoredAccountEditSummaryFromState(\n accountsEditsSummaries,\n accountsEdits,\n account.id,\n storedCommentModeration,\n );\n Object.assign(\n nextState,\n removeStoredAccountEditFromState(accountsEdits, account.id, storedCommentModeration),\n );\n return nextState;\n }),\n ),\n ]).then(() => {});\n }\n return rollbackPendingEditPromise || Promise.resolve();\n };\n\n const publishAndRetryFailedChallengeVerification = async () => {\n commentModeration.once(\"challenge\", async (challenge: Challenge) => {\n lastChallenge = challenge;\n publishCommentModerationOptions.onChallenge(challenge, commentModeration);\n });\n commentModeration.once(\n \"challengeverification\",\n async (challengeVerification: ChallengeVerification) => {\n publishCommentModerationOptions.onChallengeVerification(\n challengeVerification,\n commentModeration,\n );\n if (challengeVerification.challengeSuccess) {\n challengeSucceeded = true;\n }\n if (hasTerminalChallengeVerificationError(challengeVerification)) {\n lastChallenge = undefined;\n await rollbackStoredCommentModeration();\n return;\n }\n if (!challengeVerification.challengeSuccess && lastChallenge) {\n // publish again automatically on fail\n createCommentModerationOptions = {\n ...createCommentModerationOptions,\n timestamp: Math.floor(Date.now() / 1000),\n };\n commentModeration = backfillPublicationCommunityAddress(\n await account.pkc.createCommentModeration(createCommentModerationOptions),\n createCommentModerationOptions,\n );\n lastChallenge = undefined;\n publishAndRetryFailedChallengeVerification();\n }\n },\n );\n commentModeration.on(\"error\", async (error: Error) => {\n await rollbackStoredCommentModeration();\n publishCommentModerationOptions.onError?.(error, commentModeration);\n });\n // TODO: add publishingState to account edits\n commentModeration.on(\"publishingstatechange\", (publishingState: string) =>\n publishCommentModerationOptions.onPublishingStateChange?.(publishingState),\n );\n listeners.push(commentModeration);\n try {\n // publish will resolve after the challenge request\n // if it fails before, like failing to resolve ENS, we can emit the error\n await commentModeration.publish();\n } catch (error) {\n await rollbackStoredCommentModeration();\n publishCommentModerationOptions.onError?.(error, commentModeration);\n }\n };\n\n publishAndRetryFailedChallengeVerification();\n\n await accountsDatabase.addAccountEdit(account.id, storedCreateCommentModerationOptions);\n log(\"accountsActions.publishCommentModeration\", { createCommentModerationOptions });\n accountsStore.setState(({ accountsEdits, accountsEditsSummaries }) => {\n const nextState: any = addStoredAccountEditSummaryToState(\n accountsEditsSummaries,\n account.id,\n storedCommentModeration,\n );\n Object.assign(\n nextState,\n addStoredAccountEditToState(accountsEdits, account.id, storedCommentModeration),\n );\n return nextState;\n });\n storedCommentModerationAdded = true;\n if (rollbackStoredCommentModerationRequested) {\n await rollbackStoredCommentModeration();\n }\n};\n\nexport const publishCommunityEdit = async (\n communityAddress: string,\n publishCommunityEditOptions: PublishCommunityEditOptions,\n accountName?: string,\n) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n validator.validateAccountsActionsPublishCommunityEditArguments({\n communityAddress,\n publishCommunityEditOptions,\n accountName,\n account,\n });\n\n const communityEditOptions = { ...publishCommunityEditOptions };\n delete communityEditOptions.onChallenge;\n delete communityEditOptions.onChallengeVerification;\n delete communityEditOptions.onError;\n delete communityEditOptions.onPublishingStateChange;\n let createCommunityEditOptions: any = normalizeCommunityEditOptionsForPkc(account.pkc, {\n timestamp: Math.floor(Date.now() / 1000),\n author: account.author,\n signer: account.signer,\n // not possible to edit community.address over pubsub, only locally\n communityAddress,\n communityEdit: communityEditOptions,\n });\n const storedCreateCommunityEditOptions = {\n ...normalizePublicationOptionsForStore(createCommunityEditOptions),\n clientId: uuid(),\n };\n const storedCommunityEdit = sanitizeStoredAccountEdit(storedCreateCommunityEditOptions);\n let challengeSucceeded = false;\n let rollbackPendingEditPromise: Promise<void> | undefined;\n const rollbackStoredCommunityEdit = () => {\n if (!rollbackPendingEditPromise && !challengeSucceeded) {\n rollbackPendingEditPromise = Promise.all([\n accountsDatabase.deleteAccountEdit(account.id, storedCommunityEdit),\n Promise.resolve(\n accountsStore.setState(({ accountsEdits, accountsEditsSummaries }) => {\n const nextState: any = removeStoredAccountEditSummaryFromState(\n accountsEditsSummaries,\n accountsEdits,\n account.id,\n storedCommunityEdit,\n );\n Object.assign(\n nextState,\n removeStoredAccountEditFromState(accountsEdits, account.id, storedCommunityEdit),\n );\n return nextState;\n }),\n ),\n ]).then(() => {});\n }\n return rollbackPendingEditPromise;\n };\n const storePublishedCommunityEdit = async () => {\n await accountsDatabase.addAccountEdit(account.id, storedCreateCommunityEditOptions);\n accountsStore.setState(({ accountsEdits, accountsEditsSummaries }) => {\n const nextState: any = addStoredAccountEditSummaryToState(\n accountsEditsSummaries,\n account.id,\n storedCommunityEdit,\n );\n Object.assign(\n nextState,\n addStoredAccountEditToState(accountsEdits, account.id, storedCommunityEdit),\n );\n return nextState;\n });\n };\n\n // account is the owner of the community and can edit it locally, no need to publish\n if (accountOwnsCommunityLocally(account, communityAddress)) {\n await communitiesStore\n .getState()\n .editCommunity(communityAddress, communityEditOptions, account);\n await storePublishedCommunityEdit();\n // create fake success challenge verification for consistent behavior with remote community edit\n publishCommunityEditOptions.onChallengeVerification({ challengeSuccess: true });\n publishCommunityEditOptions.onPublishingStateChange?.(\"succeeded\");\n return;\n }\n\n assert(\n !publishCommunityEditOptions.address ||\n publishCommunityEditOptions.address === communityAddress,\n `accountsActions.publishCommunityEdit can't edit address of a remote community`,\n );\n let communityEdit = backfillPublicationCommunityAddress(\n await createPkcCommunityEdit(account.pkc, createCommunityEditOptions),\n createCommunityEditOptions,\n );\n let lastChallenge: Challenge | undefined;\n const publishAndRetryFailedChallengeVerification = async () => {\n communityEdit.once(\"challenge\", async (challenge: Challenge) => {\n lastChallenge = challenge;\n publishCommunityEditOptions.onChallenge(challenge, communityEdit);\n });\n communityEdit.once(\n \"challengeverification\",\n async (challengeVerification: ChallengeVerification) => {\n publishCommunityEditOptions.onChallengeVerification(challengeVerification, communityEdit);\n if (challengeVerification.challengeSuccess) {\n challengeSucceeded = true;\n }\n if (hasTerminalChallengeVerificationError(challengeVerification)) {\n lastChallenge = undefined;\n await rollbackStoredCommunityEdit();\n return;\n }\n if (!challengeVerification.challengeSuccess && lastChallenge) {\n // publish again automatically on fail\n createCommunityEditOptions = {\n ...createCommunityEditOptions,\n timestamp: Math.floor(Date.now() / 1000),\n };\n communityEdit = backfillPublicationCommunityAddress(\n await createPkcCommunityEdit(account.pkc, createCommunityEditOptions),\n createCommunityEditOptions,\n );\n lastChallenge = undefined;\n publishAndRetryFailedChallengeVerification();\n }\n },\n );\n communityEdit.on(\"error\", async (error: Error) => {\n await rollbackStoredCommunityEdit();\n publishCommunityEditOptions.onError?.(error, communityEdit);\n });\n // TODO: add publishingState to account edits\n communityEdit.on(\"publishingstatechange\", (publishingState: string) =>\n publishCommunityEditOptions.onPublishingStateChange?.(publishingState),\n );\n listeners.push(communityEdit);\n try {\n // publish will resolve after the challenge request\n // if it fails before, like failing to resolve ENS, we can emit the error\n await communityEdit.publish();\n } catch (error) {\n await rollbackStoredCommunityEdit();\n publishCommunityEditOptions.onError?.(error, communityEdit);\n }\n };\n\n await storePublishedCommunityEdit();\n publishAndRetryFailedChallengeVerification();\n log(\"accountsActions.publishCommunityEdit\", { createCommunityEditOptions });\n};\n\nexport const createCommunity = async (\n createCommunityOptions: CreateCommunityOptions,\n accountName?: string,\n) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountsActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n\n const community = await communitiesStore\n .getState()\n .createCommunity(createCommunityOptions, account);\n log(\"accountsActions.createCommunity\", { createCommunityOptions, community });\n return community;\n};\n\nexport const deleteCommunity = async (communityAddress: string, accountName?: string) => {\n const { accounts, accountNamesToAccountIds, activeAccountId } = accountsStore.getState();\n assert(\n accounts && accountNamesToAccountIds && activeAccountId,\n `can't use accountsStore.accountsActions before initialized`,\n );\n let account = accounts[activeAccountId];\n if (accountName) {\n const accountId = accountNamesToAccountIds[accountName];\n account = accounts[accountId];\n }\n\n await communitiesStore.getState().deleteCommunity(communityAddress, account);\n log(\"accountsActions.deleteCommunity\", { communityAddress });\n};\n"]}
@@ -0,0 +1,34 @@
1
+ import { Accounts, CreateCommentOptions, Account, Comment, AccountsComments, AccountCommentReply, AccountsCommentsReplies, AccountEditsSummary } from "../../types.js";
2
+ declare const database: {
3
+ accountsDatabase: LocalForage;
4
+ accountsMetadataDatabase: LocalForage;
5
+ getAccountsVotes: (accountIds: string[]) => Promise<any>;
6
+ getAccountVotes: (accountId: string) => Promise<any>;
7
+ addAccountVote: (accountId: string, createVoteOptions: CreateCommentOptions) => Promise<void>;
8
+ getAccountsComments: (accountIds: string[]) => Promise<AccountsComments>;
9
+ getAccountComments: (accountId: string) => Promise<any[]>;
10
+ addAccountComment: (accountId: string, comment: CreateCommentOptions | Comment, accountCommentIndex?: number) => Promise<void>;
11
+ deleteAccountComment: (accountId: string, accountCommentIndex: number) => Promise<void>;
12
+ addAccount: (account: Account) => Promise<void>;
13
+ removeAccount: (account: Account) => Promise<void>;
14
+ getExportedAccountJson: (accountId: string) => Promise<string>;
15
+ getAccounts: (accountIds: string[]) => Promise<Accounts>;
16
+ getAccount: (accountId: string) => Promise<Account>;
17
+ addAccountCommentReply: (accountId: string, reply: AccountCommentReply) => Promise<void>;
18
+ getAccountCommentsReplies: (accountId: string) => Promise<{}>;
19
+ getAccountsCommentsReplies: (accountIds: string[]) => Promise<AccountsCommentsReplies>;
20
+ getAccountsEdits: (accountIds: string[]) => Promise<any>;
21
+ getAccountEdits: (accountId: string) => Promise<any>;
22
+ getAccountsEditsSummaries: (accountIds: string[]) => Promise<{
23
+ [k: string]: AccountEditsSummary;
24
+ }>;
25
+ getAccountEditsSummary: (accountId: string) => Promise<AccountEditsSummary>;
26
+ addAccountEdit: (accountId: string, createEditOptions: CreateCommentOptions) => Promise<void>;
27
+ deleteAccountEdit: (accountId: string, editToDelete: CreateCommentOptions) => Promise<boolean>;
28
+ accountVersion: number;
29
+ migrate: () => Promise<void>;
30
+ getAccountsDatabaseName: (databaseName: string) => string;
31
+ getPerAccountDatabaseName: (databaseName: string, accountId: string) => string;
32
+ };
33
+ export default database;
34
+ //# sourceMappingURL=accounts-database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts-database.d.ts","sourceRoot":"","sources":["../../../src/stores/accounts/accounts-database.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,QAAQ,EAER,oBAAoB,EACpB,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EAEvB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAqyBrB,QAAA,MAAM,QAAQ;;;mCAxO8B,MAAM,EAAE;iCAjBV,MAAM;gCAtBP,MAAM,qBAAqB,oBAAoB;sCAvDzC,MAAM,EAAE;oCAtBV,MAAM;mCA1BtC,MAAM,WACR,oBAAoB,GAAG,OAAO,wBACjB,MAAM;sCAvBiB,MAAM,uBAAuB,MAAM;0BA/J/C,OAAO;6BA+DJ,OAAO;wCAxII,MAAM;8BA3FhB,MAAM,EAAE;4BAsFV,MAAM;wCAgbM,MAAM,SAAS,mBAAmB;2CAK/B,MAAM;6CAWJ,MAAM,EAAE;mCA0JlB,MAAM,EAAE;iCAzBV,MAAM;4CA0CK,MAAM,EAAE;;;wCAvBZ,MAAM,KAAG,OAAO,CAAC,mBAAmB,CAAC;gCAxE7C,MAAM,qBAAqB,oBAAoB;mCAsB5C,MAAM,gBAAgB,oBAAoB;;;4CA9rBvC,MAAM;8CAEJ,MAAM,aAAa,MAAM;CA8yBzE,CAAC;AAEF,eAAe,QAAQ,CAAC"}