@nlabs/metropolisjs 0.1.1 → 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 (326) 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 +1343 -0
  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/factory-pattern-usage.ts +283 -0
  19. package/examples/i18n-import-examples.ts +86 -0
  20. package/examples/i18n-namespace-usage.ts +118 -0
  21. package/examples/i18next-singleton-demo.ts +187 -0
  22. package/examples/permission-system-usage.tsx +415 -0
  23. package/examples/project-details.tsx +397 -0
  24. package/examples/shared-i18n-usage.tsx +203 -0
  25. package/examples/signup-error-handling.ts +100 -0
  26. package/examples/translation-types.ts +86 -0
  27. package/examples/translation-usage.tsx +336 -0
  28. package/factoryPatternGuide.md +244 -0
  29. package/index.js +1 -0
  30. package/jest.config.mjs +28 -0
  31. package/lex.config.mjs +26 -0
  32. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
  33. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
  34. package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
  35. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
  36. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
  37. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
  38. package/lib/actions/appActions/appActions.d.ts +29 -0
  39. package/lib/actions/appActions/appActions.d.ts.map +1 -0
  40. package/lib/actions/appActions/appActions.js +159 -0
  41. package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
  42. package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
  43. package/lib/actions/connectionActions/connectionActions.js +131 -0
  44. package/lib/actions/contentActions/contentActions.d.ts +34 -0
  45. package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
  46. package/lib/actions/contentActions/contentActions.js +314 -0
  47. package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
  48. package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
  49. package/lib/actions/conversationActions/conversationActions.js +225 -0
  50. package/lib/actions/eventActions/eventActions.d.ts +65 -0
  51. package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
  52. package/lib/actions/eventActions/eventActions.js +436 -0
  53. package/lib/actions/groupActions/groupActions.d.ts +30 -0
  54. package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
  55. package/lib/actions/groupActions/groupActions.js +229 -0
  56. package/lib/actions/imageActions/imageActions.d.ts +62 -0
  57. package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
  58. package/lib/actions/imageActions/imageActions.js +593 -0
  59. package/lib/actions/index.d.ts +21 -0
  60. package/lib/actions/index.d.ts.map +1 -0
  61. package/lib/actions/index.js +22 -0
  62. package/lib/actions/locationActions/locationActions.d.ts +60 -0
  63. package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
  64. package/lib/actions/locationActions/locationActions.js +388 -0
  65. package/lib/actions/messageActions/messageActions.d.ts +38 -0
  66. package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
  67. package/lib/actions/messageActions/messageActions.js +235 -0
  68. package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
  69. package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
  70. package/lib/actions/permissionActions/permissionActions.js +330 -0
  71. package/lib/actions/personaActions/personaActions.d.ts +65 -0
  72. package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
  73. package/lib/actions/personaActions/personaActions.js +572 -0
  74. package/lib/actions/postActions/postActions.d.ts +36 -0
  75. package/lib/actions/postActions/postActions.d.ts.map +1 -0
  76. package/lib/actions/postActions/postActions.js +447 -0
  77. package/lib/actions/reactionActions/reactionActions.d.ts +38 -0
  78. package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
  79. package/lib/actions/reactionActions/reactionActions.js +413 -0
  80. package/lib/actions/sseActions/sseActions.d.ts +38 -0
  81. package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
  82. package/lib/actions/sseActions/sseActions.js +148 -0
  83. package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
  84. package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
  85. package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
  86. package/lib/actions/tagActions/tagActions.d.ts +37 -0
  87. package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
  88. package/lib/actions/tagActions/tagActions.js +347 -0
  89. package/lib/actions/translationActions/translationActions.d.ts +38 -0
  90. package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
  91. package/lib/actions/translationActions/translationActions.js +189 -0
  92. package/lib/actions/userActions/userActions.d.ts +78 -0
  93. package/lib/actions/userActions/userActions.d.ts.map +1 -0
  94. package/lib/actions/userActions/userActions.js +844 -0
  95. package/lib/actions/videoActions/videoActions.d.ts +41 -0
  96. package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
  97. package/lib/actions/videoActions/videoActions.js +532 -0
  98. package/lib/actions/websocketActions/websocketActions.d.ts +30 -0
  99. package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
  100. package/lib/actions/websocketActions/websocketActions.js +377 -0
  101. package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
  102. package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
  103. package/lib/adapters/appAdapter/appAdapter.js +90 -0
  104. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +21 -0
  105. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
  106. package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -0
  107. package/lib/adapters/contentAdapter/contentAdapter.d.ts +32 -0
  108. package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
  109. package/lib/adapters/contentAdapter/contentAdapter.js +107 -0
  110. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +24 -0
  111. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
  112. package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -0
  113. package/lib/adapters/eventAdapter/eventAdapter.d.ts +46 -0
  114. package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
  115. package/lib/adapters/eventAdapter/eventAdapter.js +162 -0
  116. package/lib/adapters/fileAdapter/fileAdapter.d.ts +30 -0
  117. package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
  118. package/lib/adapters/fileAdapter/fileAdapter.js +118 -0
  119. package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
  120. package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
  121. package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
  122. package/lib/adapters/imageAdapter/imageAdapter.d.ts +38 -0
  123. package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
  124. package/lib/adapters/imageAdapter/imageAdapter.js +134 -0
  125. package/lib/adapters/index.d.ts +34 -0
  126. package/lib/adapters/index.d.ts.map +1 -0
  127. package/lib/adapters/index.js +19 -0
  128. package/lib/adapters/locationAdapter/locationAdapter.d.ts +28 -0
  129. package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
  130. package/lib/adapters/locationAdapter/locationAdapter.js +95 -0
  131. package/lib/adapters/messageAdapter/messageAdapter.d.ts +31 -0
  132. package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
  133. package/lib/adapters/messageAdapter/messageAdapter.js +82 -0
  134. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
  135. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
  136. package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
  137. package/lib/adapters/personaAdapter/personaAdapter.d.ts +44 -0
  138. package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
  139. package/lib/adapters/personaAdapter/personaAdapter.js +161 -0
  140. package/lib/adapters/postAdapter/postAdapter.d.ts +33 -0
  141. package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
  142. package/lib/adapters/postAdapter/postAdapter.js +115 -0
  143. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +23 -0
  144. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
  145. package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -0
  146. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +17 -0
  147. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
  148. package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -0
  149. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +24 -0
  150. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
  151. package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -0
  152. package/lib/adapters/tagAdapter/tagAdapter.d.ts +21 -0
  153. package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
  154. package/lib/adapters/tagAdapter/tagAdapter.js +98 -0
  155. package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
  156. package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
  157. package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
  158. package/lib/adapters/userAdapter/userAdapter.d.ts +67 -0
  159. package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
  160. package/lib/adapters/userAdapter/userAdapter.js +302 -0
  161. package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
  162. package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
  163. package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
  164. package/lib/config/index.d.ts +44 -0
  165. package/lib/config/index.d.ts.map +1 -0
  166. package/lib/config/index.js +97 -0
  167. package/lib/constants/Collections.d.ts +44 -0
  168. package/lib/constants/Collections.d.ts.map +1 -0
  169. package/lib/constants/Collections.js +40 -0
  170. package/lib/constants/MetropolisConstants.d.ts +15 -0
  171. package/lib/constants/MetropolisConstants.d.ts.map +1 -0
  172. package/lib/constants/MetropolisConstants.js +15 -0
  173. package/lib/graphql/message.d.ts +3 -0
  174. package/lib/graphql/message.d.ts.map +1 -0
  175. package/lib/graphql/message.js +20 -0
  176. package/lib/graphql/notification.d.ts +3 -0
  177. package/lib/graphql/notification.d.ts.map +1 -0
  178. package/lib/graphql/notification.js +20 -0
  179. package/lib/graphql/session.d.ts +2 -0
  180. package/lib/graphql/session.d.ts.map +1 -0
  181. package/lib/graphql/session.js +17 -0
  182. package/lib/index.d.ts +52 -0
  183. package/lib/index.d.ts.map +1 -0
  184. package/lib/index.js +248 -0
  185. package/lib/stores/appStore.d.ts +23 -0
  186. package/lib/stores/appStore.d.ts.map +1 -0
  187. package/lib/stores/appStore.js +23 -0
  188. package/lib/stores/contentStore.d.ts +36 -0
  189. package/lib/stores/contentStore.d.ts.map +1 -0
  190. package/lib/stores/contentStore.js +139 -0
  191. package/lib/stores/conversationStore.d.ts +38 -0
  192. package/lib/stores/conversationStore.d.ts.map +1 -0
  193. package/lib/stores/conversationStore.js +117 -0
  194. package/lib/stores/eventStore.d.ts +37 -0
  195. package/lib/stores/eventStore.d.ts.map +1 -0
  196. package/lib/stores/eventStore.js +47 -0
  197. package/lib/stores/groupStore.d.ts +37 -0
  198. package/lib/stores/groupStore.d.ts.map +1 -0
  199. package/lib/stores/groupStore.js +68 -0
  200. package/lib/stores/imageStore.d.ts +40 -0
  201. package/lib/stores/imageStore.d.ts.map +1 -0
  202. package/lib/stores/imageStore.js +53 -0
  203. package/lib/stores/index.d.ts +24 -0
  204. package/lib/stores/index.d.ts.map +1 -0
  205. package/lib/stores/index.js +24 -0
  206. package/lib/stores/locationStore.d.ts +34 -0
  207. package/lib/stores/locationStore.d.ts.map +1 -0
  208. package/lib/stores/locationStore.js +42 -0
  209. package/lib/stores/messageStore.d.ts +51 -0
  210. package/lib/stores/messageStore.d.ts.map +1 -0
  211. package/lib/stores/messageStore.js +137 -0
  212. package/lib/stores/notificationStore.d.ts +33 -0
  213. package/lib/stores/notificationStore.d.ts.map +1 -0
  214. package/lib/stores/notificationStore.js +55 -0
  215. package/lib/stores/permissionStore.d.ts +37 -0
  216. package/lib/stores/permissionStore.d.ts.map +1 -0
  217. package/lib/stores/permissionStore.js +117 -0
  218. package/lib/stores/personaStore.d.ts +26 -0
  219. package/lib/stores/personaStore.d.ts.map +1 -0
  220. package/lib/stores/personaStore.js +118 -0
  221. package/lib/stores/postStore.d.ts +34 -0
  222. package/lib/stores/postStore.d.ts.map +1 -0
  223. package/lib/stores/postStore.js +53 -0
  224. package/lib/stores/reactionStore.d.ts +25 -0
  225. package/lib/stores/reactionStore.d.ts.map +1 -0
  226. package/lib/stores/reactionStore.js +28 -0
  227. package/lib/stores/subscriptionStore.d.ts +41 -0
  228. package/lib/stores/subscriptionStore.d.ts.map +1 -0
  229. package/lib/stores/subscriptionStore.js +85 -0
  230. package/lib/stores/tagStore.d.ts +34 -0
  231. package/lib/stores/tagStore.d.ts.map +1 -0
  232. package/lib/stores/tagStore.js +87 -0
  233. package/lib/stores/translationStore.d.ts +42 -0
  234. package/lib/stores/translationStore.d.ts.map +1 -0
  235. package/lib/stores/translationStore.js +122 -0
  236. package/lib/stores/userStore.d.ts +74 -0
  237. package/lib/stores/userStore.d.ts.map +1 -0
  238. package/lib/stores/userStore.js +319 -0
  239. package/lib/stores/videoStore.d.ts +39 -0
  240. package/lib/stores/videoStore.d.ts.map +1 -0
  241. package/lib/stores/videoStore.js +132 -0
  242. package/lib/stores/websocketStore.d.ts +24 -0
  243. package/lib/stores/websocketStore.d.ts.map +1 -0
  244. package/lib/stores/websocketStore.js +51 -0
  245. package/lib/types/apps.types.d.ts +17 -0
  246. package/lib/types/apps.types.d.ts.map +1 -0
  247. package/lib/types/apps.types.js +6 -0
  248. package/lib/types/common.types.d.ts +31 -0
  249. package/lib/types/common.types.d.ts.map +1 -0
  250. package/lib/types/common.types.js +6 -0
  251. package/lib/types/conversations.types.d.ts +17 -0
  252. package/lib/types/conversations.types.d.ts.map +1 -0
  253. package/lib/types/conversations.types.js +6 -0
  254. package/lib/types/edges.types.d.ts +38 -0
  255. package/lib/types/edges.types.d.ts.map +1 -0
  256. package/lib/types/edges.types.js +6 -0
  257. package/lib/types/groups.types.d.ts +19 -0
  258. package/lib/types/groups.types.d.ts.map +1 -0
  259. package/lib/types/groups.types.js +6 -0
  260. package/lib/types/index.d.ts +12 -0
  261. package/lib/types/index.d.ts.map +1 -0
  262. package/lib/types/index.js +12 -0
  263. package/lib/types/subscriptions.types.d.ts +32 -0
  264. package/lib/types/subscriptions.types.d.ts.map +1 -0
  265. package/lib/types/subscriptions.types.js +6 -0
  266. package/lib/types/videos.types.d.ts +61 -0
  267. package/lib/types/videos.types.d.ts.map +1 -0
  268. package/lib/types/videos.types.js +6 -0
  269. package/lib/utils/MetropolisProvider.d.ts +58 -0
  270. package/lib/utils/MetropolisProvider.d.ts.map +1 -0
  271. package/lib/utils/MetropolisProvider.js +31 -0
  272. package/lib/utils/actionFactory.d.ts +24 -0
  273. package/lib/utils/actionFactory.d.ts.map +1 -0
  274. package/lib/utils/actionFactory.js +95 -0
  275. package/lib/utils/api.d.ts +44 -0
  276. package/lib/utils/api.d.ts.map +1 -0
  277. package/lib/utils/api.js +253 -0
  278. package/lib/utils/app.d.ts +7 -0
  279. package/lib/utils/app.d.ts.map +1 -0
  280. package/lib/utils/app.js +15 -0
  281. package/lib/utils/baseActionFactory.d.ts +16 -0
  282. package/lib/utils/baseActionFactory.d.ts.map +1 -0
  283. package/lib/utils/baseActionFactory.js +72 -0
  284. package/lib/utils/configUtils.d.ts +11 -0
  285. package/lib/utils/configUtils.d.ts.map +1 -0
  286. package/lib/utils/configUtils.js +20 -0
  287. package/lib/utils/dateUtils.d.ts +3 -0
  288. package/lib/utils/dateUtils.d.ts.map +1 -0
  289. package/lib/utils/dateUtils.js +11 -0
  290. package/lib/utils/file.d.ts +3 -0
  291. package/lib/utils/file.d.ts.map +1 -0
  292. package/lib/utils/file.js +156 -0
  293. package/lib/utils/i18n.d.ts +7 -0
  294. package/lib/utils/i18n.d.ts.map +1 -0
  295. package/lib/utils/i18n.js +96 -0
  296. package/lib/utils/index.d.ts +20 -0
  297. package/lib/utils/index.d.ts.map +1 -0
  298. package/lib/utils/index.js +26 -0
  299. package/lib/utils/location.d.ts +10 -0
  300. package/lib/utils/location.d.ts.map +1 -0
  301. package/lib/utils/location.js +82 -0
  302. package/lib/utils/permissionUtils.d.ts +22 -0
  303. package/lib/utils/permissionUtils.d.ts.map +1 -0
  304. package/lib/utils/permissionUtils.js +72 -0
  305. package/lib/utils/requestCache.d.ts +8 -0
  306. package/lib/utils/requestCache.d.ts.map +1 -0
  307. package/lib/utils/requestCache.js +53 -0
  308. package/lib/utils/session.d.ts +14 -0
  309. package/lib/utils/session.d.ts.map +1 -0
  310. package/lib/utils/session.js +107 -0
  311. package/lib/utils/useConversationTyping.d.ts +26 -0
  312. package/lib/utils/useConversationTyping.d.ts.map +1 -0
  313. package/lib/utils/useConversationTyping.js +117 -0
  314. package/lib/utils/useMetropolis.d.ts +67 -0
  315. package/lib/utils/useMetropolis.d.ts.map +1 -0
  316. package/lib/utils/useMetropolis.js +311 -0
  317. package/lib/utils/useTranslations.d.ts +16 -0
  318. package/lib/utils/useTranslations.d.ts.map +1 -0
  319. package/lib/utils/useTranslations.js +105 -0
  320. package/lib/utils/validatorFactory.d.ts +49 -0
  321. package/lib/utils/validatorFactory.d.ts.map +1 -0
  322. package/lib/utils/validatorFactory.js +95 -0
  323. package/package.json +75 -28
  324. package/temp_signin.ts +73 -0
  325. package/tsconfig.lint.json +25 -0
  326. package/tsconfig.test.json +14 -0
