@nlabs/metropolisjs 0.1.2 → 0.2.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 (329) hide show
  1. package/.github/copilot-instructions.md +167 -0
  2. package/AGENTS.md +13 -0
  3. package/CHANGELOG.md +112 -0
  4. package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
  5. package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
  6. package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
  7. package/README.md +1123 -112
  8. package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
  9. package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
  10. package/docs/ACTIONS.md +63 -0
  11. package/docs/COLLECTIONS.md +1038 -0
  12. package/docs/CONNECTIONS.md +1367 -0
  13. package/docs/CRUD_INTEGRATION.md +702 -0
  14. package/examples/connections-usage.tsx +909 -0
  15. package/examples/content-actions-usage.ts +144 -0
  16. package/examples/crud-usage.tsx +847 -0
  17. package/examples/extensibility-usage.tsx +889 -0
  18. package/examples/i18n-import-examples.ts +86 -0
  19. package/examples/i18n-namespace-usage.ts +118 -0
  20. package/examples/i18next-singleton-demo.ts +187 -0
  21. package/examples/permission-system-usage.tsx +415 -0
  22. package/examples/project-details.tsx +397 -0
  23. package/examples/shared-i18n-usage.tsx +203 -0
  24. package/examples/signup-error-handling.ts +100 -0
  25. package/examples/translation-types.ts +86 -0
  26. package/examples/translation-usage.tsx +336 -0
  27. package/index.js +1 -0
  28. package/jest.config.mjs +28 -0
  29. package/lex.config.mjs +11 -2
  30. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
  31. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
  32. package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
  33. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
  34. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
  35. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
  36. package/lib/actions/appActions/appActions.d.ts +29 -0
  37. package/lib/actions/appActions/appActions.d.ts.map +1 -0
  38. package/lib/actions/appActions/appActions.js +159 -0
  39. package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
  40. package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
  41. package/lib/actions/connectionActions/connectionActions.js +131 -0
  42. package/lib/actions/contentActions/contentActions.d.ts +34 -0
  43. package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
  44. package/lib/actions/contentActions/contentActions.js +314 -0
  45. package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
  46. package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
  47. package/lib/actions/conversationActions/conversationActions.js +225 -0
  48. package/lib/actions/eventActions/eventActions.d.ts +27 -7
  49. package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
  50. package/lib/actions/eventActions/eventActions.js +436 -2
  51. package/lib/actions/groupActions/groupActions.d.ts +30 -0
  52. package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
  53. package/lib/actions/groupActions/groupActions.js +229 -0
  54. package/lib/actions/imageActions/imageActions.d.ts +16 -10
  55. package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
  56. package/lib/actions/imageActions/imageActions.js +593 -2
  57. package/lib/actions/index.d.ts +21 -9
  58. package/lib/actions/index.d.ts.map +1 -0
  59. package/lib/actions/index.js +22 -2
  60. package/lib/actions/locationActions/locationActions.d.ts +11 -9
  61. package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
  62. package/lib/actions/locationActions/locationActions.js +388 -2
  63. package/lib/actions/messageActions/messageActions.d.ts +16 -32
  64. package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
  65. package/lib/actions/messageActions/messageActions.js +235 -2
  66. package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
  67. package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
  68. package/lib/actions/permissionActions/permissionActions.js +330 -0
  69. package/lib/actions/personaActions/personaActions.d.ts +65 -0
  70. package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
  71. package/lib/actions/personaActions/personaActions.js +572 -0
  72. package/lib/actions/postActions/postActions.d.ts +12 -32
  73. package/lib/actions/postActions/postActions.d.ts.map +1 -0
  74. package/lib/actions/postActions/postActions.js +447 -2
  75. package/lib/actions/reactionActions/reactionActions.d.ts +13 -27
  76. package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
  77. package/lib/actions/reactionActions/reactionActions.js +413 -2
  78. package/lib/actions/sseActions/sseActions.d.ts +1 -0
  79. package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
  80. package/lib/actions/sseActions/sseActions.js +148 -2
  81. package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
  82. package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
  83. package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
  84. package/lib/actions/tagActions/tagActions.d.ts +13 -31
  85. package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
  86. package/lib/actions/tagActions/tagActions.js +347 -2
  87. package/lib/actions/translationActions/translationActions.d.ts +38 -0
  88. package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
  89. package/lib/actions/translationActions/translationActions.js +189 -0
  90. package/lib/actions/userActions/userActions.d.ts +42 -95
  91. package/lib/actions/userActions/userActions.d.ts.map +1 -0
  92. package/lib/actions/userActions/userActions.js +844 -2
  93. package/lib/actions/videoActions/videoActions.d.ts +41 -0
  94. package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
  95. package/lib/actions/videoActions/videoActions.js +532 -0
  96. package/lib/actions/websocketActions/websocketActions.d.ts +20 -21
  97. package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
  98. package/lib/actions/websocketActions/websocketActions.js +377 -2
  99. package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
  100. package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
  101. package/lib/adapters/appAdapter/appAdapter.js +90 -0
  102. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +3 -2
  103. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
  104. package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -2
  105. package/lib/adapters/contentAdapter/contentAdapter.d.ts +3 -2
  106. package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
  107. package/lib/adapters/contentAdapter/contentAdapter.js +107 -2
  108. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +3 -2
  109. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
  110. package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -2
  111. package/lib/adapters/eventAdapter/eventAdapter.d.ts +5 -2
  112. package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
  113. package/lib/adapters/eventAdapter/eventAdapter.js +162 -2
  114. package/lib/adapters/fileAdapter/fileAdapter.d.ts +3 -2
  115. package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
  116. package/lib/adapters/fileAdapter/fileAdapter.js +118 -2
  117. package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
  118. package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
  119. package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
  120. package/lib/adapters/imageAdapter/imageAdapter.d.ts +9 -2
  121. package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
  122. package/lib/adapters/imageAdapter/imageAdapter.js +134 -2
  123. package/lib/adapters/index.d.ts +34 -16
  124. package/lib/adapters/index.d.ts.map +1 -0
  125. package/lib/adapters/index.js +19 -2
  126. package/lib/adapters/locationAdapter/locationAdapter.d.ts +3 -2
  127. package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
  128. package/lib/adapters/locationAdapter/locationAdapter.js +95 -2
  129. package/lib/adapters/messageAdapter/messageAdapter.d.ts +23 -19
  130. package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
  131. package/lib/adapters/messageAdapter/messageAdapter.js +82 -2
  132. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
  133. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
  134. package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
  135. package/lib/adapters/personaAdapter/personaAdapter.d.ts +28 -2
  136. package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
  137. package/lib/adapters/personaAdapter/personaAdapter.js +161 -2
  138. package/lib/adapters/postAdapter/postAdapter.d.ts +3 -2
  139. package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
  140. package/lib/adapters/postAdapter/postAdapter.js +115 -2
  141. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +5 -2
  142. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
  143. package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -2
  144. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +3 -2
  145. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
  146. package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -2
  147. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +3 -2
  148. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
  149. package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -2
  150. package/lib/adapters/tagAdapter/tagAdapter.d.ts +3 -2
  151. package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
  152. package/lib/adapters/tagAdapter/tagAdapter.js +98 -2
  153. package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
  154. package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
  155. package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
  156. package/lib/adapters/userAdapter/userAdapter.d.ts +18 -6
  157. package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
  158. package/lib/adapters/userAdapter/userAdapter.js +302 -2
  159. package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
  160. package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
  161. package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
  162. package/lib/config/index.d.ts +19 -6
  163. package/lib/config/index.d.ts.map +1 -0
  164. package/lib/config/index.js +97 -2
  165. package/lib/constants/Collections.d.ts +44 -0
  166. package/lib/constants/Collections.d.ts.map +1 -0
  167. package/lib/constants/Collections.js +40 -0
  168. package/lib/constants/MetropolisConstants.d.ts +1 -0
  169. package/lib/constants/MetropolisConstants.d.ts.map +1 -0
  170. package/lib/constants/MetropolisConstants.js +15 -2
  171. package/lib/graphql/message.d.ts +1 -0
  172. package/lib/graphql/message.d.ts.map +1 -0
  173. package/lib/graphql/message.js +6 -4
  174. package/lib/graphql/notification.d.ts +1 -0
  175. package/lib/graphql/notification.d.ts.map +1 -0
  176. package/lib/graphql/notification.js +6 -4
  177. package/lib/graphql/session.d.ts +1 -0
  178. package/lib/graphql/session.d.ts.map +1 -0
  179. package/lib/graphql/session.js +4 -3
  180. package/lib/index.d.ts +45 -22
  181. package/lib/index.d.ts.map +1 -0
  182. package/lib/index.js +248 -2
  183. package/lib/stores/appStore.d.ts +1 -0
  184. package/lib/stores/appStore.d.ts.map +1 -0
  185. package/lib/stores/appStore.js +23 -2
  186. package/lib/stores/contentStore.d.ts +36 -0
  187. package/lib/stores/contentStore.d.ts.map +1 -0
  188. package/lib/stores/contentStore.js +139 -0
  189. package/lib/stores/conversationStore.d.ts +38 -0
  190. package/lib/stores/conversationStore.d.ts.map +1 -0
  191. package/lib/stores/conversationStore.js +117 -0
  192. package/lib/stores/eventStore.d.ts +4 -1
  193. package/lib/stores/eventStore.d.ts.map +1 -0
  194. package/lib/stores/eventStore.js +47 -2
  195. package/lib/stores/groupStore.d.ts +37 -0
  196. package/lib/stores/groupStore.d.ts.map +1 -0
  197. package/lib/stores/groupStore.js +68 -0
  198. package/lib/stores/imageStore.d.ts +6 -1
  199. package/lib/stores/imageStore.d.ts.map +1 -0
  200. package/lib/stores/imageStore.js +53 -2
  201. package/lib/stores/index.d.ts +20 -11
  202. package/lib/stores/index.d.ts.map +1 -0
  203. package/lib/stores/index.js +24 -2
  204. package/lib/stores/locationStore.d.ts +2 -1
  205. package/lib/stores/locationStore.d.ts.map +1 -0
  206. package/lib/stores/locationStore.js +42 -2
  207. package/lib/stores/messageStore.d.ts +19 -4
  208. package/lib/stores/messageStore.d.ts.map +1 -0
  209. package/lib/stores/messageStore.js +137 -2
  210. package/lib/stores/notificationStore.d.ts +33 -0
  211. package/lib/stores/notificationStore.d.ts.map +1 -0
  212. package/lib/stores/notificationStore.js +55 -0
  213. package/lib/stores/permissionStore.d.ts +37 -0
  214. package/lib/stores/permissionStore.d.ts.map +1 -0
  215. package/lib/stores/permissionStore.js +117 -0
  216. package/lib/stores/personaStore.d.ts +26 -0
  217. package/lib/stores/personaStore.d.ts.map +1 -0
  218. package/lib/stores/personaStore.js +118 -0
  219. package/lib/stores/postStore.d.ts +2 -1
  220. package/lib/stores/postStore.d.ts.map +1 -0
  221. package/lib/stores/postStore.js +53 -2
  222. package/lib/stores/reactionStore.d.ts +1 -0
  223. package/lib/stores/reactionStore.d.ts.map +1 -0
  224. package/lib/stores/reactionStore.js +28 -2
  225. package/lib/stores/subscriptionStore.d.ts +41 -0
  226. package/lib/stores/subscriptionStore.d.ts.map +1 -0
  227. package/lib/stores/subscriptionStore.js +85 -0
  228. package/lib/stores/tagStore.d.ts +8 -5
  229. package/lib/stores/tagStore.d.ts.map +1 -0
  230. package/lib/stores/tagStore.js +87 -2
  231. package/lib/stores/translationStore.d.ts +42 -0
  232. package/lib/stores/translationStore.d.ts.map +1 -0
  233. package/lib/stores/translationStore.js +122 -0
  234. package/lib/stores/userStore.d.ts +5 -4
  235. package/lib/stores/userStore.d.ts.map +1 -0
  236. package/lib/stores/userStore.js +319 -2
  237. package/lib/stores/videoStore.d.ts +39 -0
  238. package/lib/stores/videoStore.d.ts.map +1 -0
  239. package/lib/stores/videoStore.js +132 -0
  240. package/lib/stores/websocketStore.d.ts +1 -0
  241. package/lib/stores/websocketStore.d.ts.map +1 -0
  242. package/lib/stores/websocketStore.js +51 -2
  243. package/lib/types/apps.types.d.ts +17 -0
  244. package/lib/types/apps.types.d.ts.map +1 -0
  245. package/lib/types/apps.types.js +6 -0
  246. package/lib/types/common.types.d.ts +31 -0
  247. package/lib/types/common.types.d.ts.map +1 -0
  248. package/lib/types/common.types.js +6 -0
  249. package/lib/types/conversations.types.d.ts +17 -0
  250. package/lib/types/conversations.types.d.ts.map +1 -0
  251. package/lib/types/conversations.types.js +6 -0
  252. package/lib/types/edges.types.d.ts +38 -0
  253. package/lib/types/edges.types.d.ts.map +1 -0
  254. package/lib/types/edges.types.js +6 -0
  255. package/lib/types/groups.types.d.ts +19 -0
  256. package/lib/types/groups.types.d.ts.map +1 -0
  257. package/lib/types/groups.types.js +6 -0
  258. package/lib/types/index.d.ts +12 -0
  259. package/lib/types/index.d.ts.map +1 -0
  260. package/lib/types/index.js +12 -0
  261. package/lib/types/subscriptions.types.d.ts +32 -0
  262. package/lib/types/subscriptions.types.d.ts.map +1 -0
  263. package/lib/types/subscriptions.types.js +6 -0
  264. package/lib/types/videos.types.d.ts +61 -0
  265. package/lib/types/videos.types.d.ts.map +1 -0
  266. package/lib/types/videos.types.js +6 -0
  267. package/lib/utils/MetropolisProvider.d.ts +39 -15
  268. package/lib/utils/MetropolisProvider.d.ts.map +1 -0
  269. package/lib/utils/MetropolisProvider.js +31 -2
  270. package/lib/utils/actionFactory.d.ts +21 -19
  271. package/lib/utils/actionFactory.d.ts.map +1 -0
  272. package/lib/utils/actionFactory.js +95 -2
  273. package/lib/utils/api.d.ts +5 -4
  274. package/lib/utils/api.d.ts.map +1 -0
  275. package/lib/utils/api.js +252 -6
  276. package/lib/utils/app.d.ts +1 -0
  277. package/lib/utils/app.d.ts.map +1 -0
  278. package/lib/utils/app.js +15 -2
  279. package/lib/utils/baseActionFactory.d.ts +5 -23
  280. package/lib/utils/baseActionFactory.d.ts.map +1 -0
  281. package/lib/utils/baseActionFactory.js +72 -2
  282. package/lib/utils/configUtils.d.ts +11 -0
  283. package/lib/utils/configUtils.d.ts.map +1 -0
  284. package/lib/utils/configUtils.js +20 -0
  285. package/lib/utils/dateUtils.d.ts +1 -0
  286. package/lib/utils/dateUtils.d.ts.map +1 -0
  287. package/lib/utils/dateUtils.js +11 -2
  288. package/lib/utils/file.d.ts +3 -1
  289. package/lib/utils/file.d.ts.map +1 -0
  290. package/lib/utils/file.js +156 -2
  291. package/lib/utils/i18n.d.ts +7 -0
  292. package/lib/utils/i18n.d.ts.map +1 -0
  293. package/lib/utils/i18n.js +96 -0
  294. package/lib/utils/index.d.ts +20 -0
  295. package/lib/utils/index.d.ts.map +1 -0
  296. package/lib/utils/index.js +26 -0
  297. package/lib/utils/location.d.ts +4 -3
  298. package/lib/utils/location.d.ts.map +1 -0
  299. package/lib/utils/location.js +82 -2
  300. package/lib/utils/permissionUtils.d.ts +22 -0
  301. package/lib/utils/permissionUtils.d.ts.map +1 -0
  302. package/lib/utils/permissionUtils.js +72 -0
  303. package/lib/utils/requestCache.d.ts +8 -0
  304. package/lib/utils/requestCache.d.ts.map +1 -0
  305. package/lib/utils/requestCache.js +53 -0
  306. package/lib/utils/session.d.ts +14 -0
  307. package/lib/utils/session.d.ts.map +1 -0
  308. package/lib/utils/session.js +107 -0
  309. package/lib/utils/useConversationTyping.d.ts +26 -0
  310. package/lib/utils/useConversationTyping.d.ts.map +1 -0
  311. package/lib/utils/useConversationTyping.js +117 -0
  312. package/lib/utils/useMetropolis.d.ts +67 -12
  313. package/lib/utils/useMetropolis.d.ts.map +1 -0
  314. package/lib/utils/useMetropolis.js +311 -2
  315. package/lib/utils/useTranslations.d.ts +16 -0
  316. package/lib/utils/useTranslations.d.ts.map +1 -0
  317. package/lib/utils/useTranslations.js +105 -0
  318. package/lib/utils/validatorFactory.d.ts +3 -2
  319. package/lib/utils/validatorFactory.d.ts.map +1 -0
  320. package/lib/utils/validatorFactory.js +95 -2
  321. package/package.json +58 -17
  322. package/temp_signin.ts +73 -0
  323. package/lib/actions/profileActions/profileActions.d.ts +0 -50
  324. package/lib/actions/profileActions/profileActions.js +0 -2
  325. package/lib/adapters/profileAdapter/profileAdapter.d.ts +0 -32
  326. package/lib/adapters/profileAdapter/profileAdapter.js +0 -2
  327. package/lib/stores/profileStore.d.ts +0 -24
  328. package/lib/stores/profileStore.js +0 -2
  329. /package/{FACTORY_PATTERN_GUIDE.md → factoryPatternGuide.md} +0 -0
