@bitsocial/bitsocial-react-hooks 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +5 -0
- package/dist/lib/pkc-js/pkc-js-mock-content.d.ts.map +1 -1
- package/dist/lib/pkc-js/pkc-js-mock-content.js +6 -0
- package/dist/lib/pkc-js/pkc-js-mock-content.js.map +1 -1
- package/dist/lib/pkc-js/pkc-js-mock.d.ts.map +1 -1
- package/dist/lib/pkc-js/pkc-js-mock.js +1 -3
- package/dist/lib/pkc-js/pkc-js-mock.js.map +1 -1
- package/dist/stores/communities/communities-store.d.ts +1 -0
- package/dist/stores/communities/communities-store.d.ts.map +1 -1
- package/dist/stores/communities/communities-store.js +92 -13
- package/dist/stores/communities/communities-store.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## [0.1.13](https://github.com/bitsocialnet/bitsocial-react-hooks/compare/v0.1.12...v0.1.13) (2026-05-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **communities:** suppress retriable load errors ([33c3dc1](https://github.com/bitsocialnet/bitsocial-react-hooks/commit/33c3dc1f870f56728e496906b0b2e60ce98128c2))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## [0.1.12](https://github.com/bitsocialnet/bitsocial-react-hooks/compare/v0.1.11...v0.1.12) (2026-05-26)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **communities:** ignore stale community errors ([#58](https://github.com/bitsocialnet/bitsocial-react-hooks/issues/58)) ([a37c79e](https://github.com/bitsocialnet/bitsocial-react-hooks/commit/a37c79e6ebae303ac723aa377a801fa3f6d5c745))
|
|
16
|
+
* **communities:** refresh active communities periodically ([b6a3e98](https://github.com/bitsocialnet/bitsocial-react-hooks/commit/b6a3e98e13dcacc571a535990c4edd86e4e8e9f9))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
1
20
|
## [0.1.11](https://github.com/bitsocialnet/bitsocial-react-hooks/compare/v0.1.10...v0.1.11) (2026-05-20)
|
|
2
21
|
|
|
3
22
|
|
package/README.md
CHANGED
|
@@ -137,6 +137,8 @@ useResolvedCommunityAddress({communityAddress: string, cache: boolean}): {resolv
|
|
|
137
137
|
|
|
138
138
|
Pass `{ publicKey, name }` when you have both so `pkc-js` can fetch through the public key and resolve the name in the background. `communityAddress`, `communityAddresses`, and `communityRefs` are no longer accepted by these hooks.
|
|
139
139
|
|
|
140
|
+
`useCommunity` only exposes community error events that are not superseded by a later `update` event. Transient fetch errors are delayed briefly before surfacing through `error` or `errors`.
|
|
141
|
+
|
|
140
142
|
#### Authors Hooks
|
|
141
143
|
|
|
142
144
|
```
|
|
@@ -411,6 +413,9 @@ const { communities } = useCommunities({
|
|
|
411
413
|
],
|
|
412
414
|
});
|
|
413
415
|
|
|
416
|
+
// fetched communities are refreshed immediately and then every 15 minutes
|
|
417
|
+
// so long-lived tabs keep following community IPNS updates
|
|
418
|
+
|
|
414
419
|
// use without affecting performance
|
|
415
420
|
const { communities: cachedCommunities } = useCommunities({
|
|
416
421
|
communities: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkc-js-mock-content.d.ts","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock-content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pkc-js-mock-content.d.ts","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock-content.ts"],"names":[],"mappings":"AA++CA,QAAA,MAAM,SAAS,EAAE,GAEhB,CAAC;AAeF,eAAe,SAAS,CAAC"}
|
|
@@ -1002,7 +1002,11 @@ class Community extends EventEmitter {
|
|
|
1002
1002
|
if (this._getCommunityOnFirstUpdate) {
|
|
1003
1003
|
return this.simulateGetCommunityOnFirstUpdateEvent();
|
|
1004
1004
|
}
|
|
1005
|
+
// @ts-ignore
|
|
1006
|
+
this.updating = false;
|
|
1007
|
+
this.updatingState = "succeeded";
|
|
1005
1008
|
this.emit("update", this);
|
|
1009
|
+
this.emit("updatingstatechange", "succeeded");
|
|
1006
1010
|
}
|
|
1007
1011
|
simulateGetCommunityOnFirstUpdateEvent() {
|
|
1008
1012
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1018,6 +1022,8 @@ class Community extends EventEmitter {
|
|
|
1018
1022
|
this[prop] = props[prop];
|
|
1019
1023
|
}
|
|
1020
1024
|
this.posts.getPage = community.posts.getPage;
|
|
1025
|
+
// @ts-ignore
|
|
1026
|
+
this.updating = false;
|
|
1021
1027
|
this.updatingState = "succeeded";
|
|
1022
1028
|
this.emit("update", this);
|
|
1023
1029
|
this.emit("updatingstatechange", "succeeded");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkc-js-mock-content.js","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock-content.ts"],"names":[],"mappings":"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","sourcesContent":["import markdownExample from \"./fixtures/markdown-example\";\nimport EventEmitter from \"events\";\nimport type { PkcResolveAuthorNameOptions, PkcResolveAuthorNameResult } from \"../pkc-types\";\nimport assert from \"assert\";\nimport { sha256 } from \"multiformats/hashes/sha2\";\nimport { fromString as uint8ArrayFromString } from \"uint8arrays/from-string\";\nimport { toString as uint8ArrayToString } from \"uint8arrays/to-string\";\n\n// changeable with env variable so the frontend can test with different latencies\nconst doubleMedia = Boolean(process.env.REACT_APP_BITSOCIAL_REACT_HOOKS_MOCK_CONTENT_DOUBLE_MEDIA);\nconst loadingTime = Number(\n process.env.REACT_APP_BITSOCIAL_REACT_HOOKS_MOCK_CONTENT_LOADING_TIME || 100,\n);\nconst simulateLoadingTime = () => new Promise((r) => setTimeout(r, loadingTime));\nconst NOW = 1679800000;\nconst DAY = 60 * 60 * 24;\n\n// TODO: should delete this eventually to reduce npm package size\nlet captchaImageBase64 =\n \"iVBORw0KGgoAAAANSUhEUgAAAJYAAAAyCAMAAACJUtIoAAAAY1BMVEX////y8vLm5ub39/fr7Ozf39/a29u/6c256MjV8N7v+fL0+/bU1dXO7tnp9+7e8+TJ7NTOzs7E69Gt5L+I26ag4bfk9en3/fmS3Kyo4rx42J2Z37LI38/AwMDR5tip1Li+1cUdWDCzAAAEkElEQVRYw+1Y6ZKjIBBuGuTyPqKZHLP7/k+5KrhIUEwms1X7Y76pMYVg23x9IvzgZfQN/I/QXavhP0SXyh6+AdQbEYS3UJ1TkC/zlbDxEtOD7Q8JnQRMFxYzooL0A46APhlZEizw71A2X+kyu5pBHC8JMUJ3ITqpu0O6GPqbRU8l3CM1CdnCjC0a8Yil80pdLinEMXBc5BMCuwaMUejYimzHoZSgzzJ90oaY8HCW7BmD0ug9QmAXxWlULW9yM+IbgqyHUjJJsuZYyWZu6xEwc3keaqTqCoUJx5puCx1vo1GAWPUf1GI8CRhk6IZZQM8RdCu6HiBvlgCCjaetWhZYo28JkvmvpBO/iD5bNLBFHPnsW1oq7mQGoGSlosdqYB+bARiDb4H6NRiZ6AkM+SdG8Vf9BckXK6RQxsVrStF3etxx5Vf8BdGLlBfQS233xXx6SODRHm9oh6HeSLcyScJejIAmn0mgFMoEvWISS+wZcT8ecPpngVrInmPMLdGymKvSubv9TVLM5gVzY8ObOVt+aIJe0kRqdHPp5wVDUveIyRVQFvKTgI1rV6LjIIDJlCsy3IoXDiEyElUrI7UbpbI05jRVjK2oPwJmWcLgzk0W3u/Jnt8p8UplMZLGs0DaEdgcLEiMX3tlHHcKSHQeWIZr71aikfWdvdOoIkdMVtGM0QxG79v2rDPf96vLZ2j5/c33Hyp4EyO46UbJhulIzR55JOSv5zC27DftVFvs2/yxAKVdc833wps9MJBs+A4NWk/3GJ34tQ91AyhRPHeoYAnvAPKT3qE2XpFqujVh5lzcWSHXG7KIYo9qXfTUvqU7mWMPSW3UigO5YzXlk4LPKKYrKcWlVRrKFg4RngQyAnEkuC6opqDFFUuVEGriSKoiF+KSD48+ovTDzr36QP1WarclQPBhFbMFRxt9zfaGUohKr6spVB/NeK9fc9OdWzW4Vsz3SqSmPfsK+NRcm/iXp/EX61FO34im91Sfr+3E4OcvISxJjJ3Up7z+FcXhDYS009+zKZWsTnnye6SkBA/WrfL5yjiAzsW4KAX4uAWd29tAuiQDnH2saNP8apzJZEzqKukp78tz5XVCfSVkdzOLLHnBoeor4HSdqKpWXiq918SneXv+NQStwulyFv2R+GNEtkMR2ip1mShoE5DMqcjDR6mbk5B58RBcizHCCvlqX0ZwDLWT1IAJCfdpKxglj2oZ32ukKNdFp1DDs0ffY5QSegW0RrZLMIRqWfGlkJVeeC26czMNCI00Wc5PWRL7mpCezS2vC6Cx7VVnWawdUEqFprjz26l85qOKVSvqYH45DuMrnKG31q+Vn0I2o6YdRxi2zjCIkQO0I9FbpfX+p6wQDGcy9eB9nmCQKgmncpee0KoB8LhvHuhO2xM6Dnd32ms+uIS9xp0cbpvgYfBiQDh/KK585TdkWSSr6qpgA/SehQY8BllUQePfPFjACa53SO7rjo5YCqoKoBgng+xHMoQvIJtOJJMkNPI43fIGut0H0toOmJJLQDF4C+6d098XwZcn+9ZmsO9SC96Bc5TUSvvBD/49/gDEMCEP8TccuAAAAABJRU5ErkJggg==\";\n\nconst commentTitles = [\n `Own a Piece of Digital History- Winamp Is Now Selling Its Original 1.0 Skin as an NFT, Iconic Player “was the go-to music player everybody was using at the beginning of the history of digital music and was instrumental in helping the .mp3 become mainstream”.`,\n 'Buyer of \"Pepe the Frog\" NFT files US$500,000 lawsuit after creator releases identical NFTs for free',\n \"$5,100,000,000 Bitcoin Whale enters massive crypto accumulation mode\",\n \"Two Big Developments in Brave Browser\",\n \"🤡\",\n];\n\nconst commentContents = [\n `First of all, the sentiment in this sub concerning moons seems very __polarized__. Some people think they are a genius idea and others think they are making this sub this sub worse because of “moon farming.” which camp are you in? \n\nSecond, how/where can you sell them. And third c/eEY1MhxPNyvt, how many upvotes=one moon, some people have so many when I’m sitting here at 17.\n\n**Personally** I think Reddit is ahead of the _curve_, in a couple years I could easily see every social media platform incorporating their own coin into their interface. \n\nThink about it; it costs the company next to nothing, encourages users to spend more time and be more active on the platform, and capitalizes on their existing user base, skipping any need for marketing. \n\nu/BPNgj2dfHSn8 From the companies point of view it seems like a no brainer. p/reddit-screenshots.eth/c/QmeEY1MhxPNyvt5i8GVxZwqi11yweKuYFWyk1ST4GTKRnm\n\nCan people think of issues with this approach? For either the company or the consumer, because besides increased levels of spamming I don’t see much downside.`,\n \"What kind of messes up world is this. *Even* if they stop you, they would need some sort of seed phrase or private key to your account in order to get the funds.\",\n \"🤡\",\n `So real fast u/estebanabaroa.eth/c/QmeEY1MhxPNyvt5i8GVxZwqi11yweKuYFWyk1ST4GTKRnm, I'm not a legal person and this isn't legal advice. I'm just sharing what I found out. What is civil forfeiture In the USA basically the cops can take things if the suspect it could of been used in a crime (any crime even if there is no crime going on now or in the area and any evidence). Lets put it this way, in CA there is pot shops that used armor trucks to move their money (which many stores use). Pot shops in CA is legal, but the cops on a regular bases stopped the truck for stupid things like using the turn signal too early. They use civil forfeiture to take the cash. From there in all cases they send the stuff to the gov, and the gov gives the local cops a major amount of the value of the assets. Note in some states this is illegal like NC. But I seen in the past years where federal wants to cause a loophole using DEA to force cops by law to do it. But note if you travel through states with this being legal. Note this is actually is a huge problem in the USA. Even more for unbanked people and homeless. ALL lawyers and all people I talked to in legal/law thinks this is the ultimate forum of government theft, and this should be federally illegal. That the system is proven to be extremely abused just for the reason of bonuses and the ones taking the money keep a ton of it after it went through the system. My question Can the gov force you to unlock your phone in a civil forfeiture? This giving them access to your hot wallets. Can the gov take your crypto in a civil forfeiture since it is on the blockchain? It should be noted that with 2, there is no clear answer to this. Basically it came down to it has to be tested in courts or a law maker needs to make laws clearing this up. NOTE FOR ANY LAW MAKERS THAT WANT TO HELP WHO THEY REPRESENT, AND WANT TO MAKE A BILL TO HELP THEM GET REELECTED. FIX THIS What I found out So can they take your phone or hardware wallet? The answer to this seems to be yes. Can they force you to unlock your phone? The answer to this seems to be not without a warrant. Can they brute force, hack, or do whatever to get in after they taken the device in a civil forfeiture? The answer seems to be yes. Basically, the idea is that when this happens it now becomes gov property. And if the gov wants to break in their own property or wipe their end. There isn't jack you can do to stop them expect remote format the device (seriously look into this. You can do this with most phones.) Are they likely to break into your phone/hardware wallet if they take it? While there isn't really evidence of this happening yet. The likely if it was to happen then yes. The question is, do they know of a 0 day which will allow them to get in, and that answer to this is maybe. Like I've seen videos of people recovering their funds from their hardware wallet through taking apart something like a ledger, hooking up to given things, and doing a few other things. So lets not rule out they will have some way of doing just this. Because it is likely if they take one, then they most likely are taking as many as they see. Can the gov use civil forfeiture to get the crypto itself without going after the phone/hardware wallet? Chances are is no. Like they can't demand for the given crypto since they have no way of knowing the wallet address unless if you show them or after they taken the device. They have to prove in court they suspected x was used in some way with a crime. Not knowing the address prior to rules this out. So basically, don't talk to the legal people without a lawyer and don't give them more info than needed. Note: if they use the law to take the phone or hardware wallet, then they can make a case that maybe the crypto is part of the taking since you have direct control of the crypto using your phone. Therefore the crypto could've also been used in crime in some way in the same way the phone could've been. Basically, it is the argument of can they take the truck and the music CD inside thing. How to handle the situation? Don't talk to the cops about anything you don't have to. Note the laws, but in general if they ask you to get out of the car ask if it is a command. If they say yes, then get out. If they asked for documents, then give it (don't be an idiot, just give it to them even the technical bits you don't need to. You will just PO the cop which can cause problems.) Ask them if you can leave, and that you would like to leave. This indicates you aren't volunteering your stay, and in many states they have to be reasonable about the length of the stop and many cases they won't have enough time to do something stupid. When asked questions you don't have to answer say a lawyer friend told you to not talk to the cops while being questioned or at a stop. Never agree to them searching your car or you without a warrant. Never argue with them on the side of the road, the day for that is in court (meaning if they decided to arrest you, then let them and then wait to fight it in court since it is likely you can get a big paycheck if done right). Never be open about what you have. If they take the item using civil forfeiture, then it is likely any cash will be gone forever since some of these court cases can last for years. But you can and should fight them in court because there is a growing amount of cases which is forcing judges and others to look more into this and treat it more serious. If you can't afford a lawyer to fight, then there is a few groups that you can call depending on if you have military background, extreme poverty, and so on. But to be blunt, the best way to fight this risk is by getting law makers to make civil forfeiture illegal. BTW for people visiting the USA, you could face this problem.`,\n markdownExample,\n];\n\nconst commentLinks = [\n \"https://fortune.com/2022/03/16/bitcoin-200k-price-prediction-crypto-outlook/\",\n \"https://finance.yahoo.com/news/c2x-announces-25-million-funding-120000728.html\",\n \"https://finance.yahoo.com/news/adopting-crypto-legal-tender-signify-101309571.html\",\n \"https://x.com/pkcprotocol/status/1632113706015309825\",\n \"https://www.youtube.com/watch?v=jfKfPfyJRdk\",\n];\n\nconst mediaLinks = [\n \"https://upload.wikimedia.org/wikipedia/en/transcoded/b/bd/Exorcist_angiogram_scene.webm/Exorcist_angiogram_scene.webm.480p.vp9.webm\",\n \"https://upload.wikimedia.org/wikipedia/en/f/fa/2001_space_travel.ogv\",\n \"https://upload.wikimedia.org/wikipedia/en/e/e1/Don%27t_Look_Now_love_scene_.ogg\",\n \"https://upload.wikimedia.org/wikipedia/en/8/8a/Ellen_comes_out_airport.mp3\",\n \"https://upload.wikimedia.org/wikipedia/en/b/bf/Dave_Niehaus_Winning_Call_1995_AL_Division_Series.ogg\",\n];\n\nconst communityTitles = [\n \"The Ethereum investment community\",\n \"Cryptography news and discussions\",\n \"Memes\",\n \"🤡\",\n];\n\nconst communityDescriptions = [\n \"Welcome to /r/EthTrader, a 100% community driven sub. Here you can discuss Ethereum news, memes, investing, trading, miscellaneous market-related subjects and other relevant technology.\",\n \"Cryptography is the art of creating mathematical assurances for who can do what with data, including but not limited to encryption of messages such that only the key-holder can read it. Cryptography lives at an intersection of math and computer science. This subreddit covers the theory and practice of modern and *strong* cryptography, and it is a technical subreddit focused on the algorithms and implementations of cryptography.\",\n \"Memes\",\n \"🤡\",\n];\n\nconst urlSuffixes = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"#\",\n \"#/\",\n \"#?\",\n \"?\",\n \"?query\",\n \"#hash-value\",\n \"#hash-value?\",\n \"#hash-value?query=string\",\n \"#hash-value?query=string&yes=1\",\n \"?query=string\",\n \"?query=string&yes=1\",\n];\n\nconst firstNames = [\n \"james\",\n \"robert\",\n \"john\",\n \"michael\",\n \"william\",\n \"david\",\n \"richard\",\n \"joseph\",\n \"thomas\",\n \"charles\",\n \"christopher\",\n \"daniel\",\n \"matthew\",\n \"anthony\",\n \"mark\",\n \"donald\",\n \"steven\",\n \"paul\",\n \"andrew\",\n \"joshua\",\n];\n\nconst displayNames = [\n \"COVERCADIGMENTS!\",\n \"Everco__Evidehovi\",\n \"fermind-flashyte\",\n \"FlirtyraForeguiGoldhil_\",\n \"Hanmiddie Headro Herdman\",\n \"Hurigher Irongmug\",\n \"Islandvi Jumbinte\",\n \"Lackapac Lorvalow\",\n \"MarsEdgyMedprin\",\n \"parispn!!!\",\n \"personna\",\n \" popic😃\",\n \"Riderix\\n\",\n \"Romantec__\",\n \"Sellakuk23\",\n \"--TickoAim2$\",\n \"Transia4\\t\",\n \"Trippah+512\",\n \"😃\",\n \"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\",\n \"aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa\",\n];\n\nconst postFlairs = [\n { text: \"Analysis\" },\n { text: \"ADVICE\", textColor: \"#000000\", backgroundColor: \"#252850\" },\n { text: \"comedy\", textColor: \"#FFFFFF\", backgroundColor: \"#23282B\" },\n { text: \"General News\" },\n {\n text: \"Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam!!!!!!!!!!!!!!!!!!!!!!\",\n textColor: \"#FFFFFF\",\n backgroundColor: \"#5B3A29\",\n },\n { text: \"education\", textColor: \"#000000\", backgroundColor: \"#4A192C\" },\n { text: \"MARKETS\", backgroundColor: \"#F8F32B\" },\n { text: \"IMPORTANT!!!\", backgroundColor: \"#C35831\" },\n {\n text: \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n backgroundColor: \"#AF2B1E\",\n },\n { text: \"MOON 🌕\", backgroundColor: \"#D36E70\" },\n { text: \"video\", backgroundColor: \"#924E7D\" },\n];\n\nconst authorFlairs = [\n { text: \"SCAMMER\" },\n { text: \"Medical Doctor\", textColor: \"#000000\", backgroundColor: \"#252850\" },\n { text: \"pro\", textColor: \"#FFFFFF\", backgroundColor: \"#23282B\" },\n {\n text: \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n },\n { text: \"Probably a scammer\", textColor: \"#FFFFFF\", backgroundColor: \"#5B3A29\" },\n { text: \"loser\", textColor: \"#000000\", backgroundColor: \"#4A192C\" },\n { text: \"WINNER\", backgroundColor: \"#F8F32B\" },\n { text: \"IMPORTANT VIP!!!\", backgroundColor: \"#C35831\" },\n {\n text: \"BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN!!!!!!!!!!!!!!!!!!\",\n backgroundColor: \"#AF2B1E\",\n },\n { text: \"🌕\", backgroundColor: \"#D36E70\" },\n { text: \"creator\", backgroundColor: \"#924E7D\" },\n];\n\nconst reasons = [\n \"SPAM\",\n \"this is spam\",\n \"repeated spamming\",\n \"User is a known scammer\",\n \"NSFW\",\n \"SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM\",\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n];\n\nconst getCidHash = async (string: string) => {\n assert(string && typeof string === \"string\", `can't getCidHash '${string} not a string'`);\n const seed = await getNumberHash(string);\n const cid = await seedToCid(seed);\n return cid;\n};\n\nconst seedToCid = async (seed: number) => {\n assert(\n typeof seed === \"number\" && !Number.isNaN(seed) && seed >= 0,\n `seedToCid seed argument must be positive number not '${seed}'`,\n );\n let base10Seed = String(seed);\n\n // seed base10 string is usually too small for a cid, make it longer\n // the cid is usually around 46 chars in base58, so 80 chars in base10\n const base10SeedLength = 80;\n while (base10Seed.length < base10SeedLength) {\n base10Seed += base10Seed;\n }\n base10Seed = base10Seed.substring(0, base10SeedLength);\n\n const uint8Array = uint8ArrayFromString(base10Seed, \"base10\");\n const base58Cid = uint8ArrayToString(uint8Array, \"base58btc\");\n return base58Cid;\n};\n\n// fake hash with lots of collision for speed\nconst getNumberHash = async (string: string) => {\n assert(string && typeof string === \"string\", `can't getNumberHash '${string} not a string'`);\n let hash = 0;\n for (let i = 0; i < string.length; i++) {\n const char = string.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash &= hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n};\n\nclass _SeedIncrementer {\n seed: number;\n numbers: number[];\n index = 0;\n constructor(seed: number) {\n assert(\n typeof seed === \"number\" && !Number.isNaN(seed) && seed >= 0,\n `getNumberBetween seed argument must be positive number not '${seed}'`,\n );\n this.seed = seed;\n this.numbers = String(seed)\n .split(\"\")\n .map((number) => Number(number));\n }\n increment() {\n this.index++;\n const divider = this.numbers[this.index % this.numbers.length] + this.index;\n return Math.round(this.seed / divider);\n }\n}\nconst SeedIncrementer = (seed: number) => new _SeedIncrementer(seed);\n\nconst getNumberBetween = async (min: number, max: number, seed: number) => {\n assert(\n typeof seed === \"number\" && !Number.isNaN(seed) && seed >= 0,\n `getNumberBetween seed argument must be positive number not '${seed}'`,\n );\n\n // if the string is exponent, remove chars\n if (String(seed).match(/[^0-9]/)) {\n throw Error(`getNumberBetween seed too large '${seed}'`);\n }\n\n const number = Number(\"0.\" + seed);\n return Math.floor(number * (max - min + 1) + min);\n};\n\nconst getArrayItem = async (array: any[], seed: number) => {\n // const index = await getNumberBetween(0, array.length - 1, seed)\n const index = seed % array.length;\n return array[index];\n};\n\nconst getImageUrl = async (_seed: number) => {\n assert(\n typeof _seed === \"number\" && !Number.isNaN(_seed) && _seed >= 0,\n `getImageUrl seed argument must be positive number not '${_seed}'`,\n );\n const seed = SeedIncrementer(_seed);\n const jpg = `https://picsum.photos/seed/${await getNumberBetween(10, 2000, seed.increment())}/${await getNumberBetween(\n 10,\n 2000,\n seed.increment(),\n )}/${await getNumberBetween(10, 2000, seed.increment())}.jpg`;\n\n const webp = `https://picsum.photos/seed/${await getNumberBetween(10, 2000, seed.increment())}/${await getNumberBetween(\n 10,\n 2000,\n seed.increment(),\n )}/${await getNumberBetween(10, 2000, seed.increment())}.webp`;\n\n const imageUrls = [\n // jpg & webp\n jpg,\n jpg,\n webp,\n webp,\n \"https://samplelib.com/lib/preview/png/sample-bumblebee-400x300.png\", // png\n \"https://c.tenor.com/WHs8ooxWJUIAAAAM/really-great-example-right-here-echo-gaming.gif\", // gif\n \"https://filesamples.com/samples/image/bmp/sample_640%C3%97426.bmp\", // bmp\n \"https://brokensite.xyz/images/dog.png\", // broken image\n \"https://brokensite.xyz/images/dog.jpeg\", // broken jpeg\n ];\n const imageUrl =\n (await getArrayItem(imageUrls, seed.increment())) +\n (await getArrayItem(urlSuffixes, seed.increment()));\n return imageUrl;\n};\n\nconst getAuthorAddress = async (_seed: number) => {\n assert(\n typeof _seed === \"number\" && !Number.isNaN(_seed) && _seed >= 0,\n `getAuthorAddress seed argument must be positive number not '${_seed}'`,\n );\n const seed = SeedIncrementer(_seed);\n const hasEns = await getArrayItem([true, false, false, false], seed.increment());\n if (hasEns) {\n const text = await getArrayItem([...firstNames, ...displayNames], seed.increment());\n return (text.toLowerCase().replace(/[^a-z0-9]/g, \"\") || \"john\") + \".eth\";\n } else {\n const address = await seedToCid(seed.increment());\n return address;\n }\n};\n\nconst getAuthor = async (seed: string) => {\n const authorNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const author: any = {\n address: await getAuthorAddress(authorNumberSeed.increment()),\n };\n author.shortAddress = author.address.endsWith(\".eth\")\n ? author.address\n : author.address.substring(8, 20);\n const hasDisplayName = await getArrayItem(\n [true, true, true, false],\n authorNumberSeed.increment(),\n );\n if (hasDisplayName) {\n author.displayName = await getArrayItem(displayNames, authorNumberSeed.increment());\n }\n const rareTrue = [true, false, false, false, false, false, false, false];\n const hasNftAvatar = await getArrayItem(rareTrue, authorNumberSeed.increment());\n if (hasNftAvatar) {\n author.avatar = {\n chainTicker: \"eth\",\n address: await getArrayItem(\n [\n \"0xed5af388653567af2f388e6224dc7c4b3241c544\",\n \"0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d\",\n \"0x60e4d786628fea6478f785a6d7e704777c86a7c6\",\n \"0x79fcdef22feed20eddacbb2587640e45491b757f\",\n \"0x0000000000000000000000000000000000000dead\",\n ],\n authorNumberSeed.increment(),\n ),\n index: await getNumberBetween(1, 2000, authorNumberSeed.increment()),\n };\n }\n const hasFlair = await getArrayItem(rareTrue, authorNumberSeed.increment());\n if (hasFlair) {\n author.flair = await getArrayItem(authorFlairs, authorNumberSeed.increment());\n }\n return author;\n};\n\nconst getPostContent = async (seed: string) => {\n const postNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const postContent: any = {\n depth: 0,\n author: await getAuthor(String(postNumberSeed)),\n title: await getArrayItem(commentTitles, postNumberSeed.increment()),\n };\n const hasFlair = await getArrayItem([true, false, false, false], postNumberSeed.increment());\n if (hasFlair) {\n postContent.flair = await getArrayItem(postFlairs, postNumberSeed.increment());\n }\n let isLinkPost = await getArrayItem([true, false], postNumberSeed.increment());\n if (doubleMedia && !isLinkPost) {\n isLinkPost = await getArrayItem([true, false], postNumberSeed.increment());\n }\n if (isLinkPost) {\n postContent.link = await getArrayItem(commentLinks, postNumberSeed.increment());\n let linkIsImage = await getArrayItem([true, false], postNumberSeed.increment());\n if (doubleMedia && !linkIsImage) {\n linkIsImage = await getArrayItem([true, false], postNumberSeed.increment());\n }\n if (linkIsImage) {\n postContent.link = await getImageUrl(postNumberSeed.increment());\n\n // add video and audio\n const imageIsMedia = await getArrayItem(\n [true, false, false, false],\n postNumberSeed.increment(),\n );\n if (imageIsMedia) {\n postContent.link = await getArrayItem(mediaLinks, postNumberSeed.increment());\n // add at least one example of video with width and height\n if (postContent.link === mediaLinks[0]) {\n postContent.linkWidth = 852;\n postContent.linkHeight = 480;\n }\n }\n // if link is image, add width and height\n else {\n const [, linkWidth, linkHeight] = (\n postContent.link.match(/\\d+\\/\\d+\\/\\d+/)?.[0] || \"\"\n ).split(\"/\");\n postContent.linkWidth = Number(linkWidth);\n postContent.linkHeight = Number(linkHeight);\n }\n }\n const hasThumbnail = await getArrayItem([true, true, true, false], postNumberSeed.increment());\n if (!linkIsImage && hasThumbnail) {\n postContent.thumbnailUrl = await getImageUrl(postNumberSeed.increment());\n }\n }\n // else is text post\n else {\n postContent.content = await getArrayItem(commentContents, postNumberSeed.increment());\n const hasQuote = await getArrayItem([true, false, false, false], postNumberSeed.increment());\n if (hasQuote) {\n const max = 7;\n const lines = postContent.content.split(\"\\n\");\n for (const i in lines) {\n const lineIsQuote = await getArrayItem([true, false], postNumberSeed.increment());\n if (lineIsQuote) {\n lines[i] = \">\" + lines[i];\n }\n if (Number(i) > max) {\n break;\n }\n }\n postContent.content = lines.join(\"\\n\");\n }\n }\n return postContent;\n};\n\nconst getReplyContent = async (getReplyContentOptions: any, seed: string) => {\n const replyNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const { depth, parentCid, postCid } = getReplyContentOptions;\n const author = await getAuthor(String(replyNumberSeed.seed));\n let content = await getArrayItem(commentContents, replyNumberSeed.increment());\n\n const hasQuote = await getArrayItem([true, false, false, false], replyNumberSeed.increment());\n if (hasQuote) {\n const max = 7;\n const lines = content.split(\"\\n\");\n for (const i in lines) {\n const lineIsQuote = await getArrayItem([true, false], replyNumberSeed.increment());\n if (lineIsQuote) {\n lines[i] = \">\" + lines[i];\n }\n if (Number(i) > max) {\n break;\n }\n }\n content = lines.join(\"\\n\");\n }\n\n const replyContent: any = { content, author, depth, parentCid, postCid };\n\n const hasLink = await getArrayItem([true, false, false, false], replyNumberSeed.increment());\n if (hasLink) {\n replyContent.link = await getArrayItem(commentLinks, replyNumberSeed.increment());\n const linkIsImage = await getArrayItem([true, false], replyNumberSeed.increment());\n if (linkIsImage) {\n replyContent.link = await getImageUrl(replyNumberSeed.increment());\n\n // add video and audio\n const imageIsMedia = await getArrayItem(\n [true, false, false, false],\n replyNumberSeed.increment(),\n );\n if (imageIsMedia) {\n replyContent.link = await getArrayItem(mediaLinks, replyNumberSeed.increment());\n }\n }\n const hasThumbnail = await getArrayItem([true, true, true, false], replyNumberSeed.increment());\n if (!linkIsImage && hasThumbnail) {\n replyContent.thumbnailUrl = await getImageUrl(replyNumberSeed.increment());\n }\n }\n\n const hasTitle = await getArrayItem(\n [true, false, false, false, false, false, false],\n replyNumberSeed.increment(),\n );\n if (hasTitle) {\n replyContent.title = await getArrayItem(commentTitles, replyNumberSeed.increment());\n }\n\n return replyContent;\n};\n\nconst getCommunityContent = async (seed: string) => {\n const communityNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const community: any = {\n pubsubTopic: await seedToCid(communityNumberSeed.seed),\n };\n\n const hasChallengeTypes = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasChallengeTypes) {\n community.challengeTypes = [\"image\"];\n }\n\n const hasRoles = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasRoles) {\n community.roles = {\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"owner\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"admin\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n };\n }\n\n const title = await getArrayItem(\n [undefined, ...communityTitles],\n communityNumberSeed.increment(),\n );\n if (title) {\n community.title = title;\n }\n const description = await getArrayItem(\n [undefined, ...communityDescriptions],\n communityNumberSeed.increment(),\n );\n if (description) {\n community.description = description;\n }\n\n const hasPostFlairs = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasPostFlairs) {\n community.flairs = { post: postFlairs };\n }\n const hasAuthorFlairs = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasAuthorFlairs) {\n community.flairs = { post: community.flairs?.post, author: authorFlairs };\n }\n\n const hasSuggested = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasSuggested) {\n community.suggested = {\n primaryColor: (await getArrayItem(postFlairs, communityNumberSeed.increment()))\n .backgroundColor,\n secondaryColor: (await getArrayItem(postFlairs, communityNumberSeed.increment()))\n .backgroundColor,\n avatarUrl: await getArrayItem(\n [undefined, await getImageUrl(communityNumberSeed.increment())],\n communityNumberSeed.increment(),\n ),\n bannerUrl: await getArrayItem(\n [undefined, await getImageUrl(communityNumberSeed.increment())],\n communityNumberSeed.increment(),\n ),\n backgroundUrl: await getArrayItem(\n [undefined, await getImageUrl(communityNumberSeed.increment())],\n communityNumberSeed.increment(),\n ),\n language: await getArrayItem(\n [undefined, undefined, \"en\", \"en\", \"es\", \"ru\"],\n communityNumberSeed.increment(),\n ),\n };\n }\n\n const hasFeatures = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasFeatures) {\n community.features = {\n noVideos: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noSpoilers: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noImages: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noVideoReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noSpoilerReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noImageReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noPolls: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noCrossposts: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noUpvotes: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noDownvotes: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noAuthors: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n anonymousAuthors: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noNestedReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n safeForWork: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n authorFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n requireAuthorFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n postFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n requirePostFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noMarkdownImages: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noMarkdownVideos: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n markdownImageReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n markdownVideoReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n };\n }\n\n const hasRules = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasRules) {\n community.rules = [\n \"no spam\",\n \"be nice\",\n \"Do not link to CNN.\",\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n \"OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO \",\n ];\n }\n\n const isOnline = await getArrayItem([true, false], communityNumberSeed.increment());\n if (isOnline) {\n // updated in last 1h\n community.updatedAt =\n Math.round(Date.now() / 1000) -\n (await getNumberBetween(1, 60 * 60, communityNumberSeed.increment()));\n } else {\n // updated in last month\n community.updatedAt =\n Math.round(Date.now() / 1000) -\n (await getNumberBetween(60 * 60, 60 * 60 * 24 * 30, communityNumberSeed.increment()));\n }\n community.createdAt =\n community.updatedAt -\n (await getNumberBetween(1, 60 * 60 * 24 * 3000, communityNumberSeed.increment()));\n\n return community;\n};\n\n// for debugging slow bulk reply generation\nlet replyLoopCount = 0;\n\nconst getCommentUpdateContent = async (comment: any) => {\n const commentUpdateSeedNumber = SeedIncrementer(await getNumberHash(comment.cid));\n const upvotesPerUpdate = await getNumberBetween(1, 1000, commentUpdateSeedNumber.increment());\n const downvotesPerUpdate = await getNumberBetween(1, 1000, commentUpdateSeedNumber.increment());\n\n const commentUpdateContent: any = {};\n // simulate finding vote counts on an IPNS record\n commentUpdateContent.upvoteCount =\n typeof comment.upvoteCount === \"number\"\n ? comment.upvoteCount + upvotesPerUpdate\n : upvotesPerUpdate;\n commentUpdateContent.downvoteCount =\n typeof comment.downvoteCount === \"number\"\n ? comment.downvoteCount + downvotesPerUpdate\n : downvotesPerUpdate;\n\n // find the number of replies\n commentUpdateContent.replyCount = 0;\n const hasReplies = await getArrayItem(\n [true, false, false, false],\n commentUpdateSeedNumber.increment(),\n );\n if (hasReplies) {\n commentUpdateContent.replyCount = await getNumberBetween(\n 0,\n 30,\n commentUpdateSeedNumber.increment(),\n );\n if (comment.depth > 0) {\n commentUpdateContent.replyCount = commentUpdateContent.replyCount / (comment.depth + 1) ** 2;\n }\n if (commentUpdateContent.replyCount < 1) {\n commentUpdateContent.replyCount = 0;\n }\n commentUpdateContent.replyCount = Math.round(commentUpdateContent.replyCount);\n }\n\n // simulate finding replies from IPNS record\n commentUpdateContent.replies = new Pages({ comment });\n commentUpdateContent.replies.pages.best = { nextCid: undefined, comments: [] };\n const getReplyContentOptions = {\n depth: comment.depth + 1,\n parentCid: comment.cid,\n postCid: comment.cid,\n };\n let replyCount = commentUpdateContent.replyCount;\n const replyCids: any = new Set();\n while (replyCount-- > 0) {\n // console.log({replyLoopCount: replyLoopCount++, replyCount: commentUpdateContent.replyCount, depth: comment.depth, cid: comment.cid, index: replyCount})\n const cid = await seedToCid(await getNumberHash(comment.cid + replyCount));\n const replyContent = await getReplyContent(\n getReplyContentOptions,\n cid + \"replycontent\" + replyCount,\n );\n const reply = {\n cid,\n shortCid: cid.substring(2, 14),\n timestamp: await getNumberBetween(\n comment.timestamp,\n NOW,\n commentUpdateSeedNumber.increment(),\n ),\n ...replyContent,\n communityAddress: comment.communityAddress || \"memes.eth\",\n };\n if (replyCids.has(reply.cid)) {\n console.error(`mock content error: duplicate reply cid '${reply.cid}'`);\n }\n replyCids.add(reply.cid);\n const replyUpdateContent = await getCommentUpdateContent(reply);\n commentUpdateContent.replies.pages.best.comments.push({ ...reply, ...replyUpdateContent });\n }\n\n // if post with lots of replies, add replies pages\n if (commentUpdateContent.replyCount >= 15 && comment.depth === 0) {\n commentUpdateContent.replies.pages.best.nextCid = await seedToCid(\n await getNumberHash(comment.cid + \"bestpagecid2\"),\n );\n commentUpdateContent.replies.pageCids = {\n new: await seedToCid(await getNumberHash(comment.cid + \"newpagecid\")),\n old: await seedToCid(await getNumberHash(comment.cid + \"oldpagecid\")),\n };\n }\n\n const rareTrue = [\n true,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n ];\n\n const isSpoiler = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n if (isSpoiler) {\n commentUpdateContent.spoiler = true;\n }\n\n const isEdited = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n if (isEdited && !comment.edit) {\n commentUpdateContent.edit = {\n commentCid: comment.cid,\n timestamp: comment.timestamp + 60 * 30,\n reason: \"I wanted to know why the downvotes?\",\n author: comment.author,\n };\n commentUpdateContent.original = {\n content: comment.content,\n };\n commentUpdateContent.content = (comment.content || \"\") + \" WHY DOWNVOTES!?\";\n }\n\n const isDeleted = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isPinned = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isRemoved = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isLocked = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isPurged = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n\n if (isDeleted) {\n commentUpdateContent.deleted = true;\n } else if (isPinned) {\n commentUpdateContent.pinned = true;\n } else if (isRemoved) {\n commentUpdateContent.removed = true;\n const hasReason = await getArrayItem([true, false], commentUpdateSeedNumber.increment());\n if (hasReason) {\n commentUpdateContent.reason = await getArrayItem(\n reasons,\n commentUpdateSeedNumber.increment(),\n );\n }\n } else if (isLocked && comment.depth === 0) {\n commentUpdateContent.locked = true;\n const hasReason = await getArrayItem([true, false], commentUpdateSeedNumber.increment());\n if (hasReason) {\n commentUpdateContent.reason = await getArrayItem(\n reasons,\n commentUpdateSeedNumber.increment(),\n );\n }\n } else if (isPurged) {\n commentUpdateContent.purged = true;\n const hasReason = await getArrayItem([true, false], commentUpdateSeedNumber.increment());\n if (hasReason) {\n commentUpdateContent.reason = await getArrayItem(\n reasons,\n commentUpdateSeedNumber.increment(),\n );\n }\n }\n\n commentUpdateContent.updatedAt = Math.round(Date.now() / 1000);\n\n return commentUpdateContent;\n};\n\nconst pageCommentCids: any = new Set();\nconst getCommentsPage = async (pageCid: string, communityOrComment: any) => {\n const communityAddress = communityOrComment.address || communityOrComment.communityAddress;\n const commentsPageSeedNumber = SeedIncrementer(await getNumberHash(pageCid));\n const page: any = {\n nextCid: await seedToCid(commentsPageSeedNumber.increment()),\n comments: [],\n };\n const postCount = 100;\n let index = 0;\n const pkc = new PKC();\n while (index++ < postCount) {\n const cid = await seedToCid(await getNumberHash(pageCid + index));\n // debug message\n if (pageCommentCids.has(cid)) {\n console.error(`mock content error: duplicate page comment cid '${cid}'`);\n }\n pageCommentCids.add(cid);\n // comment = {...comment, ...(await getPostContent(comment.cid)), ...(await getCommentUpdateContent(comment))}\n const comment: any = await pkc.getComment({ cid });\n comment.communityAddress = communityAddress;\n const commentUpdateContent: any = await getCommentUpdateContent(comment);\n for (const prop in commentUpdateContent) {\n comment[prop] = commentUpdateContent[prop];\n }\n page.comments.push(comment);\n }\n return page;\n};\n\n// array of communities probably created by the user\nconst createdCommunities: any = {};\n\nclass NameResolverClient extends EventEmitter {\n state = \"stopped\";\n}\n\nclass PKC extends EventEmitter {\n nameResolvers: any[];\n _clientsManager: {\n clients: {\n nameResolvers: { [resolverKey: string]: NameResolverClient };\n };\n };\n\n constructor(options: any = {}) {\n super();\n this.nameResolvers = options?.nameResolvers || [];\n this._clientsManager = {\n clients: {\n nameResolvers: this.nameResolvers.reduce(\n (resolverClients: { [resolverKey: string]: NameResolverClient }, resolver: any) => ({\n ...resolverClients,\n [resolver.key]: new NameResolverClient(),\n }),\n {},\n ),\n },\n };\n }\n\n async createSigner() {\n return {\n privateKey: \"private key\",\n address: await getCidHash(String(Math.random())),\n };\n }\n\n async resolveAuthorAddress(options: { address: string }) {\n const resolver = this.nameResolvers.find((nameResolver) =>\n nameResolver?.canResolve?.({ name: options.address }),\n );\n const resolverClient = resolver && this._clientsManager.clients.nameResolvers[resolver.key];\n if (resolverClient) {\n resolverClient.state = \"resolving-author-name\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n await new Promise((resolve) => setTimeout(resolve, 10));\n if (resolverClient) {\n resolverClient.state = \"stopped\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n return \"resolved author address\";\n }\n async resolveAuthorName(\n options: PkcResolveAuthorNameOptions,\n ): Promise<PkcResolveAuthorNameResult> {\n const resolvedAuthorName = await this.resolveAuthorAddress({ address: options.name });\n return { resolvedAuthorName };\n }\n\n async createCommunity(createCommunityOptions: any) {\n const communityIdentifier =\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey;\n\n // if the only argument is {address}, the user didn't create the sub, it's a fetched sub\n if (createCommunityOptions?.address && Object.keys(createCommunityOptions).length === 1) {\n return new Community(createCommunityOptions);\n }\n\n const signer = await this.createSigner();\n const community = new Community({ signer, ...createCommunityOptions });\n\n // keep a list of communities the user probably created himself to use with pkc.communities\n if (!communityIdentifier) {\n createdCommunities[community.address || \"\"] = community;\n }\n\n return community;\n }\n\n async getCommunity(options: { address: string }) {\n const address = options?.address;\n const createCommunityOptions = { address };\n const community: any = new Community(createCommunityOptions);\n const hotPageCid = await seedToCid(await getNumberHash(address + \"hotpagecid\"));\n community.posts.pages.hot = await getCommentsPage(hotPageCid, community);\n community.posts.pageCids = {\n hot: await seedToCid(await getNumberHash(address + \"hotpagecid2\")),\n topAll: await seedToCid(await getNumberHash(address + \"topallpagecid\")),\n new: await seedToCid(await getNumberHash(address + \"newpagecid\")),\n active: await seedToCid(await getNumberHash(address + \"activepagecid\")),\n };\n\n const communityContent = await getCommunityContent(address);\n // add extra props\n for (const prop in communityContent) {\n community[prop] = communityContent[prop];\n }\n return community;\n }\n\n // TODO: implement event communitieschange\n get communities() {\n const communityAddresses = Object.keys(createdCommunities);\n return communityAddresses;\n }\n\n async createComment(createCommentOptions: any) {\n return new Comment(createCommentOptions);\n }\n\n async getComment(options: { cid: string }) {\n const cid = options?.cid;\n const commentSeedNumber = SeedIncrementer(await getNumberHash(cid + \"getcomment\"));\n let commentContent: any = await getPostContent(cid + \"postcontent\");\n const isReply = cid.endsWith(\"reply\");\n if (isReply) {\n const depth = await getNumberBetween(1, 10, commentSeedNumber.increment());\n const parentCid = await seedToCid(commentSeedNumber.increment());\n const postCid = depth === 1 ? parentCid : await seedToCid(commentSeedNumber.increment());\n const getReplyContentOptions = { depth, parentCid, postCid };\n commentContent = await getReplyContent(getReplyContentOptions, cid + \"replycontent\");\n }\n const createCommentOptions = {\n cid,\n timestamp: await getNumberBetween(NOW - DAY * 30, NOW, commentSeedNumber.increment()),\n communityAddress: \"memes.eth\",\n ...commentContent,\n };\n const comment = new Comment(createCommentOptions);\n // add missing props from createCommentOptions\n for (const prop in createCommentOptions) {\n // @ts-ignore\n comment[prop] = createCommentOptions[prop];\n }\n return comment;\n }\n\n async createVote(publishVoteOptions: any) {\n return new Vote(publishVoteOptions);\n }\n\n async createCommentEdit(publishCommentEditOptions: any) {\n return new CommentEdit(publishCommentEditOptions);\n }\n\n async createCommunityEdit() {\n return new CommunityEdit();\n }\n\n async fetchCid(options: { cid: string }) {\n const cid = options?.cid;\n if (cid?.startsWith(\"statscid\")) {\n return JSON.stringify({\n hourActiveUserCount: 1,\n dayActiveUserCount: 11,\n weekActiveUserCount: 111,\n monthActiveUserCount: 1111,\n yearActiveUserCount: 11111,\n allActiveUserCount: 111111,\n hourPostCount: 2,\n dayPostCount: 22,\n weekPostCount: 222,\n monthPostCount: 2222,\n yearPostCount: 22222,\n allPostCount: 222222,\n });\n }\n throw Error(`pkc.fetchCid not implemented in mock content for cid '${cid}'`);\n }\n\n async pubsubSubscribe(communityAddress: string) {}\n async pubsubUnsubscribe(communityAddress: string) {}\n\n clients = (() => {\n const pkcRpcClients = {\n \"http://localhost:9138\": new PkcRpcClient(),\n };\n return {\n pkcRpcClients,\n };\n })();\n\n async validateComment(comment: any, validateCommentOptions: any) {}\n}\n\nclass PkcRpcClient extends EventEmitter {\n state = \"connecting\";\n settings: any = undefined;\n constructor() {\n super();\n // simulate connecting to the rpc\n setTimeout(() => {\n this.state = \"connected\";\n this.settings = { challenges: { \"text-math\": {} } };\n this.emit(\"statechange\", this.state);\n this.emit(\"settingschange\", this.settings);\n }, 5000);\n }\n\n async setSettings(settings: any) {\n this.settings = settings;\n this.emit(\"settingschange\", this.settings);\n }\n}\n\nclass Pages {\n pageCids: any = {};\n pages: any = {};\n community: any;\n comment: any;\n\n constructor(pagesOptions?: any) {\n Object.defineProperty(this, \"community\", {\n value: pagesOptions?.community,\n enumerable: false,\n });\n Object.defineProperty(this, \"comment\", { value: pagesOptions?.comment, enumerable: false });\n }\n\n async getPage(options: { cid: string }) {\n const cid = options?.cid;\n // need to wait twice otherwise react renders too fast and fetches too many pages in advance\n await simulateLoadingTime();\n return getCommentsPage(cid, this.community || this.comment);\n }\n\n async validatePage(page: any) {}\n}\n\nclass Community extends EventEmitter {\n address: string | undefined;\n title: string | undefined;\n description: string | undefined;\n pageCids: any;\n posts: Pages;\n pubsubTopic: string | undefined;\n createdAt: number | undefined;\n updatedAt: number | undefined;\n challengeTypes: string[] | undefined;\n roles: any | undefined;\n flairs: any | undefined;\n suggested: any | undefined;\n features: any | undefined;\n rules: string[] | undefined;\n signer: any | undefined;\n shortAddress: string | undefined;\n statsCid: string | undefined;\n _getCommunityOnFirstUpdate = false;\n updatingState: string | undefined;\n\n constructor(createCommunityOptions?: any) {\n super();\n this.address =\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey;\n this.pubsubTopic = createCommunityOptions?.pubsubTopic;\n this.createdAt = createCommunityOptions?.createdAt;\n this.updatedAt = createCommunityOptions?.updatedAt;\n this.challengeTypes = createCommunityOptions?.challengeTypes;\n this.roles = createCommunityOptions?.roles;\n this.flairs = createCommunityOptions?.flairs;\n this.suggested = createCommunityOptions?.suggested;\n this.features = createCommunityOptions?.features;\n this.rules = createCommunityOptions?.rules;\n this.title = createCommunityOptions?.title;\n this.description = createCommunityOptions?.description;\n this.statsCid = \"statscid\";\n\n for (const prop in createCommunityOptions) {\n if (createCommunityOptions[prop] !== undefined) {\n // @ts-ignore\n this[prop] = createCommunityOptions[prop];\n }\n }\n this.posts = new Pages({ community: this });\n\n // add community.posts from createCommunityOptions\n if (createCommunityOptions?.posts?.pages) {\n this.posts.pages = createCommunityOptions?.posts?.pages;\n }\n if (createCommunityOptions?.posts?.pageCids) {\n this.posts.pageCids = createCommunityOptions?.posts?.pageCids;\n }\n\n if (!this.address && this.signer?.address) {\n this.address = this.signer.address;\n }\n this.shortAddress = this.address?.endsWith(\".eth\")\n ? this.address\n : this.address?.substring(8, 20);\n\n Object.defineProperty(this, \"updating\", { enumerable: false, writable: true });\n // @ts-ignore\n this.updating = false;\n\n // if the only argument is {address}, it means the first update should use getCommunity()\n if (createCommunityOptions?.address && Object.keys(createCommunityOptions).length === 1) {\n this._getCommunityOnFirstUpdate = true;\n }\n }\n\n async edit(editCommunityOptions: any) {\n assert(\n editCommunityOptions && typeof editCommunityOptions === \"object\",\n `invalid editCommunityOptions '${editCommunityOptions}'`,\n );\n for (const prop in editCommunityOptions) {\n if (editCommunityOptions[prop] !== undefined) {\n // @ts-ignore\n this[prop] = editCommunityOptions[prop];\n }\n }\n }\n\n async update() {\n if (!this.address) {\n throw Error(`can't update without community.address`);\n }\n // don't update twice\n // @ts-ignore\n if (this.updating) {\n return;\n }\n // @ts-ignore\n this.updating = true;\n this.updatingState = \"fetching-ipns\";\n this.emit(\"updatingstatechange\", \"fetching-ipns\");\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n async delete() {\n if (this.address) {\n delete createdCommunities[this.address];\n }\n }\n\n simulateUpdateEvent() {\n if (this._getCommunityOnFirstUpdate) {\n return this.simulateGetCommunityOnFirstUpdateEvent();\n }\n this.emit(\"update\", this);\n }\n\n async simulateGetCommunityOnFirstUpdateEvent() {\n this._getCommunityOnFirstUpdate = false;\n\n // @ts-ignore\n const community = await new PKC().getCommunity({ address: this.address });\n const props = JSON.parse(JSON.stringify(community));\n for (const prop in props) {\n if (prop.startsWith(\"_\")) {\n continue;\n }\n // @ts-ignore\n this[prop] = props[prop];\n }\n this.posts.getPage = community.posts.getPage;\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n\n this.simulateUpdateEvent();\n }\n}\n\nlet challengeRequestCount = 0;\nlet challengeAnswerCount = 0;\n\nclass Publication extends EventEmitter {\n timestamp: number | undefined;\n content: string | undefined;\n cid: string | undefined;\n title: string | undefined;\n link: string | undefined;\n challengeRequestId!: string;\n challengeAnswerId!: string;\n\n constructor() {\n super();\n Object.defineProperty(this, \"challengeRequestId\", { enumerable: false, writable: true });\n Object.defineProperty(this, \"challengeAnswerId\", { enumerable: false, writable: true });\n this.challengeRequestId = `r${++challengeRequestCount}`;\n this.challengeAnswerId = `a${++challengeAnswerCount}`;\n }\n\n async publish() {\n await simulateLoadingTime();\n await this.simulateChallengeEvent();\n }\n\n async simulateChallengeEvent() {\n const challenges: any = [];\n const challengeCount = await getNumberBetween(\n 1,\n 3,\n await getNumberHash(this.challengeRequestId),\n );\n while (challenges.length < challengeCount) {\n challenges.push({ type: \"image/png\", challenge: captchaImageBase64 });\n }\n const challengeMessage = {\n type: \"CHALLENGE\",\n challengeRequestId: this.challengeRequestId,\n challenges,\n };\n this.emit(\"challenge\", challengeMessage, this);\n }\n\n async publishChallengeAnswers(challengeAnswers: string[]) {\n await simulateLoadingTime();\n this.simulateChallengeVerificationEvent();\n }\n\n async simulateChallengeVerificationEvent() {\n // if publication has content, create cid for this content and add it to comment and challengeVerificationMessage\n const cidSeed = `${this.content ?? \"\"}${this.title ?? \"\"}${this.link ?? \"\"}`;\n this.cid = cidSeed.length > 0 ? await getCidHash(`${cidSeed}cid`) : undefined;\n const commentUpdate = this.cid && { cid: this.cid };\n\n const challengeVerificationMessage = {\n type: \"CHALLENGEVERIFICATION\",\n challengeRequestId: this.challengeRequestId,\n challengeAnswerId: this.challengeAnswerId,\n challengeSuccess: true,\n commentUpdate,\n };\n this.emit(\"challengeverification\", challengeVerificationMessage, this);\n }\n\n stop() {\n if ((this as any).updating || (this as any).updatingState !== \"stopped\") {\n (this as any).state = \"stopped\";\n (this as any).updating = false;\n (this as any).updatingState = \"stopped\";\n this.emit(\"statechange\", \"stopped\");\n this.emit(\"updatingstatechange\", \"stopped\");\n }\n }\n}\n\nclass Comment extends Publication {\n author: any;\n updating: boolean;\n upvoteCount: number | undefined;\n downvoteCount: number | undefined;\n content: string | undefined;\n parentCid: string | undefined;\n replies: any;\n replyCount: number | undefined;\n postCid: string | undefined;\n depth: number | undefined;\n spoiler: boolean | undefined;\n flair: any | undefined;\n pinned: boolean | undefined;\n locked: boolean | undefined;\n deleted: boolean | undefined;\n removed: boolean | undefined;\n purged: boolean | undefined;\n edit: any;\n original: any;\n reason: string | undefined;\n shortCid: string | undefined;\n _getCommentOnFirstUpdate = false;\n updatingState: string | undefined;\n communityAddress: string | undefined;\n shortCommunityAddress: string | undefined;\n\n constructor(createCommentOptions?: any) {\n super();\n this.cid = createCommentOptions?.cid;\n this.upvoteCount = createCommentOptions?.upvoteCount;\n this.downvoteCount = createCommentOptions?.downvoteCount;\n this.content = createCommentOptions?.content;\n this.author = createCommentOptions?.author;\n this.timestamp = createCommentOptions?.timestamp;\n this.parentCid = createCommentOptions?.parentCid;\n this.postCid = createCommentOptions?.postCid;\n this.parentCid = createCommentOptions?.parentCid;\n this.depth = createCommentOptions?.depth;\n this.spoiler = createCommentOptions?.spoiler;\n this.flair = createCommentOptions?.flair;\n this.pinned = createCommentOptions?.pinned;\n this.locked = createCommentOptions?.locked;\n this.deleted = createCommentOptions?.deleted;\n this.removed = createCommentOptions?.removed;\n this.purged = createCommentOptions?.purged;\n this.reason = createCommentOptions?.reason;\n this.replies = new Pages({ comment: this });\n if (this.cid) {\n this.shortCid = this.cid.substring(2, 14);\n }\n\n Object.defineProperty(this, \"updating\", { enumerable: false, writable: true });\n // @ts-ignore\n this.updating = false;\n\n // add missing props from createCommentOptions\n for (const prop in createCommentOptions) {\n // @ts-ignore\n this[prop] = createCommentOptions[prop];\n }\n\n // if the only argument is {cid}, it means the first update should use getComment()\n if (createCommentOptions?.cid && Object.keys(createCommentOptions).length === 1) {\n this._getCommentOnFirstUpdate = true;\n }\n\n if (this.communityAddress) {\n this.shortCommunityAddress = this.communityAddress.substring(0, 12);\n }\n }\n\n async update() {\n // don't update twice\n // @ts-ignore\n if (this.updating) {\n return;\n }\n // @ts-ignore\n this.updating = true;\n this.updatingState = \"fetching-ipfs\";\n this.emit(\"updatingstatechange\", \"fetching-ipfs\");\n (async () => {\n while (this.updating) {\n await simulateLoadingTime();\n await simulateLoadingTime();\n await simulateLoadingTime();\n if (!this.updating) {\n return;\n }\n this.simulateUpdateEvent();\n }\n })();\n }\n\n async simulateUpdateEvent() {\n if (!this.updating) {\n return;\n }\n assert(this.cid, `invalid comment.cid '${this.cid}' can't simulateUpdateEvent`);\n if (this._getCommentOnFirstUpdate) {\n return this.simulateGetCommentOnFirstUpdateEvent();\n }\n\n const commentUpdateContent = await getCommentUpdateContent(this);\n for (const prop in commentUpdateContent) {\n // @ts-ignore\n this[prop] = commentUpdateContent[prop];\n }\n this.shortCid = this.cid.substring(2, 14);\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n }\n\n async simulateGetCommentOnFirstUpdateEvent() {\n if (!this.updating) {\n return;\n }\n this._getCommentOnFirstUpdate = false;\n\n // @ts-ignore\n const comment = await new PKC().getComment({ cid: this.cid });\n if (!this.updating) {\n return;\n }\n const props = JSON.parse(JSON.stringify(comment));\n for (const prop in props) {\n if (prop.startsWith(\"_\")) {\n continue;\n }\n // @ts-ignore\n this[prop] = props[prop];\n }\n this.emit(\"update\", this);\n }\n}\n\nclass Vote extends Publication {\n constructor(publishVoteOptions: any) {\n super();\n for (const prop in publishVoteOptions) {\n // @ts-ignore\n this[prop] = publishVoteOptions[prop];\n }\n }\n}\n\nclass CommentEdit extends Publication {\n constructor(publishCommentEditOptions: any) {\n super();\n for (const prop in publishCommentEditOptions) {\n // @ts-ignore\n this[prop] = publishCommentEditOptions[prop];\n }\n }\n}\n\nclass CommunityEdit extends Publication {}\n\nconst createPkc: any = async (...args: any) => {\n return new PKC(...args);\n};\n\ncreatePkc.getShortAddress = (options: { address: string }) => {\n const address = options?.address;\n if (address.includes(\".\")) {\n return address;\n }\n return address.substring(0, 12);\n};\n\ncreatePkc.getShortCid = (options: { cid: string }) => {\n const cid = options?.cid;\n return cid.substring(0, 12);\n};\n\nexport default createPkc;\n"]}
|
|
1
|
+
{"version":3,"file":"pkc-js-mock-content.js","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock-content.ts"],"names":[],"mappings":"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","sourcesContent":["import markdownExample from \"./fixtures/markdown-example\";\nimport EventEmitter from \"events\";\nimport type { PkcResolveAuthorNameOptions, PkcResolveAuthorNameResult } from \"../pkc-types\";\nimport assert from \"assert\";\nimport { sha256 } from \"multiformats/hashes/sha2\";\nimport { fromString as uint8ArrayFromString } from \"uint8arrays/from-string\";\nimport { toString as uint8ArrayToString } from \"uint8arrays/to-string\";\n\n// changeable with env variable so the frontend can test with different latencies\nconst doubleMedia = Boolean(process.env.REACT_APP_BITSOCIAL_REACT_HOOKS_MOCK_CONTENT_DOUBLE_MEDIA);\nconst loadingTime = Number(\n process.env.REACT_APP_BITSOCIAL_REACT_HOOKS_MOCK_CONTENT_LOADING_TIME || 100,\n);\nconst simulateLoadingTime = () => new Promise((r) => setTimeout(r, loadingTime));\nconst NOW = 1679800000;\nconst DAY = 60 * 60 * 24;\n\n// TODO: should delete this eventually to reduce npm package size\nlet captchaImageBase64 =\n \"iVBORw0KGgoAAAANSUhEUgAAAJYAAAAyCAMAAACJUtIoAAAAY1BMVEX////y8vLm5ub39/fr7Ozf39/a29u/6c256MjV8N7v+fL0+/bU1dXO7tnp9+7e8+TJ7NTOzs7E69Gt5L+I26ag4bfk9en3/fmS3Kyo4rx42J2Z37LI38/AwMDR5tip1Li+1cUdWDCzAAAEkElEQVRYw+1Y6ZKjIBBuGuTyPqKZHLP7/k+5KrhIUEwms1X7Y76pMYVg23x9IvzgZfQN/I/QXavhP0SXyh6+AdQbEYS3UJ1TkC/zlbDxEtOD7Q8JnQRMFxYzooL0A46APhlZEizw71A2X+kyu5pBHC8JMUJ3ITqpu0O6GPqbRU8l3CM1CdnCjC0a8Yil80pdLinEMXBc5BMCuwaMUejYimzHoZSgzzJ90oaY8HCW7BmD0ug9QmAXxWlULW9yM+IbgqyHUjJJsuZYyWZu6xEwc3keaqTqCoUJx5puCx1vo1GAWPUf1GI8CRhk6IZZQM8RdCu6HiBvlgCCjaetWhZYo28JkvmvpBO/iD5bNLBFHPnsW1oq7mQGoGSlosdqYB+bARiDb4H6NRiZ6AkM+SdG8Vf9BckXK6RQxsVrStF3etxx5Vf8BdGLlBfQS233xXx6SODRHm9oh6HeSLcyScJejIAmn0mgFMoEvWISS+wZcT8ecPpngVrInmPMLdGymKvSubv9TVLM5gVzY8ObOVt+aIJe0kRqdHPp5wVDUveIyRVQFvKTgI1rV6LjIIDJlCsy3IoXDiEyElUrI7UbpbI05jRVjK2oPwJmWcLgzk0W3u/Jnt8p8UplMZLGs0DaEdgcLEiMX3tlHHcKSHQeWIZr71aikfWdvdOoIkdMVtGM0QxG79v2rDPf96vLZ2j5/c33Hyp4EyO46UbJhulIzR55JOSv5zC27DftVFvs2/yxAKVdc833wps9MJBs+A4NWk/3GJ34tQ91AyhRPHeoYAnvAPKT3qE2XpFqujVh5lzcWSHXG7KIYo9qXfTUvqU7mWMPSW3UigO5YzXlk4LPKKYrKcWlVRrKFg4RngQyAnEkuC6opqDFFUuVEGriSKoiF+KSD48+ovTDzr36QP1WarclQPBhFbMFRxt9zfaGUohKr6spVB/NeK9fc9OdWzW4Vsz3SqSmPfsK+NRcm/iXp/EX61FO34im91Sfr+3E4OcvISxJjJ3Up7z+FcXhDYS009+zKZWsTnnye6SkBA/WrfL5yjiAzsW4KAX4uAWd29tAuiQDnH2saNP8apzJZEzqKukp78tz5XVCfSVkdzOLLHnBoeor4HSdqKpWXiq918SneXv+NQStwulyFv2R+GNEtkMR2ip1mShoE5DMqcjDR6mbk5B58RBcizHCCvlqX0ZwDLWT1IAJCfdpKxglj2oZ32ukKNdFp1DDs0ffY5QSegW0RrZLMIRqWfGlkJVeeC26czMNCI00Wc5PWRL7mpCezS2vC6Cx7VVnWawdUEqFprjz26l85qOKVSvqYH45DuMrnKG31q+Vn0I2o6YdRxi2zjCIkQO0I9FbpfX+p6wQDGcy9eB9nmCQKgmncpee0KoB8LhvHuhO2xM6Dnd32ms+uIS9xp0cbpvgYfBiQDh/KK585TdkWSSr6qpgA/SehQY8BllUQePfPFjACa53SO7rjo5YCqoKoBgng+xHMoQvIJtOJJMkNPI43fIGut0H0toOmJJLQDF4C+6d098XwZcn+9ZmsO9SC96Bc5TUSvvBD/49/gDEMCEP8TccuAAAAABJRU5ErkJggg==\";\n\nconst commentTitles = [\n `Own a Piece of Digital History- Winamp Is Now Selling Its Original 1.0 Skin as an NFT, Iconic Player “was the go-to music player everybody was using at the beginning of the history of digital music and was instrumental in helping the .mp3 become mainstream”.`,\n 'Buyer of \"Pepe the Frog\" NFT files US$500,000 lawsuit after creator releases identical NFTs for free',\n \"$5,100,000,000 Bitcoin Whale enters massive crypto accumulation mode\",\n \"Two Big Developments in Brave Browser\",\n \"🤡\",\n];\n\nconst commentContents = [\n `First of all, the sentiment in this sub concerning moons seems very __polarized__. Some people think they are a genius idea and others think they are making this sub this sub worse because of “moon farming.” which camp are you in? \n\nSecond, how/where can you sell them. And third c/eEY1MhxPNyvt, how many upvotes=one moon, some people have so many when I’m sitting here at 17.\n\n**Personally** I think Reddit is ahead of the _curve_, in a couple years I could easily see every social media platform incorporating their own coin into their interface. \n\nThink about it; it costs the company next to nothing, encourages users to spend more time and be more active on the platform, and capitalizes on their existing user base, skipping any need for marketing. \n\nu/BPNgj2dfHSn8 From the companies point of view it seems like a no brainer. p/reddit-screenshots.eth/c/QmeEY1MhxPNyvt5i8GVxZwqi11yweKuYFWyk1ST4GTKRnm\n\nCan people think of issues with this approach? For either the company or the consumer, because besides increased levels of spamming I don’t see much downside.`,\n \"What kind of messes up world is this. *Even* if they stop you, they would need some sort of seed phrase or private key to your account in order to get the funds.\",\n \"🤡\",\n `So real fast u/estebanabaroa.eth/c/QmeEY1MhxPNyvt5i8GVxZwqi11yweKuYFWyk1ST4GTKRnm, I'm not a legal person and this isn't legal advice. I'm just sharing what I found out. What is civil forfeiture In the USA basically the cops can take things if the suspect it could of been used in a crime (any crime even if there is no crime going on now or in the area and any evidence). Lets put it this way, in CA there is pot shops that used armor trucks to move their money (which many stores use). Pot shops in CA is legal, but the cops on a regular bases stopped the truck for stupid things like using the turn signal too early. They use civil forfeiture to take the cash. From there in all cases they send the stuff to the gov, and the gov gives the local cops a major amount of the value of the assets. Note in some states this is illegal like NC. But I seen in the past years where federal wants to cause a loophole using DEA to force cops by law to do it. But note if you travel through states with this being legal. Note this is actually is a huge problem in the USA. Even more for unbanked people and homeless. ALL lawyers and all people I talked to in legal/law thinks this is the ultimate forum of government theft, and this should be federally illegal. That the system is proven to be extremely abused just for the reason of bonuses and the ones taking the money keep a ton of it after it went through the system. My question Can the gov force you to unlock your phone in a civil forfeiture? This giving them access to your hot wallets. Can the gov take your crypto in a civil forfeiture since it is on the blockchain? It should be noted that with 2, there is no clear answer to this. Basically it came down to it has to be tested in courts or a law maker needs to make laws clearing this up. NOTE FOR ANY LAW MAKERS THAT WANT TO HELP WHO THEY REPRESENT, AND WANT TO MAKE A BILL TO HELP THEM GET REELECTED. FIX THIS What I found out So can they take your phone or hardware wallet? The answer to this seems to be yes. Can they force you to unlock your phone? The answer to this seems to be not without a warrant. Can they brute force, hack, or do whatever to get in after they taken the device in a civil forfeiture? The answer seems to be yes. Basically, the idea is that when this happens it now becomes gov property. And if the gov wants to break in their own property or wipe their end. There isn't jack you can do to stop them expect remote format the device (seriously look into this. You can do this with most phones.) Are they likely to break into your phone/hardware wallet if they take it? While there isn't really evidence of this happening yet. The likely if it was to happen then yes. The question is, do they know of a 0 day which will allow them to get in, and that answer to this is maybe. Like I've seen videos of people recovering their funds from their hardware wallet through taking apart something like a ledger, hooking up to given things, and doing a few other things. So lets not rule out they will have some way of doing just this. Because it is likely if they take one, then they most likely are taking as many as they see. Can the gov use civil forfeiture to get the crypto itself without going after the phone/hardware wallet? Chances are is no. Like they can't demand for the given crypto since they have no way of knowing the wallet address unless if you show them or after they taken the device. They have to prove in court they suspected x was used in some way with a crime. Not knowing the address prior to rules this out. So basically, don't talk to the legal people without a lawyer and don't give them more info than needed. Note: if they use the law to take the phone or hardware wallet, then they can make a case that maybe the crypto is part of the taking since you have direct control of the crypto using your phone. Therefore the crypto could've also been used in crime in some way in the same way the phone could've been. Basically, it is the argument of can they take the truck and the music CD inside thing. How to handle the situation? Don't talk to the cops about anything you don't have to. Note the laws, but in general if they ask you to get out of the car ask if it is a command. If they say yes, then get out. If they asked for documents, then give it (don't be an idiot, just give it to them even the technical bits you don't need to. You will just PO the cop which can cause problems.) Ask them if you can leave, and that you would like to leave. This indicates you aren't volunteering your stay, and in many states they have to be reasonable about the length of the stop and many cases they won't have enough time to do something stupid. When asked questions you don't have to answer say a lawyer friend told you to not talk to the cops while being questioned or at a stop. Never agree to them searching your car or you without a warrant. Never argue with them on the side of the road, the day for that is in court (meaning if they decided to arrest you, then let them and then wait to fight it in court since it is likely you can get a big paycheck if done right). Never be open about what you have. If they take the item using civil forfeiture, then it is likely any cash will be gone forever since some of these court cases can last for years. But you can and should fight them in court because there is a growing amount of cases which is forcing judges and others to look more into this and treat it more serious. If you can't afford a lawyer to fight, then there is a few groups that you can call depending on if you have military background, extreme poverty, and so on. But to be blunt, the best way to fight this risk is by getting law makers to make civil forfeiture illegal. BTW for people visiting the USA, you could face this problem.`,\n markdownExample,\n];\n\nconst commentLinks = [\n \"https://fortune.com/2022/03/16/bitcoin-200k-price-prediction-crypto-outlook/\",\n \"https://finance.yahoo.com/news/c2x-announces-25-million-funding-120000728.html\",\n \"https://finance.yahoo.com/news/adopting-crypto-legal-tender-signify-101309571.html\",\n \"https://x.com/pkcprotocol/status/1632113706015309825\",\n \"https://www.youtube.com/watch?v=jfKfPfyJRdk\",\n];\n\nconst mediaLinks = [\n \"https://upload.wikimedia.org/wikipedia/en/transcoded/b/bd/Exorcist_angiogram_scene.webm/Exorcist_angiogram_scene.webm.480p.vp9.webm\",\n \"https://upload.wikimedia.org/wikipedia/en/f/fa/2001_space_travel.ogv\",\n \"https://upload.wikimedia.org/wikipedia/en/e/e1/Don%27t_Look_Now_love_scene_.ogg\",\n \"https://upload.wikimedia.org/wikipedia/en/8/8a/Ellen_comes_out_airport.mp3\",\n \"https://upload.wikimedia.org/wikipedia/en/b/bf/Dave_Niehaus_Winning_Call_1995_AL_Division_Series.ogg\",\n];\n\nconst communityTitles = [\n \"The Ethereum investment community\",\n \"Cryptography news and discussions\",\n \"Memes\",\n \"🤡\",\n];\n\nconst communityDescriptions = [\n \"Welcome to /r/EthTrader, a 100% community driven sub. Here you can discuss Ethereum news, memes, investing, trading, miscellaneous market-related subjects and other relevant technology.\",\n \"Cryptography is the art of creating mathematical assurances for who can do what with data, including but not limited to encryption of messages such that only the key-holder can read it. Cryptography lives at an intersection of math and computer science. This subreddit covers the theory and practice of modern and *strong* cryptography, and it is a technical subreddit focused on the algorithms and implementations of cryptography.\",\n \"Memes\",\n \"🤡\",\n];\n\nconst urlSuffixes = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"#\",\n \"#/\",\n \"#?\",\n \"?\",\n \"?query\",\n \"#hash-value\",\n \"#hash-value?\",\n \"#hash-value?query=string\",\n \"#hash-value?query=string&yes=1\",\n \"?query=string\",\n \"?query=string&yes=1\",\n];\n\nconst firstNames = [\n \"james\",\n \"robert\",\n \"john\",\n \"michael\",\n \"william\",\n \"david\",\n \"richard\",\n \"joseph\",\n \"thomas\",\n \"charles\",\n \"christopher\",\n \"daniel\",\n \"matthew\",\n \"anthony\",\n \"mark\",\n \"donald\",\n \"steven\",\n \"paul\",\n \"andrew\",\n \"joshua\",\n];\n\nconst displayNames = [\n \"COVERCADIGMENTS!\",\n \"Everco__Evidehovi\",\n \"fermind-flashyte\",\n \"FlirtyraForeguiGoldhil_\",\n \"Hanmiddie Headro Herdman\",\n \"Hurigher Irongmug\",\n \"Islandvi Jumbinte\",\n \"Lackapac Lorvalow\",\n \"MarsEdgyMedprin\",\n \"parispn!!!\",\n \"personna\",\n \" popic😃\",\n \"Riderix\\n\",\n \"Romantec__\",\n \"Sellakuk23\",\n \"--TickoAim2$\",\n \"Transia4\\t\",\n \"Trippah+512\",\n \"😃\",\n \"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\",\n \"aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa\",\n];\n\nconst postFlairs = [\n { text: \"Analysis\" },\n { text: \"ADVICE\", textColor: \"#000000\", backgroundColor: \"#252850\" },\n { text: \"comedy\", textColor: \"#FFFFFF\", backgroundColor: \"#23282B\" },\n { text: \"General News\" },\n {\n text: \"Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam Probably a scam!!!!!!!!!!!!!!!!!!!!!!\",\n textColor: \"#FFFFFF\",\n backgroundColor: \"#5B3A29\",\n },\n { text: \"education\", textColor: \"#000000\", backgroundColor: \"#4A192C\" },\n { text: \"MARKETS\", backgroundColor: \"#F8F32B\" },\n { text: \"IMPORTANT!!!\", backgroundColor: \"#C35831\" },\n {\n text: \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n backgroundColor: \"#AF2B1E\",\n },\n { text: \"MOON 🌕\", backgroundColor: \"#D36E70\" },\n { text: \"video\", backgroundColor: \"#924E7D\" },\n];\n\nconst authorFlairs = [\n { text: \"SCAMMER\" },\n { text: \"Medical Doctor\", textColor: \"#000000\", backgroundColor: \"#252850\" },\n { text: \"pro\", textColor: \"#FFFFFF\", backgroundColor: \"#23282B\" },\n {\n text: \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n },\n { text: \"Probably a scammer\", textColor: \"#FFFFFF\", backgroundColor: \"#5B3A29\" },\n { text: \"loser\", textColor: \"#000000\", backgroundColor: \"#4A192C\" },\n { text: \"WINNER\", backgroundColor: \"#F8F32B\" },\n { text: \"IMPORTANT VIP!!!\", backgroundColor: \"#C35831\" },\n {\n text: \"BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN BE CAREFUL OF THIS MAN!!!!!!!!!!!!!!!!!!\",\n backgroundColor: \"#AF2B1E\",\n },\n { text: \"🌕\", backgroundColor: \"#D36E70\" },\n { text: \"creator\", backgroundColor: \"#924E7D\" },\n];\n\nconst reasons = [\n \"SPAM\",\n \"this is spam\",\n \"repeated spamming\",\n \"User is a known scammer\",\n \"NSFW\",\n \"SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM\",\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n];\n\nconst getCidHash = async (string: string) => {\n assert(string && typeof string === \"string\", `can't getCidHash '${string} not a string'`);\n const seed = await getNumberHash(string);\n const cid = await seedToCid(seed);\n return cid;\n};\n\nconst seedToCid = async (seed: number) => {\n assert(\n typeof seed === \"number\" && !Number.isNaN(seed) && seed >= 0,\n `seedToCid seed argument must be positive number not '${seed}'`,\n );\n let base10Seed = String(seed);\n\n // seed base10 string is usually too small for a cid, make it longer\n // the cid is usually around 46 chars in base58, so 80 chars in base10\n const base10SeedLength = 80;\n while (base10Seed.length < base10SeedLength) {\n base10Seed += base10Seed;\n }\n base10Seed = base10Seed.substring(0, base10SeedLength);\n\n const uint8Array = uint8ArrayFromString(base10Seed, \"base10\");\n const base58Cid = uint8ArrayToString(uint8Array, \"base58btc\");\n return base58Cid;\n};\n\n// fake hash with lots of collision for speed\nconst getNumberHash = async (string: string) => {\n assert(string && typeof string === \"string\", `can't getNumberHash '${string} not a string'`);\n let hash = 0;\n for (let i = 0; i < string.length; i++) {\n const char = string.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash &= hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n};\n\nclass _SeedIncrementer {\n seed: number;\n numbers: number[];\n index = 0;\n constructor(seed: number) {\n assert(\n typeof seed === \"number\" && !Number.isNaN(seed) && seed >= 0,\n `getNumberBetween seed argument must be positive number not '${seed}'`,\n );\n this.seed = seed;\n this.numbers = String(seed)\n .split(\"\")\n .map((number) => Number(number));\n }\n increment() {\n this.index++;\n const divider = this.numbers[this.index % this.numbers.length] + this.index;\n return Math.round(this.seed / divider);\n }\n}\nconst SeedIncrementer = (seed: number) => new _SeedIncrementer(seed);\n\nconst getNumberBetween = async (min: number, max: number, seed: number) => {\n assert(\n typeof seed === \"number\" && !Number.isNaN(seed) && seed >= 0,\n `getNumberBetween seed argument must be positive number not '${seed}'`,\n );\n\n // if the string is exponent, remove chars\n if (String(seed).match(/[^0-9]/)) {\n throw Error(`getNumberBetween seed too large '${seed}'`);\n }\n\n const number = Number(\"0.\" + seed);\n return Math.floor(number * (max - min + 1) + min);\n};\n\nconst getArrayItem = async (array: any[], seed: number) => {\n // const index = await getNumberBetween(0, array.length - 1, seed)\n const index = seed % array.length;\n return array[index];\n};\n\nconst getImageUrl = async (_seed: number) => {\n assert(\n typeof _seed === \"number\" && !Number.isNaN(_seed) && _seed >= 0,\n `getImageUrl seed argument must be positive number not '${_seed}'`,\n );\n const seed = SeedIncrementer(_seed);\n const jpg = `https://picsum.photos/seed/${await getNumberBetween(10, 2000, seed.increment())}/${await getNumberBetween(\n 10,\n 2000,\n seed.increment(),\n )}/${await getNumberBetween(10, 2000, seed.increment())}.jpg`;\n\n const webp = `https://picsum.photos/seed/${await getNumberBetween(10, 2000, seed.increment())}/${await getNumberBetween(\n 10,\n 2000,\n seed.increment(),\n )}/${await getNumberBetween(10, 2000, seed.increment())}.webp`;\n\n const imageUrls = [\n // jpg & webp\n jpg,\n jpg,\n webp,\n webp,\n \"https://samplelib.com/lib/preview/png/sample-bumblebee-400x300.png\", // png\n \"https://c.tenor.com/WHs8ooxWJUIAAAAM/really-great-example-right-here-echo-gaming.gif\", // gif\n \"https://filesamples.com/samples/image/bmp/sample_640%C3%97426.bmp\", // bmp\n \"https://brokensite.xyz/images/dog.png\", // broken image\n \"https://brokensite.xyz/images/dog.jpeg\", // broken jpeg\n ];\n const imageUrl =\n (await getArrayItem(imageUrls, seed.increment())) +\n (await getArrayItem(urlSuffixes, seed.increment()));\n return imageUrl;\n};\n\nconst getAuthorAddress = async (_seed: number) => {\n assert(\n typeof _seed === \"number\" && !Number.isNaN(_seed) && _seed >= 0,\n `getAuthorAddress seed argument must be positive number not '${_seed}'`,\n );\n const seed = SeedIncrementer(_seed);\n const hasEns = await getArrayItem([true, false, false, false], seed.increment());\n if (hasEns) {\n const text = await getArrayItem([...firstNames, ...displayNames], seed.increment());\n return (text.toLowerCase().replace(/[^a-z0-9]/g, \"\") || \"john\") + \".eth\";\n } else {\n const address = await seedToCid(seed.increment());\n return address;\n }\n};\n\nconst getAuthor = async (seed: string) => {\n const authorNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const author: any = {\n address: await getAuthorAddress(authorNumberSeed.increment()),\n };\n author.shortAddress = author.address.endsWith(\".eth\")\n ? author.address\n : author.address.substring(8, 20);\n const hasDisplayName = await getArrayItem(\n [true, true, true, false],\n authorNumberSeed.increment(),\n );\n if (hasDisplayName) {\n author.displayName = await getArrayItem(displayNames, authorNumberSeed.increment());\n }\n const rareTrue = [true, false, false, false, false, false, false, false];\n const hasNftAvatar = await getArrayItem(rareTrue, authorNumberSeed.increment());\n if (hasNftAvatar) {\n author.avatar = {\n chainTicker: \"eth\",\n address: await getArrayItem(\n [\n \"0xed5af388653567af2f388e6224dc7c4b3241c544\",\n \"0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d\",\n \"0x60e4d786628fea6478f785a6d7e704777c86a7c6\",\n \"0x79fcdef22feed20eddacbb2587640e45491b757f\",\n \"0x0000000000000000000000000000000000000dead\",\n ],\n authorNumberSeed.increment(),\n ),\n index: await getNumberBetween(1, 2000, authorNumberSeed.increment()),\n };\n }\n const hasFlair = await getArrayItem(rareTrue, authorNumberSeed.increment());\n if (hasFlair) {\n author.flair = await getArrayItem(authorFlairs, authorNumberSeed.increment());\n }\n return author;\n};\n\nconst getPostContent = async (seed: string) => {\n const postNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const postContent: any = {\n depth: 0,\n author: await getAuthor(String(postNumberSeed)),\n title: await getArrayItem(commentTitles, postNumberSeed.increment()),\n };\n const hasFlair = await getArrayItem([true, false, false, false], postNumberSeed.increment());\n if (hasFlair) {\n postContent.flair = await getArrayItem(postFlairs, postNumberSeed.increment());\n }\n let isLinkPost = await getArrayItem([true, false], postNumberSeed.increment());\n if (doubleMedia && !isLinkPost) {\n isLinkPost = await getArrayItem([true, false], postNumberSeed.increment());\n }\n if (isLinkPost) {\n postContent.link = await getArrayItem(commentLinks, postNumberSeed.increment());\n let linkIsImage = await getArrayItem([true, false], postNumberSeed.increment());\n if (doubleMedia && !linkIsImage) {\n linkIsImage = await getArrayItem([true, false], postNumberSeed.increment());\n }\n if (linkIsImage) {\n postContent.link = await getImageUrl(postNumberSeed.increment());\n\n // add video and audio\n const imageIsMedia = await getArrayItem(\n [true, false, false, false],\n postNumberSeed.increment(),\n );\n if (imageIsMedia) {\n postContent.link = await getArrayItem(mediaLinks, postNumberSeed.increment());\n // add at least one example of video with width and height\n if (postContent.link === mediaLinks[0]) {\n postContent.linkWidth = 852;\n postContent.linkHeight = 480;\n }\n }\n // if link is image, add width and height\n else {\n const [, linkWidth, linkHeight] = (\n postContent.link.match(/\\d+\\/\\d+\\/\\d+/)?.[0] || \"\"\n ).split(\"/\");\n postContent.linkWidth = Number(linkWidth);\n postContent.linkHeight = Number(linkHeight);\n }\n }\n const hasThumbnail = await getArrayItem([true, true, true, false], postNumberSeed.increment());\n if (!linkIsImage && hasThumbnail) {\n postContent.thumbnailUrl = await getImageUrl(postNumberSeed.increment());\n }\n }\n // else is text post\n else {\n postContent.content = await getArrayItem(commentContents, postNumberSeed.increment());\n const hasQuote = await getArrayItem([true, false, false, false], postNumberSeed.increment());\n if (hasQuote) {\n const max = 7;\n const lines = postContent.content.split(\"\\n\");\n for (const i in lines) {\n const lineIsQuote = await getArrayItem([true, false], postNumberSeed.increment());\n if (lineIsQuote) {\n lines[i] = \">\" + lines[i];\n }\n if (Number(i) > max) {\n break;\n }\n }\n postContent.content = lines.join(\"\\n\");\n }\n }\n return postContent;\n};\n\nconst getReplyContent = async (getReplyContentOptions: any, seed: string) => {\n const replyNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const { depth, parentCid, postCid } = getReplyContentOptions;\n const author = await getAuthor(String(replyNumberSeed.seed));\n let content = await getArrayItem(commentContents, replyNumberSeed.increment());\n\n const hasQuote = await getArrayItem([true, false, false, false], replyNumberSeed.increment());\n if (hasQuote) {\n const max = 7;\n const lines = content.split(\"\\n\");\n for (const i in lines) {\n const lineIsQuote = await getArrayItem([true, false], replyNumberSeed.increment());\n if (lineIsQuote) {\n lines[i] = \">\" + lines[i];\n }\n if (Number(i) > max) {\n break;\n }\n }\n content = lines.join(\"\\n\");\n }\n\n const replyContent: any = { content, author, depth, parentCid, postCid };\n\n const hasLink = await getArrayItem([true, false, false, false], replyNumberSeed.increment());\n if (hasLink) {\n replyContent.link = await getArrayItem(commentLinks, replyNumberSeed.increment());\n const linkIsImage = await getArrayItem([true, false], replyNumberSeed.increment());\n if (linkIsImage) {\n replyContent.link = await getImageUrl(replyNumberSeed.increment());\n\n // add video and audio\n const imageIsMedia = await getArrayItem(\n [true, false, false, false],\n replyNumberSeed.increment(),\n );\n if (imageIsMedia) {\n replyContent.link = await getArrayItem(mediaLinks, replyNumberSeed.increment());\n }\n }\n const hasThumbnail = await getArrayItem([true, true, true, false], replyNumberSeed.increment());\n if (!linkIsImage && hasThumbnail) {\n replyContent.thumbnailUrl = await getImageUrl(replyNumberSeed.increment());\n }\n }\n\n const hasTitle = await getArrayItem(\n [true, false, false, false, false, false, false],\n replyNumberSeed.increment(),\n );\n if (hasTitle) {\n replyContent.title = await getArrayItem(commentTitles, replyNumberSeed.increment());\n }\n\n return replyContent;\n};\n\nconst getCommunityContent = async (seed: string) => {\n const communityNumberSeed = SeedIncrementer(await getNumberHash(seed));\n const community: any = {\n pubsubTopic: await seedToCid(communityNumberSeed.seed),\n };\n\n const hasChallengeTypes = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasChallengeTypes) {\n community.challengeTypes = [\"image\"];\n }\n\n const hasRoles = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasRoles) {\n community.roles = {\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"owner\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"admin\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n [await getAuthorAddress(communityNumberSeed.increment())]: { role: \"moderator\" },\n };\n }\n\n const title = await getArrayItem(\n [undefined, ...communityTitles],\n communityNumberSeed.increment(),\n );\n if (title) {\n community.title = title;\n }\n const description = await getArrayItem(\n [undefined, ...communityDescriptions],\n communityNumberSeed.increment(),\n );\n if (description) {\n community.description = description;\n }\n\n const hasPostFlairs = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasPostFlairs) {\n community.flairs = { post: postFlairs };\n }\n const hasAuthorFlairs = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasAuthorFlairs) {\n community.flairs = { post: community.flairs?.post, author: authorFlairs };\n }\n\n const hasSuggested = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasSuggested) {\n community.suggested = {\n primaryColor: (await getArrayItem(postFlairs, communityNumberSeed.increment()))\n .backgroundColor,\n secondaryColor: (await getArrayItem(postFlairs, communityNumberSeed.increment()))\n .backgroundColor,\n avatarUrl: await getArrayItem(\n [undefined, await getImageUrl(communityNumberSeed.increment())],\n communityNumberSeed.increment(),\n ),\n bannerUrl: await getArrayItem(\n [undefined, await getImageUrl(communityNumberSeed.increment())],\n communityNumberSeed.increment(),\n ),\n backgroundUrl: await getArrayItem(\n [undefined, await getImageUrl(communityNumberSeed.increment())],\n communityNumberSeed.increment(),\n ),\n language: await getArrayItem(\n [undefined, undefined, \"en\", \"en\", \"es\", \"ru\"],\n communityNumberSeed.increment(),\n ),\n };\n }\n\n const hasFeatures = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasFeatures) {\n community.features = {\n noVideos: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noSpoilers: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noImages: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noVideoReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noSpoilerReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noImageReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noPolls: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noCrossposts: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noUpvotes: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noDownvotes: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noAuthors: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n anonymousAuthors: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noNestedReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n safeForWork: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n authorFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n requireAuthorFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n postFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n requirePostFlairs: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noMarkdownImages: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n noMarkdownVideos: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n markdownImageReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n markdownVideoReplies: await getArrayItem(\n [undefined, undefined, true, false],\n communityNumberSeed.increment(),\n ),\n };\n }\n\n const hasRules = await getArrayItem([true, false], communityNumberSeed.increment());\n if (hasRules) {\n community.rules = [\n \"no spam\",\n \"be nice\",\n \"Do not link to CNN.\",\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\n \"OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO OOOOOOOOOO \",\n ];\n }\n\n const isOnline = await getArrayItem([true, false], communityNumberSeed.increment());\n if (isOnline) {\n // updated in last 1h\n community.updatedAt =\n Math.round(Date.now() / 1000) -\n (await getNumberBetween(1, 60 * 60, communityNumberSeed.increment()));\n } else {\n // updated in last month\n community.updatedAt =\n Math.round(Date.now() / 1000) -\n (await getNumberBetween(60 * 60, 60 * 60 * 24 * 30, communityNumberSeed.increment()));\n }\n community.createdAt =\n community.updatedAt -\n (await getNumberBetween(1, 60 * 60 * 24 * 3000, communityNumberSeed.increment()));\n\n return community;\n};\n\n// for debugging slow bulk reply generation\nlet replyLoopCount = 0;\n\nconst getCommentUpdateContent = async (comment: any) => {\n const commentUpdateSeedNumber = SeedIncrementer(await getNumberHash(comment.cid));\n const upvotesPerUpdate = await getNumberBetween(1, 1000, commentUpdateSeedNumber.increment());\n const downvotesPerUpdate = await getNumberBetween(1, 1000, commentUpdateSeedNumber.increment());\n\n const commentUpdateContent: any = {};\n // simulate finding vote counts on an IPNS record\n commentUpdateContent.upvoteCount =\n typeof comment.upvoteCount === \"number\"\n ? comment.upvoteCount + upvotesPerUpdate\n : upvotesPerUpdate;\n commentUpdateContent.downvoteCount =\n typeof comment.downvoteCount === \"number\"\n ? comment.downvoteCount + downvotesPerUpdate\n : downvotesPerUpdate;\n\n // find the number of replies\n commentUpdateContent.replyCount = 0;\n const hasReplies = await getArrayItem(\n [true, false, false, false],\n commentUpdateSeedNumber.increment(),\n );\n if (hasReplies) {\n commentUpdateContent.replyCount = await getNumberBetween(\n 0,\n 30,\n commentUpdateSeedNumber.increment(),\n );\n if (comment.depth > 0) {\n commentUpdateContent.replyCount = commentUpdateContent.replyCount / (comment.depth + 1) ** 2;\n }\n if (commentUpdateContent.replyCount < 1) {\n commentUpdateContent.replyCount = 0;\n }\n commentUpdateContent.replyCount = Math.round(commentUpdateContent.replyCount);\n }\n\n // simulate finding replies from IPNS record\n commentUpdateContent.replies = new Pages({ comment });\n commentUpdateContent.replies.pages.best = { nextCid: undefined, comments: [] };\n const getReplyContentOptions = {\n depth: comment.depth + 1,\n parentCid: comment.cid,\n postCid: comment.cid,\n };\n let replyCount = commentUpdateContent.replyCount;\n const replyCids: any = new Set();\n while (replyCount-- > 0) {\n // console.log({replyLoopCount: replyLoopCount++, replyCount: commentUpdateContent.replyCount, depth: comment.depth, cid: comment.cid, index: replyCount})\n const cid = await seedToCid(await getNumberHash(comment.cid + replyCount));\n const replyContent = await getReplyContent(\n getReplyContentOptions,\n cid + \"replycontent\" + replyCount,\n );\n const reply = {\n cid,\n shortCid: cid.substring(2, 14),\n timestamp: await getNumberBetween(\n comment.timestamp,\n NOW,\n commentUpdateSeedNumber.increment(),\n ),\n ...replyContent,\n communityAddress: comment.communityAddress || \"memes.eth\",\n };\n if (replyCids.has(reply.cid)) {\n console.error(`mock content error: duplicate reply cid '${reply.cid}'`);\n }\n replyCids.add(reply.cid);\n const replyUpdateContent = await getCommentUpdateContent(reply);\n commentUpdateContent.replies.pages.best.comments.push({ ...reply, ...replyUpdateContent });\n }\n\n // if post with lots of replies, add replies pages\n if (commentUpdateContent.replyCount >= 15 && comment.depth === 0) {\n commentUpdateContent.replies.pages.best.nextCid = await seedToCid(\n await getNumberHash(comment.cid + \"bestpagecid2\"),\n );\n commentUpdateContent.replies.pageCids = {\n new: await seedToCid(await getNumberHash(comment.cid + \"newpagecid\")),\n old: await seedToCid(await getNumberHash(comment.cid + \"oldpagecid\")),\n };\n }\n\n const rareTrue = [\n true,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n false,\n ];\n\n const isSpoiler = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n if (isSpoiler) {\n commentUpdateContent.spoiler = true;\n }\n\n const isEdited = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n if (isEdited && !comment.edit) {\n commentUpdateContent.edit = {\n commentCid: comment.cid,\n timestamp: comment.timestamp + 60 * 30,\n reason: \"I wanted to know why the downvotes?\",\n author: comment.author,\n };\n commentUpdateContent.original = {\n content: comment.content,\n };\n commentUpdateContent.content = (comment.content || \"\") + \" WHY DOWNVOTES!?\";\n }\n\n const isDeleted = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isPinned = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isRemoved = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isLocked = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n const isPurged = await getArrayItem(rareTrue, commentUpdateSeedNumber.increment());\n\n if (isDeleted) {\n commentUpdateContent.deleted = true;\n } else if (isPinned) {\n commentUpdateContent.pinned = true;\n } else if (isRemoved) {\n commentUpdateContent.removed = true;\n const hasReason = await getArrayItem([true, false], commentUpdateSeedNumber.increment());\n if (hasReason) {\n commentUpdateContent.reason = await getArrayItem(\n reasons,\n commentUpdateSeedNumber.increment(),\n );\n }\n } else if (isLocked && comment.depth === 0) {\n commentUpdateContent.locked = true;\n const hasReason = await getArrayItem([true, false], commentUpdateSeedNumber.increment());\n if (hasReason) {\n commentUpdateContent.reason = await getArrayItem(\n reasons,\n commentUpdateSeedNumber.increment(),\n );\n }\n } else if (isPurged) {\n commentUpdateContent.purged = true;\n const hasReason = await getArrayItem([true, false], commentUpdateSeedNumber.increment());\n if (hasReason) {\n commentUpdateContent.reason = await getArrayItem(\n reasons,\n commentUpdateSeedNumber.increment(),\n );\n }\n }\n\n commentUpdateContent.updatedAt = Math.round(Date.now() / 1000);\n\n return commentUpdateContent;\n};\n\nconst pageCommentCids: any = new Set();\nconst getCommentsPage = async (pageCid: string, communityOrComment: any) => {\n const communityAddress = communityOrComment.address || communityOrComment.communityAddress;\n const commentsPageSeedNumber = SeedIncrementer(await getNumberHash(pageCid));\n const page: any = {\n nextCid: await seedToCid(commentsPageSeedNumber.increment()),\n comments: [],\n };\n const postCount = 100;\n let index = 0;\n const pkc = new PKC();\n while (index++ < postCount) {\n const cid = await seedToCid(await getNumberHash(pageCid + index));\n // debug message\n if (pageCommentCids.has(cid)) {\n console.error(`mock content error: duplicate page comment cid '${cid}'`);\n }\n pageCommentCids.add(cid);\n // comment = {...comment, ...(await getPostContent(comment.cid)), ...(await getCommentUpdateContent(comment))}\n const comment: any = await pkc.getComment({ cid });\n comment.communityAddress = communityAddress;\n const commentUpdateContent: any = await getCommentUpdateContent(comment);\n for (const prop in commentUpdateContent) {\n comment[prop] = commentUpdateContent[prop];\n }\n page.comments.push(comment);\n }\n return page;\n};\n\n// array of communities probably created by the user\nconst createdCommunities: any = {};\n\nclass NameResolverClient extends EventEmitter {\n state = \"stopped\";\n}\n\nclass PKC extends EventEmitter {\n nameResolvers: any[];\n _clientsManager: {\n clients: {\n nameResolvers: { [resolverKey: string]: NameResolverClient };\n };\n };\n\n constructor(options: any = {}) {\n super();\n this.nameResolvers = options?.nameResolvers || [];\n this._clientsManager = {\n clients: {\n nameResolvers: this.nameResolvers.reduce(\n (resolverClients: { [resolverKey: string]: NameResolverClient }, resolver: any) => ({\n ...resolverClients,\n [resolver.key]: new NameResolverClient(),\n }),\n {},\n ),\n },\n };\n }\n\n async createSigner() {\n return {\n privateKey: \"private key\",\n address: await getCidHash(String(Math.random())),\n };\n }\n\n async resolveAuthorAddress(options: { address: string }) {\n const resolver = this.nameResolvers.find((nameResolver) =>\n nameResolver?.canResolve?.({ name: options.address }),\n );\n const resolverClient = resolver && this._clientsManager.clients.nameResolvers[resolver.key];\n if (resolverClient) {\n resolverClient.state = \"resolving-author-name\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n await new Promise((resolve) => setTimeout(resolve, 10));\n if (resolverClient) {\n resolverClient.state = \"stopped\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n return \"resolved author address\";\n }\n async resolveAuthorName(\n options: PkcResolveAuthorNameOptions,\n ): Promise<PkcResolveAuthorNameResult> {\n const resolvedAuthorName = await this.resolveAuthorAddress({ address: options.name });\n return { resolvedAuthorName };\n }\n\n async createCommunity(createCommunityOptions: any) {\n const communityIdentifier =\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey;\n\n // if the only argument is {address}, the user didn't create the sub, it's a fetched sub\n if (createCommunityOptions?.address && Object.keys(createCommunityOptions).length === 1) {\n return new Community(createCommunityOptions);\n }\n\n const signer = await this.createSigner();\n const community = new Community({ signer, ...createCommunityOptions });\n\n // keep a list of communities the user probably created himself to use with pkc.communities\n if (!communityIdentifier) {\n createdCommunities[community.address || \"\"] = community;\n }\n\n return community;\n }\n\n async getCommunity(options: { address: string }) {\n const address = options?.address;\n const createCommunityOptions = { address };\n const community: any = new Community(createCommunityOptions);\n const hotPageCid = await seedToCid(await getNumberHash(address + \"hotpagecid\"));\n community.posts.pages.hot = await getCommentsPage(hotPageCid, community);\n community.posts.pageCids = {\n hot: await seedToCid(await getNumberHash(address + \"hotpagecid2\")),\n topAll: await seedToCid(await getNumberHash(address + \"topallpagecid\")),\n new: await seedToCid(await getNumberHash(address + \"newpagecid\")),\n active: await seedToCid(await getNumberHash(address + \"activepagecid\")),\n };\n\n const communityContent = await getCommunityContent(address);\n // add extra props\n for (const prop in communityContent) {\n community[prop] = communityContent[prop];\n }\n return community;\n }\n\n // TODO: implement event communitieschange\n get communities() {\n const communityAddresses = Object.keys(createdCommunities);\n return communityAddresses;\n }\n\n async createComment(createCommentOptions: any) {\n return new Comment(createCommentOptions);\n }\n\n async getComment(options: { cid: string }) {\n const cid = options?.cid;\n const commentSeedNumber = SeedIncrementer(await getNumberHash(cid + \"getcomment\"));\n let commentContent: any = await getPostContent(cid + \"postcontent\");\n const isReply = cid.endsWith(\"reply\");\n if (isReply) {\n const depth = await getNumberBetween(1, 10, commentSeedNumber.increment());\n const parentCid = await seedToCid(commentSeedNumber.increment());\n const postCid = depth === 1 ? parentCid : await seedToCid(commentSeedNumber.increment());\n const getReplyContentOptions = { depth, parentCid, postCid };\n commentContent = await getReplyContent(getReplyContentOptions, cid + \"replycontent\");\n }\n const createCommentOptions = {\n cid,\n timestamp: await getNumberBetween(NOW - DAY * 30, NOW, commentSeedNumber.increment()),\n communityAddress: \"memes.eth\",\n ...commentContent,\n };\n const comment = new Comment(createCommentOptions);\n // add missing props from createCommentOptions\n for (const prop in createCommentOptions) {\n // @ts-ignore\n comment[prop] = createCommentOptions[prop];\n }\n return comment;\n }\n\n async createVote(publishVoteOptions: any) {\n return new Vote(publishVoteOptions);\n }\n\n async createCommentEdit(publishCommentEditOptions: any) {\n return new CommentEdit(publishCommentEditOptions);\n }\n\n async createCommunityEdit() {\n return new CommunityEdit();\n }\n\n async fetchCid(options: { cid: string }) {\n const cid = options?.cid;\n if (cid?.startsWith(\"statscid\")) {\n return JSON.stringify({\n hourActiveUserCount: 1,\n dayActiveUserCount: 11,\n weekActiveUserCount: 111,\n monthActiveUserCount: 1111,\n yearActiveUserCount: 11111,\n allActiveUserCount: 111111,\n hourPostCount: 2,\n dayPostCount: 22,\n weekPostCount: 222,\n monthPostCount: 2222,\n yearPostCount: 22222,\n allPostCount: 222222,\n });\n }\n throw Error(`pkc.fetchCid not implemented in mock content for cid '${cid}'`);\n }\n\n async pubsubSubscribe(communityAddress: string) {}\n async pubsubUnsubscribe(communityAddress: string) {}\n\n clients = (() => {\n const pkcRpcClients = {\n \"http://localhost:9138\": new PkcRpcClient(),\n };\n return {\n pkcRpcClients,\n };\n })();\n\n async validateComment(comment: any, validateCommentOptions: any) {}\n}\n\nclass PkcRpcClient extends EventEmitter {\n state = \"connecting\";\n settings: any = undefined;\n constructor() {\n super();\n // simulate connecting to the rpc\n setTimeout(() => {\n this.state = \"connected\";\n this.settings = { challenges: { \"text-math\": {} } };\n this.emit(\"statechange\", this.state);\n this.emit(\"settingschange\", this.settings);\n }, 5000);\n }\n\n async setSettings(settings: any) {\n this.settings = settings;\n this.emit(\"settingschange\", this.settings);\n }\n}\n\nclass Pages {\n pageCids: any = {};\n pages: any = {};\n community: any;\n comment: any;\n\n constructor(pagesOptions?: any) {\n Object.defineProperty(this, \"community\", {\n value: pagesOptions?.community,\n enumerable: false,\n });\n Object.defineProperty(this, \"comment\", { value: pagesOptions?.comment, enumerable: false });\n }\n\n async getPage(options: { cid: string }) {\n const cid = options?.cid;\n // need to wait twice otherwise react renders too fast and fetches too many pages in advance\n await simulateLoadingTime();\n return getCommentsPage(cid, this.community || this.comment);\n }\n\n async validatePage(page: any) {}\n}\n\nclass Community extends EventEmitter {\n address: string | undefined;\n title: string | undefined;\n description: string | undefined;\n pageCids: any;\n posts: Pages;\n pubsubTopic: string | undefined;\n createdAt: number | undefined;\n updatedAt: number | undefined;\n challengeTypes: string[] | undefined;\n roles: any | undefined;\n flairs: any | undefined;\n suggested: any | undefined;\n features: any | undefined;\n rules: string[] | undefined;\n signer: any | undefined;\n shortAddress: string | undefined;\n statsCid: string | undefined;\n _getCommunityOnFirstUpdate = false;\n updatingState: string | undefined;\n\n constructor(createCommunityOptions?: any) {\n super();\n this.address =\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey;\n this.pubsubTopic = createCommunityOptions?.pubsubTopic;\n this.createdAt = createCommunityOptions?.createdAt;\n this.updatedAt = createCommunityOptions?.updatedAt;\n this.challengeTypes = createCommunityOptions?.challengeTypes;\n this.roles = createCommunityOptions?.roles;\n this.flairs = createCommunityOptions?.flairs;\n this.suggested = createCommunityOptions?.suggested;\n this.features = createCommunityOptions?.features;\n this.rules = createCommunityOptions?.rules;\n this.title = createCommunityOptions?.title;\n this.description = createCommunityOptions?.description;\n this.statsCid = \"statscid\";\n\n for (const prop in createCommunityOptions) {\n if (createCommunityOptions[prop] !== undefined) {\n // @ts-ignore\n this[prop] = createCommunityOptions[prop];\n }\n }\n this.posts = new Pages({ community: this });\n\n // add community.posts from createCommunityOptions\n if (createCommunityOptions?.posts?.pages) {\n this.posts.pages = createCommunityOptions?.posts?.pages;\n }\n if (createCommunityOptions?.posts?.pageCids) {\n this.posts.pageCids = createCommunityOptions?.posts?.pageCids;\n }\n\n if (!this.address && this.signer?.address) {\n this.address = this.signer.address;\n }\n this.shortAddress = this.address?.endsWith(\".eth\")\n ? this.address\n : this.address?.substring(8, 20);\n\n Object.defineProperty(this, \"updating\", { enumerable: false, writable: true });\n // @ts-ignore\n this.updating = false;\n\n // if the only argument is {address}, it means the first update should use getCommunity()\n if (createCommunityOptions?.address && Object.keys(createCommunityOptions).length === 1) {\n this._getCommunityOnFirstUpdate = true;\n }\n }\n\n async edit(editCommunityOptions: any) {\n assert(\n editCommunityOptions && typeof editCommunityOptions === \"object\",\n `invalid editCommunityOptions '${editCommunityOptions}'`,\n );\n for (const prop in editCommunityOptions) {\n if (editCommunityOptions[prop] !== undefined) {\n // @ts-ignore\n this[prop] = editCommunityOptions[prop];\n }\n }\n }\n\n async update() {\n if (!this.address) {\n throw Error(`can't update without community.address`);\n }\n // don't update twice\n // @ts-ignore\n if (this.updating) {\n return;\n }\n // @ts-ignore\n this.updating = true;\n this.updatingState = \"fetching-ipns\";\n this.emit(\"updatingstatechange\", \"fetching-ipns\");\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n async delete() {\n if (this.address) {\n delete createdCommunities[this.address];\n }\n }\n\n simulateUpdateEvent() {\n if (this._getCommunityOnFirstUpdate) {\n return this.simulateGetCommunityOnFirstUpdateEvent();\n }\n // @ts-ignore\n this.updating = false;\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n }\n\n async simulateGetCommunityOnFirstUpdateEvent() {\n this._getCommunityOnFirstUpdate = false;\n\n // @ts-ignore\n const community = await new PKC().getCommunity({ address: this.address });\n const props = JSON.parse(JSON.stringify(community));\n for (const prop in props) {\n if (prop.startsWith(\"_\")) {\n continue;\n }\n // @ts-ignore\n this[prop] = props[prop];\n }\n this.posts.getPage = community.posts.getPage;\n // @ts-ignore\n this.updating = false;\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n\n this.simulateUpdateEvent();\n }\n}\n\nlet challengeRequestCount = 0;\nlet challengeAnswerCount = 0;\n\nclass Publication extends EventEmitter {\n timestamp: number | undefined;\n content: string | undefined;\n cid: string | undefined;\n title: string | undefined;\n link: string | undefined;\n challengeRequestId!: string;\n challengeAnswerId!: string;\n\n constructor() {\n super();\n Object.defineProperty(this, \"challengeRequestId\", { enumerable: false, writable: true });\n Object.defineProperty(this, \"challengeAnswerId\", { enumerable: false, writable: true });\n this.challengeRequestId = `r${++challengeRequestCount}`;\n this.challengeAnswerId = `a${++challengeAnswerCount}`;\n }\n\n async publish() {\n await simulateLoadingTime();\n await this.simulateChallengeEvent();\n }\n\n async simulateChallengeEvent() {\n const challenges: any = [];\n const challengeCount = await getNumberBetween(\n 1,\n 3,\n await getNumberHash(this.challengeRequestId),\n );\n while (challenges.length < challengeCount) {\n challenges.push({ type: \"image/png\", challenge: captchaImageBase64 });\n }\n const challengeMessage = {\n type: \"CHALLENGE\",\n challengeRequestId: this.challengeRequestId,\n challenges,\n };\n this.emit(\"challenge\", challengeMessage, this);\n }\n\n async publishChallengeAnswers(challengeAnswers: string[]) {\n await simulateLoadingTime();\n this.simulateChallengeVerificationEvent();\n }\n\n async simulateChallengeVerificationEvent() {\n // if publication has content, create cid for this content and add it to comment and challengeVerificationMessage\n const cidSeed = `${this.content ?? \"\"}${this.title ?? \"\"}${this.link ?? \"\"}`;\n this.cid = cidSeed.length > 0 ? await getCidHash(`${cidSeed}cid`) : undefined;\n const commentUpdate = this.cid && { cid: this.cid };\n\n const challengeVerificationMessage = {\n type: \"CHALLENGEVERIFICATION\",\n challengeRequestId: this.challengeRequestId,\n challengeAnswerId: this.challengeAnswerId,\n challengeSuccess: true,\n commentUpdate,\n };\n this.emit(\"challengeverification\", challengeVerificationMessage, this);\n }\n\n stop() {\n if ((this as any).updating || (this as any).updatingState !== \"stopped\") {\n (this as any).state = \"stopped\";\n (this as any).updating = false;\n (this as any).updatingState = \"stopped\";\n this.emit(\"statechange\", \"stopped\");\n this.emit(\"updatingstatechange\", \"stopped\");\n }\n }\n}\n\nclass Comment extends Publication {\n author: any;\n updating: boolean;\n upvoteCount: number | undefined;\n downvoteCount: number | undefined;\n content: string | undefined;\n parentCid: string | undefined;\n replies: any;\n replyCount: number | undefined;\n postCid: string | undefined;\n depth: number | undefined;\n spoiler: boolean | undefined;\n flair: any | undefined;\n pinned: boolean | undefined;\n locked: boolean | undefined;\n deleted: boolean | undefined;\n removed: boolean | undefined;\n purged: boolean | undefined;\n edit: any;\n original: any;\n reason: string | undefined;\n shortCid: string | undefined;\n _getCommentOnFirstUpdate = false;\n updatingState: string | undefined;\n communityAddress: string | undefined;\n shortCommunityAddress: string | undefined;\n\n constructor(createCommentOptions?: any) {\n super();\n this.cid = createCommentOptions?.cid;\n this.upvoteCount = createCommentOptions?.upvoteCount;\n this.downvoteCount = createCommentOptions?.downvoteCount;\n this.content = createCommentOptions?.content;\n this.author = createCommentOptions?.author;\n this.timestamp = createCommentOptions?.timestamp;\n this.parentCid = createCommentOptions?.parentCid;\n this.postCid = createCommentOptions?.postCid;\n this.parentCid = createCommentOptions?.parentCid;\n this.depth = createCommentOptions?.depth;\n this.spoiler = createCommentOptions?.spoiler;\n this.flair = createCommentOptions?.flair;\n this.pinned = createCommentOptions?.pinned;\n this.locked = createCommentOptions?.locked;\n this.deleted = createCommentOptions?.deleted;\n this.removed = createCommentOptions?.removed;\n this.purged = createCommentOptions?.purged;\n this.reason = createCommentOptions?.reason;\n this.replies = new Pages({ comment: this });\n if (this.cid) {\n this.shortCid = this.cid.substring(2, 14);\n }\n\n Object.defineProperty(this, \"updating\", { enumerable: false, writable: true });\n // @ts-ignore\n this.updating = false;\n\n // add missing props from createCommentOptions\n for (const prop in createCommentOptions) {\n // @ts-ignore\n this[prop] = createCommentOptions[prop];\n }\n\n // if the only argument is {cid}, it means the first update should use getComment()\n if (createCommentOptions?.cid && Object.keys(createCommentOptions).length === 1) {\n this._getCommentOnFirstUpdate = true;\n }\n\n if (this.communityAddress) {\n this.shortCommunityAddress = this.communityAddress.substring(0, 12);\n }\n }\n\n async update() {\n // don't update twice\n // @ts-ignore\n if (this.updating) {\n return;\n }\n // @ts-ignore\n this.updating = true;\n this.updatingState = \"fetching-ipfs\";\n this.emit(\"updatingstatechange\", \"fetching-ipfs\");\n (async () => {\n while (this.updating) {\n await simulateLoadingTime();\n await simulateLoadingTime();\n await simulateLoadingTime();\n if (!this.updating) {\n return;\n }\n this.simulateUpdateEvent();\n }\n })();\n }\n\n async simulateUpdateEvent() {\n if (!this.updating) {\n return;\n }\n assert(this.cid, `invalid comment.cid '${this.cid}' can't simulateUpdateEvent`);\n if (this._getCommentOnFirstUpdate) {\n return this.simulateGetCommentOnFirstUpdateEvent();\n }\n\n const commentUpdateContent = await getCommentUpdateContent(this);\n for (const prop in commentUpdateContent) {\n // @ts-ignore\n this[prop] = commentUpdateContent[prop];\n }\n this.shortCid = this.cid.substring(2, 14);\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n }\n\n async simulateGetCommentOnFirstUpdateEvent() {\n if (!this.updating) {\n return;\n }\n this._getCommentOnFirstUpdate = false;\n\n // @ts-ignore\n const comment = await new PKC().getComment({ cid: this.cid });\n if (!this.updating) {\n return;\n }\n const props = JSON.parse(JSON.stringify(comment));\n for (const prop in props) {\n if (prop.startsWith(\"_\")) {\n continue;\n }\n // @ts-ignore\n this[prop] = props[prop];\n }\n this.emit(\"update\", this);\n }\n}\n\nclass Vote extends Publication {\n constructor(publishVoteOptions: any) {\n super();\n for (const prop in publishVoteOptions) {\n // @ts-ignore\n this[prop] = publishVoteOptions[prop];\n }\n }\n}\n\nclass CommentEdit extends Publication {\n constructor(publishCommentEditOptions: any) {\n super();\n for (const prop in publishCommentEditOptions) {\n // @ts-ignore\n this[prop] = publishCommentEditOptions[prop];\n }\n }\n}\n\nclass CommunityEdit extends Publication {}\n\nconst createPkc: any = async (...args: any) => {\n return new PKC(...args);\n};\n\ncreatePkc.getShortAddress = (options: { address: string }) => {\n const address = options?.address;\n if (address.includes(\".\")) {\n return address;\n }\n return address.substring(0, 12);\n};\n\ncreatePkc.getShortCid = (options: { cid: string }) => {\n const cid = options?.cid;\n return cid.substring(0, 12);\n};\n\nexport default createPkc;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkc-js-mock.d.ts","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAG5F,eAAO,MAAM,mBAAmB,wBAAuD,CAAC;AAQxF,eAAO,MAAM,cAAc,YAG1B,CAAC;AACF,eAAO,MAAM,cAAc,YAE1B,CAAC;AAEF,cAAM,kBAAmB,SAAQ,YAAY;IAC3C,KAAK,SAAa;CACnB;AAED,qBAAa,GAAI,SAAQ,YAAY;IACnC,aAAa,EAAE,GAAG,EAAE,CAAC;IACrB,eAAe,EAAE;QACf,OAAO,EAAE;YACP,aAAa,EAAE;gBAAE,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAAA;aAAE,CAAC;SAC9D,CAAC;KACH,CAAC;gBAEU,OAAO,GAAE,GAAQ;IAgBvB,oBAAoB,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAiBjD,iBAAiB,CACrB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC;IAKhC,YAAY;;;;IAOZ,eAAe,CAAC,sBAAsB,EAAE,GAAG;IA6C3C,YAAY,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAqB/C,IAAI,WAAW,aAQd;IAEK,aAAa,CAAC,oBAAoB,EAAE,GAAG;IAIvC,UAAU,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAazC,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM;IAQ1B,UAAU;IAIV,iBAAiB,CAAC,wBAAwB,EAAE,GAAG;IAI/C,uBAAuB,CAAC,8BAA8B,EAAE,GAAG;IAI3D,mBAAmB,CAAC,0BAA0B,EAAE,GAAG;IAInD,QAAQ,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAQjC,eAAe,CAAC,gBAAgB,EAAE,MAAM;IACxC,iBAAiB,CAAC,gBAAgB,EAAE,MAAM;IAEhD,OAAO;;;;MAOF;IAEC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,sBAAsB,EAAE,GAAG;CAChE;AAED,cAAM,YAAa,SAAQ,YAAY;IACrC,KAAK,SAAgB;IACrB,QAAQ,EAAE,GAAG,CAAa;;IAYpB,WAAW,CAAC,QAAQ,EAAE,GAAG;CAIhC;AAED,qBAAa,KAAK;IAChB,QAAQ,EAAE,GAAG,CAAM;IACnB,KAAK,EAAE,GAAG,CAAM;IAChB,SAAS,EAAE,GAAG,CAAC;IACf,OAAO,EAAE,GAAG,CAAC;gBAED,YAAY,CAAC,EAAE,GAAG;IAQxB,OAAO,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAOhC,YAAY,CAAC,IAAI,EAAE,GAAG;IAG5B,SAAS,CAAC,OAAO,EAAE,MAAM;CA4B1B;AAED,qBAAa,SAAU,SAAQ,YAAY;IACzC,iBAAiB,SAAK;IACtB,QAAQ,UAAS;IACjB,WAAW,UAAQ;IACnB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;gBAEV,sBAAsB,CAAC,EAAE,GAAG;IA6DlC,MAAM;
|
|
1
|
+
{"version":3,"file":"pkc-js-mock.d.ts","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -337,9 +337,6 @@ export class Community extends EventEmitter {
|
|
|
337
337
|
update() {
|
|
338
338
|
return __awaiter(this, void 0, void 0, function* () {
|
|
339
339
|
this.updateCalledTimes++;
|
|
340
|
-
if (this.updateCalledTimes > 1) {
|
|
341
|
-
throw Error("with the current hooks, community.update() should be called maximum 1 times, this number might change if the hooks change and is only there to catch bugs, the real comment.update() can be called infinite times");
|
|
342
|
-
}
|
|
343
340
|
if (!this.address) {
|
|
344
341
|
throw Error(`can't update without community.address`);
|
|
345
342
|
}
|
|
@@ -373,6 +370,7 @@ export class Community extends EventEmitter {
|
|
|
373
370
|
this.description = this.address + " description updated";
|
|
374
371
|
// @ts-ignore
|
|
375
372
|
this.updatedAt = this.updatedAt + 1;
|
|
373
|
+
this.updating = false;
|
|
376
374
|
this.updatingState = "succeeded";
|
|
377
375
|
this.emit("update", this);
|
|
378
376
|
this.emit("updatingstatechange", "succeeded");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkc-js-mock.js","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAGlC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;AAExF,sDAAsD;AACtD,kDAAkD;AAClD,IAAI,uBAAuB,GAAQ,EAAE,CAAC;AACtC,IAAI,sBAAsB,GAAQ,EAAE,CAAC;AAErC,iDAAiD;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,uBAAuB,GAAG,EAAE,CAAC;IAC7B,sBAAsB,GAAG,EAAE,CAAC;AAC9B,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,OAAO,CAAC,GAAG,CAAC,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,kBAAmB,SAAQ,YAAY;IAA7C;;QACE,UAAK,GAAG,SAAS,CAAC;IACpB,CAAC;CAAA;AAED,MAAM,OAAO,GAAI,SAAQ,YAAY;IAQnC,YAAY,UAAe,EAAE;QAC3B,KAAK,EAAE,CAAC;QA8KV,YAAO,GAAG,CAAC,GAAG,EAAE;YACd,MAAM,aAAa,GAAG;gBACpB,uBAAuB,EAAE,IAAI,YAAY,EAAE;aAC5C,CAAC;YACF,OAAO;gBACL,aAAa;aACd,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;QApLH,IAAI,CAAC,aAAa,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,KAAI,EAAE,CAAC;QAClD,IAAI,CAAC,eAAe,GAAG;YACrB,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CACtC,CAAC,eAA8D,EAAE,QAAa,EAAE,EAAE,CAAC,iCAC9E,eAAe,KAClB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,kBAAkB,EAAE,IACxC,EACF,EAAE,CACH;aACF;SACF,CAAC;IACJ,CAAC;IAEK,oBAAoB,CAAC,OAA4B;;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,WACxD,OAAA,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,6DAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA,EAAA,CACtD,CAAC;YACF,MAAM,cAAc,GAAG,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5F,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,KAAK,GAAG,uBAAuB,CAAC;gBAC/C,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,mBAAmB,EAAE,CAAC;YAC5B,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC;gBACjC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,yBAAyB,CAAC;QACnC,CAAC;KAAA;IAEK,iBAAiB,CACrB,OAAoC;;YAEpC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACtF,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAChC,CAAC;KAAA;IAEK,YAAY;;YAChB,OAAO;gBACL,UAAU,EAAE,aAAa;gBACzB,OAAO,EAAE,SAAS;aACnB,CAAC;QACJ,CAAC;KAAA;IAEK,eAAe,CAAC,sBAA2B;;YAC/C,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,sBAAsB,GAAG,EAAE,CAAC;YAC9B,CAAC;YACD,MAAM,mBAAmB,GACvB,sBAAsB,CAAC,OAAO;gBAC9B,sBAAsB,CAAC,IAAI;gBAC3B,sBAAsB,CAAC,SAAS,CAAC;YAEnC,qEAAqE;YACrE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,sBAAsB,mCACjB,sBAAsB,KACzB,OAAO,EAAE,2BAA2B,GACrC,CAAC;gBACF,8DAA8D;gBAC9D,uBAAuB,CAAC,sBAAsB,CAAC,OAAO,CAAC,qBAAQ,sBAAsB,CAAE,CAAC;YAC1F,CAAC;YACD,0EAA0E;YAC1E,wCAAwC;iBACnC,IACH,uBAAuB,CAAC,sBAAsB,CAAC,OAAO,CAAC;gBACvD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,KAAK,aAAa,EACrE,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,uBAAuB,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3E,IAAI,uBAAuB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBAClE,sBAAsB,CAAC,IAAI,CAAC;4BAC1B,uBAAuB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,6DAA6D;YAC7D,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3D,KAAK,MAAM,IAAI,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1E,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjE,sBAAsB,CAAC,IAAI,CAAC;4BAC1B,sBAAsB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC/C,CAAC;KAAA;IAEK,YAAY,CAAC,OAA4B;;YAC7C,MAAM,OAAO,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC;YACjC,MAAM,mBAAmB,EAAE,CAAC;YAC5B,MAAM,sBAAsB,GAAG,EAAE,OAAO,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAQ,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;YAC7D,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;YAC/C,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,GAAG,eAAe,CAAC;YACvD,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAClE,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG;gBACzB,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,SAAS,CAAC,OAAO,GAAG,kBAAkB;gBAC9C,GAAG,EAAE,SAAS,CAAC,OAAO,GAAG,eAAe;gBACxC,MAAM,EAAE,SAAS,CAAC,OAAO,GAAG,kBAAkB;aAC/C,CAAC;YACF,SAAS,CAAC,QAAQ,CAAC,QAAQ,GAAG;gBAC5B,eAAe,EAAE,SAAS,CAAC,OAAO,GAAG,2BAA2B;aACjE,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;IAED,0CAA0C;IAC1C,IAAI,WAAW;QACb,OAAO;YACL,GAAG,IAAI,GAAG,CAAC;gBACT,0BAA0B;gBAC1B,0BAA0B;gBAC1B,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;aACxC,CAAC;SACH,CAAC;IACJ,CAAC;IAEK,aAAa,CAAC,oBAAyB;;YAC3C,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC3C,CAAC;KAAA;IAEK,UAAU,CAAC,OAAwB;;YACvC,MAAM,GAAG,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC;YACzB,MAAM,mBAAmB,EAAE,CAAC;YAC5B,MAAM,oBAAoB,mBACxB,GAAG;gBACH,4FAA4F;gBAC5F,SAAS,EAAE,UAAU,IAClB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAC1B,CAAC;YACF,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC3C,CAAC;KAAA;IAED,oFAAoF;IACpF,YAAY,CAAC,UAAmB;QAC9B,OAAO;QACL,+BAA+B;QAC/B,0CAA0C;QAC1C,kBAAkB;SACnB,CAAC;IACJ,CAAC;IAEK,UAAU;;YACd,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,CAAC;KAAA;IAEK,iBAAiB,CAAC,wBAA6B;;YACnD,OAAO,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAC;QACnD,CAAC;KAAA;IAEK,uBAAuB,CAAC,8BAAmC;;YAC/D,OAAO,IAAI,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEK,mBAAmB,CAAC,0BAA+B;;YACvD,OAAO,IAAI,aAAa,CAAC,0BAA0B,CAAC,CAAC;QACvD,CAAC;KAAA;IAEK,QAAQ,CAAC,OAAwB;;YACrC,MAAM,GAAG,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC;YACzB,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,KAAK,CAAC,wDAAwD,GAAG,GAAG,CAAC,CAAC;QAC9E,CAAC;KAAA;IAEK,eAAe,CAAC,gBAAwB;8DAAG,CAAC;KAAA;IAC5C,iBAAiB,CAAC,gBAAwB;8DAAG,CAAC;KAAA;IAW9C,eAAe,CAAC,OAAY,EAAE,sBAA2B;8DAAG,CAAC;KAAA;CACpE;AAED,MAAM,YAAa,SAAQ,YAAY;IAGrC;QACE,KAAK,EAAE,CAAC;QAHV,UAAK,GAAG,YAAY,CAAC;QACrB,aAAQ,GAAQ,SAAS,CAAC;QAGxB,iCAAiC;QACjC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAEK,WAAW,CAAC,QAAa;;YAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;KAAA;CACF;AAED,MAAM,OAAO,KAAK;IAMhB,YAAY,YAAkB;QAL9B,aAAQ,GAAQ,EAAE,CAAC;QACnB,UAAK,GAAQ,EAAE,CAAC;QAKd,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE;YACvC,KAAK,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS;YAC9B,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAEK,OAAO,CAAC,OAAwB;;YACpC,MAAM,GAAG,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC;YACzB,4FAA4F;YAC5F,MAAM,mBAAmB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;KAAA;IAEK,YAAY,CAAC,IAAS;8DAAG,CAAC;KAAA;IAEhC,yGAAyG;IACzG,SAAS,CAAC,OAAe;;QACvB,MAAM,gBAAgB,GAAG,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,MAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,gBAAgB,CAAA,CAAC;QACnF,MAAM,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAClE,MAAM,IAAI,GAAQ;YAChB,OAAO,EAAE,gBAAgB,GAAG,GAAG,GAAG,OAAO,GAAG,kBAAkB;YAC9D,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAQ;gBACnB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,KAAK;gBACtC,gBAAgB;gBAChB,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,EAAE;gBACjB,MAAM,EAAE;oBACN,OAAO,EAAE,OAAO,GAAG,kBAAkB,GAAG,KAAK;iBAC9C;gBACD,SAAS,EAAE,KAAK;aACjB,CAAC;YACF,IAAI,qBAAqB,EAAE,CAAC;gBAC1B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,YAAY;IAczC,YAAY,sBAA4B;;QACtC,KAAK,EAAE,CAAC;QAdV,sBAAiB,GAAG,CAAC,CAAC;QACtB,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,IAAI,CAAC;QAajB,IAAI,CAAC,OAAO;YACV,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,OAAO;iBAC/B,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,IAAI,CAAA;iBAC5B,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,SAAS,CAAA,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,WAAW,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,SAAS,CAAC;QAEnD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,kDAAkD;QAClD,IAAI,MAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,0CAAE,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,0CAAE,KAAK,CAAC;QAC1D,CAAC;QACD,IAAI,MAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,0CAAE,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,0CAAE,QAAQ,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,qDAAqD;QACrD,IAAI,MAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,QAAQ,0CAAE,QAAQ,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,QAAQ,0CAAE,QAAQ,CAAC;QACtE,CAAC;QAED,IAAI,sBAAsB,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;gBAC1C,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC/C,MAAM,UAAU,GACd,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC;wBAC3C,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;oBACrE,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;wBAC1D,SAAS;oBACX,CAAC;oBACD,aAAa;oBACb,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC5E,MAAM,mBAAmB,GAAG,OAAO,CACjC,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,OAAO;aAC/B,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,IAAI,CAAA;aAC5B,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,SAAS,CAAA,CAClC,CAAC;QACF,MAAM,UAAU,GACd,mBAAmB;YACnB,yBAAyB,CAAC,MAAM,GAAG,CAAC;YACpC,yBAAyB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAErE,yEAAyE;QACzE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAEK,MAAM;;YACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CACT,mNAAmN,CACpN,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACxD,CAAC;YACD,qBAAqB;YACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;YAElD,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,MAAM;;YACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7C,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KAAA;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,sBAAsB,CAAC;QACzD,aAAa;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEpC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,8DAA8D;IACxD,wBAAwB;;YAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAE/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG;gBACpB,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,kBAAkB;gBACzC,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,eAAe;gBACnC,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,kBAAkB;aAC1C,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG;gBACvB,eAAe,EAAE,IAAI,CAAC,OAAO,GAAG,2BAA2B;aAC5D,CAAC;YAEF,2BAA2B;YAC3B,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;YAE9C,2BAA2B;YAC3B,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;YAClD,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,gCAAgC;IAChC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,0CAA0C;IAC1C,UAAU;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;IAEK,IAAI,CAAC,oBAAyB;;YAClC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACtD,MAAM,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;YAErC,oBAAoB;YACpB,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;gBACxC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC7C,MAAM,UAAU,GACd,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC;wBAC3C,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;oBACrE,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;wBAC1D,SAAS;oBACX,CAAC;oBACD,aAAa;oBACb,IAAI,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,kCAAkC;YAClC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC;YAEF,qCAAqC;YACrC,IAAI,oBAAoB,CAAC,OAAO,EAAE,CAAC;gBACjC,iDAAiD;gBACjD,sBAAsB,CAAC,eAAe,CAAC,GAAG;oBACxC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC;gBACF,OAAO,sBAAsB,CAAC,eAAe,CAAC,CAAC;gBAE/C,kDAAkD;gBAClD,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,mCAChC,uBAAuB,CAAC,eAAe,CAAC,KAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,GACtB,CAAC;gBACF,OAAO,uBAAuB,CAAC,eAAe,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;KAAA;CACF;AACD,uDAAuD;AACvD,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAE1E,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAC9B,IAAI,oBAAoB,GAAG,CAAC,CAAC;AAE7B,MAAM,WAAY,SAAQ,YAAY;IAAtC;;QAIE,uBAAkB,GAAG,IAAI,EAAE,qBAAqB,EAAE,CAAC;QACnD,sBAAiB,GAAG,IAAI,EAAE,oBAAoB,EAAE,CAAC;IAwEnD,CAAC;IApEO,OAAO;;YACX,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,8BAA8B,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,8BAA8B,CAAC,CAAC;YAEnE,MAAM,mBAAmB,EAAE,CAAC;YAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC;KAAA;IAED,sBAAsB;QACpB,IAAI,CAAC,eAAe,GAAG,2BAA2B,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,2BAA2B,CAAC,CAAC;QAEhE,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG;YACvB,IAAI,EAAE,WAAW;YACjB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,CAAC,SAAS,CAAC;SACxB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAEK,uBAAuB,CAAC,gBAA0B;;YACtD,IAAI,CAAC,eAAe,GAAG,6BAA6B,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,6BAA6B,CAAC,CAAC;YAElE,MAAM,mBAAmB,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,GAAG,gCAAgC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,gCAAgC,CAAC,CAAC;YAErE,MAAM,mBAAmB,EAAE,CAAC;YAC5B,IAAI,CAAC,kCAAkC,EAAE,CAAC;QAC5C,CAAC;KAAA;IAED,kCAAkC;QAChC,iHAAiH;QACjH,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,OAAO,MAAM,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAEpD,MAAM,4BAA4B,GAAG;YACnC,IAAI,EAAE,uBAAuB;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,IAAI;YACtB,aAAa;SACd,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC;QAEvE,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACtE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;QACD,IAAK,IAAY,CAAC,QAAQ,IAAK,IAAY,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvE,IAAY,CAAC,KAAK,GAAG,SAAS,CAAC;YAC/B,IAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC9B,IAAY,CAAC,aAAa,GAAG,SAAS,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,OAAQ,SAAQ,WAAW;IAetC,YAAY,oBAA0B;;QACpC,KAAK,EAAE,CAAC;QAfV,sBAAiB,GAAG,CAAC,CAAC;QACtB,aAAQ,GAAG,KAAK,CAAC;QAef,IAAI,CAAC,GAAG,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,GAAG,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,WAAW,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,aAAa,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,OAAO,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,SAAS,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,SAAS,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,gBAAgB,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,IAAI,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,0CAAE,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,gDAAgD;QAChD,IAAI,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,OAAO,0CAAE,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,OAAO,0CAAE,KAAK,CAAC;QAC5D,CAAC;QACD,IAAI,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,OAAO,0CAAE,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,OAAO,0CAAE,QAAQ,CAAC;QAClE,CAAC;IACH,CAAC;IAEK,MAAM;;YACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CACT,iNAAiN,CAClN,CAAC;YACJ,CAAC;YACD,qBAAqB;YACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;YAElD,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,GAAG,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAEK,mCAAmC;;YACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,iEAAiE;YACjE,MAAM,WAAW,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;YACvC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,CAAC;YAErD,2BAA2B;YAC3B,IAAI,CAAC,aAAa,GAAG,sBAAsB,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;YACzD,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;CACF;AAED,MAAM,OAAO,IAAK,SAAQ,WAAW;CAAG;AAExC,MAAM,OAAO,WAAY,SAAQ,WAAW;CAAG;AAE/C,MAAM,OAAO,iBAAkB,SAAQ,WAAW;CAAG;AAErD,MAAM,OAAO,aAAc,SAAQ,WAAW;CAAG;AAEjD,MAAM,SAAS,GAAQ,CAAO,GAAG,IAAS,EAAE,EAAE;IAC5C,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAA,CAAC;AAEF,SAAS,CAAC,eAAe,GAAG,CAAC,OAA4B,EAAE,EAAE;IAC3D,MAAM,OAAO,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC;IACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,SAAS,CAAC,WAAW,GAAG,CAAC,OAAwB,EAAE,EAAE;IACnD,MAAM,GAAG,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC;IACzB,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import EventEmitter from \"events\";\nimport type { PkcResolveAuthorNameOptions, PkcResolveAuthorNameResult } from \"../pkc-types\";\n\nconst loadingTime = 10;\nexport const simulateLoadingTime = () => new Promise((r) => setTimeout(r, loadingTime));\n\n// keep a list of created and edited owner communities\n// to reinitialize them with pkc.createCommunity()\nlet createdOwnerCommunities: any = {};\nlet editedOwnerCommunities: any = {};\n\n// reset the pkc-js global state in between tests\nexport const resetPkcJsMock = () => {\n createdOwnerCommunities = {};\n editedOwnerCommunities = {};\n};\nexport const debugPkcJsMock = () => {\n console.log({ createdOwnerCommunities, editedOwnerCommunities });\n};\n\nclass NameResolverClient extends EventEmitter {\n state = \"stopped\";\n}\n\nexport class PKC extends EventEmitter {\n nameResolvers: any[];\n _clientsManager: {\n clients: {\n nameResolvers: { [resolverKey: string]: NameResolverClient };\n };\n };\n\n constructor(options: any = {}) {\n super();\n this.nameResolvers = options?.nameResolvers || [];\n this._clientsManager = {\n clients: {\n nameResolvers: this.nameResolvers.reduce(\n (resolverClients: { [resolverKey: string]: NameResolverClient }, resolver: any) => ({\n ...resolverClients,\n [resolver.key]: new NameResolverClient(),\n }),\n {},\n ),\n },\n };\n }\n\n async resolveAuthorAddress(options: { address: string }) {\n const resolver = this.nameResolvers.find((nameResolver) =>\n nameResolver?.canResolve?.({ name: options.address }),\n );\n const resolverClient = resolver && this._clientsManager.clients.nameResolvers[resolver.key];\n if (resolverClient) {\n resolverClient.state = \"resolving-author-name\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n await simulateLoadingTime();\n if (resolverClient) {\n resolverClient.state = \"stopped\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n return \"resolved author address\";\n }\n\n async resolveAuthorName(\n options: PkcResolveAuthorNameOptions,\n ): Promise<PkcResolveAuthorNameResult> {\n const resolvedAuthorName = await this.resolveAuthorAddress({ address: options.name });\n return { resolvedAuthorName };\n }\n\n async createSigner() {\n return {\n privateKey: \"private key\",\n address: \"address\",\n };\n }\n\n async createCommunity(createCommunityOptions: any) {\n if (!createCommunityOptions) {\n createCommunityOptions = {};\n }\n const communityIdentifier =\n createCommunityOptions.address ||\n createCommunityOptions.name ||\n createCommunityOptions.publicKey;\n\n // no address provided so probably a user creating an owner community\n if (!communityIdentifier) {\n createCommunityOptions = {\n ...createCommunityOptions,\n address: \"created community address\",\n };\n // createdCommunityAddresses.push('created community address')\n createdOwnerCommunities[createCommunityOptions.address] = { ...createCommunityOptions };\n }\n // only address provided, so could be a previously created owner community\n // add props from previously created sub\n else if (\n createdOwnerCommunities[createCommunityOptions.address] &&\n JSON.stringify(Object.keys(createCommunityOptions)) === '[\"address\"]'\n ) {\n for (const prop in createdOwnerCommunities[createCommunityOptions.address]) {\n if (createdOwnerCommunities[createCommunityOptions.address][prop]) {\n createCommunityOptions[prop] =\n createdOwnerCommunities[createCommunityOptions.address][prop];\n }\n }\n }\n\n // add edited props if owner community was edited in the past\n if (editedOwnerCommunities[createCommunityOptions.address]) {\n for (const prop in editedOwnerCommunities[createCommunityOptions.address]) {\n if (editedOwnerCommunities[createCommunityOptions.address][prop]) {\n createCommunityOptions[prop] =\n editedOwnerCommunities[createCommunityOptions.address][prop];\n }\n }\n }\n\n return new Community(createCommunityOptions);\n }\n\n async getCommunity(options: { address: string }) {\n const address = options?.address;\n await simulateLoadingTime();\n const createCommunityOptions = { address };\n const community: any = new Community(createCommunityOptions);\n community.title = community.address + \" title\";\n const hotPageCid = community.address + \" page cid hot\";\n community.posts.pages.hot = community.posts.pageToGet(hotPageCid);\n community.posts.pageCids = {\n hot: hotPageCid,\n topAll: community.address + \" page cid topAll\",\n new: community.address + \" page cid new\",\n active: community.address + \" page cid active\",\n };\n community.modQueue.pageCids = {\n pendingApproval: community.address + \" page cid pendingApproval\",\n };\n return community;\n }\n\n // TODO: implement event communitieschange\n get communities() {\n return [\n ...new Set([\n \"list community address 1\",\n \"list community address 2\",\n ...Object.keys(createdOwnerCommunities),\n ]),\n ];\n }\n\n async createComment(createCommentOptions: any) {\n return new Comment(createCommentOptions);\n }\n\n async getComment(options: { cid: string }) {\n const cid = options?.cid;\n await simulateLoadingTime();\n const createCommentOptions = {\n cid,\n // useComment() requires timestamp or will use account comment instead of comment from store\n timestamp: 1670000000,\n ...this.commentToGet(cid),\n };\n return new Comment(createCommentOptions);\n }\n\n // mock this method to get a comment with different content, timestamp, address, etc\n commentToGet(commentCid?: string) {\n return {\n // content: 'mock some content'\n // author: {address: 'mock some address'},\n // timestamp: 1234\n };\n }\n\n async createVote() {\n return new Vote();\n }\n\n async createCommentEdit(createCommentEditOptions: any) {\n return new CommentEdit(createCommentEditOptions);\n }\n\n async createCommentModeration(createCommentModerationOptions: any) {\n return new CommentModeration(createCommentModerationOptions);\n }\n\n async createCommunityEdit(createCommunityEditOptions: any) {\n return new CommunityEdit(createCommunityEditOptions);\n }\n\n async fetchCid(options: { cid: string }) {\n const cid = options?.cid;\n if (cid?.startsWith(\"statscid\")) {\n return JSON.stringify({ hourActiveUserCount: 1 });\n }\n throw Error(`pkc.fetchCid not implemented in pkc-js mock for cid '${cid}'`);\n }\n\n async pubsubSubscribe(communityAddress: string) {}\n async pubsubUnsubscribe(communityAddress: string) {}\n\n clients = (() => {\n const pkcRpcClients = {\n \"http://localhost:9138\": new PkcRpcClient(),\n };\n return {\n pkcRpcClients,\n };\n })();\n\n async validateComment(comment: any, validateCommentOptions: any) {}\n}\n\nclass PkcRpcClient extends EventEmitter {\n state = \"connecting\";\n settings: any = undefined;\n constructor() {\n super();\n // simulate connecting to the rpc\n setTimeout(() => {\n this.state = \"connected\";\n this.settings = { challenges: {} };\n this.emit(\"statechange\", this.state);\n this.emit(\"settingschange\", this.settings);\n }, 10);\n }\n\n async setSettings(settings: any) {\n this.settings = settings;\n this.emit(\"settingschange\", this.settings);\n }\n}\n\nexport class Pages {\n pageCids: any = {};\n pages: any = {};\n community: any;\n comment: any;\n\n constructor(pagesOptions?: any) {\n Object.defineProperty(this, \"community\", {\n value: pagesOptions?.community,\n enumerable: false,\n });\n Object.defineProperty(this, \"comment\", { value: pagesOptions?.comment, enumerable: false });\n }\n\n async getPage(options: { cid: string }) {\n const cid = options?.cid;\n // need to wait twice otherwise react renders too fast and fetches too many pages in advance\n await simulateLoadingTime();\n return this.pageToGet(cid);\n }\n\n async validatePage(page: any) {}\n\n // mock this method to get pages with different content, or use to getPage without simulated loading time\n pageToGet(pageCid: string) {\n const communityAddress = this.community?.address || this.comment?.communityAddress;\n const isPendingApprovalPage = pageCid.includes(\"pendingApproval\");\n const page: any = {\n nextCid: communityAddress + \" \" + pageCid + \" - next page cid\",\n comments: [],\n };\n const postCount = 100;\n let index = 0;\n while (index++ < postCount) {\n const comment: any = {\n timestamp: index,\n cid: pageCid + \" comment cid \" + index,\n communityAddress,\n upvoteCount: index,\n downvoteCount: 10,\n author: {\n address: pageCid + \" author address \" + index,\n },\n updatedAt: index,\n };\n if (isPendingApprovalPage) {\n comment.pendingApproval = true;\n }\n page.comments.push(comment);\n }\n return page;\n }\n}\n\nexport class Community extends EventEmitter {\n updateCalledTimes = 0;\n updating = false;\n firstUpdate = true;\n address: string | undefined;\n title: string | undefined;\n description: string | undefined;\n posts: Pages;\n modQueue: Pages;\n updatedAt: number | undefined;\n statsCid: string | undefined;\n state: string;\n updatingState: string;\n\n constructor(createCommunityOptions?: any) {\n super();\n this.address =\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey;\n this.title = createCommunityOptions?.title;\n this.description = createCommunityOptions?.description;\n this.statsCid = \"statscid\";\n this.state = \"stopped\";\n this.updatingState = \"stopped\";\n this.updatedAt = createCommunityOptions?.updatedAt;\n\n this.posts = new Pages({ community: this });\n // add community.posts from createCommunityOptions\n if (createCommunityOptions?.posts?.pages) {\n this.posts.pages = createCommunityOptions?.posts?.pages;\n }\n if (createCommunityOptions?.posts?.pageCids) {\n this.posts.pageCids = createCommunityOptions?.posts?.pageCids;\n }\n\n this.modQueue = new Pages({ community: this });\n // add community.modQueue from createCommunityOptions\n if (createCommunityOptions?.modQueue?.pageCids) {\n this.modQueue.pageCids = createCommunityOptions?.modQueue?.pageCids;\n }\n\n if (createCommunityOptions) {\n for (const prop in createCommunityOptions) {\n if (createCommunityOptions[prop] !== undefined) {\n const descriptor =\n Object.getOwnPropertyDescriptor(this, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), prop);\n if (descriptor && !descriptor.writable && !descriptor.set) {\n continue;\n }\n // @ts-ignore\n this[prop] = createCommunityOptions[prop];\n }\n }\n }\n\n const lookupKeys = [\"address\", \"name\", \"publicKey\"];\n const createCommunityOptionKeys = Object.keys(createCommunityOptions || {});\n const hasLookupIdentifier = Boolean(\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey,\n );\n const lookupOnly =\n hasLookupIdentifier &&\n createCommunityOptionKeys.length > 0 &&\n createCommunityOptionKeys.every((key) => lookupKeys.includes(key));\n\n // only trigger a first update for lookup-only remote community instances\n if (!lookupOnly) {\n this.firstUpdate = false;\n }\n }\n\n async update() {\n this.updateCalledTimes++;\n if (this.updateCalledTimes > 1) {\n throw Error(\n \"with the current hooks, community.update() should be called maximum 1 times, this number might change if the hooks change and is only there to catch bugs, the real comment.update() can be called infinite times\",\n );\n }\n if (!this.address) {\n throw Error(`can't update without community.address`);\n }\n // don't update twice\n if (this.updating) {\n return;\n }\n this.updating = true;\n\n this.state = \"updating\";\n this.updatingState = \"fetching-ipns\";\n this.emit(\"statechange\", \"updating\");\n this.emit(\"updatingstatechange\", \"fetching-ipns\");\n\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n async delete() {\n if (this.address) {\n delete createdOwnerCommunities[this.address];\n delete editedOwnerCommunities[this.address];\n }\n }\n\n simulateUpdateEvent() {\n if (this.firstUpdate) {\n this.simulateFirstUpdateEvent();\n return;\n }\n\n this.description = this.address + \" description updated\";\n // @ts-ignore\n this.updatedAt = this.updatedAt + 1;\n\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n }\n\n // the first update event adds all the field from getCommunity\n async simulateFirstUpdateEvent() {\n this.firstUpdate = false;\n this.updatedAt = Math.floor(Date.now() / 1000);\n\n this.title = this.address + \" title\";\n const hotPageCid = this.address + \" page cid hot\";\n this.posts.pages.hot = this.posts.pageToGet(hotPageCid);\n this.posts.pageCids = {\n hot: hotPageCid,\n topAll: this.address + \" page cid topAll\",\n new: this.address + \" page cid new\",\n active: this.address + \" page cid active\",\n };\n this.modQueue.pageCids = {\n pendingApproval: this.address + \" page cid pendingApproval\",\n };\n\n // simulate the ipns update\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n\n // simulate the next update\n this.updatingState = \"fetching-ipns\";\n this.emit(\"updatingstatechange\", \"fetching-ipns\");\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n // use getting to easily mock it\n get roles() {\n return this.rolesToGet();\n }\n\n // mock this method to get different roles\n rolesToGet() {\n return {};\n }\n\n async edit(editCommunityOptions: any) {\n if (!this.address || typeof this.address !== \"string\") {\n throw Error(`can't community.edit with no community.address`);\n }\n const previousAddress = this.address;\n\n // do community.edit\n for (const prop in editCommunityOptions) {\n if (editCommunityOptions[prop] !== undefined) {\n const descriptor =\n Object.getOwnPropertyDescriptor(this, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), prop);\n if (descriptor && !descriptor.writable && !descriptor.set) {\n continue;\n }\n // @ts-ignore\n this[prop] = editCommunityOptions[prop];\n }\n }\n\n // keep a list of edited communities to reinitialize\n // them with pkc.createCommunity()\n editedOwnerCommunities[this.address] = {\n address: this.address,\n title: this.title,\n description: this.description,\n };\n\n // handle change of community.address\n if (editCommunityOptions.address) {\n // apply address change to editedOwnerCommunities\n editedOwnerCommunities[previousAddress] = {\n address: this.address,\n title: this.title,\n description: this.description,\n };\n delete editedOwnerCommunities[previousAddress];\n\n // apply address change to createdOwnerCommunities\n createdOwnerCommunities[this.address] = {\n ...createdOwnerCommunities[previousAddress],\n address: this.address,\n };\n delete createdOwnerCommunities[previousAddress];\n }\n }\n}\n// make roles enumarable so it acts like a regular prop\nObject.defineProperty(Community.prototype, \"roles\", { enumerable: true });\n\nlet challengeRequestCount = 0;\nlet challengeAnswerCount = 0;\n\nclass Publication extends EventEmitter {\n timestamp: number | undefined;\n content: string | undefined;\n cid: string | undefined;\n challengeRequestId = `r${++challengeRequestCount}`;\n challengeAnswerId = `a${++challengeAnswerCount}`;\n state: string | undefined;\n publishingState: string | undefined;\n\n async publish() {\n this.state = \"publishing\";\n this.publishingState = \"publishing-challenge-request\";\n this.emit(\"statechange\", \"publishing\");\n this.emit(\"publishingstatechange\", \"publishing-challenge-request\");\n\n await simulateLoadingTime();\n this.simulateChallengeEvent();\n }\n\n simulateChallengeEvent() {\n this.publishingState = \"waiting-challenge-answers\";\n this.emit(\"publishingstatechange\", \"waiting-challenge-answers\");\n\n const challenge = { type: \"text\", challenge: \"2+2=?\" };\n const challengeMessage = {\n type: \"CHALLENGE\",\n challengeRequestId: this.challengeRequestId,\n challenges: [challenge],\n };\n this.emit(\"challenge\", challengeMessage, this);\n }\n\n async publishChallengeAnswers(challengeAnswers: string[]) {\n this.publishingState = \"publishing-challenge-answer\";\n this.emit(\"publishingstatechange\", \"publishing-challenge-answer\");\n\n await simulateLoadingTime();\n this.publishingState = \"waiting-challenge-verification\";\n this.emit(\"publishingstatechange\", \"waiting-challenge-verification\");\n\n await simulateLoadingTime();\n this.simulateChallengeVerificationEvent();\n }\n\n simulateChallengeVerificationEvent() {\n // if publication has content, create cid for this content and add it to comment and challengeVerificationMessage\n this.cid = this.content && `${this.content} cid`;\n const commentUpdate = this.cid && { cid: this.cid };\n\n const challengeVerificationMessage = {\n type: \"CHALLENGEVERIFICATION\",\n challengeRequestId: this.challengeRequestId,\n challengeAnswerId: this.challengeAnswerId,\n challengeSuccess: true,\n commentUpdate,\n };\n this.emit(\"challengeverification\", challengeVerificationMessage, this);\n\n this.publishingState = \"succeeded\";\n this.emit(\"publishingstatechange\", \"succeeded\");\n }\n\n stop() {\n if (this.state === \"publishing\" || this.publishingState !== \"stopped\") {\n this.state = \"stopped\";\n this.publishingState = \"stopped\";\n this.emit(\"statechange\", \"stopped\");\n this.emit(\"publishingstatechange\", \"stopped\");\n }\n if ((this as any).updating || (this as any).updatingState !== \"stopped\") {\n (this as any).state = \"stopped\";\n (this as any).updating = false;\n (this as any).updatingState = \"stopped\";\n this.emit(\"statechange\", \"stopped\");\n this.emit(\"updatingstatechange\", \"stopped\");\n }\n }\n}\n\nexport class Comment extends Publication {\n updateCalledTimes = 0;\n updating = false;\n author: any;\n upvoteCount: number | undefined;\n downvoteCount: number | undefined;\n content: string | undefined;\n parentCid: string | undefined;\n replies: any;\n updatedAt: number | undefined;\n communityAddress: string | undefined;\n state: string;\n updatingState: string;\n publishingState: string;\n\n constructor(createCommentOptions?: any) {\n super();\n this.cid = createCommentOptions?.cid;\n this.upvoteCount = createCommentOptions?.upvoteCount;\n this.downvoteCount = createCommentOptions?.downvoteCount;\n this.content = createCommentOptions?.content;\n this.author = createCommentOptions?.author;\n this.timestamp = createCommentOptions?.timestamp;\n this.parentCid = createCommentOptions?.parentCid;\n this.communityAddress = createCommentOptions?.communityAddress;\n this.state = \"stopped\";\n this.updatingState = \"stopped\";\n this.publishingState = \"stopped\";\n\n if (createCommentOptions?.author?.address) {\n this.author.shortAddress = `short ${createCommentOptions.author.address}`;\n }\n\n this.replies = new Pages({ comment: this });\n\n // add comment.replies from createCommentOptions\n if (createCommentOptions?.replies?.pages) {\n this.replies.pages = createCommentOptions?.replies?.pages;\n }\n if (createCommentOptions?.replies?.pageCids) {\n this.replies.pageCids = createCommentOptions?.replies?.pageCids;\n }\n }\n\n async update() {\n this.updateCalledTimes++;\n if (this.updateCalledTimes > 5) {\n throw Error(\n \"with the current hooks, comment.update() should be called maximum 5 times, this number might change if the hooks change and is only there to catch bugs, the real comment.update() can be called infinite times\",\n );\n }\n // don't update twice\n if (this.updating) {\n return;\n }\n this.updating = true;\n\n this.state = \"updating\";\n this.updatingState = \"fetching-ipfs\";\n this.emit(\"statechange\", \"updating\");\n this.emit(\"updatingstatechange\", \"fetching-ipfs\");\n\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n simulateUpdateEvent() {\n if (!this.updating) {\n return;\n }\n // if timestamp isn't defined, simulate fetching the comment ipfs\n if (!this.timestamp) {\n this.simulateFetchCommentIpfsUpdateEvent();\n return;\n }\n\n // simulate finding vote counts on an IPNS record\n this.upvoteCount = typeof this.upvoteCount === \"number\" ? this.upvoteCount + 2 : 3;\n this.downvoteCount = typeof this.downvoteCount === \"number\" ? this.downvoteCount + 1 : 1;\n this.updatedAt = Math.floor(Date.now() / 1000);\n\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n }\n\n async simulateFetchCommentIpfsUpdateEvent() {\n if (!this.updating) {\n return;\n }\n // use pkc.getComment() so mocking PKC.prototype.getComment works\n const commentIpfs = await new PKC().getComment({ cid: this.cid || \"\" });\n if (!this.updating) {\n return;\n }\n this.content = commentIpfs.content;\n this.author = commentIpfs.author;\n this.timestamp = commentIpfs.timestamp;\n this.parentCid = commentIpfs.parentCid;\n this.communityAddress = commentIpfs.communityAddress;\n\n // simulate the ipns update\n this.updatingState = \"fetching-update-ipns\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"fetching-update-ipns\");\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n}\n\nexport class Vote extends Publication {}\n\nexport class CommentEdit extends Publication {}\n\nexport class CommentModeration extends Publication {}\n\nexport class CommunityEdit extends Publication {}\n\nconst createPkc: any = async (...args: any) => {\n return new PKC(...args);\n};\n\ncreatePkc.getShortAddress = (options: { address: string }) => {\n const address = options?.address;\n if (address.includes(\".\")) {\n return address;\n }\n return address.substring(2, 14);\n};\n\ncreatePkc.getShortCid = (options: { cid: string }) => {\n const cid = options?.cid;\n return cid.substring(2, 14);\n};\n\nexport default createPkc;\n"]}
|
|
1
|
+
{"version":3,"file":"pkc-js-mock.js","sourceRoot":"","sources":["../../../src/lib/pkc-js/pkc-js-mock.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from \"events\";\nimport type { PkcResolveAuthorNameOptions, PkcResolveAuthorNameResult } from \"../pkc-types\";\n\nconst loadingTime = 10;\nexport const simulateLoadingTime = () => new Promise((r) => setTimeout(r, loadingTime));\n\n// keep a list of created and edited owner communities\n// to reinitialize them with pkc.createCommunity()\nlet createdOwnerCommunities: any = {};\nlet editedOwnerCommunities: any = {};\n\n// reset the pkc-js global state in between tests\nexport const resetPkcJsMock = () => {\n createdOwnerCommunities = {};\n editedOwnerCommunities = {};\n};\nexport const debugPkcJsMock = () => {\n console.log({ createdOwnerCommunities, editedOwnerCommunities });\n};\n\nclass NameResolverClient extends EventEmitter {\n state = \"stopped\";\n}\n\nexport class PKC extends EventEmitter {\n nameResolvers: any[];\n _clientsManager: {\n clients: {\n nameResolvers: { [resolverKey: string]: NameResolverClient };\n };\n };\n\n constructor(options: any = {}) {\n super();\n this.nameResolvers = options?.nameResolvers || [];\n this._clientsManager = {\n clients: {\n nameResolvers: this.nameResolvers.reduce(\n (resolverClients: { [resolverKey: string]: NameResolverClient }, resolver: any) => ({\n ...resolverClients,\n [resolver.key]: new NameResolverClient(),\n }),\n {},\n ),\n },\n };\n }\n\n async resolveAuthorAddress(options: { address: string }) {\n const resolver = this.nameResolvers.find((nameResolver) =>\n nameResolver?.canResolve?.({ name: options.address }),\n );\n const resolverClient = resolver && this._clientsManager.clients.nameResolvers[resolver.key];\n if (resolverClient) {\n resolverClient.state = \"resolving-author-name\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n await simulateLoadingTime();\n if (resolverClient) {\n resolverClient.state = \"stopped\";\n resolverClient.emit(\"statechange\", resolverClient.state);\n }\n return \"resolved author address\";\n }\n\n async resolveAuthorName(\n options: PkcResolveAuthorNameOptions,\n ): Promise<PkcResolveAuthorNameResult> {\n const resolvedAuthorName = await this.resolveAuthorAddress({ address: options.name });\n return { resolvedAuthorName };\n }\n\n async createSigner() {\n return {\n privateKey: \"private key\",\n address: \"address\",\n };\n }\n\n async createCommunity(createCommunityOptions: any) {\n if (!createCommunityOptions) {\n createCommunityOptions = {};\n }\n const communityIdentifier =\n createCommunityOptions.address ||\n createCommunityOptions.name ||\n createCommunityOptions.publicKey;\n\n // no address provided so probably a user creating an owner community\n if (!communityIdentifier) {\n createCommunityOptions = {\n ...createCommunityOptions,\n address: \"created community address\",\n };\n // createdCommunityAddresses.push('created community address')\n createdOwnerCommunities[createCommunityOptions.address] = { ...createCommunityOptions };\n }\n // only address provided, so could be a previously created owner community\n // add props from previously created sub\n else if (\n createdOwnerCommunities[createCommunityOptions.address] &&\n JSON.stringify(Object.keys(createCommunityOptions)) === '[\"address\"]'\n ) {\n for (const prop in createdOwnerCommunities[createCommunityOptions.address]) {\n if (createdOwnerCommunities[createCommunityOptions.address][prop]) {\n createCommunityOptions[prop] =\n createdOwnerCommunities[createCommunityOptions.address][prop];\n }\n }\n }\n\n // add edited props if owner community was edited in the past\n if (editedOwnerCommunities[createCommunityOptions.address]) {\n for (const prop in editedOwnerCommunities[createCommunityOptions.address]) {\n if (editedOwnerCommunities[createCommunityOptions.address][prop]) {\n createCommunityOptions[prop] =\n editedOwnerCommunities[createCommunityOptions.address][prop];\n }\n }\n }\n\n return new Community(createCommunityOptions);\n }\n\n async getCommunity(options: { address: string }) {\n const address = options?.address;\n await simulateLoadingTime();\n const createCommunityOptions = { address };\n const community: any = new Community(createCommunityOptions);\n community.title = community.address + \" title\";\n const hotPageCid = community.address + \" page cid hot\";\n community.posts.pages.hot = community.posts.pageToGet(hotPageCid);\n community.posts.pageCids = {\n hot: hotPageCid,\n topAll: community.address + \" page cid topAll\",\n new: community.address + \" page cid new\",\n active: community.address + \" page cid active\",\n };\n community.modQueue.pageCids = {\n pendingApproval: community.address + \" page cid pendingApproval\",\n };\n return community;\n }\n\n // TODO: implement event communitieschange\n get communities() {\n return [\n ...new Set([\n \"list community address 1\",\n \"list community address 2\",\n ...Object.keys(createdOwnerCommunities),\n ]),\n ];\n }\n\n async createComment(createCommentOptions: any) {\n return new Comment(createCommentOptions);\n }\n\n async getComment(options: { cid: string }) {\n const cid = options?.cid;\n await simulateLoadingTime();\n const createCommentOptions = {\n cid,\n // useComment() requires timestamp or will use account comment instead of comment from store\n timestamp: 1670000000,\n ...this.commentToGet(cid),\n };\n return new Comment(createCommentOptions);\n }\n\n // mock this method to get a comment with different content, timestamp, address, etc\n commentToGet(commentCid?: string) {\n return {\n // content: 'mock some content'\n // author: {address: 'mock some address'},\n // timestamp: 1234\n };\n }\n\n async createVote() {\n return new Vote();\n }\n\n async createCommentEdit(createCommentEditOptions: any) {\n return new CommentEdit(createCommentEditOptions);\n }\n\n async createCommentModeration(createCommentModerationOptions: any) {\n return new CommentModeration(createCommentModerationOptions);\n }\n\n async createCommunityEdit(createCommunityEditOptions: any) {\n return new CommunityEdit(createCommunityEditOptions);\n }\n\n async fetchCid(options: { cid: string }) {\n const cid = options?.cid;\n if (cid?.startsWith(\"statscid\")) {\n return JSON.stringify({ hourActiveUserCount: 1 });\n }\n throw Error(`pkc.fetchCid not implemented in pkc-js mock for cid '${cid}'`);\n }\n\n async pubsubSubscribe(communityAddress: string) {}\n async pubsubUnsubscribe(communityAddress: string) {}\n\n clients = (() => {\n const pkcRpcClients = {\n \"http://localhost:9138\": new PkcRpcClient(),\n };\n return {\n pkcRpcClients,\n };\n })();\n\n async validateComment(comment: any, validateCommentOptions: any) {}\n}\n\nclass PkcRpcClient extends EventEmitter {\n state = \"connecting\";\n settings: any = undefined;\n constructor() {\n super();\n // simulate connecting to the rpc\n setTimeout(() => {\n this.state = \"connected\";\n this.settings = { challenges: {} };\n this.emit(\"statechange\", this.state);\n this.emit(\"settingschange\", this.settings);\n }, 10);\n }\n\n async setSettings(settings: any) {\n this.settings = settings;\n this.emit(\"settingschange\", this.settings);\n }\n}\n\nexport class Pages {\n pageCids: any = {};\n pages: any = {};\n community: any;\n comment: any;\n\n constructor(pagesOptions?: any) {\n Object.defineProperty(this, \"community\", {\n value: pagesOptions?.community,\n enumerable: false,\n });\n Object.defineProperty(this, \"comment\", { value: pagesOptions?.comment, enumerable: false });\n }\n\n async getPage(options: { cid: string }) {\n const cid = options?.cid;\n // need to wait twice otherwise react renders too fast and fetches too many pages in advance\n await simulateLoadingTime();\n return this.pageToGet(cid);\n }\n\n async validatePage(page: any) {}\n\n // mock this method to get pages with different content, or use to getPage without simulated loading time\n pageToGet(pageCid: string) {\n const communityAddress = this.community?.address || this.comment?.communityAddress;\n const isPendingApprovalPage = pageCid.includes(\"pendingApproval\");\n const page: any = {\n nextCid: communityAddress + \" \" + pageCid + \" - next page cid\",\n comments: [],\n };\n const postCount = 100;\n let index = 0;\n while (index++ < postCount) {\n const comment: any = {\n timestamp: index,\n cid: pageCid + \" comment cid \" + index,\n communityAddress,\n upvoteCount: index,\n downvoteCount: 10,\n author: {\n address: pageCid + \" author address \" + index,\n },\n updatedAt: index,\n };\n if (isPendingApprovalPage) {\n comment.pendingApproval = true;\n }\n page.comments.push(comment);\n }\n return page;\n }\n}\n\nexport class Community extends EventEmitter {\n updateCalledTimes = 0;\n updating = false;\n firstUpdate = true;\n address: string | undefined;\n title: string | undefined;\n description: string | undefined;\n posts: Pages;\n modQueue: Pages;\n updatedAt: number | undefined;\n statsCid: string | undefined;\n state: string;\n updatingState: string;\n\n constructor(createCommunityOptions?: any) {\n super();\n this.address =\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey;\n this.title = createCommunityOptions?.title;\n this.description = createCommunityOptions?.description;\n this.statsCid = \"statscid\";\n this.state = \"stopped\";\n this.updatingState = \"stopped\";\n this.updatedAt = createCommunityOptions?.updatedAt;\n\n this.posts = new Pages({ community: this });\n // add community.posts from createCommunityOptions\n if (createCommunityOptions?.posts?.pages) {\n this.posts.pages = createCommunityOptions?.posts?.pages;\n }\n if (createCommunityOptions?.posts?.pageCids) {\n this.posts.pageCids = createCommunityOptions?.posts?.pageCids;\n }\n\n this.modQueue = new Pages({ community: this });\n // add community.modQueue from createCommunityOptions\n if (createCommunityOptions?.modQueue?.pageCids) {\n this.modQueue.pageCids = createCommunityOptions?.modQueue?.pageCids;\n }\n\n if (createCommunityOptions) {\n for (const prop in createCommunityOptions) {\n if (createCommunityOptions[prop] !== undefined) {\n const descriptor =\n Object.getOwnPropertyDescriptor(this, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), prop);\n if (descriptor && !descriptor.writable && !descriptor.set) {\n continue;\n }\n // @ts-ignore\n this[prop] = createCommunityOptions[prop];\n }\n }\n }\n\n const lookupKeys = [\"address\", \"name\", \"publicKey\"];\n const createCommunityOptionKeys = Object.keys(createCommunityOptions || {});\n const hasLookupIdentifier = Boolean(\n createCommunityOptions?.address ||\n createCommunityOptions?.name ||\n createCommunityOptions?.publicKey,\n );\n const lookupOnly =\n hasLookupIdentifier &&\n createCommunityOptionKeys.length > 0 &&\n createCommunityOptionKeys.every((key) => lookupKeys.includes(key));\n\n // only trigger a first update for lookup-only remote community instances\n if (!lookupOnly) {\n this.firstUpdate = false;\n }\n }\n\n async update() {\n this.updateCalledTimes++;\n if (!this.address) {\n throw Error(`can't update without community.address`);\n }\n // don't update twice\n if (this.updating) {\n return;\n }\n this.updating = true;\n\n this.state = \"updating\";\n this.updatingState = \"fetching-ipns\";\n this.emit(\"statechange\", \"updating\");\n this.emit(\"updatingstatechange\", \"fetching-ipns\");\n\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n async delete() {\n if (this.address) {\n delete createdOwnerCommunities[this.address];\n delete editedOwnerCommunities[this.address];\n }\n }\n\n simulateUpdateEvent() {\n if (this.firstUpdate) {\n this.simulateFirstUpdateEvent();\n return;\n }\n\n this.description = this.address + \" description updated\";\n // @ts-ignore\n this.updatedAt = this.updatedAt + 1;\n\n this.updating = false;\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n }\n\n // the first update event adds all the field from getCommunity\n async simulateFirstUpdateEvent() {\n this.firstUpdate = false;\n this.updatedAt = Math.floor(Date.now() / 1000);\n\n this.title = this.address + \" title\";\n const hotPageCid = this.address + \" page cid hot\";\n this.posts.pages.hot = this.posts.pageToGet(hotPageCid);\n this.posts.pageCids = {\n hot: hotPageCid,\n topAll: this.address + \" page cid topAll\",\n new: this.address + \" page cid new\",\n active: this.address + \" page cid active\",\n };\n this.modQueue.pageCids = {\n pendingApproval: this.address + \" page cid pendingApproval\",\n };\n\n // simulate the ipns update\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n\n // simulate the next update\n this.updatingState = \"fetching-ipns\";\n this.emit(\"updatingstatechange\", \"fetching-ipns\");\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n // use getting to easily mock it\n get roles() {\n return this.rolesToGet();\n }\n\n // mock this method to get different roles\n rolesToGet() {\n return {};\n }\n\n async edit(editCommunityOptions: any) {\n if (!this.address || typeof this.address !== \"string\") {\n throw Error(`can't community.edit with no community.address`);\n }\n const previousAddress = this.address;\n\n // do community.edit\n for (const prop in editCommunityOptions) {\n if (editCommunityOptions[prop] !== undefined) {\n const descriptor =\n Object.getOwnPropertyDescriptor(this, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), prop);\n if (descriptor && !descriptor.writable && !descriptor.set) {\n continue;\n }\n // @ts-ignore\n this[prop] = editCommunityOptions[prop];\n }\n }\n\n // keep a list of edited communities to reinitialize\n // them with pkc.createCommunity()\n editedOwnerCommunities[this.address] = {\n address: this.address,\n title: this.title,\n description: this.description,\n };\n\n // handle change of community.address\n if (editCommunityOptions.address) {\n // apply address change to editedOwnerCommunities\n editedOwnerCommunities[previousAddress] = {\n address: this.address,\n title: this.title,\n description: this.description,\n };\n delete editedOwnerCommunities[previousAddress];\n\n // apply address change to createdOwnerCommunities\n createdOwnerCommunities[this.address] = {\n ...createdOwnerCommunities[previousAddress],\n address: this.address,\n };\n delete createdOwnerCommunities[previousAddress];\n }\n }\n}\n// make roles enumarable so it acts like a regular prop\nObject.defineProperty(Community.prototype, \"roles\", { enumerable: true });\n\nlet challengeRequestCount = 0;\nlet challengeAnswerCount = 0;\n\nclass Publication extends EventEmitter {\n timestamp: number | undefined;\n content: string | undefined;\n cid: string | undefined;\n challengeRequestId = `r${++challengeRequestCount}`;\n challengeAnswerId = `a${++challengeAnswerCount}`;\n state: string | undefined;\n publishingState: string | undefined;\n\n async publish() {\n this.state = \"publishing\";\n this.publishingState = \"publishing-challenge-request\";\n this.emit(\"statechange\", \"publishing\");\n this.emit(\"publishingstatechange\", \"publishing-challenge-request\");\n\n await simulateLoadingTime();\n this.simulateChallengeEvent();\n }\n\n simulateChallengeEvent() {\n this.publishingState = \"waiting-challenge-answers\";\n this.emit(\"publishingstatechange\", \"waiting-challenge-answers\");\n\n const challenge = { type: \"text\", challenge: \"2+2=?\" };\n const challengeMessage = {\n type: \"CHALLENGE\",\n challengeRequestId: this.challengeRequestId,\n challenges: [challenge],\n };\n this.emit(\"challenge\", challengeMessage, this);\n }\n\n async publishChallengeAnswers(challengeAnswers: string[]) {\n this.publishingState = \"publishing-challenge-answer\";\n this.emit(\"publishingstatechange\", \"publishing-challenge-answer\");\n\n await simulateLoadingTime();\n this.publishingState = \"waiting-challenge-verification\";\n this.emit(\"publishingstatechange\", \"waiting-challenge-verification\");\n\n await simulateLoadingTime();\n this.simulateChallengeVerificationEvent();\n }\n\n simulateChallengeVerificationEvent() {\n // if publication has content, create cid for this content and add it to comment and challengeVerificationMessage\n this.cid = this.content && `${this.content} cid`;\n const commentUpdate = this.cid && { cid: this.cid };\n\n const challengeVerificationMessage = {\n type: \"CHALLENGEVERIFICATION\",\n challengeRequestId: this.challengeRequestId,\n challengeAnswerId: this.challengeAnswerId,\n challengeSuccess: true,\n commentUpdate,\n };\n this.emit(\"challengeverification\", challengeVerificationMessage, this);\n\n this.publishingState = \"succeeded\";\n this.emit(\"publishingstatechange\", \"succeeded\");\n }\n\n stop() {\n if (this.state === \"publishing\" || this.publishingState !== \"stopped\") {\n this.state = \"stopped\";\n this.publishingState = \"stopped\";\n this.emit(\"statechange\", \"stopped\");\n this.emit(\"publishingstatechange\", \"stopped\");\n }\n if ((this as any).updating || (this as any).updatingState !== \"stopped\") {\n (this as any).state = \"stopped\";\n (this as any).updating = false;\n (this as any).updatingState = \"stopped\";\n this.emit(\"statechange\", \"stopped\");\n this.emit(\"updatingstatechange\", \"stopped\");\n }\n }\n}\n\nexport class Comment extends Publication {\n updateCalledTimes = 0;\n updating = false;\n author: any;\n upvoteCount: number | undefined;\n downvoteCount: number | undefined;\n content: string | undefined;\n parentCid: string | undefined;\n replies: any;\n updatedAt: number | undefined;\n communityAddress: string | undefined;\n state: string;\n updatingState: string;\n publishingState: string;\n\n constructor(createCommentOptions?: any) {\n super();\n this.cid = createCommentOptions?.cid;\n this.upvoteCount = createCommentOptions?.upvoteCount;\n this.downvoteCount = createCommentOptions?.downvoteCount;\n this.content = createCommentOptions?.content;\n this.author = createCommentOptions?.author;\n this.timestamp = createCommentOptions?.timestamp;\n this.parentCid = createCommentOptions?.parentCid;\n this.communityAddress = createCommentOptions?.communityAddress;\n this.state = \"stopped\";\n this.updatingState = \"stopped\";\n this.publishingState = \"stopped\";\n\n if (createCommentOptions?.author?.address) {\n this.author.shortAddress = `short ${createCommentOptions.author.address}`;\n }\n\n this.replies = new Pages({ comment: this });\n\n // add comment.replies from createCommentOptions\n if (createCommentOptions?.replies?.pages) {\n this.replies.pages = createCommentOptions?.replies?.pages;\n }\n if (createCommentOptions?.replies?.pageCids) {\n this.replies.pageCids = createCommentOptions?.replies?.pageCids;\n }\n }\n\n async update() {\n this.updateCalledTimes++;\n if (this.updateCalledTimes > 5) {\n throw Error(\n \"with the current hooks, comment.update() should be called maximum 5 times, this number might change if the hooks change and is only there to catch bugs, the real comment.update() can be called infinite times\",\n );\n }\n // don't update twice\n if (this.updating) {\n return;\n }\n this.updating = true;\n\n this.state = \"updating\";\n this.updatingState = \"fetching-ipfs\";\n this.emit(\"statechange\", \"updating\");\n this.emit(\"updatingstatechange\", \"fetching-ipfs\");\n\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n\n simulateUpdateEvent() {\n if (!this.updating) {\n return;\n }\n // if timestamp isn't defined, simulate fetching the comment ipfs\n if (!this.timestamp) {\n this.simulateFetchCommentIpfsUpdateEvent();\n return;\n }\n\n // simulate finding vote counts on an IPNS record\n this.upvoteCount = typeof this.upvoteCount === \"number\" ? this.upvoteCount + 2 : 3;\n this.downvoteCount = typeof this.downvoteCount === \"number\" ? this.downvoteCount + 1 : 1;\n this.updatedAt = Math.floor(Date.now() / 1000);\n\n this.updatingState = \"succeeded\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"succeeded\");\n }\n\n async simulateFetchCommentIpfsUpdateEvent() {\n if (!this.updating) {\n return;\n }\n // use pkc.getComment() so mocking PKC.prototype.getComment works\n const commentIpfs = await new PKC().getComment({ cid: this.cid || \"\" });\n if (!this.updating) {\n return;\n }\n this.content = commentIpfs.content;\n this.author = commentIpfs.author;\n this.timestamp = commentIpfs.timestamp;\n this.parentCid = commentIpfs.parentCid;\n this.communityAddress = commentIpfs.communityAddress;\n\n // simulate the ipns update\n this.updatingState = \"fetching-update-ipns\";\n this.emit(\"update\", this);\n this.emit(\"updatingstatechange\", \"fetching-update-ipns\");\n simulateLoadingTime().then(() => {\n this.simulateUpdateEvent();\n });\n }\n}\n\nexport class Vote extends Publication {}\n\nexport class CommentEdit extends Publication {}\n\nexport class CommentModeration extends Publication {}\n\nexport class CommunityEdit extends Publication {}\n\nconst createPkc: any = async (...args: any) => {\n return new PKC(...args);\n};\n\ncreatePkc.getShortAddress = (options: { address: string }) => {\n const address = options?.address;\n if (address.includes(\".\")) {\n return address;\n }\n return address.substring(2, 14);\n};\n\ncreatePkc.getShortCid = (options: { cid: string }) => {\n const cid = options?.cid;\n return cid.substring(2, 14);\n};\n\nexport default createPkc;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communities-store.d.ts","sourceRoot":"","sources":["../../../src/stores/communities/communities-store.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,WAAW,EAIZ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"communities-store.d.ts","sourceRoot":"","sources":["../../../src/stores/communities/communities-store.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,WAAW,EAIZ,MAAM,aAAa,CAAC;AAcrB,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AA6I3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE;QAAE,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,EAAE,CAAA;KAAE,CAAC;IAChD,mBAAmB,EAAE,QAAQ,CAAC;IAC9B,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,aAAa,EAAE,QAAQ,CAAC;IACxB,eAAe,EAAE,QAAQ,CAAC;IAC1B,eAAe,EAAE,QAAQ,CAAC;CAC3B,CAAC;AAEF,QAAA,MAAM,gBAAgB,+EAmVrB,CAAC;AAKF,eAAO,MAAM,qBAAqB,qBAWjC,CAAC;AAGF,eAAO,MAAM,gCAAgC,qBAG5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -21,7 +21,14 @@ import accountsStore from "../accounts/index.js";
|
|
|
21
21
|
import communitiesPagesStore from "../communities-pages/index.js";
|
|
22
22
|
import { getCommunityLookupOptions, getCommunityRefKey } from "../../lib/community-ref.js";
|
|
23
23
|
import { createPkcCommunity, getPkcCommunity, getPkcCommunityAddresses, getPkcCreateCommunity, getPkcGetCommunity, } from "../../lib/pkc-compat.js";
|
|
24
|
+
export const COMMUNITY_UPDATE_INTERVAL_MS = 15 * 60 * 1000;
|
|
24
25
|
let pkcGetCommunityPending = {};
|
|
26
|
+
// Key pollers by community so delete/reset can stop the matching live instance.
|
|
27
|
+
const communityUpdatePollers = {};
|
|
28
|
+
// reset all event listeners in between tests
|
|
29
|
+
const listeners = [];
|
|
30
|
+
const COMMUNITY_ERROR_UPDATE_GRACE_MS = 1000;
|
|
31
|
+
const pendingCommunityErrorTimers = {};
|
|
25
32
|
const createCommunityWithLookupFallback = (pkc, communityLookupOptions, communityKey) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
33
|
const supportsAddressLookup = "address" in communityLookupOptions;
|
|
27
34
|
const community = yield createPkcCommunity(pkc, communityLookupOptions);
|
|
@@ -30,8 +37,82 @@ const createCommunityWithLookupFallback = (pkc, communityLookupOptions, communit
|
|
|
30
37
|
}
|
|
31
38
|
throw Error(`communitiesStore.addCommunityToStore failed getting community '${communityKey}'`);
|
|
32
39
|
});
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
const updateCommunity = (community, { communityAddressOrRef, communityKey, }) => {
|
|
41
|
+
community.update().catch((error) => log.trace("community.update error", {
|
|
42
|
+
communityAddressOrRef,
|
|
43
|
+
communityKey,
|
|
44
|
+
community,
|
|
45
|
+
error,
|
|
46
|
+
}));
|
|
47
|
+
};
|
|
48
|
+
const startCommunityUpdatePolling = (community, { communityAddressOrRef, communityKey, }) => {
|
|
49
|
+
stopCommunityUpdatePolling(communityKey);
|
|
50
|
+
updateCommunity(community, { communityAddressOrRef, communityKey });
|
|
51
|
+
communityUpdatePollers[communityKey] = {
|
|
52
|
+
community,
|
|
53
|
+
updateInterval: setInterval(() => updateCommunity(community, { communityAddressOrRef, communityKey }), COMMUNITY_UPDATE_INTERVAL_MS),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const stopCommunityUpdatePolling = (communityKey) => {
|
|
57
|
+
const polling = communityUpdatePollers[communityKey];
|
|
58
|
+
if (!polling) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
clearPendingCommunityErrors(communityKey);
|
|
62
|
+
clearInterval(polling.updateInterval);
|
|
63
|
+
polling.community.removeAllListeners();
|
|
64
|
+
const listenerIndex = listeners.indexOf(polling.community);
|
|
65
|
+
if (listenerIndex >= 0) {
|
|
66
|
+
listeners.splice(listenerIndex, 1);
|
|
67
|
+
}
|
|
68
|
+
delete communityUpdatePollers[communityKey];
|
|
69
|
+
};
|
|
70
|
+
const clearPendingCommunityErrors = (communityKey) => {
|
|
71
|
+
var _a;
|
|
72
|
+
(_a = pendingCommunityErrorTimers[communityKey]) === null || _a === void 0 ? void 0 : _a.forEach((timeout) => clearTimeout(timeout));
|
|
73
|
+
delete pendingCommunityErrorTimers[communityKey];
|
|
74
|
+
};
|
|
75
|
+
const clearStoredCommunityErrors = (state, communityKey) => {
|
|
76
|
+
if (!state.errors[communityKey]) {
|
|
77
|
+
return state.errors;
|
|
78
|
+
}
|
|
79
|
+
const nextErrors = Object.assign({}, state.errors);
|
|
80
|
+
delete nextErrors[communityKey];
|
|
81
|
+
return nextErrors;
|
|
82
|
+
};
|
|
83
|
+
const isRetriableCommunityLoadError = (error) => {
|
|
84
|
+
const details = error.details;
|
|
85
|
+
return Boolean(details &&
|
|
86
|
+
typeof details === "object" &&
|
|
87
|
+
"retriableError" in details &&
|
|
88
|
+
details.retriableError === true);
|
|
89
|
+
};
|
|
90
|
+
const scheduleCommunityError = (setState, communityKey, error) => {
|
|
91
|
+
if (isRetriableCommunityLoadError(error)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const timeout = setTimeout(() => {
|
|
95
|
+
const pendingTimeouts = pendingCommunityErrorTimers[communityKey];
|
|
96
|
+
if (!(pendingTimeouts === null || pendingTimeouts === void 0 ? void 0 : pendingTimeouts.includes(timeout))) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const remainingTimeouts = pendingTimeouts.filter((pendingTimeout) => pendingTimeout !== timeout);
|
|
100
|
+
if (remainingTimeouts.length === 0) {
|
|
101
|
+
delete pendingCommunityErrorTimers[communityKey];
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
pendingCommunityErrorTimers[communityKey] = remainingTimeouts;
|
|
105
|
+
}
|
|
106
|
+
setState((state) => {
|
|
107
|
+
const communityErrors = state.errors[communityKey] || [];
|
|
108
|
+
return Object.assign(Object.assign({}, state), { errors: Object.assign(Object.assign({}, state.errors), { [communityKey]: [...communityErrors, error] }) });
|
|
109
|
+
});
|
|
110
|
+
}, COMMUNITY_ERROR_UPDATE_GRACE_MS);
|
|
111
|
+
pendingCommunityErrorTimers[communityKey] = [
|
|
112
|
+
...(pendingCommunityErrorTimers[communityKey] || []),
|
|
113
|
+
timeout,
|
|
114
|
+
];
|
|
115
|
+
};
|
|
35
116
|
const communitiesStore = createStore((setState, getState) => ({
|
|
36
117
|
communities: {},
|
|
37
118
|
errors: {},
|
|
@@ -122,6 +203,8 @@ const communitiesStore = createStore((setState, getState) => ({
|
|
|
122
203
|
}));
|
|
123
204
|
// the community has published new posts
|
|
124
205
|
community.on("update", (updatedCommunity) => __awaiter(this, void 0, void 0, function* () {
|
|
206
|
+
clearPendingCommunityErrors(communityKey);
|
|
207
|
+
setState((state) => (Object.assign(Object.assign({}, state), { errors: clearStoredCommunityErrors(state, communityKey) })));
|
|
125
208
|
updatedCommunity = utils.clone(updatedCommunity);
|
|
126
209
|
// add fetchedAt to be able to expire the cache
|
|
127
210
|
// NOTE: fetchedAt is undefined on owner communities because never stale
|
|
@@ -133,9 +216,7 @@ const communitiesStore = createStore((setState, getState) => ({
|
|
|
133
216
|
updatedCommunity,
|
|
134
217
|
account,
|
|
135
218
|
});
|
|
136
|
-
setState((state) => ({
|
|
137
|
-
communities: Object.assign(Object.assign({}, state.communities), { [communityKey]: updatedCommunity }),
|
|
138
|
-
}));
|
|
219
|
+
setState((state) => (Object.assign(Object.assign({}, state), { communities: Object.assign(Object.assign({}, state.communities), { [communityKey]: updatedCommunity }) })));
|
|
139
220
|
// if a community has a role with an account's address add it to the account.communities
|
|
140
221
|
accountsStore
|
|
141
222
|
.getState()
|
|
@@ -149,11 +230,7 @@ const communitiesStore = createStore((setState, getState) => ({
|
|
|
149
230
|
}));
|
|
150
231
|
});
|
|
151
232
|
community.on("error", (error) => {
|
|
152
|
-
setState
|
|
153
|
-
let communityErrors = state.errors[communityKey] || [];
|
|
154
|
-
communityErrors = [...communityErrors, error];
|
|
155
|
-
return Object.assign(Object.assign({}, state), { errors: Object.assign(Object.assign({}, state.errors), { [communityKey]: communityErrors }) });
|
|
156
|
-
});
|
|
233
|
+
scheduleCommunityError(setState, communityKey, error);
|
|
157
234
|
});
|
|
158
235
|
// set clients on community so the frontend can display it, dont persist in db because a reload cancels updating
|
|
159
236
|
utils.clientsOnStateChange(community === null || community === void 0 ? void 0 : community.clients, (clientState, clientType, clientUrl, chainTicker) => {
|
|
@@ -178,9 +255,7 @@ const communitiesStore = createStore((setState, getState) => ({
|
|
|
178
255
|
});
|
|
179
256
|
});
|
|
180
257
|
listeners.push(community);
|
|
181
|
-
community
|
|
182
|
-
.update()
|
|
183
|
-
.catch((error) => log.trace("community.update error", { community, error }));
|
|
258
|
+
startCommunityUpdatePolling(community, { communityAddressOrRef, communityKey });
|
|
184
259
|
}
|
|
185
260
|
finally {
|
|
186
261
|
pkcGetCommunityPending[pendingKey] = false;
|
|
@@ -275,6 +350,7 @@ const communitiesStore = createStore((setState, getState) => ({
|
|
|
275
350
|
// could fix some test issues
|
|
276
351
|
community.on("error", console.log);
|
|
277
352
|
yield community.delete();
|
|
353
|
+
stopCommunityUpdatePolling(communityAddress);
|
|
278
354
|
yield communitiesDatabase.removeItem(communityAddress);
|
|
279
355
|
log("communitiesStore.deleteCommunity", { communityAddress, community, account });
|
|
280
356
|
setState((state) => ({
|
|
@@ -288,8 +364,11 @@ const originalState = communitiesStore.getState();
|
|
|
288
364
|
// async function because some stores have async init
|
|
289
365
|
export const resetCommunitiesStore = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
290
366
|
pkcGetCommunityPending = {};
|
|
367
|
+
Object.keys(pendingCommunityErrorTimers).forEach(clearPendingCommunityErrors);
|
|
291
368
|
// remove all event listeners
|
|
292
369
|
listeners.forEach((listener) => listener.removeAllListeners());
|
|
370
|
+
listeners.length = 0;
|
|
371
|
+
Object.keys(communityUpdatePollers).forEach(stopCommunityUpdatePolling);
|
|
293
372
|
// destroy all component subscriptions to the store
|
|
294
373
|
communitiesStore.destroy();
|
|
295
374
|
// restore original state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communities-store.js","sourceRoot":"","sources":["../../../src/stores/communities/communities-store.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"assert\";\nimport localForageLru from \"../../lib/localforage-lru\";\nconst communitiesDatabase = localForageLru.createInstance({\n name: \"bitsocialReactHooks-communities\",\n size: 500,\n});\nimport Logger from \"@pkcprotocol/pkc-logger\";\nconst log = Logger(\"bitsocial-react-hooks:communities:stores\");\nimport {\n Community,\n Communities,\n Account,\n CommunityIdentifier,\n CreateCommunityOptions,\n} from \"../../types\";\nimport utils from \"../../lib/utils\";\nimport createStore from \"zustand\";\nimport accountsStore from \"../accounts\";\nimport communitiesPagesStore from \"../communities-pages\";\nimport { getCommunityLookupOptions, getCommunityRefKey } from \"../../lib/community-ref\";\nimport {\n createPkcCommunity,\n getPkcCommunity,\n getPkcCommunityAddresses,\n getPkcCreateCommunity,\n getPkcGetCommunity,\n} from \"../../lib/pkc-compat\";\n\nlet pkcGetCommunityPending: { [key: string]: boolean } = {};\n\nconst createCommunityWithLookupFallback = async (\n pkc: any,\n communityLookupOptions: { address?: string; name?: string; publicKey?: string },\n communityKey: string,\n) => {\n const supportsAddressLookup = \"address\" in communityLookupOptions;\n const community = await createPkcCommunity(pkc, communityLookupOptions);\n if (community?.address || supportsAddressLookup) {\n return community;\n }\n throw Error(`communitiesStore.addCommunityToStore failed getting community '${communityKey}'`);\n};\n\n// reset all event listeners in between tests\nconst listeners: any = [];\n\nexport type CommunitiesState = {\n communities: Communities;\n errors: { [communityAddress: string]: Error[] };\n addCommunityToStore: Function;\n refreshCommunity: Function;\n editCommunity: Function;\n createCommunity: Function;\n deleteCommunity: Function;\n};\n\nconst communitiesStore = createStore<CommunitiesState>(\n (setState: Function, getState: Function) => ({\n communities: {},\n errors: {},\n\n async addCommunityToStore(\n communityAddressOrRef: string | CommunityIdentifier,\n account: Account,\n ) {\n const communityLookupOptions = getCommunityLookupOptions(communityAddressOrRef);\n const communityKey =\n typeof communityAddressOrRef === \"string\"\n ? communityAddressOrRef\n : getCommunityRefKey(communityAddressOrRef);\n assert(\n communityKey !== \"\" && typeof communityKey === \"string\",\n `communitiesStore.addCommunityToStore invalid communityAddress argument '${communityAddressOrRef}'`,\n );\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.addCommunityToStore invalid account argument '${account}'`,\n );\n\n // community is in store already, do nothing\n const { communities } = getState();\n let community: Community | undefined = communities[communityKey];\n const pendingKey = communityKey + account.id;\n if (community || pkcGetCommunityPending[pendingKey]) {\n return;\n }\n\n // start trying to get community\n pkcGetCommunityPending[pendingKey] = true;\n let errorGettingCommunity: any;\n try {\n // try to find community in owner communities\n if (getPkcCommunityAddresses(account.pkc).includes(communityKey)) {\n try {\n community = await createCommunityWithLookupFallback(\n account.pkc,\n communityLookupOptions,\n communityKey,\n );\n } catch (e) {\n errorGettingCommunity = e;\n }\n }\n\n // try to find community in database\n let fetchedAt: number | undefined;\n if (!community) {\n const communityData: any = await communitiesDatabase.getItem(communityKey);\n if (communityData) {\n fetchedAt = communityData.fetchedAt;\n delete communityData.fetchedAt; // not part of pkc-js schema\n try {\n community = await createPkcCommunity(account.pkc, communityData);\n } catch (e) {\n fetchedAt = undefined;\n // need to log this always or it could silently fail in production and cache never be used\n console.error(\"failed pkc.createCommunity(cachedCommunity)\", {\n cachedCommunity: communityData,\n error: e,\n });\n }\n }\n if (community) {\n // add page comments to communitiesPagesStore so they can be used in useComment\n communitiesPagesStore.getState().addCommunityPageCommentsToStore(community);\n }\n }\n\n // community not in database, try to fetch from pkc-js\n if (!community) {\n try {\n community = await createCommunityWithLookupFallback(\n account.pkc,\n communityLookupOptions,\n communityKey,\n );\n } catch (e) {\n errorGettingCommunity = e;\n }\n }\n\n // failure getting community\n if (!community) {\n if (errorGettingCommunity) {\n setState((state: CommunitiesState) => {\n let communityErrors = state.errors[communityKey] || [];\n communityErrors = [...communityErrors, errorGettingCommunity];\n return { ...state, errors: { ...state.errors, [communityKey]: communityErrors } };\n });\n }\n\n throw (\n errorGettingCommunity ||\n Error(`communitiesStore.addCommunityToStore failed getting community '${communityKey}'`)\n );\n }\n\n // success getting community\n const firstCommunityState = utils.clone({ ...community, fetchedAt });\n await communitiesDatabase.setItem(communityKey, firstCommunityState);\n log(\"communitiesStore.addCommunityToStore\", {\n communityAddressOrRef,\n communityKey,\n community,\n account,\n });\n setState((state: any) => ({\n communities: { ...state.communities, [communityKey]: firstCommunityState },\n }));\n\n // the community has published new posts\n community.on(\"update\", async (updatedCommunity: Community) => {\n updatedCommunity = utils.clone(updatedCommunity);\n\n // add fetchedAt to be able to expire the cache\n // NOTE: fetchedAt is undefined on owner communities because never stale\n updatedCommunity.fetchedAt = Math.floor(Date.now() / 1000);\n\n await communitiesDatabase.setItem(communityKey, updatedCommunity);\n log(\"communitiesStore community update\", {\n communityAddressOrRef,\n communityKey,\n updatedCommunity,\n account,\n });\n setState((state: any) => ({\n communities: { ...state.communities, [communityKey]: updatedCommunity },\n }));\n\n // if a community has a role with an account's address add it to the account.communities\n accountsStore\n .getState()\n .accountsActionsInternal.addCommunityRoleToAccountsCommunities(updatedCommunity);\n\n // add page comments to communitiesPagesStore so they can be used in useComment\n communitiesPagesStore.getState().addCommunityPageCommentsToStore(updatedCommunity);\n });\n\n community.on(\"updatingstatechange\", (updatingState: string) => {\n setState((state: CommunitiesState) => ({\n communities: {\n ...state.communities,\n [communityKey]: { ...state.communities[communityKey], updatingState },\n },\n }));\n });\n\n community.on(\"error\", (error: Error) => {\n setState((state: CommunitiesState) => {\n let communityErrors = state.errors[communityKey] || [];\n communityErrors = [...communityErrors, error];\n return { ...state, errors: { ...state.errors, [communityKey]: communityErrors } };\n });\n });\n\n // set clients on community so the frontend can display it, dont persist in db because a reload cancels updating\n utils.clientsOnStateChange(\n community?.clients,\n (clientState: string, clientType: string, clientUrl: string, chainTicker?: string) => {\n setState((state: CommunitiesState) => {\n // make sure not undefined, sometimes happens in e2e tests\n if (!state.communities[communityKey]) {\n return {};\n }\n const clients = { ...state.communities[communityKey]?.clients };\n const client = { state: clientState };\n if (chainTicker) {\n const chainProviders = { ...clients[clientType][chainTicker], [clientUrl]: client };\n clients[clientType] = { ...clients[clientType], [chainTicker]: chainProviders };\n } else {\n clients[clientType] = { ...clients[clientType], [clientUrl]: client };\n }\n return {\n communities: {\n ...state.communities,\n [communityKey]: { ...state.communities[communityKey], clients },\n },\n };\n });\n },\n );\n\n listeners.push(community);\n community\n .update()\n .catch((error: unknown) => log.trace(\"community.update error\", { community, error }));\n } finally {\n pkcGetCommunityPending[pendingKey] = false;\n }\n },\n\n async refreshCommunity(communityAddressOrRef: string | CommunityIdentifier, account: Account) {\n const communityLookupOptions = getCommunityLookupOptions(communityAddressOrRef);\n const communityKey =\n typeof communityAddressOrRef === \"string\"\n ? communityAddressOrRef\n : getCommunityRefKey(communityAddressOrRef);\n assert(\n communityKey !== \"\" && typeof communityKey === \"string\",\n `communitiesStore.refreshCommunity invalid communityAddress argument '${communityAddressOrRef}'`,\n );\n assert(\n typeof getPkcGetCommunity(account?.pkc) === \"function\",\n `communitiesStore.refreshCommunity invalid account argument '${account}'`,\n );\n\n const refreshedCommunity = utils.clone(\n await getPkcCommunity(account.pkc, communityLookupOptions),\n );\n refreshedCommunity.fetchedAt = Math.floor(Date.now() / 1000);\n\n await communitiesDatabase.setItem(communityKey, refreshedCommunity);\n log(\"communitiesStore.refreshCommunity\", {\n communityAddressOrRef,\n communityKey,\n refreshedCommunity,\n account,\n });\n setState((state: any) => ({\n communities: { ...state.communities, [communityKey]: refreshedCommunity },\n }));\n\n communitiesPagesStore.getState().addCommunityPageCommentsToStore(refreshedCommunity);\n\n return refreshedCommunity;\n },\n\n // user is the owner of the community and can edit it locally\n async editCommunity(communityAddress: string, communityEditOptions: any, account: Account) {\n assert(\n communityAddress !== \"\" && typeof communityAddress === \"string\",\n `communitiesStore.editCommunity invalid communityAddress argument '${communityAddress}'`,\n );\n assert(\n communityEditOptions && typeof communityEditOptions === \"object\",\n `communitiesStore.editCommunity invalid communityEditOptions argument '${communityEditOptions}'`,\n );\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.editCommunity invalid account argument '${account}'`,\n );\n\n // if not added to store first, community.update() is never called\n await getState().addCommunityToStore(communityAddress, account);\n\n // `communityAddress` is different from `communityEditOptions.address` when editing the community address\n const community = await createPkcCommunity(account.pkc, {\n address: communityAddress,\n });\n\n // could fix some test issues\n community.on(\"error\", console.log);\n\n await community.edit(communityEditOptions);\n\n const updatedCommunity = utils.clone(community);\n // edit db of both old and new community address to not break the UI\n await communitiesDatabase.setItem(communityAddress, updatedCommunity);\n await communitiesDatabase.setItem(community.address, updatedCommunity);\n log(\"communitiesStore.editCommunity\", {\n communityAddress,\n communityEditOptions,\n community,\n account,\n });\n setState((state: any) => ({\n communities: {\n ...state.communities,\n // edit react state of both old and new community address to not break the UI\n [communityAddress]: updatedCommunity,\n [community.address]: updatedCommunity,\n },\n }));\n },\n\n // internal action called by accountsActions.createCommunity\n async createCommunity(createCommunityOptions: CreateCommunityOptions, account: Account) {\n assert(\n !createCommunityOptions || typeof createCommunityOptions === \"object\",\n `communitiesStore.createCommunity invalid createCommunityOptions argument '${createCommunityOptions}'`,\n );\n if (!createCommunityOptions?.signer) {\n assert(\n !createCommunityOptions?.address,\n `communitiesStore.createCommunity createCommunityOptions.address '${createCommunityOptions?.address}' must be undefined to create a community`,\n );\n }\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.createCommunity invalid account argument '${account}'`,\n );\n\n const community = await createPkcCommunity(account.pkc, createCommunityOptions);\n\n // could fix some test issues\n community.on(\"error\", console.log);\n\n // if not added to store first, community.update() is never called\n await getState().addCommunityToStore(community.address, account);\n\n await communitiesDatabase.setItem(community.address, utils.clone(community));\n log(\"communitiesStore.createCommunity\", { createCommunityOptions, community, account });\n setState((state: any) => ({\n communities: { ...state.communities, [community.address]: utils.clone(community) },\n }));\n return community;\n },\n\n // internal action called by accountsActions.deleteCommunity\n async deleteCommunity(communityAddress: string, account: Account) {\n assert(\n communityAddress && typeof communityAddress === \"string\",\n `communitiesStore.deleteCommunity invalid communityAddress argument '${communityAddress}'`,\n );\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.deleteCommunity invalid account argument '${account}'`,\n );\n\n const community = await createPkcCommunity(account.pkc, {\n address: communityAddress,\n });\n\n // could fix some test issues\n community.on(\"error\", console.log);\n\n await community.delete();\n await communitiesDatabase.removeItem(communityAddress);\n log(\"communitiesStore.deleteCommunity\", { communityAddress, community, account });\n setState((state: any) => ({\n communities: { ...state.communities, [communityAddress]: undefined },\n }));\n },\n }),\n);\n\n// reset store in between tests\nconst originalState = communitiesStore.getState();\n// async function because some stores have async init\nexport const resetCommunitiesStore = async () => {\n pkcGetCommunityPending = {};\n // remove all event listeners\n listeners.forEach((listener: any) => listener.removeAllListeners());\n // destroy all component subscriptions to the store\n communitiesStore.destroy();\n // restore original state\n communitiesStore.setState(originalState);\n};\n\n// reset database and store in between tests\nexport const resetCommunitiesDatabaseAndStore = async () => {\n await localForageLru.createInstance({ name: \"bitsocialReactHooks-communities\" }).clear();\n await resetCommunitiesStore();\n};\n\nexport default communitiesStore;\n"]}
|
|
1
|
+
{"version":3,"file":"communities-store.js","sourceRoot":"","sources":["../../../src/stores/communities/communities-store.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"assert\";\nimport localForageLru from \"../../lib/localforage-lru\";\nconst communitiesDatabase = localForageLru.createInstance({\n name: \"bitsocialReactHooks-communities\",\n size: 500,\n});\nimport Logger from \"@pkcprotocol/pkc-logger\";\nconst log = Logger(\"bitsocial-react-hooks:communities:stores\");\nimport {\n Community,\n Communities,\n Account,\n CommunityIdentifier,\n CreateCommunityOptions,\n} from \"../../types\";\nimport utils from \"../../lib/utils\";\nimport createStore from \"zustand\";\nimport accountsStore from \"../accounts\";\nimport communitiesPagesStore from \"../communities-pages\";\nimport { getCommunityLookupOptions, getCommunityRefKey } from \"../../lib/community-ref\";\nimport {\n createPkcCommunity,\n getPkcCommunity,\n getPkcCommunityAddresses,\n getPkcCreateCommunity,\n getPkcGetCommunity,\n} from \"../../lib/pkc-compat\";\n\nexport const COMMUNITY_UPDATE_INTERVAL_MS = 15 * 60 * 1000;\n\nlet pkcGetCommunityPending: { [key: string]: boolean } = {};\n// Key pollers by community so delete/reset can stop the matching live instance.\nconst communityUpdatePollers: {\n [communityKey: string]: {\n community: any;\n updateInterval: ReturnType<typeof setInterval>;\n };\n} = {};\n\n// reset all event listeners in between tests\nconst listeners: any = [];\n\nconst COMMUNITY_ERROR_UPDATE_GRACE_MS = 1000;\nconst pendingCommunityErrorTimers: {\n [communityKey: string]: ReturnType<typeof setTimeout>[];\n} = {};\n\nconst createCommunityWithLookupFallback = async (\n pkc: any,\n communityLookupOptions: { address?: string; name?: string; publicKey?: string },\n communityKey: string,\n) => {\n const supportsAddressLookup = \"address\" in communityLookupOptions;\n const community = await createPkcCommunity(pkc, communityLookupOptions);\n if (community?.address || supportsAddressLookup) {\n return community;\n }\n throw Error(`communitiesStore.addCommunityToStore failed getting community '${communityKey}'`);\n};\n\nconst updateCommunity = (\n community: Community,\n {\n communityAddressOrRef,\n communityKey,\n }: { communityAddressOrRef: string | CommunityIdentifier; communityKey: string },\n) => {\n community.update().catch((error: unknown) =>\n log.trace(\"community.update error\", {\n communityAddressOrRef,\n communityKey,\n community,\n error,\n }),\n );\n};\n\nconst startCommunityUpdatePolling = (\n community: Community,\n {\n communityAddressOrRef,\n communityKey,\n }: { communityAddressOrRef: string | CommunityIdentifier; communityKey: string },\n) => {\n stopCommunityUpdatePolling(communityKey);\n updateCommunity(community, { communityAddressOrRef, communityKey });\n communityUpdatePollers[communityKey] = {\n community,\n updateInterval: setInterval(\n () => updateCommunity(community, { communityAddressOrRef, communityKey }),\n COMMUNITY_UPDATE_INTERVAL_MS,\n ),\n };\n};\n\nconst stopCommunityUpdatePolling = (communityKey: string) => {\n const polling = communityUpdatePollers[communityKey];\n if (!polling) {\n return;\n }\n\n clearPendingCommunityErrors(communityKey);\n clearInterval(polling.updateInterval);\n polling.community.removeAllListeners();\n const listenerIndex = listeners.indexOf(polling.community);\n if (listenerIndex >= 0) {\n listeners.splice(listenerIndex, 1);\n }\n delete communityUpdatePollers[communityKey];\n};\n\nconst clearPendingCommunityErrors = (communityKey: string) => {\n pendingCommunityErrorTimers[communityKey]?.forEach((timeout) => clearTimeout(timeout));\n delete pendingCommunityErrorTimers[communityKey];\n};\n\nconst clearStoredCommunityErrors = (state: CommunitiesState, communityKey: string) => {\n if (!state.errors[communityKey]) {\n return state.errors;\n }\n const nextErrors = { ...state.errors };\n delete nextErrors[communityKey];\n return nextErrors;\n};\n\nconst isRetriableCommunityLoadError = (error: Error) => {\n const details = (error as Error & { details?: unknown }).details;\n return Boolean(\n details &&\n typeof details === \"object\" &&\n \"retriableError\" in details &&\n (details as { retriableError?: unknown }).retriableError === true,\n );\n};\n\nconst scheduleCommunityError = (setState: Function, communityKey: string, error: Error) => {\n if (isRetriableCommunityLoadError(error)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n const pendingTimeouts = pendingCommunityErrorTimers[communityKey];\n if (!pendingTimeouts?.includes(timeout)) {\n return;\n }\n\n const remainingTimeouts = pendingTimeouts.filter(\n (pendingTimeout) => pendingTimeout !== timeout,\n );\n if (remainingTimeouts.length === 0) {\n delete pendingCommunityErrorTimers[communityKey];\n } else {\n pendingCommunityErrorTimers[communityKey] = remainingTimeouts;\n }\n setState((state: CommunitiesState) => {\n const communityErrors = state.errors[communityKey] || [];\n return {\n ...state,\n errors: { ...state.errors, [communityKey]: [...communityErrors, error] },\n };\n });\n }, COMMUNITY_ERROR_UPDATE_GRACE_MS);\n\n pendingCommunityErrorTimers[communityKey] = [\n ...(pendingCommunityErrorTimers[communityKey] || []),\n timeout,\n ];\n};\n\nexport type CommunitiesState = {\n communities: Communities;\n errors: { [communityAddress: string]: Error[] };\n addCommunityToStore: Function;\n refreshCommunity: Function;\n editCommunity: Function;\n createCommunity: Function;\n deleteCommunity: Function;\n};\n\nconst communitiesStore = createStore<CommunitiesState>(\n (setState: Function, getState: Function) => ({\n communities: {},\n errors: {},\n\n async addCommunityToStore(\n communityAddressOrRef: string | CommunityIdentifier,\n account: Account,\n ) {\n const communityLookupOptions = getCommunityLookupOptions(communityAddressOrRef);\n const communityKey =\n typeof communityAddressOrRef === \"string\"\n ? communityAddressOrRef\n : getCommunityRefKey(communityAddressOrRef);\n assert(\n communityKey !== \"\" && typeof communityKey === \"string\",\n `communitiesStore.addCommunityToStore invalid communityAddress argument '${communityAddressOrRef}'`,\n );\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.addCommunityToStore invalid account argument '${account}'`,\n );\n\n // community is in store already, do nothing\n const { communities } = getState();\n let community: Community | undefined = communities[communityKey];\n const pendingKey = communityKey + account.id;\n if (community || pkcGetCommunityPending[pendingKey]) {\n return;\n }\n\n // start trying to get community\n pkcGetCommunityPending[pendingKey] = true;\n let errorGettingCommunity: any;\n try {\n // try to find community in owner communities\n if (getPkcCommunityAddresses(account.pkc).includes(communityKey)) {\n try {\n community = await createCommunityWithLookupFallback(\n account.pkc,\n communityLookupOptions,\n communityKey,\n );\n } catch (e) {\n errorGettingCommunity = e;\n }\n }\n\n // try to find community in database\n let fetchedAt: number | undefined;\n if (!community) {\n const communityData: any = await communitiesDatabase.getItem(communityKey);\n if (communityData) {\n fetchedAt = communityData.fetchedAt;\n delete communityData.fetchedAt; // not part of pkc-js schema\n try {\n community = await createPkcCommunity(account.pkc, communityData);\n } catch (e) {\n fetchedAt = undefined;\n // need to log this always or it could silently fail in production and cache never be used\n console.error(\"failed pkc.createCommunity(cachedCommunity)\", {\n cachedCommunity: communityData,\n error: e,\n });\n }\n }\n if (community) {\n // add page comments to communitiesPagesStore so they can be used in useComment\n communitiesPagesStore.getState().addCommunityPageCommentsToStore(community);\n }\n }\n\n // community not in database, try to fetch from pkc-js\n if (!community) {\n try {\n community = await createCommunityWithLookupFallback(\n account.pkc,\n communityLookupOptions,\n communityKey,\n );\n } catch (e) {\n errorGettingCommunity = e;\n }\n }\n\n // failure getting community\n if (!community) {\n if (errorGettingCommunity) {\n setState((state: CommunitiesState) => {\n let communityErrors = state.errors[communityKey] || [];\n communityErrors = [...communityErrors, errorGettingCommunity];\n return { ...state, errors: { ...state.errors, [communityKey]: communityErrors } };\n });\n }\n\n throw (\n errorGettingCommunity ||\n Error(`communitiesStore.addCommunityToStore failed getting community '${communityKey}'`)\n );\n }\n\n // success getting community\n const firstCommunityState = utils.clone({ ...community, fetchedAt });\n await communitiesDatabase.setItem(communityKey, firstCommunityState);\n log(\"communitiesStore.addCommunityToStore\", {\n communityAddressOrRef,\n communityKey,\n community,\n account,\n });\n setState((state: any) => ({\n communities: { ...state.communities, [communityKey]: firstCommunityState },\n }));\n\n // the community has published new posts\n community.on(\"update\", async (updatedCommunity: Community) => {\n clearPendingCommunityErrors(communityKey);\n setState((state: CommunitiesState) => ({\n ...state,\n errors: clearStoredCommunityErrors(state, communityKey),\n }));\n updatedCommunity = utils.clone(updatedCommunity);\n\n // add fetchedAt to be able to expire the cache\n // NOTE: fetchedAt is undefined on owner communities because never stale\n updatedCommunity.fetchedAt = Math.floor(Date.now() / 1000);\n\n await communitiesDatabase.setItem(communityKey, updatedCommunity);\n log(\"communitiesStore community update\", {\n communityAddressOrRef,\n communityKey,\n updatedCommunity,\n account,\n });\n setState((state: any) => ({\n ...state,\n communities: { ...state.communities, [communityKey]: updatedCommunity },\n }));\n\n // if a community has a role with an account's address add it to the account.communities\n accountsStore\n .getState()\n .accountsActionsInternal.addCommunityRoleToAccountsCommunities(updatedCommunity);\n\n // add page comments to communitiesPagesStore so they can be used in useComment\n communitiesPagesStore.getState().addCommunityPageCommentsToStore(updatedCommunity);\n });\n\n community.on(\"updatingstatechange\", (updatingState: string) => {\n setState((state: CommunitiesState) => ({\n communities: {\n ...state.communities,\n [communityKey]: { ...state.communities[communityKey], updatingState },\n },\n }));\n });\n\n community.on(\"error\", (error: Error) => {\n scheduleCommunityError(setState, communityKey, error);\n });\n\n // set clients on community so the frontend can display it, dont persist in db because a reload cancels updating\n utils.clientsOnStateChange(\n community?.clients,\n (clientState: string, clientType: string, clientUrl: string, chainTicker?: string) => {\n setState((state: CommunitiesState) => {\n // make sure not undefined, sometimes happens in e2e tests\n if (!state.communities[communityKey]) {\n return {};\n }\n const clients = { ...state.communities[communityKey]?.clients };\n const client = { state: clientState };\n if (chainTicker) {\n const chainProviders = { ...clients[clientType][chainTicker], [clientUrl]: client };\n clients[clientType] = { ...clients[clientType], [chainTicker]: chainProviders };\n } else {\n clients[clientType] = { ...clients[clientType], [clientUrl]: client };\n }\n return {\n communities: {\n ...state.communities,\n [communityKey]: { ...state.communities[communityKey], clients },\n },\n };\n });\n },\n );\n\n listeners.push(community);\n startCommunityUpdatePolling(community, { communityAddressOrRef, communityKey });\n } finally {\n pkcGetCommunityPending[pendingKey] = false;\n }\n },\n\n async refreshCommunity(communityAddressOrRef: string | CommunityIdentifier, account: Account) {\n const communityLookupOptions = getCommunityLookupOptions(communityAddressOrRef);\n const communityKey =\n typeof communityAddressOrRef === \"string\"\n ? communityAddressOrRef\n : getCommunityRefKey(communityAddressOrRef);\n assert(\n communityKey !== \"\" && typeof communityKey === \"string\",\n `communitiesStore.refreshCommunity invalid communityAddress argument '${communityAddressOrRef}'`,\n );\n assert(\n typeof getPkcGetCommunity(account?.pkc) === \"function\",\n `communitiesStore.refreshCommunity invalid account argument '${account}'`,\n );\n\n const refreshedCommunity = utils.clone(\n await getPkcCommunity(account.pkc, communityLookupOptions),\n );\n refreshedCommunity.fetchedAt = Math.floor(Date.now() / 1000);\n\n await communitiesDatabase.setItem(communityKey, refreshedCommunity);\n log(\"communitiesStore.refreshCommunity\", {\n communityAddressOrRef,\n communityKey,\n refreshedCommunity,\n account,\n });\n setState((state: any) => ({\n communities: { ...state.communities, [communityKey]: refreshedCommunity },\n }));\n\n communitiesPagesStore.getState().addCommunityPageCommentsToStore(refreshedCommunity);\n\n return refreshedCommunity;\n },\n\n // user is the owner of the community and can edit it locally\n async editCommunity(communityAddress: string, communityEditOptions: any, account: Account) {\n assert(\n communityAddress !== \"\" && typeof communityAddress === \"string\",\n `communitiesStore.editCommunity invalid communityAddress argument '${communityAddress}'`,\n );\n assert(\n communityEditOptions && typeof communityEditOptions === \"object\",\n `communitiesStore.editCommunity invalid communityEditOptions argument '${communityEditOptions}'`,\n );\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.editCommunity invalid account argument '${account}'`,\n );\n\n // if not added to store first, community.update() is never called\n await getState().addCommunityToStore(communityAddress, account);\n\n // `communityAddress` is different from `communityEditOptions.address` when editing the community address\n const community = await createPkcCommunity(account.pkc, {\n address: communityAddress,\n });\n\n // could fix some test issues\n community.on(\"error\", console.log);\n\n await community.edit(communityEditOptions);\n\n const updatedCommunity = utils.clone(community);\n // edit db of both old and new community address to not break the UI\n await communitiesDatabase.setItem(communityAddress, updatedCommunity);\n await communitiesDatabase.setItem(community.address, updatedCommunity);\n log(\"communitiesStore.editCommunity\", {\n communityAddress,\n communityEditOptions,\n community,\n account,\n });\n setState((state: any) => ({\n communities: {\n ...state.communities,\n // edit react state of both old and new community address to not break the UI\n [communityAddress]: updatedCommunity,\n [community.address]: updatedCommunity,\n },\n }));\n },\n\n // internal action called by accountsActions.createCommunity\n async createCommunity(createCommunityOptions: CreateCommunityOptions, account: Account) {\n assert(\n !createCommunityOptions || typeof createCommunityOptions === \"object\",\n `communitiesStore.createCommunity invalid createCommunityOptions argument '${createCommunityOptions}'`,\n );\n if (!createCommunityOptions?.signer) {\n assert(\n !createCommunityOptions?.address,\n `communitiesStore.createCommunity createCommunityOptions.address '${createCommunityOptions?.address}' must be undefined to create a community`,\n );\n }\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.createCommunity invalid account argument '${account}'`,\n );\n\n const community = await createPkcCommunity(account.pkc, createCommunityOptions);\n\n // could fix some test issues\n community.on(\"error\", console.log);\n\n // if not added to store first, community.update() is never called\n await getState().addCommunityToStore(community.address, account);\n\n await communitiesDatabase.setItem(community.address, utils.clone(community));\n log(\"communitiesStore.createCommunity\", { createCommunityOptions, community, account });\n setState((state: any) => ({\n communities: { ...state.communities, [community.address]: utils.clone(community) },\n }));\n return community;\n },\n\n // internal action called by accountsActions.deleteCommunity\n async deleteCommunity(communityAddress: string, account: Account) {\n assert(\n communityAddress && typeof communityAddress === \"string\",\n `communitiesStore.deleteCommunity invalid communityAddress argument '${communityAddress}'`,\n );\n assert(\n typeof getPkcCreateCommunity(account?.pkc) === \"function\",\n `communitiesStore.deleteCommunity invalid account argument '${account}'`,\n );\n\n const community = await createPkcCommunity(account.pkc, {\n address: communityAddress,\n });\n\n // could fix some test issues\n community.on(\"error\", console.log);\n\n await community.delete();\n stopCommunityUpdatePolling(communityAddress);\n await communitiesDatabase.removeItem(communityAddress);\n log(\"communitiesStore.deleteCommunity\", { communityAddress, community, account });\n setState((state: any) => ({\n communities: { ...state.communities, [communityAddress]: undefined },\n }));\n },\n }),\n);\n\n// reset store in between tests\nconst originalState = communitiesStore.getState();\n// async function because some stores have async init\nexport const resetCommunitiesStore = async () => {\n pkcGetCommunityPending = {};\n Object.keys(pendingCommunityErrorTimers).forEach(clearPendingCommunityErrors);\n // remove all event listeners\n listeners.forEach((listener: any) => listener.removeAllListeners());\n listeners.length = 0;\n Object.keys(communityUpdatePollers).forEach(stopCommunityUpdatePolling);\n // destroy all component subscriptions to the store\n communitiesStore.destroy();\n // restore original state\n communitiesStore.setState(originalState);\n};\n\n// reset database and store in between tests\nexport const resetCommunitiesDatabaseAndStore = async () => {\n await localForageLru.createInstance({ name: \"bitsocialReactHooks-communities\" }).clear();\n await resetCommunitiesStore();\n};\n\nexport default communitiesStore;\n"]}
|
package/package.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"publishConfig": {
|
|
14
14
|
"access": "public"
|
|
15
15
|
},
|
|
16
|
-
"version": "0.1.
|
|
16
|
+
"version": "0.1.13",
|
|
17
17
|
"packageManager": "yarn@4.13.0",
|
|
18
18
|
"files": [
|
|
19
19
|
"CHANGELOG.md",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@bitsocial/bso-resolver": "0.0.8",
|
|
51
|
-
"@pkcprotocol/pkc-js": "0.0.
|
|
51
|
+
"@pkcprotocol/pkc-js": "0.0.38",
|
|
52
52
|
"@pkcprotocol/pkc-logger": "0.1.0",
|
|
53
53
|
"assert": "2.0.0",
|
|
54
54
|
"ethers": "5.8.0",
|