@nlabs/reaktor 0.10.2 → 0.10.6

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 (472) hide show
  1. package/coverage/block-navigation.js +1 -1
  2. package/coverage/index.html +23 -23
  3. package/coverage/sorter.js +21 -7
  4. package/lib/actions/apps.d.ts +1 -0
  5. package/lib/actions/apps.d.ts.map +1 -0
  6. package/lib/actions/apps.js +218 -17
  7. package/lib/actions/connections.d.ts +1 -0
  8. package/lib/actions/connections.d.ts.map +1 -0
  9. package/lib/actions/connections.js +61 -6
  10. package/lib/actions/content.d.ts +1 -0
  11. package/lib/actions/content.d.ts.map +1 -0
  12. package/lib/actions/content.js +232 -9
  13. package/lib/actions/conversations.d.ts +1 -0
  14. package/lib/actions/conversations.d.ts.map +1 -0
  15. package/lib/actions/conversations.js +321 -19
  16. package/lib/actions/dynamodb.d.ts +1 -0
  17. package/lib/actions/dynamodb.d.ts.map +1 -0
  18. package/lib/actions/dynamodb.js +119 -2
  19. package/lib/actions/email.d.ts +1 -0
  20. package/lib/actions/email.d.ts.map +1 -0
  21. package/lib/actions/email.js +56 -2
  22. package/lib/actions/files.d.ts +1 -0
  23. package/lib/actions/files.d.ts.map +1 -0
  24. package/lib/actions/files.js +226 -5
  25. package/lib/actions/groups.d.ts +1 -0
  26. package/lib/actions/groups.d.ts.map +1 -0
  27. package/lib/actions/groups.js +234 -19
  28. package/lib/actions/images.d.ts +1 -0
  29. package/lib/actions/images.d.ts.map +1 -0
  30. package/lib/actions/images.js +688 -31
  31. package/lib/actions/index.d.ts +2 -0
  32. package/lib/actions/index.d.ts.map +1 -0
  33. package/lib/actions/index.js +29 -2
  34. package/lib/actions/ios.d.ts +1 -0
  35. package/lib/actions/ios.d.ts.map +1 -0
  36. package/lib/actions/ios.js +228 -9
  37. package/lib/actions/locations.d.ts +1 -0
  38. package/lib/actions/locations.d.ts.map +1 -0
  39. package/lib/actions/locations.js +111 -7
  40. package/lib/actions/messages.d.ts +1 -0
  41. package/lib/actions/messages.d.ts.map +1 -0
  42. package/lib/actions/messages.js +155 -21
  43. package/lib/actions/notifications.d.ts +1 -0
  44. package/lib/actions/notifications.d.ts.map +1 -0
  45. package/lib/actions/notifications.js +37 -2
  46. package/lib/actions/payments.d.ts +1 -0
  47. package/lib/actions/payments.d.ts.map +1 -0
  48. package/lib/actions/payments.js +428 -11
  49. package/lib/actions/posts.d.ts +1 -0
  50. package/lib/actions/posts.d.ts.map +1 -0
  51. package/lib/actions/posts.js +540 -75
  52. package/lib/actions/profiles.d.ts +1 -0
  53. package/lib/actions/profiles.d.ts.map +1 -0
  54. package/lib/actions/profiles.js +58 -8
  55. package/lib/actions/reactions.d.ts +1 -0
  56. package/lib/actions/reactions.d.ts.map +1 -0
  57. package/lib/actions/reactions.js +276 -25
  58. package/lib/actions/s3.d.ts +1 -0
  59. package/lib/actions/s3.d.ts.map +1 -0
  60. package/lib/actions/s3.js +102 -2
  61. package/lib/actions/search.d.ts +1 -0
  62. package/lib/actions/search.d.ts.map +1 -0
  63. package/lib/actions/search.js +81 -5
  64. package/lib/actions/sms.d.ts +1 -0
  65. package/lib/actions/sms.d.ts.map +1 -0
  66. package/lib/actions/sms.js +52 -2
  67. package/lib/actions/statistics.d.ts +1 -0
  68. package/lib/actions/statistics.d.ts.map +1 -0
  69. package/lib/actions/statistics.js +41 -6
  70. package/lib/actions/subscriptions.d.ts +1 -0
  71. package/lib/actions/subscriptions.d.ts.map +1 -0
  72. package/lib/actions/subscriptions.js +196 -6
  73. package/lib/actions/tags.d.ts +1 -0
  74. package/lib/actions/tags.d.ts.map +1 -0
  75. package/lib/actions/tags.js +258 -19
  76. package/lib/actions/users.d.ts +1 -0
  77. package/lib/actions/users.d.ts.map +1 -0
  78. package/lib/actions/users.js +781 -66
  79. package/lib/actions/videos.d.ts +26 -0
  80. package/lib/actions/videos.d.ts.map +1 -0
  81. package/lib/actions/videos.js +423 -0
  82. package/lib/actions/websockets.d.ts +1 -0
  83. package/lib/actions/websockets.d.ts.map +1 -0
  84. package/lib/actions/websockets.js +148 -14
  85. package/lib/adapters/arangoAdapter.d.ts +1 -0
  86. package/lib/adapters/arangoAdapter.d.ts.map +1 -0
  87. package/lib/adapters/arangoAdapter.js +70 -2
  88. package/lib/adapters/contentAdapter.d.ts +1 -0
  89. package/lib/adapters/contentAdapter.d.ts.map +1 -0
  90. package/lib/adapters/contentAdapter.js +108 -2
  91. package/lib/adapters/fileAdapter.d.ts +1 -0
  92. package/lib/adapters/fileAdapter.d.ts.map +1 -0
  93. package/lib/adapters/fileAdapter.js +119 -2
  94. package/lib/adapters/imageAdapter.d.ts +1 -0
  95. package/lib/adapters/imageAdapter.d.ts.map +1 -0
  96. package/lib/adapters/imageAdapter.js +112 -2
  97. package/lib/adapters/index.d.ts +1 -0
  98. package/lib/adapters/index.d.ts.map +1 -0
  99. package/lib/adapters/index.js +11 -2
  100. package/lib/adapters/messageAdapter.d.ts +1 -0
  101. package/lib/adapters/messageAdapter.d.ts.map +1 -0
  102. package/lib/adapters/messageAdapter.js +82 -2
  103. package/lib/adapters/postAdapter.d.ts +1 -0
  104. package/lib/adapters/postAdapter.d.ts.map +1 -0
  105. package/lib/adapters/postAdapter.js +117 -2
  106. package/lib/adapters/reaktorAdapter.d.ts +1 -0
  107. package/lib/adapters/reaktorAdapter.d.ts.map +1 -0
  108. package/lib/adapters/reaktorAdapter.js +59 -2
  109. package/lib/adapters/tagAdapter.d.ts +1 -0
  110. package/lib/adapters/tagAdapter.d.ts.map +1 -0
  111. package/lib/adapters/tagAdapter.js +99 -2
  112. package/lib/adapters/userAdapter.d.ts +1 -0
  113. package/lib/adapters/userAdapter.d.ts.map +1 -0
  114. package/lib/adapters/userAdapter.js +264 -2
  115. package/lib/config.d.ts +1 -0
  116. package/lib/config.d.ts.map +1 -0
  117. package/lib/config.js +161 -2
  118. package/lib/handlers/graphqlHandler.d.ts +1 -0
  119. package/lib/handlers/graphqlHandler.d.ts.map +1 -0
  120. package/lib/handlers/graphqlHandler.js +118 -2
  121. package/lib/index.d.ts +1 -0
  122. package/lib/index.d.ts.map +1 -0
  123. package/lib/index.js +18 -2
  124. package/lib/lambdas/actions/websockets.d.ts +1 -0
  125. package/lib/lambdas/actions/websockets.d.ts.map +1 -0
  126. package/lib/lambdas/actions/websockets.js +89 -14
  127. package/lib/lambdas/authorizer.d.ts +1 -0
  128. package/lib/lambdas/authorizer.d.ts.map +1 -0
  129. package/lib/lambdas/authorizer.js +41 -2
  130. package/lib/lambdas/connection.d.ts +1 -0
  131. package/lib/lambdas/connection.d.ts.map +1 -0
  132. package/lib/lambdas/connection.js +85 -2
  133. package/lib/lambdas/utils/message.d.ts +1 -0
  134. package/lib/lambdas/utils/message.d.ts.map +1 -0
  135. package/lib/lambdas/utils/message.js +20 -2
  136. package/lib/lambdas/utils/websocket.d.ts +1 -0
  137. package/lib/lambdas/utils/websocket.d.ts.map +1 -0
  138. package/lib/lambdas/utils/websocket.js +78 -2
  139. package/lib/mocks/conversation.d.ts +1 -0
  140. package/lib/mocks/conversation.d.ts.map +1 -0
  141. package/lib/mocks/conversation.js +10 -2
  142. package/lib/mocks/file.d.ts +1 -0
  143. package/lib/mocks/file.d.ts.map +1 -0
  144. package/lib/mocks/file.js +13 -2
  145. package/lib/mocks/group.d.ts +1 -0
  146. package/lib/mocks/group.d.ts.map +1 -0
  147. package/lib/mocks/group.js +20 -2
  148. package/lib/mocks/image.d.ts +1 -0
  149. package/lib/mocks/image.d.ts.map +1 -0
  150. package/lib/mocks/image.js +17 -2
  151. package/lib/mocks/post.d.ts +1 -0
  152. package/lib/mocks/post.d.ts.map +1 -0
  153. package/lib/mocks/post.js +28 -2
  154. package/lib/mocks/tag.d.ts +1 -0
  155. package/lib/mocks/tag.d.ts.map +1 -0
  156. package/lib/mocks/tag.js +12 -2
  157. package/lib/mocks/user.d.ts +1 -0
  158. package/lib/mocks/user.d.ts.map +1 -0
  159. package/lib/mocks/user.js +61 -2
  160. package/lib/mocks/video.d.ts +4 -0
  161. package/lib/mocks/video.d.ts.map +1 -0
  162. package/lib/mocks/video.js +17 -0
  163. package/lib/mutations/content.d.ts +1 -0
  164. package/lib/mutations/content.d.ts.map +1 -0
  165. package/lib/mutations/content.js +27 -2
  166. package/lib/mutations/index.d.ts +1 -0
  167. package/lib/mutations/index.d.ts.map +1 -0
  168. package/lib/mutations/index.js +29 -2
  169. package/lib/mutations/locations.d.ts +1 -0
  170. package/lib/mutations/locations.d.ts.map +1 -0
  171. package/lib/mutations/locations.js +22 -2
  172. package/lib/mutations/messages.d.ts +1 -0
  173. package/lib/mutations/messages.d.ts.map +1 -0
  174. package/lib/mutations/messages.js +75 -2
  175. package/lib/mutations/posts.d.ts +1 -0
  176. package/lib/mutations/posts.d.ts.map +1 -0
  177. package/lib/mutations/posts.js +31 -2
  178. package/lib/mutations/profiles.d.ts +1 -0
  179. package/lib/mutations/profiles.d.ts.map +1 -0
  180. package/lib/mutations/profiles.js +78 -2
  181. package/lib/mutations/reactions.d.ts +1 -0
  182. package/lib/mutations/reactions.d.ts.map +1 -0
  183. package/lib/mutations/reactions.js +29 -2
  184. package/lib/mutations/statistics.d.ts +1 -0
  185. package/lib/mutations/statistics.d.ts.map +1 -0
  186. package/lib/mutations/statistics.js +17 -2
  187. package/lib/mutations/subscriptions.d.ts +1 -0
  188. package/lib/mutations/subscriptions.d.ts.map +1 -0
  189. package/lib/mutations/subscriptions.js +38 -2
  190. package/lib/mutations/tags.d.ts +1 -0
  191. package/lib/mutations/tags.d.ts.map +1 -0
  192. package/lib/mutations/tags.js +109 -2
  193. package/lib/mutations/users.d.ts +1 -0
  194. package/lib/mutations/users.d.ts.map +1 -0
  195. package/lib/mutations/users.js +129 -2
  196. package/lib/objectTypes/app.d.ts +1 -0
  197. package/lib/objectTypes/app.d.ts.map +1 -0
  198. package/lib/objectTypes/app.js +147 -2
  199. package/lib/objectTypes/bankAccount.d.ts +1 -0
  200. package/lib/objectTypes/bankAccount.d.ts.map +1 -0
  201. package/lib/objectTypes/bankAccount.js +54 -2
  202. package/lib/objectTypes/connection.d.ts +1 -0
  203. package/lib/objectTypes/connection.d.ts.map +1 -0
  204. package/lib/objectTypes/connection.js +26 -2
  205. package/lib/objectTypes/content.d.ts +1 -0
  206. package/lib/objectTypes/content.d.ts.map +1 -0
  207. package/lib/objectTypes/content.js +79 -2
  208. package/lib/objectTypes/conversation.d.ts +1 -0
  209. package/lib/objectTypes/conversation.d.ts.map +1 -0
  210. package/lib/objectTypes/conversation.js +53 -2
  211. package/lib/objectTypes/creditCard.d.ts +1 -0
  212. package/lib/objectTypes/creditCard.d.ts.map +1 -0
  213. package/lib/objectTypes/creditCard.js +64 -2
  214. package/lib/objectTypes/document.d.ts +1 -0
  215. package/lib/objectTypes/document.d.ts.map +1 -0
  216. package/lib/objectTypes/document.js +21 -2
  217. package/lib/objectTypes/error.d.ts +1 -0
  218. package/lib/objectTypes/error.d.ts.map +1 -0
  219. package/lib/objectTypes/error.js +24 -2
  220. package/lib/objectTypes/external.d.ts +1 -0
  221. package/lib/objectTypes/external.d.ts.map +1 -0
  222. package/lib/objectTypes/external.js +52 -2
  223. package/lib/objectTypes/file.d.ts +1 -0
  224. package/lib/objectTypes/file.d.ts.map +1 -0
  225. package/lib/objectTypes/file.js +76 -2
  226. package/lib/objectTypes/filter.d.ts +1 -0
  227. package/lib/objectTypes/filter.d.ts.map +1 -0
  228. package/lib/objectTypes/filter.js +21 -2
  229. package/lib/objectTypes/group.d.ts +1 -0
  230. package/lib/objectTypes/group.d.ts.map +1 -0
  231. package/lib/objectTypes/group.js +97 -2
  232. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  233. package/lib/objectTypes/iapSubscription.d.ts.map +1 -0
  234. package/lib/objectTypes/iapSubscription.js +18 -2
  235. package/lib/objectTypes/image.d.ts +1 -0
  236. package/lib/objectTypes/image.d.ts.map +1 -0
  237. package/lib/objectTypes/image.js +105 -2
  238. package/lib/objectTypes/index.d.ts +1 -0
  239. package/lib/objectTypes/index.d.ts.map +1 -0
  240. package/lib/objectTypes/index.js +28 -2
  241. package/lib/objectTypes/location.d.ts +1 -0
  242. package/lib/objectTypes/location.d.ts.map +1 -0
  243. package/lib/objectTypes/location.js +85 -2
  244. package/lib/objectTypes/message.d.ts +1 -0
  245. package/lib/objectTypes/message.d.ts.map +1 -0
  246. package/lib/objectTypes/message.js +72 -2
  247. package/lib/objectTypes/passcode.d.ts +1 -0
  248. package/lib/objectTypes/passcode.d.ts.map +1 -0
  249. package/lib/objectTypes/passcode.js +20 -2
  250. package/lib/objectTypes/plan.d.ts +1 -0
  251. package/lib/objectTypes/plan.d.ts.map +1 -0
  252. package/lib/objectTypes/plan.js +71 -2
  253. package/lib/objectTypes/post.d.ts +1 -0
  254. package/lib/objectTypes/post.d.ts.map +1 -0
  255. package/lib/objectTypes/post.js +101 -2
  256. package/lib/objectTypes/profile.d.ts +1 -0
  257. package/lib/objectTypes/profile.d.ts.map +1 -0
  258. package/lib/objectTypes/profile.js +68 -2
  259. package/lib/objectTypes/reaction.d.ts +1 -0
  260. package/lib/objectTypes/reaction.d.ts.map +1 -0
  261. package/lib/objectTypes/reaction.js +37 -2
  262. package/lib/objectTypes/relation.d.ts +1 -0
  263. package/lib/objectTypes/relation.d.ts.map +1 -0
  264. package/lib/objectTypes/relation.js +27 -2
  265. package/lib/objectTypes/search.d.ts +1 -0
  266. package/lib/objectTypes/search.d.ts.map +1 -0
  267. package/lib/objectTypes/search.js +50 -2
  268. package/lib/objectTypes/statistics.d.ts +1 -0
  269. package/lib/objectTypes/statistics.d.ts.map +1 -0
  270. package/lib/objectTypes/statistics.js +17 -2
  271. package/lib/objectTypes/subscription.d.ts +1 -0
  272. package/lib/objectTypes/subscription.d.ts.map +1 -0
  273. package/lib/objectTypes/subscription.js +102 -2
  274. package/lib/objectTypes/tag.d.ts +1 -0
  275. package/lib/objectTypes/tag.d.ts.map +1 -0
  276. package/lib/objectTypes/tag.js +41 -2
  277. package/lib/objectTypes/user.d.ts +1 -0
  278. package/lib/objectTypes/user.d.ts.map +1 -0
  279. package/lib/objectTypes/user.js +111 -2
  280. package/lib/queries/content.d.ts +1 -0
  281. package/lib/queries/content.d.ts.map +1 -0
  282. package/lib/queries/content.js +50 -2
  283. package/lib/queries/index.d.ts +1 -0
  284. package/lib/queries/index.d.ts.map +1 -0
  285. package/lib/queries/index.js +27 -2
  286. package/lib/queries/locations.d.ts +1 -0
  287. package/lib/queries/locations.d.ts.map +1 -0
  288. package/lib/queries/locations.js +23 -2
  289. package/lib/queries/messages.d.ts +1 -0
  290. package/lib/queries/messages.d.ts.map +1 -0
  291. package/lib/queries/messages.js +35 -2
  292. package/lib/queries/posts.d.ts +1 -0
  293. package/lib/queries/posts.d.ts.map +1 -0
  294. package/lib/queries/posts.js +154 -2
  295. package/lib/queries/reactions.d.ts +1 -0
  296. package/lib/queries/reactions.d.ts.map +1 -0
  297. package/lib/queries/reactions.js +34 -2
  298. package/lib/queries/statistics.d.ts +1 -0
  299. package/lib/queries/statistics.d.ts.map +1 -0
  300. package/lib/queries/statistics.js +17 -2
  301. package/lib/queries/subscriptions.d.ts +1 -0
  302. package/lib/queries/subscriptions.d.ts.map +1 -0
  303. package/lib/queries/subscriptions.js +21 -2
  304. package/lib/queries/tags.d.ts +1 -0
  305. package/lib/queries/tags.d.ts.map +1 -0
  306. package/lib/queries/tags.js +56 -2
  307. package/lib/queries/users.d.ts +1 -0
  308. package/lib/queries/users.d.ts.map +1 -0
  309. package/lib/queries/users.js +39 -2
  310. package/lib/templates/email/layout.d.ts +1 -0
  311. package/lib/templates/email/layout.d.ts.map +1 -0
  312. package/lib/templates/email/layout.js +4 -3
  313. package/lib/templates/email/passwordForgot.d.ts +1 -0
  314. package/lib/templates/email/passwordForgot.d.ts.map +1 -0
  315. package/lib/templates/email/passwordForgot.js +4 -3
  316. package/lib/templates/email/passwordRecovery.d.ts +1 -0
  317. package/lib/templates/email/passwordRecovery.d.ts.map +1 -0
  318. package/lib/templates/email/passwordRecovery.js +4 -3
  319. package/lib/templates/email/verifyEmail.d.ts +1 -0
  320. package/lib/templates/email/verifyEmail.d.ts.map +1 -0
  321. package/lib/templates/email/verifyEmail.js +4 -3
  322. package/lib/templates/email/welcome.d.ts +1 -0
  323. package/lib/templates/email/welcome.d.ts.map +1 -0
  324. package/lib/templates/email/welcome.js +4 -3
  325. package/lib/templates/sms/passwordForgot.d.ts +1 -0
  326. package/lib/templates/sms/passwordForgot.d.ts.map +1 -0
  327. package/lib/templates/sms/passwordForgot.js +3 -2
  328. package/lib/templates/sms/passwordRecovery.d.ts +1 -0
  329. package/lib/templates/sms/passwordRecovery.d.ts.map +1 -0
  330. package/lib/templates/sms/passwordRecovery.js +3 -2
  331. package/lib/templates/sms/verifyEmail.d.ts +1 -0
  332. package/lib/templates/sms/verifyEmail.d.ts.map +1 -0
  333. package/lib/templates/sms/verifyEmail.js +3 -2
  334. package/lib/templates/sms/verifyPhone.d.ts +1 -0
  335. package/lib/templates/sms/verifyPhone.d.ts.map +1 -0
  336. package/lib/templates/sms/verifyPhone.js +3 -2
  337. package/lib/templates/sms/welcome.d.ts +1 -0
  338. package/lib/templates/sms/welcome.d.ts.map +1 -0
  339. package/lib/templates/sms/welcome.js +3 -2
  340. package/lib/types/apps.types.d.ts +1 -0
  341. package/lib/types/apps.types.d.ts.map +1 -0
  342. package/lib/types/apps.types.js +10 -2
  343. package/lib/types/arangodb.types.d.ts +2 -1
  344. package/lib/types/arangodb.types.d.ts.map +1 -0
  345. package/lib/types/arangodb.types.js +6 -1
  346. package/lib/types/auth.types.d.ts +1 -0
  347. package/lib/types/auth.types.d.ts.map +1 -0
  348. package/lib/types/auth.types.js +6 -1
  349. package/lib/types/connections.types.d.ts +1 -0
  350. package/lib/types/connections.types.d.ts.map +1 -0
  351. package/lib/types/connections.types.js +6 -1
  352. package/lib/types/content.types.d.ts +1 -0
  353. package/lib/types/content.types.d.ts.map +1 -0
  354. package/lib/types/content.types.js +6 -1
  355. package/lib/types/conversations.types.d.ts +1 -0
  356. package/lib/types/conversations.types.d.ts.map +1 -0
  357. package/lib/types/conversations.types.js +6 -1
  358. package/lib/types/email.types.d.ts +1 -0
  359. package/lib/types/email.types.d.ts.map +1 -0
  360. package/lib/types/email.types.js +6 -1
  361. package/lib/types/error.types.d.ts +1 -0
  362. package/lib/types/error.types.d.ts.map +1 -0
  363. package/lib/types/error.types.js +20 -2
  364. package/lib/types/files.types.d.ts +1 -0
  365. package/lib/types/files.types.d.ts.map +1 -0
  366. package/lib/types/files.types.js +6 -1
  367. package/lib/types/google.types.d.ts +1 -0
  368. package/lib/types/google.types.d.ts.map +1 -0
  369. package/lib/types/google.types.js +6 -1
  370. package/lib/types/groups.types.d.ts +1 -0
  371. package/lib/types/groups.types.d.ts.map +1 -0
  372. package/lib/types/groups.types.js +6 -1
  373. package/lib/types/images.types.d.ts +1 -0
  374. package/lib/types/images.types.d.ts.map +1 -0
  375. package/lib/types/images.types.js +6 -1
  376. package/lib/types/index.d.ts +2 -0
  377. package/lib/types/index.d.ts.map +1 -0
  378. package/lib/types/index.js +28 -2
  379. package/lib/types/locations.types.d.ts +1 -0
  380. package/lib/types/locations.types.d.ts.map +1 -0
  381. package/lib/types/locations.types.js +6 -1
  382. package/lib/types/messages.types.d.ts +1 -0
  383. package/lib/types/messages.types.d.ts.map +1 -0
  384. package/lib/types/messages.types.js +6 -1
  385. package/lib/types/notifications.types.d.ts +1 -0
  386. package/lib/types/notifications.types.d.ts.map +1 -0
  387. package/lib/types/notifications.types.js +6 -1
  388. package/lib/types/payments.types.d.ts +1 -0
  389. package/lib/types/payments.types.d.ts.map +1 -0
  390. package/lib/types/payments.types.js +6 -1
  391. package/lib/types/posts.types.d.ts +1 -0
  392. package/lib/types/posts.types.d.ts.map +1 -0
  393. package/lib/types/posts.types.js +6 -1
  394. package/lib/types/profiles.types.d.ts +1 -0
  395. package/lib/types/profiles.types.d.ts.map +1 -0
  396. package/lib/types/profiles.types.js +3 -1
  397. package/lib/types/statistics.types.d.ts +1 -0
  398. package/lib/types/statistics.types.d.ts.map +1 -0
  399. package/lib/types/statistics.types.js +3 -1
  400. package/lib/types/tags.types.d.ts +1 -0
  401. package/lib/types/tags.types.d.ts.map +1 -0
  402. package/lib/types/tags.types.js +6 -1
  403. package/lib/types/users.types.d.ts +1 -0
  404. package/lib/types/users.types.d.ts.map +1 -0
  405. package/lib/types/users.types.js +6 -1
  406. package/lib/types/videos.types.d.ts +47 -0
  407. package/lib/types/videos.types.d.ts.map +1 -0
  408. package/lib/types/videos.types.js +6 -0
  409. package/lib/types/websockets.types.d.ts +1 -0
  410. package/lib/types/websockets.types.d.ts.map +1 -0
  411. package/lib/types/websockets.types.js +6 -1
  412. package/lib/utils/adapterUtils.d.ts +1 -0
  413. package/lib/utils/adapterUtils.d.ts.map +1 -0
  414. package/lib/utils/adapterUtils.js +23 -2
  415. package/lib/utils/analyticsUtils.d.ts +1 -0
  416. package/lib/utils/analyticsUtils.d.ts.map +1 -0
  417. package/lib/utils/analyticsUtils.js +45 -2
  418. package/lib/utils/arangodbUtils.d.ts +1 -0
  419. package/lib/utils/arangodbUtils.d.ts.map +1 -0
  420. package/lib/utils/arangodbUtils.js +128 -5
  421. package/lib/utils/authUtils.d.ts +1 -0
  422. package/lib/utils/authUtils.d.ts.map +1 -0
  423. package/lib/utils/authUtils.js +54 -2
  424. package/lib/utils/contextUtils.d.ts +1 -0
  425. package/lib/utils/contextUtils.d.ts.map +1 -0
  426. package/lib/utils/contextUtils.js +10 -2
  427. package/lib/utils/dbI18n.d.ts +1 -0
  428. package/lib/utils/dbI18n.d.ts.map +1 -0
  429. package/lib/utils/dbI18n.example.d.ts +1 -0
  430. package/lib/utils/dbI18n.example.d.ts.map +1 -0
  431. package/lib/utils/dbI18n.example.js +92 -5
  432. package/lib/utils/dbI18n.js +28 -2
  433. package/lib/utils/googleTranslate.d.ts +1 -0
  434. package/lib/utils/googleTranslate.d.ts.map +1 -0
  435. package/lib/utils/googleTranslate.js +70 -2
  436. package/lib/utils/graphqlUtils.d.ts +1 -0
  437. package/lib/utils/graphqlUtils.d.ts.map +1 -0
  438. package/lib/utils/graphqlUtils.js +11 -2
  439. package/lib/utils/index.d.ts +1 -0
  440. package/lib/utils/index.d.ts.map +1 -0
  441. package/lib/utils/index.js +19 -2
  442. package/lib/utils/languageDetection.d.ts +1 -0
  443. package/lib/utils/languageDetection.d.ts.map +1 -0
  444. package/lib/utils/languageDetection.js +120 -2
  445. package/lib/utils/localeUtils.d.ts +1 -0
  446. package/lib/utils/localeUtils.d.ts.map +1 -0
  447. package/lib/utils/localeUtils.example.d.ts +1 -0
  448. package/lib/utils/localeUtils.example.d.ts.map +1 -0
  449. package/lib/utils/localeUtils.example.js +124 -2
  450. package/lib/utils/localeUtils.js +71 -2
  451. package/lib/utils/middlewareUtils.d.ts +1 -0
  452. package/lib/utils/middlewareUtils.d.ts.map +1 -0
  453. package/lib/utils/middlewareUtils.js +10 -2
  454. package/lib/utils/sessionUtils.d.ts +1 -0
  455. package/lib/utils/sessionUtils.d.ts.map +1 -0
  456. package/lib/utils/sessionUtils.js +26 -2
  457. package/lib/utils/stripeUtils.d.ts +2 -1
  458. package/lib/utils/stripeUtils.d.ts.map +1 -0
  459. package/lib/utils/stripeUtils.js +12 -2
  460. package/lib/utils/templateUtils.d.ts +1 -0
  461. package/lib/utils/templateUtils.d.ts.map +1 -0
  462. package/lib/utils/templateUtils.js +11 -2
  463. package/lib/utils/testUtils.d.ts +1 -0
  464. package/lib/utils/testUtils.d.ts.map +1 -0
  465. package/lib/utils/testUtils.js +292 -2
  466. package/lib/utils/translationQueue.d.ts +1 -0
  467. package/lib/utils/translationQueue.d.ts.map +1 -0
  468. package/lib/utils/translationQueue.example.d.ts +1 -0
  469. package/lib/utils/translationQueue.example.d.ts.map +1 -0
  470. package/lib/utils/translationQueue.example.js +340 -2
  471. package/lib/utils/translationQueue.js +113 -2
  472. package/package.json +47 -29