@@ -1,5 +1,6 @@
1
1
  import type { FluxFramework } from '@nlabs/arkhamjs';
2
- import type { ReactionType } from '../../adapters/reactionAdapter/reactionAdapter';
2
+ import type { ReactionType } from '../../adapters/reactionAdapter/reactionAdapter.js';
3
+ import type { ActionRequestOptions } from '../../utils/requestCache.js';
3
4
  export interface ReactionAdapterOptions {
4
5
  strict?: boolean;
5
6
  allowPartial?: boolean;
@@ -12,41 +13,26 @@ export interface ReactionActionsOptions {
12
13
  }
13
14
  export type ReactionApiResultsType = {
14
15
  reactions: {
16
+ addPersonaReaction: ReactionType;
15
17
  addReaction: ReactionType;
18
+ deletePersonaReaction: ReactionType;
16
19
  deleteReaction: ReactionType;
17
20
  getReactionCount: number;
21
+ hasPersonaReaction: boolean;
18
22
  hasReaction: boolean;
19
23
  };
20
24
  };
21
25
  export interface ReactionActions {
22
- addReaction: (itemId: string, itemType: string, reaction: Partial<ReactionType>, reactionProps?: string[]) => Promise<ReactionType>;
23
- deleteReaction: (itemId: string, itemType: string, reactionName: string, reactionProps?: string[]) => Promise<ReactionType>;
24
- getReactionCount: (itemId: string, itemType: string, reactionName: string) => Promise<number>;
25
- hasReaction: (itemId: string, itemType: string, reactionName: string, direction: string) => Promise<boolean>;
26
+ addPersonaReaction: (personaId: string, itemId: string, itemType: string, reaction: Partial<ReactionType>, reactionProps?: string[], requestOptions?: ActionRequestOptions) => Promise<ReactionType>;
27
+ addReaction: (itemId: string, itemType: string, reaction: Partial<ReactionType>, reactionProps?: string[], requestOptions?: ActionRequestOptions) => Promise<ReactionType>;
28
+ deletePersonaReaction: (personaId: string, itemId: string, itemType: string, reactionName: string, reactionProps?: string[], requestOptions?: ActionRequestOptions) => Promise<ReactionType>;
29
+ deleteReaction: (itemId: string, itemType: string, reactionName: string, reactionProps?: string[], requestOptions?: ActionRequestOptions) => Promise<ReactionType>;
30
+ getReactionCount: (itemId: string, itemType: string, reactionName: string, requestOptions?: ActionRequestOptions) => Promise<number>;
31
+ hasPersonaReaction: (personaId: string, itemId: string, itemType: string, reactionName: string, requestOptions?: ActionRequestOptions) => Promise<boolean>;
32
+ hasReaction: (itemId: string, itemType: string, reactionName: string, direction: string, requestOptions?: ActionRequestOptions) => Promise<boolean>;
26
33
  abbreviateCount: (count: number) => string;
27
34
  updateReactionAdapter: (adapter: (input: unknown, options?: ReactionAdapterOptions) => any) => void;
28
35
  updateReactionAdapterOptions: (options: ReactionAdapterOptions) => void;
29
36
  }
30
- /**
31
- * Factory function to create ReactionActions with enhanced adapter injection capabilities.
32
- * Custom adapters are merged with default behavior, allowing partial overrides.
33
- *
34
- * @example
35
- * // Basic usage with default adapters
36
- * const reactionActions = createReactionActions(flux);
37
- *
38
- * @example
39
- * // Custom adapter that extends default behavior
40
- * const customReactionAdapter = (input: unknown, options?: ReactionAdapterOptions) => {
41
- * // input is already validated by default adapter
42
- * if (input.value && input.value > 5) {
43
- * throw new Error('Reaction value too high');
44
- * }
45
- * return input;
46
- * };
47
- *
48
- * const reactionActions = createReactionActions(flux, {
49
- * reactionAdapter: customReactionAdapter
50
- * });
51
- */
52
37
  export declare const createReactionActions: (flux: FluxFramework, options?: ReactionActionsOptions) => ReactionActions;
38
+ //# sourceMappingURL=reactionActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactionActions.d.ts","sourceRoot":"","sources":["../../../src/actions/reactionActions/reactionActions.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,413 @@
1
- import{Flux as A}from"@nlabs/arkhamjs";import{validateReactionInput as C}from"../../adapters/reactionAdapter/reactionAdapter";import{REACTION_CONSTANTS as R}from"../../stores/reactionStore";import{appMutation as O,appQuery as T}from"../../utils/api";const g="reactions",w=(a,y)=>C(a),h=(a,y)=>(p,u)=>{const d={...y,...u};let l=w(p,d);return a&&(l=a(l,d)),d?.customValidation&&(l=d.customValidation(l)),l},M=(a,y)=>{let p=y?.reactionAdapterOptions||{},u=y?.reactionAdapter,d=h(u,p);return{addReaction:async(e,n,r,c=[])=>{const t=d(r,p),{value:o}=t,s=o!==void 0?o.toString():o;try{const i={itemId:{type:"ID!",value:`${n}/${e}`},reaction:{type:"ReactionInput",value:{...t,value:s}}},m=S=>{const{reactions:{addReaction:v={}}}=S;return A.dispatch({itemId:e,itemType:n,reaction:v,type:R.ADD_ITEM_SUCCESS})},{reaction:b}=await O(a,"addReaction",g,i,["id","name","value",...c],{onSuccess:m});return b}catch(i){throw a.dispatch({error:i,type:R.ADD_ITEM_ERROR}),i}},deleteReaction:async(e,n,r,c=[])=>{try{const t={itemId:{type:"ID!",value:`${n}/${e}`},reactionName:{type:"String",value:r}},o=i=>{const{reactions:{deleteReaction:m={}}}=i;return A.dispatch({itemId:e,itemType:n,reaction:m,type:R.REMOVE_ITEM_SUCCESS})},{reaction:s}=await O(a,"deleteReaction",g,t,["id","name","value",...c],{onSuccess:o});return s}catch(t){throw a.dispatch({error:t,type:R.REMOVE_ITEM_ERROR}),t}},getReactionCount:async(e,n,r)=>{try{const c={itemId:{type:"ID!",value:`${n}/${e}`},reactionName:{type:"String",value:r}},t=s=>{const{reactions:{getReactionCount:i}}=s;return a.dispatch({count:i,itemId:e,name:r,type:R.GET_COUNT_SUCCESS})},{count:o}=await T(a,"reactionCount",g,c,["count"],{onSuccess:t});return o}catch(c){throw a.dispatch({error:c,type:R.GET_COUNT_ERROR}),c}},hasReaction:async(e,n,r,c)=>{try{const t={direction:{type:"String",value:c},itemId:{type:"ID!",value:`${n}/${e}`},reactionName:{type:"String",value:r}},o=i=>{const{reactions:{hasReaction:m}}=i;return A.dispatch({hasReaction:m,itemId:`${n}/${e}`,name:r,type:R.HAS_SUCCESS})},{hasReaction:s}=await T(a,"hasReaction",g,t,[],{onSuccess:o});return s}catch(t){throw a.dispatch({error:t,type:R.HAS_ERROR}),t}},abbreviateCount:e=>{const n=e||0;let r=n.toString();if(n>=1e3){const c=["","k","m","b","t"],t=Math.floor(`${n}`.length/3);let o=0,s="";for(let i=2;i>=1&&(o=parseFloat((t!==0?n/Math.pow(1e3,t):n).toPrecision(i)),s=o.toString(),!(`${o}`.replace(/[^a-zA-Z 0-9]+/g,"").length<=2));i--);o%1!==0&&(s=o.toFixed(1)),r=s+c[t]}return r},updateReactionAdapter:e=>{u=e,d=h(u,p)},updateReactionAdapterOptions:e=>{p={...p,...e},d=h(u,p)}}};export{M as createReactionActions};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FjdGlvbnMvcmVhY3Rpb25BY3Rpb25zL3JlYWN0aW9uQWN0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Rmx1eH0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcblxuaW1wb3J0IHt2YWxpZGF0ZVJlYWN0aW9uSW5wdXR9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL3JlYWN0aW9uQWRhcHRlci9yZWFjdGlvbkFkYXB0ZXInO1xuaW1wb3J0IHtSRUFDVElPTl9DT05TVEFOVFN9IGZyb20gJy4uLy4uL3N0b3Jlcy9yZWFjdGlvblN0b3JlJztcbmltcG9ydCB7YXBwTXV0YXRpb24sIGFwcFF1ZXJ5fSBmcm9tICcuLi8uLi91dGlscy9hcGknO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtSZWFjdGlvblR5cGV9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL3JlYWN0aW9uQWRhcHRlci9yZWFjdGlvbkFkYXB0ZXInO1xuaW1wb3J0IHR5cGUge1JlYWt0b3JEYkNvbGxlY3Rpb259IGZyb20gJy4uLy4uL3V0aWxzL2FwaSc7XG5cbmNvbnN0IERBVEFfVFlQRTogUmVha3RvckRiQ29sbGVjdGlvbiA9ICdyZWFjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uQWRhcHRlck9wdGlvbnMge1xuICBzdHJpY3Q/OiBib29sZWFuO1xuICBhbGxvd1BhcnRpYWw/OiBib29sZWFuO1xuICBlbnZpcm9ubWVudD86ICdkZXZlbG9wbWVudCcgfCAncHJvZHVjdGlvbicgfCAndGVzdCc7XG4gIGN1c3RvbVZhbGlkYXRpb24/OiAoaW5wdXQ6IHVua25vd24pID0+IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25BY3Rpb25zT3B0aW9ucyB7XG4gIHJlYWN0aW9uQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgcmVhY3Rpb25BZGFwdGVyT3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWN0aW9uQXBpUmVzdWx0c1R5cGUgPSB7XG4gIHJlYWN0aW9uczoge1xuICAgIGFkZFJlYWN0aW9uOiBSZWFjdGlvblR5cGU7XG4gICAgZGVsZXRlUmVhY3Rpb246IFJlYWN0aW9uVHlwZTtcbiAgICBnZXRSZWFjdGlvbkNvdW50OiBudW1iZXI7XG4gICAgaGFzUmVhY3Rpb246IGJvb2xlYW47XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uQWN0aW9ucyB7XG4gIGFkZFJlYWN0aW9uOiAoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIHJlYWN0aW9uOiBQYXJ0aWFsPFJlYWN0aW9uVHlwZT4sIHJlYWN0aW9uUHJvcHM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxSZWFjdGlvblR5cGU+O1xuICBkZWxldGVSZWFjdGlvbjogKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbk5hbWU6IHN0cmluZywgcmVhY3Rpb25Qcm9wcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPFJlYWN0aW9uVHlwZT47XG4gIGdldFJlYWN0aW9uQ291bnQ6IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgaGFzUmVhY3Rpb246IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBhYmJyZXZpYXRlQ291bnQ6IChjb3VudDogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIHVwZGF0ZVJlYWN0aW9uQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgdXBkYXRlUmVhY3Rpb25BZGFwdGVyT3B0aW9uczogKG9wdGlvbnM6IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbi8vIERlZmF1bHQgdmFsaWRhdGlvbiBmdW5jdGlvblxuY29uc3QgZGVmYXVsdFJlYWN0aW9uVmFsaWRhdG9yID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogUmVhY3Rpb25BZGFwdGVyT3B0aW9ucykgPT4gdmFsaWRhdGVSZWFjdGlvbklucHV0KGlucHV0KTtcblxuLy8gRW5oYW5jZWQgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IG1lcmdlcyBjdXN0b20gbG9naWMgd2l0aCBkZWZhdWx0c1xuY29uc3QgY3JlYXRlUmVhY3Rpb25WYWxpZGF0b3IgPSAoXG4gIGN1c3RvbUFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiBhbnksXG4gIG9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zXG4pID0+IChpbnB1dDogdW5rbm93biwgdmFsaWRhdG9yT3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IHtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHsuLi5vcHRpb25zLCAuLi52YWxpZGF0b3JPcHRpb25zfTtcblxuICAvLyBTdGFydCB3aXRoIGRlZmF1bHQgdmFsaWRhdGlvblxuICBsZXQgdmFsaWRhdGVkID0gZGVmYXVsdFJlYWN0aW9uVmFsaWRhdG9yKGlucHV0LCBtZXJnZWRPcHRpb25zKTtcblxuICAvLyBBcHBseSBjdXN0b20gdmFsaWRhdGlvbiBpZiBwcm92aWRlZFxuICBpZihjdXN0b21BZGFwdGVyKSB7XG4gICAgdmFsaWRhdGVkID0gY3VzdG9tQWRhcHRlcih2YWxpZGF0ZWQsIG1lcmdlZE9wdGlvbnMpO1xuICB9XG5cbiAgLy8gQXBwbHkgY3VzdG9tIHZhbGlkYXRpb24gZnJvbSBvcHRpb25zIGlmIHByb3ZpZGVkXG4gIGlmKG1lcmdlZE9wdGlvbnM/LmN1c3RvbVZhbGlkYXRpb24pIHtcbiAgICB2YWxpZGF0ZWQgPSBtZXJnZWRPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24odmFsaWRhdGVkKSBhcyBSZWFjdGlvblR5cGU7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkO1xufTtcblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBSZWFjdGlvbkFjdGlvbnMgd2l0aCBlbmhhbmNlZCBhZGFwdGVyIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuXG4gKiBDdXN0b20gYWRhcHRlcnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgYmVoYXZpb3IsIGFsbG93aW5nIHBhcnRpYWwgb3ZlcnJpZGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGRlZmF1bHQgYWRhcHRlcnNcbiAqIGNvbnN0IHJlYWN0aW9uQWN0aW9ucyA9IGNyZWF0ZVJlYWN0aW9uQWN0aW9ucyhmbHV4KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9tIGFkYXB0ZXIgdGhhdCBleHRlbmRzIGRlZmF1bHQgYmVoYXZpb3JcbiAqIGNvbnN0IGN1c3RvbVJlYWN0aW9uQWRhcHRlciA9IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IHtcbiAqICAgLy8gaW5wdXQgaXMgYWxyZWFkeSB2YWxpZGF0ZWQgYnkgZGVmYXVsdCBhZGFwdGVyXG4gKiAgIGlmIChpbnB1dC52YWx1ZSAmJiBpbnB1dC52YWx1ZSA+IDUpIHtcbiAqICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0aW9uIHZhbHVlIHRvbyBoaWdoJyk7XG4gKiAgIH1cbiAqICAgcmV0dXJuIGlucHV0O1xuICogfTtcbiAqXG4gKiBjb25zdCByZWFjdGlvbkFjdGlvbnMgPSBjcmVhdGVSZWFjdGlvbkFjdGlvbnMoZmx1eCwge1xuICogICByZWFjdGlvbkFkYXB0ZXI6IGN1c3RvbVJlYWN0aW9uQWRhcHRlclxuICogfSk7XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVSZWFjdGlvbkFjdGlvbnMgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG9wdGlvbnM/OiBSZWFjdGlvbkFjdGlvbnNPcHRpb25zXG4pOiBSZWFjdGlvbkFjdGlvbnMgPT4ge1xuICAvLyBJbml0aWFsaXplIGFkYXB0ZXIgc3RhdGVcbiAgbGV0IHJlYWN0aW9uQWRhcHRlck9wdGlvbnM6IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMgPSBvcHRpb25zPy5yZWFjdGlvbkFkYXB0ZXJPcHRpb25zIHx8IHt9O1xuICBsZXQgY3VzdG9tUmVhY3Rpb25BZGFwdGVyID0gb3B0aW9ucz8ucmVhY3Rpb25BZGFwdGVyO1xuXG4gIC8vIENyZWF0ZSB2YWxpZGF0b3JzIHRoYXQgbWVyZ2UgY3VzdG9tIGFkYXB0ZXJzIHdpdGggZGVmYXVsdHNcbiAgbGV0IHZhbGlkYXRlUmVhY3Rpb24gPSBjcmVhdGVSZWFjdGlvblZhbGlkYXRvcihjdXN0b21SZWFjdGlvbkFkYXB0ZXIsIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuXG4gIC8vIFVwZGF0ZSBmdW5jdGlvbnMgdGhhdCByZWNyZWF0ZSB2YWxpZGF0b3JzXG4gIGNvbnN0IHVwZGF0ZVJlYWN0aW9uQWRhcHRlciA9IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiBhbnkpOiB2b2lkID0+IHtcbiAgICBjdXN0b21SZWFjdGlvbkFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIHZhbGlkYXRlUmVhY3Rpb24gPSBjcmVhdGVSZWFjdGlvblZhbGlkYXRvcihjdXN0b21SZWFjdGlvbkFkYXB0ZXIsIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVJlYWN0aW9uQWRhcHRlck9wdGlvbnMgPSAob3B0aW9uczogUmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk6IHZvaWQgPT4ge1xuICAgIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMgPSB7Li4ucmVhY3Rpb25BZGFwdGVyT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgdmFsaWRhdGVSZWFjdGlvbiA9IGNyZWF0ZVJlYWN0aW9uVmFsaWRhdG9yKGN1c3RvbVJlYWN0aW9uQWRhcHRlciwgcmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gQWN0aW9uIGltcGxlbWVudGF0aW9uc1xuICBjb25zdCBhZGRSZWFjdGlvbiA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uOiBQYXJ0aWFsPFJlYWN0aW9uVHlwZT4sXG4gICAgcmVhY3Rpb25Qcm9wczogc3RyaW5nW10gPSBbXVxuICApOiBQcm9taXNlPFJlYWN0aW9uVHlwZT4gPT4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZFJlYWN0aW9uID0gdmFsaWRhdGVSZWFjdGlvbihyZWFjdGlvbiwgcmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk7XG4gICAgY29uc3Qge3ZhbHVlfSA9IHZhbGlkYXRlZFJlYWN0aW9uO1xuICAgIGNvbnN0IGZvcm1hdFZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHJlYWN0aW9uOiB7XG4gICAgICAgICAgdHlwZTogJ1JlYWN0aW9uSW5wdXQnLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAuLi52YWxpZGF0ZWRSZWFjdGlvbixcbiAgICAgICAgICAgIHZhbHVlOiBmb3JtYXRWYWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFJlYWN0aW9uQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3Qge3JlYWN0aW9uczoge2FkZFJlYWN0aW9uOiByZWFjdGlvbiA9IHt9fX0gPSBkYXRhO1xuICAgICAgICByZXR1cm4gRmx1eC5kaXNwYXRjaCh7aXRlbUlkLCBpdGVtVHlwZSwgcmVhY3Rpb24sIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5BRERfSVRFTV9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7cmVhY3Rpb246IGFkZGVkUmVhY3Rpb259ID0gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ2FkZFJlYWN0aW9uJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsICduYW1lJywgJ3ZhbHVlJywgLi4ucmVhY3Rpb25Qcm9wc10sIHtcbiAgICAgICAgb25TdWNjZXNzXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGFkZGVkUmVhY3Rpb24gYXMgUmVhY3Rpb25UeXBlO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuQUREX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVSZWFjdGlvbiA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uUHJvcHM6IHN0cmluZ1tdID0gW11cbiAgKTogUHJvbWlzZTxSZWFjdGlvblR5cGU+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbk5hbWU6IHtcbiAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICB2YWx1ZTogcmVhY3Rpb25OYW1lXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtyZWFjdGlvbnM6IHtkZWxldGVSZWFjdGlvbjogcmVhY3Rpb24gPSB7fX19ID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIEZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBpdGVtVHlwZSxcbiAgICAgICAgICByZWFjdGlvbixcbiAgICAgICAgICB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuUkVNT1ZFX0lURU1fU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtyZWFjdGlvbjogZGVsZXRlZFJlYWN0aW9ufSA9IGF3YWl0IGFwcE11dGF0aW9uKGZsdXgsICdkZWxldGVSZWFjdGlvbicsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFsnaWQnLCAnbmFtZScsICd2YWx1ZScsIC4uLnJlYWN0aW9uUHJvcHNdLCB7XG4gICAgICAgIG9uU3VjY2Vzc1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkZWxldGVkUmVhY3Rpb24gYXMgUmVhY3Rpb25UeXBlO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuUkVNT1ZFX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRSZWFjdGlvbkNvdW50ID0gYXN5bmMgKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBpdGVtSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25OYW1lOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgdmFsdWU6IHJlYWN0aW9uTmFtZVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogUmVhY3Rpb25BcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCB7cmVhY3Rpb25zOiB7Z2V0UmVhY3Rpb25Db3VudH19ID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGNvdW50OiBnZXRSZWFjdGlvbkNvdW50LFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBuYW1lOiByZWFjdGlvbk5hbWUsXG4gICAgICAgICAgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLkdFVF9DT1VOVF9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge2NvdW50OiByZWFjdGlvbkNvdW50fSA9IGF3YWl0IGFwcFF1ZXJ5KFxuICAgICAgICBmbHV4LFxuICAgICAgICAncmVhY3Rpb25Db3VudCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsnY291bnQnXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVhY3Rpb25Db3VudCBhcyBudW1iZXI7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5HRVRfQ09VTlRfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYXNSZWFjdGlvbiA9IGFzeW5jIChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICB2YWx1ZTogZGlyZWN0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbk5hbWU6IHtcbiAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICB2YWx1ZTogcmVhY3Rpb25OYW1lXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtyZWFjdGlvbnM6IHtoYXNSZWFjdGlvbn19ID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIEZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGhhc1JlYWN0aW9uLFxuICAgICAgICAgIGl0ZW1JZDogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWAsXG4gICAgICAgICAgbmFtZTogcmVhY3Rpb25OYW1lLFxuICAgICAgICAgIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5IQVNfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtoYXNSZWFjdGlvbjogaGFzUmVhY3Rpb25SZXN1bHR9ID0gYXdhaXQgYXBwUXVlcnkoXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdoYXNSZWFjdGlvbicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFtdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBoYXNSZWFjdGlvblJlc3VsdCBhcyBib29sZWFuO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuSEFTX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWJicmV2aWF0ZUNvdW50ID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHZhbHVlOiBudW1iZXIgPSBjb3VudCB8fCAwO1xuICAgIGxldCBuZXdWYWx1ZTogc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgIGlmKHZhbHVlID49IDEwMDApIHtcbiAgICAgIGNvbnN0IHN1ZmZpeGVzOiBzdHJpbmdbXSA9IFsnJywgJ2snLCAnbScsICdiJywgJ3QnXTtcbiAgICAgIGNvbnN0IHN1ZmZpeE51bTogbnVtYmVyID0gTWF0aC5mbG9vcihgJHt2YWx1ZX1gLmxlbmd0aCAvIDMpO1xuICAgICAgbGV0IHNob3J0VmFsdWU6IG51bWJlciA9IDA7XG4gICAgICBsZXQgc2hvcnRTdHJpbmc6IHN0cmluZyA9ICcnO1xuXG4gICAgICBmb3IobGV0IHByZWNpc2lvbiA9IDI7IHByZWNpc2lvbiA+PSAxOyBwcmVjaXNpb24tLSkge1xuICAgICAgICBzaG9ydFZhbHVlID0gcGFyc2VGbG9hdCgoc3VmZml4TnVtICE9PSAwID8gdmFsdWUgLyBNYXRoLnBvdygxMDAwLCBzdWZmaXhOdW0pIDogdmFsdWUpLnRvUHJlY2lzaW9uKHByZWNpc2lvbikpO1xuICAgICAgICBzaG9ydFN0cmluZyA9IHNob3J0VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgZG90TGVzc1Nob3J0VmFsdWU6IHN0cmluZyA9IGAke3Nob3J0VmFsdWV9YC5yZXBsYWNlKC9bXmEtekEtWiAwLTldKy9nLCAnJyk7XG5cbiAgICAgICAgaWYoZG90TGVzc1Nob3J0VmFsdWUubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihzaG9ydFZhbHVlICUgMSAhPT0gMCkge1xuICAgICAgICBzaG9ydFN0cmluZyA9IHNob3J0VmFsdWUudG9GaXhlZCgxKTtcbiAgICAgIH1cblxuICAgICAgbmV3VmFsdWUgPSBzaG9ydFN0cmluZyArIHN1ZmZpeGVzW3N1ZmZpeE51bV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgYWN0aW9ucyBvYmplY3RcbiAgcmV0dXJuIHtcbiAgICBhZGRSZWFjdGlvbixcbiAgICBkZWxldGVSZWFjdGlvbixcbiAgICBnZXRSZWFjdGlvbkNvdW50LFxuICAgIGhhc1JlYWN0aW9uLFxuICAgIGFiYnJldmlhdGVDb3VudCxcbiAgICB1cGRhdGVSZWFjdGlvbkFkYXB0ZXIsXG4gICAgdXBkYXRlUmVhY3Rpb25BZGFwdGVyT3B0aW9uc1xuICB9O1xufTtcblxuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBUSxRQUFBQSxNQUFXLGtCQUVuQixPQUFRLHlCQUFBQyxNQUE0QixpREFDcEMsT0FBUSxzQkFBQUMsTUFBeUIsNkJBQ2pDLE9BQVEsZUFBQUMsRUFBYSxZQUFBQyxNQUFlLGtCQU1wQyxNQUFNQyxFQUFpQyxZQWtDakNDLEVBQTJCLENBQUNDLEVBQWdCQyxJQUFxQ1AsRUFBc0JNLENBQUssRUFHNUdFLEVBQTBCLENB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QUFLLFNBQVMsQ0FBQyxNQUFBZSxFQUFPLEtBQU01QixFQUFtQixTQUFTLENBQUMsRUFDbkQ0QixDQUNSLENBQ0YsRUFzQ0UsZ0JBcEN1QlEsR0FBMEIsQ0FDakQsTUFBTWQsRUFBZ0JjLEdBQVMsRUFDL0IsSUFBSUMsRUFBbUJmLEVBQU0sU0FBUyxFQUV0QyxHQUFHQSxHQUFTLElBQU0sQ0FDaEIsTUFBTWdCLEVBQXFCLENBQUMsR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQzVDQyxFQUFvQixLQUFLLE1BQU0sR0FBR2pCLENBQUssR0FBRyxPQUFTLENBQUMsRUFDMUQsSUFBSWtCLEVBQXFCLEVBQ3JCQyxFQUFzQixHQUUxQixRQUFRQyxFQUFZLEVBQUdBLEdBQWEsSUFDbENGLEVBQWEsWUFBWUQsSUFBYyxFQUFJakIsRUFBUSxLQUFLLElBQUksSUFBTWlCLENBQVMsRUFBSWpCLEdBQU8sWUFBWW9CLENBQVMsQ0FBQyxFQUM1R0QsRUFBY0QsRUFBVyxTQUFTLEVBRy9CLEVBRitCLEdBQUdBLENBQVUsR0FBRyxRQUFRLGtCQUFtQixFQUFFLEVBRTFELFFBQVUsSUFMTUUsSUFLckMsQ0FLQ0YsRUFBYSxJQUFNLElBQ3BCQyxFQUFjRCxFQUFXLFFBQVEsQ0FBQyxHQUdwQ0gsRUFBV0ksRUFBY0gsRUFBU0MsQ0FBUyxDQUM3QyxDQUVBLE9BQU9GLENBQ1QsRUFTRSxzQkFoTjZCTSxHQUE2RSxDQUMxRzVCLEVBQXdCNEIsRUFDeEIzQixFQUFtQlQsRUFBd0JRLEVBQXVCRCxDQUFzQixDQUMxRixFQThNRSw2QkE1TW9DUixHQUEwQyxDQUM5RVEsRUFBeUIsQ0FBQyxHQUFHQSxFQUF3QixHQUFHUixDQUFPLEVBQy9EVSxFQUFtQlQsRUFBd0JRLEVBQXVCRCxDQUFzQixDQUMxRixDQTBNQSxDQUNGIiwKICAibmFtZXMiOiBbIkZsdXgiLCAidmFsaWRhdGVSZWFjdGlvbklucHV0IiwgIlJFQUNUSU9OX0NPTlNUQU5UUyIsICJhcHBNdXRhdGlvbiIsICJhcHBRdWVyeSIsICJEQVRBX1RZUEUiLCAiZGVmYXVsdFJlYWN0aW9uVmFsaWRhdG9yIiwgImlucHV0IiwgIm9wdGlvbnMiLCAiY3JlYXRlUmVhY3Rpb25WYWxpZGF0b3IiLCAiY3VzdG9tQWRhcHRlciIsICJ2YWxpZGF0b3JPcHRpb25zIiwgIm1lcmdlZE9wdGlvbnMiLCAidmFsaWRhdGVkIiwgImNyZWF0ZVJlYWN0aW9uQWN0aW9ucyIsICJmbHV4IiwgInJlYWN0aW9uQWRhcHRlck9wdGlvbnMiLCAiY3VzdG9tUmVhY3Rpb25BZGFwdGVyIiwgInZhbGlkYXRlUmVhY3Rpb24iLCAiaXRlbUlkIiwgIml0ZW1UeXBlIiwgInJlYWN0aW9uIiwgInJlYWN0aW9uUHJvcHMiLCAidmFsaWRhdGVkUmVhY3Rpb24iLCAidmFsdWUiLCAiZm9ybWF0VmFsdWUiLCAicXVlcnlWYXJpYWJsZXMiLCAib25TdWNjZXNzIiwgImRhdGEiLCAiYWRkZWRSZWFjdGlvbiIsICJlcnJvciIsICJyZWFjdGlvbk5hbWUiLCAiZGVsZXRlZFJlYWN0aW9uIiwgImdldFJlYWN0aW9uQ291bnQiLCAicmVhY3Rpb25Db3VudCIsICJkaXJlY3Rpb24iLCAiaGFzUmVhY3Rpb24iLCAiaGFzUmVhY3Rpb25SZXN1bHQiLCAiY291bnQiLCAibmV3VmFsdWUiLCAic3VmZml4ZXMiLCAic3VmZml4TnVtIiwgInNob3J0VmFsdWUiLCAic2hvcnRTdHJpbmciLCAicHJlY2lzaW9uIiwgImFkYXB0ZXIiXQp9Cg==
1
+ /**
2
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { Flux } from '@nlabs/arkhamjs';
5
+ import { validateReactionInput } from '../../adapters/reactionAdapter/reactionAdapter.js';
6
+ import { REACTION_CONSTANTS } from '../../stores/reactionStore.js';
7
+ import { appMutation, appQuery } from '../../utils/api.js';
8
+ import { clearCachedRequest, getCachedRequest, setCachedRequest } from '../../utils/requestCache.js';
9
+ const DATA_TYPE = 'reactions';
10
+ const defaultReactionValidator = (input, options)=>validateReactionInput(input);
11
+ const createReactionValidator = (customAdapter, options)=>(input, validatorOptions)=>{
12
+ const mergedOptions = {
13
+ ...options,
14
+ ...validatorOptions
15
+ };
16
+ let validated = defaultReactionValidator(input, mergedOptions);
17
+ if (customAdapter) {
18
+ validated = customAdapter(validated, mergedOptions);
19
+ }
20
+ if (mergedOptions?.customValidation) {
21
+ validated = mergedOptions.customValidation(validated);
22
+ }
23
+ return validated;
24
+ };
25
+ export const createReactionActions = (flux, options)=>{
26
+ let reactionAdapterOptions = options?.reactionAdapterOptions || {};
27
+ let customReactionAdapter = options?.reactionAdapter;
28
+ let validateReaction = createReactionValidator(customReactionAdapter, reactionAdapterOptions);
29
+ const updateReactionAdapter = (adapter)=>{
30
+ customReactionAdapter = adapter;
31
+ validateReaction = createReactionValidator(customReactionAdapter, reactionAdapterOptions);
32
+ };
33
+ const updateReactionAdapterOptions = (options)=>{
34
+ reactionAdapterOptions = {
35
+ ...reactionAdapterOptions,
36
+ ...options
37
+ };
38
+ validateReaction = createReactionValidator(customReactionAdapter, reactionAdapterOptions);
39
+ };
40
+ const addReaction = async (itemId, itemType, reaction, reactionProps = [], requestOptions = {})=>{
41
+ const validatedReaction = validateReaction(reaction, reactionAdapterOptions);
42
+ const { value } = validatedReaction;
43
+ const formatValue = value !== undefined ? value.toString() : value;
44
+ try {
45
+ const queryVariables = {
46
+ itemId: {
47
+ type: 'ID!',
48
+ value: `${itemType}/${itemId}`
49
+ },
50
+ reaction: {
51
+ type: 'ReactionInput',
52
+ value: {
53
+ ...validatedReaction,
54
+ value: formatValue
55
+ }
56
+ }
57
+ };
58
+ const onSuccess = (data)=>{
59
+ const reaction = data?.reactions?.addReaction || {};
60
+ return Flux.dispatch({
61
+ itemId,
62
+ itemType,
63
+ reaction,
64
+ type: REACTION_CONSTANTS.ADD_ITEM_SUCCESS
65
+ });
66
+ };
67
+ return await appMutation(flux, 'addReaction', DATA_TYPE, queryVariables, [
68
+ 'id',
69
+ 'name',
70
+ 'value',
71
+ ...reactionProps
72
+ ], {
73
+ onSuccess
74
+ });
75
+ } catch (error) {
76
+ flux.dispatch({
77
+ error,
78
+ type: REACTION_CONSTANTS.ADD_ITEM_ERROR
79
+ });
80
+ throw error;
81
+ } finally{
82
+ await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reaction.name || ''}`);
83
+ await clearCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reaction.name || ''}`);
84
+ }
85
+ };
86
+ const addPersonaReaction = async (personaId, itemId, itemType, reaction, reactionProps = [], requestOptions = {})=>{
87
+ const validatedReaction = validateReaction(reaction, reactionAdapterOptions);
88
+ const { value } = validatedReaction;
89
+ const formatValue = value !== undefined ? value.toString() : value;
90
+ try {
91
+ const queryVariables = {
92
+ itemId: {
93
+ type: 'ID!',
94
+ value: `${itemType}/${itemId}`
95
+ },
96
+ personaId: {
97
+ type: 'ID',
98
+ value: personaId
99
+ },
100
+ reaction: {
101
+ type: 'ReactionInput',
102
+ value: {
103
+ ...validatedReaction,
104
+ value: formatValue
105
+ }
106
+ }
107
+ };
108
+ const onSuccess = (data)=>{
109
+ const reaction = data?.reactions?.addPersonaReaction || {};
110
+ return Flux.dispatch({
111
+ itemId,
112
+ itemType,
113
+ reaction,
114
+ type: REACTION_CONSTANTS.ADD_ITEM_SUCCESS
115
+ });
116
+ };
117
+ return await appMutation(flux, 'addPersonaReaction', DATA_TYPE, queryVariables, [
118
+ 'id',
119
+ 'name',
120
+ 'type',
121
+ 'value',
122
+ ...reactionProps
123
+ ], {
124
+ onSuccess
125
+ });
126
+ } catch (error) {
127
+ flux.dispatch({
128
+ error,
129
+ type: REACTION_CONSTANTS.ADD_ITEM_ERROR
130
+ });
131
+ throw error;
132
+ } finally{
133
+ await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reaction.name || ''}`);
134
+ await clearCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reaction.name || ''}`);
135
+ }
136
+ };
137
+ const deleteReaction = async (itemId, itemType, reactionName, reactionProps = [], requestOptions = {})=>{
138
+ try {
139
+ const queryVariables = {
140
+ itemId: {
141
+ type: 'ID!',
142
+ value: `${itemType}/${itemId}`
143
+ },
144
+ reactionName: {
145
+ type: 'String',
146
+ value: reactionName
147
+ }
148
+ };
149
+ const onSuccess = (data)=>{
150
+ const reaction = data?.reactions?.deleteReaction || {};
151
+ return Flux.dispatch({
152
+ itemId,
153
+ itemType,
154
+ reaction,
155
+ type: REACTION_CONSTANTS.REMOVE_ITEM_SUCCESS
156
+ });
157
+ };
158
+ return await appMutation(flux, 'deleteReaction', DATA_TYPE, queryVariables, [
159
+ 'id',
160
+ 'name',
161
+ 'value',
162
+ ...reactionProps
163
+ ], {
164
+ onSuccess
165
+ });
166
+ } catch (error) {
167
+ flux.dispatch({
168
+ error,
169
+ type: REACTION_CONSTANTS.REMOVE_ITEM_ERROR
170
+ });
171
+ throw error;
172
+ } finally{
173
+ await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`);
174
+ await clearCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reactionName}`);
175
+ }
176
+ };
177
+ const deletePersonaReaction = async (personaId, itemId, itemType, reactionName, reactionProps = [], requestOptions = {})=>{
178
+ try {
179
+ const queryVariables = {
180
+ itemId: {
181
+ type: 'ID!',
182
+ value: `${itemType}/${itemId}`
183
+ },
184
+ personaId: {
185
+ type: 'ID',
186
+ value: personaId
187
+ },
188
+ reactionName: {
189
+ type: 'String!',
190
+ value: reactionName
191
+ }
192
+ };
193
+ const onSuccess = (data)=>{
194
+ const reaction = data?.reactions?.deletePersonaReaction || {};
195
+ return Flux.dispatch({
196
+ itemId,
197
+ itemType,
198
+ reaction,
199
+ type: REACTION_CONSTANTS.REMOVE_ITEM_SUCCESS
200
+ });
201
+ };
202
+ return await appMutation(flux, 'deletePersonaReaction', DATA_TYPE, queryVariables, [
203
+ 'id',
204
+ 'name',
205
+ 'type',
206
+ 'value',
207
+ ...reactionProps
208
+ ], {
209
+ onSuccess
210
+ });
211
+ } catch (error) {
212
+ flux.dispatch({
213
+ error,
214
+ type: REACTION_CONSTANTS.REMOVE_ITEM_ERROR
215
+ });
216
+ throw error;
217
+ } finally{
218
+ await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`);
219
+ await clearCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reactionName}`);
220
+ }
221
+ };
222
+ const getReactionCount = async (itemId, itemType, reactionName, requestOptions = {})=>{
223
+ try {
224
+ const cachedResult = getCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`, {
225
+ itemId,
226
+ itemType,
227
+ reactionName
228
+ }, requestOptions);
229
+ if (cachedResult !== undefined) {
230
+ return cachedResult;
231
+ }
232
+ const queryVariables = {
233
+ itemId: {
234
+ type: 'ID!',
235
+ value: `${itemType}/${itemId}`
236
+ },
237
+ reactionName: {
238
+ type: 'String',
239
+ value: reactionName
240
+ }
241
+ };
242
+ const onSuccess = (data)=>{
243
+ const getReactionCount = data?.reactions?.getReactionCount ?? 0;
244
+ return flux.dispatch({
245
+ count: getReactionCount,
246
+ itemId,
247
+ name: reactionName,
248
+ type: REACTION_CONSTANTS.GET_COUNT_SUCCESS
249
+ });
250
+ };
251
+ const result = await appQuery(flux, 'getReactionCount', DATA_TYPE, queryVariables, [], {
252
+ onSuccess
253
+ });
254
+ return await setCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`, {
255
+ itemId,
256
+ itemType,
257
+ reactionName
258
+ }, result, requestOptions);
259
+ } catch (error) {
260
+ flux.dispatch({
261
+ error,
262
+ type: REACTION_CONSTANTS.GET_COUNT_ERROR
263
+ });
264
+ throw error;
265
+ }
266
+ };
267
+ const hasReaction = async (itemId, itemType, reactionName, direction, requestOptions = {})=>{
268
+ try {
269
+ const cachedResult = getCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reactionName}`, {
270
+ direction,
271
+ itemId,
272
+ itemType,
273
+ reactionName
274
+ }, requestOptions);
275
+ if (cachedResult !== undefined) {
276
+ return cachedResult;
277
+ }
278
+ const queryVariables = {
279
+ direction: {
280
+ type: 'String',
281
+ value: direction
282
+ },
283
+ itemId: {
284
+ type: 'ID!',
285
+ value: `${itemType}/${itemId}`
286
+ },
287
+ reactionName: {
288
+ type: 'String',
289
+ value: reactionName
290
+ }
291
+ };
292
+ const onSuccess = (data)=>{
293
+ const hasReaction = data?.reactions?.hasReaction ?? false;
294
+ return Flux.dispatch({
295
+ hasReaction,
296
+ itemId: `${itemType}/${itemId}`,
297
+ name: reactionName,
298
+ type: REACTION_CONSTANTS.HAS_SUCCESS
299
+ });
300
+ };
301
+ const result = await appQuery(flux, 'hasReaction', DATA_TYPE, queryVariables, [], {
302
+ onSuccess
303
+ });
304
+ return await setCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reactionName}`, {
305
+ direction,
306
+ itemId,
307
+ itemType,
308
+ reactionName
309
+ }, result, requestOptions);
310
+ } catch (error) {
311
+ flux.dispatch({
312
+ error,
313
+ type: REACTION_CONSTANTS.HAS_ERROR
314
+ });
315
+ throw error;
316
+ }
317
+ };
318
+ const hasPersonaReaction = async (personaId, itemId, itemType, reactionName, requestOptions = {})=>{
319
+ try {
320
+ const cachedResult = getCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reactionName}`, {
321
+ itemId,
322
+ itemType,
323
+ personaId,
324
+ reactionName
325
+ }, requestOptions);
326
+ if (cachedResult !== undefined) {
327
+ return cachedResult;
328
+ }
329
+ const queryVariables = {
330
+ itemId: {
331
+ type: 'ID!',
332
+ value: `${itemType}/${itemId}`
333
+ },
334
+ personaId: {
335
+ type: 'ID',
336
+ value: personaId
337
+ },
338
+ reactionName: {
339
+ type: 'String!',
340
+ value: reactionName
341
+ }
342
+ };
343
+ const onSuccess = (data)=>{
344
+ const hasReaction = data?.reactions?.hasPersonaReaction ?? false;
345
+ return Flux.dispatch({
346
+ hasReaction,
347
+ itemId: `${itemType}/${itemId}`,
348
+ name: reactionName,
349
+ type: REACTION_CONSTANTS.HAS_SUCCESS
350
+ });
351
+ };
352
+ const result = await appQuery(flux, 'hasPersonaReaction', DATA_TYPE, queryVariables, [], {
353
+ onSuccess
354
+ });
355
+ return await setCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reactionName}`, {
356
+ itemId,
357
+ itemType,
358
+ personaId,
359
+ reactionName
360
+ }, result, requestOptions);
361
+ } catch (error) {
362
+ flux.dispatch({
363
+ error,
364
+ type: REACTION_CONSTANTS.HAS_ERROR
365
+ });
366
+ throw error;
367
+ }
368
+ };
369
+ const abbreviateCount = (count)=>{
370
+ const value = count || 0;
371
+ let newValue = value.toString();
372
+ if (value >= 1000) {
373
+ const suffixes = [
374
+ '',
375
+ 'k',
376
+ 'm',
377
+ 'b',
378
+ 't'
379
+ ];
380
+ const suffixNum = Math.floor(`${value}`.length / 3);
381
+ let shortValue = 0;
382
+ let shortString = '';
383
+ for(let precision = 2; precision >= 1; precision--){
384
+ shortValue = parseFloat((suffixNum !== 0 ? value / Math.pow(1000, suffixNum) : value).toPrecision(precision));
385
+ shortString = shortValue.toString();
386
+ const dotLessShortValue = `${shortValue}`.replace(/[^a-zA-Z 0-9]+/g, '');
387
+ if (dotLessShortValue.length <= 2) {
388
+ break;
389
+ }
390
+ }
391
+ if (shortValue % 1 !== 0) {
392
+ shortString = shortValue.toFixed(1);
393
+ }
394
+ newValue = shortString + suffixes[suffixNum];
395
+ }
396
+ return newValue;
397
+ };
398
+ // Return the actions object
399
+ return {
400
+ addPersonaReaction,
401
+ addReaction,
402
+ deletePersonaReaction,
403
+ deleteReaction,
404
+ getReactionCount,
405
+ hasPersonaReaction,
406
+ hasReaction,
407
+ abbreviateCount,
408
+ updateReactionAdapter,
409
+ updateReactionAdapterOptions
410
+ };
411
+ };
412
+
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy9yZWFjdGlvbkFjdGlvbnMvcmVhY3Rpb25BY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0ZsdXh9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5cbmltcG9ydCB7dmFsaWRhdGVSZWFjdGlvbklucHV0fSBmcm9tICcuLi8uLi9hZGFwdGVycy9yZWFjdGlvbkFkYXB0ZXIvcmVhY3Rpb25BZGFwdGVyLmpzJztcbmltcG9ydCB7UkVBQ1RJT05fQ09OU1RBTlRTfSBmcm9tICcuLi8uLi9zdG9yZXMvcmVhY3Rpb25TdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtSZWFjdGlvblR5cGV9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL3JlYWN0aW9uQWRhcHRlci9yZWFjdGlvbkFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FjdGlvblJlcXVlc3RPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5jb25zdCBEQVRBX1RZUEUgPSAncmVhY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zIHtcbiAgc3RyaWN0PzogYm9vbGVhbjtcbiAgYWxsb3dQYXJ0aWFsPzogYm9vbGVhbjtcbiAgZW52aXJvbm1lbnQ/OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nIHwgJ3Rlc3QnO1xuICBjdXN0b21WYWxpZGF0aW9uPzogKGlucHV0OiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uQWN0aW9uc09wdGlvbnMge1xuICByZWFjdGlvbkFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiBhbnk7XG4gIHJlYWN0aW9uQWRhcHRlck9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlID0ge1xuICByZWFjdGlvbnM6IHtcbiAgICBhZGRQZXJzb25hUmVhY3Rpb246IFJlYWN0aW9uVHlwZTtcbiAgICBhZGRSZWFjdGlvbjogUmVhY3Rpb25UeXBlO1xuICAgIGRlbGV0ZVBlcnNvbmFSZWFjdGlvbjogUmVhY3Rpb25UeXBlO1xuICAgIGRlbGV0ZVJlYWN0aW9uOiBSZWFjdGlvblR5cGU7XG4gICAgZ2V0UmVhY3Rpb25Db3VudDogbnVtYmVyO1xuICAgIGhhc1BlcnNvbmFSZWFjdGlvbjogYm9vbGVhbjtcbiAgICBoYXNSZWFjdGlvbjogYm9vbGVhbjtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25BY3Rpb25zIHtcbiAgYWRkUGVyc29uYVJlYWN0aW9uOiAocGVyc29uYUlkOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbjogUGFydGlhbDxSZWFjdGlvblR5cGU+LCByZWFjdGlvblByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8UmVhY3Rpb25UeXBlPjtcbiAgYWRkUmVhY3Rpb246IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb246IFBhcnRpYWw8UmVhY3Rpb25UeXBlPiwgcmVhY3Rpb25Qcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFJlYWN0aW9uVHlwZT47XG4gIGRlbGV0ZVBlcnNvbmFSZWFjdGlvbjogKHBlcnNvbmFJZDogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIHJlYWN0aW9uUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxSZWFjdGlvblR5cGU+O1xuICBkZWxldGVSZWFjdGlvbjogKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbk5hbWU6IHN0cmluZywgcmVhY3Rpb25Qcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFJlYWN0aW9uVHlwZT47XG4gIGdldFJlYWN0aW9uQ291bnQ6IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgaGFzUGVyc29uYVJlYWN0aW9uOiAocGVyc29uYUlkOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbk5hbWU6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgaGFzUmVhY3Rpb246IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBhYmJyZXZpYXRlQ291bnQ6IChjb3VudDogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIHVwZGF0ZVJlYWN0aW9uQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgdXBkYXRlUmVhY3Rpb25BZGFwdGVyT3B0aW9uczogKG9wdGlvbnM6IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGRlZmF1bHRSZWFjdGlvblZhbGlkYXRvciA9IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IHZhbGlkYXRlUmVhY3Rpb25JbnB1dChpbnB1dCk7XG5cbmNvbnN0IGNyZWF0ZVJlYWN0aW9uVmFsaWRhdG9yID0gKFxuICBjdXN0b21BZGFwdGVyPzogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogUmVhY3Rpb25BZGFwdGVyT3B0aW9ucykgPT4gYW55LFxuICBvcHRpb25zPzogUmVhY3Rpb25BZGFwdGVyT3B0aW9uc1xuKSA9PiAoaW5wdXQ6IHVua25vd24sIHZhbGlkYXRvck9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiB7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7Li4ub3B0aW9ucywgLi4udmFsaWRhdG9yT3B0aW9uc307XG5cbiAgbGV0IHZhbGlkYXRlZCA9IGRlZmF1bHRSZWFjdGlvblZhbGlkYXRvcihpbnB1dCwgbWVyZ2VkT3B0aW9ucyk7XG5cbiAgaWYoY3VzdG9tQWRhcHRlcikge1xuICAgIHZhbGlkYXRlZCA9IGN1c3RvbUFkYXB0ZXIodmFsaWRhdGVkLCBtZXJnZWRPcHRpb25zKTtcbiAgfVxuXG4gIGlmKG1lcmdlZE9wdGlvbnM/LmN1c3RvbVZhbGlkYXRpb24pIHtcbiAgICB2YWxpZGF0ZWQgPSBtZXJnZWRPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24odmFsaWRhdGVkKSBhcyBSZWFjdGlvblR5cGU7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlYWN0aW9uQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFJlYWN0aW9uQWN0aW9uc09wdGlvbnNcbik6IFJlYWN0aW9uQWN0aW9ucyA9PiB7XG4gIGxldCByZWFjdGlvbkFkYXB0ZXJPcHRpb25zID0gb3B0aW9ucz8ucmVhY3Rpb25BZGFwdGVyT3B0aW9ucyB8fCB7fTtcbiAgbGV0IGN1c3RvbVJlYWN0aW9uQWRhcHRlciA9IG9wdGlvbnM/LnJlYWN0aW9uQWRhcHRlcjtcbiAgbGV0IHZhbGlkYXRlUmVhY3Rpb24gPSBjcmVhdGVSZWFjdGlvblZhbGlkYXRvcihjdXN0b21SZWFjdGlvbkFkYXB0ZXIsIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuXG4gIGNvbnN0IHVwZGF0ZVJlYWN0aW9uQWRhcHRlciA9IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiBhbnkpOiB2b2lkID0+IHtcbiAgICBjdXN0b21SZWFjdGlvbkFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIHZhbGlkYXRlUmVhY3Rpb24gPSBjcmVhdGVSZWFjdGlvblZhbGlkYXRvcihjdXN0b21SZWFjdGlvbkFkYXB0ZXIsIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVJlYWN0aW9uQWRhcHRlck9wdGlvbnMgPSAob3B0aW9uczogUmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk6IHZvaWQgPT4ge1xuICAgIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMgPSB7Li4ucmVhY3Rpb25BZGFwdGVyT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgdmFsaWRhdGVSZWFjdGlvbiA9IGNyZWF0ZVJlYWN0aW9uVmFsaWRhdG9yKGN1c3RvbVJlYWN0aW9uQWRhcHRlciwgcmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgYWRkUmVhY3Rpb24gPSBhc3luYyAoXG4gICAgaXRlbUlkOiBzdHJpbmcsXG4gICAgaXRlbVR5cGU6IHN0cmluZyxcbiAgICByZWFjdGlvbjogUGFydGlhbDxSZWFjdGlvblR5cGU+LFxuICAgIHJlYWN0aW9uUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxSZWFjdGlvblR5cGU+ID0+IHtcbiAgICBjb25zdCB2YWxpZGF0ZWRSZWFjdGlvbiA9IHZhbGlkYXRlUmVhY3Rpb24ocmVhY3Rpb24sIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSB2YWxpZGF0ZWRSZWFjdGlvbjtcbiAgICBjb25zdCBmb3JtYXRWYWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICdSZWFjdGlvbklucHV0JyxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgLi4udmFsaWRhdGVkUmVhY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0VmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uID0gZGF0YT8ucmVhY3Rpb25zPy5hZGRSZWFjdGlvbiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIEZsdXguZGlzcGF0Y2goe2l0ZW1JZCwgaXRlbVR5cGUsIHJlYWN0aW9uLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuQUREX0lURU1fU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPFJlYWN0aW9uVHlwZT4oZmx1eCwgJ2FkZFJlYWN0aW9uJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsICduYW1lJywgJ3ZhbHVlJywgLi4ucmVhY3Rpb25Qcm9wc10sIHtcbiAgICAgICAgb25TdWNjZXNzXG4gICAgICB9KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLkFERF9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5nZXRSZWFjdGlvbkNvdW50OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uLm5hbWUgfHwgJyd9YCk7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgYHJlYWN0aW9uLmhhc1JlYWN0aW9uOiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uLm5hbWUgfHwgJyd9YCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZFBlcnNvbmFSZWFjdGlvbiA9IGFzeW5jIChcbiAgICBwZXJzb25hSWQ6IHN0cmluZyxcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uOiBQYXJ0aWFsPFJlYWN0aW9uVHlwZT4sXG4gICAgcmVhY3Rpb25Qcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFJlYWN0aW9uVHlwZT4gPT4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZFJlYWN0aW9uID0gdmFsaWRhdGVSZWFjdGlvbihyZWFjdGlvbiwgcmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk7XG4gICAgY29uc3Qge3ZhbHVlfSA9IHZhbGlkYXRlZFJlYWN0aW9uO1xuICAgIGNvbnN0IGZvcm1hdFZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHBlcnNvbmFJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCcsXG4gICAgICAgICAgdmFsdWU6IHBlcnNvbmFJZFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICdSZWFjdGlvbklucHV0JyxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgLi4udmFsaWRhdGVkUmVhY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0VmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uID0gZGF0YT8ucmVhY3Rpb25zPy5hZGRQZXJzb25hUmVhY3Rpb24gfHwge307XG4gICAgICAgIHJldHVybiBGbHV4LmRpc3BhdGNoKHtpdGVtSWQsIGl0ZW1UeXBlLCByZWFjdGlvbiwgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLkFERF9JVEVNX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxSZWFjdGlvblR5cGU+KGZsdXgsICdhZGRQZXJzb25hUmVhY3Rpb24nLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbJ2lkJywgJ25hbWUnLCAndHlwZScsICd2YWx1ZScsIC4uLnJlYWN0aW9uUHJvcHNdLCB7XG4gICAgICAgIG9uU3VjY2Vzc1xuICAgICAgfSk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5BRERfSVRFTV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgcmVhY3Rpb24uZ2V0UmVhY3Rpb25Db3VudDoke2l0ZW1UeXBlfToke2l0ZW1JZH06JHtyZWFjdGlvbi5uYW1lIHx8ICcnfWApO1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5oYXNQZXJzb25hUmVhY3Rpb246JHtwZXJzb25hSWR9OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uLm5hbWUgfHwgJyd9YCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZVJlYWN0aW9uID0gYXN5bmMgKFxuICAgIGl0ZW1JZDogc3RyaW5nLFxuICAgIGl0ZW1UeXBlOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25Qcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFJlYWN0aW9uVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHJlYWN0aW9uTmFtZToge1xuICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgIHZhbHVlOiByZWFjdGlvbk5hbWVcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFJlYWN0aW9uQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3QgcmVhY3Rpb24gPSBkYXRhPy5yZWFjdGlvbnM/LmRlbGV0ZVJlYWN0aW9uIHx8IHt9O1xuICAgICAgICByZXR1cm4gRmx1eC5kaXNwYXRjaCh7XG4gICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgIGl0ZW1UeXBlLFxuICAgICAgICAgIHJlYWN0aW9uLFxuICAgICAgICAgIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPFJlYWN0aW9uVHlwZT4oZmx1eCwgJ2RlbGV0ZVJlYWN0aW9uJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsICduYW1lJywgJ3ZhbHVlJywgLi4ucmVhY3Rpb25Qcm9wc10sIHtcbiAgICAgICAgb25TdWNjZXNzXG4gICAgICB9KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLlJFTU9WRV9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5nZXRSZWFjdGlvbkNvdW50OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gKTtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgcmVhY3Rpb24uaGFzUmVhY3Rpb246JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVQZXJzb25hUmVhY3Rpb24gPSBhc3luYyAoXG4gICAgcGVyc29uYUlkOiBzdHJpbmcsXG4gICAgaXRlbUlkOiBzdHJpbmcsXG4gICAgaXRlbVR5cGU6IHN0cmluZyxcbiAgICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICByZWFjdGlvblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8UmVhY3Rpb25UeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBpdGVtSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgcGVyc29uYUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEJyxcbiAgICAgICAgICB2YWx1ZTogcGVyc29uYUlkXG4gICAgICAgIH0sXG4gICAgICAgIHJlYWN0aW9uTmFtZToge1xuICAgICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgICB2YWx1ZTogcmVhY3Rpb25OYW1lXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uID0gZGF0YT8ucmVhY3Rpb25zPy5kZWxldGVQZXJzb25hUmVhY3Rpb24gfHwge307XG4gICAgICAgIHJldHVybiBGbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgaXRlbVR5cGUsXG4gICAgICAgICAgcmVhY3Rpb24sXG4gICAgICAgICAgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLlJFTU9WRV9JVEVNX1NVQ0NFU1NcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb248UmVhY3Rpb25UeXBlPihmbHV4LCAnZGVsZXRlUGVyc29uYVJlYWN0aW9uJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsICduYW1lJywgJ3R5cGUnLCAndmFsdWUnLCAuLi5yZWFjdGlvblByb3BzXSwge1xuICAgICAgICBvblN1Y2Nlc3NcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuUkVNT1ZFX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgYHJlYWN0aW9uLmdldFJlYWN0aW9uQ291bnQ6JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWApO1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5oYXNQZXJzb25hUmVhY3Rpb246JHtwZXJzb25hSWR9OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8bnVtYmVyPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgYHJlYWN0aW9uLmdldFJlYWN0aW9uQ291bnQ6JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWAsXG4gICAgICAgIHtpdGVtSWQsIGl0ZW1UeXBlLCByZWFjdGlvbk5hbWV9LFxuICAgICAgICByZXF1ZXN0T3B0aW9uc1xuICAgICAgKTtcblxuICAgICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbk5hbWU6IHtcbiAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICB2YWx1ZTogcmVhY3Rpb25OYW1lXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFJlYWN0aW9uQ291bnQgPSBkYXRhPy5yZWFjdGlvbnM/LmdldFJlYWN0aW9uQ291bnQgPz8gMDtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGNvdW50OiBnZXRSZWFjdGlvbkNvdW50LFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBuYW1lOiByZWFjdGlvbk5hbWUsXG4gICAgICAgICAgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLkdFVF9DT1VOVF9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBwUXVlcnk8bnVtYmVyPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2dldFJlYWN0aW9uQ291bnQnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBzZXRDYWNoZWRSZXF1ZXN0KFxuICAgICAgICBmbHV4LFxuICAgICAgICBgcmVhY3Rpb24uZ2V0UmVhY3Rpb25Db3VudDoke2l0ZW1UeXBlfToke2l0ZW1JZH06JHtyZWFjdGlvbk5hbWV9YCxcbiAgICAgICAge2l0ZW1JZCwgaXRlbVR5cGUsIHJlYWN0aW9uTmFtZX0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5HRVRfQ09VTlRfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYXNSZWFjdGlvbiA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGRpcmVjdGlvbjogc3RyaW5nLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PGJvb2xlYW4+KFxuICAgICAgICBmbHV4LFxuICAgICAgICBgcmVhY3Rpb24uaGFzUmVhY3Rpb246JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWAsXG4gICAgICAgIHtkaXJlY3Rpb24sIGl0ZW1JZCwgaXRlbVR5cGUsIHJlYWN0aW9uTmFtZX0sXG4gICAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgICApO1xuXG4gICAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgdmFsdWU6IGRpcmVjdGlvblxuICAgICAgICB9LFxuICAgICAgICBpdGVtSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25OYW1lOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgdmFsdWU6IHJlYWN0aW9uTmFtZVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogUmVhY3Rpb25BcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNSZWFjdGlvbiA9IGRhdGE/LnJlYWN0aW9ucz8uaGFzUmVhY3Rpb24gPz8gZmFsc2U7XG4gICAgICAgIHJldHVybiBGbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBoYXNSZWFjdGlvbixcbiAgICAgICAgICBpdGVtSWQ6IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gLFxuICAgICAgICAgIG5hbWU6IHJlYWN0aW9uTmFtZSxcbiAgICAgICAgICB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuSEFTX1NVQ0NFU1NcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBRdWVyeTxib29sZWFuPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2hhc1JlYWN0aW9uJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYXdhaXQgc2V0Q2FjaGVkUmVxdWVzdChcbiAgICAgICAgZmx1eCxcbiAgICAgICAgYHJlYWN0aW9uLmhhc1JlYWN0aW9uOiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gLFxuICAgICAgICB7ZGlyZWN0aW9uLCBpdGVtSWQsIGl0ZW1UeXBlLCByZWFjdGlvbk5hbWV9LFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuSEFTX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFzUGVyc29uYVJlYWN0aW9uID0gYXN5bmMgKFxuICAgIHBlcnNvbmFJZDogc3RyaW5nLFxuICAgIGl0ZW1JZDogc3RyaW5nLFxuICAgIGl0ZW1UeXBlOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8Ym9vbGVhbj4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgIGByZWFjdGlvbi5oYXNQZXJzb25hUmVhY3Rpb246JHtwZXJzb25hSWR9OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gLFxuICAgICAgICB7aXRlbUlkLCBpdGVtVHlwZSwgcGVyc29uYUlkLCByZWFjdGlvbk5hbWV9LFxuICAgICAgICByZXF1ZXN0T3B0aW9uc1xuICAgICAgKTtcblxuICAgICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICBwZXJzb25hSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQnLFxuICAgICAgICAgIHZhbHVlOiBwZXJzb25hSWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25OYW1lOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICAgIHZhbHVlOiByZWFjdGlvbk5hbWVcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFJlYWN0aW9uQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3QgaGFzUmVhY3Rpb24gPSBkYXRhPy5yZWFjdGlvbnM/Lmhhc1BlcnNvbmFSZWFjdGlvbiA/PyBmYWxzZTtcbiAgICAgICAgcmV0dXJuIEZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGhhc1JlYWN0aW9uLFxuICAgICAgICAgIGl0ZW1JZDogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWAsXG4gICAgICAgICAgbmFtZTogcmVhY3Rpb25OYW1lLFxuICAgICAgICAgIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5IQVNfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcFF1ZXJ5PGJvb2xlYW4+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnaGFzUGVyc29uYVJlYWN0aW9uJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYXdhaXQgc2V0Q2FjaGVkUmVxdWVzdChcbiAgICAgICAgZmx1eCxcbiAgICAgICAgYHJlYWN0aW9uLmhhc1BlcnNvbmFSZWFjdGlvbjoke3BlcnNvbmFJZH06JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWAsXG4gICAgICAgIHtpdGVtSWQsIGl0ZW1UeXBlLCBwZXJzb25hSWQsIHJlYWN0aW9uTmFtZX0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5IQVNfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhYmJyZXZpYXRlQ291bnQgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb3VudCB8fCAwO1xuICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICBpZih2YWx1ZSA+PSAxMDAwKSB7XG4gICAgICBjb25zdCBzdWZmaXhlcyA9IFsnJywgJ2snLCAnbScsICdiJywgJ3QnXTtcbiAgICAgIGNvbnN0IHN1ZmZpeE51bSA9IE1hdGguZmxvb3IoYCR7dmFsdWV9YC5sZW5ndGggLyAzKTtcbiAgICAgIGxldCBzaG9ydFZhbHVlID0gMDtcbiAgICAgIGxldCBzaG9ydFN0cmluZyA9ICcnO1xuXG4gICAgICBmb3IobGV0IHByZWNpc2lvbiA9IDI7IHByZWNpc2lvbiA+PSAxOyBwcmVjaXNpb24tLSkge1xuICAgICAgICBzaG9ydFZhbHVlID0gcGFyc2VGbG9hdCgoc3VmZml4TnVtICE9PSAwID8gdmFsdWUgLyBNYXRoLnBvdygxMDAwLCBzdWZmaXhOdW0pIDogdmFsdWUpLnRvUHJlY2lzaW9uKHByZWNpc2lvbikpO1xuICAgICAgICBzaG9ydFN0cmluZyA9IHNob3J0VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgZG90TGVzc1Nob3J0VmFsdWUgPSBgJHtzaG9ydFZhbHVlfWAucmVwbGFjZSgvW15hLXpBLVogMC05XSsvZywgJycpO1xuXG4gICAgICAgIGlmKGRvdExlc3NTaG9ydFZhbHVlLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoc2hvcnRWYWx1ZSAlIDEgIT09IDApIHtcbiAgICAgICAgc2hvcnRTdHJpbmcgPSBzaG9ydFZhbHVlLnRvRml4ZWQoMSk7XG4gICAgICB9XG5cbiAgICAgIG5ld1ZhbHVlID0gc2hvcnRTdHJpbmcgKyBzdWZmaXhlc1tzdWZmaXhOdW1dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGFjdGlvbnMgb2JqZWN0XG4gIHJldHVybiB7XG4gICAgYWRkUGVyc29uYVJlYWN0aW9uLFxuICAgIGFkZFJlYWN0aW9uLFxuICAgIGRlbGV0ZVBlcnNvbmFSZWFjdGlvbixcbiAgICBkZWxldGVSZWFjdGlvbixcbiAgICBnZXRSZWFjdGlvbkNvdW50LFxuICAgIGhhc1BlcnNvbmFSZWFjdGlvbixcbiAgICBoYXNSZWFjdGlvbixcbiAgICBhYmJyZXZpYXRlQ291bnQsXG4gICAgdXBkYXRlUmVhY3Rpb25BZGFwdGVyLFxuICAgIHVwZGF0ZVJlYWN0aW9uQWRhcHRlck9wdGlvbnNcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiRmx1eCIsInZhbGlkYXRlUmVhY3Rpb25JbnB1dCIsIlJFQUNUSU9OX0NPTlNUQU5UUyIsImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJjbGVhckNhY2hlZFJlcXVlc3QiLCJnZXRDYWNoZWRSZXF1ZXN0Iiwic2V0Q2FjaGVkUmVxdWVzdCIsIkRBVEFfVFlQRSIsImRlZmF1bHRSZWFjdGlvblZhbGlkYXRvciIsImlucHV0Iiwib3B0aW9ucyIsImNyZWF0ZVJlYWN0aW9uVmFsaWRhdG9yIiwiY3VzdG9tQWRhcHRlciIsInZhbGlkYXRvck9wdGlvbnMiLCJtZXJnZWRPcHRpb25zIiwidmFsaWRhdGVkIiwiY3VzdG9tVmFsaWRhdGlvbiIsImNyZWF0ZVJlYWN0aW9uQWN0aW9ucyIsImZsdXgiLCJyZWFjdGlvbkFkYXB0ZXJPcHRpb25zIiwiY3VzdG9tUmVhY3Rpb25BZGFwdGVyIiwicmVhY3Rpb25BZGFwdGVyIiwidmFsaWRhdGVSZWFjdGlvbiIsInVwZGF0ZVJlYWN0aW9uQWRhcHRlciIsImFkYXB0ZXIiLCJ1cGRhdGVSZWFjdGlvbkFkYXB0ZXJPcHRpb25zIiwiYWRkUmVhY3Rpb24iLCJpdGVtSWQiLCJpdGVtVHlwZSIsInJlYWN0aW9uIiwicmVhY3Rpb25Qcm9wcyIsInJlcXVlc3RPcHRpb25zIiwidmFsaWRhdGVkUmVhY3Rpb24iLCJ2YWx1ZSIsImZvcm1hdFZhbHVlIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJxdWVyeVZhcmlhYmxlcyIsInR5cGUiLCJvblN1Y2Nlc3MiLCJkYXRhIiwicmVhY3Rpb25zIiwiZGlzcGF0Y2giLCJBRERfSVRFTV9TVUNDRVNTIiwiZXJyb3IiLCJBRERfSVRFTV9FUlJPUiIsIm5hbWUiLCJhZGRQZXJzb25hUmVhY3Rpb24iLCJwZXJzb25hSWQiLCJkZWxldGVSZWFjdGlvbiIsInJlYWN0aW9uTmFtZSIsIlJFTU9WRV9JVEVNX1NVQ0NFU1MiLCJSRU1PVkVfSVRFTV9FUlJPUiIsImRlbGV0ZVBlcnNvbmFSZWFjdGlvbiIsImdldFJlYWN0aW9uQ291bnQiLCJjYWNoZWRSZXN1bHQiLCJjb3VudCIsIkdFVF9DT1VOVF9TVUNDRVNTIiwicmVzdWx0IiwiR0VUX0NPVU5UX0VSUk9SIiwiaGFzUmVhY3Rpb24iLCJkaXJlY3Rpb24iLCJIQVNfU1VDQ0VTUyIsIkhBU19FUlJPUiIsImhhc1BlcnNvbmFSZWFjdGlvbiIsImFiYnJldmlhdGVDb3VudCIsIm5ld1ZhbHVlIiwic3VmZml4ZXMiLCJzdWZmaXhOdW0iLCJNYXRoIiwiZmxvb3IiLCJsZW5ndGgiLCJzaG9ydFZhbHVlIiwic2hvcnRTdHJpbmciLCJwcmVjaXNpb24iLCJwYXJzZUZsb2F0IiwicG93IiwidG9QcmVjaXNpb24iLCJkb3RMZXNzU2hvcnRWYWx1ZSIsInJlcGxhY2UiLCJ0b0ZpeGVkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxJQUFJLFFBQU8sa0JBQWtCO0FBRXJDLFNBQVFDLHFCQUFxQixRQUFPLG9EQUFvRDtBQUN4RixTQUFRQyxrQkFBa0IsUUFBTyxnQ0FBZ0M7QUFDakUsU0FBUUMsV0FBVyxFQUFFQyxRQUFRLFFBQU8scUJBQXFCO0FBQ3pELFNBQVFDLGtCQUFrQixFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCLFFBQU8sOEJBQThCO0FBTW5HLE1BQU1DLFlBQVk7QUF1Q2xCLE1BQU1DLDJCQUEyQixDQUFDQyxPQUFnQkMsVUFBcUNWLHNCQUFzQlM7QUFFN0csTUFBTUUsMEJBQTBCLENBQzlCQyxlQUNBRixVQUNHLENBQUNELE9BQWdCSTtRQUNwQixNQUFNQyxnQkFBZ0I7WUFBQyxHQUFHSixPQUFPO1lBQUUsR0FBR0csZ0JBQWdCO1FBQUE7UUFFdEQsSUFBSUUsWUFBWVAseUJBQXlCQyxPQUFPSztRQUVoRCxJQUFHRixlQUFlO1lBQ2hCRyxZQUFZSCxjQUFjRyxXQUFXRDtRQUN2QztRQUVBLElBQUdBLGVBQWVFLGtCQUFrQjtZQUNsQ0QsWUFBWUQsY0FBY0UsZ0JBQWdCLENBQUNEO1FBQzdDO1FBRUEsT0FBT0E7SUFDVDtBQUVBLE9BQU8sTUFBTUUsd0JBQXdCLENBQ25DQyxNQUNBUjtJQUVBLElBQUlTLHlCQUF5QlQsU0FBU1MsMEJBQTBCLENBQUM7SUFDakUsSUFBSUMsd0JBQXdCVixTQUFTVztJQUNyQyxJQUFJQyxtQkFBbUJYLHdCQUF3QlMsdUJBQXVCRDtJQUV0RSxNQUFNSSx3QkFBd0IsQ0FBQ0M7UUFDN0JKLHdCQUF3Qkk7UUFDeEJGLG1CQUFtQlgsd0JBQXdCUyx1QkFBdUJEO0lBQ3BFO0lBRUEsTUFBTU0sK0JBQStCLENBQUNmO1FBQ3BDUyx5QkFBeUI7WUFBQyxHQUFHQSxzQkFBc0I7WUFBRSxHQUFHVCxPQUFPO1FBQUE7UUFDL0RZLG1CQUFtQlgsd0JBQXdCUyx1QkFBdUJEO0lBQ3BFO0lBRUEsTUFBTU8sY0FBYyxPQUNsQkMsUUFDQUMsVUFDQUMsVUFDQUMsZ0JBQTBCLEVBQUUsRUFDNUJDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsTUFBTUMsb0JBQW9CVixpQkFBaUJPLFVBQVVWO1FBQ3JELE1BQU0sRUFBQ2MsS0FBSyxFQUFDLEdBQUdEO1FBQ2hCLE1BQU1FLGNBQWNELFVBQVVFLFlBQVlGLE1BQU1HLFFBQVEsS0FBS0g7UUFFN0QsSUFBSTtZQUNGLE1BQU1JLGlCQUFpQjtnQkFDckJWLFFBQVE7b0JBQ05XLE1BQU07b0JBQ05MLE9BQU8sR0FBR0wsU0FBUyxDQUFDLEVBQUVELFFBQVE7Z0JBQ2hDO2dCQUNBRSxVQUFVO29CQUNSUyxNQUFNO29CQUNOTCxPQUFPO3dCQUNMLEdBQUdELGlCQUFpQjt3QkFDcEJDLE9BQU9DO29CQUNUO2dCQUNGO1lBQ0Y7WUFFQSxNQUFNSyxZQUFZLENBQUNDO2dCQUNqQixNQUFNWCxXQUFXVyxNQUFNQyxXQUFXZixlQUFlLENBQUM7Z0JBQ2xELE9BQU8zQixLQUFLMkMsUUFBUSxDQUFDO29CQUFDZjtvQkFBUUM7b0JBQVVDO29CQUFVUyxNQUFNckMsbUJBQW1CMEMsZ0JBQWdCO2dCQUFBO1lBQzdGO1lBRUEsT0FBTyxNQUFNekMsWUFBMEJnQixNQUFNLGVBQWVYLFdBQVc4QixnQkFBZ0I7Z0JBQUM7Z0JBQU07Z0JBQVE7bUJBQVlQO2FBQWMsRUFBRTtnQkFDaElTO1lBQ0Y7UUFDRixFQUFFLE9BQU1LLE9BQU87WUFDYjFCLEtBQUt3QixRQUFRLENBQUM7Z0JBQUNFO2dCQUFPTixNQUFNckMsbUJBQW1CNEMsY0FBYztZQUFBO1lBQzdELE1BQU1EO1FBQ1IsU0FBVTtZQUNSLE1BQU14QyxtQkFBbUJjLE1BQU0sQ0FBQywwQkFBMEIsRUFBRVUsU0FBUyxDQUFDLEVBQUVELE9BQU8sQ0FBQyxFQUFFRSxTQUFTaUIsSUFBSSxJQUFJLElBQUk7WUFDdkcsTUFBTTFDLG1CQUFtQmMsTUFBTSxDQUFDLHFCQUFxQixFQUFFVSxTQUFTLENBQUMsRUFBRUQsT0FBTyxDQUFDLEVBQUVFLFNBQVNpQixJQUFJLElBQUksSUFBSTtRQUNwRztJQUNGO0lBRUEsTUFBTUMscUJBQXFCLE9BQ3pCQyxXQUNBckIsUUFDQUMsVUFDQUMsVUFDQUMsZ0JBQTBCLEVBQUUsRUFDNUJDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsTUFBTUMsb0JBQW9CVixpQkFBaUJPLFVBQVVWO1FBQ3JELE1BQU0sRUFBQ2MsS0FBSyxFQUFDLEdBQUdEO1FBQ2hCLE1BQU1FLGNBQWNELFVBQVVFLFlBQVlGLE1BQU1HLFFBQVEsS0FBS0g7UUFFN0QsSUFBSTtZQUNGLE1BQU1JLGlCQUFpQjtnQkFDckJWLFFBQVE7b0JBQ05XLE1BQU07b0JBQ05MLE9BQU8sR0FBR0wsU0FBUyxDQUFDLEVBQUVELFFBQVE7Z0JBQ2hDO2dCQUNBcUIsV0FBVztvQkFDVFYsTUFBTTtvQkFDTkwsT0FBT2U7Z0JBQ1Q7Z0JBQ0FuQixVQUFVO29CQUNSUyxNQUFNO29CQUNOTCxPQUFPO3dCQUNMLEdBQUdELGlCQUFpQjt3QkFDcEJDLE9BQU9DO29CQUNUO2dCQUNGO1lBQ0Y7WUFFQSxNQUFNSyxZQUFZLENBQUNDO2dCQUNqQixNQUFNWCxXQUFXVyxNQUFNQyxXQUFXTSxzQkFBc0IsQ0FBQztnQkFDekQsT0FBT2hELEtBQUsyQyxRQUFRLENBQUM7b0JBQUNmO29CQUFRQztvQkFBVUM7b0JBQVVTLE1BQU1yQyxtQkFBbUIwQyxnQkFBZ0I7Z0JBQUE7WUFDN0Y7WUFFQSxPQUFPLE1BQU16QyxZQUEwQmdCLE1BQU0sc0JBQXNCWCxXQUFXOEIsZ0JBQWdCO2dCQUFDO2dCQUFNO2dCQUFRO2dCQUFRO21CQUFZUDthQUFjLEVBQUU7Z0JBQy9JUztZQUNGO1FBQ0YsRUFBRSxPQUFNSyxPQUFPO1lBQ2IxQixLQUFLd0IsUUFBUSxDQUFDO2dCQUFDRTtnQkFBT04sTUFBTXJDLG1CQUFtQjRDLGNBQWM7WUFBQTtZQUM3RCxNQUFNRDtRQUNSLFNBQVU7WUFDUixNQUFNeEMsbUJBQW1CYyxNQUFNLENBQUMsMEJBQTBCLEVBQUVVLFNBQVMsQ0FBQyxFQUFFRCxPQUFPLENBQUMsRUFBRUUsU0FBU2lCLElBQUksSUFBSSxJQUFJO1lBQ3ZHLE1BQU0xQyxtQkFBbUJjLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRThCLFVBQVUsQ0FBQyxFQUFFcEIsU0FBUyxDQUFDLEVBQUVELE9BQU8sQ0FBQyxFQUFFRSxTQUFTaUIsSUFBSSxJQUFJLElBQUk7UUFDeEg7SUFDRjtJQUVBLE1BQU1HLGlCQUFpQixPQUNyQnRCLFFBQ0FDLFVBQ0FzQixjQUNBcEIsZ0JBQTBCLEVBQUUsRUFDNUJDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsSUFBSTtZQUNGLE1BQU1NLGlCQUFpQjtnQkFDckJWLFFBQVE7b0JBQ05XLE1BQU07b0JBQ05MLE9BQU8sR0FBR0wsU0FBUyxDQUFDLEVBQUVELFFBQVE7Z0JBQ2hDO2dCQUNBdUIsY0FBYztvQkFDWlosTUFBTTtvQkFDTkwsT0FBT2lCO2dCQUNUO1lBQ0Y7WUFFQSxNQUFNWCxZQUFZLENBQUNDO2dCQUNqQixNQUFNWCxXQUFXVyxNQUFNQyxXQUFXUSxrQkFBa0IsQ0FBQztnQkFDckQsT0FBT2xELEtBQUsyQyxRQUFRLENBQUM7b0JBQ25CZjtvQkFDQUM7b0JBQ0FDO29CQUNBUyxNQUFNckMsbUJBQW1Ca0QsbUJBQW1CO2dCQUM5QztZQUNGO1lBRUEsT0FBTyxNQUFNakQsWUFBMEJnQixNQUFNLGtCQUFrQlgsV0FBVzhCLGdCQUFnQjtnQkFBQztnQkFBTTtnQkFBUTttQkFBWVA7YUFBYyxFQUFFO2dCQUNuSVM7WUFDRjtRQUNGLEVBQUUsT0FBTUssT0FBTztZQUNiMUIsS0FBS3dCLFFBQVEsQ0FBQztnQkFBQ0U7Z0JBQU9OLE1BQU1yQyxtQkFBbUJtRCxpQkFBaUI7WUFBQTtZQUNoRSxNQUFNUjtRQUNSLFNBQVU7WUFDUixNQUFNeEMsbUJBQW1CYyxNQUFNLENBQUMsMEJBQTBCLEVBQUVVLFNBQVMsQ0FBQyxFQUFFRCxPQUFPLENBQUMsRUFBRXVCLGNBQWM7WUFDaEcsTUFBTTlDLG1CQUFtQmMsTUFBTSxDQUFDLHFCQUFxQixFQUFFVSxTQUFTLENBQUMsRUFBRUQsT0FBTyxDQUFDLEVBQUV1QixjQUFjO1FBQzdGO0lBQ0Y7SUFFQSxNQUFNRyx3QkFBd0IsT0FDNUJMLFdBQ0FyQixRQUNBQyxVQUNBc0IsY0FDQXBCLGdCQUEwQixFQUFFLEVBQzVCQyxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLElBQUk7WUFDRixNQUFNTSxpQkFBaUI7Z0JBQ3JCVixRQUFRO29CQUNOVyxNQUFNO29CQUNOTCxPQUFPLEdBQUdMLFNBQVMsQ0FBQyxFQUFFRCxRQUFRO2dCQUNoQztnQkFDQXFCLFdBQVc7b0JBQ1RWLE1BQU07b0JBQ05MLE9BQU9lO2dCQUNUO2dCQUNBRSxjQUFjO29CQUNaWixNQUFNO29CQUNOTCxPQUFPaUI7Z0JBQ1Q7WUFDRjtZQUVBLE1BQU1YLFlBQVksQ0FBQ0M7Z0JBQ2pCLE1BQU1YLFdBQVdXLE1BQU1DLFdBQVdZLHlCQUF5QixDQUFDO2dCQUM1RCxPQUFPdEQsS0FBSzJDLFFBQVEsQ0FBQztvQkFDbkJmO29CQUNBQztvQkFDQUM7b0JBQ0FTLE1BQU1yQyxtQkFBbUJrRCxtQkFBbUI7Z0JBQzlDO1lBQ0Y7WUFFQSxPQUFPLE1BQU1qRCxZQUEwQmdCLE1BQU0seUJBQXlCWCxXQUFXOEIsZ0JBQWdCO2dCQUFDO2dCQUFNO2dCQUFRO2dCQUFRO21CQUFZUDthQUFjLEVBQUU7Z0JBQ2xKUztZQUNGO1FBQ0YsRUFBRSxPQUFNSyxPQUFPO1lBQ2IxQixLQUFLd0IsUUFBUSxDQUFDO2dCQUFDRTtnQkFBT04sTUFBTXJDLG1CQUFtQm1ELGlCQUFpQjtZQUFBO1lBQ2hFLE1BQU1SO1FBQ1IsU0FBVTtZQUNSLE1BQU14QyxtQkFBbUJjLE1BQU0sQ0FBQywwQkFBMEIsRUFBRVUsU0FBUyxDQUFDLEVBQUVELE9BQU8sQ0FBQyxFQUFFdUIsY0FBYztZQUNoRyxNQUFNOUMsbUJBQW1CYyxNQUFNLENBQUMsNEJBQTRCLEVBQUU4QixVQUFVLENBQUMsRUFBRXBCLFNBQVMsQ0FBQyxFQUFFRCxPQUFPLENBQUMsRUFBRXVCLGNBQWM7UUFDakg7SUFDRjtJQUVBLE1BQU1JLG1CQUFtQixPQUN2QjNCLFFBQ0FDLFVBQ0FzQixjQUNBbkIsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxJQUFJO1lBQ0YsTUFBTXdCLGVBQWVsRCxpQkFDbkJhLE1BQ0EsQ0FBQywwQkFBMEIsRUFBRVUsU0FBUyxDQUFDLEVBQUVELE9BQU8sQ0FBQyxFQUFFdUIsY0FBYyxFQUNqRTtnQkFBQ3ZCO2dCQUFRQztnQkFBVXNCO1lBQVksR0FDL0JuQjtZQUdGLElBQUd3QixpQkFBaUJwQixXQUFXO2dCQUM3QixPQUFPb0I7WUFDVDtZQUVBLE1BQU1sQixpQkFBaUI7Z0JBQ3JCVixRQUFRO29CQUNOVyxNQUFNO29CQUNOTCxPQUFPLEdBQUdMLFNBQVMsQ0FBQyxFQUFFRCxRQUFRO2dCQUNoQztnQkFDQXVCLGNBQWM7b0JBQ1paLE1BQU07b0JBQ05MLE9BQU9pQjtnQkFDVDtZQUNGO1lBRUEsTUFBTVgsWUFBWSxDQUFDQztnQkFDakIsTUFBTWMsbUJBQW1CZCxNQUFNQyxXQUFXYSxvQkFBb0I7Z0JBQzlELE9BQU9wQyxLQUFLd0IsUUFBUSxDQUFDO29CQUNuQmMsT0FBT0Y7b0JBQ1AzQjtvQkFDQW1CLE1BQU1JO29CQUNOWixNQUFNckMsbUJBQW1Cd0QsaUJBQWlCO2dCQUM1QztZQUNGO1lBRUEsTUFBTUMsU0FBUyxNQUFNdkQsU0FDbkJlLE1BQ0Esb0JBQ0FYLFdBQ0E4QixnQkFDQSxFQUFFLEVBQ0Y7Z0JBQUNFO1lBQVM7WUFHWixPQUFPLE1BQU1qQyxpQkFDWFksTUFDQSxDQUFDLDBCQUEwQixFQUFFVSxTQUFTLENBQUMsRUFBRUQsT0FBTyxDQUFDLEVBQUV1QixjQUFjLEVBQ2pFO2dCQUFDdkI7Z0JBQVFDO2dCQUFVc0I7WUFBWSxHQUMvQlEsUUFDQTNCO1FBRUosRUFBRSxPQUFNYSxPQUFPO1lBQ2IxQixLQUFLd0IsUUFBUSxDQUFDO2dCQUFDRTtnQkFBT04sTUFBTXJDLG1CQUFtQjBELGVBQWU7WUFBQTtZQUM5RCxNQUFNZjtRQUNSO0lBQ0Y7SUFFQSxNQUFNZ0IsY0FBYyxPQUNsQmpDLFFBQ0FDLFVBQ0FzQixjQUNBVyxXQUNBOUIsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxJQUFJO1lBQ0YsTUFBTXdCLGVBQWVsRCxpQkFDbkJhLE1BQ0EsQ0FBQyxxQkFBcUIsRUFBRVUsU0FBUyxDQUFDLEVBQUVELE9BQU8sQ0FBQyxFQUFFdUIsY0FBYyxFQUM1RDtnQkFBQ1c7Z0JBQVdsQztnQkFBUUM7Z0JBQVVzQjtZQUFZLEdBQzFDbkI7WUFHRixJQUFHd0IsaUJBQWlCcEIsV0FBVztnQkFDN0IsT0FBT29CO1lBQ1Q7WUFFQSxNQUFNbEIsaUJBQWlCO2dCQUNyQndCLFdBQVc7b0JBQ1R2QixNQUFNO29CQUNOTCxPQUFPNEI7Z0JBQ1Q7Z0JBQ0FsQyxRQUFRO29CQUNOVyxNQUFNO29CQUNOTCxPQUFPLEdBQUdMLFNBQVMsQ0FBQyxFQUFFRCxRQUFRO2dCQUNoQztnQkFDQXVCLGNBQWM7b0JBQ1paLE1BQU07b0JBQ05MLE9BQU9pQjtnQkFDVDtZQUNGO1lBRUEsTUFBTVgsWUFBWSxDQUFDQztnQkFDakIsTUFBTW9CLGNBQWNwQixNQUFNQyxXQUFXbUIsZUFBZTtnQkFDcEQsT0FBTzdELEtBQUsyQyxRQUFRLENBQUM7b0JBQ25Ca0I7b0JBQ0FqQyxRQUFRLEdBQUdDLFNBQVMsQ0FBQyxFQUFFRCxRQUFRO29CQUMvQm1CLE1BQU1JO29CQUNOWixNQUFNckMsbUJBQW1CNkQsV0FBVztnQkFDdEM7WUFDRjtZQUVBLE1BQU1KLFNBQVMsTUFBTXZELFNBQ25CZSxNQUNBLGVBQ0FYLFdBQ0E4QixnQkFDQSxFQUFFLEVBQ0Y7Z0JBQUNFO1lBQVM7WUFHWixPQUFPLE1BQU1qQyxpQkFDWFksTUFDQSxDQUFDLHFCQUFxQixFQUFFVSxTQUFTLENBQUMsRUFBRUQsT0FBTyxDQUFDLEVBQUV1QixjQUFjLEVBQzVEO2dCQUFDVztnQkFBV2xDO2dCQUFRQztnQkFBVXNCO1lBQVksR0FDMUNRLFFBQ0EzQjtRQUVKLEVBQUUsT0FBTWEsT0FBTztZQUNiMUIsS0FBS3dCLFFBQVEsQ0FBQztnQkFBQ0U7Z0JBQU9OLE1BQU1yQyxtQkFBbUI4RCxTQUFTO1lBQUE7WUFDeEQsTUFBTW5CO1FBQ1I7SUFDRjtJQUVBLE1BQU1vQixxQkFBcUIsT0FDekJoQixXQUNBckIsUUFDQUMsVUFDQXNCLGNBQ0FuQixpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLElBQUk7WUFDRixNQUFNd0IsZUFBZWxELGlCQUNuQmEsTUFDQSxDQUFDLDRCQUE0QixFQUFFOEIsVUFBVSxDQUFDLEVBQUVwQixTQUFTLENBQUMsRUFBRUQsT0FBTyxDQUFDLEVBQUV1QixjQUFjLEVBQ2hGO2dCQUFDdkI7Z0JBQVFDO2dCQUFVb0I7Z0JBQVdFO1lBQVksR0FDMUNuQjtZQUdGLElBQUd3QixpQkFBaUJwQixXQUFXO2dCQUM3QixPQUFPb0I7WUFDVDtZQUVBLE1BQU1sQixpQkFBaUI7Z0JBQ3JCVixRQUFRO29CQUNOVyxNQUFNO29CQUNOTCxPQUFPLEdBQUdMLFNBQVMsQ0FBQyxFQUFFRCxRQUFRO2dCQUNoQztnQkFDQXFCLFdBQVc7b0JBQ1RWLE1BQU07b0JBQ05MLE9BQU9lO2dCQUNUO2dCQUNBRSxjQUFjO29CQUNaWixNQUFNO29CQUNOTCxPQUFPaUI7Z0JBQ1Q7WUFDRjtZQUVBLE1BQU1YLFlBQVksQ0FBQ0M7Z0JBQ2pCLE1BQU1vQixjQUFjcEIsTUFBTUMsV0FBV3VCLHNCQUFzQjtnQkFDM0QsT0FBT2pFLEtBQUsyQyxRQUFRLENBQUM7b0JBQ25Ca0I7b0JBQ0FqQyxRQUFRLEdBQUdDLFNBQVMsQ0FBQyxFQUFFRCxRQUFRO29CQUMvQm1CLE1BQU1JO29CQUNOWixNQUFNckMsbUJBQW1CNkQsV0FBVztnQkFDdEM7WUFDRjtZQUVBLE1BQU1KLFNBQVMsTUFBTXZELFNBQ25CZSxNQUNBLHNCQUNBWCxXQUNBOEIsZ0JBQ0EsRUFBRSxFQUNGO2dCQUFDRTtZQUFTO1lBR1osT0FBTyxNQUFNakMsaUJBQ1hZLE1BQ0EsQ0FBQyw0QkFBNEIsRUFBRThCLFVBQVUsQ0FBQyxFQUFFcEIsU0FBUyxDQUFDLEVBQUVELE9BQU8sQ0FBQyxFQUFFdUIsY0FBYyxFQUNoRjtnQkFBQ3ZCO2dCQUFRQztnQkFBVW9CO2dCQUFXRTtZQUFZLEdBQzFDUSxRQUNBM0I7UUFFSixFQUFFLE9BQU1hLE9BQU87WUFDYjFCLEtBQUt3QixRQUFRLENBQUM7Z0JBQUNFO2dCQUFPTixNQUFNckMsbUJBQW1COEQsU0FBUztZQUFBO1lBQ3hELE1BQU1uQjtRQUNSO0lBQ0Y7SUFFQSxNQUFNcUIsa0JBQWtCLENBQUNUO1FBQ3ZCLE1BQU12QixRQUFRdUIsU0FBUztRQUN2QixJQUFJVSxXQUFXakMsTUFBTUcsUUFBUTtRQUU3QixJQUFHSCxTQUFTLE1BQU07WUFDaEIsTUFBTWtDLFdBQVc7Z0JBQUM7Z0JBQUk7Z0JBQUs7Z0JBQUs7Z0JBQUs7YUFBSTtZQUN6QyxNQUFNQyxZQUFZQyxLQUFLQyxLQUFLLENBQUMsR0FBR3JDLE9BQU8sQ0FBQ3NDLE1BQU0sR0FBRztZQUNqRCxJQUFJQyxhQUFhO1lBQ2pCLElBQUlDLGNBQWM7WUFFbEIsSUFBSSxJQUFJQyxZQUFZLEdBQUdBLGFBQWEsR0FBR0EsWUFBYTtnQkFDbERGLGFBQWFHLFdBQVcsQUFBQ1AsQ0FBQUEsY0FBYyxJQUFJbkMsUUFBUW9DLEtBQUtPLEdBQUcsQ0FBQyxNQUFNUixhQUFhbkMsS0FBSSxFQUFHNEMsV0FBVyxDQUFDSDtnQkFDbEdELGNBQWNELFdBQVdwQyxRQUFRO2dCQUNqQyxNQUFNMEMsb0JBQW9CLEdBQUdOLFlBQVksQ0FBQ08sT0FBTyxDQUFDLG1CQUFtQjtnQkFFckUsSUFBR0Qsa0JBQWtCUCxNQUFNLElBQUksR0FBRztvQkFDaEM7Z0JBQ0Y7WUFDRjtZQUVBLElBQUdDLGFBQWEsTUFBTSxHQUFHO2dCQUN2QkMsY0FBY0QsV0FBV1EsT0FBTyxDQUFDO1lBQ25DO1lBRUFkLFdBQVdPLGNBQWNOLFFBQVEsQ0FBQ0MsVUFBVTtRQUM5QztRQUVBLE9BQU9GO0lBQ1Q7SUFFQSw0QkFBNEI7SUFDNUIsT0FBTztRQUNMbkI7UUFDQXJCO1FBQ0EyQjtRQUNBSjtRQUNBSztRQUNBVTtRQUNBSjtRQUNBSztRQUNBMUM7UUFDQUU7SUFDRjtBQUNGLEVBQUUifQ==
@@ -35,3 +35,4 @@ export interface SSEActions {
35
35
  readonly updateSSEOptions: (options: SSEActionsOptions) => void;
36
36
  }
37
37
  export declare const createSSEActions: (flux: FluxFramework, options?: SSEActionsOptions) => SSEActions;
38
+ //# sourceMappingURL=sseActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sseActions.d.ts","sourceRoot":"","sources":["../../../src/actions/sseActions/sseActions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,IAAI,CAAC;IAC3F,QAAQ,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,IAAI,CAAC;IAC9F,QAAQ,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACjE;AAED,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,EACnB,UAAU,iBAAiB,KAC1B,UAwKF,CAAC"}