@@ -0,0 +1,95 @@
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 { createContentActions } from '../actions/contentActions/contentActions.js';
5
+ import { createEventActions } from '../actions/eventActions/eventActions.js';
6
+ import { createGroupActions } from '../actions/groupActions/groupActions.js';
7
+ import { createImageActions } from '../actions/imageActions/imageActions.js';
8
+ import { createLocationActions } from '../actions/locationActions/locationActions.js';
9
+ import { createMessageActions } from '../actions/messageActions/messageActions.js';
10
+ import { createPermissionActions } from '../actions/permissionActions/permissionActions.js';
11
+ import { createPostActions } from '../actions/postActions/postActions.js';
12
+ import { createPersonaActions } from '../actions/personaActions/personaActions.js';
13
+ import { createReactionActions } from '../actions/reactionActions/reactionActions.js';
14
+ import { createSSEActions } from '../actions/sseActions/sseActions.js';
15
+ import { createSubscriptionActions } from '../actions/subscriptionActions/subscriptionActions.js';
16
+ import { createTagActions } from '../actions/tagActions/tagActions.js';
17
+ import { createTranslationActions } from '../actions/translationActions/translationActions.js';
18
+ import { createUserActions } from '../actions/userActions/userActions.js';
19
+ import { createVideoActions } from '../actions/videoActions/videoActions.js';
20
+ import { createWebsocketActions } from '../actions/websocketActions/websocketActions.js';
21
+ const websocketActionCache = new WeakMap();
22
+ export const createAction = (actionType, flux, options)=>{
23
+ switch(actionType){
24
+ case 'content':
25
+ return createContentActions(flux, options);
26
+ case 'event':
27
+ return createEventActions(flux, options);
28
+ case 'group':
29
+ return createGroupActions(flux, options);
30
+ case 'image':
31
+ return createImageActions(flux, options);
32
+ case 'location':
33
+ return createLocationActions(flux, options);
34
+ case 'message':
35
+ return createMessageActions(flux, options);
36
+ case 'permission':
37
+ return createPermissionActions(flux, options);
38
+ case 'post':
39
+ return createPostActions(flux, options);
40
+ case 'persona':
41
+ return createPersonaActions(flux, options);
42
+ case 'reaction':
43
+ return createReactionActions(flux, options);
44
+ case 'sse':
45
+ return createSSEActions(flux, options);
46
+ case 'subscription':
47
+ return createSubscriptionActions(flux);
48
+ case 'tag':
49
+ return createTagActions(flux, options);
50
+ case 'translation':
51
+ return createTranslationActions(flux, options);
52
+ case 'user':
53
+ return createUserActions(flux, options);
54
+ case 'video':
55
+ return createVideoActions(flux, options);
56
+ case 'websocket':
57
+ if (!websocketActionCache.has(flux)) {
58
+ websocketActionCache.set(flux, createWebsocketActions(flux));
59
+ }
60
+ return websocketActionCache.get(flux);
61
+ default:
62
+ throw new Error(`Unknown action type: ${actionType}`);
63
+ }
64
+ };
65
+ export const createActions = (actionTypes, flux, options)=>{
66
+ const actions = {};
67
+ actionTypes.forEach((type)=>{
68
+ actions[type] = createAction(type, flux, options?.[type]);
69
+ });
70
+ return actions;
71
+ };
72
+ export const createAllActions = (flux, options)=>{
73
+ const allActionTypes = [
74
+ 'content',
75
+ 'event',
76
+ 'group',
77
+ 'image',
78
+ 'location',
79
+ 'message',
80
+ 'permission',
81
+ 'post',
82
+ 'persona',
83
+ 'reaction',
84
+ 'sse',
85
+ 'subscription',
86
+ 'tag',
87
+ 'translation',
88
+ 'user',
89
+ 'video',
90
+ 'websocket'
91
+ ];
92
+ return createActions(allActionTypes, flux, options);
93
+ };
94
+
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYWN0aW9uRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVDb250ZW50QWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9jb250ZW50QWN0aW9ucy9jb250ZW50QWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZUV2ZW50QWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9ldmVudEFjdGlvbnMvZXZlbnRBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlR3JvdXBBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL2dyb3VwQWN0aW9ucy9ncm91cEFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVJbWFnZUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvaW1hZ2VBY3Rpb25zL2ltYWdlQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZUxvY2F0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9sb2NhdGlvbkFjdGlvbnMvbG9jYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlTWVzc2FnZUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvbWVzc2FnZUFjdGlvbnMvbWVzc2FnZUFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVQZXJtaXNzaW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9wZXJtaXNzaW9uQWN0aW9ucy9wZXJtaXNzaW9uQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVBvc3RBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL3Bvc3RBY3Rpb25zL3Bvc3RBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlUGVyc29uYUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVSZWFjdGlvbkFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcmVhY3Rpb25BY3Rpb25zL3JlYWN0aW9uQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNTRUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvc3NlQWN0aW9ucy9zc2VBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Vic2NyaXB0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9zdWJzY3JpcHRpb25BY3Rpb25zL3N1YnNjcmlwdGlvbkFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVUYWdBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL3RhZ0FjdGlvbnMvdGFnQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVRyYW5zbGF0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlVXNlckFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdXNlckFjdGlvbnMvdXNlckFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVWaWRlb0FjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdmlkZW9BY3Rpb25zL3ZpZGVvQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVdlYnNvY2tldEFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvd2Vic29ja2V0QWN0aW9ucy93ZWJzb2NrZXRBY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7Q29udGVudEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2NvbnRlbnRBY3Rpb25zL2NvbnRlbnRBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtFdmVudEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2V2ZW50QWN0aW9ucy9ldmVudEFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvZ3JvdXBBY3Rpb25zL2dyb3VwQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9pbWFnZUFjdGlvbnMvaW1hZ2VBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtMb2NhdGlvbkFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2xvY2F0aW9uQWN0aW9ucy9sb2NhdGlvbkFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge01lc3NhZ2VBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9tZXNzYWdlQWN0aW9ucy9tZXNzYWdlQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7UGVybWlzc2lvbkFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL3Blcm1pc3Npb25BY3Rpb25zL3Blcm1pc3Npb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtQb3N0QWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcG9zdEFjdGlvbnMvcG9zdEFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1BlcnNvbmFBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9wZXJzb25hQWN0aW9ucy9wZXJzb25hQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7UmVhY3Rpb25BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9yZWFjdGlvbkFjdGlvbnMvcmVhY3Rpb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtTU0VBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9zc2VBY3Rpb25zL3NzZUFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ0FjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL3RhZ0FjdGlvbnMvdGFnQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7VHJhbnNsYXRpb25BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdXNlckFjdGlvbnMvdXNlckFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1ZpZGVvQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdmlkZW9BY3Rpb25zL3ZpZGVvQWN0aW9ucy5qcyc7XG5cbmNvbnN0IHdlYnNvY2tldEFjdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8Rmx1eEZyYW1ld29yaywgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz4+KCk7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblR5cGUgPVxuICB8ICdjb250ZW50J1xuICB8ICdldmVudCdcbiAgfCAnZ3JvdXAnXG4gIHwgJ2ltYWdlJ1xuICB8ICdsb2NhdGlvbidcbiAgfCAnbWVzc2FnZSdcbiAgfCAncGVybWlzc2lvbidcbiAgfCAncG9zdCdcbiAgfCAncGVyc29uYSdcbiAgfCAncmVhY3Rpb24nXG4gIHwgJ3NzZSdcbiAgfCAnc3Vic2NyaXB0aW9uJ1xuICB8ICd0YWcnXG4gIHwgJ3RyYW5zbGF0aW9uJ1xuICB8ICd1c2VyJ1xuICB8ICd2aWRlbydcbiAgfCAnd2Vic29ja2V0JztcblxuZXhwb3J0IHR5cGUgQWN0aW9uT3B0aW9ucyA9XG4gIHwgQ29udGVudEFjdGlvbnNPcHRpb25zXG4gIHwgRXZlbnRBY3Rpb25zT3B0aW9uc1xuICB8IEdyb3VwQWN0aW9uc09wdGlvbnNcbiAgfCBJbWFnZUFjdGlvbnNPcHRpb25zXG4gIHwgTG9jYXRpb25BY3Rpb25zT3B0aW9uc1xuICB8IE1lc3NhZ2VBY3Rpb25zT3B0aW9uc1xuICB8IFBlcm1pc3Npb25BY3Rpb25zT3B0aW9uc1xuICB8IFBvc3RBY3Rpb25zT3B0aW9uc1xuICB8IFBlcnNvbmFBY3Rpb25zT3B0aW9uc1xuICB8IFJlYWN0aW9uQWN0aW9uc09wdGlvbnNcbiAgfCBTU0VBY3Rpb25zT3B0aW9uc1xuICB8IFRhZ0FjdGlvbnNPcHRpb25zXG4gIHwgVHJhbnNsYXRpb25BY3Rpb25zT3B0aW9uc1xuICB8IFVzZXJBY3Rpb25zT3B0aW9uc1xuICB8IFZpZGVvQWN0aW9uc09wdGlvbnNcbiAgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb24gPSA8VCBleHRlbmRzIEFjdGlvblR5cGU+KFxuICBhY3Rpb25UeXBlOiBULFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogQWN0aW9uT3B0aW9uc1xuKSA9PiB7XG4gIHN3aXRjaChhY3Rpb25UeXBlKSB7XG4gICAgY2FzZSAnY29udGVudCc6XG4gICAgICByZXR1cm4gY3JlYXRlQ29udGVudEFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBDb250ZW50QWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnZXZlbnQnOlxuICAgICAgcmV0dXJuIGNyZWF0ZUV2ZW50QWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIEV2ZW50QWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgcmV0dXJuIGNyZWF0ZUdyb3VwQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIEdyb3VwQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIEltYWdlQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnbG9jYXRpb24nOlxuICAgICAgcmV0dXJuIGNyZWF0ZUxvY2F0aW9uQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIExvY2F0aW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBNZXNzYWdlQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncGVybWlzc2lvbic6XG4gICAgICByZXR1cm4gY3JlYXRlUGVybWlzc2lvbkFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBQZXJtaXNzaW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncG9zdCc6XG4gICAgICByZXR1cm4gY3JlYXRlUG9zdEFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBQb3N0QWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncGVyc29uYSc6XG4gICAgICByZXR1cm4gY3JlYXRlUGVyc29uYUFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBQZXJzb25hQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncmVhY3Rpb24nOlxuICAgICAgcmV0dXJuIGNyZWF0ZVJlYWN0aW9uQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFJlYWN0aW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnc3NlJzpcbiAgICAgIHJldHVybiBjcmVhdGVTU0VBY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgU1NFQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnc3Vic2NyaXB0aW9uJzpcbiAgICAgIHJldHVybiBjcmVhdGVTdWJzY3JpcHRpb25BY3Rpb25zKGZsdXgpO1xuXG4gICAgY2FzZSAndGFnJzpcbiAgICAgIHJldHVybiBjcmVhdGVUYWdBY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgVGFnQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAndHJhbnNsYXRpb24nOlxuICAgICAgcmV0dXJuIGNyZWF0ZVRyYW5zbGF0aW9uQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFRyYW5zbGF0aW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gY3JlYXRlVXNlckFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBVc2VyQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgICAgcmV0dXJuIGNyZWF0ZVZpZGVvQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFZpZGVvQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnd2Vic29ja2V0JzpcbiAgICAgIGlmKCF3ZWJzb2NrZXRBY3Rpb25DYWNoZS5oYXMoZmx1eCkpIHtcbiAgICAgICAgd2Vic29ja2V0QWN0aW9uQ2FjaGUuc2V0KGZsdXgsIGNyZWF0ZVdlYnNvY2tldEFjdGlvbnMoZmx1eCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2Vic29ja2V0QWN0aW9uQ2FjaGUuZ2V0KGZsdXgpIGFzIFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVdlYnNvY2tldEFjdGlvbnM+O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhY3Rpb24gdHlwZTogJHthY3Rpb25UeXBlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQWN0aW9ucyA9IChcbiAgYWN0aW9uVHlwZXM6IEFjdGlvblR5cGVbXSxcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFBhcnRpYWw8UmVjb3JkPEFjdGlvblR5cGUsIEFjdGlvbk9wdGlvbnM+PlxuKTogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uUmV0dXJuVHlwZTxBY3Rpb25UeXBlPj4+ID0+IHtcbiAgY29uc3QgYWN0aW9uczogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uUmV0dXJuVHlwZTxBY3Rpb25UeXBlPj4+ID0ge307XG5cbiAgYWN0aW9uVHlwZXMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgIGFjdGlvbnNbdHlwZV0gPSBjcmVhdGVBY3Rpb24odHlwZSwgZmx1eCwgb3B0aW9ucz8uW3R5cGVdKSBhcyBBY3Rpb25SZXR1cm5UeXBlPEFjdGlvblR5cGU+O1xuICB9KTtcblxuICByZXR1cm4gYWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGxBY3Rpb25zID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uT3B0aW9ucz4+XG4pID0+IHtcbiAgY29uc3QgYWxsQWN0aW9uVHlwZXM6IEFjdGlvblR5cGVbXSA9IFtcbiAgICAnY29udGVudCcsXG4gICAgJ2V2ZW50JyxcbiAgICAnZ3JvdXAnLFxuICAgICdpbWFnZScsXG4gICAgJ2xvY2F0aW9uJyxcbiAgICAnbWVzc2FnZScsXG4gICAgJ3Blcm1pc3Npb24nLFxuICAgICdwb3N0JyxcbiAgICAncGVyc29uYScsXG4gICAgJ3JlYWN0aW9uJyxcbiAgICAnc3NlJyxcbiAgICAnc3Vic2NyaXB0aW9uJyxcbiAgICAndGFnJyxcbiAgICAndHJhbnNsYXRpb24nLFxuICAgICd1c2VyJyxcbiAgICAndmlkZW8nLFxuICAgICd3ZWJzb2NrZXQnXG4gIF07XG5cbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbnMoYWxsQWN0aW9uVHlwZXMsIGZsdXgsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uVHlwZXMgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBbGxBY3Rpb25zPjtcbmV4cG9ydCB0eXBlIEFjdGlvblJldHVyblR5cGU8VCBleHRlbmRzIEFjdGlvblR5cGU+ID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQWN0aW9uPFQ+PjtcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb250ZW50QWN0aW9ucyIsImNyZWF0ZUV2ZW50QWN0aW9ucyIsImNyZWF0ZUdyb3VwQWN0aW9ucyIsImNyZWF0ZUltYWdlQWN0aW9ucyIsImNyZWF0ZUxvY2F0aW9uQWN0aW9ucyIsImNyZWF0ZU1lc3NhZ2VBY3Rpb25zIiwiY3JlYXRlUGVybWlzc2lvbkFjdGlvbnMiLCJjcmVhdGVQb3N0QWN0aW9ucyIsImNyZWF0ZVBlcnNvbmFBY3Rpb25zIiwiY3JlYXRlUmVhY3Rpb25BY3Rpb25zIiwiY3JlYXRlU1NFQWN0aW9ucyIsImNyZWF0ZVN1YnNjcmlwdGlvbkFjdGlvbnMiLCJjcmVhdGVUYWdBY3Rpb25zIiwiY3JlYXRlVHJhbnNsYXRpb25BY3Rpb25zIiwiY3JlYXRlVXNlckFjdGlvbnMiLCJjcmVhdGVWaWRlb0FjdGlvbnMiLCJjcmVhdGVXZWJzb2NrZXRBY3Rpb25zIiwid2Vic29ja2V0QWN0aW9uQ2FjaGUiLCJXZWFrTWFwIiwiY3JlYXRlQWN0aW9uIiwiYWN0aW9uVHlwZSIsImZsdXgiLCJvcHRpb25zIiwiaGFzIiwic2V0IiwiZ2V0IiwiRXJyb3IiLCJjcmVhdGVBY3Rpb25zIiwiYWN0aW9uVHlwZXMiLCJhY3Rpb25zIiwiZm9yRWFjaCIsInR5cGUiLCJjcmVhdGVBbGxBY3Rpb25zIiwiYWxsQWN0aW9uVHlwZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLG9CQUFvQixRQUFPLDhDQUE4QztBQUNqRixTQUFRQyxrQkFBa0IsUUFBTywwQ0FBMEM7QUFDM0UsU0FBUUMsa0JBQWtCLFFBQU8sMENBQTBDO0FBQzNFLFNBQVFDLGtCQUFrQixRQUFPLDBDQUEwQztBQUMzRSxTQUFRQyxxQkFBcUIsUUFBTyxnREFBZ0Q7QUFDcEYsU0FBUUMsb0JBQW9CLFFBQU8sOENBQThDO0FBQ2pGLFNBQVFDLHVCQUF1QixRQUFPLG9EQUFvRDtBQUMxRixTQUFRQyxpQkFBaUIsUUFBTyx3Q0FBd0M7QUFDeEUsU0FBUUMsb0JBQW9CLFFBQU8sOENBQThDO0FBQ2pGLFNBQVFDLHFCQUFxQixRQUFPLGdEQUFnRDtBQUNwRixTQUFRQyxnQkFBZ0IsUUFBTyxzQ0FBc0M7QUFDckUsU0FBUUMseUJBQXlCLFFBQU8sd0RBQXdEO0FBQ2hHLFNBQVFDLGdCQUFnQixRQUFPLHNDQUFzQztBQUNyRSxTQUFRQyx3QkFBd0IsUUFBTyxzREFBc0Q7QUFDN0YsU0FBUUMsaUJBQWlCLFFBQU8sd0NBQXdDO0FBQ3hFLFNBQVFDLGtCQUFrQixRQUFPLDBDQUEwQztBQUMzRSxTQUFRQyxzQkFBc0IsUUFBTyxrREFBa0Q7QUFtQnZGLE1BQU1DLHVCQUF1QixJQUFJQztBQXVDakMsT0FBTyxNQUFNQyxlQUFlLENBQzFCQyxZQUNBQyxNQUNBQztJQUVBLE9BQU9GO1FBQ0wsS0FBSztZQUNILE9BQU9wQixxQkFBcUJxQixNQUFNQztRQUVwQyxLQUFLO1lBQ0gsT0FBT3JCLG1CQUFtQm9CLE1BQU1DO1FBRWxDLEtBQUs7WUFDSCxPQUFPcEIsbUJBQW1CbUIsTUFBTUM7UUFFbEMsS0FBSztZQUNILE9BQU9uQixtQkFBbUJrQixNQUFNQztRQUVsQyxLQUFLO1lBQ0gsT0FBT2xCLHNCQUFzQmlCLE1BQU1DO1FBRXJDLEtBQUs7WUFDSCxPQUFPakIscUJBQXFCZ0IsTUFBTUM7UUFFcEMsS0FBSztZQUNILE9BQU9oQix3QkFBd0JlLE1BQU1DO1FBRXZDLEtBQUs7WUFDSCxPQUFPZixrQkFBa0JjLE1BQU1DO1FBRWpDLEtBQUs7WUFDSCxPQUFPZCxxQkFBcUJhLE1BQU1DO1FBRXBDLEtBQUs7WUFDSCxPQUFPYixzQkFBc0JZLE1BQU1DO1FBRXJDLEtBQUs7WUFDSCxPQUFPWixpQkFBaUJXLE1BQU1DO1FBRWhDLEtBQUs7WUFDSCxPQUFPWCwwQkFBMEJVO1FBRW5DLEtBQUs7WUFDSCxPQUFPVCxpQkFBaUJTLE1BQU1DO1FBRWhDLEtBQUs7WUFDSCxPQUFPVCx5QkFBeUJRLE1BQU1DO1FBRXhDLEtBQUs7WUFDSCxPQUFPUixrQkFBa0JPLE1BQU1DO1FBRWpDLEtBQUs7WUFDSCxPQUFPUCxtQkFBbUJNLE1BQU1DO1FBRWxDLEtBQUs7WUFDSCxJQUFHLENBQUNMLHFCQUFxQk0sR0FBRyxDQUFDRixPQUFPO2dCQUNsQ0oscUJBQXFCTyxHQUFHLENBQUNILE1BQU1MLHVCQUF1Qks7WUFDeEQ7WUFFQSxPQUFPSixxQkFBcUJRLEdBQUcsQ0FBQ0o7UUFFbEM7WUFDRSxNQUFNLElBQUlLLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRU4sWUFBWTtJQUN4RDtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1PLGdCQUFnQixDQUMzQkMsYUFDQVAsTUFDQUM7SUFFQSxNQUFNTyxVQUFxRSxDQUFDO0lBRTVFRCxZQUFZRSxPQUFPLENBQUMsQ0FBQ0M7UUFDbkJGLE9BQU8sQ0FBQ0UsS0FBSyxHQUFHWixhQUFhWSxNQUFNVixNQUFNQyxTQUFTLENBQUNTLEtBQUs7SUFDMUQ7SUFFQSxPQUFPRjtBQUNULEVBQUU7QUFFRixPQUFPLE1BQU1HLG1CQUFtQixDQUM5QlgsTUFDQUM7SUFFQSxNQUFNVyxpQkFBK0I7UUFDbkM7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBRUQsT0FBT04sY0FBY00sZ0JBQWdCWixNQUFNQztBQUM3QyxFQUFFIn0=
@@ -0,0 +1,44 @@
1
+ import type { FluxAction, FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { HunterOptionsType, HunterQueryType } from '@nlabs/rip-hunter';
3
+ export interface ApiOptions {
4
+ readonly onSuccess?: (data: any) => Promise<FluxAction>;
5
+ readonly variables?: Record<string, unknown>;
6
+ }
7
+ export type ReaktorDbCollection = 'apps' | 'connections' | 'contents' | 'conversations' | 'events' | 'files' | 'groups' | 'images' | 'locations' | 'messages' | 'notifications' | 'payments' | 'permissions' | 'posts' | 'personas' | 'reactions' | 'subscriptions' | 'tags' | 'translations' | 'users' | 'videos';
8
+ export interface ApiQueryVariableType {
9
+ readonly type: string;
10
+ readonly value: unknown;
11
+ }
12
+ export interface ApiQueryVariables {
13
+ readonly [key: string]: ApiQueryVariableType;
14
+ }
15
+ export interface ApiResultsType {
16
+ readonly [key: string]: unknown;
17
+ }
18
+ export interface RetryType {
19
+ readonly query: HunterQueryType | HunterQueryType[];
20
+ readonly responseMethod: (results: ApiResultsType) => void;
21
+ }
22
+ export interface SessionType {
23
+ readonly expires?: number;
24
+ readonly issued?: number;
25
+ readonly token?: string;
26
+ readonly userId?: string;
27
+ readonly username?: string;
28
+ }
29
+ export declare const getGraphql: (flux: FluxFramework, url: string, authenticate: boolean, query: HunterQueryType | HunterQueryType[], options: ApiOptions) => Promise<ApiResultsType>;
30
+ export declare const createQuery: (name: string, dataType: ReaktorDbCollection, variables?: ApiQueryVariables, returnProperties?: string[], type?: string) => {
31
+ query: string;
32
+ variables: Record<string, unknown>;
33
+ };
34
+ export declare const createMutation: (name: string, dataType: ReaktorDbCollection, variables?: ApiQueryVariables, returnProperties?: string[]) => {
35
+ query: string;
36
+ variables: Record<string, unknown>;
37
+ };
38
+ export declare const appQuery: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
39
+ export declare const appMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
40
+ export declare const publicQuery: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
41
+ export declare const publicMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
42
+ export declare const uploadImage: (flux: FluxFramework, image: any, options?: HunterOptionsType) => Promise<ApiResultsType>;
43
+ export declare const refreshSession: (flux: FluxFramework, token?: string, expires?: number) => Promise<FluxAction | null>;
44
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,253 @@
1
+ import { ApiError, graphqlQuery, post } from '@nlabs/rip-hunter';
2
+ import { camelCase, isEmpty, upperFirst } from '@nlabs/utils';
3
+ import { APP_CONSTANTS } from '../stores/appStore.js';
4
+ import { USER_CONSTANTS } from '../stores/userStore.js';
5
+ import { getConfigFromFlux } from './configUtils.js';
6
+ import { clearPersistedSession, getRefreshWindowMinutes, hydrateSessionFromStorage, parseJwtExpiryMs, storeSession } from './session.js';
7
+ const DEFAULT_REFRESH_WINDOW_MINUTES = 5;
8
+ const DEFAULT_SESSION_MAX_MINUTES = 15;
9
+ const getMinutesUntil = (expiresAt)=>Math.round((expiresAt - Date.now()) / (1000 * 60));
10
+ const clearInvalidSessionState = async (flux)=>{
11
+ await clearPersistedSession(flux);
12
+ await flux.clearAppData();
13
+ await flux.dispatch({
14
+ session: {},
15
+ type: USER_CONSTANTS.SIGN_OUT_SUCCESS
16
+ });
17
+ };
18
+ export const getGraphql = async (flux, url, authenticate, query, options)=>{
19
+ try {
20
+ const { onSuccess } = options;
21
+ const retry = {
22
+ query,
23
+ responseMethod: onSuccess || (()=>{})
24
+ };
25
+ const networkType = flux.getState('app.networkType');
26
+ if (networkType === 'none') {
27
+ return flux.dispatch({
28
+ retry,
29
+ type: APP_CONSTANTS.API_NETWORK_ERROR
30
+ });
31
+ }
32
+ const stateSession = flux.getState('user.session') || {};
33
+ let token;
34
+ if (authenticate) {
35
+ const hydratedSession = stateSession.token ? stateSession : await hydrateSessionFromStorage(flux);
36
+ const { expires: authExpires = 0, issued: authIssued = 0, token: hydratedToken } = hydratedSession || {};
37
+ token = hydratedToken || stateSession.token;
38
+ if (!token) {
39
+ throw new ApiError([
40
+ 'invalid_session'
41
+ ], 'invalid_session');
42
+ }
43
+ const tokenExpiresAt = parseJwtExpiryMs(token);
44
+ if (tokenExpiresAt > 0 && Date.now() >= tokenExpiresAt) {
45
+ throw new ApiError([
46
+ 'expired_session'
47
+ ], 'expired_session');
48
+ }
49
+ const config = getConfigFromFlux(flux);
50
+ const minutesUntilExpiry = getMinutesUntil(Number(authExpires || 0));
51
+ const sessionLifetimeMinutes = Math.round((authExpires - authIssued) / (1000 * 60));
52
+ const refreshWindowMinutes = getRefreshWindowMinutes(sessionLifetimeMinutes || DEFAULT_SESSION_MAX_MINUTES, config.app?.session || {});
53
+ const refreshExpiresMinutes = Math.max(1, Number(config.app?.session?.maxMinutes || sessionLifetimeMinutes || DEFAULT_SESSION_MAX_MINUTES));
54
+ if (minutesUntilExpiry > 0 && minutesUntilExpiry <= refreshWindowMinutes) {
55
+ const { session: updatedSession = {} } = await refreshSession(flux, token, refreshExpiresMinutes) || {};
56
+ const { token: newToken } = updatedSession || {};
57
+ if (!newToken) {
58
+ throw new ApiError([
59
+ 'invalid_session'
60
+ ], 'invalid_session');
61
+ }
62
+ token = newToken;
63
+ }
64
+ }
65
+ return graphqlQuery(url, query, {
66
+ token: token || ''
67
+ }).then(async (results)=>{
68
+ await flux.dispatch({
69
+ type: APP_CONSTANTS.API_NETWORK_SUCCESS
70
+ });
71
+ return results;
72
+ }).then((data)=>onSuccess ? onSuccess(data) : data).catch(async (error)=>{
73
+ const { errors = [] } = error;
74
+ if (onSuccess && errors.includes('network_error')) {
75
+ await flux.dispatch({
76
+ retry,
77
+ type: APP_CONSTANTS.API_NETWORK_ERROR
78
+ });
79
+ return Promise.reject(error);
80
+ } else if (errors.includes('invalid_session') || errors.includes('expired_session')) {
81
+ await clearInvalidSessionState(flux);
82
+ return Promise.resolve({});
83
+ }
84
+ return Promise.reject(error);
85
+ });
86
+ } catch (error) {
87
+ const errors = error instanceof ApiError ? error.errors : [];
88
+ const message = error instanceof Error ? error.message : '';
89
+ if (errors.includes('invalid_session') || errors.includes('expired_session') || message === 'invalid_session' || message === 'expired_session') {
90
+ await clearInvalidSessionState(flux);
91
+ return {};
92
+ }
93
+ throw error;
94
+ }
95
+ };
96
+ export const createQuery = (name, dataType, variables = {}, returnProperties = [], type = 'query')=>{
97
+ const queryVariables = {
98
+ ...variables || {}
99
+ };
100
+ const variableKeys = Object.keys(queryVariables);
101
+ const queryName = name.replace(/ /g, '');
102
+ let query;
103
+ if (type === 'mutation') {
104
+ const mutationName = upperFirst(camelCase(dataType)) + upperFirst(camelCase(queryName));
105
+ query = `${type} ${mutationName}${variableKeys.length ? `(${variableKeys.map((key)=>`$${key}: ${queryVariables[key].type}`).join(', ')})` : ''} {
106
+ ${dataType} {
107
+ ${camelCase(queryName)}${variableKeys.length ? `(${variableKeys.map((key)=>`${key}: $${key}`).join(', ')})` : ''}
108
+ ${returnProperties?.length ? `{${returnProperties.join(', ')}}` : ''}
109
+ }
110
+ }`;
111
+ } else {
112
+ query = `${type} ${queryName}${variableKeys.length ? `(${variableKeys.map((key)=>`$${key}: ${queryVariables[key].type}`).join(', ')})` : ''} {
113
+ ${dataType} {
114
+ ${camelCase(queryName)}${variableKeys.length ? `(${variableKeys.map((key)=>`${key}: $${key}`).join(', ')})` : ''}
115
+ ${returnProperties?.length ? `{${returnProperties.join(', ')}}` : ''}
116
+ }
117
+ }`;
118
+ }
119
+ const updatedVariables = variableKeys.reduce((queryData, key)=>{
120
+ queryData[key] = queryVariables[key].value;
121
+ return queryData;
122
+ }, {});
123
+ return {
124
+ query,
125
+ variables: updatedVariables
126
+ };
127
+ };
128
+ export const createMutation = (name, dataType, variables = {}, returnProperties = [])=>createQuery(name, dataType, variables, returnProperties, 'mutation');
129
+ export const appQuery = (flux, name, dataType, queryVariables, returnProperties, options = {})=>{
130
+ const query = createQuery(name, dataType, queryVariables, returnProperties);
131
+ const config = getConfigFromFlux(flux);
132
+ const appUrl = config.app?.api?.url || '';
133
+ return getGraphql(flux, appUrl, true, query, options);
134
+ };
135
+ export const appMutation = (flux, name, dataType, queryVariables, returnProperties, options = {})=>{
136
+ const query = createMutation(name, dataType, queryVariables, returnProperties);
137
+ const config = getConfigFromFlux(flux);
138
+ const appUrl = config.app?.api?.url || '';
139
+ return getGraphql(flux, appUrl, true, query, options);
140
+ };
141
+ export const publicQuery = (flux, name, dataType, queryVariables, returnProperties, options = {})=>{
142
+ const query = createQuery(name, dataType, queryVariables, returnProperties);
143
+ const config = getConfigFromFlux(flux);
144
+ const publicUrl = config.app?.api?.public || '';
145
+ return getGraphql(flux, publicUrl, false, query, options);
146
+ };
147
+ export const publicMutation = (flux, name, dataType, queryVariables, returnProperties, options = {})=>{
148
+ const query = createMutation(name, dataType, queryVariables, returnProperties);
149
+ const config = getConfigFromFlux(flux);
150
+ const publicUrl = config.app?.api?.public || '';
151
+ return getGraphql(flux, publicUrl, false, query, options);
152
+ };
153
+ export const uploadImage = (flux, image, options = {})=>{
154
+ const config = getConfigFromFlux(flux);
155
+ const uploadImageUrl = config.app?.api?.uploadImage || '';
156
+ const token = flux.getState('user.session.token');
157
+ if (isEmpty(uploadImageUrl)) {
158
+ return Promise.reject(new ApiError([
159
+ 'invalid_url'
160
+ ], 'upload_endpoint_not_configured'));
161
+ }
162
+ if (isEmpty(token)) {
163
+ return Promise.reject(new ApiError([
164
+ 'invalid_session'
165
+ ], 'missing_auth_token'));
166
+ }
167
+ const headers = new Headers();
168
+ headers.set('Authorization', `Bearer ${token}`);
169
+ if (typeof FormData !== 'undefined' && image instanceof FormData) {
170
+ headers.set('Accept', 'application/json');
171
+ return fetch(uploadImageUrl, {
172
+ body: image,
173
+ headers,
174
+ method: 'POST'
175
+ }).then(async (response)=>{
176
+ const responseType = response.headers.get('content-type') || '';
177
+ const data = responseType.includes('application/json') ? await response.json() : await response.text();
178
+ if (!response.ok) {
179
+ const message = typeof data === 'object' && data && 'error' in data ? String(data.error || response.statusText) : String(data || response.statusText);
180
+ throw new ApiError([
181
+ 'upload_error'
182
+ ], message);
183
+ }
184
+ return data;
185
+ });
186
+ }
187
+ return post(uploadImageUrl, image, {
188
+ headers,
189
+ ...options
190
+ });
191
+ };
192
+ export const refreshSession = async (flux, token, expires)=>{
193
+ const refreshToken = isEmpty(token) ? flux.getState('user.session.token') : token;
194
+ if (isEmpty(refreshToken)) {
195
+ return null;
196
+ }
197
+ const tokenExpiresAt = parseJwtExpiryMs(String(refreshToken));
198
+ if (tokenExpiresAt > 0 && Date.now() >= tokenExpiresAt) {
199
+ const error = new Error('expired_session');
200
+ await clearInvalidSessionState(flux);
201
+ flux.dispatch({
202
+ error,
203
+ type: USER_CONSTANTS.GET_SESSION_ERROR
204
+ });
205
+ return null;
206
+ }
207
+ try {
208
+ const config = getConfigFromFlux(flux);
209
+ const requestedExpires = Math.max(1, Number(expires || config.app?.session?.maxMinutes || DEFAULT_SESSION_MAX_MINUTES));
210
+ const queryVariables = {
211
+ expires: {
212
+ type: 'Int',
213
+ value: requestedExpires
214
+ },
215
+ token: {
216
+ type: 'String!',
217
+ value: refreshToken
218
+ }
219
+ };
220
+ const onSuccess = async (data = {})=>{
221
+ const rawSessionData = data?.users?.refreshSession;
222
+ const sessionData = rawSessionData && typeof rawSessionData === 'object' ? rawSessionData : {};
223
+ const currentSession = flux.getState('user.session', {}) || {};
224
+ const mergedSession = await storeSession(flux, {
225
+ ...currentSession,
226
+ ...sessionData
227
+ });
228
+ return flux.dispatch({
229
+ session: mergedSession,
230
+ type: USER_CONSTANTS.UPDATE_SESSION_SUCCESS
231
+ });
232
+ };
233
+ return await publicMutation(flux, 'refreshSession', 'users', queryVariables, [
234
+ 'expires',
235
+ 'issued',
236
+ 'token'
237
+ ], {
238
+ onSuccess
239
+ });
240
+ } catch (error) {
241
+ const errorMessage = error instanceof Error ? error.message : '';
242
+ if (errorMessage === 'invalid_session' || errorMessage === 'expired_session') {
243
+ await clearInvalidSessionState(flux);
244
+ }
245
+ flux.dispatch({
246
+ error,
247
+ type: USER_CONSTANTS.GET_SESSION_ERROR
248
+ });
249
+ return null;
250
+ }
251
+ };
252
+
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpRXJyb3IsIGdyYXBocWxRdWVyeSwgcG9zdH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjYW1lbENhc2UsIGlzRW1wdHksIHVwcGVyRmlyc3R9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QVBQX0NPTlNUQU5UU30gZnJvbSAnLi4vc3RvcmVzL2FwcFN0b3JlLmpzJztcbmltcG9ydCB7VVNFUl9DT05TVEFOVFN9IGZyb20gJy4uL3N0b3Jlcy91c2VyU3RvcmUuanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi9jb25maWdVdGlscy5qcyc7XG5pbXBvcnQge2NsZWFyUGVyc2lzdGVkU2Vzc2lvbiwgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXMsIHN0b3JlU2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7SHVudGVyT3B0aW9uc1R5cGUsIEh1bnRlclF1ZXJ5VHlwZX0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9wdGlvbnMge1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBQcm9taXNlPEZsdXhBY3Rpb24+O1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVha3RvckRiQ29sbGVjdGlvbiA9XG4gICdhcHBzJyB8XG4gICdjb25uZWN0aW9ucycgfFxuICAnY29udGVudHMnIHxcbiAgJ2NvbnZlcnNhdGlvbnMnIHxcbiAgJ2V2ZW50cycgfFxuICAnZmlsZXMnIHxcbiAgJ2dyb3VwcycgfFxuICAnaW1hZ2VzJyB8XG4gICdsb2NhdGlvbnMnIHxcbiAgJ21lc3NhZ2VzJyB8XG4gICdub3RpZmljYXRpb25zJyB8XG4gICdwYXltZW50cycgfFxuICAncGVybWlzc2lvbnMnIHxcbiAgJ3Bvc3RzJyB8XG4gICdwZXJzb25hcycgfFxuICAncmVhY3Rpb25zJyB8XG4gICdzdWJzY3JpcHRpb25zJyB8XG4gICd0YWdzJyB8XG4gICd0cmFuc2xhdGlvbnMnIHxcbiAgJ3VzZXJzJyB8XG4gICd2aWRlb3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVF1ZXJ5VmFyaWFibGVUeXBlIHtcbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlRdWVyeVZhcmlhYmxlcyB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEFwaVF1ZXJ5VmFyaWFibGVUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVJlc3VsdHNUeXBlIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeVR5cGUge1xuICByZWFkb25seSBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW107XG4gIHJlYWRvbmx5IHJlc3BvbnNlTWV0aG9kOiAocmVzdWx0czogQXBpUmVzdWx0c1R5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblR5cGUge1xuICByZWFkb25seSBleHBpcmVzPzogbnVtYmVyO1xuICByZWFkb25seSBpc3N1ZWQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRva2VuPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VySWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1JFRlJFU0hfV0lORE9XX01JTlVURVMgPSA1O1xuY29uc3QgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTID0gMTU7XG5cbmNvbnN0IGdldE1pbnV0ZXNVbnRpbCA9IChleHBpcmVzQXQ6IG51bWJlcik6IG51bWJlciA9PlxuICBNYXRoLnJvdW5kKChleHBpcmVzQXQgLSBEYXRlLm5vdygpKSAvICgxMDAwICogNjApKTtcblxuY29uc3QgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgYXdhaXQgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uKGZsdXgpO1xuICBhd2FpdCBmbHV4LmNsZWFyQXBwRGF0YSgpO1xuICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiB7fSwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9PVVRfU1VDQ0VTU30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyYXBocWwgPSBhc3luYyAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIHVybDogc3RyaW5nLFxuICBhdXRoZW50aWNhdGU6IGJvb2xlYW4sXG4gIHF1ZXJ5OiBIdW50ZXJRdWVyeVR5cGUgfCBIdW50ZXJRdWVyeVR5cGVbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9uc1xuKTogUHJvbWlzZTxBcGlSZXN1bHRzVHlwZT4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHtvblN1Y2Nlc3N9ID0gb3B0aW9ucztcbiAgICBjb25zdCByZXRyeTogUmV0cnlUeXBlID0ge3F1ZXJ5LCByZXNwb25zZU1ldGhvZDogb25TdWNjZXNzIHx8ICgoKSA9PiB7fSl9O1xuICAgIGNvbnN0IG5ldHdvcmtUeXBlOiBzdHJpbmcgPSBmbHV4LmdldFN0YXRlKCdhcHAubmV0d29ya1R5cGUnKSBhcyBzdHJpbmc7XG5cbiAgICBpZihuZXR3b3JrVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7cmV0cnksIHR5cGU6IEFQUF9DT05TVEFOVFMuQVBJX05FVFdPUktfRVJST1J9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZVNlc3Npb246IFNlc3Npb25UeXBlID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicpIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgICBsZXQgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmKGF1dGhlbnRpY2F0ZSkge1xuICAgICAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uOiBTZXNzaW9uVHlwZSA9IHN0YXRlU2Vzc2lvbi50b2tlbiA/IHN0YXRlU2Vzc2lvbiA6IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGV4cGlyZXM6IGF1dGhFeHBpcmVzID0gMCxcbiAgICAgICAgaXNzdWVkOiBhdXRoSXNzdWVkID0gMCxcbiAgICAgICAgdG9rZW46IGh5ZHJhdGVkVG9rZW5cbiAgICAgIH06IFNlc3Npb25UeXBlID0gaHlkcmF0ZWRTZXNzaW9uIHx8IHt9O1xuICAgICAgdG9rZW4gPSBoeWRyYXRlZFRva2VuIHx8IHN0YXRlU2Vzc2lvbi50b2tlbjtcblxuICAgICAgaWYoIXRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfc2Vzc2lvbiddLCAnaW52YWxpZF9zZXNzaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyh0b2tlbik7XG5cbiAgICAgIGlmKHRva2VuRXhwaXJlc0F0ID4gMCAmJiBEYXRlLm5vdygpID49IHRva2VuRXhwaXJlc0F0KSB7XG4gICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2V4cGlyZWRfc2Vzc2lvbiddLCAnZXhwaXJlZF9zZXNzaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICAgICAgY29uc3QgbWludXRlc1VudGlsRXhwaXJ5ID0gZ2V0TWludXRlc1VudGlsKE51bWJlcihhdXRoRXhwaXJlcyB8fCAwKSk7XG4gICAgICBjb25zdCBzZXNzaW9uTGlmZXRpbWVNaW51dGVzID0gTWF0aC5yb3VuZCgoYXV0aEV4cGlyZXMgLSBhdXRoSXNzdWVkKSAvICgxMDAwICogNjApKTtcbiAgICAgIGNvbnN0IHJlZnJlc2hXaW5kb3dNaW51dGVzID0gZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMoXG4gICAgICAgIHNlc3Npb25MaWZldGltZU1pbnV0ZXMgfHwgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTLFxuICAgICAgICBjb25maWcuYXBwPy5zZXNzaW9uIHx8IHt9XG4gICAgICApO1xuICAgICAgY29uc3QgcmVmcmVzaEV4cGlyZXNNaW51dGVzID0gTWF0aC5tYXgoXG4gICAgICAgIDEsXG4gICAgICAgIE51bWJlcihjb25maWcuYXBwPy5zZXNzaW9uPy5tYXhNaW51dGVzIHx8IHNlc3Npb25MaWZldGltZU1pbnV0ZXMgfHwgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTKVxuICAgICAgKTtcblxuICAgICAgaWYobWludXRlc1VudGlsRXhwaXJ5ID4gMCAmJiBtaW51dGVzVW50aWxFeHBpcnkgPD0gcmVmcmVzaFdpbmRvd01pbnV0ZXMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNlc3Npb246IHVwZGF0ZWRTZXNzaW9uID0ge31cbiAgICAgICAgfTogQXBpUmVzdWx0c1R5cGUgPSAoYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIHJlZnJlc2hFeHBpcmVzTWludXRlcykpIHx8IHt9O1xuICAgICAgICBjb25zdCB7dG9rZW46IG5ld1Rva2VufTogU2Vzc2lvblR5cGUgPSAodXBkYXRlZFNlc3Npb24gfHwge30pO1xuXG4gICAgICAgIGlmKCFuZXdUb2tlbikge1xuICAgICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfc2Vzc2lvbiddLCAnaW52YWxpZF9zZXNzaW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IG5ld1Rva2VuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncmFwaHFsUXVlcnkodXJsLCBxdWVyeSwge3Rva2VuOiB0b2tlbiB8fCAnJ30pXG4gICAgICAudGhlbihhc3luYyAocmVzdWx0cykgPT4ge1xuICAgICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX1NVQ0NFU1N9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4gKG9uU3VjY2VzcyA/IG9uU3VjY2VzcyhkYXRhKSA6IGRhdGEpKVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCB7ZXJyb3JzID0gW119ID0gZXJyb3I7XG5cbiAgICAgICAgaWYob25TdWNjZXNzICYmIGVycm9ycy5pbmNsdWRlcygnbmV0d29ya19lcnJvcicpKSB7XG4gICAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7cmV0cnksIHR5cGU6IEFQUF9DT05TVEFOVFMuQVBJX05FVFdPUktfRVJST1J9KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpKSB7XG4gICAgICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JzID0gZXJyb3IgaW5zdGFuY2VvZiBBcGlFcnJvciA/IGVycm9yLmVycm9ycyA6IFtdO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpIHx8IG1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IG1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgdmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyA9IHt9LFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdLFxuICB0eXBlID0gJ3F1ZXJ5J1xuKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0gey4uLnZhcmlhYmxlcyB8fCB7fX07XG4gIGNvbnN0IHZhcmlhYmxlS2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5VmFyaWFibGVzKTtcbiAgY29uc3QgcXVlcnlOYW1lID0gbmFtZS5yZXBsYWNlKC8gL2csICcnKTtcbiAgbGV0IHF1ZXJ5OiBzdHJpbmc7XG5cbiAgaWYodHlwZSA9PT0gJ211dGF0aW9uJykge1xuICAgIGNvbnN0IG11dGF0aW9uTmFtZSA9IHVwcGVyRmlyc3QoY2FtZWxDYXNlKGRhdGFUeXBlKSkgKyB1cHBlckZpcnN0KGNhbWVsQ2FzZShxdWVyeU5hbWUpKTtcbiAgICBxdWVyeSA9IGAke3R5cGV9ICR7bXV0YXRpb25OYW1lfSR7XG4gICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCQke2tleX06ICR7cXVlcnlWYXJpYWJsZXNba2V5XS50eXBlfWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgOiAnJ1xuICAgIH0ge1xuICAgICAgJHtkYXRhVHlwZX0ge1xuICAgICAgICAke2NhbWVsQ2FzZShxdWVyeU5hbWUpfSR7XG4gICAgICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJHtrZXl9OiAkJHtrZXl9YCkuam9pbignLCAnKX0pYFxuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9XG4gICAgICAgICR7cmV0dXJuUHJvcGVydGllcz8ubGVuZ3RoID8gYHske3JldHVyblByb3BlcnRpZXMuam9pbignLCAnKX19YCA6ICcnfVxuICAgICAgfVxuICAgIH1gO1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5ID0gYCR7dHlwZX0gJHtxdWVyeU5hbWV9JHtcbiAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJCR7a2V5fTogJHtxdWVyeVZhcmlhYmxlc1trZXldLnR5cGV9YCkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcnXG4gICAgfSB7XG4gICAgICAke2RhdGFUeXBlfSB7XG4gICAgICAgICR7Y2FtZWxDYXNlKHF1ZXJ5TmFtZSl9JHtcbiAgICAgICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAke2tleX06ICQke2tleX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtyZXR1cm5Qcm9wZXJ0aWVzPy5sZW5ndGggPyBgeyR7cmV0dXJuUHJvcGVydGllcy5qb2luKCcsICcpfX1gIDogJyd9XG4gICAgICB9XG4gICAgfWA7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHZhcmlhYmxlS2V5cy5yZWR1Y2UoKHF1ZXJ5RGF0YSwga2V5KSA9PiB7XG4gICAgcXVlcnlEYXRhW2tleV0gPSBxdWVyeVZhcmlhYmxlc1trZXldLnZhbHVlO1xuICAgIHJldHVybiBxdWVyeURhdGE7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge3F1ZXJ5LCB2YXJpYWJsZXM6IHVwZGF0ZWRWYXJpYWJsZXN9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU11dGF0aW9uID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICB2YXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzID0ge30sXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW11cbikgPT4gY3JlYXRlUXVlcnkobmFtZSwgZGF0YVR5cGUsIHZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcywgJ211dGF0aW9uJyk7XG5cbmV4cG9ydCBjb25zdCBhcHBRdWVyeSA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgYXBwVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnVybCB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgYXBwVXJsLCB0cnVlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBNdXRhdGlvbiA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVNdXRhdGlvbihuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgYXBwVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnVybCB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgYXBwVXJsLCB0cnVlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNRdWVyeSA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgcHVibGljVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnB1YmxpYyB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgcHVibGljVXJsLCBmYWxzZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgcHVibGljTXV0YXRpb24gPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTXV0YXRpb24obmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHB1YmxpY1VybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy5wdWJsaWMgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIHB1YmxpY1VybCwgZmFsc2UsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwbG9hZEltYWdlID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBpbWFnZSxcbiAgb3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7fVxuKTogUHJvbWlzZTxBcGlSZXN1bHRzVHlwZT4gPT4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgdXBsb2FkSW1hZ2VVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXBsb2FkSW1hZ2UgfHwgJyc7XG4gIGNvbnN0IHRva2VuID0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnRva2VuJyk7XG5cbiAgaWYoaXNFbXB0eSh1cGxvYWRJbWFnZVVybCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKFsnaW52YWxpZF91cmwnXSwgJ3VwbG9hZF9lbmRwb2ludF9ub3RfY29uZmlndXJlZCcpKTtcbiAgfVxuXG4gIGlmKGlzRW1wdHkodG9rZW4pKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfc2Vzc2lvbiddLCAnbWlzc2luZ19hdXRoX3Rva2VuJykpO1xuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApO1xuXG4gIGlmKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgIGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVwbG9hZEltYWdlVXJsLCB7XG4gICAgICBib2R5OiBpbWFnZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2Q6ICdQT1NUJ1xuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZVR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJyc7XG4gICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2VUeXBlLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJylcbiAgICAgICAgPyBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgOiBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgICAgIGlmKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgJiYgJ2Vycm9yJyBpbiBkYXRhXG4gICAgICAgICAgPyBTdHJpbmcoKGRhdGEgYXMge2Vycm9yPzogc3RyaW5nfSkuZXJyb3IgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dClcbiAgICAgICAgICA6IFN0cmluZyhkYXRhIHx8IHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoWyd1cGxvYWRfZXJyb3InXSwgbWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhIGFzIEFwaVJlc3VsdHNUeXBlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBvc3QodXBsb2FkSW1hZ2VVcmwsIGltYWdlLCB7aGVhZGVycywgLi4ub3B0aW9uc30pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hTZXNzaW9uID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICB0b2tlbj86IHN0cmluZyxcbiAgZXhwaXJlcz86IG51bWJlclxuKTogUHJvbWlzZTxGbHV4QWN0aW9uIHwgbnVsbD4gPT4ge1xuICBjb25zdCByZWZyZXNoVG9rZW4gPSBpc0VtcHR5KHRva2VuKSA/IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi50b2tlbicpIDogdG9rZW47XG5cbiAgaWYoaXNFbXB0eShyZWZyZXNoVG9rZW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB0b2tlbkV4cGlyZXNBdCA9IHBhcnNlSnd0RXhwaXJ5TXMoU3RyaW5nKHJlZnJlc2hUb2tlbikpO1xuXG4gIGlmKHRva2VuRXhwaXJlc0F0ID4gMCAmJiBEYXRlLm5vdygpID49IHRva2VuRXhwaXJlc0F0KSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ2V4cGlyZWRfc2Vzc2lvbicpO1xuICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gICAgY29uc3QgcmVxdWVzdGVkRXhwaXJlcyA9IE1hdGgubWF4KFxuICAgICAgMSxcbiAgICAgIE51bWJlcihleHBpcmVzIHx8IGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTKVxuICAgICk7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBleHBpcmVzOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogcmVxdWVzdGVkRXhwaXJlc1xuICAgICAgfSxcbiAgICAgIHRva2VuOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWU6IHJlZnJlc2hUb2tlblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHJhd1Nlc3Npb25EYXRhID0gKGRhdGEgYXMge3VzZXJzPzoge3JlZnJlc2hTZXNzaW9uPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSk/LnVzZXJzPy5yZWZyZXNoU2Vzc2lvbjtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gcmF3U2Vzc2lvbkRhdGEgJiYgdHlwZW9mIHJhd1Nlc3Npb25EYXRhID09PSAnb2JqZWN0J1xuICAgICAgICA/IHJhd1Nlc3Npb25EYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgbWVyZ2VkU2Vzc2lvbiA9IGF3YWl0IHN0b3JlU2Vzc2lvbihmbHV4LCB7Li4uY3VycmVudFNlc3Npb24sIC4uLnNlc3Npb25EYXRhfSk7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7c2Vzc2lvbjogbWVyZ2VkU2Vzc2lvbiwgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX1NFU1NJT05fU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgcHVibGljTXV0YXRpb24oZmx1eCwgJ3JlZnJlc2hTZXNzaW9uJywgJ3VzZXJzJywgcXVlcnlWYXJpYWJsZXMsIFsnZXhwaXJlcycsICdpc3N1ZWQnLCAndG9rZW4nXSwge1xuICAgICAgb25TdWNjZXNzXG4gICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JNZXNzYWdlID09PSAnaW52YWxpZF9zZXNzaW9uJyB8fCBlcnJvck1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgfVxuXG4gICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX0VSUk9SfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiQXBpRXJyb3IiLCJncmFwaHFsUXVlcnkiLCJwb3N0IiwiY2FtZWxDYXNlIiwiaXNFbXB0eSIsInVwcGVyRmlyc3QiLCJBUFBfQ09OU1RBTlRTIiwiVVNFUl9DT05TVEFOVFMiLCJnZXRDb25maWdGcm9tRmx1eCIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImdldFJlZnJlc2hXaW5kb3dNaW51dGVzIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsInBhcnNlSnd0RXhwaXJ5TXMiLCJzdG9yZVNlc3Npb24iLCJERUZBVUxUX1JFRlJFU0hfV0lORE9XX01JTlVURVMiLCJERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMiLCJnZXRNaW51dGVzVW50aWwiLCJleHBpcmVzQXQiLCJNYXRoIiwicm91bmQiLCJEYXRlIiwibm93IiwiY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlIiwiZmx1eCIsImNsZWFyQXBwRGF0YSIsImRpc3BhdGNoIiwic2Vzc2lvbiIsInR5cGUiLCJTSUdOX09VVF9TVUNDRVNTIiwiZ2V0R3JhcGhxbCIsInVybCIsImF1dGhlbnRpY2F0ZSIsInF1ZXJ5Iiwib3B0aW9ucyIsIm9uU3VjY2VzcyIsInJldHJ5IiwicmVzcG9uc2VNZXRob2QiLCJuZXR3b3JrVHlwZSIsImdldFN0YXRlIiwiQVBJX05FVFdPUktfRVJST1IiLCJzdGF0ZVNlc3Npb24iLCJ0b2tlbiIsImh5ZHJhdGVkU2Vzc2lvbiIsImV4cGlyZXMiLCJhdXRoRXhwaXJlcyIsImlzc3VlZCIsImF1dGhJc3N1ZWQiLCJoeWRyYXRlZFRva2VuIiwidG9rZW5FeHBpcmVzQXQiLCJjb25maWciLCJtaW51dGVzVW50aWxFeHBpcnkiLCJOdW1iZXIiLCJzZXNzaW9uTGlmZXRpbWVNaW51dGVzIiwicmVmcmVzaFdpbmRvd01pbnV0ZXMiLCJhcHAiLCJyZWZyZXNoRXhwaXJlc01pbnV0ZXMiLCJtYXgiLCJtYXhNaW51dGVzIiwidXBkYXRlZFNlc3Npb24iLCJyZWZyZXNoU2Vzc2lvbiIsIm5ld1Rva2VuIiwidGhlbiIsInJlc3VsdHMiLCJBUElfTkVUV09SS19TVUNDRVNTIiwiZGF0YSIsImNhdGNoIiwiZXJyb3IiLCJlcnJvcnMiLCJpbmNsdWRlcyIsIlByb21pc2UiLCJyZWplY3QiLCJyZXNvbHZlIiwibWVzc2FnZSIsIkVycm9yIiwiY3JlYXRlUXVlcnkiLCJuYW1lIiwiZGF0YVR5cGUiLCJ2YXJpYWJsZXMiLCJyZXR1cm5Qcm9wZXJ0aWVzIiwicXVlcnlWYXJpYWJsZXMiLCJ2YXJpYWJsZUtleXMiLCJPYmplY3QiLCJrZXlzIiwicXVlcnlOYW1lIiwicmVwbGFjZSIsIm11dGF0aW9uTmFtZSIsImxlbmd0aCIsIm1hcCIsImtleSIsImpvaW4iLCJ1cGRhdGVkVmFyaWFibGVzIiwicmVkdWNlIiwicXVlcnlEYXRhIiwidmFsdWUiLCJjcmVhdGVNdXRhdGlvbiIsImFwcFF1ZXJ5IiwiYXBwVXJsIiwiYXBpIiwiYXBwTXV0YXRpb24iLCJwdWJsaWNRdWVyeSIsInB1YmxpY1VybCIsInB1YmxpYyIsInB1YmxpY011dGF0aW9uIiwidXBsb2FkSW1hZ2UiLCJpbWFnZSIsInVwbG9hZEltYWdlVXJsIiwiaGVhZGVycyIsIkhlYWRlcnMiLCJzZXQiLCJGb3JtRGF0YSIsImZldGNoIiwiYm9keSIsIm1ldGhvZCIsInJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwiZ2V0IiwianNvbiIsInRleHQiLCJvayIsIlN0cmluZyIsInN0YXR1c1RleHQiLCJyZWZyZXNoVG9rZW4iLCJHRVRfU0VTU0lPTl9FUlJPUiIsInJlcXVlc3RlZEV4cGlyZXMiLCJyYXdTZXNzaW9uRGF0YSIsInVzZXJzIiwic2Vzc2lvbkRhdGEiLCJjdXJyZW50U2Vzc2lvbiIsIm1lcmdlZFNlc3Npb24iLCJVUERBVEVfU0VTU0lPTl9TVUNDRVNTIiwiZXJyb3JNZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxRQUFRLEVBQUVDLFlBQVksRUFBRUMsSUFBSSxRQUFPLG9CQUFvQjtBQUMvRCxTQUFRQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxRQUFPLGVBQWU7QUFFNUQsU0FBUUMsYUFBYSxRQUFPLHdCQUF3QjtBQUNwRCxTQUFRQyxjQUFjLFFBQU8seUJBQXlCO0FBQ3RELFNBQVFDLGlCQUFpQixRQUFPLG1CQUFtQjtBQUNuRCxTQUFRQyxxQkFBcUIsRUFBRUMsdUJBQXVCLEVBQUVDLHlCQUF5QixFQUFFQyxnQkFBZ0IsRUFBRUMsWUFBWSxRQUFPLGVBQWU7QUEyRHZJLE1BQU1DLGlDQUFpQztBQUN2QyxNQUFNQyw4QkFBOEI7QUFFcEMsTUFBTUMsa0JBQWtCLENBQUNDLFlBQ3ZCQyxLQUFLQyxLQUFLLENBQUMsQUFBQ0Ys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
@@ -0,0 +1,7 @@
1
+ export interface ColumnSize {
2
+ readonly columns: number;
3
+ readonly size: number;
4
+ }
5
+ export declare const getColumnSize: (width: number, maxItemWidth: number, containerPadding?: number) => ColumnSize;
6
+ export declare const isExpired: (expires: number, limitInMin: number) => boolean;
7
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/utils/app.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,EACb,cAAc,MAAM,EACpB,mBAAkB,MAAU,KAC3B,UAMF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,EAAE,YAAY,MAAM,KAAG,OACuB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { DateTime } from 'luxon';
2
+ export const getColumnSize = (width, maxItemWidth, containerPadding = 0)=>{
3
+ const containerWidth = width - 8 * containerPadding;
4
+ const columns = Math.ceil(containerWidth / maxItemWidth);
5
+ const size = (containerWidth - 8 * (columns - 1) * 2) / columns;
6
+ return {
7
+ columns,
8
+ size
9
+ };
10
+ };
11
+ export const isExpired = (expires, limitInMin)=>DateTime.local().diff(DateTime.fromMillis(expires), [
12
+ 'minutes'
13
+ ]).minutes > limitInMin;
14
+
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5TaXplIHtcbiAgcmVhZG9ubHkgY29sdW1uczogbnVtYmVyO1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5TaXplID0gKFxuICB3aWR0aDogbnVtYmVyLFxuICBtYXhJdGVtV2lkdGg6IG51bWJlcixcbiAgY29udGFpbmVyUGFkZGluZzogbnVtYmVyID0gMFxuKTogQ29sdW1uU2l6ZSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoOiBudW1iZXIgPSB3aWR0aCAtICg4ICogY29udGFpbmVyUGFkZGluZyk7XG4gIGNvbnN0IGNvbHVtbnM6IG51bWJlciA9IE1hdGguY2VpbChjb250YWluZXJXaWR0aCAvIG1heEl0ZW1XaWR0aCk7XG4gIGNvbnN0IHNpemU6IG51bWJlciA9IChjb250YWluZXJXaWR0aCAtICg4ICogKGNvbHVtbnMgLSAxKSAqIDIpKSAvIGNvbHVtbnM7XG5cbiAgcmV0dXJuIHtjb2x1bW5zLCBzaXplfTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0V4cGlyZWQgPSAoZXhwaXJlczogbnVtYmVyLCBsaW1pdEluTWluOiBudW1iZXIpOiBib29sZWFuID0+XG4gIERhdGVUaW1lLmxvY2FsKCkuZGlmZihEYXRlVGltZS5mcm9tTWlsbGlzKGV4cGlyZXMpLCBbJ21pbnV0ZXMnXSkubWludXRlcyA+IGxpbWl0SW5NaW47XG4iXSwibmFtZXMiOlsiRGF0ZVRpbWUiLCJnZXRDb2x1bW5TaXplIiwid2lkdGgiLCJtYXhJdGVtV2lkdGgiLCJjb250YWluZXJQYWRkaW5nIiwiY29udGFpbmVyV2lkdGgiLCJjb2x1bW5zIiwiTWF0aCIsImNlaWwiLCJzaXplIiwiaXNFeHBpcmVkIiwiZXhwaXJlcyIsImxpbWl0SW5NaW4iLCJsb2NhbCIsImRpZmYiLCJmcm9tTWlsbGlzIiwibWludXRlcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLFFBQVE7QUFPL0IsT0FBTyxNQUFNQyxnQkFBZ0IsQ0FDM0JDLE9BQ0FDLGNBQ0FDLG1CQUEyQixDQUFDO0lBRTVCLE1BQU1DLGlCQUF5QkgsUUFBUyxJQUFJRTtJQUM1QyxNQUFNRSxVQUFrQkMsS0FBS0MsSUFBSSxDQUFDSCxpQkFBaUJGO0lBQ25ELE1BQU1NLE9BQWUsQUFBQ0osQ0FBQUEsaUJBQWtCLElBQUtDLENBQUFBLFVBQVUsQ0FBQSxJQUFLLENBQUMsSUFBS0E7SUFFbEUsT0FBTztRQUFDQTtRQUFTRztJQUFJO0FBQ3ZCLEVBQUU7QUFFRixPQUFPLE1BQU1DLFlBQVksQ0FBQ0MsU0FBaUJDLGFBQ3pDWixTQUFTYSxLQUFLLEdBQUdDLElBQUksQ0FBQ2QsU0FBU2UsVUFBVSxDQUFDSixVQUFVO1FBQUM7S0FBVSxFQUFFSyxPQUFPLEdBQUdKLFdBQVcifQ==
@@ -0,0 +1,16 @@
1
+ import type { BaseAdapterOptions } from './validatorFactory.js';
2
+ import type { FluxFramework } from '@nlabs/arkhamjs';
3
+ export interface BaseActionOptions<T extends BaseAdapterOptions = BaseAdapterOptions> {
4
+ adapter?: (input: unknown, options?: T) => any;
5
+ adapterOptions?: T;
6
+ }
7
+ export declare const createBaseActions: <T extends BaseAdapterOptions>(flux: FluxFramework, defaultValidator: (input: unknown, options?: T) => any, options?: BaseActionOptions<T>) => {
8
+ createMutationAction: <R = any>(mutationName: string, dataType: string, queryVariables: Record<string, any>, props: string[], successType: string, errorType: string, mutationFn: any) => (input?: unknown) => Promise<R>;
9
+ createQueryAction: <R = any>(queryName: string, dataType: string, queryVariables: Record<string, any>, props: string[], successType: string, errorType: string, queryFn: any) => () => Promise<R>;
10
+ flux: FluxFramework;
11
+ updateAdapter: (adapter: (input: unknown, options?: T) => any) => void;
12
+ updateOptions: (options: T) => void;
13
+ updateAdapterOptions: (options: T) => void;
14
+ validator: (input: unknown, validatorOptions?: T) => any;
15
+ };
16
+ //# sourceMappingURL=baseActionFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseActionFactory.d.ts","sourceRoot":"","sources":["../../src/utils/baseActionFactory.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB;IAClF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC;IAC/C,cAAc,CAAC,EAAE,CAAC,CAAC;CACpB;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,kBAAkB,EAC5D,MAAM,aAAa,EACnB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,EACtD,UAAU,iBAAiB,CAAC,CAAC,CAAC;2BAWA,CAAC,sBACf,MAAM,YACV,MAAM,kBACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAC5B,MAAM,EAAE,eACF,MAAM,aACR,MAAM,cACL,GAAG,MACL,QAAQ,OAAO,KAAG,OAAO,CAAC,CAAC,CAAC;wBAgCb,CAAC,mBACf,MAAM,YACP,MAAM,kBACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAC5B,MAAM,EAAE,eACF,MAAM,aACR,MAAM,WACR,GAAG,WACC,OAAO,CAAC,CAAC,CAAC;;;;;;CAiC1B,CAAC"}
@@ -0,0 +1,72 @@
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 { createValidatorManager } from './validatorFactory.js';
5
+ export const createBaseActions = (flux, defaultValidator, options)=>{
6
+ const { validator, updateAdapter, updateOptions } = createValidatorManager(defaultValidator, options?.adapterOptions);
7
+ if (options?.adapter) {
8
+ updateAdapter(options.adapter);
9
+ }
10
+ const createMutationAction = (mutationName, dataType, queryVariables, props, successType, errorType, mutationFn)=>async (input)=>{
11
+ try {
12
+ const variables = input ? {
13
+ ...queryVariables,
14
+ [Object.keys(queryVariables)[0]]: {
15
+ ...queryVariables[Object.keys(queryVariables)[0]],
16
+ value: validator(input)
17
+ }
18
+ } : queryVariables;
19
+ const onSuccess = (data)=>{
20
+ const result = data[dataType]?.[mutationName] || {};
21
+ return flux.dispatch({
22
+ [dataType.slice(0, -1)]: result,
23
+ type: successType
24
+ });
25
+ };
26
+ const result = await mutationFn(flux, mutationName, dataType, variables, props, {
27
+ onSuccess
28
+ });
29
+ const key = Object.keys(result)[0];
30
+ return result[key];
31
+ } catch (error) {
32
+ flux.dispatch({
33
+ error,
34
+ type: errorType
35
+ });
36
+ throw error;
37
+ }
38
+ };
39
+ const createQueryAction = (queryName, dataType, queryVariables, props, successType, errorType, queryFn)=>async ()=>{
40
+ try {
41
+ const onSuccess = (data)=>{
42
+ const result = data[dataType]?.[queryName] || {};
43
+ return flux.dispatch({
44
+ [dataType.slice(0, -1)]: result,
45
+ type: successType
46
+ });
47
+ };
48
+ const result = await queryFn(flux, queryName, dataType, queryVariables, props, {
49
+ onSuccess
50
+ });
51
+ const key = Object.keys(result)[0];
52
+ return result[key];
53
+ } catch (error) {
54
+ flux.dispatch({
55
+ error,
56
+ type: errorType
57
+ });
58
+ throw error;
59
+ }
60
+ };
61
+ return {
62
+ createMutationAction,
63
+ createQueryAction,
64
+ flux,
65
+ updateAdapter,
66
+ updateOptions,
67
+ updateAdapterOptions: updateOptions,
68
+ validator
69
+ };
70
+ };
71
+
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYmFzZUFjdGlvbkZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlVmFsaWRhdG9yTWFuYWdlcn0gZnJvbSAnLi92YWxpZGF0b3JGYWN0b3J5LmpzJztcblxuaW1wb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi92YWxpZGF0b3JGYWN0b3J5LmpzJztcbmltcG9ydCB0eXBlIHtGbHV4RnJhbWV3b3JrfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VBY3Rpb25PcHRpb25zPFQgZXh0ZW5kcyBCYXNlQWRhcHRlck9wdGlvbnMgPSBCYXNlQWRhcHRlck9wdGlvbnM+IHtcbiAgYWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFQpID0+IGFueTtcbiAgYWRhcHRlck9wdGlvbnM/OiBUO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlQmFzZUFjdGlvbnMgPSA8VCBleHRlbmRzIEJhc2VBZGFwdGVyT3B0aW9ucz4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGRlZmF1bHRWYWxpZGF0b3I6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFQpID0+IGFueSxcbiAgb3B0aW9ucz86IEJhc2VBY3Rpb25PcHRpb25zPFQ+XG4pID0+IHtcbiAgY29uc3Qge3ZhbGlkYXRvciwgdXBkYXRlQWRhcHRlciwgdXBkYXRlT3B0aW9uc30gPSBjcmVhdGVWYWxpZGF0b3JNYW5hZ2VyKFxuICAgIGRlZmF1bHRWYWxpZGF0b3IsXG4gICAgb3B0aW9ucz8uYWRhcHRlck9wdGlvbnNcbiAgKTtcblxuICBpZihvcHRpb25zPy5hZGFwdGVyKSB7XG4gICAgdXBkYXRlQWRhcHRlcihvcHRpb25zLmFkYXB0ZXIpO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlTXV0YXRpb25BY3Rpb24gPSA8UiA9IGFueT4oXG4gICAgbXV0YXRpb25OYW1lOiBzdHJpbmcsXG4gICAgZGF0YVR5cGU6IHN0cmluZyxcbiAgICBxdWVyeVZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwcm9wczogc3RyaW5nW10sXG4gICAgc3VjY2Vzc1R5cGU6IHN0cmluZyxcbiAgICBlcnJvclR5cGU6IHN0cmluZyxcbiAgICBtdXRhdGlvbkZuOiBhbnlcbiAgKSA9PiBhc3luYyAoaW5wdXQ/OiB1bmtub3duKTogUHJvbWlzZTxSPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IGlucHV0ID8ge1xuICAgICAgICAuLi5xdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW09iamVjdC5rZXlzKHF1ZXJ5VmFyaWFibGVzKVswXV06IHtcbiAgICAgICAgICAuLi5xdWVyeVZhcmlhYmxlc1tPYmplY3Qua2V5cyhxdWVyeVZhcmlhYmxlcylbMF1dLFxuICAgICAgICAgIHZhbHVlOiB2YWxpZGF0b3IoaW5wdXQpXG4gICAgICAgIH1cbiAgICAgIH0gOiBxdWVyeVZhcmlhYmxlcztcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhW2RhdGFUeXBlXT8uW211dGF0aW9uTmFtZV0gfHwge307XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtbZGF0YVR5cGUuc2xpY2UoMCwgLTEpXTogcmVzdWx0LCB0eXBlOiBzdWNjZXNzVHlwZX0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbXV0YXRpb25GbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgbXV0YXRpb25OYW1lLFxuICAgICAgICBkYXRhVHlwZSxcbiAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHJlc3VsdClbMF07XG4gICAgICByZXR1cm4gcmVzdWx0W2tleV0gYXMgUjtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogZXJyb3JUeXBlfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlUXVlcnlBY3Rpb24gPSA8UiA9IGFueT4oXG4gICAgcXVlcnlOYW1lOiBzdHJpbmcsXG4gICAgZGF0YVR5cGU6IHN0cmluZyxcbiAgICBxdWVyeVZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwcm9wczogc3RyaW5nW10sXG4gICAgc3VjY2Vzc1R5cGU6IHN0cmluZyxcbiAgICBlcnJvclR5cGU6IHN0cmluZyxcbiAgICBxdWVyeUZuOiBhbnlcbiAgKSA9PiBhc3luYyAoKTogUHJvbWlzZTxSPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YVtkYXRhVHlwZV0/LltxdWVyeU5hbWVdIHx8IHt9O1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7W2RhdGFUeXBlLnNsaWNlKDAsIC0xKV06IHJlc3VsdCwgdHlwZTogc3VjY2Vzc1R5cGV9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Rm4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHJlc3VsdClbMF07XG4gICAgICByZXR1cm4gcmVzdWx0W2tleV0gYXMgUjtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogZXJyb3JUeXBlfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNdXRhdGlvbkFjdGlvbixcbiAgICBjcmVhdGVRdWVyeUFjdGlvbixcbiAgICBmbHV4LFxuICAgIHVwZGF0ZUFkYXB0ZXIsXG4gICAgdXBkYXRlT3B0aW9ucyxcbiAgICB1cGRhdGVBZGFwdGVyT3B0aW9uczogdXBkYXRlT3B0aW9ucyxcbiAgICB2YWxpZGF0b3JcbiAgfTtcbn07Il0sIm5hbWVzIjpbImNyZWF0ZVZhbGlkYXRvck1hbmFnZXIiLCJjcmVhdGVCYXNlQWN0aW9ucyIsImZsdXgiLCJkZWZhdWx0VmFsaWRhdG9yIiwib3B0aW9ucyIsInZhbGlkYXRvciIsInVwZGF0ZUFkYXB0ZXIiLCJ1cGRhdGVPcHRpb25zIiwiYWRhcHRlck9wdGlvbnMiLCJhZGFwdGVyIiwiY3JlYXRlTXV0YXRpb25BY3Rpb24iLCJtdXRhdGlvbk5hbWUiLCJkYXRhVHlwZSIsInF1ZXJ5VmFyaWFibGVzIiwicHJvcHMiLCJzdWNjZXNzVHlwZSIsImVycm9yVHlwZSIsIm11dGF0aW9uRm4iLCJpbnB1dCIsInZhcmlhYmxlcyIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsIm9uU3VjY2VzcyIsImRhdGEiLCJyZXN1bHQiLCJkaXNwYXRjaCIsInNsaWNlIiwidHlwZSIsImtleSIsImVycm9yIiwiY3JlYXRlUXVlcnlBY3Rpb24iLCJxdWVyeU5hbWUiLCJxdWVyeUZuIiwidXBkYXRlQWRhcHRlck9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLHNCQUFzQixRQUFPLHdCQUF3QjtBQVU3RCxPQUFPLE1BQU1DLG9CQUFvQixDQUMvQkMsTUFDQUMsa0JBQ0FDO0lBRUEsTUFBTSxFQUFDQyxTQUFTLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFDLEdBQUdQLHVCQUNoREcsa0JBQ0FDLFNBQVNJO0lBR1gsSUFBR0osU0FBU0ssU0FBUztRQUNuQkgsY0FBY0YsUUFBUUssT0FBTztJQUMvQjtJQUVBLE1BQU1DLHVCQUF1QixDQUMzQkMsY0FDQUMsVUFDQUMsZ0JBQ0FDLE9BQ0FDLGFBQ0FDLFdBQ0FDLGFBQ0csT0FBT0M7WUFDVixJQUFJO2dCQUNGLE1BQU1DLFlBQVlELFFBQVE7b0JBQ3hCLEdBQUdMLGNBQWM7b0JBQ2pCLENBQUNPLE9BQU9DLElBQUksQ0FBQ1IsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUNoQyxHQUFHQSxjQUFjLENBQUNPLE9BQU9DLElBQUksQ0FBQ1IsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDakRTLE9BQU9qQixVQUFVYTtvQkFDbkI7Z0JBQ0YsSUFBSUw7Z0JBRUosTUFBTVUsWUFBWSxDQUFDQztvQkFDakIsTUFBTUMsU0FBU0QsSUFBSSxDQUFDWixTQUFTLEVBQUUsQ0FBQ0QsYUFBYSxJQUFJLENBQUM7b0JBQ2xELE9BQU9ULEtBQUt3QixRQUFRLENBQUM7d0JBQUMsQ0FBQ2QsU0FBU2UsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUVGO3dCQUFRRyxNQUFNYjtvQkFBVztnQkFDMUU7Z0JBRUEsTUFBTVUsU0FBUyxNQUFNUixXQUNuQmYsTUFDQVMsY0FDQUMsVUFDQU8sV0FDQUwsT0FDQTtvQkFBQ1M7Z0JBQVM7Z0JBR1osTUFBTU0sTUFBTVQsT0FBT0MsSUFBSSxDQUFDSSxPQUFPLENBQUMsRUFBRTtnQkFDbEMsT0FBT0EsTUFBTSxDQUFDSSxJQUFJO1lBQ3BCLEVBQUUsT0FBTUMsT0FBTztnQkFDYjVCLEtBQUt3QixRQUFRLENBQUM7b0JBQUNJO29CQUFPRixNQUFNWjtnQkFBUztnQkFDckMsTUFBTWM7WUFDUjtRQUNGO0lBRUEsTUFBTUMsb0JBQW9CLENBQ3hCQyxXQUNBcEIsVUFDQUMsZ0JBQ0FDLE9BQ0FDLGFBQ0FDLFdBQ0FpQixVQUNHO1lBQ0gsSUFBSTtnQkFDRixNQUFNVixZQUFZLENBQUNDO29CQUNqQixNQUFNQyxTQUFTRCxJQUFJLENBQUNaLFNBQVMsRUFBRSxDQUFDb0IsVUFBVSxJQUFJLENBQUM7b0JBQy9DLE9BQU85QixLQUFLd0IsUUFBUSxDQUFDO3dCQUFDLENBQUNkLFNBQVNlLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFRjt3QkFBUUcsTUFBTWI7b0JBQVc7Z0JBQzFFO2dCQUVBLE1BQU1VLFNBQVMsTUFBTVEsUUFDbkIvQixNQUNBOEIsV0FDQXBCLFVBQ0FDLGdCQUNBQyxPQUNBO29CQUFDUztnQkFBUztnQkFHWixNQUFNTSxNQUFNVCxPQUFPQyxJQUFJLENBQUNJLE9BQU8sQ0FBQyxFQUFFO2dCQUNsQyxPQUFPQSxNQUFNLENBQUNJLElBQUk7WUFDcEIsRUFBRSxPQUFNQyxPQUFPO2dCQUNiNUIsS0FBS3dCLFFBQVEsQ0FBQztvQkFBQ0k7b0JBQU9GLE1BQU1aO2dCQUFTO2dCQUNyQyxNQUFNYztZQUNSO1FBQ0Y7SUFFQSxPQUFPO1FBQ0xwQjtRQUNBcUI7UUFDQTdCO1FBQ0FJO1FBQ0FDO1FBQ0EyQixzQkFBc0IzQjtRQUN0QkY7SUFDRjtBQUNGLEVBQUUifQ==