@bitsocial/bitsocial-react-hooks 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +1365 -0
  3. package/dist/hooks/accounts/accounts.d.ts +64 -0
  4. package/dist/hooks/accounts/accounts.d.ts.map +1 -0
  5. package/dist/hooks/accounts/accounts.js +706 -0
  6. package/dist/hooks/accounts/accounts.js.map +1 -0
  7. package/dist/hooks/accounts/index.d.ts +2 -0
  8. package/dist/hooks/accounts/index.d.ts.map +1 -0
  9. package/dist/hooks/accounts/index.js +2 -0
  10. package/dist/hooks/accounts/index.js.map +1 -0
  11. package/dist/hooks/accounts/utils.d.ts +6 -0
  12. package/dist/hooks/accounts/utils.d.ts.map +1 -0
  13. package/dist/hooks/accounts/utils.js +226 -0
  14. package/dist/hooks/accounts/utils.js.map +1 -0
  15. package/dist/hooks/actions/actions.d.ts +19 -0
  16. package/dist/hooks/actions/actions.d.ts.map +1 -0
  17. package/dist/hooks/actions/actions.js +552 -0
  18. package/dist/hooks/actions/actions.js.map +1 -0
  19. package/dist/hooks/actions/index.d.ts +2 -0
  20. package/dist/hooks/actions/index.d.ts.map +1 -0
  21. package/dist/hooks/actions/index.js +2 -0
  22. package/dist/hooks/actions/index.js.map +1 -0
  23. package/dist/hooks/authors/author-avatars.d.ts +28 -0
  24. package/dist/hooks/authors/author-avatars.d.ts.map +1 -0
  25. package/dist/hooks/authors/author-avatars.js +191 -0
  26. package/dist/hooks/authors/author-avatars.js.map +1 -0
  27. package/dist/hooks/authors/authors.d.ts +37 -0
  28. package/dist/hooks/authors/authors.d.ts.map +1 -0
  29. package/dist/hooks/authors/authors.js +509 -0
  30. package/dist/hooks/authors/authors.js.map +1 -0
  31. package/dist/hooks/authors/index.d.ts +2 -0
  32. package/dist/hooks/authors/index.d.ts.map +1 -0
  33. package/dist/hooks/authors/index.js +2 -0
  34. package/dist/hooks/authors/index.js.map +1 -0
  35. package/dist/hooks/authors/utils.d.ts +4 -0
  36. package/dist/hooks/authors/utils.d.ts.map +1 -0
  37. package/dist/hooks/authors/utils.js +21 -0
  38. package/dist/hooks/authors/utils.js.map +1 -0
  39. package/dist/hooks/comments.d.ts +17 -0
  40. package/dist/hooks/comments.d.ts.map +1 -0
  41. package/dist/hooks/comments.js +351 -0
  42. package/dist/hooks/comments.js.map +1 -0
  43. package/dist/hooks/communities.d.ts +31 -0
  44. package/dist/hooks/communities.d.ts.map +1 -0
  45. package/dist/hooks/communities.js +389 -0
  46. package/dist/hooks/communities.js.map +1 -0
  47. package/dist/hooks/feeds/feeds.d.ts +18 -0
  48. package/dist/hooks/feeds/feeds.d.ts.map +1 -0
  49. package/dist/hooks/feeds/feeds.js +315 -0
  50. package/dist/hooks/feeds/feeds.js.map +1 -0
  51. package/dist/hooks/feeds/index.d.ts +2 -0
  52. package/dist/hooks/feeds/index.d.ts.map +1 -0
  53. package/dist/hooks/feeds/index.js +2 -0
  54. package/dist/hooks/feeds/index.js.map +1 -0
  55. package/dist/hooks/pkc-rpc.d.ts +7 -0
  56. package/dist/hooks/pkc-rpc.d.ts.map +1 -0
  57. package/dist/hooks/pkc-rpc.js +88 -0
  58. package/dist/hooks/pkc-rpc.js.map +1 -0
  59. package/dist/hooks/replies.d.ts +5 -0
  60. package/dist/hooks/replies.d.ts.map +1 -0
  61. package/dist/hooks/replies.js +155 -0
  62. package/dist/hooks/replies.js.map +1 -0
  63. package/dist/hooks/states.d.ts +15 -0
  64. package/dist/hooks/states.d.ts.map +1 -0
  65. package/dist/hooks/states.js +213 -0
  66. package/dist/hooks/states.js.map +1 -0
  67. package/dist/hooks/utils/use-interval.d.ts +3 -0
  68. package/dist/hooks/utils/use-interval.d.ts.map +1 -0
  69. package/dist/hooks/utils/use-interval.js +36 -0
  70. package/dist/hooks/utils/use-interval.js.map +1 -0
  71. package/dist/hooks/utils/use-previous.d.ts +1 -0
  72. package/dist/hooks/utils/use-previous.js +10 -0
  73. package/dist/index.d.ts +82 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +128 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/lib/chain/chain.d.ts +36 -0
  78. package/dist/lib/chain/chain.d.ts.map +1 -0
  79. package/dist/lib/chain/chain.js +195 -0
  80. package/dist/lib/chain/chain.js.map +1 -0
  81. package/dist/lib/chain/index.d.ts +4 -0
  82. package/dist/lib/chain/index.d.ts.map +1 -0
  83. package/dist/lib/chain/index.js +4 -0
  84. package/dist/lib/chain/index.js.map +1 -0
  85. package/dist/lib/community-address.d.ts +6 -0
  86. package/dist/lib/community-address.d.ts.map +1 -0
  87. package/dist/lib/community-address.js +26 -0
  88. package/dist/lib/community-address.js.map +1 -0
  89. package/dist/lib/community-ref.d.ts +23 -0
  90. package/dist/lib/community-ref.d.ts.map +1 -0
  91. package/dist/lib/community-ref.js +113 -0
  92. package/dist/lib/community-ref.js.map +1 -0
  93. package/dist/lib/debug-utils.d.ts +9 -0
  94. package/dist/lib/debug-utils.d.ts.map +1 -0
  95. package/dist/lib/debug-utils.js +21 -0
  96. package/dist/lib/debug-utils.js.map +1 -0
  97. package/dist/lib/feed-sort-type.d.ts +2 -0
  98. package/dist/lib/feed-sort-type.d.ts.map +1 -0
  99. package/dist/lib/feed-sort-type.js +22 -0
  100. package/dist/lib/feed-sort-type.js.map +1 -0
  101. package/dist/lib/localforage-lru/index.d.ts +3 -0
  102. package/dist/lib/localforage-lru/index.d.ts.map +1 -0
  103. package/dist/lib/localforage-lru/index.js +46 -0
  104. package/dist/lib/localforage-lru/index.js.map +1 -0
  105. package/dist/lib/localforage-lru/localforage-lru.d.ts +6 -0
  106. package/dist/lib/localforage-lru/localforage-lru.d.ts.map +1 -0
  107. package/dist/lib/localforage-lru/localforage-lru.js +182 -0
  108. package/dist/lib/localforage-lru/localforage-lru.js.map +1 -0
  109. package/dist/lib/pkc-compat.d.ts +25 -0
  110. package/dist/lib/pkc-compat.d.ts.map +1 -0
  111. package/dist/lib/pkc-compat.js +131 -0
  112. package/dist/lib/pkc-compat.js.map +1 -0
  113. package/dist/lib/pkc-js/fixtures/markdown-example.d.ts +3 -0
  114. package/dist/lib/pkc-js/fixtures/markdown-example.d.ts.map +1 -0
  115. package/dist/lib/pkc-js/fixtures/markdown-example.js +280 -0
  116. package/dist/lib/pkc-js/fixtures/markdown-example.js.map +1 -0
  117. package/dist/lib/pkc-js/index.d.ts +11 -0
  118. package/dist/lib/pkc-js/index.d.ts.map +1 -0
  119. package/dist/lib/pkc-js/index.js +85 -0
  120. package/dist/lib/pkc-js/index.js.map +1 -0
  121. package/dist/lib/pkc-js/pkc-js-mock-content.d.ts +3 -0
  122. package/dist/lib/pkc-js/pkc-js-mock-content.d.ts.map +1 -0
  123. package/dist/lib/pkc-js/pkc-js-mock-content.js +1235 -0
  124. package/dist/lib/pkc-js/pkc-js-mock-content.js.map +1 -0
  125. package/dist/lib/pkc-js/pkc-js-mock.d.ts +137 -0
  126. package/dist/lib/pkc-js/pkc-js-mock.d.ts.map +1 -0
  127. package/dist/lib/pkc-js/pkc-js-mock.js +644 -0
  128. package/dist/lib/pkc-js/pkc-js-mock.js.map +1 -0
  129. package/dist/lib/polyfill.d.ts +3 -0
  130. package/dist/lib/polyfill.d.ts.map +1 -0
  131. package/dist/lib/polyfill.js +14 -0
  132. package/dist/lib/polyfill.js.map +1 -0
  133. package/dist/lib/protocol-compat.d.ts +14 -0
  134. package/dist/lib/protocol-compat.d.ts.map +1 -0
  135. package/dist/lib/protocol-compat.js +67 -0
  136. package/dist/lib/protocol-compat.js.map +1 -0
  137. package/dist/lib/test-utils.d.ts +29 -0
  138. package/dist/lib/test-utils.d.ts.map +1 -0
  139. package/dist/lib/test-utils.js +184 -0
  140. package/dist/lib/test-utils.js.map +1 -0
  141. package/dist/lib/utils/comment-moderation.d.ts +4 -0
  142. package/dist/lib/utils/comment-moderation.d.ts.map +1 -0
  143. package/dist/lib/utils/comment-moderation.js +56 -0
  144. package/dist/lib/utils/comment-moderation.js.map +1 -0
  145. package/dist/lib/utils/index.d.ts +4 -0
  146. package/dist/lib/utils/index.d.ts.map +1 -0
  147. package/dist/lib/utils/index.js +4 -0
  148. package/dist/lib/utils/index.js.map +1 -0
  149. package/dist/lib/utils/utils.d.ts +23 -0
  150. package/dist/lib/utils/utils.d.ts.map +1 -0
  151. package/dist/lib/utils/utils.js +375 -0
  152. package/dist/lib/utils/utils.js.map +1 -0
  153. package/dist/lib/validator.d.ts +30 -0
  154. package/dist/lib/validator.d.ts.map +1 -0
  155. package/dist/lib/validator.js +307 -0
  156. package/dist/lib/validator.js.map +1 -0
  157. package/dist/stores/accounts/account-generator.d.ts +51 -0
  158. package/dist/stores/accounts/account-generator.d.ts.map +1 -0
  159. package/dist/stores/accounts/account-generator.js +160 -0
  160. package/dist/stores/accounts/account-generator.js.map +1 -0
  161. package/dist/stores/accounts/accounts-actions-internal.d.ts +8 -0
  162. package/dist/stores/accounts/accounts-actions-internal.d.ts.map +1 -0
  163. package/dist/stores/accounts/accounts-actions-internal.js +403 -0
  164. package/dist/stores/accounts/accounts-actions-internal.js.map +1 -0
  165. package/dist/stores/accounts/accounts-actions.d.ts +46 -0
  166. package/dist/stores/accounts/accounts-actions.d.ts.map +1 -0
  167. package/dist/stores/accounts/accounts-actions.js +1341 -0
  168. package/dist/stores/accounts/accounts-actions.js.map +1 -0
  169. package/dist/stores/accounts/accounts-database.d.ts +34 -0
  170. package/dist/stores/accounts/accounts-database.d.ts.map +1 -0
  171. package/dist/stores/accounts/accounts-database.js +685 -0
  172. package/dist/stores/accounts/accounts-database.js.map +1 -0
  173. package/dist/stores/accounts/accounts-store.d.ts +32 -0
  174. package/dist/stores/accounts/accounts-store.d.ts.map +1 -0
  175. package/dist/stores/accounts/accounts-store.js +169 -0
  176. package/dist/stores/accounts/accounts-store.js.map +1 -0
  177. package/dist/stores/accounts/index.d.ts +4 -0
  178. package/dist/stores/accounts/index.d.ts.map +1 -0
  179. package/dist/stores/accounts/index.js +4 -0
  180. package/dist/stores/accounts/index.js.map +1 -0
  181. package/dist/stores/accounts/utils.d.ts +49 -0
  182. package/dist/stores/accounts/utils.d.ts.map +1 -0
  183. package/dist/stores/accounts/utils.js +419 -0
  184. package/dist/stores/accounts/utils.js.map +1 -0
  185. package/dist/stores/authors-comments/authors-comments-store.d.ts +37 -0
  186. package/dist/stores/authors-comments/authors-comments-store.d.ts.map +1 -0
  187. package/dist/stores/authors-comments/authors-comments-store.js +338 -0
  188. package/dist/stores/authors-comments/authors-comments-store.js.map +1 -0
  189. package/dist/stores/authors-comments/index.d.ts +4 -0
  190. package/dist/stores/authors-comments/index.d.ts.map +1 -0
  191. package/dist/stores/authors-comments/index.js +4 -0
  192. package/dist/stores/authors-comments/index.js.map +1 -0
  193. package/dist/stores/authors-comments/utils.d.ts +14 -0
  194. package/dist/stores/authors-comments/utils.d.ts.map +1 -0
  195. package/dist/stores/authors-comments/utils.js +81 -0
  196. package/dist/stores/authors-comments/utils.js.map +1 -0
  197. package/dist/stores/comments/comments-store.d.ts +19 -0
  198. package/dist/stores/comments/comments-store.d.ts.map +1 -0
  199. package/dist/stores/comments/comments-store.js +385 -0
  200. package/dist/stores/comments/comments-store.js.map +1 -0
  201. package/dist/stores/comments/index.d.ts +4 -0
  202. package/dist/stores/comments/index.d.ts.map +1 -0
  203. package/dist/stores/comments/index.js +4 -0
  204. package/dist/stores/comments/index.js.map +1 -0
  205. package/dist/stores/communities/communities-store.d.ts +17 -0
  206. package/dist/stores/communities/communities-store.d.ts.map +1 -0
  207. package/dist/stores/communities/communities-store.js +304 -0
  208. package/dist/stores/communities/communities-store.js.map +1 -0
  209. package/dist/stores/communities/index.d.ts +4 -0
  210. package/dist/stores/communities/index.d.ts.map +1 -0
  211. package/dist/stores/communities/index.js +4 -0
  212. package/dist/stores/communities/index.js.map +1 -0
  213. package/dist/stores/communities-pages/communities-pages-store.d.ts +23 -0
  214. package/dist/stores/communities-pages/communities-pages-store.d.ts.map +1 -0
  215. package/dist/stores/communities-pages/communities-pages-store.js +316 -0
  216. package/dist/stores/communities-pages/communities-pages-store.js.map +1 -0
  217. package/dist/stores/communities-pages/index.d.ts +4 -0
  218. package/dist/stores/communities-pages/index.d.ts.map +1 -0
  219. package/dist/stores/communities-pages/index.js +4 -0
  220. package/dist/stores/communities-pages/index.js.map +1 -0
  221. package/dist/stores/feeds/feed-sorter.d.ts +5 -0
  222. package/dist/stores/feeds/feed-sorter.d.ts.map +1 -0
  223. package/dist/stores/feeds/feed-sorter.js +135 -0
  224. package/dist/stores/feeds/feed-sorter.js.map +1 -0
  225. package/dist/stores/feeds/feeds-store.d.ts +25 -0
  226. package/dist/stores/feeds/feeds-store.d.ts.map +1 -0
  227. package/dist/stores/feeds/feeds-store.js +459 -0
  228. package/dist/stores/feeds/feeds-store.js.map +1 -0
  229. package/dist/stores/feeds/index.d.ts +4 -0
  230. package/dist/stores/feeds/index.d.ts.map +1 -0
  231. package/dist/stores/feeds/index.js +4 -0
  232. package/dist/stores/feeds/index.js.map +1 -0
  233. package/dist/stores/feeds/utils.d.ts +43 -0
  234. package/dist/stores/feeds/utils.d.ts.map +1 -0
  235. package/dist/stores/feeds/utils.js +736 -0
  236. package/dist/stores/feeds/utils.js.map +1 -0
  237. package/dist/stores/replies/index.d.ts +4 -0
  238. package/dist/stores/replies/index.d.ts.map +1 -0
  239. package/dist/stores/replies/index.js +4 -0
  240. package/dist/stores/replies/index.js.map +1 -0
  241. package/dist/stores/replies/replies-comments-store.d.ts +8 -0
  242. package/dist/stores/replies/replies-comments-store.d.ts.map +1 -0
  243. package/dist/stores/replies/replies-comments-store.js +23 -0
  244. package/dist/stores/replies/replies-comments-store.js.map +1 -0
  245. package/dist/stores/replies/replies-store.d.ts +29 -0
  246. package/dist/stores/replies/replies-store.d.ts.map +1 -0
  247. package/dist/stores/replies/replies-store.js +413 -0
  248. package/dist/stores/replies/replies-store.js.map +1 -0
  249. package/dist/stores/replies/utils.d.ts +25 -0
  250. package/dist/stores/replies/utils.d.ts.map +1 -0
  251. package/dist/stores/replies/utils.js +549 -0
  252. package/dist/stores/replies/utils.js.map +1 -0
  253. package/dist/stores/replies-pages/index.d.ts +4 -0
  254. package/dist/stores/replies-pages/index.d.ts.map +1 -0
  255. package/dist/stores/replies-pages/index.js +4 -0
  256. package/dist/stores/replies-pages/index.js.map +1 -0
  257. package/dist/stores/replies-pages/replies-pages-store.d.ts +20 -0
  258. package/dist/stores/replies-pages/replies-pages-store.d.ts.map +1 -0
  259. package/dist/stores/replies-pages/replies-pages-store.js +270 -0
  260. package/dist/stores/replies-pages/replies-pages-store.js.map +1 -0
  261. package/dist/stores/replies-pages/utils.d.ts +3 -0
  262. package/dist/stores/replies-pages/utils.d.ts.map +1 -0
  263. package/dist/stores/replies-pages/utils.js +43 -0
  264. package/dist/stores/replies-pages/utils.js.map +1 -0
  265. package/dist/types.d.ts +638 -0
  266. package/dist/types.d.ts.map +1 -0
  267. package/dist/types.js +3 -0
  268. package/dist/types.js.map +1 -0
  269. package/package.json +160 -0
