@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.
- package/LICENSE +674 -0
- package/README.md +1365 -0
- package/dist/hooks/accounts/accounts.d.ts +64 -0
- package/dist/hooks/accounts/accounts.d.ts.map +1 -0
- package/dist/hooks/accounts/accounts.js +706 -0
- package/dist/hooks/accounts/accounts.js.map +1 -0
- package/dist/hooks/accounts/index.d.ts +2 -0
- package/dist/hooks/accounts/index.d.ts.map +1 -0
- package/dist/hooks/accounts/index.js +2 -0
- package/dist/hooks/accounts/index.js.map +1 -0
- package/dist/hooks/accounts/utils.d.ts +6 -0
- package/dist/hooks/accounts/utils.d.ts.map +1 -0
- package/dist/hooks/accounts/utils.js +226 -0
- package/dist/hooks/accounts/utils.js.map +1 -0
- package/dist/hooks/actions/actions.d.ts +19 -0
- package/dist/hooks/actions/actions.d.ts.map +1 -0
- package/dist/hooks/actions/actions.js +552 -0
- package/dist/hooks/actions/actions.js.map +1 -0
- package/dist/hooks/actions/index.d.ts +2 -0
- package/dist/hooks/actions/index.d.ts.map +1 -0
- package/dist/hooks/actions/index.js +2 -0
- package/dist/hooks/actions/index.js.map +1 -0
- package/dist/hooks/authors/author-avatars.d.ts +28 -0
- package/dist/hooks/authors/author-avatars.d.ts.map +1 -0
- package/dist/hooks/authors/author-avatars.js +191 -0
- package/dist/hooks/authors/author-avatars.js.map +1 -0
- package/dist/hooks/authors/authors.d.ts +37 -0
- package/dist/hooks/authors/authors.d.ts.map +1 -0
- package/dist/hooks/authors/authors.js +509 -0
- package/dist/hooks/authors/authors.js.map +1 -0
- package/dist/hooks/authors/index.d.ts +2 -0
- package/dist/hooks/authors/index.d.ts.map +1 -0
- package/dist/hooks/authors/index.js +2 -0
- package/dist/hooks/authors/index.js.map +1 -0
- package/dist/hooks/authors/utils.d.ts +4 -0
- package/dist/hooks/authors/utils.d.ts.map +1 -0
- package/dist/hooks/authors/utils.js +21 -0
- package/dist/hooks/authors/utils.js.map +1 -0
- package/dist/hooks/comments.d.ts +17 -0
- package/dist/hooks/comments.d.ts.map +1 -0
- package/dist/hooks/comments.js +351 -0
- package/dist/hooks/comments.js.map +1 -0
- package/dist/hooks/communities.d.ts +31 -0
- package/dist/hooks/communities.d.ts.map +1 -0
- package/dist/hooks/communities.js +389 -0
- package/dist/hooks/communities.js.map +1 -0
- package/dist/hooks/feeds/feeds.d.ts +18 -0
- package/dist/hooks/feeds/feeds.d.ts.map +1 -0
- package/dist/hooks/feeds/feeds.js +315 -0
- package/dist/hooks/feeds/feeds.js.map +1 -0
- package/dist/hooks/feeds/index.d.ts +2 -0
- package/dist/hooks/feeds/index.d.ts.map +1 -0
- package/dist/hooks/feeds/index.js +2 -0
- package/dist/hooks/feeds/index.js.map +1 -0
- package/dist/hooks/pkc-rpc.d.ts +7 -0
- package/dist/hooks/pkc-rpc.d.ts.map +1 -0
- package/dist/hooks/pkc-rpc.js +88 -0
- package/dist/hooks/pkc-rpc.js.map +1 -0
- package/dist/hooks/replies.d.ts +5 -0
- package/dist/hooks/replies.d.ts.map +1 -0
- package/dist/hooks/replies.js +155 -0
- package/dist/hooks/replies.js.map +1 -0
- package/dist/hooks/states.d.ts +15 -0
- package/dist/hooks/states.d.ts.map +1 -0
- package/dist/hooks/states.js +213 -0
- package/dist/hooks/states.js.map +1 -0
- package/dist/hooks/utils/use-interval.d.ts +3 -0
- package/dist/hooks/utils/use-interval.d.ts.map +1 -0
- package/dist/hooks/utils/use-interval.js +36 -0
- package/dist/hooks/utils/use-interval.js.map +1 -0
- package/dist/hooks/utils/use-previous.d.ts +1 -0
- package/dist/hooks/utils/use-previous.js +10 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/chain/chain.d.ts +36 -0
- package/dist/lib/chain/chain.d.ts.map +1 -0
- package/dist/lib/chain/chain.js +195 -0
- package/dist/lib/chain/chain.js.map +1 -0
- package/dist/lib/chain/index.d.ts +4 -0
- package/dist/lib/chain/index.d.ts.map +1 -0
- package/dist/lib/chain/index.js +4 -0
- package/dist/lib/chain/index.js.map +1 -0
- package/dist/lib/community-address.d.ts +6 -0
- package/dist/lib/community-address.d.ts.map +1 -0
- package/dist/lib/community-address.js +26 -0
- package/dist/lib/community-address.js.map +1 -0
- package/dist/lib/community-ref.d.ts +23 -0
- package/dist/lib/community-ref.d.ts.map +1 -0
- package/dist/lib/community-ref.js +113 -0
- package/dist/lib/community-ref.js.map +1 -0
- package/dist/lib/debug-utils.d.ts +9 -0
- package/dist/lib/debug-utils.d.ts.map +1 -0
- package/dist/lib/debug-utils.js +21 -0
- package/dist/lib/debug-utils.js.map +1 -0
- package/dist/lib/feed-sort-type.d.ts +2 -0
- package/dist/lib/feed-sort-type.d.ts.map +1 -0
- package/dist/lib/feed-sort-type.js +22 -0
- package/dist/lib/feed-sort-type.js.map +1 -0
- package/dist/lib/localforage-lru/index.d.ts +3 -0
- package/dist/lib/localforage-lru/index.d.ts.map +1 -0
- package/dist/lib/localforage-lru/index.js +46 -0
- package/dist/lib/localforage-lru/index.js.map +1 -0
- package/dist/lib/localforage-lru/localforage-lru.d.ts +6 -0
- package/dist/lib/localforage-lru/localforage-lru.d.ts.map +1 -0
- package/dist/lib/localforage-lru/localforage-lru.js +182 -0
- package/dist/lib/localforage-lru/localforage-lru.js.map +1 -0
- package/dist/lib/pkc-compat.d.ts +25 -0
- package/dist/lib/pkc-compat.d.ts.map +1 -0
- package/dist/lib/pkc-compat.js +131 -0
- package/dist/lib/pkc-compat.js.map +1 -0
- package/dist/lib/pkc-js/fixtures/markdown-example.d.ts +3 -0
- package/dist/lib/pkc-js/fixtures/markdown-example.d.ts.map +1 -0
- package/dist/lib/pkc-js/fixtures/markdown-example.js +280 -0
- package/dist/lib/pkc-js/fixtures/markdown-example.js.map +1 -0
- package/dist/lib/pkc-js/index.d.ts +11 -0
- package/dist/lib/pkc-js/index.d.ts.map +1 -0
- package/dist/lib/pkc-js/index.js +85 -0
- package/dist/lib/pkc-js/index.js.map +1 -0
- package/dist/lib/pkc-js/pkc-js-mock-content.d.ts +3 -0
- package/dist/lib/pkc-js/pkc-js-mock-content.d.ts.map +1 -0
- package/dist/lib/pkc-js/pkc-js-mock-content.js +1235 -0
- package/dist/lib/pkc-js/pkc-js-mock-content.js.map +1 -0
- package/dist/lib/pkc-js/pkc-js-mock.d.ts +137 -0
- package/dist/lib/pkc-js/pkc-js-mock.d.ts.map +1 -0
- package/dist/lib/pkc-js/pkc-js-mock.js +644 -0
- package/dist/lib/pkc-js/pkc-js-mock.js.map +1 -0
- package/dist/lib/polyfill.d.ts +3 -0
- package/dist/lib/polyfill.d.ts.map +1 -0
- package/dist/lib/polyfill.js +14 -0
- package/dist/lib/polyfill.js.map +1 -0
- package/dist/lib/protocol-compat.d.ts +14 -0
- package/dist/lib/protocol-compat.d.ts.map +1 -0
- package/dist/lib/protocol-compat.js +67 -0
- package/dist/lib/protocol-compat.js.map +1 -0
- package/dist/lib/test-utils.d.ts +29 -0
- package/dist/lib/test-utils.d.ts.map +1 -0
- package/dist/lib/test-utils.js +184 -0
- package/dist/lib/test-utils.js.map +1 -0
- package/dist/lib/utils/comment-moderation.d.ts +4 -0
- package/dist/lib/utils/comment-moderation.d.ts.map +1 -0
- package/dist/lib/utils/comment-moderation.js +56 -0
- package/dist/lib/utils/comment-moderation.js.map +1 -0
- package/dist/lib/utils/index.d.ts +4 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +4 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/utils.d.ts +23 -0
- package/dist/lib/utils/utils.d.ts.map +1 -0
- package/dist/lib/utils/utils.js +375 -0
- package/dist/lib/utils/utils.js.map +1 -0
- package/dist/lib/validator.d.ts +30 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +307 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/stores/accounts/account-generator.d.ts +51 -0
- package/dist/stores/accounts/account-generator.d.ts.map +1 -0
- package/dist/stores/accounts/account-generator.js +160 -0
- package/dist/stores/accounts/account-generator.js.map +1 -0
- package/dist/stores/accounts/accounts-actions-internal.d.ts +8 -0
- package/dist/stores/accounts/accounts-actions-internal.d.ts.map +1 -0
- package/dist/stores/accounts/accounts-actions-internal.js +403 -0
- package/dist/stores/accounts/accounts-actions-internal.js.map +1 -0
- package/dist/stores/accounts/accounts-actions.d.ts +46 -0
- package/dist/stores/accounts/accounts-actions.d.ts.map +1 -0
- package/dist/stores/accounts/accounts-actions.js +1341 -0
- package/dist/stores/accounts/accounts-actions.js.map +1 -0
- package/dist/stores/accounts/accounts-database.d.ts +34 -0
- package/dist/stores/accounts/accounts-database.d.ts.map +1 -0
- package/dist/stores/accounts/accounts-database.js +685 -0
- package/dist/stores/accounts/accounts-database.js.map +1 -0
- package/dist/stores/accounts/accounts-store.d.ts +32 -0
- package/dist/stores/accounts/accounts-store.d.ts.map +1 -0
- package/dist/stores/accounts/accounts-store.js +169 -0
- package/dist/stores/accounts/accounts-store.js.map +1 -0
- package/dist/stores/accounts/index.d.ts +4 -0
- package/dist/stores/accounts/index.d.ts.map +1 -0
- package/dist/stores/accounts/index.js +4 -0
- package/dist/stores/accounts/index.js.map +1 -0
- package/dist/stores/accounts/utils.d.ts +49 -0
- package/dist/stores/accounts/utils.d.ts.map +1 -0
- package/dist/stores/accounts/utils.js +419 -0
- package/dist/stores/accounts/utils.js.map +1 -0
- package/dist/stores/authors-comments/authors-comments-store.d.ts +37 -0
- package/dist/stores/authors-comments/authors-comments-store.d.ts.map +1 -0
- package/dist/stores/authors-comments/authors-comments-store.js +338 -0
- package/dist/stores/authors-comments/authors-comments-store.js.map +1 -0
- package/dist/stores/authors-comments/index.d.ts +4 -0
- package/dist/stores/authors-comments/index.d.ts.map +1 -0
- package/dist/stores/authors-comments/index.js +4 -0
- package/dist/stores/authors-comments/index.js.map +1 -0
- package/dist/stores/authors-comments/utils.d.ts +14 -0
- package/dist/stores/authors-comments/utils.d.ts.map +1 -0
- package/dist/stores/authors-comments/utils.js +81 -0
- package/dist/stores/authors-comments/utils.js.map +1 -0
- package/dist/stores/comments/comments-store.d.ts +19 -0
- package/dist/stores/comments/comments-store.d.ts.map +1 -0
- package/dist/stores/comments/comments-store.js +385 -0
- package/dist/stores/comments/comments-store.js.map +1 -0
- package/dist/stores/comments/index.d.ts +4 -0
- package/dist/stores/comments/index.d.ts.map +1 -0
- package/dist/stores/comments/index.js +4 -0
- package/dist/stores/comments/index.js.map +1 -0
- package/dist/stores/communities/communities-store.d.ts +17 -0
- package/dist/stores/communities/communities-store.d.ts.map +1 -0
- package/dist/stores/communities/communities-store.js +304 -0
- package/dist/stores/communities/communities-store.js.map +1 -0
- package/dist/stores/communities/index.d.ts +4 -0
- package/dist/stores/communities/index.d.ts.map +1 -0
- package/dist/stores/communities/index.js +4 -0
- package/dist/stores/communities/index.js.map +1 -0
- package/dist/stores/communities-pages/communities-pages-store.d.ts +23 -0
- package/dist/stores/communities-pages/communities-pages-store.d.ts.map +1 -0
- package/dist/stores/communities-pages/communities-pages-store.js +316 -0
- package/dist/stores/communities-pages/communities-pages-store.js.map +1 -0
- package/dist/stores/communities-pages/index.d.ts +4 -0
- package/dist/stores/communities-pages/index.d.ts.map +1 -0
- package/dist/stores/communities-pages/index.js +4 -0
- package/dist/stores/communities-pages/index.js.map +1 -0
- package/dist/stores/feeds/feed-sorter.d.ts +5 -0
- package/dist/stores/feeds/feed-sorter.d.ts.map +1 -0
- package/dist/stores/feeds/feed-sorter.js +135 -0
- package/dist/stores/feeds/feed-sorter.js.map +1 -0
- package/dist/stores/feeds/feeds-store.d.ts +25 -0
- package/dist/stores/feeds/feeds-store.d.ts.map +1 -0
- package/dist/stores/feeds/feeds-store.js +459 -0
- package/dist/stores/feeds/feeds-store.js.map +1 -0
- package/dist/stores/feeds/index.d.ts +4 -0
- package/dist/stores/feeds/index.d.ts.map +1 -0
- package/dist/stores/feeds/index.js +4 -0
- package/dist/stores/feeds/index.js.map +1 -0
- package/dist/stores/feeds/utils.d.ts +43 -0
- package/dist/stores/feeds/utils.d.ts.map +1 -0
- package/dist/stores/feeds/utils.js +736 -0
- package/dist/stores/feeds/utils.js.map +1 -0
- package/dist/stores/replies/index.d.ts +4 -0
- package/dist/stores/replies/index.d.ts.map +1 -0
- package/dist/stores/replies/index.js +4 -0
- package/dist/stores/replies/index.js.map +1 -0
- package/dist/stores/replies/replies-comments-store.d.ts +8 -0
- package/dist/stores/replies/replies-comments-store.d.ts.map +1 -0
- package/dist/stores/replies/replies-comments-store.js +23 -0
- package/dist/stores/replies/replies-comments-store.js.map +1 -0
- package/dist/stores/replies/replies-store.d.ts +29 -0
- package/dist/stores/replies/replies-store.d.ts.map +1 -0
- package/dist/stores/replies/replies-store.js +413 -0
- package/dist/stores/replies/replies-store.js.map +1 -0
- package/dist/stores/replies/utils.d.ts +25 -0
- package/dist/stores/replies/utils.d.ts.map +1 -0
- package/dist/stores/replies/utils.js +549 -0
- package/dist/stores/replies/utils.js.map +1 -0
- package/dist/stores/replies-pages/index.d.ts +4 -0
- package/dist/stores/replies-pages/index.d.ts.map +1 -0
- package/dist/stores/replies-pages/index.js +4 -0
- package/dist/stores/replies-pages/index.js.map +1 -0
- package/dist/stores/replies-pages/replies-pages-store.d.ts +20 -0
- package/dist/stores/replies-pages/replies-pages-store.d.ts.map +1 -0
- package/dist/stores/replies-pages/replies-pages-store.js +270 -0
- package/dist/stores/replies-pages/replies-pages-store.js.map +1 -0
- package/dist/stores/replies-pages/utils.d.ts +3 -0
- package/dist/stores/replies-pages/utils.d.ts.map +1 -0
- package/dist/stores/replies-pages/utils.js +43 -0
- package/dist/stores/replies-pages/utils.js.map +1 -0
- package/dist/types.d.ts +638 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +160 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts-database.js","sourceRoot":"","sources":["../../../src/stores/accounts/accounts-database.ts"],"names":[],"mappings":"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","sourcesContent":["import PkcJs from \"../../lib/pkc-js\";\nimport validator from \"../../lib/validator\";\nimport chain from \"../../lib/chain\";\nimport assert from \"assert\";\nimport localForage from \"localforage\";\nimport isEqual from \"lodash.isequal\";\nimport localForageLru from \"../../lib/localforage-lru\";\nimport {\n Accounts,\n AccountNamesToAccountIds,\n CreateCommentOptions,\n Account,\n Comment,\n AccountsComments,\n AccountCommentReply,\n AccountsCommentsReplies,\n AccountEdit,\n AccountEditsSummary,\n} from \"../../types\";\nimport utils from \"../../lib/utils\";\nimport {\n getDefaultChainProviders,\n getDefaultPkcOptions,\n overwritePkcOptions,\n} from \"./account-generator\";\nimport { getAccountsEditsSummary, sanitizeStoredAccountComment } from \"./utils\";\nimport {\n getPkcClientOptions,\n normalizeAccountProtocolConfig,\n withProtocolAliases,\n} from \"../../lib/pkc-compat\";\nimport Logger from \"@pkcprotocol/pkc-logger\";\nconst log = Logger(\"bitsocial-react-hooks:accounts:stores\");\n// Storage keeps the existing namespace so current installs reuse the same IndexedDB data.\nconst accountsDatabaseNamespace = \"bitsocialReactHooks\";\nconst getAccountsDatabaseName = (databaseName: string) =>\n `${accountsDatabaseNamespace}-${databaseName}`;\nconst getPerAccountDatabaseName = (databaseName: string, accountId: string) =>\n `${getAccountsDatabaseName(databaseName)}-${accountId}`;\nconst accountsDatabase = localForage.createInstance({ name: getAccountsDatabaseName(\"accounts\") });\nconst accountsMetadataDatabase = localForage.createInstance({\n name: getAccountsDatabaseName(\"accountsMetadata\"),\n});\nconst storageVersionKey = \"__storageVersion\";\nconst votesLatestIndexKey = \"__commentCidToLatestIndex\";\nconst editsTargetToIndicesKey = \"__targetToIndices\";\nconst editsSummaryKey = \"__summary\";\nconst commentStorageVersion = 2;\nconst voteStorageVersion = 1;\nconst editStorageVersion = 1;\n\n// TODO: remove this eventually after everyone has migrated\n// migrate to name with safe prefix\nconst migrate = async () => {\n const previousAccountsDatabase = localForage.createInstance({ name: \"accounts\" });\n const previousAccountsMetadataDatabase = localForage.createInstance({ name: \"accountsMetadata\" });\n // no previous db to migrate\n if (!(await previousAccountsMetadataDatabase.getItem(\"activeAccountId\"))) {\n return;\n }\n // db already migrated\n if (await accountsMetadataDatabase.getItem(\"activeAccountId\")) {\n return;\n }\n // migrate\n const promises = [];\n for (const key of await previousAccountsDatabase.keys()) {\n promises.push(\n previousAccountsDatabase.getItem(key).then((value) => accountsDatabase.setItem(key, value)),\n );\n }\n for (const key of await previousAccountsMetadataDatabase.keys()) {\n promises.push(\n previousAccountsMetadataDatabase\n .getItem(key)\n .then((value) => accountsMetadataDatabase.setItem(key, value)),\n );\n }\n const accountIds = await previousAccountsMetadataDatabase.getItem(\"accountIds\");\n if (Array.isArray(accountIds)) {\n const databaseNames = [\n \"accountComments\",\n \"accountVotes\",\n \"accountCommentsReplies\",\n \"accountEdits\",\n ];\n for (const databaseName of databaseNames) {\n for (const accountId of accountIds) {\n const previousDatabase = localForage.createInstance({\n name: `${databaseName}-${accountId}`,\n });\n const database = localForage.createInstance({\n name: getPerAccountDatabaseName(databaseName, accountId),\n });\n for (const key of await previousDatabase.keys()) {\n promises.push(\n previousDatabase.getItem(key).then((value) => database.setItem(key, value)),\n );\n }\n }\n }\n }\n await Promise.all(promises);\n};\n\nconst getAccounts = async (accountIds: string[]) => {\n validator.validateAccountsDatabaseGetAccountsArguments(accountIds);\n const accounts: Accounts = {};\n const promises = [];\n for (const accountId of accountIds) {\n promises.push(accountsDatabase.getItem(accountId));\n }\n const accountsArray: any = await Promise.all(promises);\n for (const [i, accountId] of accountIds.entries()) {\n assert(accountsArray[i], `accountId '${accountId}' not found in database`);\n accounts[accountId] = normalizeAccountProtocolConfig(\n await migrateAccount(accountsArray[i]),\n getDefaultChainProviders(),\n );\n // protocol options aren't saved to database if they are default\n if (!accounts[accountId].pkcOptions && !accounts[accountId].pkcOptions) {\n accounts[accountId].pkcOptions = getDefaultPkcOptions();\n }\n const protocolOptions = {\n ...(accounts[accountId].pkcOptions || accounts[accountId].pkcOptions),\n ...overwritePkcOptions,\n };\n const pkc = await PkcJs.PKC(getPkcClientOptions(accounts[accountId], protocolOptions));\n // handle errors or error events are uncaught\n // no need to log them because pkc-js already logs them\n pkc.on(\"error\", (error: any) =>\n log.error(\"uncaught pkc instance error, should never happen\", { error }),\n );\n accounts[accountId] = withProtocolAliases(accounts[accountId], pkc, protocolOptions);\n }\n return accounts;\n};\n\nconst accountVersion = 5;\nconst migrateAccount = async (account: any) => {\n account = normalizeAccountProtocolConfig(account);\n\n let version = account.version || 1;\n\n // version 2\n if (version === 1) {\n version++;\n if (account.pkcOptions?.ipfsHttpClientsOptions) {\n account.pkcOptions.kuboRpcClientsOptions = account.pkcOptions.ipfsHttpClientsOptions;\n delete account.pkcOptions.ipfsHttpClientsOptions;\n }\n if (account.pkcOptions?.pubsubHttpClientsOptions) {\n account.pkcOptions.pubsubKuboRpcClientsOptions = account.pkcOptions.pubsubHttpClientsOptions;\n delete account.pkcOptions.pubsubHttpClientsOptions;\n }\n }\n\n // version 3\n if (version === 2) {\n version++;\n if (!account.author.wallets) {\n account.author.wallets = {};\n }\n if (!account.author.wallets.eth) {\n account.author.wallets.eth = await chain.getEthWalletFromPkcPrivateKey(\n account.signer.privateKey,\n account.address,\n );\n }\n }\n\n if (version === 3) {\n version++;\n // in version 3, wallets had timestamps in ms, should be seconds\n if (account.author?.wallets?.eth?.timestamp > 1e12) {\n account.author.wallets.eth = await chain.getEthWalletFromPkcPrivateKey(\n account.signer.privateKey,\n account.address,\n );\n }\n }\n\n if (version === 4) {\n version++;\n account = normalizeAccountProtocolConfig(account);\n }\n\n account.version = accountVersion;\n return account;\n};\n\nconst getAccount = async (accountId: string) => {\n const accounts = await getAccounts([accountId]);\n return accounts[accountId];\n};\n\nconst getExportedAccountJson = async (accountId: string) => {\n assert(\n accountId && typeof accountId === \"string\",\n `getAccountJson argument accountId '${accountId}' invalid`,\n );\n // do not serialize or instantiate anything (unlike getAccount)\n const account = await accountsDatabase.getItem(accountId);\n if (!account) {\n throw Error(`getAccountJson no account in database with accountId '${accountId}'`);\n }\n const accountCommentsDatabase = getAccountCommentsDatabase(accountId);\n const accountVotesDatabase = getAccountVotesDatabase(accountId);\n const accountEditsDatabase = getAccountEditsDatabase(accountId);\n await ensureAccountCommentsDatabaseLayout(accountId);\n const [accountComments, accountVotes, accountEdits] = await Promise.all([\n getDatabaseAsArray(accountCommentsDatabase),\n getDatabaseAsArray(accountVotesDatabase),\n getDatabaseAsArray(accountEditsDatabase),\n ]);\n return JSON.stringify({ account, accountComments, accountVotes, accountEdits });\n};\n\n// accountVotes, accountComments and accountEdits are indexeddb\n// databases formed like an array (keys are numbers)\nconst getDatabaseAsArray = async (database: any) => {\n const length = (await database.getItem(\"length\")) || 0;\n let promises = [];\n let i = 0;\n while (i < length) {\n promises.push(database.getItem(String(i++)));\n }\n const items = await Promise.all(promises);\n return items;\n};\n\nconst removeFunctionsAndSensitiveFields = (publication: CreateCommentOptions) => {\n const sanitizedPublication: Record<string, any> = {};\n for (const key in publication) {\n if (key === \"signer\" || key === \"author\" || typeof publication[key] === \"function\") {\n continue;\n }\n sanitizedPublication[key] = publication[key];\n }\n return sanitizedPublication;\n};\n\nconst isNumericDatabaseKey = (key: string) => /^[0-9]+$/.test(key);\n\nconst rebuildVotesLatestIndex = (votes: any[]) => {\n const latestIndexByCommentCid: Record<string, number> = {};\n for (const [index, vote] of votes.entries()) {\n if (vote?.commentCid) {\n latestIndexByCommentCid[vote.commentCid] = index;\n }\n }\n return latestIndexByCommentCid;\n};\n\nconst rebuildEditsTargetIndexes = (edits: any[]) => {\n const targetToIndices: Record<string, number[]> = {};\n for (const [index, edit] of edits.entries()) {\n const editTarget = getAccountEditTarget(edit);\n if (!editTarget) {\n continue;\n }\n if (!targetToIndices[editTarget]) {\n targetToIndices[editTarget] = [];\n }\n targetToIndices[editTarget].push(index);\n }\n return targetToIndices;\n};\n\nconst addAccount = async (account: Account) => {\n validator.validateAccountsDatabaseAddAccountArguments(account);\n let accountIds: string[] | null = await accountsMetadataDatabase.getItem(\"accountIds\");\n\n // handle no duplicate names\n if (accountIds?.length) {\n const accounts: Accounts = await getAccounts(accountIds);\n for (const accountId of accountIds) {\n if (accountId !== account.id && accounts[accountId].name === account.name) {\n throw Error(`account name '${account.name}' already exists in database`);\n }\n }\n }\n\n // handle updating accounts database\n const accountToPutInDatabase: any = normalizeAccountProtocolConfig({\n ...account,\n pkc: undefined,\n });\n const protocolOptions = accountToPutInDatabase.pkcOptions;\n accountToPutInDatabase.pkcOptions = protocolOptions;\n // don't save default protocol options in database in case they change\n if (JSON.stringify(protocolOptions) === JSON.stringify(getDefaultPkcOptions())) {\n delete accountToPutInDatabase.pkcOptions;\n }\n if (\n JSON.stringify(accountToPutInDatabase.chainProviders) ===\n JSON.stringify(getDefaultChainProviders())\n ) {\n delete accountToPutInDatabase.chainProviders;\n }\n // make sure accountToPutInDatabase protocol options are valid\n if (protocolOptions) {\n const pkc = await PkcJs.PKC(getPkcClientOptions(accountToPutInDatabase, protocolOptions));\n pkc.on(\"error\", () => {});\n void pkc.destroy?.(); // gc; errors intentionally unhandled to avoid uncounted callback\n }\n await accountsDatabase.setItem(accountToPutInDatabase.id, accountToPutInDatabase);\n\n // handle updating accountNamesToAccountIds database\n let accountNamesToAccountIds: AccountNamesToAccountIds | null =\n await accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\");\n if (!accountNamesToAccountIds) {\n accountNamesToAccountIds = {};\n }\n accountNamesToAccountIds[account.name] = account.id;\n await accountsMetadataDatabase.setItem(\"accountNamesToAccountIds\", accountNamesToAccountIds);\n\n // handle updating accountIds database\n if (!accountIds) {\n accountIds = [account.id];\n }\n if (!accountIds.includes(account.id)) {\n accountIds.push(account.id);\n }\n await accountsMetadataDatabase.setItem(\"accountIds\", accountIds);\n\n // handle updating activeAccountId database\n if (accountIds.length === 1) {\n await accountsMetadataDatabase.setItem(\"activeAccountId\", account.id);\n }\n};\n\nconst removeAccount = async (account: Account) => {\n assert(\n account?.id && typeof account?.id === \"string\",\n `accountsDatabase.removeAccount invalid account.id '${account.id}'`,\n );\n\n // handle updating accounts database\n await accountsDatabase.removeItem(account.id);\n\n // handle updating accountNamesToAccountIds database\n let accountNamesToAccountIds: AccountNamesToAccountIds | null =\n await accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\");\n if (!accountNamesToAccountIds) {\n accountNamesToAccountIds = {};\n }\n delete accountNamesToAccountIds[account.name];\n await accountsMetadataDatabase.setItem(\"accountNamesToAccountIds\", accountNamesToAccountIds);\n\n // handle updating accountIds database\n let accountIds: string[] | null = await accountsMetadataDatabase.getItem(\"accountIds\");\n accountIds = (accountIds || []).filter((accountId) => accountId !== account.id);\n await accountsMetadataDatabase.setItem(\"accountIds\", accountIds);\n\n // handle updating activeAccountId database\n const activeAccountId = await accountsMetadataDatabase.getItem(\"activeAccountId\");\n if (activeAccountId === account.id) {\n if (accountIds.length) {\n await accountsMetadataDatabase.setItem(\"activeAccountId\", accountIds[0]);\n } else {\n await accountsMetadataDatabase.removeItem(\"activeAccountId\");\n }\n }\n\n const accountCommentsDatabase = getAccountCommentsDatabase(account.id);\n await accountCommentsDatabase.clear();\n\n const accountVotesDatabase = getAccountVotesDatabase(account.id);\n await accountVotesDatabase.clear();\n\n const accountCommentsRepliesDatabase = getAccountCommentsRepliesDatabase(account.id);\n await accountCommentsRepliesDatabase.clear();\n\n const accountEditsDatabase = getAccountEditsDatabase(account.id);\n await accountEditsDatabase.clear();\n};\n\nconst accountsCommentsDatabases: any = {};\nconst accountCommentsLayoutMigrations: Record<string, Promise<void> | undefined> = {};\nconst getAccountCommentsDatabase = (accountId: string) => {\n assert(\n accountId && typeof accountId === \"string\",\n `getAccountCommentsDatabase '${accountId}' not a string`,\n );\n if (!accountsCommentsDatabases[accountId]) {\n accountsCommentsDatabases[accountId] = localForage.createInstance({\n name: getPerAccountDatabaseName(\"accountComments\", accountId),\n });\n }\n return accountsCommentsDatabases[accountId];\n};\n\nconst ensureAccountCommentsDatabaseLayout = async (accountId: string) => {\n const accountCommentsDatabase = getAccountCommentsDatabase(accountId);\n if ((await accountCommentsDatabase.getItem(storageVersionKey)) === commentStorageVersion) {\n return;\n }\n if (!accountCommentsLayoutMigrations[accountId]) {\n accountCommentsLayoutMigrations[accountId] = (async () => {\n if ((await accountCommentsDatabase.getItem(storageVersionKey)) === commentStorageVersion) {\n return;\n }\n\n const comments = await getDatabaseAsArray(accountCommentsDatabase);\n const updatedComments = comments\n .map((comment) => (comment ? sanitizeStoredAccountComment(comment) : undefined))\n .filter((comment) => comment !== undefined);\n const rewritePromises: Promise<void>[] = [];\n for (const [index, updatedComment] of updatedComments.entries()) {\n if (!isEqual(updatedComment, comments[index])) {\n rewritePromises.push(accountCommentsDatabase.setItem(String(index), updatedComment));\n }\n }\n for (let index = updatedComments.length; index < comments.length; index++) {\n rewritePromises.push(accountCommentsDatabase.removeItem(String(index)));\n }\n rewritePromises.push(accountCommentsDatabase.setItem(\"length\", updatedComments.length));\n await Promise.all(rewritePromises);\n await accountCommentsDatabase.setItem(storageVersionKey, commentStorageVersion);\n })().finally(() => {\n delete accountCommentsLayoutMigrations[accountId];\n });\n }\n\n await accountCommentsLayoutMigrations[accountId];\n};\n\nconst deleteAccountComment = async (accountId: string, accountCommentIndex: number) => {\n const accountCommentsDatabase = getAccountCommentsDatabase(accountId);\n await ensureAccountCommentsDatabaseLayout(accountId);\n const length = (await accountCommentsDatabase.getItem(\"length\")) || 0;\n assert(\n accountCommentIndex >= 0 && accountCommentIndex < length,\n `deleteAccountComment accountCommentIndex '${accountCommentIndex}' out of range [0, ${length})`,\n );\n const items = await getDatabaseAsArray(accountCommentsDatabase);\n items.splice(accountCommentIndex, 1);\n const newLength = length - 1;\n const promises: Promise<void>[] = [];\n for (let i = 0; i < newLength; i++) {\n promises.push(accountCommentsDatabase.setItem(String(i), items[i]));\n }\n promises.push(accountCommentsDatabase.removeItem(String(length - 1)));\n promises.push(accountCommentsDatabase.setItem(\"length\", newLength));\n await Promise.all(promises);\n};\n\nconst addAccountComment = async (\n accountId: string,\n comment: CreateCommentOptions | Comment,\n accountCommentIndex?: number,\n) => {\n const accountCommentsDatabase = getAccountCommentsDatabase(accountId);\n await ensureAccountCommentsDatabaseLayout(accountId);\n const length = (await accountCommentsDatabase.getItem(\"length\")) || 0;\n comment = sanitizeStoredAccountComment(comment);\n if (typeof accountCommentIndex === \"number\") {\n assert(\n accountCommentIndex < length,\n `addAccountComment cannot edit comment no comment in database at accountCommentIndex '${accountCommentIndex}'`,\n );\n await Promise.all([\n accountCommentsDatabase.setItem(String(accountCommentIndex), comment),\n accountCommentsDatabase.setItem(storageVersionKey, commentStorageVersion),\n ]);\n } else {\n await Promise.all([\n accountCommentsDatabase.setItem(String(length), comment),\n accountCommentsDatabase.setItem(storageVersionKey, commentStorageVersion),\n accountCommentsDatabase.setItem(\"length\", length + 1),\n ]);\n }\n};\n\nconst getAccountComments = async (accountId: string) => {\n const accountCommentsDatabase = getAccountCommentsDatabase(accountId);\n await ensureAccountCommentsDatabaseLayout(accountId);\n const length = (await accountCommentsDatabase.getItem(\"length\")) || 0;\n if (length === 0) {\n return [];\n }\n let promises = [];\n let i = 0;\n while (i < length) {\n promises.push(accountCommentsDatabase.getItem(String(i++)));\n }\n const comments = await Promise.all(promises);\n // add index and account id to account comments for easier updating\n for (const i in comments) {\n comments[i] = sanitizeStoredAccountComment(comments[i]);\n comments[i].index = Number(i);\n comments[i].accountId = accountId;\n }\n return comments;\n};\n\nconst getAccountsComments = async (accountIds: string[]) => {\n assert(\n Array.isArray(accountIds),\n `getAccountsComments invalid accountIds '${accountIds}' not an array`,\n );\n const promises = [];\n for (const accountId of accountIds) {\n promises.push(getAccountComments(accountId));\n }\n const accountsCommentsArray = await Promise.all(promises);\n const accountsComments: AccountsComments = {};\n for (const [i, accountId] of accountIds.entries()) {\n accountsComments[accountId] = accountsCommentsArray[i];\n }\n return accountsComments;\n};\n\nconst accountsVotesDatabases: any = {};\nconst getAccountVotesDatabase = (accountId: string) => {\n assert(\n accountId && typeof accountId === \"string\",\n `getAccountVotesDatabase '${accountId}' not a string`,\n );\n if (!accountsVotesDatabases[accountId]) {\n accountsVotesDatabases[accountId] = localForage.createInstance({\n name: getPerAccountDatabaseName(\"accountVotes\", accountId),\n });\n }\n return accountsVotesDatabases[accountId];\n};\n\nconst ensureAccountVotesDatabaseLayout = async (accountId: string) => {\n const accountVotesDatabase = getAccountVotesDatabase(accountId);\n if ((await accountVotesDatabase.getItem(storageVersionKey)) === voteStorageVersion) {\n return;\n }\n\n const votes = await getDatabaseAsArray(accountVotesDatabase);\n const latestIndexByCommentCid = rebuildVotesLatestIndex(votes);\n const keys = await accountVotesDatabase.keys();\n const duplicateKeysToDelete = keys.filter(\n (key: string) =>\n !isNumericDatabaseKey(key) &&\n key !== \"length\" &&\n key !== storageVersionKey &&\n key !== votesLatestIndexKey &&\n latestIndexByCommentCid[key] !== undefined,\n );\n await Promise.all([\n ...duplicateKeysToDelete.map((key: string) => accountVotesDatabase.removeItem(key)),\n accountVotesDatabase.setItem(votesLatestIndexKey, latestIndexByCommentCid),\n accountVotesDatabase.setItem(storageVersionKey, voteStorageVersion),\n ]);\n};\n\nconst addAccountVote = async (accountId: string, createVoteOptions: CreateCommentOptions) => {\n assert(\n createVoteOptions?.commentCid && typeof createVoteOptions?.commentCid === \"string\",\n `addAccountVote createVoteOptions.commentCid '${createVoteOptions?.commentCid}' not a string`,\n );\n const accountVotesDatabase = getAccountVotesDatabase(accountId);\n await ensureAccountVotesDatabaseLayout(accountId);\n const length = (await accountVotesDatabase.getItem(\"length\")) || 0;\n const vote = removeFunctionsAndSensitiveFields(createVoteOptions);\n const existingLatestIndexByCommentCid = await accountVotesDatabase.getItem(votesLatestIndexKey);\n const latestIndexByCommentCid = {\n ...existingLatestIndexByCommentCid,\n [vote.commentCid]: length,\n };\n await Promise.all([\n accountVotesDatabase.setItem(String(length), vote),\n accountVotesDatabase.setItem(votesLatestIndexKey, latestIndexByCommentCid),\n accountVotesDatabase.setItem(storageVersionKey, voteStorageVersion),\n accountVotesDatabase.setItem(\"length\", length + 1),\n ]);\n};\n\nconst getAccountVotes = async (accountId: string) => {\n const accountVotesDatabase = getAccountVotesDatabase(accountId);\n await ensureAccountVotesDatabaseLayout(accountId);\n const latestIndexByCommentCid = (await accountVotesDatabase.getItem(votesLatestIndexKey)) || {};\n const votes: any = {};\n const latestIndexes = Object.values<number>(latestIndexByCommentCid);\n if (latestIndexes.length === 0) {\n return votes;\n }\n const promises = latestIndexes.map((index) => accountVotesDatabase.getItem(String(index)));\n const votesArray = await Promise.all(promises);\n for (const vote of votesArray) {\n votes[vote?.commentCid] = vote;\n }\n return votes;\n};\n\nconst getAccountsVotes = async (accountIds: string[]) => {\n assert(\n Array.isArray(accountIds),\n `getAccountsVotes invalid accountIds '${accountIds}' not an array`,\n );\n const promises = [];\n for (const accountId of accountIds) {\n promises.push(getAccountVotes(accountId));\n }\n const accountsVotesArray = await Promise.all(promises);\n const accountsVotes: any = {};\n for (const [i, accountId] of accountIds.entries()) {\n accountsVotes[accountId] = accountsVotesArray[i];\n }\n return accountsVotes;\n};\n\nconst accountsCommentsRepliesDatabases: any = {};\nconst getAccountCommentsRepliesDatabase = (accountId: string) => {\n assert(\n accountId && typeof accountId === \"string\",\n `getAccountCommentsRepliesDatabase '${accountId}' not a string`,\n );\n if (!accountsCommentsRepliesDatabases[accountId]) {\n accountsCommentsRepliesDatabases[accountId] = localForageLru.createInstance({\n name: getPerAccountDatabaseName(\"accountCommentsReplies\", accountId),\n size: 1000,\n });\n }\n return accountsCommentsRepliesDatabases[accountId];\n};\n\nconst addAccountCommentReply = async (accountId: string, reply: AccountCommentReply) => {\n const accountCommentsRepliesDatabase = getAccountCommentsRepliesDatabase(accountId);\n await accountCommentsRepliesDatabase.setItem(reply.cid, utils.clone(reply));\n};\n\nconst getAccountCommentsReplies = async (accountId: string) => {\n const accountCommentsRepliesDatabase = getAccountCommentsRepliesDatabase(accountId);\n const accountCommentsRepliesEntries = await accountCommentsRepliesDatabase.entries();\n const replies = {};\n for (const [, reply] of accountCommentsRepliesEntries) {\n // @ts-ignore\n replies[reply.cid] = reply;\n }\n return replies;\n};\n\nconst getAccountsCommentsReplies = async (accountIds: string[]) => {\n assert(\n Array.isArray(accountIds),\n `getAccountsCommentsReplies invalid accountIds '${accountIds}' not an array`,\n );\n const promises = [];\n for (const accountId of accountIds) {\n promises.push(getAccountCommentsReplies(accountId));\n }\n const accountsCommentsRepliesArray = await Promise.all(promises);\n const accountsCommentsReplies: AccountsCommentsReplies = {};\n for (const [i, accountId] of accountIds.entries()) {\n accountsCommentsReplies[accountId] = accountsCommentsRepliesArray[i];\n }\n return accountsCommentsReplies;\n};\n\nconst accountsEditsDatabases: any = {};\nconst getAccountEditsDatabase = (accountId: string) => {\n assert(\n accountId && typeof accountId === \"string\",\n `getAccountEditsDatabase '${accountId}' not a string`,\n );\n if (!accountsEditsDatabases[accountId]) {\n accountsEditsDatabases[accountId] = localForage.createInstance({\n name: getPerAccountDatabaseName(\"accountEdits\", accountId),\n });\n }\n return accountsEditsDatabases[accountId];\n};\n\nconst getAccountEditTarget = (edit: AccountEdit) =>\n edit?.commentCid || edit?.communityAddress || edit?.communityAddress;\n\nconst persistAccountEditsIndexes = async (accountId: string, edits: AccountEdit[]) => {\n const accountEditsDatabase = getAccountEditsDatabase(accountId);\n const targetToIndices = rebuildEditsTargetIndexes(edits);\n const summary = getAccountsEditsSummary(\n Object.fromEntries(\n Object.entries(targetToIndices).map(([target, indices]) => [\n target,\n indices.map((index) => edits[index]).filter(Boolean),\n ]),\n ),\n );\n await Promise.all([\n accountEditsDatabase.setItem(editsTargetToIndicesKey, targetToIndices),\n accountEditsDatabase.setItem(editsSummaryKey, summary),\n accountEditsDatabase.setItem(storageVersionKey, editStorageVersion),\n ]);\n return { targetToIndices, summary };\n};\n\nconst ensureAccountEditsDatabaseLayout = async (accountId: string) => {\n const accountEditsDatabase = getAccountEditsDatabase(accountId);\n if ((await accountEditsDatabase.getItem(storageVersionKey)) === editStorageVersion) {\n return;\n }\n\n const edits = await getDatabaseAsArray(accountEditsDatabase);\n const keys = await accountEditsDatabase.keys();\n const duplicateKeysToDelete = keys.filter(\n (key: string) =>\n !isNumericDatabaseKey(key) &&\n key !== \"length\" &&\n key !== storageVersionKey &&\n key !== editsTargetToIndicesKey &&\n key !== editsSummaryKey &&\n edits.some((edit) => getAccountEditTarget(edit as AccountEdit) === key),\n );\n await Promise.all(\n duplicateKeysToDelete.map((key: string) => accountEditsDatabase.removeItem(key)),\n );\n await persistAccountEditsIndexes(accountId, edits as AccountEdit[]);\n};\n\nconst addAccountEdit = async (accountId: string, createEditOptions: CreateCommentOptions) => {\n const editTarget = getAccountEditTarget(createEditOptions as AccountEdit);\n assert(typeof editTarget === \"string\", `addAccountEdit target '${editTarget}' not a string`);\n const accountEditsDatabase = getAccountEditsDatabase(accountId);\n await ensureAccountEditsDatabaseLayout(accountId);\n const length = (await accountEditsDatabase.getItem(\"length\")) || 0;\n const edit = removeFunctionsAndSensitiveFields(createEditOptions);\n const existingEdits = await getDatabaseAsArray(accountEditsDatabase);\n existingEdits[length] = edit;\n await Promise.all([\n accountEditsDatabase.setItem(String(length), edit),\n accountEditsDatabase.setItem(storageVersionKey, editStorageVersion),\n accountEditsDatabase.setItem(\"length\", length + 1),\n ]);\n await persistAccountEditsIndexes(accountId, existingEdits as AccountEdit[]);\n};\n\nconst doesStoredAccountEditMatch = (storedAccountEdit: any, targetStoredAccountEdit: any) =>\n storedAccountEdit?.clientId && targetStoredAccountEdit?.clientId\n ? storedAccountEdit.clientId === targetStoredAccountEdit.clientId\n : isEqual(storedAccountEdit, targetStoredAccountEdit);\n\nconst deleteAccountEdit = async (accountId: string, editToDelete: CreateCommentOptions) => {\n const editTarget = getAccountEditTarget(editToDelete as AccountEdit);\n assert(typeof editTarget === \"string\", `deleteAccountEdit target '${editTarget}' not a string`);\n const accountEditsDatabase = getAccountEditsDatabase(accountId);\n await ensureAccountEditsDatabaseLayout(accountId);\n const length = (await accountEditsDatabase.getItem(\"length\")) || 0;\n const items = await getDatabaseAsArray(accountEditsDatabase);\n\n let deletedEdit = false;\n const nextItems = items.filter((item) => {\n if (!deletedEdit && doesStoredAccountEditMatch(item, editToDelete)) {\n deletedEdit = true;\n return false;\n }\n return true;\n });\n\n const newLength = nextItems.length;\n const promises: Promise<void>[] = [];\n for (let i = 0; i < newLength; i++) {\n promises.push(accountEditsDatabase.setItem(String(i), nextItems[i]));\n }\n if (length > newLength) {\n promises.push(accountEditsDatabase.removeItem(String(length - 1)));\n promises.push(accountEditsDatabase.setItem(\"length\", newLength));\n }\n await Promise.all(promises);\n await persistAccountEditsIndexes(accountId, nextItems as AccountEdit[]);\n return deletedEdit;\n};\n\nconst getAccountEdits = async (accountId: string) => {\n const accountEditsDatabase = getAccountEditsDatabase(accountId);\n await ensureAccountEditsDatabaseLayout(accountId);\n const targetToIndices = (await accountEditsDatabase.getItem(editsTargetToIndicesKey)) || {};\n const edits: any = {};\n const targets = Object.keys(targetToIndices);\n if (targets.length === 0) {\n return edits;\n }\n for (const target of targets) {\n const targetIndices: number[] = targetToIndices[target];\n const targetEdits = await Promise.all(\n targetIndices.map((index) => accountEditsDatabase.getItem(String(index))),\n );\n edits[target] = targetEdits.filter(Boolean);\n }\n return edits;\n};\n\nconst getAccountEditsSummary = async (accountId: string): Promise<AccountEditsSummary> => {\n const accountEditsDatabase = getAccountEditsDatabase(accountId);\n await ensureAccountEditsDatabaseLayout(accountId);\n return (await accountEditsDatabase.getItem(editsSummaryKey)) || {};\n};\n\nconst getAccountsEdits = async (accountIds: string[]) => {\n assert(\n Array.isArray(accountIds),\n `getAccountsEdits invalid accountIds '${accountIds}' not an array`,\n );\n const promises = [];\n for (const accountId of accountIds) {\n promises.push(getAccountEdits(accountId));\n }\n const accountsEditsArray = await Promise.all(promises);\n const accountsEdits: any = {};\n for (const [i, accountId] of accountIds.entries()) {\n accountsEdits[accountId] = accountsEditsArray[i];\n }\n return accountsEdits;\n};\n\nconst getAccountsEditsSummaries = async (accountIds: string[]) => {\n assert(\n Array.isArray(accountIds),\n `getAccountsEditsSummaries invalid accountIds '${accountIds}' not an array`,\n );\n const accountsEditsSummaries = await Promise.all(\n accountIds.map((accountId) => getAccountEditsSummary(accountId)),\n );\n return Object.fromEntries(\n accountIds.map((accountId, index) => [accountId, accountsEditsSummaries[index]]),\n );\n};\n\nconst database = {\n accountsDatabase,\n accountsMetadataDatabase,\n getAccountsVotes,\n getAccountVotes,\n addAccountVote,\n getAccountsComments,\n getAccountComments,\n addAccountComment,\n deleteAccountComment,\n addAccount,\n removeAccount,\n getExportedAccountJson,\n getAccounts,\n getAccount,\n addAccountCommentReply,\n getAccountCommentsReplies,\n getAccountsCommentsReplies,\n getAccountsEdits,\n getAccountEdits,\n getAccountsEditsSummaries,\n getAccountEditsSummary,\n addAccountEdit,\n deleteAccountEdit,\n accountVersion,\n migrate,\n getAccountsDatabaseName,\n getPerAccountDatabaseName,\n};\n\nexport default database;\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AccountNamesToAccountIds, Accounts, AccountsVotes, AccountsEdits, AccountsEditsSummaries, AccountsComments, AccountsCommentsIndexes, AccountsCommentsReplies, CommentCidsToAccountsComments } from "../../types.js";
|
|
2
|
+
export declare const listeners: any;
|
|
3
|
+
type AccountsState = {
|
|
4
|
+
accounts: Accounts;
|
|
5
|
+
accountIds: string[];
|
|
6
|
+
activeAccountId: string | undefined;
|
|
7
|
+
accountNamesToAccountIds: AccountNamesToAccountIds;
|
|
8
|
+
accountsComments: AccountsComments;
|
|
9
|
+
accountsCommentsIndexes: AccountsCommentsIndexes;
|
|
10
|
+
commentCidsToAccountsComments: CommentCidsToAccountsComments;
|
|
11
|
+
accountsCommentsUpdating: {
|
|
12
|
+
[commentCid: string]: boolean;
|
|
13
|
+
};
|
|
14
|
+
accountsCommentsReplies: AccountsCommentsReplies;
|
|
15
|
+
accountsVotes: AccountsVotes;
|
|
16
|
+
accountsEdits: AccountsEdits;
|
|
17
|
+
accountsEditsSummaries: AccountsEditsSummaries;
|
|
18
|
+
accountsEditsLoaded: {
|
|
19
|
+
[accountId: string]: boolean;
|
|
20
|
+
};
|
|
21
|
+
accountsActions: {
|
|
22
|
+
[functionName: string]: Function;
|
|
23
|
+
};
|
|
24
|
+
accountsActionsInternal: {
|
|
25
|
+
[functionName: string]: Function;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
declare const accountsStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AccountsState>>;
|
|
29
|
+
export declare const resetAccountsStore: () => Promise<void>;
|
|
30
|
+
export declare const resetAccountsDatabaseAndStore: () => Promise<void>;
|
|
31
|
+
export default accountsStore;
|
|
32
|
+
//# sourceMappingURL=accounts-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts-store.d.ts","sourceRoot":"","sources":["../../../src/stores/accounts/accounts-store.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,wBAAwB,EAExB,QAAQ,EAGR,aAAa,EACb,aAAa,EACb,sBAAsB,EAEtB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAYrB,eAAO,MAAM,SAAS,EAAE,GAAQ,CAAC;AAEjC,KAAK,aAAa,GAAG;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,6BAA6B,EAAE,6BAA6B,CAAC;IAC7D,wBAAwB,EAAE;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC5D,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,mBAAmB,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACtD,eAAe,EAAE;QAAE,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAC;IACtD,uBAAuB,EAAE;QAAE,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAC;CAC/D,CAAC;AAEF,QAAA,MAAM,aAAa,4EAgBhB,CAAC;AA6HJ,eAAO,MAAM,kBAAkB,qBAiB9B,CAAC;AAGF,eAAO,MAAM,6BAA6B,qBASzC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import assert from "assert";
|
|
11
|
+
import Logger from "@pkcprotocol/pkc-logger";
|
|
12
|
+
const log = Logger("bitsocial-react-hooks:accounts:stores");
|
|
13
|
+
import accountsDatabase from "./accounts-database.js";
|
|
14
|
+
import accountGenerator from "./account-generator.js";
|
|
15
|
+
import createStore from "zustand";
|
|
16
|
+
import * as accountsActions from "./accounts-actions.js";
|
|
17
|
+
import * as accountsActionsInternal from "./accounts-actions-internal.js";
|
|
18
|
+
import localForage from "localforage";
|
|
19
|
+
import { getAccountsCommentsIndexes, getCommentCidsToAccountsComments, getInitAccountCommentsToUpdate, } from "./utils.js";
|
|
20
|
+
// reset all event listeners in between tests
|
|
21
|
+
export const listeners = [];
|
|
22
|
+
const accountsStore = createStore((setState, getState) => ({
|
|
23
|
+
accounts: {},
|
|
24
|
+
accountIds: [],
|
|
25
|
+
activeAccountId: undefined,
|
|
26
|
+
accountNamesToAccountIds: {},
|
|
27
|
+
accountsComments: {},
|
|
28
|
+
accountsCommentsIndexes: {},
|
|
29
|
+
commentCidsToAccountsComments: {},
|
|
30
|
+
accountsCommentsUpdating: {},
|
|
31
|
+
accountsCommentsReplies: {},
|
|
32
|
+
accountsVotes: {},
|
|
33
|
+
accountsEdits: {},
|
|
34
|
+
accountsEditsSummaries: {},
|
|
35
|
+
accountsEditsLoaded: {},
|
|
36
|
+
accountsActions,
|
|
37
|
+
accountsActionsInternal,
|
|
38
|
+
}));
|
|
39
|
+
// load accounts from database once on load
|
|
40
|
+
const initializeAccountsStore = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
|
+
yield accountsDatabase.migrate();
|
|
42
|
+
let accountIds;
|
|
43
|
+
let activeAccountId;
|
|
44
|
+
let accounts;
|
|
45
|
+
let accountNamesToAccountIds;
|
|
46
|
+
accountIds = (yield accountsDatabase.accountsMetadataDatabase.getItem("accountIds")) || undefined;
|
|
47
|
+
// get accounts from database if any
|
|
48
|
+
if (accountIds === null || accountIds === void 0 ? void 0 : accountIds.length) {
|
|
49
|
+
[activeAccountId, accounts, accountNamesToAccountIds] = yield Promise.all([
|
|
50
|
+
accountsDatabase.accountsMetadataDatabase.getItem("activeAccountId"),
|
|
51
|
+
accountsDatabase.getAccounts(accountIds),
|
|
52
|
+
accountsDatabase.accountsMetadataDatabase.getItem("accountNamesToAccountIds"),
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
// no accounts in database, create a default account
|
|
56
|
+
else {
|
|
57
|
+
const defaultAccount = yield accountGenerator.generateDefaultAccount();
|
|
58
|
+
yield accountsDatabase.addAccount(defaultAccount);
|
|
59
|
+
accounts = { [defaultAccount.id]: defaultAccount };
|
|
60
|
+
[accountIds, activeAccountId, accountNamesToAccountIds] = yield Promise.all([
|
|
61
|
+
accountsDatabase.accountsMetadataDatabase.getItem("accountIds"),
|
|
62
|
+
accountsDatabase.accountsMetadataDatabase.getItem("activeAccountId"),
|
|
63
|
+
accountsDatabase.accountsMetadataDatabase.getItem("accountNamesToAccountIds"),
|
|
64
|
+
]);
|
|
65
|
+
assert(accountIds && activeAccountId && accountNamesToAccountIds, `accountsStore error creating a default account during initialization accountsMetadataDatabase.accountIds '${accountIds}' accountsMetadataDatabase.activeAccountId '${activeAccountId}' accountsMetadataDatabase.accountNamesToAccountIds '${JSON.stringify(accountNamesToAccountIds)}'`);
|
|
66
|
+
}
|
|
67
|
+
const [accountsComments, accountsVotes, accountsCommentsReplies, accountsEditsSummaries] = yield Promise.all([
|
|
68
|
+
accountsDatabase.getAccountsComments(accountIds),
|
|
69
|
+
accountsDatabase.getAccountsVotes(accountIds),
|
|
70
|
+
accountsDatabase.getAccountsCommentsReplies(accountIds),
|
|
71
|
+
accountsDatabase.getAccountsEditsSummaries(accountIds),
|
|
72
|
+
]);
|
|
73
|
+
const commentCidsToAccountsComments = getCommentCidsToAccountsComments(accountsComments);
|
|
74
|
+
const accountsCommentsIndexes = getAccountsCommentsIndexes(accountsComments);
|
|
75
|
+
accountsStore.setState((state) => ({
|
|
76
|
+
accounts,
|
|
77
|
+
accountIds,
|
|
78
|
+
activeAccountId,
|
|
79
|
+
accountNamesToAccountIds,
|
|
80
|
+
accountsComments,
|
|
81
|
+
accountsCommentsIndexes,
|
|
82
|
+
commentCidsToAccountsComments,
|
|
83
|
+
accountsVotes,
|
|
84
|
+
accountsCommentsReplies,
|
|
85
|
+
// Keep accountsEditsSummaries hot while accountsEdits stays cold until accountsEditsLoaded flips true.
|
|
86
|
+
accountsEdits: Object.fromEntries(accountIds.map((accountId) => [accountId, {}])),
|
|
87
|
+
accountsEditsSummaries,
|
|
88
|
+
accountsEditsLoaded: Object.fromEntries(accountIds.map((accountId) => [accountId, false])),
|
|
89
|
+
}));
|
|
90
|
+
// start looking for updates for all accounts comments in database
|
|
91
|
+
for (const { accountComment, accountId } of getInitAccountCommentsToUpdate(accountsComments)) {
|
|
92
|
+
accountsStore
|
|
93
|
+
.getState()
|
|
94
|
+
.accountsActionsInternal.startUpdatingAccountCommentOnCommentUpdateEvents(accountComment, accounts[accountId], accountComment.index)
|
|
95
|
+
.catch((error) => log.error("accountsStore.initializeAccountsStore startUpdatingAccountCommentOnCommentUpdateEvents error", {
|
|
96
|
+
accountComment,
|
|
97
|
+
accountCommentIndex: accountComment.index,
|
|
98
|
+
accounts,
|
|
99
|
+
error,
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
// @ts-ignore
|
|
104
|
+
const isInitializing = () => !!window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZING;
|
|
105
|
+
const waitForInitialized = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
106
|
+
while (isInitializing()) {
|
|
107
|
+
// uncomment to debug accounts init
|
|
108
|
+
// console.warn(`can't reset accounts store while initializing, waiting 100ms`)
|
|
109
|
+
yield new Promise((r) => setTimeout(r, 100));
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
113
|
+
// don't initialize on load multiple times when loading the file multiple times during karma tests
|
|
114
|
+
// @ts-ignore
|
|
115
|
+
if (window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZED_ONCE) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZED_ONCE = true;
|
|
120
|
+
// @ts-ignore
|
|
121
|
+
window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZING = true;
|
|
122
|
+
log("accounts store initializing started");
|
|
123
|
+
try {
|
|
124
|
+
yield initializeAccountsStore();
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
// initializing can fail in tests when store is being reset at the same time as databases are being deleted
|
|
128
|
+
log.error("accountsStore.initializeAccountsStore error", {
|
|
129
|
+
accountsStore: accountsStore.getState(),
|
|
130
|
+
error,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
// @ts-ignore
|
|
135
|
+
delete window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZING;
|
|
136
|
+
}
|
|
137
|
+
log("accounts store initializing finished");
|
|
138
|
+
}))();
|
|
139
|
+
// reset store in between tests
|
|
140
|
+
const originalState = accountsStore.getState();
|
|
141
|
+
// async function because some stores have async init
|
|
142
|
+
export const resetAccountsStore = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
143
|
+
var _a, _b;
|
|
144
|
+
// don't reset while initializing, it could happen during quick successive tests
|
|
145
|
+
yield waitForInitialized();
|
|
146
|
+
log("accounts store reset started");
|
|
147
|
+
// remove all event listeners
|
|
148
|
+
listeners.forEach((listener) => listener.removeAllListeners());
|
|
149
|
+
(_b = (_a = accountsStore.getState().accountsActionsInternal).resetLazyAccountHistoryLoaders) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
150
|
+
// destroy all component subscriptions to the store
|
|
151
|
+
accountsStore.destroy();
|
|
152
|
+
// restore original state
|
|
153
|
+
accountsStore.setState(originalState);
|
|
154
|
+
// init the store
|
|
155
|
+
yield initializeAccountsStore();
|
|
156
|
+
log("accounts store reset finished");
|
|
157
|
+
});
|
|
158
|
+
// reset database and store in between tests
|
|
159
|
+
export const resetAccountsDatabaseAndStore = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
160
|
+
// don't reset while initializing, it could happen during quick successive tests
|
|
161
|
+
yield waitForInitialized();
|
|
162
|
+
yield Promise.all([
|
|
163
|
+
localForage.createInstance({ name: "bitsocialReactHooks-accountsMetadata" }).clear(),
|
|
164
|
+
localForage.createInstance({ name: "bitsocialReactHooks-accounts" }).clear(),
|
|
165
|
+
]);
|
|
166
|
+
yield resetAccountsStore();
|
|
167
|
+
});
|
|
168
|
+
export default accountsStore;
|
|
169
|
+
//# sourceMappingURL=accounts-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts-store.js","sourceRoot":"","sources":["../../../src/stores/accounts/accounts-store.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,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAgBnD,OAAO,WAAW,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,eAAe,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,uBAAuB,MAAM,6BAA6B,CAAC;AACvE,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,SAAS,CAAC;AAEjB,6CAA6C;AAC7C,MAAM,CAAC,MAAM,SAAS,GAAQ,EAAE,CAAC;AAoBjC,MAAM,aAAa,GAAG,WAAW,CAAgB,CAAC,QAAkB,EAAE,QAAkB,EAAE,EAAE,CAAC,CAAC;IAC5F,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,SAAS;IAC1B,wBAAwB,EAAE,EAAE;IAC5B,gBAAgB,EAAE,EAAE;IACpB,uBAAuB,EAAE,EAAE;IAC3B,6BAA6B,EAAE,EAAE;IACjC,wBAAwB,EAAE,EAAE;IAC5B,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,sBAAsB,EAAE,EAAE;IAC1B,mBAAmB,EAAE,EAAE;IACvB,eAAe;IACf,uBAAuB;CACxB,CAAC,CAAC,CAAC;AAEJ,2CAA2C;AAC3C,MAAM,uBAAuB,GAAG,GAAS,EAAE;IACzC,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAEjC,IAAI,UAAgC,CAAC;IACrC,IAAI,eAAmC,CAAC;IACxC,IAAI,QAAkB,CAAC;IACvB,IAAI,wBAA8D,CAAC;IACnE,UAAU,GAAG,CAAC,MAAM,gBAAgB,CAAC,wBAAwB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC;IAClG,oCAAoC;IACpC,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE,CAAC;QACvB,CAAC,eAAe,EAAE,QAAQ,EAAE,wBAAwB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAM;YAC7E,gBAAgB,CAAC,wBAAwB,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACpE,gBAAgB,CAAC,WAAW,CAAC,UAAU,CAAC;YACxC,gBAAgB,CAAC,wBAAwB,CAAC,OAAO,CAAC,0BAA0B,CAAC;SAC9E,CAAC,CAAC;IACL,CAAC;IACD,oDAAoD;SAC/C,CAAC;QACJ,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,sBAAsB,EAAE,CAAC;QACvE,MAAM,gBAAgB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAClD,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC;QACnD,CAAC,UAAU,EAAE,eAAe,EAAE,wBAAwB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAM;YAC/E,gBAAgB,CAAC,wBAAwB,CAAC,OAAO,CAAC,YAAY,CAAC;YAC/D,gBAAgB,CAAC,wBAAwB,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACpE,gBAAgB,CAAC,wBAAwB,CAAC,OAAO,CAAC,0BAA0B,CAAC;SAC9E,CAAC,CAAC;QACH,MAAM,CACJ,UAAU,IAAI,eAAe,IAAI,wBAAwB,EACzD,6GAA6G,UAAU,+CAA+C,eAAe,wDAAwD,IAAI,CAAC,SAAS,CACzP,wBAAwB,CACzB,GAAG,CACL,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,gBAAgB,EAAE,aAAa,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,GACtF,MAAM,OAAO,CAAC,GAAG,CAAM;QACrB,gBAAgB,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAChD,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAC7C,gBAAgB,CAAC,0BAA0B,CAAC,UAAU,CAAC;QACvD,gBAAgB,CAAC,yBAAyB,CAAC,UAAU,CAAC;KACvD,CAAC,CAAC;IACL,MAAM,6BAA6B,GAAG,gCAAgC,CAAC,gBAAgB,CAAC,CAAC;IACzF,MAAM,uBAAuB,GAAG,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;IAC7E,aAAa,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjC,QAAQ;QACR,UAAU;QACV,eAAe;QACf,wBAAwB;QACxB,gBAAgB;QAChB,uBAAuB;QACvB,6BAA6B;QAC7B,aAAa;QACb,uBAAuB;QACvB,uGAAuG;QACvG,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,sBAAsB;QACtB,mBAAmB,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;KAC3F,CAAC,CAAC,CAAC;IAEJ,kEAAkE;IAClE,KAAK,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,8BAA8B,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7F,aAAa;aACV,QAAQ,EAAE;aACV,uBAAuB,CAAC,gDAAgD,CACvE,cAAc,EACd,QAAQ,CAAC,SAAS,CAAC,EACnB,cAAc,CAAC,KAAK,CACrB;aACA,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CACxB,GAAG,CAAC,KAAK,CACP,8FAA8F,EAC9F;YACE,cAAc;YACd,mBAAmB,EAAE,cAAc,CAAC,KAAK;YACzC,QAAQ;YACR,KAAK;SACN,CACF,CACF,CAAC;IACN,CAAC;AACH,CAAC,CAAA,CAAC;AAEF,aAAa;AACb,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iDAAiD,CAAC;AACxF,MAAM,kBAAkB,GAAG,GAAS,EAAE;IACpC,OAAO,cAAc,EAAE,EAAE,CAAC;QACxB,mCAAmC;QACnC,+EAA+E;QAC/E,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC,CAAA,CAAC;AAEF,CAAC,GAAS,EAAE;IACV,kGAAkG;IAClG,aAAa;IACb,IAAI,MAAM,CAAC,qDAAqD,EAAE,CAAC;QACjE,OAAO;IACT,CAAC;IAED,aAAa;IACb,MAAM,CAAC,qDAAqD,GAAG,IAAI,CAAC;IACpE,aAAa;IACb,MAAM,CAAC,iDAAiD,GAAG,IAAI,CAAC;IAEhE,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,uBAAuB,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2GAA2G;QAC3G,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE;YACvD,aAAa,EAAE,aAAa,CAAC,QAAQ,EAAE;YACvC,KAAK;SACN,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,aAAa;QACb,OAAO,MAAM,CAAC,iDAAiD,CAAC;IAClE,CAAC;IACD,GAAG,CAAC,sCAAsC,CAAC,CAAC;AAC9C,CAAC,CAAA,CAAC,EAAE,CAAC;AAEL,+BAA+B;AAC/B,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC/C,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAS,EAAE;;IAC3C,gFAAgF;IAChF,MAAM,kBAAkB,EAAE,CAAC;IAE3B,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAEpC,6BAA6B;IAC7B,SAAS,CAAC,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACpE,MAAA,MAAA,aAAa,CAAC,QAAQ,EAAE,CAAC,uBAAuB,EAAC,8BAA8B,kDAAI,CAAC;IACpF,mDAAmD;IACnD,aAAa,CAAC,OAAO,EAAE,CAAC;IACxB,yBAAyB;IACzB,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtC,iBAAiB;IACjB,MAAM,uBAAuB,EAAE,CAAC;IAEhC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AACvC,CAAC,CAAA,CAAC;AAEF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAS,EAAE;IACtD,gFAAgF;IAChF,MAAM,kBAAkB,EAAE,CAAC;IAE3B,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,WAAW,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,CAAC,CAAC,KAAK,EAAE;QACpF,WAAW,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,CAAC,KAAK,EAAE;KAC7E,CAAC,CAAC;IACH,MAAM,kBAAkB,EAAE,CAAC;AAC7B,CAAC,CAAA,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import assert from \"assert\";\nimport Logger from \"@pkcprotocol/pkc-logger\";\nconst log = Logger(\"bitsocial-react-hooks:accounts:stores\");\nimport accountsDatabase from \"./accounts-database\";\nimport accountGenerator from \"./account-generator\";\nimport {\n AccountNamesToAccountIds,\n Account,\n Accounts,\n AccountsActions,\n Comment,\n AccountsVotes,\n AccountsEdits,\n AccountsEditsSummaries,\n AccountComment,\n AccountsComments,\n AccountsCommentsIndexes,\n AccountsCommentsReplies,\n CommentCidsToAccountsComments,\n} from \"../../types\";\nimport createStore from \"zustand\";\nimport * as accountsActions from \"./accounts-actions\";\nimport * as accountsActionsInternal from \"./accounts-actions-internal\";\nimport localForage from \"localforage\";\nimport {\n getAccountsCommentsIndexes,\n getCommentCidsToAccountsComments,\n getInitAccountCommentsToUpdate,\n} from \"./utils\";\n\n// reset all event listeners in between tests\nexport const listeners: any = [];\n\ntype AccountsState = {\n accounts: Accounts;\n accountIds: string[];\n activeAccountId: string | undefined;\n accountNamesToAccountIds: AccountNamesToAccountIds;\n accountsComments: AccountsComments;\n accountsCommentsIndexes: AccountsCommentsIndexes;\n commentCidsToAccountsComments: CommentCidsToAccountsComments;\n accountsCommentsUpdating: { [commentCid: string]: boolean };\n accountsCommentsReplies: AccountsCommentsReplies;\n accountsVotes: AccountsVotes;\n accountsEdits: AccountsEdits;\n accountsEditsSummaries: AccountsEditsSummaries;\n accountsEditsLoaded: { [accountId: string]: boolean };\n accountsActions: { [functionName: string]: Function };\n accountsActionsInternal: { [functionName: string]: Function };\n};\n\nconst accountsStore = createStore<AccountsState>((setState: Function, getState: Function) => ({\n accounts: {},\n accountIds: [],\n activeAccountId: undefined,\n accountNamesToAccountIds: {},\n accountsComments: {},\n accountsCommentsIndexes: {},\n commentCidsToAccountsComments: {},\n accountsCommentsUpdating: {},\n accountsCommentsReplies: {},\n accountsVotes: {},\n accountsEdits: {},\n accountsEditsSummaries: {},\n accountsEditsLoaded: {},\n accountsActions,\n accountsActionsInternal,\n}));\n\n// load accounts from database once on load\nconst initializeAccountsStore = async () => {\n await accountsDatabase.migrate();\n\n let accountIds: string[] | undefined;\n let activeAccountId: string | undefined;\n let accounts: Accounts;\n let accountNamesToAccountIds: AccountNamesToAccountIds | undefined;\n accountIds = (await accountsDatabase.accountsMetadataDatabase.getItem(\"accountIds\")) || undefined;\n // get accounts from database if any\n if (accountIds?.length) {\n [activeAccountId, accounts, accountNamesToAccountIds] = await Promise.all<any>([\n accountsDatabase.accountsMetadataDatabase.getItem(\"activeAccountId\"),\n accountsDatabase.getAccounts(accountIds),\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\"),\n ]);\n }\n // no accounts in database, create a default account\n else {\n const defaultAccount = await accountGenerator.generateDefaultAccount();\n await accountsDatabase.addAccount(defaultAccount);\n accounts = { [defaultAccount.id]: defaultAccount };\n [accountIds, activeAccountId, accountNamesToAccountIds] = await Promise.all<any>([\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountIds\"),\n accountsDatabase.accountsMetadataDatabase.getItem(\"activeAccountId\"),\n accountsDatabase.accountsMetadataDatabase.getItem(\"accountNamesToAccountIds\"),\n ]);\n assert(\n accountIds && activeAccountId && accountNamesToAccountIds,\n `accountsStore error creating a default account during initialization accountsMetadataDatabase.accountIds '${accountIds}' accountsMetadataDatabase.activeAccountId '${activeAccountId}' accountsMetadataDatabase.accountNamesToAccountIds '${JSON.stringify(\n accountNamesToAccountIds,\n )}'`,\n );\n }\n const [accountsComments, accountsVotes, accountsCommentsReplies, accountsEditsSummaries] =\n await Promise.all<any>([\n accountsDatabase.getAccountsComments(accountIds),\n accountsDatabase.getAccountsVotes(accountIds),\n accountsDatabase.getAccountsCommentsReplies(accountIds),\n accountsDatabase.getAccountsEditsSummaries(accountIds),\n ]);\n const commentCidsToAccountsComments = getCommentCidsToAccountsComments(accountsComments);\n const accountsCommentsIndexes = getAccountsCommentsIndexes(accountsComments);\n accountsStore.setState((state) => ({\n accounts,\n accountIds,\n activeAccountId,\n accountNamesToAccountIds,\n accountsComments,\n accountsCommentsIndexes,\n commentCidsToAccountsComments,\n accountsVotes,\n accountsCommentsReplies,\n // Keep accountsEditsSummaries hot while accountsEdits stays cold until accountsEditsLoaded flips true.\n accountsEdits: Object.fromEntries(accountIds.map((accountId) => [accountId, {}])),\n accountsEditsSummaries,\n accountsEditsLoaded: Object.fromEntries(accountIds.map((accountId) => [accountId, false])),\n }));\n\n // start looking for updates for all accounts comments in database\n for (const { accountComment, accountId } of getInitAccountCommentsToUpdate(accountsComments)) {\n accountsStore\n .getState()\n .accountsActionsInternal.startUpdatingAccountCommentOnCommentUpdateEvents(\n accountComment,\n accounts[accountId],\n accountComment.index,\n )\n .catch((error: unknown) =>\n log.error(\n \"accountsStore.initializeAccountsStore startUpdatingAccountCommentOnCommentUpdateEvents error\",\n {\n accountComment,\n accountCommentIndex: accountComment.index,\n accounts,\n error,\n },\n ),\n );\n }\n};\n\n// @ts-ignore\nconst isInitializing = () => !!window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZING;\nconst waitForInitialized = async () => {\n while (isInitializing()) {\n // uncomment to debug accounts init\n // console.warn(`can't reset accounts store while initializing, waiting 100ms`)\n await new Promise((r) => setTimeout(r, 100));\n }\n};\n\n(async () => {\n // don't initialize on load multiple times when loading the file multiple times during karma tests\n // @ts-ignore\n if (window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZED_ONCE) {\n return;\n }\n\n // @ts-ignore\n window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZED_ONCE = true;\n // @ts-ignore\n window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZING = true;\n\n log(\"accounts store initializing started\");\n try {\n await initializeAccountsStore();\n } catch (error) {\n // initializing can fail in tests when store is being reset at the same time as databases are being deleted\n log.error(\"accountsStore.initializeAccountsStore error\", {\n accountsStore: accountsStore.getState(),\n error,\n });\n } finally {\n // @ts-ignore\n delete window.BITSOCIAL_REACT_HOOKS_ACCOUNTS_STORE_INITIALIZING;\n }\n log(\"accounts store initializing finished\");\n})();\n\n// reset store in between tests\nconst originalState = accountsStore.getState();\n// async function because some stores have async init\nexport const resetAccountsStore = async () => {\n // don't reset while initializing, it could happen during quick successive tests\n await waitForInitialized();\n\n log(\"accounts store reset started\");\n\n // remove all event listeners\n listeners.forEach((listener: any) => listener.removeAllListeners());\n accountsStore.getState().accountsActionsInternal.resetLazyAccountHistoryLoaders?.();\n // destroy all component subscriptions to the store\n accountsStore.destroy();\n // restore original state\n accountsStore.setState(originalState);\n // init the store\n await initializeAccountsStore();\n\n log(\"accounts store reset finished\");\n};\n\n// reset database and store in between tests\nexport const resetAccountsDatabaseAndStore = async () => {\n // don't reset while initializing, it could happen during quick successive tests\n await waitForInitialized();\n\n await Promise.all([\n localForage.createInstance({ name: \"bitsocialReactHooks-accountsMetadata\" }).clear(),\n localForage.createInstance({ name: \"bitsocialReactHooks-accounts\" }).clear(),\n ]);\n await resetAccountsStore();\n};\n\nexport default accountsStore;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stores/accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,eAAe,aAAa,CAAC","sourcesContent":["import accountsStore from \"./accounts-store\";\nexport * from \"./accounts-store\";\nexport default accountsStore;\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Account, Communities, AccountComment, AccountsComments, AccountsCommentsIndexes, AccountCommentsIndex, CommentCidsToAccountsComments, Comment, AccountEdit, AccountEditsSummary } from "../../types.js";
|
|
2
|
+
export declare const getAccountCommunities: (account: Account, communities: Communities) => any;
|
|
3
|
+
export declare const getCommentCidsToAccountsComments: (accountsComments: AccountsComments) => CommentCidsToAccountsComments;
|
|
4
|
+
export declare const sanitizeAccountCommentForState: (comment: Comment) => any;
|
|
5
|
+
export declare const sanitizeStoredAccountComment: (comment: Comment) => any;
|
|
6
|
+
export declare const getAccountCommentsIndex: (accountComments: AccountComment[] | undefined) => AccountCommentsIndex;
|
|
7
|
+
export declare const getAccountsCommentsIndexes: (accountsComments: AccountsComments) => AccountsCommentsIndexes;
|
|
8
|
+
export declare const getAccountEditPropertySummary: (accountEdits: AccountEdit[] | undefined) => {
|
|
9
|
+
[propertyName: string]: import("../../types.js").AccountEditPropertySummary;
|
|
10
|
+
};
|
|
11
|
+
export declare const getAccountsEditsSummary: (accountEdits: {
|
|
12
|
+
[commentCidOrCommunityAddress: string]: AccountEdit[];
|
|
13
|
+
}) => AccountEditsSummary;
|
|
14
|
+
interface CommentLinkDimensions {
|
|
15
|
+
linkWidth?: number;
|
|
16
|
+
linkHeight?: number;
|
|
17
|
+
linkHtmlTagName?: "img" | "video" | "audio";
|
|
18
|
+
}
|
|
19
|
+
export declare const fetchCommentLinkDimensions: (link: string) => Promise<CommentLinkDimensions>;
|
|
20
|
+
export declare const getInitAccountCommentsToUpdate: (accountsComments: AccountsComments) => {
|
|
21
|
+
accountComment: AccountComment;
|
|
22
|
+
accountId: string;
|
|
23
|
+
}[];
|
|
24
|
+
export declare const getAccountCommentDepth: (comment: Comment) => number | undefined;
|
|
25
|
+
export declare const addShortAddressesToAccountComment: (comment: Comment) => Comment;
|
|
26
|
+
declare const utils: {
|
|
27
|
+
getAccountCommunities: (account: Account, communities: Communities) => any;
|
|
28
|
+
getCommentCidsToAccountsComments: (accountsComments: AccountsComments) => CommentCidsToAccountsComments;
|
|
29
|
+
getAccountCommentsIndex: (accountComments: AccountComment[] | undefined) => AccountCommentsIndex;
|
|
30
|
+
getAccountsCommentsIndexes: (accountsComments: AccountsComments) => AccountsCommentsIndexes;
|
|
31
|
+
sanitizeAccountCommentForState: (comment: Comment) => any;
|
|
32
|
+
sanitizeStoredAccountComment: (comment: Comment) => any;
|
|
33
|
+
getAccountEditPropertySummary: (accountEdits: AccountEdit[] | undefined) => {
|
|
34
|
+
[propertyName: string]: import("../../types.js").AccountEditPropertySummary;
|
|
35
|
+
};
|
|
36
|
+
getAccountsEditsSummary: (accountEdits: {
|
|
37
|
+
[commentCidOrCommunityAddress: string]: AccountEdit[];
|
|
38
|
+
}) => AccountEditsSummary;
|
|
39
|
+
fetchCommentLinkDimensions: (link: string) => Promise<CommentLinkDimensions>;
|
|
40
|
+
getInitAccountCommentsToUpdate: (accountsComments: AccountsComments) => {
|
|
41
|
+
accountComment: AccountComment;
|
|
42
|
+
accountId: string;
|
|
43
|
+
}[];
|
|
44
|
+
getAccountCommentDepth: (comment: Comment) => number | undefined;
|
|
45
|
+
addShortAddressesToAccountComment: (comment: Comment) => Comment;
|
|
46
|
+
promiseAny: <T>(promises: Promise<T>[]) => Promise<T>;
|
|
47
|
+
};
|
|
48
|
+
export default utils;
|
|
49
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +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"}
|