@@ -1,24 +1,263 @@
1
- import{createHash as O,parseArangoId as R,parseId as D,parseVarChar as A}from"@nlabs/utils/parsers/strings";import{words as q}from"@nlabs/utils/strings/words";import{aql as I}from"arangojs";import{parseTag as h}from"../adapters/tagAdapter.js";import{ErrorTypes as m}from"../types/error.types.js";import{logError as d}from"../utils/analyticsUtils.js";import{getDocId as C,getLimit as x,useDb as y}from"../utils/arangodbUtils.js";const p="tags",P=(o,r={})=>{const n="getList",{databaseName:s}=o,{search:a="",from:g=0,to:t=30,userId:e}=r,i=x(g,t),T=[];a&&T.push(`LIKE(t.name, "%${a}%")`),e&&T.push(`t.userId == "${e}"`);const c=`FOR t IN tags
2
- FILTER ${T.join(" || ")}
3
- ${i.aql}
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 { createHash, parseArangoId, parseId, parseVarChar } from '@nlabs/utils/parsers/strings';
5
+ import { words } from '@nlabs/utils/strings/words';
6
+ import { aql } from 'arangojs';
7
+ import { parseTag } from '../adapters/tagAdapter.js';
8
+ import { ErrorTypes } from '../types/error.types.js';
9
+ import { logError } from '../utils/analyticsUtils.js';
10
+ import { getDocId, getLimit, useDb } from '../utils/arangodbUtils.js';
11
+ const eventCategory = 'tags';
12
+ export const getTags = (context, options = {})=>{
13
+ const action = 'getList';
14
+ const { databaseName } = context;
15
+ const { search = '', from = 0, to = 30, userId } = options;
16
+ const limit = getLimit(from, to);
17
+ const filters = [];
18
+ if (search) {
19
+ filters.push(`LIKE(t.name, "%${search}%")`);
20
+ }
21
+ if (userId) {
22
+ filters.push(`t.userId == "${userId}"`);
23
+ }
24
+ const aqlQry = `FOR t IN tags
25
+ FILTER ${filters.join(' || ')}
26
+ ${limit.aql}
4
27
  SORT t.name
5
- RETURN t`;return y(s).query(c).then(l=>l.all()).catch(l=>(d({action:n,category:p,value:m.DATABASE_ERROR},l,{}),[]))},U=(o,r,n={})=>{const s="getTagsByItem",{from:a=0,to:g=30}=n,{databaseName:t}=o,e=x(a,g),T=`FOR t, it IN INBOUND "${R(r)}" isTagged
6
- ${e.aql}
28
+ RETURN t`;
29
+ return useDb(databaseName).query(aqlQry).then((cursor)=>cursor.all()).catch((error)=>{
30
+ logError({
31
+ action,
32
+ category: eventCategory,
33
+ value: ErrorTypes.DATABASE_ERROR
34
+ }, error, {});
35
+ return [];
36
+ });
37
+ };
38
+ export const getTagsByItem = (context, itemDocId, options = {})=>{
39
+ const action = 'getTagsByItem';
40
+ const { from = 0, to = 30 } = options;
41
+ const { databaseName } = context;
42
+ const limit = getLimit(from, to);
43
+ const formatItemId = parseArangoId(itemDocId);
44
+ const tagQuery = `FOR t, it IN INBOUND "${formatItemId}" isTagged
45
+ ${limit.aql}
7
46
  SORT it.added
8
- RETURN t`;return y(t).query(T).then(c=>c.all()).catch(c=>(d({action:s,category:p,value:m.DATABASE_ERROR},c,{}),[]))},k=(o,r)=>{const n="getTag",{databaseName:s}=o,g=`FOR t IN tags
9
- FILTER t._key == "${D(r)}"
47
+ RETURN t`;
48
+ return useDb(databaseName).query(tagQuery).then((cursor)=>cursor.all()).catch((error)=>{
49
+ logError({
50
+ action,
51
+ category: eventCategory,
52
+ value: ErrorTypes.DATABASE_ERROR
53
+ }, error, {});
54
+ return [];
55
+ });
56
+ };
57
+ export const getTag = (context, tagId)=>{
58
+ const action = 'getTag';
59
+ const { databaseName } = context;
60
+ const formatId = parseId(tagId);
61
+ const aqlQry = `FOR t IN tags
62
+ FILTER t._key == "${formatId}"
10
63
  LIMIT 1
11
- RETURN t`;return y(s).query(g).then(t=>t.next()).catch(t=>d({action:n,category:p,value:m.DATABASE_ERROR},t,{}))},M=(o,r)=>{const n="getTagsByName",{databaseName:s}=o,a=r.map(t=>A(t,32)).filter(t=>!!t);if(!a.length)return Promise.resolve([]);const g=I`FOR t IN tags
12
- FILTER POSITION(${JSON.stringify(a)}, t.name)
13
- RETURN t`;return y(s).query(g).then(t=>t.all()).catch(t=>(d({action:n,category:p,value:m.DATABASE_ERROR},t,{}),[]))},j=(o,r)=>{const n="addTag",{databaseName:s}=o,a=Date.now(),{description:g,name:t}=h(r),i={_key:O(`tag-${t?.toLowerCase()}`),added:a,description:A(g,64),modified:a,name:A(t,32)},T=I`INSERT ${i} IN tags RETURN NEW`;return y(s).query(T).then(c=>c.next()).catch(c=>d({action:n,category:p,value:m.DATABASE_ERROR},c,{}))},$=async(o,{itemDocId:r,tagBy:n="",tagDocId:s})=>{const a="addTagToItem",{databaseName:g,session:{userId:t}={}}=o,e=Date.now(),i=R(s),T=R(r),c=O(`isTagged-${i}-${T}`),l=y(g).collection("isTagged"),f=T.split("/")[0],N=D(n)||t||"",E={_from:i,_key:c,_to:T,added:e,tagBy:N,type:f};await l.save(E,{overwriteMode:"ignore",returnNew:!0,silent:!0}).catch(u=>d({action:a,category:p,params:{edge:E},value:m.DATABASE_ERROR},u,{}));const _=I`LET t = DOCUMENT(${i}) RETURN t`;return y(g).query(_).then(u=>u.next()).catch(u=>d({action:a,category:p,params:{edge:E},value:m.DATABASE_ERROR},u,{}))},V=(o,r)=>{const n="updateTag",{databaseName:s,session:{userId:a}={}}=o,g=Date.now(),{description:t,name:e,tagId:i}=h(r),T=A(e,32),c={description:A(t,64),modified:g,name:T},l=i||O(`tag-${T.toLowerCase()}`),f={...c,_id:`tags/${l}`,_key:l,added:g,tagBy:a},N=I`UPSERT {name: ${T}}
14
- INSERT ${f}
15
- UPDATE ${c}
16
- IN tags RETURN NEW`;return y(s).query(N).then(E=>E.next()).catch(E=>d({action:n,category:p,value:m.DATABASE_ERROR},E,{}))},K=async(o,r)=>{const n="deleteTag",{databaseName:s}=o,a=C("tags",r),g=`FOR it FROM isTagged
17
- FILTER it._from == "${a}" || it._to == "${a}"
64
+ RETURN t`;
65
+ return useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
66
+ action,
67
+ category: eventCategory,
68
+ value: ErrorTypes.DATABASE_ERROR
69
+ }, error, {}));
70
+ };
71
+ export const getTagsByName = (context, tagNames)=>{
72
+ const action = 'getTagsByName';
73
+ const { databaseName } = context;
74
+ const formatTagNames = tagNames.map((tagName)=>parseVarChar(tagName, 32)).filter((tagName)=>!!tagName);
75
+ if (!formatTagNames.length) {
76
+ return Promise.resolve([]);
77
+ }
78
+ const aqlQry = aql`FOR t IN tags
79
+ FILTER POSITION(${JSON.stringify(formatTagNames)}, t.name)
80
+ RETURN t`;
81
+ return useDb(databaseName).query(aqlQry).then((cursor)=>cursor.all()).catch((error)=>{
82
+ logError({
83
+ action,
84
+ category: eventCategory,
85
+ value: ErrorTypes.DATABASE_ERROR
86
+ }, error, {});
87
+ return [];
88
+ });
89
+ };
90
+ export const addTag = (context, tag)=>{
91
+ const action = 'addTag';
92
+ const { databaseName } = context;
93
+ const now = Date.now();
94
+ const { description, name } = parseTag(tag);
95
+ const formatId = createHash(`tag-${name?.toLowerCase()}`);
96
+ const insert = {
97
+ _key: formatId,
98
+ added: now,
99
+ description: parseVarChar(description, 64),
100
+ modified: now,
101
+ name: parseVarChar(name, 32)
102
+ };
103
+ const aqlQry = aql`INSERT ${insert} IN tags RETURN NEW`;
104
+ return useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
105
+ action,
106
+ category: eventCategory,
107
+ value: ErrorTypes.DATABASE_ERROR
108
+ }, error, {}));
109
+ };
110
+ export const addTagToItem = async (context, { itemDocId, tagBy = '', tagDocId })=>{
111
+ const action = 'addTagToItem';
112
+ const { databaseName, session: { userId: sessionId } = {} } = context;
113
+ const added = Date.now();
114
+ const formatTagDocId = parseArangoId(tagDocId);
115
+ const formatItemDocId = parseArangoId(itemDocId);
116
+ const edgeId = createHash(`isTagged-${formatTagDocId}-${formatItemDocId}`);
117
+ const edgeCollection = useDb(databaseName).collection('isTagged');
118
+ const type = formatItemDocId.split('/')[0];
119
+ const formatTagBy = parseId(tagBy) || sessionId || '';
120
+ const edge = {
121
+ _from: formatTagDocId,
122
+ _key: edgeId,
123
+ _to: formatItemDocId,
124
+ added,
125
+ tagBy: formatTagBy,
126
+ type
127
+ };
128
+ await edgeCollection.save(edge, {
129
+ overwriteMode: 'ignore',
130
+ returnNew: true,
131
+ silent: true
132
+ }).catch((error)=>logError({
133
+ action,
134
+ category: eventCategory,
135
+ params: {
136
+ edge
137
+ },
138
+ value: ErrorTypes.DATABASE_ERROR
139
+ }, error, {}));
140
+ const tagQuery = aql`LET t = DOCUMENT(${formatTagDocId}) RETURN t`;
141
+ return useDb(databaseName).query(tagQuery).then((cursor)=>cursor.next()).catch((error)=>logError({
142
+ action,
143
+ category: eventCategory,
144
+ params: {
145
+ edge
146
+ },
147
+ value: ErrorTypes.DATABASE_ERROR
148
+ }, error, {}));
149
+ };
150
+ export const updateTag = (context, tag)=>{
151
+ const action = 'updateTag';
152
+ const { databaseName, session: { userId: sessionId } = {} } = context;
153
+ const now = Date.now();
154
+ const { description, name, tagId } = parseTag(tag);
155
+ const formatName = parseVarChar(name, 32);
156
+ const update = {
157
+ description: parseVarChar(description, 64),
158
+ modified: now,
159
+ name: formatName
160
+ };
161
+ const newTagKey = tagId || createHash(`tag-${formatName.toLowerCase()}`);
162
+ const insert = {
163
+ ...update,
164
+ _id: `tags/${newTagKey}`,
165
+ _key: newTagKey,
166
+ added: now,
167
+ tagBy: sessionId
168
+ };
169
+ const aqlQry = aql`UPSERT {name: ${formatName}}
170
+ INSERT ${insert}
171
+ UPDATE ${update}
172
+ IN tags RETURN NEW`;
173
+ return useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
174
+ action,
175
+ category: eventCategory,
176
+ value: ErrorTypes.DATABASE_ERROR
177
+ }, error, {}));
178
+ };
179
+ export const deleteTag = async (context, tag)=>{
180
+ const action = 'deleteTag';
181
+ const { databaseName } = context;
182
+ const formatItemId = getDocId('tags', tag);
183
+ const tagQuery = `FOR it FROM isTagged
184
+ FILTER it._from == "${formatItemId}" || it._to == "${formatItemId}"
18
185
  REMOVE it IN isTagged
19
- RETURN OLD`;await y(s).query(g).then(e=>e.all()).catch(e=>d({action:n,category:p,value:m.DATABASE_ERROR},e,{}));const t=`LET t = DOCUMENT(${a})
186
+ RETURN OLD`;
187
+ await useDb(databaseName).query(tagQuery).then((cursor)=>cursor.all()).catch((error)=>logError({
188
+ action,
189
+ category: eventCategory,
190
+ value: ErrorTypes.DATABASE_ERROR
191
+ }, error, {}));
192
+ const aqlQry = `LET t = DOCUMENT(${formatItemId})
20
193
  REMOVE t IN tags
21
- RETURN OLD`;return y(s).query(t).then(e=>e.next()).catch(e=>d({action:n,category:p,value:m.DATABASE_ERROR},e,{}))},B=async(o,{tagDocId:r,edgeDocId:n})=>{const s="deleteTagFromEdge",{databaseName:a}=o,g=R(r),t=R(n),e=y(a).collection("isTagged"),i={_id:t};await e.remove(i,{silent:!0}).catch(c=>d({action:s,category:p,value:m.DATABASE_ERROR},c,{}));const T=I`LET t = DOCUMENT(${g}) RETURN t`;return y(a).query(T).then(c=>c.next()).catch(c=>d({action:s,category:p,value:m.DATABASE_ERROR},c,{}))},W=async(o,{tagId:r,itemId:n,itemType:s})=>{const a="deleteTagFromItem",{databaseName:g}=o,t=R(`tags/${r}`),e=R(`${s}/${n}`),i=`FOR it FROM isTagged
22
- FILTER it._from == "${t}" || it._to == "${e}"
23
- REMOVE it IN isTagged`;return y(g).query(i).then(()=>!0).catch(T=>(d({action:a,category:p,value:m.DATABASE_ERROR},T,{}),!1))},z=o=>q(o,/#[a-zA-Z\d-]+/g).map(r=>D(r)),H=(o,{itemDocId:r,tags:n})=>{const s="updateTagsInItem",{databaseName:a}=o;return y(a).collection("isTagged").inEdges(r,{}).then(t=>Promise.all([...t.filter(({name:e})=>!n.find(({name:i})=>e===i)).map(({_id:e,_from:i})=>B(o,{edgeDocId:e,tagDocId:i})),...n.filter(({name:e})=>!t.find(({name:i})=>i===e)).map(({_id:e="",tagBy:i})=>$(o,{itemDocId:r,tagBy:i,tagDocId:e}))]).then(()=>n)).catch(t=>d({action:s,category:p,value:m.DATABASE_ERROR},t,{}))};export{j as addTag,$ as addTagToItem,K as deleteTag,B as deleteTagFromEdge,W as deleteTagFromItem,z as extractTags,k as getTag,P as getTags,U as getTagsByItem,M as getTagsByName,V as updateTag,H as updateTagsInItem};
24
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvdGFncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VJZCwgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7d29yZHN9IGZyb20gJ0BubGFicy91dGlscy9zdHJpbmdzL3dvcmRzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlfSBmcm9tICdhcmFuZ29qcy9kb2N1bWVudHMnO1xuXG5pbXBvcnQge3BhcnNlVGFnfSBmcm9tICcuLi9hZGFwdGVycy90YWdBZGFwdGVyLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0lzVGFnZ2VkVHlwZSwgVGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMvdGFncy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICd0YWdzJztcbmV4cG9ydCBpbnRlcmZhY2UgVGFnT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZyb20/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHNlYXJjaD86IHN0cmluZztcbiAgcmVhZG9ubHkgdG8/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IFRhZ09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge3NlYXJjaCA9ICcnLCBmcm9tID0gMCwgdG8gPSAzMCwgdXNlcklkfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EYkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuXG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYoc2VhcmNoKSB7XG4gICAgZmlsdGVycy5wdXNoKGBMSUtFKHQubmFtZSwgXCIlJHtzZWFyY2h9JVwiKWApO1xuICB9XG5cbiAgaWYodXNlcklkKSB7XG4gICAgZmlsdGVycy5wdXNoKGB0LnVzZXJJZCA9PSBcIiR7dXNlcklkfVwiYCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgfHwgJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCB0Lm5hbWVcbiAgICBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFRhZ1R5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIHt9KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFRhZ1R5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYWdzQnlJdGVtID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogVGFnT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRUYWdzQnlJdGVtJztcbiAgY29uc3Qge2Zyb20gPSAwLCB0byA9IDMwfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtRG9jSWQpO1xuICBjb25zdCB0YWdRdWVyeTogc3RyaW5nID0gYEZPUiB0LCBpdCBJTiBJTkJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaXNUYWdnZWRcbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIGl0LmFkZGVkXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHRhZ1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFRhZ1R5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIHt9KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFRhZ1R5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRUYWcnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKHRhZ0lkKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHQgSU4gdGFnc1xuICAgIEZJTFRFUiB0Ll9rZXkgPT0gXCIke2Zvcm1hdElkfVwiXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7fSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhZ3NCeU5hbWUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0VGFnc0J5TmFtZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VGFnTmFtZXMgPSB0YWdOYW1lc1xuICAgIC5tYXAoKHRhZ05hbWUpID0+IHBhcnNlVmFyQ2hhcih0YWdOYW1lLCAzMikpXG4gICAgLmZpbHRlcigodGFnTmFtZSkgPT4gISF0YWdOYW1lKTtcblxuICBpZighZm9ybWF0VGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgUE9TSVRJT04oJHtKU09OLnN0cmluZ2lmeShmb3JtYXRUYWdOYW1lcyl9LCB0Lm5hbWUpXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBUYWdUeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCB7fSk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBUYWdUeXBlW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZzogVGFnVHlwZSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRUYWcnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge2Rlc2NyaXB0aW9uLCBuYW1lfSA9IHBhcnNlVGFnKHRhZyk7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHtuYW1lPy50b0xvd2VyQ2FzZSgpfWApO1xuICBjb25zdCBpbnNlcnQ6IFRhZ1R5cGUgPSB7XG4gICAgX2tleTogZm9ybWF0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBkZXNjcmlwdGlvbjogcGFyc2VWYXJDaGFyKGRlc2NyaXB0aW9uLCA2NCksXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVZhckNoYXIobmFtZSwgMzIpXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVGFnVG9JdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7aXRlbURvY0lkLCB0YWdCeSA9ICcnLCB0YWdEb2NJZH06IHtpdGVtRG9jSWQ6IHN0cmluZywgdGFnQnk/OiBzdHJpbmcsIHRhZ0RvY0lkOiBzdHJpbmd9XG4pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkVGFnVG9JdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFkZGVkOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBmb3JtYXRUYWdEb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZCh0YWdEb2NJZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtRG9jSWQpO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGlzVGFnZ2VkLSR7Zm9ybWF0VGFnRG9jSWR9LSR7Zm9ybWF0SXRlbURvY0lkfWApO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IHR5cGU6IHN0cmluZyA9IGZvcm1hdEl0ZW1Eb2NJZC5zcGxpdCgnLycpWzBdO1xuICBjb25zdCBmb3JtYXRUYWdCeTogc3RyaW5nID0gcGFyc2VJZCh0YWdCeSkgfHwgc2Vzc2lvbklkIHx8ICcnO1xuICBjb25zdCBlZGdlOiBFZGdlID0ge19mcm9tOiBmb3JtYXRUYWdEb2NJZCwgX2tleTogZWRnZUlkLCBfdG86IGZvcm1hdEl0ZW1Eb2NJZCwgYWRkZWQsIHRhZ0J5OiBmb3JtYXRUYWdCeSwgdHlwZX07XG5cbiAgYXdhaXQgZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7b3ZlcndyaXRlTW9kZTogJ2lnbm9yZScsIHJldHVybk5ldzogdHJ1ZSwgc2lsZW50OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZWRnZVxuICAgICAgfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG5cbiAgY29uc3QgdGFnUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCB0ID0gRE9DVU1FTlQoJHtmb3JtYXRUYWdEb2NJZH0pIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh0YWdRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlZGdlXG4gICAgICB9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnOiBUYWdUeXBlKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZVRhZyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiwgbmFtZSwgdGFnSWR9ID0gcGFyc2VUYWcodGFnKTtcbiAgY29uc3QgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKG5hbWUsIDMyKTtcbiAgY29uc3QgdXBkYXRlOiBUYWdUeXBlID0ge1xuICAgIGRlc2NyaXB0aW9uOiBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDY0KSxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcbiAgY29uc3QgbmV3VGFnS2V5OiBzdHJpbmcgPSB0YWdJZCB8fCBjcmVhdGVIYXNoKGB0YWctJHtmb3JtYXROYW1lLnRvTG93ZXJDYXNlKCl9YCk7XG4gIGNvbnN0IGluc2VydDogVGFnVHlwZSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2lkOiBgdGFncy8ke25ld1RhZ0tleX1gLFxuICAgIF9rZXk6IG5ld1RhZ0tleSxcbiAgICBhZGRlZDogbm93LFxuICAgIHRhZ0J5OiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge25hbWU6ICR7Zm9ybWF0TmFtZX19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZzogVGFnVHlwZSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVUYWcnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IGdldERvY0lkKCd0YWdzJywgdGFnKTtcbiAgY29uc3QgdGFnUXVlcnk6IHN0cmluZyA9IGBGT1IgaXQgRlJPTSBpc1RhZ2dlZFxuICAgIEZJTFRFUiBpdC5fZnJvbSA9PSBcIiR7Zm9ybWF0SXRlbUlkfVwiIHx8IGl0Ll90byA9PSBcIiR7Zm9ybWF0SXRlbUlkfVwiXG4gICAgUkVNT1ZFIGl0IElOIGlzVGFnZ2VkXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh0YWdRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge30pKTtcblxuICBjb25zdCBhcWxRcnkgPSBgTEVUIHQgPSBET0NVTUVOVCgke2Zvcm1hdEl0ZW1JZH0pXG4gICAgUkVNT1ZFIHQgSU4gdGFnc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnRnJvbUVkZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwge3RhZ0RvY0lkLCBlZGdlRG9jSWR9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVUYWdGcm9tRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VGFnRG9jSWQgPSBwYXJzZUFyYW5nb0lkKHRhZ0RvY0lkKTtcbiAgY29uc3QgZm9ybWF0RWRnZURvY0lkID0gcGFyc2VBcmFuZ29JZChlZGdlRG9jSWQpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IGVkZ2UgPSB7X2lkOiBmb3JtYXRFZGdlRG9jSWR9O1xuXG4gIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnJlbW92ZShlZGdlLCB7c2lsZW50OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7fSkpO1xuXG4gIGNvbnN0IHRhZ1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdCA9IERPQ1VNRU5UKCR7Zm9ybWF0VGFnRG9jSWR9KSBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkodGFnUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7fSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVRhZ0Zyb21JdGVtID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHt0YWdJZCwgaXRlbUlkLCBpdGVtVHlwZX0pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVRhZ0Zyb21JdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRUYWdEb2NJZCA9IHBhcnNlQXJhbmdvSWQoYHRhZ3MvJHt0YWdJZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbURvY0lkID0gcGFyc2VBcmFuZ29JZChgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YCk7XG5cbiAgY29uc3QgYXFsUXVlcnk6IHN0cmluZyA9IGBGT1IgaXQgRlJPTSBpc1RhZ2dlZFxuICAgIEZJTFRFUiBpdC5fZnJvbSA9PSBcIiR7Zm9ybWF0VGFnRG9jSWR9XCIgfHwgaXQuX3RvID09IFwiJHtmb3JtYXRJdGVtRG9jSWR9XCJcbiAgICBSRU1PVkUgaXQgSU4gaXNUYWdnZWRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCB7fSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0VGFncyA9IChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmdbXSA9PlxuICB3b3Jkcyhjb250ZW50LCAvI1thLXpBLVpcXGQtXSsvZykubWFwKCh0YWc6IHN0cmluZykgPT4gcGFyc2VJZCh0YWcpKTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhZ3NJbkl0ZW0gPSAoY29udGV4dDogQXBpQ29udGV4dCwge2l0ZW1Eb2NJZCwgdGFnc30pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlVGFnc0luSXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJykgYXMgRWRnZUNvbGxlY3Rpb248VGFnVHlwZT47XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLmluRWRnZXMoaXRlbURvY0lkLCB7fSlcbiAgICAudGhlbigoZWRnZXMpID0+IFByb21pc2UuYWxsKFtcbiAgICAgIC4uLihlZGdlcyBhcyB1bmtub3duIGFzIElzVGFnZ2VkVHlwZVtdKVxuICAgICAgICAuZmlsdGVyKCh7bmFtZTogZXhpc3RpbmdUYWdOYW1lfSkgPT4gIXRhZ3MuZmluZCgoe25hbWU6IHRhZ05hbWV9KSA9PiBleGlzdGluZ1RhZ05hbWUgPT09IHRhZ05hbWUpKVxuICAgICAgICAubWFwKCh7X2lkOiBlZGdlRG9jSWQsIF9mcm9tOiB0YWdEb2NJZH0pID0+IGRlbGV0ZVRhZ0Zyb21FZGdlKGNvbnRleHQsIHtlZGdlRG9jSWQsIHRhZ0RvY0lkfSkpLFxuICAgICAgLi4uKHRhZ3MgYXMgdW5rbm93biBhcyBUYWdUeXBlW10pXG4gICAgICAgIC5maWx0ZXIoKHtuYW1lOiB0YWdOYW1lfSkgPT4gIShlZGdlcyBhcyB1bmtub3duIGFzIElzVGFnZ2VkVHlwZVtdKVxuICAgICAgICAgIC5maW5kKCh7bmFtZTogZXhpc3RpbmdUYWdOYW1lfSkgPT4gZXhpc3RpbmdUYWdOYW1lID09PSB0YWdOYW1lKSlcbiAgICAgICAgLm1hcCgoe19pZDogdGFnRG9jSWQgPSAnJywgdGFnQnl9KSA9PiBhZGRUYWdUb0l0ZW0oY29udGV4dCwge2l0ZW1Eb2NJZCwgdGFnQnksIHRhZ0RvY0lkfSkpXG4gICAgXSlcbiAgICAgIC50aGVuKCgpID0+IHRhZ3MpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBUSxjQUFBQSxFQUFZLGlCQUFBQyxFQUFlLFdBQUFDLEVBQVMsZ0JBQUFDLE1BQW1CLCtCQUMvRCxPQUFRLFNBQUFDLE1BQVksNkJBQ3BCLE9BQVEsT0FBQUMsTUFBVSxXQUlsQixPQUFRLFlBQUFDLE1BQWUsNEJBQ3ZCLE9BQVEsY0FBQUMsTUFBaUIsMEJBQ3pCLE9BQVEsWUFBQUMsTUFBZSw2QkFDdkIsT0FBUSxZQUFB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T0wsRUFBVyxjQUNwQixFQUFHbUIsRUFBTyxDQUFDLENBQUMsQ0FBQyxDQUNqQiIsCiAgIm5hbWVzIjogWyJjcmVhdGVIYXNoIiwgInBhcnNlQXJhbmdvSWQiLCAicGFyc2VJZCIsICJwYXJzZVZhckNoYXIiLCAid29yZHMiLCAiYXFsIiwgInBhcnNlVGFnIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAiZ2V0RG9jSWQiLCAiZ2V0TGltaXQiLCAidXNlRGIiLCAiZXZlbnRDYXRlZ29yeSIsICJnZXRUYWdzIiwgImNvbnRleHQiLCAib3B0aW9ucyIsICJhY3Rpb24iLCAiZGF0YWJhc2VOYW1lIiwgInNlYXJjaCIsICJmcm9tIiwgInRvIiwgInVzZXJJZCIsICJsaW1pdCIsICJmaWx0ZXJzIiwgImFxbFFyeSIsICJjdXJzb3IiLCAiZXJyb3IiLCAiZ2V0VGFnc0J5SXRlbSIsICJpdGVtRG9jSWQiLCAidGFnUXVlcnkiLCAiZ2V0VGFnIiwgInRhZ0lkIiwgImdldFRhZ3NCeU5hbWUiLCAidGFnTmFtZXMiLCAiZm9ybWF0VGFnTmFtZXMiLCAidGFnTmFtZSIsICJhZGRUYWciLCAidGFnIiwgIm5vdyIsICJkZXNjcmlwdGlvbiIsICJuYW1lIiwgImluc2VydCIsICJhZGRUYWdUb0l0ZW0iLCAidGFnQnkiLCAidGFnRG9jSWQiLCAic2Vzc2lvbklkIiwgImFkZGVkIiwgImZvcm1hdFRhZ0RvY0lkIiwgImZvcm1hdEl0ZW1Eb2NJZCIsICJlZGdlSWQiLCAiZWRnZUNvbGxlY3Rpb24iLCAidHlwZSIsICJmb3JtYXRUYWdCeSIsICJlZGdlIiwgInVwZGF0ZVRhZyIsICJmb3JtYXROYW1lIiwgInVwZGF0ZSIsICJuZXdUYWdLZXkiLCAiZGVsZXRlVGFnIiwgImZvcm1hdEl0ZW1JZCIsICJkZWxldGVUYWdGcm9tRWRnZSIsICJlZGdlRG9jSWQiLCAiZm9ybWF0RWRnZURvY0lkIiwgImRlbGV0ZVRhZ0Zyb21JdGVtIiwgIml0ZW1JZCIsICJpdGVtVHlwZSIsICJhcWxRdWVyeSIsICJleHRyYWN0VGFncyIsICJjb250ZW50IiwgInVwZGF0ZVRhZ3NJbkl0ZW0iLCAidGFncyIsICJlZGdlcyIsICJleGlzdGluZ1RhZ05hbWUiXQp9Cg==
194
+ RETURN OLD`;
195
+ return useDb(databaseName).query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>logError({
196
+ action,
197
+ category: eventCategory,
198
+ value: ErrorTypes.DATABASE_ERROR
199
+ }, error, {}));
200
+ };
201
+ export const deleteTagFromEdge = async (context, { tagDocId, edgeDocId })=>{
202
+ const action = 'deleteTagFromEdge';
203
+ const { databaseName } = context;
204
+ const formatTagDocId = parseArangoId(tagDocId);
205
+ const formatEdgeDocId = parseArangoId(edgeDocId);
206
+ const edgeCollection = useDb(databaseName).collection('isTagged');
207
+ const edge = {
208
+ _id: formatEdgeDocId
209
+ };
210
+ await edgeCollection.remove(edge, {
211
+ silent: true
212
+ }).catch((error)=>logError({
213
+ action,
214
+ category: eventCategory,
215
+ value: ErrorTypes.DATABASE_ERROR
216
+ }, error, {}));
217
+ const tagQuery = aql`LET t = DOCUMENT(${formatTagDocId}) RETURN t`;
218
+ return useDb(databaseName).query(tagQuery).then((cursor)=>cursor.next()).catch((error)=>logError({
219
+ action,
220
+ category: eventCategory,
221
+ value: ErrorTypes.DATABASE_ERROR
222
+ }, error, {}));
223
+ };
224
+ export const deleteTagFromItem = async (context, { tagId, itemId, itemType })=>{
225
+ const action = 'deleteTagFromItem';
226
+ const { databaseName } = context;
227
+ const formatTagDocId = parseArangoId(`tags/${tagId}`);
228
+ const formatItemDocId = parseArangoId(`${itemType}/${itemId}`);
229
+ const aqlQuery = `FOR it FROM isTagged
230
+ FILTER it._from == "${formatTagDocId}" || it._to == "${formatItemDocId}"
231
+ REMOVE it IN isTagged`;
232
+ return useDb(databaseName).query(aqlQuery).then(()=>true).catch((error)=>{
233
+ logError({
234
+ action,
235
+ category: eventCategory,
236
+ value: ErrorTypes.DATABASE_ERROR
237
+ }, error, {});
238
+ return false;
239
+ });
240
+ };
241
+ export const extractTags = (content)=>words(content, /#[a-zA-Z\d-]+/g).map((tag)=>parseId(tag));
242
+ export const updateTagsInItem = (context, { itemDocId, tags })=>{
243
+ const action = 'updateTagsInItem';
244
+ const { databaseName } = context;
245
+ const edgeCollection = useDb(databaseName).collection('isTagged');
246
+ return edgeCollection.inEdges(itemDocId, {}).then((edges)=>Promise.all([
247
+ ...edges.filter(({ name: existingTagName })=>!tags.find(({ name: tagName })=>existingTagName === tagName)).map(({ _id: edgeDocId, _from: tagDocId })=>deleteTagFromEdge(context, {
248
+ edgeDocId,
249
+ tagDocId
250
+ })),
251
+ ...tags.filter(({ name: tagName })=>!edges.find(({ name: existingTagName })=>existingTagName === tagName)).map(({ _id: tagDocId = '', tagBy })=>addTagToItem(context, {
252
+ itemDocId,
253
+ tagBy,
254
+ tagDocId
255
+ }))
256
+ ]).then(()=>tags)).catch((error)=>logError({
257
+ action,
258
+ category: eventCategory,
259
+ value: ErrorTypes.DATABASE_ERROR
260
+ }, error, {}));
261
+ };
262
+
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvdGFncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt3b3Jkc30gZnJvbSAnQG5sYWJzL3V0aWxzL3N0cmluZ3Mvd29yZHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0VkZ2V9IGZyb20gJ2FyYW5nb2pzL2RvY3VtZW50cyc7XG5cbmltcG9ydCB7cGFyc2VUYWd9IGZyb20gJy4uL2FkYXB0ZXJzL3RhZ0FkYXB0ZXIuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7SXNUYWdnZWRUeXBlLCBUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3RhZ3MnO1xuZXhwb3J0IGludGVyZmFjZSBUYWdPcHRpb25zIHtcbiAgcmVhZG9ubHkgZnJvbT86IG51bWJlcjtcbiAgcmVhZG9ubHkgc2VhcmNoPzogc3RyaW5nO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbiAgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgb3B0aW9uczogVGFnT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7c2VhcmNoID0gJycsIGZyb20gPSAwLCB0byA9IDMwLCB1c2VySWR9ID0gb3B0aW9ucztcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG5cbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbXTtcblxuICBpZihzZWFyY2gpIHtcbiAgICBmaWx0ZXJzLnB1c2goYExJS0UodC5uYW1lLCBcIiUke3NlYXJjaH0lXCIpYCk7XG4gIH1cblxuICBpZih1c2VySWQpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHQudXNlcklkID09IFwiJHt1c2VySWR9XCJgKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyB8fCAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIHQubmFtZVxuICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgVGFnVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pO1xuXG4gICAgICByZXR1cm4gW10gYXMgVGFnVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhZ3NCeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1Eb2NJZDogc3RyaW5nLFxuICBvcHRpb25zOiBUYWdPcHRpb25zID0ge31cbik6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFRhZ3NCeUl0ZW0nO1xuICBjb25zdCB7ZnJvbSA9IDAsIHRvID0gMzB9ID0gb3B0aW9ucztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1Eb2NJZCk7XG4gIGNvbnN0IHRhZ1F1ZXJ5OiBzdHJpbmcgPSBgRk9SIHQsIGl0IElOIElOQk9VTkQgXCIke2Zvcm1hdEl0ZW1JZH1cIiBpc1RhZ2dlZFxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgaXQuYWRkZWRcbiAgICBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkodGFnUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgVGFnVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pO1xuXG4gICAgICByZXR1cm4gW10gYXMgVGFnVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0YWdJZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFRhZyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQodGFnSWQpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSIHQuX2tleSA9PSBcIiR7Zm9ybWF0SWR9XCJcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFnc0J5TmFtZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0YWdOYW1lczogc3RyaW5nW10pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRUYWdzQnlOYW1lJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRUYWdOYW1lcyA9IHRhZ05hbWVzXG4gICAgLm1hcCgodGFnTmFtZSkgPT4gcGFyc2VWYXJDaGFyKHRhZ05hbWUsIDMyKSlcbiAgICAuZmlsdGVyKCh0YWdOYW1lKSA9PiAhIXRhZ05hbWUpO1xuXG4gIGlmKCFmb3JtYXRUYWdOYW1lcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHQgSU4gdGFnc1xuICAgIEZJTFRFUiBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFRhZ05hbWVzKX0sIHQubmFtZSlcbiAgICBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFRhZ1R5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIHt9KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFRhZ1R5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnOiBUYWdUeXBlKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFRhZyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7ZGVzY3JpcHRpb24sIG5hbWV9ID0gcGFyc2VUYWcodGFnKTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHRhZy0ke25hbWU/LnRvTG93ZXJDYXNlKCl9YCk7XG4gIGNvbnN0IGluc2VydDogVGFnVHlwZSA9IHtcbiAgICBfa2V5OiBmb3JtYXRJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGRlc2NyaXB0aW9uOiBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDY0KSxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IHBhcnNlVmFyQ2hhcihuYW1lLCAzMilcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRUYWdUb0l0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtpdGVtRG9jSWQsIHRhZ0J5ID0gJycsIHRhZ0RvY0lkfToge2l0ZW1Eb2NJZDogc3RyaW5nLCB0YWdCeT86IHN0cmluZywgdGFnRG9jSWQ6IHN0cmluZ31cbik6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRUYWdUb0l0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgYWRkZWQ6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdFRhZ0RvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHRhZ0RvY0lkKTtcbiAgY29uc3QgZm9ybWF0SXRlbURvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1Eb2NJZCk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaXNUYWdnZWQtJHtmb3JtYXRUYWdEb2NJZH0tJHtmb3JtYXRJdGVtRG9jSWR9YCk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaXNUYWdnZWQnKTtcbiAgY29uc3QgdHlwZTogc3RyaW5nID0gZm9ybWF0SXRlbURvY0lkLnNwbGl0KCcvJylbMF07XG4gIGNvbnN0IGZvcm1hdFRhZ0J5OiBzdHJpbmcgPSBwYXJzZUlkKHRhZ0J5KSB8fCBzZXNzaW9uSWQgfHwgJyc7XG4gIGNvbnN0IGVkZ2U6IEVkZ2UgPSB7X2Zyb206IGZvcm1hdFRhZ0RvY0lkLCBfa2V5OiBlZGdlSWQsIF90bzogZm9ybWF0SXRlbURvY0lkLCBhZGRlZCwgdGFnQnk6IGZvcm1hdFRhZ0J5LCB0eXBlfTtcblxuICBhd2FpdCBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtvdmVyd3JpdGVNb2RlOiAnaWdub3JlJywgcmV0dXJuTmV3OiB0cnVlLCBzaWxlbnQ6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlZGdlXG4gICAgICB9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge30pKTtcblxuICBjb25zdCB0YWdRdWVyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHQgPSBET0NVTUVOVCgke2Zvcm1hdFRhZ0RvY0lkfSkgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHRhZ1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGVkZ2VcbiAgICAgIH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7fSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0YWc6IFRhZ1R5cGUpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlVGFnJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge2Rlc2NyaXB0aW9uLCBuYW1lLCB0YWdJZH0gPSBwYXJzZVRhZyh0YWcpO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIobmFtZSwgMzIpO1xuICBjb25zdCB1cGRhdGU6IFRhZ1R5cGUgPSB7XG4gICAgZGVzY3JpcHRpb246IHBhcnNlVmFyQ2hhcihkZXNjcmlwdGlvbiwgNjQpLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogZm9ybWF0TmFtZVxuICB9O1xuICBjb25zdCBuZXdUYWdLZXk6IHN0cmluZyA9IHRhZ0lkIHx8IGNyZWF0ZUhhc2goYHRhZy0ke2Zvcm1hdE5hbWUudG9Mb3dlckNhc2UoKX1gKTtcbiAgY29uc3QgaW5zZXJ0OiBUYWdUeXBlID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfaWQ6IGB0YWdzLyR7bmV3VGFnS2V5fWAsXG4gICAgX2tleTogbmV3VGFnS2V5LFxuICAgIGFkZGVkOiBub3csXG4gICAgdGFnQnk6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7bmFtZTogJHtmb3JtYXROYW1lfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVUYWcgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnOiBUYWdUeXBlKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVRhZyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gZ2V0RG9jSWQoJ3RhZ3MnLCB0YWcpO1xuICBjb25zdCB0YWdRdWVyeTogc3RyaW5nID0gYEZPUiBpdCBGUk9NIGlzVGFnZ2VkXG4gICAgRklMVEVSIGl0Ll9mcm9tID09IFwiJHtmb3JtYXRJdGVtSWR9XCIgfHwgaXQuX3RvID09IFwiJHtmb3JtYXRJdGVtSWR9XCJcbiAgICBSRU1PVkUgaXQgSU4gaXNUYWdnZWRcbiAgICBSRVRVUk4gT0xEYDtcblxuICBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHRhZ1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7fSkpO1xuXG4gIGNvbnN0IGFxbFFyeSA9IGBMRVQgdCA9IERPQ1VNRU5UKCR7Zm9ybWF0SXRlbUlkfSlcbiAgICBSRU1PVkUgdCBJTiB0YWdzXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVUYWdGcm9tRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB7dGFnRG9jSWQsIGVkZ2VEb2NJZH0pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVRhZ0Zyb21FZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRUYWdEb2NJZCA9IHBhcnNlQXJhbmdvSWQodGFnRG9jSWQpO1xuICBjb25zdCBmb3JtYXRFZGdlRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGVkZ2VEb2NJZCk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaXNUYWdnZWQnKTtcbiAgY29uc3QgZWRnZSA9IHtfaWQ6IGZvcm1hdEVkZ2VEb2NJZH07XG5cbiAgYXdhaXQgZWRnZUNvbGxlY3Rpb24ucmVtb3ZlKGVkZ2UsIHtzaWxlbnQ6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG5cbiAgY29uc3QgdGFnUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCB0ID0gRE9DVU1FTlQoJHtmb3JtYXRUYWdEb2NJZH0pIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh0YWdRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHt9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnRnJvbUl0ZW0gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwge3RhZ0lkLCBpdGVtSWQsIGl0ZW1UeXBlfSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVGFnRnJvbUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFRhZ0RvY0lkID0gcGFyc2VBcmFuZ29JZChgdGFncy8ke3RhZ0lkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gKTtcblxuICBjb25zdCBhcWxRdWVyeTogc3RyaW5nID0gYEZPUiBpdCBGUk9NIGlzVGFnZ2VkXG4gICAgRklMVEVSIGl0Ll9mcm9tID09IFwiJHtmb3JtYXRUYWdEb2NJZH1cIiB8fCBpdC5fdG8gPT0gXCIke2Zvcm1hdEl0ZW1Eb2NJZH1cIlxuICAgIFJFTU9WRSBpdCBJTiBpc1RhZ2dlZGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIHt9KTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUYWdzID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZ1tdID0+XG4gIHdvcmRzKGNvbnRlbnQsIC8jW2EtekEtWlxcZC1dKy9nKS5tYXAoKHRhZzogc3RyaW5nKSA9PiBwYXJzZUlkKHRhZykpO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGFnc0luSXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB7aXRlbURvY0lkLCB0YWdzfSk6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVUYWdzSW5JdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaXNUYWdnZWQnKSBhcyBFZGdlQ29sbGVjdGlvbjxUYWdUeXBlPjtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uaW5FZGdlcyhpdGVtRG9jSWQsIHt9KVxuICAgIC50aGVuKChlZGdlcykgPT4gUHJvbWlzZS5hbGwoW1xuICAgICAgLi4uKGVkZ2VzIGFzIHVua25vd24gYXMgSXNUYWdnZWRUeXBlW10pXG4gICAgICAgIC5maWx0ZXIoKHtuYW1lOiBleGlzdGluZ1RhZ05hbWV9KSA9PiAhdGFncy5maW5kKCh7bmFtZTogdGFnTmFtZX0pID0+IGV4aXN0aW5nVGFnTmFtZSA9PT0gdGFnTmFtZSkpXG4gICAgICAgIC5tYXAoKHtfaWQ6IGVkZ2VEb2NJZCwgX2Zyb206IHRhZ0RvY0lkfSkgPT4gZGVsZXRlVGFnRnJvbUVkZ2UoY29udGV4dCwge2VkZ2VEb2NJZCwgdGFnRG9jSWR9KSksXG4gICAgICAuLi4odGFncyBhcyB1bmtub3duIGFzIFRhZ1R5cGVbXSlcbiAgICAgICAgLmZpbHRlcigoe25hbWU6IHRhZ05hbWV9KSA9PiAhKGVkZ2VzIGFzIHVua25vd24gYXMgSXNUYWdnZWRUeXBlW10pXG4gICAgICAgICAgLmZpbmQoKHtuYW1lOiBleGlzdGluZ1RhZ05hbWV9KSA9PiBleGlzdGluZ1RhZ05hbWUgPT09IHRhZ05hbWUpKVxuICAgICAgICAubWFwKCh7X2lkOiB0YWdEb2NJZCA9ICcnLCB0YWdCeX0pID0+IGFkZFRhZ1RvSXRlbShjb250ZXh0LCB7aXRlbURvY0lkLCB0YWdCeSwgdGFnRG9jSWR9KSlcbiAgICBdKVxuICAgICAgLnRoZW4oKCkgPT4gdGFncykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge30pKTtcbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUlkIiwicGFyc2VWYXJDaGFyIiwid29yZHMiLCJhcWwiLCJwYXJzZVRhZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImdldERvY0lkIiwiZ2V0TGltaXQiLCJ1c2VEYiIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRUYWdzIiwiY29udGV4dCIsIm9wdGlvbnMiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJzZWFyY2giLCJmcm9tIiwidG8iLCJ1c2VySWQiLCJsaW1pdCIsImZpbHRlcnMiLCJwdXNoIiwiYXFsUXJ5Iiwiam9pbiIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsInZhbHVlIiwiREFUQUJBU0VfRVJST1IiLCJnZXRUYWdzQnlJdGVtIiwiaXRlbURvY0lkIiwiZm9ybWF0SXRlbUlkIiwidGFnUXVlcnkiLCJnZXRUYWciLCJ0YWdJZCIsImZvcm1hdElkIiwibmV4dCIsImdldFRhZ3NCeU5hbWUiLCJ0YWdOYW1lcyIsImZvcm1hdFRhZ05hbWVzIiwibWFwIiwidGFnTmFtZSIsImZpbHRlciIsImxlbmd0aCIsIlByb21pc2UiLCJyZXNvbHZlIiwiSlNPTiIsInN0cmluZ2lmeSIsImFkZFRhZyIsInRhZyIsIm5vdyIsIkRhdGUiLCJkZXNjcmlwdGlvbiIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImluc2VydCIsIl9rZXkiLCJhZGRlZCIsIm1vZGlmaWVkIiwiYWRkVGFnVG9JdGVtIiwidGFnQnkiLCJ0YWdEb2NJZCIsInNlc3Npb24iLCJzZXNzaW9uSWQiLCJmb3JtYXRUYWdEb2NJZCIsImZvcm1hdEl0ZW1Eb2NJZCIsImVkZ2VJZCIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInR5cGUiLCJzcGxpdCIsImZvcm1hdFRhZ0J5IiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwic2F2ZSIsIm92ZXJ3cml0ZU1vZGUiLCJyZXR1cm5OZXciLCJzaWxlbnQiLCJwYXJhbXMiLCJ1cGRhdGVUYWciLCJmb3JtYXROYW1lIiwidXBkYXRlIiwibmV3VGFnS2V5IiwiX2lkIiwiZGVsZXRlVGFnIiwiZGVsZXRlVGFnRnJvbUVkZ2UiLCJlZGdlRG9jSWQiLCJmb3JtYXRFZGdlRG9jSWQiLCJyZW1vdmUiLCJkZWxldGVUYWdGcm9tSXRlbSIsIml0ZW1JZCIsIml0ZW1UeXBlIiwiYXFsUXVlcnkiLCJleHRyYWN0VGFncyIsImNvbnRlbnQiLCJ1cGRhdGVUYWdzSW5JdGVtIiwidGFncyIsImluRWRnZXMiLCJlZGdlcyIsImV4aXN0aW5nVGFnTmFtZSIsImZpbmQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxPQUFPLEVBQUVDLFlBQVksUUFBTywrQkFBK0I7QUFDOUYsU0FBUUMsS0FBSyxRQUFPLDZCQUE2QjtBQUNqRCxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUk3QixTQUFRQyxRQUFRLFFBQU8sNEJBQTRCO0FBQ25ELFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxRQUFPLDRCQUE0QjtBQU9wRSxNQUFNQyxnQkFBd0I7QUFROUIsT0FBTyxNQUFNQyxVQUFVLENBQ3JCQyxTQUNBQyxVQUFzQixDQUFDLENBQUM7SUFFeEIsTUFBTUMsU0FBaUI7SUFDdkIsTUFBTSxFQUFDQyxZQUFZLEVBQUMsR0FBR0g7SUFDdkIsTUFBTSxFQUFDSSxTQUFTLEVBQUUsRUFBRUMsT0FBTyxDQUFDLEVBQUVDLEtBQUssRUFBRSxFQUFFQyxNQUFNLEVBQUMsR0FBR047SUFDakQsTUFBTU8sUUFBdUJaLFNBQVNTLE1BQU1DO0lBRTVDLE1BQU1HLFVBQW9CLEVBQUU7SUFFNUIsSUFBR0wsUUFBUTtRQUNUSyxRQUFRQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUVOLE9BQU8sR0FBRyxDQUFDO0lBQzVDO0lBRUEsSUFBR0csUUFBUTtRQUNURSxRQUFRQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUVILE9BQU8sQ0FBQyxDQUFDO0lBQ3hDO0lBRUEsTUFBTUksU0FBaUIsQ0FBQztXQUNmLEVBQUVGLFFBQVFHLElBQUksQ0FBQyxRQUFRO0lBQzlCLEVBQUVKLE1BQU1qQixHQUFHLENBQUM7O1lBRUosQ0FBQztJQUVYLE9BQU9NLE1BQU1NLGNBQWNVLEtBQUssQ0FBQ0YsUUFD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
@@ -71,3 +71,4 @@ export declare const signOut: (context: ApiContext) => Promise<boolean>;
71
71
  export declare const getActiveUserCount: (context: ApiContext) => Promise<number>;
72
72
  export declare const getUserByToken: (context: ApiContext, token: string) => Promise<UserType>;
73
73
  export {};
74
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/actions/users.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAa,KAAK,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAItE,OAAO,EAAyB,KAAK,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAMnF,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAKjE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,oBAAY,UAAU;IACpB,WAAW,IAAI;IACf,MAAM,IAAI;IACV,OAAO,IAAI;IACX,aAAa,IAAI;IACjB,KAAK,IAAI;CACV;AAED,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,WAAU,MAAW,EACrB,aAAY,MAAU,EACtB,mBAAkB,MAAW,KAC5B,YAoBF,CAAC;AAEF,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,eAAO,MAAM,eAAe,GAAI,SAAQ,MAAM,EAAO,KAAG,iBAOxB,CAAC;AAEjC,eAAO,MAAM,gBAAgB,GAAI,UAAS,WAAgB;;WAtDxC,MAAM;SACR,MAAM;eACA,MAAM;CA+D3B,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,SAAS,UAAU,EAAE,MAAM,SAAS,KAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAwG3F,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,SAAS,UAAU,EAAE,MAAM,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAiDtF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,SAAS,UAAU,EAAE;;;;CAAwB,KAAG,OAAO,CAAC,OAAO,CA2DnG,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,UAAU,EACnB,oCAKG;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB,KACA,OAAO,CAAC,OAAO,CAgEjB,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,UAAU,EACnB,uBAIG;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,KACA,OAAO,CAAC,OAAO,CAiDjB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,SAAS,UAAU,EAAE,MAAM,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAsBhF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,EAAE,MAAM,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAmBpF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,QAAQ,KAAG,MAa/C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,KAAG,OAAO,CAAC,QAAQ,CAoBpE,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,SAAS,UAAU,EAAE,MAAM,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAuC7E,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,SAAS,UAAU,EAAE,UAAU,WAAW,KAAG,OAAO,CAAC,QAAQ,EAAE,CA6BvF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,UAAU,EACnB,yBAA4B;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAC,EACrE,UAAU,WAAW,KACpB,OAAO,CAAC,QAAQ,EAAE,CAmCpB,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,UAAU,EACnB;;;CAAgB,EAChB,UAAU,WAAW,KACpB,OAAO,CAAC,QAAQ,EAAE,CA0CpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,UAAU,EAAE;;CAAU,EAAE,UAAU,WAAW,KAAG,OAAO,CAAC,QAAQ,EAAE,CAmC3G,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,UAAU,EACnB,YAAU,QAAQ,EAClB,UAAU,WAAW,KACpB,OAAO,CAAC,QAAQ,EAAE,CAkCpB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI;;;CAAgB,KAAG,YAAY,GAAG,YAOhE,CAAC;AAEF,eAAO,MAAM,MAAM,GAAU,SAAS,UAAU,EAAE,SAAI,KAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CA4FnF,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,SAAS,UAAU,KAAG,OAAO,CAAC,OAAO,CA4BlE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,SAAS,UAAU,KAAG,OAAO,CAAC,MAAM,CAmBtE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,QAAQ,CAkBnF,CAAC"}