package/dist/index.js ADDED
@@ -0,0 +1,128 @@
1
+ import polyfill from "./lib/polyfill.js";
2
+ polyfill();
3
+ // accounts
4
+ import { useAccount, useAccounts, useAccountComment, useAccountComments, useAccountVotes, useAccountVote, useAccountEdits, useEditedComment, useNotifications, useAccountCommunities, usePubsubSubscribe, } from "./hooks/accounts/index.js";
5
+ // comments
6
+ import { useComment, useComments, useValidateComment } from "./hooks/comments.js";
7
+ // replies
8
+ import { useReplies } from "./hooks/replies.js";
9
+ // communities
10
+ import { useCommunity, useCommunities, useCommunityStats, useListCommunities, useResolvedCommunityAddress, } from "./hooks/communities.js";
11
+ // feeds
12
+ import { useFeed, useBufferedFeeds } from "./hooks/feeds/index.js";
13
+ // authors
14
+ import { useAuthor, useAuthorComments, useAuthorAvatar, useResolvedAuthorAddress, useAuthorAddress, setAuthorAvatarsWhitelistedTokenAddresses, resetAuthorAddressCacheForTesting, } from "./hooks/authors/index.js";
15
+ // actions
16
+ import { useSubscribe, useBlock, usePublishComment, usePublishVote, useCreateCommunity, usePublishCommentEdit, usePublishCommentModeration, usePublishCommunityEdit, } from "./hooks/actions/index.js";
17
+ // actions that don't have their own hooks yet
18
+ import { createAccount, deleteAccount, deleteComment, setAccount, setActiveAccount, setAccountsOrder, importAccount, exportAccount, deleteCommunity, } from "./stores/accounts/accounts-actions.js";
19
+ // states
20
+ import { useClientsStates, useCommunitiesStates } from "./hooks/states.js";
21
+ // pkc-rpc
22
+ import { usePkcRpcSettings } from "./hooks/pkc-rpc.js";
23
+ // chain
24
+ import { getEthWalletFromPkcPrivateKey, getEthPrivateKeyFromPkcPrivateKey, validateEthWallet, } from "./lib/chain/index.js";
25
+ // utils
26
+ import { setPkcJs, restorePkcJs } from "./lib/pkc-js/index.js";
27
+ import { deleteDatabases, deleteCaches } from "./lib/debug-utils.js";
28
+ // types
29
+ export * from "./types.js";
30
+ // IMPORTANT: should be the same as 'export default hooks'
31
+ export {
32
+ // accounts
33
+ useAccount, useAccounts, useAccountComment, useAccountComments, useAccountVotes, useAccountVote, useAccountEdits, useAccountCommunities, useNotifications, usePubsubSubscribe,
34
+ // comments
35
+ useComment, useComments, useEditedComment, useValidateComment,
36
+ // replies
37
+ useReplies,
38
+ // communities
39
+ useCommunity, useCommunities, useCommunityStats, useListCommunities, useResolvedCommunityAddress,
40
+ // authors
41
+ useAuthor, useAuthorComments, useAuthorAvatar, useResolvedAuthorAddress, useAuthorAddress, setAuthorAvatarsWhitelistedTokenAddresses, resetAuthorAddressCacheForTesting,
42
+ // feeds
43
+ useFeed, useBufferedFeeds,
44
+ // actions
45
+ useSubscribe, useBlock, usePublishComment, usePublishVote, usePublishCommentEdit, usePublishCommentModeration, usePublishCommunityEdit, useCreateCommunity,
46
+ // actions that don't have their own hooks yet
47
+ createAccount, deleteAccount, deleteComment, setAccount, setActiveAccount, setAccountsOrder, importAccount, exportAccount, deleteCommunity,
48
+ // states
49
+ useClientsStates, useCommunitiesStates,
50
+ // pkc-rpc
51
+ usePkcRpcSettings,
52
+ // chain
53
+ getEthWalletFromPkcPrivateKey, getEthPrivateKeyFromPkcPrivateKey, validateEthWallet,
54
+ // utils
55
+ setPkcJs, restorePkcJs, deleteDatabases, deleteCaches, };
56
+ // IMPORTANT: should be the same as 'export {}'
57
+ const hooks = {
58
+ // accounts
59
+ useAccount,
60
+ useAccounts,
61
+ useAccountComment,
62
+ useAccountComments,
63
+ useAccountVotes,
64
+ useAccountVote,
65
+ useAccountEdits,
66
+ useAccountCommunities,
67
+ useNotifications,
68
+ usePubsubSubscribe,
69
+ // comments
70
+ useComment,
71
+ useComments,
72
+ useEditedComment,
73
+ useValidateComment,
74
+ // replies
75
+ useReplies,
76
+ // communities
77
+ useCommunity,
78
+ useCommunities,
79
+ useCommunityStats,
80
+ useListCommunities,
81
+ useResolvedCommunityAddress,
82
+ // authors
83
+ useAuthor,
84
+ useAuthorComments,
85
+ useAuthorAvatar,
86
+ useResolvedAuthorAddress,
87
+ useAuthorAddress,
88
+ setAuthorAvatarsWhitelistedTokenAddresses,
89
+ resetAuthorAddressCacheForTesting,
90
+ // feeds
91
+ useFeed,
92
+ useBufferedFeeds,
93
+ // actions
94
+ useSubscribe,
95
+ useBlock,
96
+ usePublishComment,
97
+ usePublishVote,
98
+ usePublishCommentEdit,
99
+ usePublishCommentModeration,
100
+ usePublishCommunityEdit,
101
+ useCreateCommunity,
102
+ // actions that don't have their own hooks yet
103
+ createAccount,
104
+ deleteAccount,
105
+ deleteComment,
106
+ setAccount,
107
+ setActiveAccount,
108
+ setAccountsOrder,
109
+ importAccount,
110
+ exportAccount,
111
+ deleteCommunity,
112
+ // states
113
+ useClientsStates,
114
+ useCommunitiesStates,
115
+ // pkc-rpc
116
+ usePkcRpcSettings,
117
+ // chain
118
+ getEthWalletFromPkcPrivateKey,
119
+ getEthPrivateKeyFromPkcPrivateKey,
120
+ validateEthWallet,
121
+ // utils
122
+ setPkcJs,
123
+ restorePkcJs,
124
+ deleteDatabases,
125
+ deleteCaches,
126
+ };
127
+ export default hooks;
128
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import polyfill from \"./lib/polyfill\";\npolyfill();\n\n// accounts\nimport {\n useAccount,\n useAccounts,\n useAccountComment,\n useAccountComments,\n useAccountVotes,\n useAccountVote,\n useAccountEdits,\n useEditedComment,\n useNotifications,\n useAccountCommunities,\n usePubsubSubscribe,\n} from \"./hooks/accounts\";\n\n// comments\nimport { useComment, useComments, useValidateComment } from \"./hooks/comments\";\n\n// replies\nimport { useReplies } from \"./hooks/replies\";\n\n// communities\nimport {\n useCommunity,\n useCommunities,\n useCommunityStats,\n useListCommunities,\n useResolvedCommunityAddress,\n} from \"./hooks/communities\";\n\n// feeds\nimport { useFeed, useBufferedFeeds } from \"./hooks/feeds\";\n\n// authors\nimport {\n useAuthor,\n useAuthorComments,\n useAuthorAvatar,\n useResolvedAuthorAddress,\n useAuthorAddress,\n setAuthorAvatarsWhitelistedTokenAddresses,\n resetAuthorAddressCacheForTesting,\n} from \"./hooks/authors\";\n\n// actions\nimport {\n useSubscribe,\n useBlock,\n usePublishComment,\n usePublishVote,\n useCreateCommunity,\n usePublishCommentEdit,\n usePublishCommentModeration,\n usePublishCommunityEdit,\n} from \"./hooks/actions\";\n\n// actions that don't have their own hooks yet\nimport {\n createAccount,\n deleteAccount,\n deleteComment,\n setAccount,\n setActiveAccount,\n setAccountsOrder,\n importAccount,\n exportAccount,\n deleteCommunity,\n} from \"./stores/accounts/accounts-actions\";\n\n// states\nimport { useClientsStates, useCommunitiesStates } from \"./hooks/states\";\n\n// pkc-rpc\nimport { usePkcRpcSettings } from \"./hooks/pkc-rpc\";\n\n// chain\nimport {\n getEthWalletFromPkcPrivateKey,\n getEthPrivateKeyFromPkcPrivateKey,\n validateEthWallet,\n} from \"./lib/chain\";\n\n// utils\nimport { setPkcJs, restorePkcJs } from \"./lib/pkc-js\";\nimport { deleteDatabases, deleteCaches } from \"./lib/debug-utils\";\n\n// types\nexport * from \"./types\";\n\n// IMPORTANT: should be the same as 'export default hooks'\nexport {\n // accounts\n useAccount,\n useAccounts,\n useAccountComment,\n useAccountComments,\n useAccountVotes,\n useAccountVote,\n useAccountEdits,\n useAccountCommunities,\n useNotifications,\n usePubsubSubscribe,\n // comments\n useComment,\n useComments,\n useEditedComment,\n useValidateComment,\n // replies\n useReplies,\n // communities\n useCommunity,\n useCommunities,\n useCommunityStats,\n useListCommunities,\n useResolvedCommunityAddress,\n // authors\n useAuthor,\n useAuthorComments,\n useAuthorAvatar,\n useResolvedAuthorAddress,\n useAuthorAddress,\n setAuthorAvatarsWhitelistedTokenAddresses,\n resetAuthorAddressCacheForTesting,\n // feeds\n useFeed,\n useBufferedFeeds,\n // actions\n useSubscribe,\n useBlock,\n usePublishComment,\n usePublishVote,\n usePublishCommentEdit,\n usePublishCommentModeration,\n usePublishCommunityEdit,\n useCreateCommunity,\n // actions that don't have their own hooks yet\n createAccount,\n deleteAccount,\n deleteComment,\n setAccount,\n setActiveAccount,\n setAccountsOrder,\n importAccount,\n exportAccount,\n deleteCommunity,\n // states\n useClientsStates,\n useCommunitiesStates,\n // pkc-rpc\n usePkcRpcSettings,\n // chain\n getEthWalletFromPkcPrivateKey,\n getEthPrivateKeyFromPkcPrivateKey,\n validateEthWallet,\n // utils\n setPkcJs,\n restorePkcJs,\n deleteDatabases,\n deleteCaches,\n};\n\n// IMPORTANT: should be the same as 'export {}'\nconst hooks = {\n // accounts\n useAccount,\n useAccounts,\n useAccountComment,\n useAccountComments,\n useAccountVotes,\n useAccountVote,\n useAccountEdits,\n useAccountCommunities,\n useNotifications,\n usePubsubSubscribe,\n // comments\n useComment,\n useComments,\n useEditedComment,\n useValidateComment,\n // replies\n useReplies,\n // communities\n useCommunity,\n useCommunities,\n useCommunityStats,\n useListCommunities,\n useResolvedCommunityAddress,\n // authors\n useAuthor,\n useAuthorComments,\n useAuthorAvatar,\n useResolvedAuthorAddress,\n useAuthorAddress,\n setAuthorAvatarsWhitelistedTokenAddresses,\n resetAuthorAddressCacheForTesting,\n // feeds\n useFeed,\n useBufferedFeeds,\n // actions\n useSubscribe,\n useBlock,\n usePublishComment,\n usePublishVote,\n usePublishCommentEdit,\n usePublishCommentModeration,\n usePublishCommunityEdit,\n useCreateCommunity,\n // actions that don't have their own hooks yet\n createAccount,\n deleteAccount,\n deleteComment,\n setAccount,\n setActiveAccount,\n setAccountsOrder,\n importAccount,\n exportAccount,\n deleteCommunity,\n // states\n useClientsStates,\n useCommunitiesStates,\n // pkc-rpc\n usePkcRpcSettings,\n // chain\n getEthWalletFromPkcPrivateKey,\n getEthPrivateKeyFromPkcPrivateKey,\n validateEthWallet,\n // utils\n setPkcJs,\n restorePkcJs,\n deleteDatabases,\n deleteCaches,\n};\n\nexport default hooks;\n"]}
@@ -0,0 +1,36 @@
1
+ import { Wallet } from "../../types.js";
2
+ export declare const getNftImageUrl: (...args: any) => Promise<any>;
3
+ export declare const getNftMetadataUrl: (...args: any) => Promise<any>;
4
+ export declare const getNftOwner: (...args: any) => Promise<any>;
5
+ export declare const resolveEnsTxtRecord: (...args: any) => Promise<any>;
6
+ export declare const getWalletMessageToSign: (authorAddress: string, timestamp: number) => string;
7
+ export declare const getEthWalletFromPkcPrivateKey: (privateKeyBase64: string, authorAddress: string) => Promise<{
8
+ address: string;
9
+ timestamp: number;
10
+ signature: {
11
+ signature: string;
12
+ type: string;
13
+ };
14
+ } | undefined>;
15
+ export declare const getEthPrivateKeyFromPkcPrivateKey: (privateKeyBase64: string, authorAddress: string) => Promise<string | undefined>;
16
+ export declare const validateEthWallet: (wallet: Wallet, authorAddress: string) => Promise<void>;
17
+ export declare const validateEthWalletViem: (wallet: Wallet, authorAddress: string) => Promise<void>;
18
+ declare const _default: {
19
+ getNftOwner: (...args: any) => Promise<any>;
20
+ getNftMetadataUrl: (...args: any) => Promise<any>;
21
+ getNftImageUrl: (...args: any) => Promise<any>;
22
+ resolveEnsTxtRecord: (...args: any) => Promise<any>;
23
+ getEthWalletFromPkcPrivateKey: (privateKeyBase64: string, authorAddress: string) => Promise<{
24
+ address: string;
25
+ timestamp: number;
26
+ signature: {
27
+ signature: string;
28
+ type: string;
29
+ };
30
+ } | undefined>;
31
+ getEthPrivateKeyFromPkcPrivateKey: (privateKeyBase64: string, authorAddress: string) => Promise<string | undefined>;
32
+ validateEthWallet: (wallet: Wallet, authorAddress: string) => Promise<void>;
33
+ validateEthWalletViem: (wallet: Wallet, authorAddress: string) => Promise<void>;
34
+ };
35
+ export default _default;
36
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../../src/lib/chain/chain.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,MAAM,EAAE,MAAM,aAAa,CAAC;AAkC1D,eAAO,MAAM,cAAc,gCAAuD,CAAC;AA6CnF,eAAO,MAAM,iBAAiB,gCAA0D,CAAC;AA6BzF,eAAO,MAAM,WAAW,gCAGtB,CAAC;AAiBH,eAAO,MAAM,mBAAmB,gCAG9B,CAAC;AAyCH,eAAO,MAAM,sBAAsB,GAAI,eAAe,MAAM,EAAE,WAAW,MAAM,WAI9E,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,kBAAkB,MAAM,EACxB,eAAe,MAAM;;;;;;;cAsBtB,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,kBAAkB,MAAM,EACxB,eAAe,MAAM,gCAatB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,QAAQ,MAAM,EAAE,eAAe,MAAM,kBAkC5E,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,QAAQ,MAAM,EAAE,eAAe,MAAM,kBAoChF,CAAC;;;;;;sDAlHkB,MAAM,iBACT,MAAM;;;;;;;;0DAyBH,MAAM,iBACT,MAAM;gCAeyB,MAAM,iBAAiB,MAAM;oCAoCzB,MAAM,iBAAiB,MAAM;;AAsCjF,wBASE"}
@@ -0,0 +1,195 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import assert from "assert";
11
+ import { ethers } from "ethers";
12
+ import utils from "../utils/index.js";
13
+ import { verifyMessage } from "viem";
14
+ // NOTE: getNftImageUrl tests are skipped, if changes are made they must be tested manually
15
+ const getNftImageUrlNoCache = (nftMetadataUrl, ipfsGatewayUrl) => __awaiter(void 0, void 0, void 0, function* () {
16
+ assert(nftMetadataUrl && typeof nftMetadataUrl === "string", `getNftImageUrl invalid nftMetadataUrl '${nftMetadataUrl}'`);
17
+ assert(ipfsGatewayUrl && typeof ipfsGatewayUrl === "string", `getNftImageUrl invalid ipfsGatewayUrl '${ipfsGatewayUrl}'`);
18
+ let nftImageUrl;
19
+ // if the ipfs file is json, it probably has an 'image' property
20
+ const text = yield fetch(nftMetadataUrl).then((resp) => resp.text());
21
+ try {
22
+ nftImageUrl = JSON.parse(text).image;
23
+ }
24
+ catch (e) {
25
+ // dont throw the json parse error, instead throw the http response
26
+ throw Error(text);
27
+ }
28
+ // if the image property is an ipfs url, get the image url using the ipfs gateway in account settings
29
+ if (nftImageUrl.startsWith("ipfs://")) {
30
+ nftImageUrl = `${ipfsGatewayUrl}/${nftImageUrl.replace("://", "/")}`;
31
+ }
32
+ return nftImageUrl;
33
+ });
34
+ export const getNftImageUrl = utils.memo(getNftImageUrlNoCache, { maxSize: 5000 });
35
+ // NOTE: getNftMetadataUrl tests are skipped, if changes are made they must be tested manually
36
+ // don't use objects in arguments for faster caching
37
+ const getNftMetadataUrlNoCache = (nftAddress, nftId, chainTicker, chainProviderUrl, chainId, ipfsGatewayUrl) => __awaiter(void 0, void 0, void 0, function* () {
38
+ assert(nftAddress && typeof nftAddress === "string", `getNftMetadataUrl invalid nftAddress '${nftAddress}'`);
39
+ assert(nftId && typeof nftId === "string", `getNftMetadataUrl invalid nftId '${nftId}'`);
40
+ assert(chainTicker && typeof chainTicker === "string", `getNftMetadataUrl invalid chainTicker '${chainTicker}'`);
41
+ assert(chainProviderUrl && typeof chainProviderUrl === "string", `getNftMetadataUrl invalid chainProviderUrl '${chainProviderUrl}'`);
42
+ assert(typeof chainId === "number", `getNftMetadataUrl invalid chainId '${chainId}' not a number`);
43
+ assert(ipfsGatewayUrl && typeof ipfsGatewayUrl === "string", `getNftMetadataUrl invalid ipfsGatewayUrl '${ipfsGatewayUrl}'`);
44
+ const chainProvider = getChainProvider(chainTicker, chainProviderUrl, chainId);
45
+ const nftContract = new ethers.Contract(nftAddress, nftAbi, chainProvider);
46
+ let nftMetadataUrl = yield nftContract.tokenURI(nftId);
47
+ // if the image property is an ipfs url, get the image url using the ipfs gateway in account settings
48
+ if (nftMetadataUrl.startsWith("ipfs://")) {
49
+ nftMetadataUrl = `${ipfsGatewayUrl}/${nftMetadataUrl.replace("://", "/")}`;
50
+ }
51
+ return nftMetadataUrl;
52
+ });
53
+ export const getNftMetadataUrl = utils.memo(getNftMetadataUrlNoCache, { maxSize: 5000 });
54
+ // don't use objects in arguments for faster caching
55
+ const getNftOwnerNoCache = (nftAddress, nftId, chainTicker, chainProviderUrl, chainId) => __awaiter(void 0, void 0, void 0, function* () {
56
+ assert(nftAddress && typeof nftAddress === "string", `getNftOwner invalid nftAddress '${nftAddress}'`);
57
+ assert(nftId && typeof nftId === "string", `getNftOwner invalid nftId '${nftId}'`);
58
+ assert(chainTicker && typeof chainTicker === "string", `getNftOwner invalid chainTicker '${chainTicker}'`);
59
+ assert(chainProviderUrl && typeof chainProviderUrl === "string", `getNftOwner invalid chainProviderUrl '${chainProviderUrl}'`);
60
+ assert(typeof chainId === "number", `getNftOwner invalid chainId '${chainId}' not a number`);
61
+ const chainProvider = getChainProvider(chainTicker, chainProviderUrl, chainId);
62
+ const nftContract = new ethers.Contract(nftAddress, nftAbi, chainProvider);
63
+ const currentNftOwnerAddress = yield nftContract.ownerOf(nftId);
64
+ return currentNftOwnerAddress;
65
+ });
66
+ export const getNftOwner = utils.memo(getNftOwnerNoCache, {
67
+ maxSize: 5000,
68
+ maxAge: 1000 * 60 * 60 * 24,
69
+ });
70
+ const resolveEnsTxtRecordNoCache = (ensName, txtRecordName, chainTicker, chainProviderUrl, chainId) => __awaiter(void 0, void 0, void 0, function* () {
71
+ const chainProvider = getChainProvider(chainTicker, chainProviderUrl, chainId);
72
+ const resolver = yield chainProvider.getResolver(ensName);
73
+ if (!resolver) {
74
+ throw Error(`name not registered or network error`);
75
+ }
76
+ const txtRecordResult = yield resolver.getText(txtRecordName);
77
+ return txtRecordResult;
78
+ });
79
+ export const resolveEnsTxtRecord = utils.memo(resolveEnsTxtRecordNoCache, {
80
+ maxSize: 10000,
81
+ maxAge: 1000 * 60 * 60 * 24,
82
+ });
83
+ // cache the chain providers because only 1 should be running at the same time
84
+ const getChainProviderNoCache = (chainTicker, chainProviderUrl, chainId) => {
85
+ if (chainTicker === "eth") {
86
+ // if using eth, use ethers' default provider unless another provider is specified
87
+ if (!chainProviderUrl || chainProviderUrl === "ethers.js") {
88
+ return ethers.getDefaultProvider();
89
+ }
90
+ }
91
+ if (!chainProviderUrl) {
92
+ throw Error(`getChainProvider invalid chainProviderUrl '${chainProviderUrl}'`);
93
+ }
94
+ if (!chainId && chainId !== 0) {
95
+ throw Error(`getChainProvider invalid chainId '${chainId}'`);
96
+ }
97
+ return new ethers.providers.JsonRpcProvider({ url: chainProviderUrl }, chainId);
98
+ };
99
+ const getChainProvider = utils.memoSync(getChainProviderNoCache, { maxSize: 1000 });
100
+ const nftAbi = [
101
+ {
102
+ inputs: [{ internalType: "uint256", name: "tokenId", type: "uint256" }],
103
+ name: "tokenURI",
104
+ outputs: [{ internalType: "string", name: "", type: "string" }],
105
+ stateMutability: "view",
106
+ type: "function",
107
+ },
108
+ {
109
+ inputs: [{ internalType: "uint256", name: "tokenId", type: "uint256" }],
110
+ name: "ownerOf",
111
+ outputs: [{ internalType: "address", name: "", type: "address" }],
112
+ stateMutability: "view",
113
+ type: "function",
114
+ },
115
+ ];
116
+ export const getWalletMessageToSign = (authorAddress, timestamp) => {
117
+ // use plain JSON so the user can read what he's signing
118
+ // property names must always be in this order for signature to match so don't use JSON.stringify
119
+ return `{"domainSeparator":"pkc-author-wallet","authorAddress":"${authorAddress}","timestamp":${timestamp}}`;
120
+ };
121
+ export const getEthWalletFromPkcPrivateKey = (privateKeyBase64, authorAddress) => __awaiter(void 0, void 0, void 0, function* () {
122
+ // ignore private key used in pkc-js signer mock so tests run faster, also make sure nobody uses it
123
+ if (privateKeyBase64 === "private key") {
124
+ return;
125
+ }
126
+ const privateKeyBytes = Uint8Array.from(atob(privateKeyBase64), (c) => c.charCodeAt(0));
127
+ if (privateKeyBytes.length !== 32) {
128
+ throw Error("failed getting eth address from private key not 32 bytes");
129
+ }
130
+ const publicKeyHex = ethers.utils.computePublicKey(privateKeyBytes, false);
131
+ const privateKeyHex = ethers.utils.hexlify(privateKeyBytes);
132
+ const ethAddress = ethers.utils.computeAddress(publicKeyHex);
133
+ // generate signature
134
+ const timestamp = Math.floor(Date.now() / 1000);
135
+ const signature = yield new ethers.Wallet(privateKeyHex).signMessage(getWalletMessageToSign(authorAddress, timestamp));
136
+ return { address: ethAddress, timestamp, signature: { signature, type: "eip191" } };
137
+ });
138
+ export const getEthPrivateKeyFromPkcPrivateKey = (privateKeyBase64, authorAddress) => __awaiter(void 0, void 0, void 0, function* () {
139
+ // ignore private key used in pkc-js signer mock so tests run faster, also make sure nobody uses it
140
+ if (privateKeyBase64 === "private key") {
141
+ return;
142
+ }
143
+ const privateKeyBytes = Uint8Array.from(atob(privateKeyBase64), (c) => c.charCodeAt(0));
144
+ if (privateKeyBytes.length !== 32) {
145
+ throw Error("failed getting eth address from private key not 32 bytes");
146
+ }
147
+ const privateKeyHex = ethers.utils.hexlify(privateKeyBytes);
148
+ return privateKeyHex;
149
+ });
150
+ export const validateEthWallet = (wallet, authorAddress) => __awaiter(void 0, void 0, void 0, function* () {
151
+ var _a, _b, _c;
152
+ assert(wallet && typeof wallet === "object", `validateEthWallet invalid wallet argument '${wallet}'`);
153
+ assert(wallet === null || wallet === void 0 ? void 0 : wallet.address, `validateEthWallet invalid wallet.address '${wallet === null || wallet === void 0 ? void 0 : wallet.address}'`);
154
+ assert(typeof (wallet === null || wallet === void 0 ? void 0 : wallet.timestamp) === "number", `validateEthWallet invalid wallet.timestamp '${wallet === null || wallet === void 0 ? void 0 : wallet.timestamp}' not a number`);
155
+ assert(wallet === null || wallet === void 0 ? void 0 : wallet.signature, `validateEthWallet invalid wallet.signature '${wallet === null || wallet === void 0 ? void 0 : wallet.signature}'`);
156
+ assert((_a = wallet === null || wallet === void 0 ? void 0 : wallet.signature) === null || _a === void 0 ? void 0 : _a.signature, `validateEthWallet invalid wallet.signature.signature '${(_b = wallet === null || wallet === void 0 ? void 0 : wallet.signature) === null || _b === void 0 ? void 0 : _b.signature}'`);
157
+ assert(wallet.signature.type === "eip191", `validateEthWallet invalid wallet.signature.type '${(_c = wallet === null || wallet === void 0 ? void 0 : wallet.signature) === null || _c === void 0 ? void 0 : _c.type}'`);
158
+ assert(authorAddress && typeof authorAddress === "string", `validateEthWallet invalid authorAddress '${authorAddress}'`);
159
+ assert((wallet === null || wallet === void 0 ? void 0 : wallet.timestamp) <= Date.now() / 1000, `validateEthWallet invalid wallet.timestamp '${wallet === null || wallet === void 0 ? void 0 : wallet.timestamp}' greater than current Date.now() / 1000`);
160
+ const signatureAddress = ethers.utils.verifyMessage(getWalletMessageToSign(authorAddress, wallet.timestamp), wallet.signature.signature);
161
+ if (wallet.address.toLowerCase() !== signatureAddress.toLowerCase()) {
162
+ throw Error("wallet address does not equal signature address");
163
+ }
164
+ });
165
+ export const validateEthWalletViem = (wallet, authorAddress) => __awaiter(void 0, void 0, void 0, function* () {
166
+ var _a, _b, _c;
167
+ // sanity checks
168
+ assert(wallet && typeof wallet === "object", `validateEthWallet invalid wallet argument '${wallet}'`);
169
+ assert(wallet === null || wallet === void 0 ? void 0 : wallet.address, `validateEthWallet invalid wallet.address '${wallet === null || wallet === void 0 ? void 0 : wallet.address}'`);
170
+ assert(typeof (wallet === null || wallet === void 0 ? void 0 : wallet.timestamp) === "number", `validateEthWallet invalid wallet.timestamp '${wallet === null || wallet === void 0 ? void 0 : wallet.timestamp}' not a number`);
171
+ assert(wallet === null || wallet === void 0 ? void 0 : wallet.signature, `validateEthWallet invalid wallet.signature '${wallet === null || wallet === void 0 ? void 0 : wallet.signature}'`);
172
+ assert((_a = wallet === null || wallet === void 0 ? void 0 : wallet.signature) === null || _a === void 0 ? void 0 : _a.signature, `validateEthWallet invalid wallet.signature.signature '${(_b = wallet === null || wallet === void 0 ? void 0 : wallet.signature) === null || _b === void 0 ? void 0 : _b.signature}'`);
173
+ assert(wallet.signature.type === "eip191", `validateEthWallet invalid wallet.signature.type '${(_c = wallet === null || wallet === void 0 ? void 0 : wallet.signature) === null || _c === void 0 ? void 0 : _c.type}'`);
174
+ assert(authorAddress && typeof authorAddress === "string", `validateEthWallet invalid authorAddress '${authorAddress}'`);
175
+ assert((wallet === null || wallet === void 0 ? void 0 : wallet.timestamp) <= Date.now() / 1000, `validateEthWallet invalid wallet.timestamp '${wallet === null || wallet === void 0 ? void 0 : wallet.timestamp}' greater than current Date.now() / 1000`);
176
+ const valid = yield verifyMessage({
177
+ address: wallet.address,
178
+ message: getWalletMessageToSign(authorAddress, wallet.timestamp),
179
+ signature: wallet.signature.signature,
180
+ });
181
+ if (!valid) {
182
+ throw Error("wallet address does not equal signature address");
183
+ }
184
+ });
185
+ export default {
186
+ getNftOwner,
187
+ getNftMetadataUrl,
188
+ getNftImageUrl,
189
+ resolveEnsTxtRecord,
190
+ getEthWalletFromPkcPrivateKey,
191
+ getEthPrivateKeyFromPkcPrivateKey,
192
+ validateEthWallet,
193
+ validateEthWalletViem,
194
+ };
195
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/lib/chain/chain.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"assert\";\nimport { Nft, ChainProviders, Wallet } from \"../../types\";\nimport { ethers } from \"ethers\";\nimport utils from \"../utils\";\nimport { verifyMessage } from \"viem\";\n\n// NOTE: getNftImageUrl tests are skipped, if changes are made they must be tested manually\nconst getNftImageUrlNoCache = async (nftMetadataUrl: string, ipfsGatewayUrl: string) => {\n assert(\n nftMetadataUrl && typeof nftMetadataUrl === \"string\",\n `getNftImageUrl invalid nftMetadataUrl '${nftMetadataUrl}'`,\n );\n assert(\n ipfsGatewayUrl && typeof ipfsGatewayUrl === \"string\",\n `getNftImageUrl invalid ipfsGatewayUrl '${ipfsGatewayUrl}'`,\n );\n\n let nftImageUrl;\n\n // if the ipfs file is json, it probably has an 'image' property\n const text = await fetch(nftMetadataUrl).then((resp: any) => resp.text());\n try {\n nftImageUrl = JSON.parse(text).image;\n } catch (e) {\n // dont throw the json parse error, instead throw the http response\n throw Error(text);\n }\n\n // if the image property is an ipfs url, get the image url using the ipfs gateway in account settings\n if (nftImageUrl.startsWith(\"ipfs://\")) {\n nftImageUrl = `${ipfsGatewayUrl}/${nftImageUrl.replace(\"://\", \"/\")}`;\n }\n\n return nftImageUrl;\n};\nexport const getNftImageUrl = utils.memo(getNftImageUrlNoCache, { maxSize: 5000 });\n\n// NOTE: getNftMetadataUrl tests are skipped, if changes are made they must be tested manually\n// don't use objects in arguments for faster caching\nconst getNftMetadataUrlNoCache = async (\n nftAddress: string,\n nftId: string,\n chainTicker: string,\n chainProviderUrl: string,\n chainId: number,\n ipfsGatewayUrl: string,\n) => {\n assert(\n nftAddress && typeof nftAddress === \"string\",\n `getNftMetadataUrl invalid nftAddress '${nftAddress}'`,\n );\n assert(nftId && typeof nftId === \"string\", `getNftMetadataUrl invalid nftId '${nftId}'`);\n assert(\n chainTicker && typeof chainTicker === \"string\",\n `getNftMetadataUrl invalid chainTicker '${chainTicker}'`,\n );\n assert(\n chainProviderUrl && typeof chainProviderUrl === \"string\",\n `getNftMetadataUrl invalid chainProviderUrl '${chainProviderUrl}'`,\n );\n assert(\n typeof chainId === \"number\",\n `getNftMetadataUrl invalid chainId '${chainId}' not a number`,\n );\n assert(\n ipfsGatewayUrl && typeof ipfsGatewayUrl === \"string\",\n `getNftMetadataUrl invalid ipfsGatewayUrl '${ipfsGatewayUrl}'`,\n );\n\n const chainProvider = getChainProvider(chainTicker, chainProviderUrl, chainId);\n const nftContract = new ethers.Contract(nftAddress, nftAbi, chainProvider);\n let nftMetadataUrl = await nftContract.tokenURI(nftId);\n\n // if the image property is an ipfs url, get the image url using the ipfs gateway in account settings\n if (nftMetadataUrl.startsWith(\"ipfs://\")) {\n nftMetadataUrl = `${ipfsGatewayUrl}/${nftMetadataUrl.replace(\"://\", \"/\")}`;\n }\n\n return nftMetadataUrl;\n};\nexport const getNftMetadataUrl = utils.memo(getNftMetadataUrlNoCache, { maxSize: 5000 });\n\n// don't use objects in arguments for faster caching\nconst getNftOwnerNoCache = async (\n nftAddress: string,\n nftId: string,\n chainTicker: string,\n chainProviderUrl: string,\n chainId: number,\n) => {\n assert(\n nftAddress && typeof nftAddress === \"string\",\n `getNftOwner invalid nftAddress '${nftAddress}'`,\n );\n assert(nftId && typeof nftId === \"string\", `getNftOwner invalid nftId '${nftId}'`);\n assert(\n chainTicker && typeof chainTicker === \"string\",\n `getNftOwner invalid chainTicker '${chainTicker}'`,\n );\n assert(\n chainProviderUrl && typeof chainProviderUrl === \"string\",\n `getNftOwner invalid chainProviderUrl '${chainProviderUrl}'`,\n );\n assert(typeof chainId === \"number\", `getNftOwner invalid chainId '${chainId}' not a number`);\n const chainProvider = getChainProvider(chainTicker, chainProviderUrl, chainId);\n const nftContract = new ethers.Contract(nftAddress, nftAbi, chainProvider);\n const currentNftOwnerAddress = await nftContract.ownerOf(nftId);\n return currentNftOwnerAddress;\n};\nexport const getNftOwner = utils.memo(getNftOwnerNoCache, {\n maxSize: 5000,\n maxAge: 1000 * 60 * 60 * 24,\n});\n\nconst resolveEnsTxtRecordNoCache = async (\n ensName: string,\n txtRecordName: string,\n chainTicker: string,\n chainProviderUrl?: string,\n chainId?: number,\n) => {\n const chainProvider = getChainProvider(chainTicker, chainProviderUrl, chainId);\n const resolver = await chainProvider.getResolver(ensName);\n if (!resolver) {\n throw Error(`name not registered or network error`);\n }\n const txtRecordResult = await resolver.getText(txtRecordName);\n return txtRecordResult;\n};\nexport const resolveEnsTxtRecord = utils.memo(resolveEnsTxtRecordNoCache, {\n maxSize: 10000,\n maxAge: 1000 * 60 * 60 * 24,\n});\n\n// cache the chain providers because only 1 should be running at the same time\nconst getChainProviderNoCache = (\n chainTicker: string,\n chainProviderUrl?: string,\n chainId?: number,\n) => {\n if (chainTicker === \"eth\") {\n // if using eth, use ethers' default provider unless another provider is specified\n if (!chainProviderUrl || chainProviderUrl === \"ethers.js\") {\n return ethers.getDefaultProvider();\n }\n }\n if (!chainProviderUrl) {\n throw Error(`getChainProvider invalid chainProviderUrl '${chainProviderUrl}'`);\n }\n if (!chainId && chainId !== 0) {\n throw Error(`getChainProvider invalid chainId '${chainId}'`);\n }\n return new ethers.providers.JsonRpcProvider({ url: chainProviderUrl }, chainId);\n};\nconst getChainProvider = utils.memoSync(getChainProviderNoCache, { maxSize: 1000 });\n\nconst nftAbi = [\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"tokenURI\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const getWalletMessageToSign = (authorAddress: string, timestamp: number) => {\n // use plain JSON so the user can read what he's signing\n // property names must always be in this order for signature to match so don't use JSON.stringify\n return `{\"domainSeparator\":\"pkc-author-wallet\",\"authorAddress\":\"${authorAddress}\",\"timestamp\":${timestamp}}`;\n};\n\nexport const getEthWalletFromPkcPrivateKey = async (\n privateKeyBase64: string,\n authorAddress: string,\n) => {\n // ignore private key used in pkc-js signer mock so tests run faster, also make sure nobody uses it\n if (privateKeyBase64 === \"private key\") {\n return;\n }\n\n const privateKeyBytes = Uint8Array.from(atob(privateKeyBase64), (c) => c.charCodeAt(0));\n if (privateKeyBytes.length !== 32) {\n throw Error(\"failed getting eth address from private key not 32 bytes\");\n }\n const publicKeyHex = ethers.utils.computePublicKey(privateKeyBytes, false);\n const privateKeyHex = ethers.utils.hexlify(privateKeyBytes);\n const ethAddress = ethers.utils.computeAddress(publicKeyHex);\n\n // generate signature\n const timestamp = Math.floor(Date.now() / 1000);\n const signature = await new ethers.Wallet(privateKeyHex).signMessage(\n getWalletMessageToSign(authorAddress, timestamp),\n );\n\n return { address: ethAddress, timestamp, signature: { signature, type: \"eip191\" } };\n};\n\nexport const getEthPrivateKeyFromPkcPrivateKey = async (\n privateKeyBase64: string,\n authorAddress: string,\n) => {\n // ignore private key used in pkc-js signer mock so tests run faster, also make sure nobody uses it\n if (privateKeyBase64 === \"private key\") {\n return;\n }\n\n const privateKeyBytes = Uint8Array.from(atob(privateKeyBase64), (c) => c.charCodeAt(0));\n if (privateKeyBytes.length !== 32) {\n throw Error(\"failed getting eth address from private key not 32 bytes\");\n }\n const privateKeyHex = ethers.utils.hexlify(privateKeyBytes);\n return privateKeyHex;\n};\n\nexport const validateEthWallet = async (wallet: Wallet, authorAddress: string) => {\n assert(\n wallet && typeof wallet === \"object\",\n `validateEthWallet invalid wallet argument '${wallet}'`,\n );\n assert(wallet?.address, `validateEthWallet invalid wallet.address '${wallet?.address}'`);\n assert(\n typeof wallet?.timestamp === \"number\",\n `validateEthWallet invalid wallet.timestamp '${wallet?.timestamp}' not a number`,\n );\n assert(wallet?.signature, `validateEthWallet invalid wallet.signature '${wallet?.signature}'`);\n assert(\n wallet?.signature?.signature,\n `validateEthWallet invalid wallet.signature.signature '${wallet?.signature?.signature}'`,\n );\n assert(\n wallet.signature.type === \"eip191\",\n `validateEthWallet invalid wallet.signature.type '${wallet?.signature?.type}'`,\n );\n assert(\n authorAddress && typeof authorAddress === \"string\",\n `validateEthWallet invalid authorAddress '${authorAddress}'`,\n );\n assert(\n wallet?.timestamp <= Date.now() / 1000,\n `validateEthWallet invalid wallet.timestamp '${wallet?.timestamp}' greater than current Date.now() / 1000`,\n );\n const signatureAddress = ethers.utils.verifyMessage(\n getWalletMessageToSign(authorAddress, wallet.timestamp),\n wallet.signature.signature,\n );\n if (wallet.address.toLowerCase() !== signatureAddress.toLowerCase()) {\n throw Error(\"wallet address does not equal signature address\");\n }\n};\n\nexport const validateEthWalletViem = async (wallet: Wallet, authorAddress: string) => {\n // sanity checks\n assert(\n wallet && typeof wallet === \"object\",\n `validateEthWallet invalid wallet argument '${wallet}'`,\n );\n assert(wallet?.address, `validateEthWallet invalid wallet.address '${wallet?.address}'`);\n assert(\n typeof wallet?.timestamp === \"number\",\n `validateEthWallet invalid wallet.timestamp '${wallet?.timestamp}' not a number`,\n );\n assert(wallet?.signature, `validateEthWallet invalid wallet.signature '${wallet?.signature}'`);\n assert(\n wallet?.signature?.signature,\n `validateEthWallet invalid wallet.signature.signature '${wallet?.signature?.signature}'`,\n );\n assert(\n wallet.signature.type === \"eip191\",\n `validateEthWallet invalid wallet.signature.type '${wallet?.signature?.type}'`,\n );\n assert(\n authorAddress && typeof authorAddress === \"string\",\n `validateEthWallet invalid authorAddress '${authorAddress}'`,\n );\n assert(\n wallet?.timestamp <= Date.now() / 1000,\n `validateEthWallet invalid wallet.timestamp '${wallet?.timestamp}' greater than current Date.now() / 1000`,\n );\n const valid = await verifyMessage({\n address: wallet.address,\n message: getWalletMessageToSign(authorAddress, wallet.timestamp),\n signature: wallet.signature.signature,\n });\n if (!valid) {\n throw Error(\"wallet address does not equal signature address\");\n }\n};\n\nexport default {\n getNftOwner,\n getNftMetadataUrl,\n getNftImageUrl,\n resolveEnsTxtRecord,\n getEthWalletFromPkcPrivateKey,\n getEthPrivateKeyFromPkcPrivateKey,\n validateEthWallet,\n validateEthWalletViem,\n};\n"]}
@@ -0,0 +1,4 @@
1
+ import chain from "./chain.js";
2
+ export * from "./chain.js";
3
+ export default chain;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/chain/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,eAAe,KAAK,CAAC"}
@@ -0,0 +1,4 @@
1
+ import chain from "./chain.js";
2
+ export * from "./chain.js";
3
+ export default chain;
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/chain/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,eAAe,KAAK,CAAC","sourcesContent":["import chain from \"./chain\";\nexport * from \"./chain\";\nexport default chain;\n"]}
@@ -0,0 +1,6 @@
1
+ export declare const normalizeEthAliasDomain: (address: string) => string;
2
+ export declare const getCanonicalCommunityAddress: (address: string) => string;
3
+ export declare const getEquivalentCommunityAddressGroupKey: (address: string) => string;
4
+ export declare const pickPreferredEquivalentCommunityAddress: (addresses: string[]) => string;
5
+ export declare const areEquivalentCommunityAddresses: (addressA?: string, addressB?: string) => boolean;
6
+ //# sourceMappingURL=community-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community-address.d.ts","sourceRoot":"","sources":["../../src/lib/community-address.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,WAC2B,CAAC;AAEnF,eAAO,MAAM,4BAA4B,GAAI,SAAS,MAAM,WACsB,CAAC;AAEnF,eAAO,MAAM,qCAAqC,GAAI,SAAS,MAAM,WAGpE,CAAC;AAEF,eAAO,MAAM,uCAAuC,GAAI,WAAW,MAAM,EAAE,WACU,CAAC;AAEtF,eAAO,MAAM,+BAA+B,GAAI,WAAW,MAAM,EAAE,WAAW,MAAM,YAanF,CAAC"}
@@ -0,0 +1,26 @@
1
+ const isEthAliasDomain = (address) => {
2
+ const lower = address.toLowerCase();
3
+ return lower.endsWith(".eth") || lower.endsWith(".bso");
4
+ };
5
+ export const normalizeEthAliasDomain = (address) => address.toLowerCase().endsWith(".bso") ? address.slice(0, -4) + ".eth" : address;
6
+ export const getCanonicalCommunityAddress = (address) => address.toLowerCase().endsWith(".eth") ? address.slice(0, -4) + ".bso" : address;
7
+ export const getEquivalentCommunityAddressGroupKey = (address) => {
8
+ const lower = address.toLowerCase();
9
+ return isEthAliasDomain(lower) ? getCanonicalCommunityAddress(lower) : address;
10
+ };
11
+ export const pickPreferredEquivalentCommunityAddress = (addresses) => addresses.find((address) => address.toLowerCase().endsWith(".bso")) || addresses[0];
12
+ export const areEquivalentCommunityAddresses = (addressA, addressB) => {
13
+ if (addressA === addressB) {
14
+ return true;
15
+ }
16
+ if (typeof addressA !== "string" || typeof addressB !== "string") {
17
+ return false;
18
+ }
19
+ const lowerA = addressA.toLowerCase();
20
+ const lowerB = addressB.toLowerCase();
21
+ if (!isEthAliasDomain(lowerA) || !isEthAliasDomain(lowerB)) {
22
+ return false;
23
+ }
24
+ return normalizeEthAliasDomain(lowerA) === normalizeEthAliasDomain(lowerB);
25
+ };
26
+ //# sourceMappingURL=community-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community-address.js","sourceRoot":"","sources":["../../src/lib/community-address.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,EAAE;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAE,EAAE,CACzD,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAEnF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,OAAe,EAAE,EAAE,CAC9D,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAEnF,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,OAAe,EAAE,EAAE;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,SAAmB,EAAE,EAAE,CAC7E,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,QAAiB,EAAE,QAAiB,EAAE,EAAE;IACtF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,uBAAuB,CAAC,MAAM,CAAC,KAAK,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC,CAAC","sourcesContent":["const isEthAliasDomain = (address: string) => {\n const lower = address.toLowerCase();\n return lower.endsWith(\".eth\") || lower.endsWith(\".bso\");\n};\n\nexport const normalizeEthAliasDomain = (address: string) =>\n address.toLowerCase().endsWith(\".bso\") ? address.slice(0, -4) + \".eth\" : address;\n\nexport const getCanonicalCommunityAddress = (address: string) =>\n address.toLowerCase().endsWith(\".eth\") ? address.slice(0, -4) + \".bso\" : address;\n\nexport const getEquivalentCommunityAddressGroupKey = (address: string) => {\n const lower = address.toLowerCase();\n return isEthAliasDomain(lower) ? getCanonicalCommunityAddress(lower) : address;\n};\n\nexport const pickPreferredEquivalentCommunityAddress = (addresses: string[]) =>\n addresses.find((address) => address.toLowerCase().endsWith(\".bso\")) || addresses[0];\n\nexport const areEquivalentCommunityAddresses = (addressA?: string, addressB?: string) => {\n if (addressA === addressB) {\n return true;\n }\n if (typeof addressA !== \"string\" || typeof addressB !== \"string\") {\n return false;\n }\n const lowerA = addressA.toLowerCase();\n const lowerB = addressB.toLowerCase();\n if (!isEthAliasDomain(lowerA) || !isEthAliasDomain(lowerB)) {\n return false;\n }\n return normalizeEthAliasDomain(lowerA) === normalizeEthAliasDomain(lowerB);\n};\n"]}
@@ -0,0 +1,23 @@
1
+ import { Community, CommunityIdentifier } from "../types.js";
2
+ type LegacyCommunityRef = {
3
+ address: string;
4
+ name?: string;
5
+ publicKey?: string;
6
+ };
7
+ export type CommunityLookupRef = CommunityIdentifier | LegacyCommunityRef;
8
+ export declare const getCommunityRefKey: (communityRef: CommunityLookupRef) => string;
9
+ export declare const getCommunityRefKeys: (communityRefs: CommunityLookupRef[]) => string[];
10
+ export declare const getCommunityLookupOptions: (communityRefOrAddress: CommunityLookupRef | string) => {
11
+ name?: string;
12
+ publicKey?: string;
13
+ } | {
14
+ address: string;
15
+ };
16
+ export declare const mergeCommunityRefs: (base: CommunityLookupRef, extra: CommunityLookupRef) => CommunityLookupRef;
17
+ export declare const getUniqueSortedCommunityRefs: (communityRefs?: CommunityLookupRef[]) => CommunityLookupRef[];
18
+ export declare const isCommunityRef: (value: unknown) => value is CommunityIdentifier;
19
+ export declare function assertCommunityRef(value: unknown, label: string): asserts value is CommunityIdentifier;
20
+ export declare const doesAddressMatchCommunityRef: (communityAddress: string | undefined, communityRef: CommunityLookupRef, community?: Community) => boolean;
21
+ export declare const getMatchingCommunityRefKeys: (communityRefs: CommunityLookupRef[], communityAddress: string | undefined, community?: Community) => string[];
22
+ export {};
23
+ //# sourceMappingURL=community-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community-ref.d.ts","sourceRoot":"","sources":["../../src/lib/community-ref.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG1D,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAK1E,eAAO,MAAM,kBAAkB,GAAI,cAAc,kBAAkB,KAAG,MAKrE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,eAAe,kBAAkB,EAAE,aAChC,CAAC;AAExC,eAAO,MAAM,yBAAyB,GAAI,uBAAuB,kBAAkB,GAAG,MAAM;WAalE,MAAM;gBAAc,MAAM;;;CAQnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,kBAAkB,EACxB,OAAO,kBAAkB,KACxB,kBAmBF,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,gBAAgB,kBAAkB,EAAE,yBAahF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,mBAWxD,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAEtC;AAED,eAAO,MAAM,4BAA4B,GACvC,kBAAkB,MAAM,GAAG,SAAS,EACpC,cAAc,kBAAkB,EAChC,YAAY,SAAS,YAyCtB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,eAAe,kBAAkB,EAAE,EACnC,kBAAkB,MAAM,GAAG,SAAS,EACpC,YAAY,SAAS,aAStB,CAAC"}