@nlabs/reaktor 0.10.1 → 0.10.5

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 (494) hide show
  1. package/coverage/actions/index.html +21 -36
  2. package/coverage/actions/notifications.ts.html +223 -0
  3. package/coverage/actions/posts.ts.html +2356 -0
  4. package/coverage/adapters/arangoAdapter.ts.html +170 -20
  5. package/coverage/adapters/fileAdapter.ts.html +445 -0
  6. package/coverage/adapters/index.html +72 -42
  7. package/coverage/adapters/postAdapter.ts.html +436 -0
  8. package/coverage/adapters/reaktorAdapter.ts.html +201 -18
  9. package/coverage/adapters/tagAdapter.ts.html +274 -25
  10. package/coverage/adapters/userAdapter.ts.html +829 -0
  11. package/coverage/analyticsUtils.ts.html +286 -0
  12. package/coverage/block-navigation.js +1 -1
  13. package/coverage/config.ts.html +766 -0
  14. package/coverage/index.html +83 -53
  15. package/coverage/mocks/group.ts.html +5 -5
  16. package/coverage/mocks/image.ts.html +18 -12
  17. package/coverage/mocks/index.html +37 -7
  18. package/coverage/mocks/post.ts.html +8 -8
  19. package/coverage/mocks/tag.ts.html +2 -2
  20. package/coverage/mocks/user.ts.html +18 -15
  21. package/coverage/sorter.js +21 -7
  22. package/coverage/testUtils.ts.html +1309 -0
  23. package/coverage/translationQueue.ts.html +592 -0
  24. package/coverage/types/error.types.ts.html +148 -0
  25. package/coverage/types/index.html +2 -2
  26. package/coverage/utils/adapterUtils.ts.html +39 -27
  27. package/coverage/utils/analyticsUtils.ts.html +35 -41
  28. package/coverage/utils/authUtils.ts.html +328 -0
  29. package/coverage/utils/dbI18n.ts.html +280 -0
  30. package/coverage/utils/googleTranslate.ts.html +385 -0
  31. package/coverage/utils/index.html +29 -44
  32. package/coverage/utils/localeUtils.ts.html +193 -0
  33. package/coverage/utils/sessionUtils.ts.html +211 -0
  34. package/coverage/utils/testUtils.ts.html +1309 -0
  35. package/lex.config.mjs +34 -0
  36. package/lib/actions/apps.d.ts +25 -0
  37. package/lib/actions/connections.d.ts +5 -0
  38. package/lib/actions/content.d.ts +13 -0
  39. package/lib/actions/conversations.d.ts +16 -0
  40. package/lib/actions/dynamodb.d.ts +12 -0
  41. package/lib/actions/email.d.ts +8 -0
  42. package/lib/actions/files.d.ts +19 -0
  43. package/lib/actions/groups.d.ts +13 -0
  44. package/lib/actions/images.d.ts +33 -0
  45. package/lib/actions/index.d.ts +28 -0
  46. package/lib/actions/ios.d.ts +7 -0
  47. package/lib/actions/locations.d.ts +6 -0
  48. package/lib/actions/messages.d.ts +13 -0
  49. package/lib/actions/notifications.d.ts +9 -0
  50. package/lib/actions/payments.d.ts +12 -0
  51. package/lib/actions/posts.d.ts +25 -0
  52. package/lib/actions/profiles.d.ts +4 -0
  53. package/lib/actions/reactions.d.ts +32 -0
  54. package/lib/actions/s3.d.ts +11 -0
  55. package/lib/actions/search.d.ts +3 -0
  56. package/lib/actions/sms.d.ts +2 -0
  57. package/lib/actions/statistics.d.ts +4 -0
  58. package/lib/actions/subscriptions.d.ts +7 -0
  59. package/lib/actions/tags.d.ts +34 -0
  60. package/lib/actions/users.d.ts +73 -0
  61. package/lib/actions/videos.d.ts +25 -0
  62. package/lib/actions/websockets.d.ts +20 -0
  63. package/lib/adapters/arangoAdapter.d.ts +8 -0
  64. package/lib/adapters/contentAdapter.d.ts +8 -0
  65. package/lib/adapters/fileAdapter.d.ts +9 -0
  66. package/lib/adapters/imageAdapter.d.ts +8 -0
  67. package/lib/adapters/index.d.ts +9 -0
  68. package/lib/adapters/messageAdapter.d.ts +8 -0
  69. package/lib/adapters/postAdapter.d.ts +8 -0
  70. package/lib/adapters/reaktorAdapter.d.ts +16 -0
  71. package/lib/adapters/tagAdapter.d.ts +9 -0
  72. package/lib/adapters/userAdapter.d.ts +13 -0
  73. package/lib/config.d.ts +57 -0
  74. package/lib/handlers/graphqlHandler.d.ts +4 -0
  75. package/lib/index.d.ts +19 -0
  76. package/lib/lambdas/actions/websockets.d.ts +7 -0
  77. package/lib/lambdas/authorizer.d.ts +20 -0
  78. package/lib/lambdas/connection.d.ts +12 -0
  79. package/lib/lambdas/utils/message.d.ts +1 -0
  80. package/lib/lambdas/utils/websocket.d.ts +7 -0
  81. package/lib/mocks/conversation.d.ts +8 -0
  82. package/lib/mocks/file.d.ts +11 -0
  83. package/lib/mocks/group.d.ts +17 -0
  84. package/lib/mocks/image.d.ts +3 -0
  85. package/lib/mocks/post.d.ts +38 -0
  86. package/lib/mocks/tag.d.ts +2 -0
  87. package/lib/mocks/user.d.ts +4 -0
  88. package/lib/mocks/video.d.ts +3 -0
  89. package/lib/mutations/content.d.ts +2 -0
  90. package/lib/mutations/index.d.ts +11 -0
  91. package/lib/mutations/locations.d.ts +2 -0
  92. package/lib/mutations/messages.d.ts +2 -0
  93. package/lib/mutations/posts.d.ts +2 -0
  94. package/lib/mutations/profiles.d.ts +2 -0
  95. package/lib/mutations/reactions.d.ts +2 -0
  96. package/lib/mutations/statistics.d.ts +2 -0
  97. package/lib/mutations/subscriptions.d.ts +2 -0
  98. package/lib/mutations/tags.d.ts +2 -0
  99. package/lib/mutations/users.d.ts +1 -0
  100. package/lib/objectTypes/app.d.ts +3 -0
  101. package/lib/objectTypes/bankAccount.d.ts +1 -0
  102. package/lib/objectTypes/connection.d.ts +1 -0
  103. package/lib/objectTypes/content.d.ts +2 -0
  104. package/lib/objectTypes/conversation.d.ts +2 -0
  105. package/lib/objectTypes/creditCard.d.ts +1 -0
  106. package/lib/objectTypes/document.d.ts +1 -0
  107. package/lib/objectTypes/error.d.ts +1 -0
  108. package/lib/objectTypes/external.d.ts +1 -0
  109. package/lib/objectTypes/file.d.ts +2 -0
  110. package/lib/objectTypes/filter.d.ts +1 -0
  111. package/lib/objectTypes/group.d.ts +3 -0
  112. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  113. package/lib/objectTypes/image.d.ts +6 -0
  114. package/lib/objectTypes/index.d.ts +26 -0
  115. package/lib/objectTypes/location.d.ts +2 -0
  116. package/lib/objectTypes/message.d.ts +2 -0
  117. package/lib/objectTypes/passcode.d.ts +1 -0
  118. package/lib/objectTypes/plan.d.ts +2 -0
  119. package/lib/objectTypes/post.d.ts +2 -0
  120. package/lib/objectTypes/profile.d.ts +3 -0
  121. package/lib/objectTypes/reaction.d.ts +2 -0
  122. package/lib/objectTypes/relation.d.ts +1 -0
  123. package/lib/objectTypes/search.d.ts +1 -0
  124. package/lib/objectTypes/statistics.d.ts +1 -0
  125. package/lib/objectTypes/subscription.d.ts +2 -0
  126. package/lib/objectTypes/tag.d.ts +2 -0
  127. package/lib/objectTypes/user.d.ts +4 -0
  128. package/lib/queries/content.d.ts +2 -0
  129. package/lib/queries/index.d.ts +10 -0
  130. package/lib/queries/locations.d.ts +2 -0
  131. package/lib/queries/messages.d.ts +2 -0
  132. package/lib/queries/posts.d.ts +2 -0
  133. package/lib/queries/reactions.d.ts +2 -0
  134. package/lib/queries/statistics.d.ts +2 -0
  135. package/lib/queries/subscriptions.d.ts +2 -0
  136. package/lib/queries/tags.d.ts +2 -0
  137. package/lib/queries/users.d.ts +1 -0
  138. package/lib/templates/email/layout.d.ts +2 -0
  139. package/lib/templates/email/passwordForgot.d.ts +2 -0
  140. package/lib/templates/email/passwordRecovery.d.ts +2 -0
  141. package/lib/templates/email/verifyEmail.d.ts +2 -0
  142. package/lib/templates/email/welcome.d.ts +2 -0
  143. package/lib/templates/sms/passwordForgot.d.ts +2 -0
  144. package/lib/templates/sms/passwordRecovery.d.ts +2 -0
  145. package/lib/templates/sms/verifyEmail.d.ts +2 -0
  146. package/lib/templates/sms/verifyPhone.d.ts +2 -0
  147. package/lib/templates/sms/welcome.d.ts +2 -0
  148. package/lib/types/apps.types.d.ts +50 -0
  149. package/lib/types/arangodb.types.d.ts +38 -0
  150. package/lib/types/auth.types.d.ts +15 -0
  151. package/lib/types/connections.types.d.ts +9 -0
  152. package/lib/types/content.types.d.ts +31 -0
  153. package/lib/types/conversations.types.d.ts +31 -0
  154. package/lib/types/email.types.d.ts +17 -0
  155. package/lib/types/error.types.d.ts +21 -0
  156. package/lib/types/files.types.d.ts +27 -0
  157. package/lib/types/google.types.d.ts +33 -0
  158. package/lib/types/groups.types.d.ts +22 -0
  159. package/lib/types/images.types.d.ts +56 -0
  160. package/lib/types/index.d.ts +27 -0
  161. package/lib/types/locations.types.d.ts +22 -0
  162. package/lib/types/messages.types.d.ts +20 -0
  163. package/lib/types/notifications.types.d.ts +23 -0
  164. package/lib/types/payments.types.d.ts +113 -0
  165. package/lib/types/posts.types.d.ts +32 -0
  166. package/lib/types/profiles.types.d.ts +20 -0
  167. package/lib/types/statistics.types.d.ts +3 -0
  168. package/lib/types/tags.types.d.ts +19 -0
  169. package/lib/types/users.types.d.ts +110 -0
  170. package/lib/types/videos.types.d.ts +46 -0
  171. package/lib/types/websockets.types.d.ts +22 -0
  172. package/lib/utils/adapterUtils.d.ts +5 -0
  173. package/lib/utils/analyticsUtils.d.ts +25 -0
  174. package/lib/utils/arangodbUtils.d.ts +70 -0
  175. package/lib/utils/authUtils.d.ts +23 -0
  176. package/lib/utils/contextUtils.d.ts +3 -0
  177. package/lib/utils/dbI18n.d.ts +10 -0
  178. package/lib/utils/dbI18n.example.d.ts +20 -0
  179. package/lib/utils/googleTranslate.d.ts +6 -0
  180. package/lib/utils/graphqlUtils.d.ts +10 -0
  181. package/lib/utils/index.d.ts +18 -0
  182. package/lib/utils/languageDetection.d.ts +8 -0
  183. package/lib/utils/localeUtils.d.ts +11 -0
  184. package/lib/utils/localeUtils.example.d.ts +5 -0
  185. package/lib/utils/middlewareUtils.d.ts +2 -0
  186. package/lib/utils/sessionUtils.d.ts +18 -0
  187. package/lib/utils/stripeUtils.d.ts +7 -0
  188. package/lib/utils/templateUtils.d.ts +3 -0
  189. package/lib/utils/testUtils.d.ts +95 -0
  190. package/lib/utils/translationQueue.d.ts +29 -0
  191. package/lib/utils/translationQueue.example.d.ts +33 -0
  192. package/package.json +28 -28
  193. package/tsconfig.build.json +21 -0
  194. package/tsconfig.lint.json +33 -0
  195. package/tsconfig.test.json +31 -0
  196. package/dist/actions/apps.js +0 -242
  197. package/dist/actions/connections.js +0 -90
  198. package/dist/actions/conversations.js +0 -350
  199. package/dist/actions/dynamodb.js +0 -150
  200. package/dist/actions/email.js +0 -152
  201. package/dist/actions/files.js +0 -283
  202. package/dist/actions/groups.js +0 -292
  203. package/dist/actions/images.js +0 -735
  204. package/dist/actions/index.js +0 -66
  205. package/dist/actions/ios.js +0 -164
  206. package/dist/actions/locations.js +0 -122
  207. package/dist/actions/messages.js +0 -208
  208. package/dist/actions/notifications.js +0 -59
  209. package/dist/actions/payments.js +0 -497
  210. package/dist/actions/personas.js +0 -110
  211. package/dist/actions/posts.js +0 -595
  212. package/dist/actions/reactions.js +0 -322
  213. package/dist/actions/s3.js +0 -133
  214. package/dist/actions/search.js +0 -90
  215. package/dist/actions/sms.js +0 -108
  216. package/dist/actions/statistics.js +0 -62
  217. package/dist/actions/subscription.js +0 -220
  218. package/dist/actions/tags.js +0 -292
  219. package/dist/actions/users.js +0 -784
  220. package/dist/actions/websockets.js +0 -174
  221. package/dist/adapters/arangoAdapter.js +0 -46
  222. package/dist/adapters/fileAdapter.js +0 -76
  223. package/dist/adapters/imageAdapter.js +0 -40
  224. package/dist/adapters/messageAdapter.js +0 -49
  225. package/dist/adapters/postAdapter.js +0 -70
  226. package/dist/adapters/reaktorAdapter.js +0 -44
  227. package/dist/adapters/tagAdapter.js +0 -50
  228. package/dist/adapters/userAdapter.js +0 -115
  229. package/dist/config.js +0 -125
  230. package/dist/index.js +0 -66
  231. package/dist/lambdas/actions/websockets.js +0 -132
  232. package/dist/lambdas/authorizer.js +0 -67
  233. package/dist/lambdas/connection.js +0 -91
  234. package/dist/lambdas/utils/message.js +0 -42
  235. package/dist/lambdas/utils/websocket.js +0 -105
  236. package/dist/mocks/conversation.js +0 -35
  237. package/dist/mocks/file.js +0 -38
  238. package/dist/mocks/group.js +0 -47
  239. package/dist/mocks/image.js +0 -44
  240. package/dist/mocks/nlabs.png +0 -0
  241. package/dist/mocks/post.js +0 -55
  242. package/dist/mocks/tag.js +0 -37
  243. package/dist/mocks/user.js +0 -88
  244. package/dist/mutations/index.js +0 -26
  245. package/dist/mutations/locations.js +0 -44
  246. package/dist/mutations/messages.js +0 -86
  247. package/dist/mutations/personas.js +0 -100
  248. package/dist/mutations/posts.js +0 -53
  249. package/dist/mutations/reactions.js +0 -51
  250. package/dist/mutations/statistics.js +0 -39
  251. package/dist/mutations/subscriptions.js +0 -56
  252. package/dist/mutations/tags.js +0 -120
  253. package/dist/mutations/users.js +0 -116
  254. package/dist/objectTypes/app.js +0 -173
  255. package/dist/objectTypes/bankAccount.js +0 -76
  256. package/dist/objectTypes/connection.js +0 -48
  257. package/dist/objectTypes/conversation.js +0 -77
  258. package/dist/objectTypes/creditCard.js +0 -86
  259. package/dist/objectTypes/document.js +0 -46
  260. package/dist/objectTypes/error.js +0 -46
  261. package/dist/objectTypes/external.js +0 -74
  262. package/dist/objectTypes/file.js +0 -100
  263. package/dist/objectTypes/filter.js +0 -43
  264. package/dist/objectTypes/group.js +0 -123
  265. package/dist/objectTypes/iapSubscription.js +0 -40
  266. package/dist/objectTypes/image.js +0 -129
  267. package/dist/objectTypes/index.js +0 -68
  268. package/dist/objectTypes/location.js +0 -109
  269. package/dist/objectTypes/message.js +0 -96
  270. package/dist/objectTypes/passcode.js +0 -42
  271. package/dist/objectTypes/persona.js +0 -87
  272. package/dist/objectTypes/plan.js +0 -95
  273. package/dist/objectTypes/post.js +0 -125
  274. package/dist/objectTypes/reaction.js +0 -61
  275. package/dist/objectTypes/relation.js +0 -49
  276. package/dist/objectTypes/search.js +0 -72
  277. package/dist/objectTypes/statistics.js +0 -39
  278. package/dist/objectTypes/subscription.js +0 -117
  279. package/dist/objectTypes/tag.js +0 -65
  280. package/dist/objectTypes/user.js +0 -144
  281. package/dist/queries/index.js +0 -33
  282. package/dist/queries/locations.js +0 -45
  283. package/dist/queries/messages.js +0 -52
  284. package/dist/queries/posts.js +0 -154
  285. package/dist/queries/reactions.js +0 -56
  286. package/dist/queries/statistics.js +0 -39
  287. package/dist/queries/subscriptions.js +0 -44
  288. package/dist/queries/tags.js +0 -75
  289. package/dist/queries/users.js +0 -64
  290. package/dist/templates/email/layout.js +0 -302
  291. package/dist/templates/email/passwordForgot.js +0 -38
  292. package/dist/templates/email/passwordRecovery.js +0 -35
  293. package/dist/templates/email/verifyEmail.js +0 -38
  294. package/dist/templates/email/welcome.js +0 -38
  295. package/dist/templates/sms/passwordForgot.js +0 -24
  296. package/dist/templates/sms/passwordRecovery.js +0 -24
  297. package/dist/templates/sms/verifyEmail.js +0 -24
  298. package/dist/templates/sms/verifyPhone.js +0 -24
  299. package/dist/templates/sms/welcome.js +0 -24
  300. package/dist/types/apps.js +0 -32
  301. package/dist/types/arangodb.js +0 -16
  302. package/dist/types/auth.js +0 -16
  303. package/dist/types/connections.js +0 -16
  304. package/dist/types/conversations.js +0 -16
  305. package/dist/types/email.js +0 -16
  306. package/dist/types/error.js +0 -44
  307. package/dist/types/files.js +0 -16
  308. package/dist/types/google.js +0 -16
  309. package/dist/types/groups.js +0 -16
  310. package/dist/types/images.js +0 -16
  311. package/dist/types/index.js +0 -60
  312. package/dist/types/locations.js +0 -16
  313. package/dist/types/messages.js +0 -16
  314. package/dist/types/notifications.js +0 -16
  315. package/dist/types/payments.js +0 -16
  316. package/dist/types/personas.js +0 -16
  317. package/dist/types/posts.js +0 -16
  318. package/dist/types/statistics.js +0 -16
  319. package/dist/types/tags.js +0 -16
  320. package/dist/types/users.js +0 -16
  321. package/dist/types/websockets.js +0 -16
  322. package/dist/utils/adapterUtils.js +0 -45
  323. package/dist/utils/analyticsUtils.js +0 -72
  324. package/dist/utils/arangodbUtils.js +0 -165
  325. package/dist/utils/auth.js +0 -57
  326. package/dist/utils/index.js +0 -30
  327. package/dist/utils/session.js +0 -60
  328. package/jest.config.js +0 -17
  329. package/jest.setup.js +0 -36
  330. package/lex.config.cjs +0 -13
  331. package/lib/actions/apps.js +0 -20
  332. package/lib/actions/connections.js +0 -7
  333. package/lib/actions/content.js +0 -17
  334. package/lib/actions/conversations.js +0 -33
  335. package/lib/actions/dynamodb.js +0 -2
  336. package/lib/actions/email.js +0 -2
  337. package/lib/actions/files.js +0 -5
  338. package/lib/actions/groups.js +0 -52
  339. package/lib/actions/images.js +0 -66
  340. package/lib/actions/index.js +0 -2
  341. package/lib/actions/ios.js +0 -11
  342. package/lib/actions/locations.js +0 -7
  343. package/lib/actions/messages.js +0 -33
  344. package/lib/actions/notifications.js +0 -2
  345. package/lib/actions/payments.js +0 -32
  346. package/lib/actions/posts.js +0 -143
  347. package/lib/actions/profiles.js +0 -8
  348. package/lib/actions/reactions.js +0 -35
  349. package/lib/actions/s3.js +0 -2
  350. package/lib/actions/search.js +0 -5
  351. package/lib/actions/sms.js +0 -2
  352. package/lib/actions/statistics.js +0 -8
  353. package/lib/actions/subscriptions.js +0 -12
  354. package/lib/actions/tags.js +0 -24
  355. package/lib/actions/users.js +0 -84
  356. package/lib/actions/websockets.js +0 -30
  357. package/lib/adapters/arangoAdapter.js +0 -2
  358. package/lib/adapters/contentAdapter.js +0 -2
  359. package/lib/adapters/fileAdapter.js +0 -2
  360. package/lib/adapters/imageAdapter.js +0 -2
  361. package/lib/adapters/messageAdapter.js +0 -2
  362. package/lib/adapters/postAdapter.js +0 -2
  363. package/lib/adapters/reaktorAdapter.js +0 -2
  364. package/lib/adapters/tagAdapter.js +0 -2
  365. package/lib/adapters/userAdapter.js +0 -2
  366. package/lib/config.js +0 -2
  367. package/lib/handlers/graphqlHandler.js +0 -2
  368. package/lib/index.js +0 -2
  369. package/lib/lambdas/actions/websockets.js +0 -30
  370. package/lib/lambdas/authorizer.js +0 -2
  371. package/lib/lambdas/connection.js +0 -2
  372. package/lib/lambdas/utils/message.js +0 -2
  373. package/lib/lambdas/utils/websocket.js +0 -2
  374. package/lib/mocks/conversation.js +0 -2
  375. package/lib/mocks/file.js +0 -2
  376. package/lib/mocks/group.js +0 -2
  377. package/lib/mocks/image.js +0 -2
  378. package/lib/mocks/post.js +0 -2
  379. package/lib/mocks/tag.js +0 -2
  380. package/lib/mocks/user.js +0 -2
  381. package/lib/mutations/index.js +0 -2
  382. package/lib/mutations/locations.integration.js +0 -2
  383. package/lib/mutations/locations.js +0 -2
  384. package/lib/mutations/messages.integration.js +0 -2
  385. package/lib/mutations/messages.js +0 -2
  386. package/lib/mutations/posts.integration.js +0 -2
  387. package/lib/mutations/posts.js +0 -2
  388. package/lib/mutations/profiles.integration.js +0 -2
  389. package/lib/mutations/profiles.js +0 -2
  390. package/lib/mutations/reactions.integration.js +0 -2
  391. package/lib/mutations/reactions.js +0 -2
  392. package/lib/mutations/statistics.integration.js +0 -2
  393. package/lib/mutations/statistics.js +0 -2
  394. package/lib/mutations/subscriptions.integration.js +0 -2
  395. package/lib/mutations/subscriptions.js +0 -2
  396. package/lib/mutations/tags.integration.js +0 -2
  397. package/lib/mutations/tags.js +0 -2
  398. package/lib/mutations/users.integration.js +0 -2
  399. package/lib/mutations/users.js +0 -2
  400. package/lib/objectTypes/app.js +0 -2
  401. package/lib/objectTypes/bankAccount.js +0 -2
  402. package/lib/objectTypes/connection.js +0 -2
  403. package/lib/objectTypes/conversation.js +0 -2
  404. package/lib/objectTypes/creditCard.js +0 -2
  405. package/lib/objectTypes/document.js +0 -2
  406. package/lib/objectTypes/error.js +0 -2
  407. package/lib/objectTypes/external.js +0 -2
  408. package/lib/objectTypes/file.js +0 -2
  409. package/lib/objectTypes/filter.js +0 -2
  410. package/lib/objectTypes/group.js +0 -2
  411. package/lib/objectTypes/iapSubscription.js +0 -2
  412. package/lib/objectTypes/image.js +0 -2
  413. package/lib/objectTypes/index.js +0 -2
  414. package/lib/objectTypes/location.js +0 -2
  415. package/lib/objectTypes/message.js +0 -2
  416. package/lib/objectTypes/passcode.js +0 -2
  417. package/lib/objectTypes/plan.js +0 -2
  418. package/lib/objectTypes/post.js +0 -2
  419. package/lib/objectTypes/profile.js +0 -2
  420. package/lib/objectTypes/reaction.js +0 -2
  421. package/lib/objectTypes/relation.js +0 -2
  422. package/lib/objectTypes/search.js +0 -2
  423. package/lib/objectTypes/statistics.js +0 -2
  424. package/lib/objectTypes/subscription.js +0 -2
  425. package/lib/objectTypes/tag.js +0 -2
  426. package/lib/objectTypes/user.js +0 -2
  427. package/lib/queries/index.js +0 -2
  428. package/lib/queries/locations.integration.js +0 -2
  429. package/lib/queries/locations.js +0 -2
  430. package/lib/queries/messages.integration.js +0 -2
  431. package/lib/queries/messages.js +0 -2
  432. package/lib/queries/posts.integration.js +0 -2
  433. package/lib/queries/posts.js +0 -2
  434. package/lib/queries/reactions.integration.js +0 -2
  435. package/lib/queries/reactions.js +0 -2
  436. package/lib/queries/statistics.js +0 -2
  437. package/lib/queries/subscriptions.js +0 -2
  438. package/lib/queries/tags.integration.js +0 -2
  439. package/lib/queries/tags.js +0 -2
  440. package/lib/queries/users.integration.js +0 -2
  441. package/lib/queries/users.js +0 -2
  442. package/lib/templates/email/layout.js +0 -280
  443. package/lib/templates/email/passwordForgot.js +0 -16
  444. package/lib/templates/email/passwordRecovery.js +0 -13
  445. package/lib/templates/email/verifyEmail.js +0 -16
  446. package/lib/templates/email/welcome.js +0 -16
  447. package/lib/templates/sms/passwordForgot.js +0 -2
  448. package/lib/templates/sms/passwordRecovery.js +0 -2
  449. package/lib/templates/sms/verifyEmail.js +0 -2
  450. package/lib/templates/sms/verifyPhone.js +0 -2
  451. package/lib/templates/sms/welcome.js +0 -2
  452. package/lib/types/apps.types.js +0 -2
  453. package/lib/types/arangodb.types.js +0 -1
  454. package/lib/types/auth.types.js +0 -1
  455. package/lib/types/connections.types.js +0 -1
  456. package/lib/types/content.types.js +0 -1
  457. package/lib/types/conversations.types.js +0 -1
  458. package/lib/types/email.types.js +0 -1
  459. package/lib/types/error.types.js +0 -2
  460. package/lib/types/files.types.js +0 -1
  461. package/lib/types/google.types.js +0 -1
  462. package/lib/types/groups.types.js +0 -1
  463. package/lib/types/images.types.js +0 -1
  464. package/lib/types/index.js +0 -2
  465. package/lib/types/locations.types.js +0 -1
  466. package/lib/types/messages.types.js +0 -1
  467. package/lib/types/notifications.types.js +0 -1
  468. package/lib/types/payments.types.js +0 -1
  469. package/lib/types/posts.types.js +0 -1
  470. package/lib/types/profiles.types.js +0 -1
  471. package/lib/types/statistics.types.js +0 -1
  472. package/lib/types/tags.types.js +0 -1
  473. package/lib/types/users.types.js +0 -1
  474. package/lib/types/websockets.types.js +0 -1
  475. package/lib/utils/adapterUtils.js +0 -2
  476. package/lib/utils/analyticsUtils.js +0 -2
  477. package/lib/utils/arangodbUtils.js +0 -7
  478. package/lib/utils/authUtils.js +0 -2
  479. package/lib/utils/contextUtils.js +0 -2
  480. package/lib/utils/dbI18n.example.js +0 -6
  481. package/lib/utils/dbI18n.js +0 -2
  482. package/lib/utils/googleTranslate.js +0 -2
  483. package/lib/utils/graphqlUtils.js +0 -2
  484. package/lib/utils/index.js +0 -2
  485. package/lib/utils/languageDetection.js +0 -2
  486. package/lib/utils/localeUtils.example.js +0 -2
  487. package/lib/utils/localeUtils.js +0 -2
  488. package/lib/utils/middlewareUtils.js +0 -2
  489. package/lib/utils/sessionUtils.js +0 -2
  490. package/lib/utils/stripeUtils.js +0 -2
  491. package/lib/utils/templateUtils.js +0 -2
  492. package/lib/utils/testUtils.js +0 -2
  493. package/lib/utils/translationQueue.example.js +0 -2
  494. package/lib/utils/translationQueue.js +0 -2
@@ -1,11 +0,0 @@
1
- import{createHash as R}from"@nlabs/utils";import{aql as d}from"arangojs";import{ErrorTypes as u}from"../types/error.types";import{useDb as l}from"../utils";import{logError as m}from"../utils/analyticsUtils";const I="ios",N=t=>({0:{error:!1,message:"Active",valid:!0},21e3:{error:!0,id:"payment_receipt_unreadable",message:"App store could not read",valid:!1},21002:{error:!0,id:"payment_data_malformed",message:"Data was malformed",valid:!1},21003:{error:!0,id:"payment_receipt_unauthorized",message:"Receipt not authenticated",valid:!1},21004:{error:!0,id:"payment_invalid_secret",message:"Shared secret does not match",valid:!1},21005:{error:!0,id:"payment_server_unavailable",message:"Receipt server unavailable",valid:!1},21006:{error:!1,id:"payment_subscription_expired",message:"Receipt valid but sub expired",valid:!0},21007:{error:!0,id:"payment_invalid_server",message:"Sandbox receipt sent to Production environment",redirect:!0,valid:!1},21008:{error:!0,id:"payment_invalid_server",message:"Production receipt sent to Sandbox environment",valid:!1}})[t]||{},O=(t,r)=>{const s="iosSubscriptionUpdate",{auto_renew_adam_id:n,cancellation_date:i,notification_type:e,latest_receipt:y,latest_receipt_info:b,latest_expired_receipt:_,latest_expired_receipt_info:c,original_transaction_id:p}=r,g=(e||"").toLowerCase(),a=Date.now(),S=b||c,o=R(`payment-${p}`),A={cancelDate:i,isValid:S[0].expires_date_ms>a,modified:a,planId:n,receipt:y||_,status:g},f={...A,_key:o,added:a,type:"ios_payment"},E=d`UPSERT {transactionId: ${p}}
2
- INSERT ${f}
3
- UPDATE ${A} IN subscriptions
4
- LIMIT 1`;return l(t).query(E).then(()=>null).catch(P=>m({action:s,category:I,label:u.DATABASE_ERROR},P,{}).then(()=>null))},D=t=>{const r="getIosSubscription",{databaseName:s,session:{userId:n}}=t,i=d`FOR s IN subscriptions
5
- FILTER s.userId == ${n} && s.type == "ios_payment"
6
- LIMIT 1
7
- RETURN s`;return l(s).query(i).then(e=>e.next()).then(e=>e).catch(e=>m({action:r,category:I,label:u.DATABASE_ERROR},e,t).then(()=>null))},Q=(t,r)=>{const s="addIosInApp",{databaseName:n,session:{userId:i}}=t,e=Date.now(),{added:y=e,planId:b,receipt:_,transactionId:c,trialEnd:p}=r,a={_key:R(`subscription-${c}`),added:y,modified:e,planId:b,receipt:_,transactionId:c,trialEnd:p,type:"ios_subscription",userId:i},S=d`INSERT ${a} IN subscriptions RETURN NEW`;return l(n).query(S).then(o=>o.next()).then(o=>o).catch(o=>m({action:s,category:I,label:u.DATABASE_ERROR},o,t).then(()=>null))},U=t=>{const r="getIosInApp",{databaseName:s,session:{userId:n}}=t,i=d`FOR s IN subscription
8
- FILTER s.userId == ${n} && s.type == "ios"
9
- LIMIT 1
10
- RETURN s`;return l(s).query(i).then(e=>e.next()).then(e=>e).catch(e=>m({action:r,category:I,label:u.DATABASE_ERROR},e,t).then(()=>null))};export{Q as addIosInApp,U as getIosInApp,N as getIosInAppError,D as getIosSubscription,O as iosSubscriptionUpdate};
11
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvaW9zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtcbiAgQXBpQ29udGV4dCxcbiAgUGF5bWVudElPU0luQXBwRXJyb3IsXG4gIFBheW1lbnRJT1NTdWJzY3JpcHRpb25JbmZvLFxuICBQYXltZW50SU9TU3Vic2NyaXB0aW9uVXBkYXRlLFxuICBQYXltZW50U3Vic2NyaXB0aW9uXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnaW9zJztcblxuZXhwb3J0IGNvbnN0IGdldElvc0luQXBwRXJyb3IgPSAoc3RhdHVzQ29kZTogc3RyaW5nKTogUGF5bWVudElPU0luQXBwRXJyb3IgPT4ge1xuICBjb25zdCBjb2RlcyA9IHtcbiAgICBbMF06IHtlcnJvcjogZmFsc2UsIG1lc3NhZ2U6ICdBY3RpdmUnLCB2YWxpZDogdHJ1ZX0sXG4gICAgWzIxMDAwXToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfcmVjZWlwdF91bnJlYWRhYmxlJywgbWVzc2FnZTogJ0FwcCBzdG9yZSBjb3VsZCBub3QgcmVhZCcsIHZhbGlkOiBmYWxzZX0sXG4gICAgWzIxMDAyXToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfZGF0YV9tYWxmb3JtZWQnLCBtZXNzYWdlOiAnRGF0YSB3YXMgbWFsZm9ybWVkJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDNdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9yZWNlaXB0X3VuYXV0aG9yaXplZCcsIG1lc3NhZ2U6ICdSZWNlaXB0IG5vdCBhdXRoZW50aWNhdGVkJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDRdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9pbnZhbGlkX3NlY3JldCcsIG1lc3NhZ2U6ICdTaGFyZWQgc2VjcmV0IGRvZXMgbm90IG1hdGNoJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDVdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9zZXJ2ZXJfdW5hdmFpbGFibGUnLCBtZXNzYWdlOiAnUmVjZWlwdCBzZXJ2ZXIgdW5hdmFpbGFibGUnLCB2YWxpZDogZmFsc2V9LFxuICAgIFsyMTAwNl06IHtcbiAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgIGlkOiAncGF5bWVudF9zdWJzY3JpcHRpb25fZXhwaXJlZCcsXG4gICAgICBtZXNzYWdlOiAnUmVjZWlwdCB2YWxpZCBidXQgc3ViIGV4cGlyZWQnLFxuICAgICAgdmFsaWQ6IHRydWVcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIHNwZWNpYWwgY2FzZSBmb3IgYXBwIHJldmlldyBoYW5kbGluZyAtIGZvcndhcmQgYW55IHJlcXVlc3QgdGhhdCBpcyBpbnRlbmRlZCBmb3IgdGhlIFNhbmRib3ggYnV0IHdhcyBzZW50IHRvXG4gICAgICogUHJvZHVjdGlvbiwgdGhpcyBpcyB3aGF0IHRoZSBhcHAgcmV2aWV3IHRlYW0gZG9lc1xuICAgICAqL1xuICAgIFsyMTAwN106IHtcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgaWQ6ICdwYXltZW50X2ludmFsaWRfc2VydmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTYW5kYm94IHJlY2VpcHQgc2VudCB0byBQcm9kdWN0aW9uIGVudmlyb25tZW50JyxcbiAgICAgIHJlZGlyZWN0OiB0cnVlLFxuICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgfSxcbiAgICBbMjEwMDhdOiB7XG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgIGlkOiAncGF5bWVudF9pbnZhbGlkX3NlcnZlcicsXG4gICAgICBtZXNzYWdlOiAnUHJvZHVjdGlvbiByZWNlaXB0IHNlbnQgdG8gU2FuZGJveCBlbnZpcm9ubWVudCcsXG4gICAgICB2YWxpZDogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGNvZGVzW3N0YXR1c0NvZGVdIHx8IHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGlvc1N1YnNjcmlwdGlvblVwZGF0ZSA9IChcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmcsXG4gIHN1YnNjcmlwdGlvblVwZGF0ZTogUGF5bWVudElPU1N1YnNjcmlwdGlvblVwZGF0ZVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2lvc1N1YnNjcmlwdGlvblVwZGF0ZSc7XG4gIGNvbnN0IHtcbiAgICBhdXRvX3JlbmV3X2FkYW1faWQ6IHBsYW5JZCxcbiAgICBjYW5jZWxsYXRpb25fZGF0ZTogY2FuY2VsRGF0ZSxcbiAgICBub3RpZmljYXRpb25fdHlwZTogc3RhdHVzLFxuICAgIGxhdGVzdF9yZWNlaXB0OiBsYXRlc3RSZWNlaXB0LFxuICAgIGxhdGVzdF9yZWNlaXB0X2luZm86IGxhdGVzdEluZm8sXG4gICAgbGF0ZXN0X2V4cGlyZWRfcmVjZWlwdDogZXhwaXJlZFJlY2VpcHQsXG4gICAgbGF0ZXN0X2V4cGlyZWRfcmVjZWlwdF9pbmZvOiBleHBpcmVkSW5mbyxcbiAgICBvcmlnaW5hbF90cmFuc2FjdGlvbl9pZDogdHJhbnNhY3Rpb25JZFxuICB9ID0gc3Vic2NyaXB0aW9uVXBkYXRlO1xuICBjb25zdCBmb3JtYXRTdGF0dXM6IHN0cmluZyA9IChzdGF0dXMgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcmVjZWlwdEluZm86IFBheW1lbnRJT1NTdWJzY3JpcHRpb25JbmZvW10gPSBsYXRlc3RJbmZvIHx8IGV4cGlyZWRJbmZvO1xuICBjb25zdCBpZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcGF5bWVudC0ke3RyYW5zYWN0aW9uSWR9YCk7XG5cbiAgY29uc3QgdXBkYXRlOiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuICAgIGNhbmNlbERhdGUsXG4gICAgaXNWYWxpZDogcmVjZWlwdEluZm9bMF0uZXhwaXJlc19kYXRlX21zID4gbm93LFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgcGxhbklkLFxuICAgIHJlY2VpcHQ6IGxhdGVzdFJlY2VpcHQgfHwgZXhwaXJlZFJlY2VpcHQsXG4gICAgc3RhdHVzOiBmb3JtYXRTdGF0dXNcbiAgfTtcbiAgY29uc3QgaW5zZXJ0OiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiBpZCxcbiAgICBhZGRlZDogbm93LFxuICAgIHR5cGU6ICdpb3NfcGF5bWVudCdcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge3RyYW5zYWN0aW9uSWQ6ICR7dHJhbnNhY3Rpb25JZH19XG4gICAgIElOU0VSVCAke2luc2VydH1cbiAgICAgVVBEQVRFICR7dXBkYXRlfSBJTiBzdWJzY3JpcHRpb25zXG4gICAgIExJTUlUIDFgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoKSA9PiBudWxsKVxuICAgIC5jYXRjaCgoZGJFcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYkVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG4vLyBleHBvcnQgY29uc3QgYWRkSW9zSW5BcHAgPSAoXG4vLyAgIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4vLyAgIGFwcCxcbi8vICAgc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uXG4vLyApOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbi8vICAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkSW9zSW5BcHAnO1xuLy8gICBjb25zdCB7aXNQcm9kdWN0aW9uLCByZWNlaXB0fSA9IHN1YnNjcmlwdGlvbjtcbi8vICAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuXG4vLyAgIGNvbnN0IHByb2R1Y3Rpb25Ib3N0OiBzdHJpbmcgPSAnYnV5Lml0dW5lcy5hcHBsZS5jb20nO1xuLy8gICBjb25zdCBzYW5kYm94SG9zdDogc3RyaW5nID0gJ3NhbmRib3guaXR1bmVzLmFwcGxlLmNvbSc7XG4vLyAgIGNvbnN0IGVuZHBvaW50OiBzdHJpbmcgPSBpc1Byb2R1Y3Rpb24gPyBwcm9kdWN0aW9uSG9zdCA6IHNhbmRib3hIb3N0O1xuLy8gICBjb25zdCB2ZXJpZnlVcmw6IHN0cmluZyA9IGBodHRwczovLyR7ZW5kcG9pbnR9L3ZlcmlmeVJlY2VpcHRgO1xuLy8gICBjb25zdCBwYXlsb2FkOiBvYmplY3QgPSB7XG4vLyAgICAgcGFzc3dvcmQ6IGFwcC5pYXAsXG4vLyAgICAgJ3JlY2VpcHQtZGF0YSc6IGRlY29kZVVSSUNvbXBvbmVudChyZWNlaXB0KVxuLy8gICB9O1xuLy8gICBjb25zdCBvcHRpb25zOiBvYmplY3QgPSB7XG4vLyAgICAgaGVhZGVyczoge1xuLy8gICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4vLyAgICAgfVxuLy8gICB9O1xuXG4vLyAgIHJldHVybiBwb3N0KHZlcmlmeVVybCwgcGF5bG9hZCwgb3B0aW9ucylcbi8vICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuLy8gICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UocmVzdWx0cyk7XG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGxhdGVzdF9yZWNlaXB0OiBsYXRlc3RSZWNlaXB0LFxuLy8gICAgICAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuLy8gICAgICAgICBzdGF0dXNcbi8vICAgICAgIH0gPSBqc29uO1xuXG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGlzX3RyaWFsX3BlcmlvZDogdHJpYWxQZXJpb2QsXG4vLyAgICAgICAgIG9yaWdpbmFsX3B1cmNoYXNlX2RhdGVfbXM6IGFkZGVkLFxuLy8gICAgICAgICBleHBpcmVzX2RhdGU6IGV4cGlyZXMsXG4vLyAgICAgICAgIHByb2R1Y3RfaWQ6IHBsYW5JZCxcbi8vICAgICAgICAgdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbi8vICAgICAgIH0gPSBsYXRlc3RJbmZvO1xuXG4vLyAgICAgICBpZihzdGF0dXMgPT09IDAgfHwgc3RhdHVzID09PSAyMTAwNikge1xuLy8gICAgICAgICBjb25zdCBpZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcGF5bWVudC0ke3RyYW5zYWN0aW9uSWR9YCk7XG4vLyAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbi8vICAgICAgICAgY29uc3QgdXBkYXRlOiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuLy8gICAgICAgICAgIGV4cGlyZXMsXG4vLyAgICAgICAgICAgaXNUcmlhbDogdHJpYWxQZXJpb2QgPT09ICd0cnVlJyxcbi8vICAgICAgICAgICBpc1ZhbGlkOiBleHBpcmVzID4gbm93LFxuLy8gICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4vLyAgICAgICAgICAgcGxhbklkLFxuLy8gICAgICAgICAgIHJlY2VpcHQ6IGxhdGVzdFJlY2VpcHQsXG4vLyAgICAgICAgICAgdHJhbnNhY3Rpb25JZCxcbi8vICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuLy8gICAgICAgICB9O1xuLy8gICAgICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4vLyAgICAgICAgICAgLi4udXBkYXRlLFxuLy8gICAgICAgICAgIF9rZXk6IGlkLFxuLy8gICAgICAgICAgIGFkZGVkLFxuLy8gICAgICAgICAgIHR5cGU6ICdpb3NfcGF5bWVudCdcbi8vICAgICAgICAgfTtcblxuLy8gICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7dHJhbnNhY3Rpb25JZDogJHt0cmFuc2FjdGlvbklkfX1cbi8vICAgICAgICAgICAgICAgSU5TRVJUICR7aW5zZXJ0fVxuLy8gICAgICAgICAgICAgICBVUERBVEUgJHt1cGRhdGV9IElOIHN1YnNjcmlwdGlvbnNcbi8vICAgICAgICAgICAgICAgUkVUVVJOIE5FV2A7XG5cbi8vICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbi8vICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuLy8gICAgICAgICAgIC50aGVuKCh1cGRhdGVkU3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uID0ge30pID0+IHVwZGF0ZWRTdWJzY3JpcHRpb24pXG4vLyAgICAgICAgICAgLmNhdGNoKChkYkVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuLy8gICAgICAgICAgICAgYWN0aW9uLFxuLy8gICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4vLyAgICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuLy8gICAgICAgICAgIH0sIGRiRXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xuLy8gICAgICAgfVxuXG4vLyAgICAgICAvLyBFcnJvcnNcbi8vICAgICAgIGNvbnN0IGVycm9yOiBQYXltZW50SU9TSW5BcHBFcnJvciA9IGdldElvc0luQXBwRXJyb3IocmVzdWx0cy5zdGF0dXMpO1xuXG4vLyAgICAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbi8vICAgICAgICAgYWN0aW9uLFxuLy8gICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbi8vICAgICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJyxcbi8vICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbi8vICAgICAgICAgdmFsdWU6IGVycm9yLmlkXG4vLyAgICAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGdldElvc1N1YnNjcmlwdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldElvc1N1YnNjcmlwdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcyBJTiBzdWJzY3JpcHRpb25zXG4gICAgICBGSUxURVIgcy51c2VySWQgPT0gJHtzZXNzaW9uSWR9ICYmIHMudHlwZSA9PSBcImlvc19wYXltZW50XCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBzYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW9zSW5BcHAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZElvc0luQXBwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHthZGRlZCA9IG5vdywgcGxhbklkLCByZWNlaXB0LCB0cmFuc2FjdGlvbklkLCB0cmlhbEVuZH0gPSBzdWJzY3JpcHRpb247XG4gIGNvbnN0IHN1YnNjcmlwdGlvbklkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBzdWJzY3JpcHRpb24tJHt0cmFuc2FjdGlvbklkfWApO1xuICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgX2tleTogc3Vic2NyaXB0aW9uSWQsXG4gICAgYWRkZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBwbGFuSWQsXG4gICAgcmVjZWlwdCxcbiAgICB0cmFuc2FjdGlvbklkLFxuICAgIHRyaWFsRW5kLFxuICAgIHR5cGU6ICdpb3Nfc3Vic2NyaXB0aW9uJyxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gc3Vic2NyaXB0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXBkYXRlZFN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbikgPT4gdXBkYXRlZFN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJb3NJbkFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldElvc0luQXBwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBzIElOIHN1YnNjcmlwdGlvblxuICAgICAgRklMVEVSIHMudXNlcklkID09ICR7c2Vzc2lvbklkfSAmJiBzLnR5cGUgPT0gXCJpb3NcIlxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChzdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxPQUFRLGNBQUFBLE1BQWlCLGVBQ3pCLE9BQVEsT0FBQUMsTUFBVSxXQVVsQixPQUFRLGNBQUFDLE1BQWlCLHVCQUN6QixPQUFRLFNBQUFD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ICJsb2dFcnJvciIsICJldmVudENhdGVnb3J5IiwgImdldElvc0luQXBwRXJyb3IiLCAic3RhdHVzQ29kZSIsICJpb3NTdWJzY3JpcHRpb25VcGRhdGUiLCAiZGF0YWJhc2VOYW1lIiwgInN1YnNjcmlwdGlvblVwZGF0ZSIsICJhY3Rpb24iLCAicGxhbklkIiwgImNhbmNlbERhdGUiLCAic3RhdHVzIiwgImxhdGVzdFJlY2VpcHQiLCAibGF0ZXN0SW5mbyIsICJleHBpcmVkUmVjZWlwdCIsICJleHBpcmVkSW5mbyIsICJ0cmFuc2FjdGlvbklkIiwgImZvcm1hdFN0YXR1cyIsICJub3ciLCAicmVjZWlwdEluZm8iLCAiaWQiLCAidXBkYXRlIiwgImluc2VydCIsICJhcWxRcnkiLCAiZGJFcnJvciIsICJnZXRJb3NTdWJzY3JpcHRpb24iLCAiY29udGV4dCIsICJzZXNzaW9uSWQiLCAiY3Vyc29yIiwgInN1YnNjcmlwdGlvbiIsICJlcnJvciIsICJhZGRJb3NJbkFwcCIsICJhZGRlZCIsICJyZWNlaXB0IiwgInRyaWFsRW5kIiwgInVwZGF0ZWRTdWJzY3JpcHRpb24iLCAiZ2V0SW9zSW5BcHAiXQp9Cg==
@@ -1,7 +0,0 @@
1
- import{get as P,queryString as S}from"@nlabs/rip-hunter";import{createHash as u,parseChar as j,parseId as T}from"@nlabs/utils";import{aql as I}from"arangojs";import{Config as f}from"../config";import{ErrorTypes as F}from"../types/error.types";import{logError as O}from"../utils/analyticsUtils";import{useDb as d}from"../utils/arangodbUtils";const K="locations",n=(e,a)=>{const{short_name:l=""}=e.find(r=>(r.types||[]).findIndex(o=>o===a)>=0)||{};return l},Y=(e,a)=>{const{databaseName:r,session:{userId:i}}=e,{address:o,itemId:h,itemType:E}=a,_=f.get("google.geocode.url"),A={address:o,key:f.get("google.geocode.key")},R=`${_}?${S(A)}`;return P(R).then(L=>{const{results:g=[],status:C=""}=L;if(C==="OK"&&g.length){const c=g[0],s=c?.address_components||[],N=n(s,"street_number"),$=n(s,"route"),b=Date.now(),q=j(E).toLowerCase(),x=T(h),m=c?.place_id||"",k={},G={_key:u(`post-${i}`),added:b,city:n(s,"locality"),country:n(s,"country"),formatted:c?.formatted_address,googleId:m,latitude:c?.geometry.location.lat,longitude:c?.geometry.location.lng,state:n(s,"administrative_area_level_1"),street:[N,$].filter(t=>t).join(" "),zip:n(s,"postal_code")},w=I`UPSERT {googleId: ${m}}
2
- INSERT ${G}
3
- UPDATE ${k}
4
- IN locations RETURN NEW`;return d(r).query(w).then(t=>t.next()).then(t=>{let p;const{_key:D}=t;switch(q){case"posts":p=`posts/${x}`;break;default:p=""}if(p){const M=d(r).collection("hasLocation"),y=D,Q=`locations/${y}`,U=u(`hasLocation-${y}-${i}`),v={_from:p,_key:U,_to:Q};return M.save(v,{returnNew:!0}).then(()=>t)}return t}).catch(t=>O({action:"add",category:K,label:F.DATABASE_ERROR},t,e).then(()=>null))}return null})},Z=(e,a)=>{const{databaseName:l}=e,r=T(a),i=I`FOR l IN locations
5
- FILTER l._key == ${r}
6
- RETURN l`;return d(l).query(i).then(o=>o.next()).catch(o=>{throw o})};export{Y as addLocation,n as getFieldVal,Z as getLocation};
7
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvbG9jYXRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldCwgcXVlcnlTdHJpbmd9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMnO1xuaW1wb3J0IHtHb29nbGVNYXBzQWRkcmVzc1R5cGUsIEdvb2dsZU1hcHNSZXN1bHRUeXBlfSBmcm9tICcuLi90eXBlcy9nb29nbGUudHlwZXMnO1xuaW1wb3J0IHtMb2NhdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2xvY2F0aW9ucy50eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcyc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2xvY2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZFZhbCA9IChhZGRyZXNzQ29tcG9uZW50czogR29vZ2xlTWFwc0FkZHJlc3NUeXBlW10sIG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHtzaG9ydF9uYW1lOiBzaG9ydE5hbWUgPSAnJ30gPSBhZGRyZXNzQ29tcG9uZW50cy5maW5kKChhZGRyZXNzRmllbGQ6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZSkgPT4ge1xuICAgIGNvbnN0IHR5cGVzID0gYWRkcmVzc0ZpZWxkLnR5cGVzIHx8IFtdO1xuICAgIHJldHVybiB0eXBlcy5maW5kSW5kZXgoKGZpZWxkVHlwZTogc3RyaW5nKSA9PiBmaWVsZFR5cGUgPT09IG5hbWUpID49IDA7XG4gIH0pIHx8IHt9O1xuXG4gIHJldHVybiBzaG9ydE5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTG9jYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYXRpb246IExvY2F0aW9uVHlwZSk6IFByb21pc2U8TG9jYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2FkZHJlc3MsIGl0ZW1JZCwgaXRlbVR5cGV9ID0gbG9jYXRpb247XG4gIGNvbnN0IGdlb2NvZGVVcmw6IHN0cmluZyA9IENvbmZpZy5nZXQoJ2dvb2dsZS5nZW9jb2RlLnVybCcpO1xuICBjb25zdCBwYXJhbXM6IG9iamVjdCA9IHtcbiAgICBhZGRyZXNzLFxuICAgIGtleTogQ29uZmlnLmdldCgnZ29vZ2xlLmdlb2NvZGUua2V5JylcbiAgfTtcbiAgY29uc3QgdXJsOiBzdHJpbmcgPSBgJHtnZW9jb2RlVXJsfT8ke3F1ZXJ5U3RyaW5nKHBhcmFtcyl9YDtcblxuICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgIGNvbnN0IHtyZXN1bHRzID0gW10sIHN0YXR1cyA9ICcnfSA9IGpzb247XG5cbiAgICAgIGlmKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBnZW9kYXRhOiBHb29nbGVNYXBzUmVzdWx0VHlwZSA9IHJlc3VsdHNbMF07XG4gICAgICAgIGNvbnN0IGFkZHJlc3NDb21wb25lbnRzOiBHb29nbGVNYXBzQWRkcmVzc1R5cGVbXSA9IGdlb2RhdGE/LmFkZHJlc3NfY29tcG9uZW50cyB8fCBbXTtcblxuICAgICAgICAvLyBTdHJlZXRcbiAgICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyOiBzdHJpbmcgPSBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3N0cmVldF9udW1iZXInKTtcbiAgICAgICAgY29uc3Qgcm91dGU6IHN0cmluZyA9IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAncm91dGUnKTtcblxuICAgICAgICAvLyBMb2NhdGlvblxuICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gSXRlbVxuICAgICAgICBjb25zdCBmb3JtYXRJdGVtVHlwZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgICAgICAgY29uc3QgZ29vZ2xlSWQ6IHN0cmluZyA9IGdlb2RhdGE/LnBsYWNlX2lkIHx8ICcnO1xuICAgICAgICBjb25zdCB1cGRhdGU6IExvY2F0aW9uVHlwZSA9IHt9O1xuICAgICAgICBjb25zdCBpbnNlcnQ6IExvY2F0aW9uVHlwZSA9IHtcbiAgICAgICAgICBfa2V5OiBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApLFxuICAgICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgICAgY2l0eTogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdsb2NhbGl0eScpLFxuICAgICAgICAgIGNvdW50cnk6IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnY291bnRyeScpLFxuICAgICAgICAgIGZvcm1hdHRlZDogZ2VvZGF0YT8uZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICAgICAgZ29vZ2xlSWQsXG4gICAgICAgICAgbGF0aXR1ZGU6IGdlb2RhdGE/Lmdlb21ldHJ5LmxvY2F0aW9uLmxhdCxcbiAgICAgICAgICBsb25naXR1ZGU6IGdlb2RhdGE/Lmdlb21ldHJ5LmxvY2F0aW9uLmxuZyxcbiAgICAgICAgICBzdGF0ZTogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzEnKSxcbiAgICAgICAgICBzdHJlZXQ6IFtzdHJlZXROdW1iZXIsIHJvdXRlXS5maWx0ZXIoKG9iaikgPT4gb2JqKS5qb2luKCcgJyksXG4gICAgICAgICAgemlwOiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3Bvc3RhbF9jb2RlJylcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge2dvb2dsZUlkOiAke2dvb2dsZUlkfX1cbiAgICAgICAgICAgIElOU0VSVCAke2luc2VydH1cbiAgICAgICAgICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICAgICAgICAgIElOIGxvY2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAudGhlbigodXBkYXRlZExvY2F0aW9uOiBMb2NhdGlvblR5cGUpID0+IHtcbiAgICAgICAgICAgIGxldCBpdGVtRG9jSWQ6IHN0cmluZztcbiAgICAgICAgICAgIGNvbnN0IHtfa2V5OiB1cGRhdGVkTG9jYXRpb25LZXl9ID0gdXBkYXRlZExvY2F0aW9uO1xuXG4gICAgICAgICAgICBzd2l0Y2goZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAncG9zdHMnOlxuICAgICAgICAgICAgICAgIGl0ZW1Eb2NJZCA9IGBwb3N0cy8ke2Zvcm1hdEl0ZW1JZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGl0ZW1Eb2NJZCA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHZhbGlkIGl0ZW0gZG9jIGlkLCBjcmVhdGUgYW4gZWRnZVxuICAgICAgICAgICAgaWYoaXRlbURvY0lkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzTG9jYXRpb24nKTtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb25JZDogc3RyaW5nID0gdXBkYXRlZExvY2F0aW9uS2V5O1xuICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbkRvY0lkOiBzdHJpbmcgPSBgbG9jYXRpb25zLyR7bG9jYXRpb25JZH1gO1xuICAgICAgICAgICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNMb2NhdGlvbi0ke2xvY2F0aW9uSWR9LSR7c2Vzc2lvbklkfWApO1xuICAgICAgICAgICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtfZnJvbTogaXRlbURvY0lkLCBfa2V5OiBlZGdlSWQsIF90bzogbG9jYXRpb25Eb2NJZH07XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pLnRoZW4oKCkgPT4gdXBkYXRlZExvY2F0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBuZXcgbG9jYXRpb25cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkTG9jYXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TG9jYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxMb2NhdGlvblR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChsb2NhdGlvbklkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBsIElOIGxvY2F0aW9uc1xuICAgIEZJTFRFUiBsLl9rZXkgPT0gJHtmb3JtYXRJZH1cbiAgICBSRVRVUk4gbGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQVEsT0FBT0EsRUFBUyxlQUFBQyxNQUFrQixvQkFDMUMsT0FBUSxjQUFBQyxFQUFZLGFBQUFDLEVBQVcsV0FBQUMsTUFBYyxlQUM3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QUFlLEtBQUtJLEVBQU0sQ0FBQyxVQUFXLEVBQUksQ0FBQyxFQUFFLEtBQUssSUFBTVAsQ0FBZSxDQUNoRixDQUdBLE9BQU9BLENBQ1QsQ0FBQyxFQUNBLE1BQU9RLEdBQWlCM0MsRUFBUyxDQUNoQyxhQUNBLFNBQVVFLEVBQ1YsTUFBT0gsRUFBVyxjQUNwQixFQUFHNEMsRUFBT2pDLENBQU8sRUFBRSxLQUFLLElBQU0sSUFBSSxDQUFDLENBQ3ZDLENBRUEsT0FBTyxJQUNULENBQUMsQ0FDTCxFQUVha0MsRUFBYyxDQUFDbEMsRUFBcUI2QixJQUE4QyxDQUM3RixLQUFNLENBQUMsYUFBQTNCLENBQVksRUFBSUYsRUFDakJtQyxFQUFtQmpELEVBQVEyQyxDQUFVLEVBRXJDTixFQUFtQnBDO0FBQUEsdUJBQ0pnRCxDQUFRO0FBQUEsY0FHN0IsT0FBTzVDLEVBQU1XLENBQVksRUFBRSxNQUFNcUIsQ0FBTSxFQUNwQyxLQUFNQyxHQUFXQSxFQUFPLEtBQUssQ0FBQyxFQUM5QixNQUFPUyxHQUFpQixDQUN2QixNQUFNQSxDQUNSLENBQUMsQ0FDTCIsCiAgIm5hbWVzIjogWyJodHRwR2V0IiwgInF1ZXJ5U3RyaW5nIiwgImNyZWF0ZUhhc2giLCAicGFyc2VDaGFyIiwgInBhcnNlSWQiLCAiYXFsIiwgIkNvbmZpZyIsICJFcnJvclR5cGVzIiwgImxvZ0Vycm9yIiwgInVzZURiIiwgImV2ZW50Q2F0ZWdvcnkiLCAiZ2V0RmllbGRWYWwiLCAiYWRkcmVzc0NvbXBvbmVudHMiLCAibmFtZSIsICJzaG9ydE5hbWUiLCAiYWRkcmVzc0ZpZWxkIiwgImZpZWxkVHlwZSIsICJhZGRMb2NhdGlvbiIsICJjb250ZXh0IiwgImxvY2F0aW9uIiwgImRhdGFiYXNlTmFtZSIsICJzZXNzaW9uSWQiLCAiYWRkcmVzcyIsICJpdGVtSWQiLCAiaXRlbVR5cGUiLCAiZ2VvY29kZVVybCIsICJwYXJhbXMiLCAidXJsIiwgImpzb24iLCAicmVzdWx0cyIsICJzdGF0dXMiLCAiZ2VvZGF0YSIsICJzdHJlZXROdW1iZXIiLCAicm91dGUiLCAibm93IiwgImZvcm1hdEl0ZW1UeXBlIiwgImZvcm1hdEl0ZW1JZCIsICJnb29nbGVJZCIsICJ1cGRhdGUiLCAiaW5zZXJ0IiwgIm9iaiIsICJhcWxRcnkiLCAiY3Vyc29yIiwgInVwZGF0ZWRMb2NhdGlvbiIsICJpdGVtRG9jSWQiLCAidXBkYXRlZExvY2F0aW9uS2V5IiwgImVkZ2VDb2xsZWN0aW9uIiwgImxvY2F0aW9uSWQiLCAibG9jYXRpb25Eb2NJZCIsICJlZGdlSWQiLCAiZWRnZSIsICJlcnJvciIsICJnZXRMb2NhdGlvbiIsICJmb3JtYXRJZCJdCn0K
@@ -1,33 +0,0 @@
1
- import{createHash as N,parseId as y,parseString as M}from"@nlabs/utils";import{aql as p}from"arangojs";import h from"lodash/cloneDeep";import{getConversation as R}from"./conversations";import{parseMessage as l}from"../adapters/messageAdapter";import{logError as f}from"../utils/analyticsUtils";import{getLimit as v,useDb as c}from"../utils/arangodbUtils";const A="messages",_=(s,o,{from:t,to:n})=>{const{databaseName:a,session:{userId:r}}=s,m=y(o),g=`users/${r}`,i=`conversations/${m}`,e=p`FOR e IN hasConversation
2
- FILTER e._from == ${g} && e._to == ${i}
3
- LIMIT 1
4
- RETURN e`;return c(a).query(e).then(d=>d.all()).then(d=>{if(!d.length)return[];const T=v(t,n),u=`FOR m IN messages
5
- FILTER m.conversationId == "${m}"
6
- SORT m.added DESC
7
- ${T.aql}
8
- SORT m.added ASC
9
- LET user = FIRST(
10
- FOR u IN users
11
- FILTER u._key == m.userId
12
- LIMIT 1
13
- RETURN u
14
- )
15
- RETURN MERGE(m, {user: user})`;return c(a).query(u).then(I=>I.all()).catch(I=>{throw I})})},O=(s,o)=>{const{databaseName:t,session:{userId:n}}=s,{conversationId:a,files:r,images:m,messageId:g=N(`message-${n}`)}=o,i=y(a);if(i==="")throw new Error("required_conversationId");const e=Date.now(),d={content:M(o.content,640),files:r||[],images:m||[],modified:e},T=y(g),u={...h(d),_key:T,added:e,conversationId:i,userId:n},I=p`UPSERT {_key: ${T}, conversationId: ${i}, userId: ${n}}
16
- INSERT ${u}
17
- UPDATE ${d} IN messages
18
- RETURN NEW`;return c(t).query(I).then(E=>E.next()).catch(E=>{throw E})},U=(s,o)=>{const{databaseName:t}=s,n=l(o),a=p`INSERT ${n} IN messages RETURN NEW`;return c(t).query(a).then(r=>r.next()).catch(r=>f({action:"addMessage",category:A,label:"addMessage"},r,s))},P=(s,o,t)=>{const{databaseName:n,session:{userId:a}}=s,r=y(o);return R(s,t).then(m=>{const{_key:g}=m,i=p`FOR m IN messages
19
- FILTER m._key == ${r} && m.to == ${g}
20
- UPDATE m WITH {saved: APPEND(m.saved, ${a}, true)} IN messages
21
- RETURN NEW`;return c(n).query(i).then(e=>e.next()).then(e=>e).catch(e=>{throw e})})},b=(s,o,t)=>{const{databaseName:n,session:{userId:a}}=s,r=y(o);return R(s,t).then(m=>{const{_key:g}=m,i=p`FOR m IN messages
22
- FILTER m._key == ${r} && m.to == ${g}
23
- UPDATE m WITH {saved: REMOVE_VALUE(m.saved, ${a})} IN messages
24
- RETURN NEW`;return c(n).query(i).then(e=>e.next()).then(e=>e).catch(e=>{throw e})})},w=(s,o,t)=>{const{databaseName:n,session:{userId:a}}=s,r=y(o);return R(s,t).then(m=>{const{_key:g}=m,i=p`FOR m IN messages
25
- FILTER m._key == ${r} && m.to == ${g} && m.from == ${a}
26
- REMOVE m IN messages
27
- RETURN OLD`;return c(n).query(i).then(e=>e.next()).then(e=>e).catch(e=>{throw e})})},Q=(s,o)=>{const{databaseName:t}=s,n=y(o),a=p`FOR m IN messages
28
- FILTER m._key == ${n}
29
- RETURN m`;return c(t).query(a).then(r=>r.next()).catch(r=>{throw r})},S=s=>{const o=p`FOR m IN messages
30
- FILTER m.added < DATE_TIMESTAMP(DATE_SUBTRACT(DATE_NOW(), 60, 'day')) && LENGTH(m.saved) > 0
31
- REMOVE m IN messages
32
- RETURN OLD`;return c(s).query(o).then(t=>t.all()).then(t=>t.length).catch(t=>{throw t})};export{U as addMessage,S as cleanMessages,w as deleteMessage,Q as getMessage,_ as getMessages,P as saveMessage,b as unsaveMessage,O as updateMessage};
33
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvbWVzc2FnZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG5pbXBvcnQge2dldENvbnZlcnNhdGlvbn0gZnJvbSAnLi9jb252ZXJzYXRpb25zJztcbmltcG9ydCB7cGFyc2VNZXNzYWdlfSBmcm9tICcuLi9hZGFwdGVycy9tZXNzYWdlQWRhcHRlcic7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcyc7XG5pbXBvcnQgdHlwZSB7Q29udmVyc2F0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucy50eXBlcyc7XG5pbXBvcnQgdHlwZSB7TWVzc2FnZUlucHV0VHlwZSwgTWVzc2FnZVR5cGV9IGZyb20gJy4uL3R5cGVzL21lc3NhZ2VzLnR5cGVzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ21lc3NhZ2VzJztcblxuZXhwb3J0IGNvbnN0IGdldE1lc3NhZ2VzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIHtmcm9tLCB0b30pOiBQcm9taXNlPE1lc3NhZ2VUeXBlW10+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZDogc3RyaW5nID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG5cbiAgY29uc3QgY29udmVyc2F0aW9uUXJ5ID0gYXFsYEZPUiBlIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBlLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfSAmJiBlLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gZWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoY29udmVyc2F0aW9uUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9ucykgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gICAgICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICAgIEZJTFRFUiBtLmNvbnZlcnNhdGlvbklkID09IFwiJHtmb3JtYXRDb252ZXJzYXRpb25JZH1cIlxuICAgICAgICAgIFNPUlQgbS5hZGRlZCBERVNDXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgU09SVCBtLmFkZGVkIEFTQ1xuICAgICAgICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBtLnVzZXJJZFxuICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgUkVUVVJOIHVcbiAgICAgICAgICApXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKG0sIHt1c2VyOiB1c2VyfSlgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlOiBNZXNzYWdlSW5wdXRUeXBlKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBmaWxlcyxcbiAgICBpbWFnZXMsXG4gICAgbWVzc2FnZUlkID0gY3JlYXRlSGFzaChgbWVzc2FnZS0ke3Nlc3Npb25JZH1gKVxuICB9ID0gbWVzc2FnZTtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuXG4gIGlmKGZvcm1hdENvbnZlcnNhdGlvbklkID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfY29udmVyc2F0aW9uSWQnKTtcbiAgfVxuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgdXBkYXRlOiBNZXNzYWdlVHlwZSA9IHtcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhtZXNzYWdlLmNvbnRlbnQsIDY0MCksXG4gICAgZmlsZXM6IGZpbGVzIHx8IFtdLFxuICAgIGltYWdlczogaW1hZ2VzIHx8IFtdLFxuICAgIG1vZGlmaWVkOiBub3dcbiAgfTtcbiAgY29uc3QgZm9ybWF0TXNnSWQ6IHN0cmluZyA9IHBhcnNlSWQobWVzc2FnZUlkKTtcbiAgY29uc3QgaW5zZXJ0OiBNZXNzYWdlVHlwZSA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRNc2dJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGNvbnZlcnNhdGlvbklkOiBmb3JtYXRDb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRNc2dJZH0sIGNvbnZlcnNhdGlvbklkOiAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSwgdXNlcklkOiAke3Nlc3Npb25JZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX0gSU4gbWVzc2FnZXNcbiAgICBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlOiBNZXNzYWdlSW5wdXRUeXBlKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5ld01lc3NhZ2U6IE1lc3NhZ2VUeXBlID0gcGFyc2VNZXNzYWdlKG1lc3NhZ2UpO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgSU5TRVJUICR7bmV3TWVzc2FnZX0gSU4gbWVzc2FnZXMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbjogJ2FkZE1lc3NhZ2UnLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2FkZE1lc3NhZ2UnXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZywgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udmVyc2F0aW9uSWQpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGNvbnZlcnNhdGlvbktleX0gPSBjb252ZXJzYXRpb247XG4gICAgICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgRklMVEVSIG0uX2tleSA9PSAke2Zvcm1hdElkfSAmJiBtLnRvID09ICR7Y29udmVyc2F0aW9uS2V5fVxuICAgICAgICBVUERBVEUgbSBXSVRIIHtzYXZlZDogQVBQRU5EKG0uc2F2ZWQsICR7c2Vzc2lvbklkfSwgdHJ1ZSl9IElOIG1lc3NhZ2VzXG4gICAgICAgIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4ge1xuICAgICAgICAgIGlmKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0byBtZXNzYWdlIGJveFxuICAgICAgICAgICAgLy8gY29uc3QgbWVzc2FnZTogTWVzc2FnZVR5cGUgPSBNZXNzYWdlcy5nZXRNZXNzYWdlT2JqZWN0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gaW8udG8obWVzc2FnZS50b0lkKS5lbWl0KCdtZXNzYWdlX3NhdmUnLCBtZXNzYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdW5zYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZywgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udmVyc2F0aW9uSWQpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGNvbnZlcnNhdGlvbktleX0gPSBjb252ZXJzYXRpb247XG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgICAgRklMVEVSIG0uX2tleSA9PSAke2Zvcm1hdElkfSAmJiBtLnRvID09ICR7Y29udmVyc2F0aW9uS2V5fVxuICAgICAgICAgIFVQREFURSBtIFdJVEgge3NhdmVkOiBSRU1PVkVfVkFMVUUobS5zYXZlZCwgJHtzZXNzaW9uSWR9KX0gSU4gbWVzc2FnZXNcbiAgICAgICAgICBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigobWVzc2FnZTogTWVzc2FnZVR5cGUpID0+IHtcbiAgICAgICAgICBpZihtZXNzYWdlKSB7XG4gICAgICAgICAgICAvLyBCcm9hZGNhc3QgdG8gbWVzc2FnZSBib3hcbiAgICAgICAgICAgIC8vIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UuaWQpLmVtaXQoJ21lc3NhZ2VfdW5zYXZlJywgbWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZU1lc3NhZ2UgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbWVzc2FnZUlkOiBzdHJpbmcsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQobWVzc2FnZUlkKTtcblxuICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgbS50byA9PSAke2NvbnZlcnNhdGlvbktleX0gJiYgbS5mcm9tID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBSRU1PVkUgbSBJTiBtZXNzYWdlc1xuICAgICAgICBSRVRVUk4gT0xEYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigobWVzc2FnZTogTWVzc2FnZVR5cGUpID0+IHtcbiAgICAgICAgICBpZihtZXNzYWdlKSB7XG4gICAgICAgICAgICAvLyBCcm9hZGNhc3QgdG8gbWVzc2FnZSBib3hcbiAgICAgICAgICAgIC8vIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UudG9JZCkuZW1pdCgnbWVzc2FnZV9kZWxldGUnLCBtZXNzYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH1cbiAgICBSRVRVUk4gbWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFuTWVzc2FnZXMgPSAoZGF0YWJhc2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAvLyBSZW1vdmUgYWxsIG1lc3NhZ2VzIHRoYXQgYXJlIG92ZXIgNjAgZGF5cyBhbmQgbm90IHNhdmVkXG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgRklMVEVSIG0uYWRkZWQgPCBEQVRFX1RJTUVTVEFNUChEQVRFX1NVQlRSQUNUKERBVEVfTk9XKCksIDYwLCAnZGF5JykpICYmIExFTkdUSChtLnNhdmVkKSA+IDBcbiAgICAgIFJFTU9WRSBtIElOIG1lc3NhZ2VzXG4gICAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0OiBNZXNzYWdlVHlwZVtdKSA9PiBsaXN0Lmxlbmd0aClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBUSxjQUFBQSxFQUFZLFdBQUFDLEVBQVMsZUFBQUMsTUFBa0IsZUFDL0MsT0FBUSxPQUFBQyxNQUFVLFdBRWxCLE9BQU9DLE1BQWUsbUJBRXRCLE9BQVEsbUJBQUFDLE1BQXNCLGtCQUM5QixPQUFRLGdCQUFBQyxNQUFtQiw2QkFDM0IsT0FBUSxZQUFBQyxNQUFlLDBCQUN2QixPQUFRLFlBQUFDLEVBQVUsU0FBQUMsTUFBWSx5QkFPOUIsTUFBTUMsRUFBd0IsV0FFakJDLEVBQWMsQ0FBQ0MsRUFBcUJDLEVBQXdCLENBQUMsS0FBQUMsRUFBTSxHQUFBQyxDQUFFLElBQThCLENBQzlHLEtBQU0sQ0FBQyxhQUFBQyxFQUFjLFFBQVMsQ0FBQyxPQUFRQyxDQUFTLENBQUMsRUFBSUwsRUFDL0NNLEVBQStCakIsRUFBUVksQ0FBYyxFQUNyRE0sRUFBdUIsU0FBU0YsQ0FBUyxHQUN6Q0csRUFBNEIsaUJBQWlCRixDQUFvQixHQUVqRUcsRUFBa0JsQjtBQUFBLHdCQUNGZ0IsQ0FBWSxnQkFBZ0JDLENBQWlCO0FBQUE7QUFBQSxjQUluRSxPQUFPWCxFQUFNTyxDQUFZLEVBQUUsTUFBTUssQ0FBZSxFQUM3QyxLQUFNQyxHQUFXQSxFQUFPLElBQUksQ0FBQyxFQUM3QixLQUFNQyxHQUFrQixDQUN2QixHQUFHLENBQUNBLEVBQWMsT0FDaEIsTUFBTyxDQUFDLEVBR1YsTUFBTUMsRUFBdUJoQixFQUFTTSxFQUFNQyxDQUFFLEVBQ3hDVSxFQUFpQjtBQUFBLHdDQUNXUCxDQUFvQjtBQUFBO0FBQUEsWUFFaERNLEVBQU0sR0FBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEs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U3RCO0FBQUE7QUFBQTtBQUFBLGtCQUtmLE9BQU9NLEVBQU1PLENBQVksRUFBRSxNQUFNUyxDQUFNLEVBQ3BDLEtBQU1ILEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLEtBQU13QixHQUF3QkEsRUFBSyxNQUFNLEVBQ3pDLE1BQU9wQixHQUFpQixDQUN2QixNQUFNQSxDQUNSLENBQUMsQ0FDTCIsCiAgIm5hbWVzIjogWyJjcmVhdGVIYXNoIiwgInBhcnNlSWQiLCAicGFyc2VTdHJpbmciLCAiYXFsIiwgImNsb25lRGVlcCIsICJnZXRDb252ZXJzYXRpb24iLCAicGFyc2VNZXNzYWdlIiwgImxvZ0Vycm9yIiwgImdldExpbWl0IiwgInVzZURiIiwgImV2ZW50Q2F0ZWdvcnkiLCAiZ2V0TWVzc2FnZXMiLCAiY29udGV4dCIsICJjb252ZXJzYXRpb25JZCIsICJmcm9tIiwgInRvIiwgImRhdGFiYXNlTmFtZSIsICJzZXNzaW9uSWQiLCAiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCAic2Vzc2lvbkRvY0lkIiwgImNvbnZlcnNhdGlvbkRvY0lkIiwgImNvbnZlcnNhdGlvblFyeSIsICJjdXJzb3IiLCAiY29udmVyc2F0aW9ucyIsICJsaW1pdCIsICJhcWxRcnkiLCAiZXJyb3IiLCAidXBkYXRlTWVzc2FnZSIsICJtZXNzYWdlIiwgImZpbGVzIiwgImltYWdlcyIsICJtZXNzYWdlSWQiLCAibm93IiwgInVwZGF0ZSIsICJmb3JtYXRNc2dJZCIsICJpbnNlcnQiLCAiYWRkTWVzc2FnZSIsICJuZXdNZXNzYWdlIiwgInNhdmVNZXNzYWdlIiwgImZvcm1hdElkIiwgImNvbnZlcnNhdGlvbiIsICJjb252ZXJzYXRpb25LZXkiLCAidW5zYXZlTWVzc2FnZSIsICJkZWxldGVNZXNzYWdlIiwgImdldE1lc3NhZ2UiLCAiY2xlYW5NZXNzYWdlcyIsICJsaXN0Il0KfQo=
@@ -1,2 +0,0 @@
1
- import{Notification as a,Provider as p}from"apn";import{Config as o}from"../config";const r=()=>new p({ca:o.get("app.apn.ca"),cert:o.get("app.apn.cert"),key:o.get("app.apn.key"),production:o.get("environment")==="prod"}),f=(n,t)=>{const i=r(),e=new a;return e.topic=o.get("app.apn.id"),e.alert=t.message,t.data&&(e.mutableContent=!0,e.payload=t.data),t.badge!==void 0&&(e.badge=t.badge),i.send(e,n)},g=n=>{const t=r(),i=new a;return i.badge=0,t.send(i,n)};export{g as clearBadges,r as getApnProvider,f as pushNotification};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvbm90aWZpY2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdub3RpZmljYXRpb25zJztcbi8vIFB1c2ggTm90aWZpY2F0aW9uc1xuaW1wb3J0IHtOb3RpZmljYXRpb24gYXMgQVBOTm90aWZpY2F0aW9uLCBQcm92aWRlciwgUmVzcG9uc2VzfSBmcm9tICdhcG4nO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHR5cGUge05vdGlmaWNhdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL25vdGlmaWNhdGlvbnMudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0QXBuUHJvdmlkZXIgPSAoKSA9PiBuZXcgUHJvdmlkZXIoe1xuICBjYTogQ29uZmlnLmdldCgnYXBwLmFwbi5jYScpLFxuICBjZXJ0OiBDb25maWcuZ2V0KCdhcHAuYXBuLmNlcnQnKSxcbiAga2V5OiBDb25maWcuZ2V0KCdhcHAuYXBuLmtleScpLFxuICBwcm9kdWN0aW9uOiBDb25maWcuZ2V0KCdlbnZpcm9ubWVudCcpID09PSAncHJvZCdcbn0pO1xuXG5leHBvcnQgY29uc3QgcHVzaE5vdGlmaWNhdGlvbiA9IChkZXZpY2VUb2tlbnM6IHN0cmluZ1tdLCBub3RlOiBOb3RpZmljYXRpb25UeXBlKTogUHJvbWlzZTxSZXNwb25zZXM+ID0+IHtcbiAgLy8gUHVzaCBub3RpZmljYXRpb24gdG8gZGV2aWNlXG4gIGNvbnN0IHByb3ZpZGVyOiBQcm92aWRlciA9IGdldEFwblByb3ZpZGVyKCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbjogQVBOTm90aWZpY2F0aW9uID0gbmV3IEFQTk5vdGlmaWNhdGlvbigpO1xuICBub3RpZmljYXRpb24udG9waWMgPSBDb25maWcuZ2V0KCdhcHAuYXBuLmlkJyk7XG4gIG5vdGlmaWNhdGlvbi5hbGVydCA9IG5vdGUubWVzc2FnZTtcblxuICBpZihub3RlLmRhdGEpIHtcbiAgICBub3RpZmljYXRpb24ubXV0YWJsZUNvbnRlbnQgPSB0cnVlO1xuICAgIG5vdGlmaWNhdGlvbi5wYXlsb2FkID0gbm90ZS5kYXRhO1xuICB9XG5cbiAgaWYobm90ZS5iYWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbm90aWZpY2F0aW9uLmJhZGdlID0gbm90ZS5iYWRnZTtcbiAgfVxuXG4gIHJldHVybiBwcm92aWRlci5zZW5kKG5vdGlmaWNhdGlvbiwgZGV2aWNlVG9rZW5zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhckJhZGdlcyA9IChkZXZpY2VUb2tlbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxSZXNwb25zZXM+ID0+IHtcbiAgLy8gUHVzaCBub3RpZmljYXRpb24gdG8gZGV2aWNlXG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0QXBuUHJvdmlkZXIoKTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0gbmV3IEFQTk5vdGlmaWNhdGlvbigpO1xuICBub3RpZmljYXRpb24uYmFkZ2UgPSAwO1xuXG4gIHJldHVybiBwcm92aWRlci5zZW5kKG5vdGlmaWNhdGlvbiwgZGV2aWNlVG9rZW5zKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFNQSxPQUFRLGdCQUFnQkEsRUFBaUIsWUFBQUMsTUFBMEIsTUFFbkUsT0FBUSxVQUFBQyxNQUFhLFlBSWQsTUFBTUMsRUFBaUIsSUFBTSxJQUFJRixFQUFTLENBQy9DLEdBQUlDLEVBQU8sSUFBSSxZQUFZLEVBQzNCLEtBQU1BLEVBQU8sSUFBSSxjQUFjLEVBQy9CLElBQUtBLEVBQU8sSUFBSSxhQUFhLEVBQzdCLFdBQVlBLEVBQU8sSUFBSSxhQUFhLElBQU0sTUFDNUMsQ0FBQyxFQUVZRSxFQUFtQixDQUFDQyxFQUF3QkMsSUFBK0MsQ0FFdEcsTUFBTUMsRUFBcUJKLEVBQWUsRUFDcENLLEVBQWdDLElBQUlSLEVBQzFDLE9BQUFRLEVBQWEsTUFBUU4sRUFBTyxJQUFJLFlBQVksRUFDNUNNLEVBQWEsTUFBUUYsRUFBSyxRQUV2QkEsRUFBSyxPQUNORSxFQUFhLGVBQWlCLEdBQzlCQSxFQUFhLFFBQVVGLEVBQUssTUFHM0JBLEVBQUssUUFBVSxTQUNoQkUsRUFBYSxNQUFRRixFQUFLLE9BR3JCQyxFQUFTLEtBQUtDLEVBQWNILENBQVksQ0FDakQsRUFFYUksRUFBZUosR0FBK0MsQ0FFekUsTUFBTUUsRUFBV0osRUFBZSxFQUMxQkssRUFBZSxJQUFJUixFQUN6QixPQUFBUSxFQUFhLE1BQVEsRUFFZEQsRUFBUyxLQUFLQyxFQUFjSCxDQUFZLENBQ2pEIiwKICAibmFtZXMiOiBbIkFQTk5vdGlmaWNhdGlvbiIsICJQcm92aWRlciIsICJDb25maWciLCAiZ2V0QXBuUHJvdmlkZXIiLCAicHVzaE5vdGlmaWNhdGlvbiIsICJkZXZpY2VUb2tlbnMiLCAibm90ZSIsICJwcm92aWRlciIsICJub3RpZmljYXRpb24iLCAiY2xlYXJCYWRnZXMiXQp9Cg==
@@ -1,32 +0,0 @@
1
- import{createHash as Y,parseChar as U,parseId as K,parseNum as P,parseString as B,parseVarChar as T}from"@nlabs/utils";import{aql as g}from"arangojs";import{ErrorTypes as V}from"../types/error.types";import{useDb as h}from"../utils";import{getUser as H}from"./users";import{logError as L,UserError as I}from"../utils/analyticsUtils";import{getStripeClient as E}from"../utils/stripeUtils";const M="payments",ye=t=>{const r="addCustomerAccount",{databaseName:c,session:{userId:n,username:s}}=t;return E().customers.create({metadata:{userId:n,username:s}}).then(o=>{const d={modified:Date.now(),stripeCustomerId:o.id},m=g`UPDATE ${n} WITH ${d} IN users LIMIT 1 RETURN NEW`;return h(c).query(m).then(y=>y.next()).then(y=>!!y).catch(y=>L({action:r,category:M,label:V.DATABASE_ERROR},y,t).then(()=>null))})},pe=(t,r)=>{const c="addPaymentAccountBank",{databaseName:n,session:{userId:s}}=t,{accountNumber:a,fullName:o,routing:u}=r,d=B(a,32);if(d==="")throw new I("required_account_number");const m=T(o,128);if(m==="")throw new I("required_full_name");const y=B(u,32);if(y==="")throw new I("required_routing_number");return H(t,{userId:s}).then(p=>{const{stripeAccountId:f}=p,C=E();return C.tokens.create({bank_account:{account_holder_name:m,account_holder_type:"individual",account_number:d,country:"US",currency:"USD",routing_number:y}}).then(e=>C.customers.createSource(f,{source:e.id})).then(e=>{const i=e,q=i.brand||"",w=i.cvc_check||"",b=i.last4||"",_=Date.now(),N={bankAccount:r,bankFullName:m,bankId:e.id,bankRouting:y,modified:_},R=g`UPDATE ${s} WITH ${N} IN users LIMIT 1 RETURN NEW`;return h(n).query(R).then(l=>l.next()).then(l=>l)}).catch(e=>e.message==="A bank account with that routing number and account number already exists for this customer."?L({action:c,category:M,label:"bank_account_exists"},e,t).then(()=>null):L({action:c,category:M,label:"payment_error"},e,t).then(()=>null))})},le=(t,r)=>{const c="addCreditCard",{databaseName:n,session:{userId:s}}=t;return H(t,{userId:s}).then(a=>{const{stripeAccountId:o}=a,{accountNumber:u,city:d,country:m,cvc:y,expMonth:p,expYear:f,fullName:C,street1:e,street2:i,state:q,zip:w}=r,b=P(u,16);if(!b)throw new I("required_credit_card_number");const _=P(p,2);if(!_)throw new I("required_credit_card_exp_month");const N=P(f,2);if(!N)throw new I("required_credit_card_exp_year");const R=P(y,3),l={},v=T(d,32);v&&(l.city=v);const S=U(m,2);S&&(l.country=S);const A=T(C,32);A&&(l.fullName=A);const k=T(e,32);k&&(l.street1=k);const F=T(i,32);F&&(l.street2=F);const Q=U(q,2);Q&&(l.state=Q);const $=T(w,10);$&&(l.zip=$);const W=E();return W.tokens.create({card:{address_city:v,address_country:S,address_line1:k,address_line2:F,address_state:Q,address_zip:$,cvc:R.toString(),exp_month:_.toString(),exp_year:N.toString(),name:C,number:b.toString()}}).then(D=>W.customers.createSource(o,{source:D.id})).then(D=>{const O=D,Z=O.brand||"",j=O.cvc_check||"",G=O.last4||"",z=Date.now(),J={...l,_key:Y(`user-payment-${s}`),accountNumber:G,added:z,brand:Z,cvcCheck:j,expMonth:p,expYear:f,modified:z,userId:s},X=g`INSERT ${J} IN creditCards RETURN NEW`;return h(n).query(X).then(x=>x.next()).then(x=>{if(x){const{_id:ee,_key:te}=r,re=h(n).collection("hasPayment"),ne=Y(`payment-${te}`),se={_from:`users/${s}`,_key:ne,_to:ee};return re.save(se,{returnNew:!0}).then(()=>r)}return x}).catch(x=>L({action:c,category:M,label:"payment_error"},x,t).then(()=>null))})})},fe=(t,r)=>{const{databaseName:c,session:{userId:n}}=t,{city:s,country:a,expMonth:o,expYear:u,fullName:d,id:m,street1:y,state:p,zip:f}=r,C=K(m);if(C)throw new I("required_credit_card_id");const e={},i=P(o,2),q=P(u,2),w=T(s,32),b=U(a,2),_=T(d,32),N=B(y,32),R=U(p,2),l=T(f,10);i&&(e.expMonth=i),q&&(e.expYear=q),w&&(e.city=w),b&&(e.country=b),_&&(e.fullName=_),N&&(e.street1=N),R&&(e.state=R),l&&(e.zip=l);const S=g`
2
- LET updatedCard = FIRST(
3
- FOR c IN creditCards
4
- FILTER c._key == ${C} && c.userId == ${n}
5
- UPDATE c WITH ${e} IN creditCards
6
- LIMIT 1
7
- RETURN NEW
8
- )
9
- LET user = FIRST(
10
- FOR u IN users
11
- FILTER u._key == ${n}
12
- LIMIT 1
13
- RETURN u
14
- )
15
- RETURN {user: user, card: updatedCard}`;return h(c).query(S).then(A=>A.next()).then((A={card:{},user:{}})=>{const k=A.card,{user:F}=A;if(!k)throw new I("not_found");const{stripeCustomerId:Q}=F,{stripeId:$}=r,W=E(),D={address_city:w,address_country:b,address_line1:N,address_state:R,address_zip:l,exp_month:i.toString(),exp_year:q.toString(),name:_};return W.customers.updateSource(Q,$,D).then(()=>r).catch(O=>{throw new I("payment_error")})})},Ce=t=>{const r="getCreditCards",{databaseName:c,session:{userId:n}}=t,s=g`FOR c IN creditCards
16
- FILTER c.userId == ${n}
17
- RETURN c`;return h(c).query(s).then(a=>a.all()).then((a=[])=>a).catch(a=>L({action:r,category:M,label:V.DATABASE_ERROR},a,t).then(()=>null))},he=(t,r)=>{const{databaseName:c,session:{userId:n}}=t,s=K(r),a=g`
18
- LET card = FIRST(
19
- FOR c IN creditCards
20
- FILTER c._key == ${s} && c.userId == ${n}
21
- LIMIT 1
22
- REMOVE c IN creditCards
23
- RETURN OLD
24
- )
25
- LET user = FIRST(
26
- FOR u IN users
27
- FILTER u._key == ${n}
28
- LIMIT 1
29
- RETURN u
30
- )
31
- RETURN {user: user, card: card}`;return h(c).query(a).then(o=>o.next()).then((o={card:{},user:{}})=>{if(!o)return!1;const{card:u,user:d}=o,{_key:m}=u;return h(c).collection("hasPayment").outEdges(m,{}).then(async p=>{const f=Array.isArray(p)?p:[];return f.length?(await Promise.all(f.map(C=>{const{_key:e}=C,i=g`REMOVE {_key:${e}} IN hasPayment`;return h(c).query(i)})).then(()=>E().customers.deleteSource(d.stripeCustomerId,u.stripeId).then(()=>!0).catch(e=>{throw new I("payment_error")})),!0):!1})})},Ie=(t,r)=>{const{databaseName:c,session:{userId:n}}=t,s={bankAccount:"",bankFullName:"",bankId:"",bankRouting:"",modified:Date.now()},a=g`UPDATE ${n} WITH ${s} IN users LIMIT 1 RETURN NEW`;return h(c).query(a).then(o=>o.next()).then(o=>{const{stripeAccountId:u}=o;return E().customers.deleteSource(u,r).then(()=>!0).catch(()=>Promise.resolve(!1))})},ge=(t,r)=>{const{databaseName:c,session:{userId:n}}=t,{amount:s,currency:a}=r,o=P(s),u=U(a,3,"USD").toUpperCase();return H(t,{userId:n}).then(d=>{const{stripeAccountId:m}=d;return E().transfers.create({amount:o,currency:u,destination:m}).then(p=>{const f=Date.now(),e=g`INSERT ${{added:f,amount:o,currency:u,modified:f,userId:n}} IN transfers RETURN NEW`;return h(c).query(e).then(i=>i.next()).then(i=>i)})})},Te=(t,r)=>{const{databaseName:c,session:{userId:n}}=t,{amount:s,capture:a,cardId:o,currency:u,description:d}=r,m=U(u,3,"USD").toUpperCase();return E().charges.create({amount:s,capture:a,currency:m,description:d,source:o}).then(p=>{const f=Date.now(),C={added:f,amount:s,capture:a,cardId:o,chargeFailCode:p.failure_code,chargeFailMsg:p.failure_message,chargeId:p.id,chargeStatus:p.status,currency:m,description:d,modified:f,userId:n},e=g`INSERT ${C} IN payments RETURN NEW`;return h(c).query(e).then(i=>i.next()).then(i=>i)}).catch(p=>{throw new I("payment_error")})};export{pe as addBankAccount,le as addCreditCard,ye as addCustomerAccount,Te as createPaymentHold,ge as createPaymentTransfer,Ie as deleteBankAccount,he as deleteCreditCard,Ce as getCreditCards,fe as updateCreditCard};
32
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBzdHJpcGUgZnJvbSAnc3RyaXBlJztcblxuaW1wb3J0IHtBcGlDb250ZXh0LCBQYXltZW50QmFua0FjY291bnQsIFBheW1lbnRDYXJkVHlwZSwgUGF5bWVudENoYXJnZSwgUGF5bWVudFRyYW5zZmVyLCBVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2dldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuaW1wb3J0IHtsb2dFcnJvciwgVXNlckVycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscyc7XG5pbXBvcnQge2dldFN0cmlwZUNsaWVudH0gZnJvbSAnLi4vdXRpbHMvc3RyaXBlVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdwYXltZW50cyc7XG5cbmV4cG9ydCBjb25zdCBhZGRDdXN0b21lckFjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkQ3VzdG9tZXJBY2NvdW50JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX19ID0gY29udGV4dDtcblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoY3VzdG9tZXIpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCB1cGRhdGU6IFVzZXJUeXBlID0ge1xuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBzdHJpcGVDdXN0b21lcklkOiBjdXN0b21lci5pZFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyVHlwZSkgPT4gISF1cGRhdGVkVXNlcilcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEJhbmtBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGJhbmtBY2NvdW50OiBQYXltZW50QmFua0FjY291bnQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFBheW1lbnRBY2NvdW50QmFuayc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBQYXJhbXNcbiAgY29uc3Qge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgZnVsbE5hbWUsXG4gICAgcm91dGluZ1xuICB9ID0gYmFua0FjY291bnQ7XG5cbiAgY29uc3QgZm9ybWF0QWNjb3VudDogc3RyaW5nID0gcGFyc2VTdHJpbmcoYWNjb3VudE51bWJlciwgMzIpO1xuXG4gIGlmKGZvcm1hdEFjY291bnQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfYWNjb3VudF9udW1iZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhyb3V0aW5nLCAzMik7XG5cbiAgaWYoZm9ybWF0Um91dGluZyA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9yb3V0aW5nX251bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICAvLyBDcmVhdGUgYSB0b2tlbiBmaXJzdCwgdGhlbiB1c2UgdGhlIHRva2VuIGFzIHRoZSBzb3VyY2VcbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudG9rZW5zLmNyZWF0ZSh7XG4gICAgICAgIGJhbmtfYWNjb3VudDoge1xuICAgICAgICAgIGFjY291bnRfaG9sZGVyX25hbWU6IGZvcm1hdEZ1bGxOYW1lLFxuICAgICAgICAgIGFjY291bnRfaG9sZGVyX3R5cGU6ICdpbmRpdmlkdWFsJyxcbiAgICAgICAgICBhY2NvdW50X251bWJlcjogZm9ybWF0QWNjb3VudCxcbiAgICAgICAgICBjb3VudHJ5OiAnVVMnLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICByb3V0aW5nX251bWJlcjogZm9ybWF0Um91dGluZ1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgICAudGhlbigodG9rZW4pID0+IHN0cmlwZUNsaWVudC5jdXN0b21lcnMuY3JlYXRlU291cmNlKFxuICAgICAgICAgIHN0cmlwZUFjY291bnRJZCxcbiAgICAgICAgICB7c291cmNlOiB0b2tlbi5pZH1cbiAgICAgICAgKSlcbiAgICAgICAgLnRoZW4oKGFjY291bnQpID0+IHtcbiAgICAgICAgICAvLyBVc2UgdHlwZSBhc3NlcnRpb24gZm9yIGNhcmQgcHJvcGVydGllc1xuICAgICAgICAgIGNvbnN0IGNhcmRTb3VyY2UgPSBhY2NvdW50IGFzIHVua25vd24gYXMgQ2FyZDtcbiAgICAgICAgICBjb25zdCBicmFuZCA9IGNhcmRTb3VyY2UuYnJhbmQgfHwgJyc7XG4gICAgICAgICAgY29uc3QgY3ZjQ2hlY2sgPSBjYXJkU291cmNlLmN2Y19jaGVjayB8fCAnJztcbiAgICAgICAgICBjb25zdCBsYXN0NCA9IGNhcmRTb3VyY2UubGFzdDQgfHwgJyc7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudCxcbiAgICAgICAgICAgIGJhbmtGdWxsTmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgICBiYW5rSWQ6IGFjY291bnQuaWQsXG4gICAgICAgICAgICBiYW5rUm91dGluZzogZm9ybWF0Um91dGluZyxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3dcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyVHlwZSkgPT4gdXBkYXRlZFVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgICBpZihtc2cgPT09ICdBIGJhbmsgYWNjb3VudCB3aXRoIHRoYXQgcm91dGluZyBudW1iZXIgYW5kIGFjY291bnQgbnVtYmVyICcgK1xuICAgICAgICAgICdhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBjdXN0b21lci4nKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogJ2JhbmtfYWNjb3VudF9leGlzdHMnXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJ1xuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDcmVkaXRDYXJkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNhcmQ6IFBheW1lbnRDYXJkVHlwZSk6IFByb21pc2U8VXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZENyZWRpdENhcmQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIC8vIFVzZXJcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcblxuICAgICAgLy8gQ2FyZFxuICAgICAgY29uc3Qge1xuICAgICAgICBhY2NvdW50TnVtYmVyLFxuICAgICAgICBjaXR5LFxuICAgICAgICBjb3VudHJ5LFxuICAgICAgICBjdmMsXG4gICAgICAgIGV4cE1vbnRoLFxuICAgICAgICBleHBZZWFyLFxuICAgICAgICBmdWxsTmFtZSxcbiAgICAgICAgc3RyZWV0MSxcbiAgICAgICAgc3RyZWV0MixcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHppcFxuICAgICAgfTogUGF5bWVudENhcmRUeXBlID0gY2FyZDtcblxuICAgICAgY29uc3QgZm9ybWF0TnVtYmVyOiBudW1iZXIgPSBwYXJzZU51bShhY2NvdW50TnVtYmVyLCAxNik7XG5cbiAgICAgIGlmKCFmb3JtYXROdW1iZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfbnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEV4cE1vbnRoOiBudW1iZXIgPSBwYXJzZU51bShleHBNb250aCwgMik7XG5cbiAgICAgIGlmKCFmb3JtYXRFeHBNb250aCkge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9leHBfbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RXhwWWVhcjogbnVtYmVyID0gcGFyc2VOdW0oZXhwWWVhciwgMik7XG5cbiAgICAgIGlmKCFmb3JtYXRFeHBZZWFyKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2V4cF95ZWFyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEN2YzogbnVtYmVyID0gcGFyc2VOdW0oY3ZjLCAzKTtcblxuICAgICAgLy8gQWRkcmVzc1xuICAgICAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9O1xuICAgICAgY29uc3QgZm9ybWF0Q2l0eTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcblxuICAgICAgaWYoZm9ybWF0Q2l0eSkge1xuICAgICAgICBwYXltZW50Q2FyZC5jaXR5ID0gZm9ybWF0Q2l0eTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0Q291bnRyeTogc3RyaW5nID0gcGFyc2VDaGFyKGNvdW50cnksIDIpO1xuXG4gICAgICBpZihmb3JtYXRDb3VudHJ5KSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmNvdW50cnkgPSBmb3JtYXRDb3VudHJ5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRGdWxsTmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdEZ1bGxOYW1lKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmZ1bGxOYW1lID0gZm9ybWF0RnVsbE5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFN0cmVldDE6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0cmVldDEpIHtcbiAgICAgICAgcGF5bWVudENhcmQuc3RyZWV0MSA9IGZvcm1hdFN0cmVldDE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFN0cmVldDI6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihzdHJlZXQyLCAzMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0cmVldDIpIHtcbiAgICAgICAgcGF5bWVudENhcmQuc3RyZWV0MiA9IGZvcm1hdFN0cmVldDI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFN0YXRlOiBzdHJpbmcgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuXG4gICAgICBpZihmb3JtYXRTdGF0ZSkge1xuICAgICAgICBwYXltZW50Q2FyZC5zdGF0ZSA9IGZvcm1hdFN0YXRlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRaaXA6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcih6aXAsIDEwKTtcblxuICAgICAgaWYoZm9ybWF0WmlwKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnppcCA9IGZvcm1hdFppcDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIHRva2VuIGZpcnN0LCB0aGVuIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHNvdXJjZVxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC50b2tlbnMuY3JlYXRlKHtcbiAgICAgICAgY2FyZDoge1xuICAgICAgICAgIGFkZHJlc3NfY2l0eTogZm9ybWF0Q2l0eSxcbiAgICAgICAgICBhZGRyZXNzX2NvdW50cnk6IGZvcm1hdENvdW50cnksXG4gICAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgICBhZGRyZXNzX2xpbmUyOiBmb3JtYXRTdHJlZXQyLFxuICAgICAgICAgIGFkZHJlc3Nfc3RhdGU6IGZvcm1hdFN0YXRlLFxuICAgICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgICAgY3ZjOiBmb3JtYXRDdmMudG9TdHJpbmcoKSxcbiAgICAgICAgICBleHBfbW9udGg6IGZvcm1hdEV4cE1vbnRoLnRvU3RyaW5nKCksXG4gICAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIudG9TdHJpbmcoKSxcbiAgICAgICAgICBuYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgICBudW1iZXI6IGZvcm1hdE51bWJlci50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKCh0b2tlbikgPT4gc3RyaXBlQ2xpZW50LmN1c3RvbWVycy5jcmVhdGVTb3VyY2UoXG4gICAgICAgICAgc3RyaXBlQWNjb3VudElkLFxuICAgICAgICAgIHtzb3VyY2U6IHRva2VuLmlkfVxuICAgICAgICApKVxuICAgICAgICAudGhlbigobmV3U291cmNlKSA9PiB7XG4gICAgICAgIC8vIFVzZSB0eXBlIGFzc2VydGlvbiBmb3IgY2FyZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgY29uc3QgY2FyZFNvdXJjZSA9IG5ld1NvdXJjZSBhcyB1bmtub3duIGFzIENhcmQ7XG4gICAgICAgICAgY29uc3QgYnJhbmQgPSBjYXJkU291cmNlLmJyYW5kIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGN2Y0NoZWNrID0gY2FyZFNvdXJjZS5jdmNfY2hlY2sgfHwgJyc7XG4gICAgICAgICAgY29uc3QgbGFzdDQgPSBjYXJkU291cmNlLmxhc3Q0IHx8ICcnO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIHNlc3Npb25cbiAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgICAgICAgLi4ucGF5bWVudENhcmQsXG4gICAgICAgICAgICBfa2V5OiBjcmVhdGVIYXNoKGB1c2VyLXBheW1lbnQtJHtzZXNzaW9uSWR9YCksXG4gICAgICAgICAgICBhY2NvdW50TnVtYmVyOiBsYXN0NCxcbiAgICAgICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgICAgICBicmFuZCxcbiAgICAgICAgICAgIGN2Y0NoZWNrLFxuICAgICAgICAgICAgZXhwTW9udGgsXG4gICAgICAgICAgICBleHBZZWFyLFxuICAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpbnNlcnRBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gY3JlZGl0Q2FyZHMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShpbnNlcnRBcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKG5ld0NhcmQ6IFBheW1lbnRDYXJkVHlwZSkgPT4ge1xuICAgICAgICAgICAgICBpZihuZXdDYXJkKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBsaW5rZWQgZWRnZVxuICAgICAgICAgICAgICAgIGNvbnN0IHtfaWQ6IGNhcmRJZCwgX2tleTogY2FyZEtleX0gPSBjYXJkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzUGF5bWVudCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHtjYXJkS2V5fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB7XG4gICAgICAgICAgICAgICAgICBfZnJvbTogYHVzZXJzLyR7c2Vzc2lvbklkfWAsXG4gICAgICAgICAgICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgICAgICAgICAgICBfdG86IGNhcmRJZFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBjYXJkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdDYXJkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBleHBNb250aCxcbiAgICBleHBZZWFyLFxuICAgIGZ1bGxOYW1lLFxuICAgIGlkLFxuICAgIHN0cmVldDEsXG4gICAgc3RhdGUsXG4gICAgemlwXG4gIH06IFBheW1lbnRDYXJkVHlwZSA9IGNhcmQ7XG5cbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuXG4gIGlmKGZvcm1hdElkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfaWQnKTtcbiAgfVxuXG4gIGNvbnN0IHBheW1lbnRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSB7fTtcbiAgY29uc3QgZm9ybWF0RXhwTW9udGg6IG51bWJlciA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcbiAgY29uc3QgZm9ybWF0RXhwWWVhcjogbnVtYmVyID0gcGFyc2VOdW0oZXhwWWVhciwgMik7XG4gIGNvbnN0IGZvcm1hdENpdHk6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihjaXR5LCAzMik7XG4gIGNvbnN0IGZvcm1hdENvdW50cnk6IHN0cmluZyA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcbiAgY29uc3QgZm9ybWF0RnVsbE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihmdWxsTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRTdHJlZXQxOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhzdHJlZXQxLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0YXRlOiBzdHJpbmcgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuICBjb25zdCBmb3JtYXRaaXA6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcih6aXAsIDEwKTtcblxuICBpZihmb3JtYXRFeHBNb250aCkge1xuICAgIHBheW1lbnRDYXJkLmV4cE1vbnRoID0gZm9ybWF0RXhwTW9udGg7XG4gIH1cblxuICBpZihmb3JtYXRFeHBZZWFyKSB7XG4gICAgcGF5bWVudENhcmQuZXhwWWVhciA9IGZvcm1hdEV4cFllYXI7XG4gIH1cblxuICBpZihmb3JtYXRDaXR5KSB7XG4gICAgcGF5bWVudENhcmQuY2l0eSA9IGZvcm1hdENpdHk7XG4gIH1cblxuICBpZihmb3JtYXRDb3VudHJ5KSB7XG4gICAgcGF5bWVudENhcmQuY291bnRyeSA9IGZvcm1hdENvdW50cnk7XG4gIH1cblxuICBpZihmb3JtYXRGdWxsTmFtZSkge1xuICAgIHBheW1lbnRDYXJkLmZ1bGxOYW1lID0gZm9ybWF0RnVsbE5hbWU7XG4gIH1cblxuICBpZihmb3JtYXRTdHJlZXQxKSB7XG4gICAgcGF5bWVudENhcmQuc3RyZWV0MSA9IGZvcm1hdFN0cmVldDE7XG4gIH1cblxuICBpZihmb3JtYXRTdGF0ZSkge1xuICAgIHBheW1lbnRDYXJkLnN0YXRlID0gZm9ybWF0U3RhdGU7XG4gIH1cblxuICBpZihmb3JtYXRaaXApIHtcbiAgICBwYXltZW50Q2FyZC56aXAgPSBmb3JtYXRaaXA7XG4gIH1cblxuICBjb25zdCB1cGRhdGUgPSBwYXltZW50Q2FyZDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIExFVCB1cGRhdGVkQ2FyZCA9IEZJUlNUKFxuICAgICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBVUERBVEUgYyBXSVRIICR7dXBkYXRlfSBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiBORVdcbiAgICAgIClcbiAgICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogdXBkYXRlZENhcmR9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2FyZDogUGF5bWVudENhcmRUeXBlID0gcmVzdWx0cy5jYXJkO1xuICAgICAgY29uc3Qge3VzZXJ9ID0gcmVzdWx0cztcblxuICAgICAgaWYoIXVwZGF0ZWRDYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ25vdF9mb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7c3RyaXBlQ3VzdG9tZXJJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qge3N0cmlwZUlkfSA9IGNhcmQ7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogc3RyaXBlLkN1c3RvbWVyVXBkYXRlU291cmNlUGFyYW1zID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgudG9TdHJpbmcoKSxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogZm9ybWF0RnVsbE5hbWVcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC51cGRhdGVTb3VyY2Uoc3RyaXBlQ3VzdG9tZXJJZCwgc3RyaXBlSWQsIHVwZGF0ZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2FyZClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OnVwZGF0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JlZGl0Q2FyZHMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudENhcmRUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENyZWRpdENhcmRzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgRklMVEVSIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0OiBQYXltZW50Q2FyZFR5cGVbXSA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDYXJkSWQ6IHN0cmluZyA9IHBhcnNlSWQoY2FyZElkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgY2FyZCA9IEZJUlNUKFxuICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRDYXJkSWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVNT1ZFIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIFJFVFVSTiBPTERcbiAgICApXG4gICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIHt1c2VyOiB1c2VyLCBjYXJkOiBjYXJkfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdCA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2NhcmQsIHVzZXJ9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qge19rZXk6IGNhcmRLZXl9ID0gY2FyZDtcblxuICAgICAgLy8gUmVtb3ZlIGxpbmtlZCBlZGdlc1xuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc1BheW1lbnQnKTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLm91dEVkZ2VzKGNhcmRLZXksIHt9KVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBFeHRyYWN0IGVkZ2VzIGZyb20gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgY29uc3QgZWRnZXMgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSA/IHJlc3BvbnNlIDogW107XG5cbiAgICAgICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGhhc1BheW1lbnRgO1xuICAgICAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHJlbW92ZUFxbFFyeSk7XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXBlXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAgICAgICAgICAgLmRlbGV0ZVNvdXJjZSh1c2VyLnN0cmlwZUN1c3RvbWVySWQsIGNhcmQuc3RyaXBlSWQpXG4gICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjpkZWxldGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUJhbmtBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGJhbmtJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBDbGVhbiBkYlxuICBjb25zdCB1cGRhdGU6IFVzZXJUeXBlID0ge1xuICAgIGJhbmtBY2NvdW50OiAnJyxcbiAgICBiYW5rRnVsbE5hbWU6ICcnLFxuICAgIGJhbmtJZDogJycsXG4gICAgYmFua1JvdXRpbmc6ICcnLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5kZWxldGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCBiYW5rSWQpXG4gICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50VHJhbnNmZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdHJhbnNmZXI6IFBheW1lbnRUcmFuc2Zlcik6IFByb21pc2U8UGF5bWVudFRyYW5zZmVyPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2Ftb3VudCwgY3VycmVuY3l9ID0gdHJhbnNmZXI7XG4gIGNvbnN0IGZvcm1hdEFtb3VudDogbnVtYmVyID0gcGFyc2VOdW0oYW1vdW50KTtcbiAgY29uc3QgZm9ybWF0Q3VycmVuY3k6IHN0cmluZyA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnRyYW5zZmVyc1xuICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICBhbW91bnQ6IGZvcm1hdEFtb3VudCxcbiAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgZGVzdGluYXRpb246IHN0cmlwZUFjY291bnRJZFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoc3RyaXBlVHJhbnNmZXIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhzdHJpcGVUcmFuc2Zlcik7XG4gICAgICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudFRyYW5zZmVyID0ge1xuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gdHJhbnNmZXJzIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdUcmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKSA9PiBuZXdUcmFuc2Zlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRIb2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBheW1lbnQ6IFBheW1lbnRDaGFyZ2UpOiBQcm9taXNlPFBheW1lbnRDaGFyZ2U+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiBzdHJpcGVDbGllbnQuY2hhcmdlc1xuICAgIC5jcmVhdGUoe1xuICAgICAgYW1vdW50LFxuICAgICAgY2FwdHVyZSxcbiAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc291cmNlOiBjYXJkSWRcbiAgICB9KVxuICAgIC50aGVuKChzdHJpcGVDaGFyZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudENoYXJnZSA9IHtcbiAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBjYXB0dXJlLFxuICAgICAgICBjYXJkSWQsXG4gICAgICAgIGNoYXJnZUZhaWxDb2RlOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9jb2RlLFxuICAgICAgICBjaGFyZ2VGYWlsTXNnOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9tZXNzYWdlLFxuICAgICAgICBjaGFyZ2VJZDogc3RyaXBlQ2hhcmdlLmlkLFxuICAgICAgICBjaGFyZ2VTdGF0dXM6IHN0cmlwZUNoYXJnZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9O1xuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBheW1lbnRzIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChuZXdQYXltZW50OiBQYXltZW50Q2hhcmdlKSA9PiBuZXdQYXltZW50KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmNyZWF0ZUhvbGQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH0pO1xufTtcblxuaW50ZXJmYWNlIENhcmQge1xuICBpZDogc3RyaW5nO1xuICBicmFuZD86IHN0cmluZztcbiAgY3ZjX2NoZWNrPzogc3RyaW5nO1xuICBsYXN0ND86IHN0cmluZztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQVEsY0FBQUEsRUFBWSxhQUFBQyxFQUFXLFdBQUFDLEVBQVMsWUFBQUMsRUFBVSxlQUFBQyxFQUFhLGdCQUFBQyxNQUFtQixlQUNsRixPQUFRLE9BQUFDLE1BQVUsV0FLbEIsT0FBUSxjQUFBQyxNQUFpQix1QkFDekIsT0FBUSxTQUFBQyxNQUFZLFdBQ3BCLE9BQVEsV0FBQUMsTUFBYyxVQUN0QixPQUFRLFlBQUFDLEVBQVUsYUFBQUMsTUFBZ0IsMEJBQ2xDLE9BQVEsbUJBQUFDLE1BQXNCLHVCQUk5QixNQUFNQyxFQUFnQixXQUVUQyxHQUFzQkMsR0FBMEMsQ0FDM0UsTUFBTUMsRUFBUyxxQkFDVCxDQUFDLGFBQUFDLEVBQWMsUUFBUyxDQUFDLE9BQVFDLEVBQVcsU0FBQUMsQ0FBUSxDQUFDLEVBQUlKLEVBSS9ELE9BRnFCSCxFQUFnQixFQUVqQixVQUNqQixPQUFPLENBQ04sU0FBVSxDQUNSLE9BQVFNLEVBQ1IsU0FBQUMsQ0FDRixDQUNGLENBQUMsRUFDQSxLQUFNQyxHQUFhLENBR2xCLE1BQU1DLEVBQW1CLENBQ3ZCLFNBRmtCLEtBQUssSUFBSSxFQUczQixpQkFBa0JELEVBQVMsRUFDN0IsRUFFTUUsRUFBbUJoQixXQUFhWSxDQUFTLFNBQVNHLENBQU0sK0JBRTlELE9BQU9iLEVBQU1TLENBQVksRUFBRSxNQUFNSyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLEtBQU1DLEdBQTBCLENBQUMsQ0FBQ0EsQ0FBVyxFQUM3QyxNQUFPQyxHQUFpQmYsRUFBUyxDQUNoQyxPQUFBTSxFQUNBLFNBQVVILEVBQ1YsTUFBT04sRUFBVyxjQUNwQixFQUFHa0IsRUFBT1YsQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDdkMsQ0FBQyxDQUNMLEVBRWFXLEdBQWlCLENBQUNYLEVBQXFC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LEtBQU1tRixHQUE4QkEsQ0FBVSxDQUNuRCxDQUFDLEVBQ0EsTUFBT2pGLEdBQWlCLENBRXZCLE1BQU0sSUFBSWQsRUFBVSxlQUFlLENBQ3JDLENBQUMsQ0FDTCIsCiAgIm5hbWVzIjogWyJjcmVhdGVIYXNoIiwgInBhcnNlQ2hhciIsICJwYXJzZUlkIiwgInBhcnNlTnVtIiwgInBhcnNlU3RyaW5nIiwgInBhcnNlVmFyQ2hhciIsICJhcWwiLCAiRXJyb3JUeXBlcyIsICJ1c2VEYiIsICJnZXRVc2VyIiwgImxvZ0Vycm9yIiwgIlVzZXJFcnJvciIsICJnZXRTdHJpcGVDbGllbnQiLCAiZXZlbnRDYXRlZ29yeSIsICJhZGRDdXN0b21lckFjY291bnQiLCAiY29udGV4dCIsICJhY3Rpb24iLCAiZGF0YWJhc2VOYW1lIiwgInNlc3Npb25JZCIsICJ1c2VybmFtZSIsICJjdXN0b21lciIsICJ1cGRhdGUiLCAiYXFsUXJ5IiwgImN1cnNvciIsICJ1cGRhdGVkVXNlciIsICJlcnJvciIsICJhZGRCYW5rQWNjb3VudCIsICJiYW5rQWNjb3VudCIsICJhY2NvdW50TnVtYmVyIiwgImZ1bGxOYW1lIiwgInJvdXRpbmciLCAiZm9ybWF0QWNjb3VudCIsICJmb3JtYXRGdWxsTmFtZSIsICJmb3JtYXRSb3V0aW5nIiwgInVzZXIiLCAic3RyaXBlQWNjb3VudElkIiwgInN0cmlwZUNsaWVudCIsICJ0b2tlbiIsICJhY2NvdW50IiwgImNhcmRTb3VyY2UiLCAiYnJhbmQiLCAiY3ZjQ2hlY2siLCAibGFzdDQiLCAibm93IiwgImFkZENyZWRpdENhcmQiLCAiY2FyZCIsICJjaXR5IiwgImNvdW50cnkiLCAiY3ZjIiwgImV4cE1vbnRoIiwgImV4cFllYXIiLCAic3RyZWV0MSIsICJzdHJlZXQyIiwgInN0YXRlIiwgInppcCIsICJmb3JtYXROdW1iZXIiLCAiZm9ybWF0RXhwTW9udGgiLCAiZm9ybWF0RXhwWWVhciIsICJmb3JtYXRDdmMiLCAicGF5bWVudENhcmQiLCAiZm9ybWF0Q2l0eSIsICJmb3JtYXRDb3VudHJ5IiwgImZvcm1hdFN0cmVldDEiLCAiZm9ybWF0U3RyZWV0MiIsICJmb3JtYXRTdGF0ZSIsICJmb3JtYXRaaXAiLCAibmV3U291cmNlIiwgImluc2VydCIsICJpbnNlcnRBcWxRcnkiLCAibmV3Q2FyZCIsICJjYXJkSWQiLCAiY2FyZEtleSIsICJlZGdlQ29sbGVjdGlvbiIsICJlZGdlSWQiLCAiZWRnZSIsICJ1cGRhdGVDcmVkaXRDYXJkIiwgImlkIiwgImZvcm1hdElkIiwgInJlc3VsdHMiLCAidXBkYXRlZENhcmQiLCAic3RyaXBlQ3VzdG9tZXJJZCIsICJzdHJpcGVJZCIsICJnZXRDcmVkaXRDYXJkcyIsICJsaXN0IiwgImRlbGV0ZUNyZWRpdENhcmQiLCAiZm9ybWF0Q2FyZElkIiwgInJlc3VsdCIsICJyZXNwb25zZSIsICJlZGdlcyIsICJlZGdlS2V5IiwgInJlbW92ZUFxbFFyeSIsICJkZWxldGVCYW5rQWNjb3VudCIsICJiYW5rSWQiLCAiY3JlYXRlUGF5bWVudFRyYW5zZmVyIiwgInRyYW5zZmVyIiwgImFtb3VudCIsICJjdXJyZW5jeSIsICJmb3JtYXRBbW91bnQiLCAiZm9ybWF0Q3VycmVuY3kiLCAic3RyaXBlVHJhbnNmZXIiLCAibmV3VHJhbnNmZXIiLCAiY3JlYXRlUGF5bWVudEhvbGQiLCAicGF5bWVudCIsICJjYXB0dXJlIiwgImRlc2NyaXB0aW9uIiwgInN0cmlwZUNoYXJnZSIsICJuZXdQYXltZW50Il0KfQo=
@@ -1,143 +0,0 @@
1
- import{createHash as B,parseArangoId as S,parseChar as _,parseId as D,parseNum as L,parseString as q,parseVarChar as k}from"@nlabs/utils";import{aql as A}from"arangojs";import{extractTags as w,getTagsByName as U,updateTagsInItem as j}from"./tags";import{parsePost as H}from"../adapters/postAdapter";import{ErrorTypes as N}from"../types/error.types";import{logError as f,logException as Q}from"../utils/analyticsUtils";import{getLimit as V,useDb as y}from"../utils/arangodbUtils";const W=1e5,O="posts",$=(e={})=>{const{from:r=0,latitude:t=0,longitude:o=0,to:i=30,type:n="post"}=e;return{latitude:L(t,32),limit:V(r,i),longitude:L(o,32),type:_(n,32)}},C=(e,r)=>(e||[]).reduce((t,o)=>{switch(o){case"hasRsvp":return t.queries.push(`LET hasRsvp = TO_BOOL(FIRST(
2
- FOR post, r IN INBOUND p._id hasReaction
3
- FILTER r.name == "rsvp" && r.type == "posts" && r._from == "users/${r}"
4
- COLLECT WITH COUNT INTO count
5
- RETURN count
6
- ))`),t.objects.push("hasRsvp:hasRsvp"),t;case"isSaved":return t.queries.push(`LET isSaved = TO_BOOL(FIRST(
7
- FOR post, r IN INBOUND p._id hasReaction
8
- FILTER r.name == "pin" && r.type == "posts" && r._from == "users/${r}"
9
- COLLECT WITH COUNT INTO count
10
- RETURN count
11
- ))`),t.objects.push("isSaved:isSaved"),t;case"reactions":return t.queries.push(`LET reactions = (
12
- FOR post, r IN INBOUND p._id hasReaction
13
- COLLECT reactionName = r.value INTO reactionItems
14
- RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
15
- )`),t.objects.push("reactions:reactions"),t;case"rsvpCount":return t.queries.push(`LET rsvpCount = FIRST(
16
- FOR post, r IN INBOUND p._id hasReaction
17
- FILTER r.name == "rsvp" && r.type == "posts"
18
- COLLECT WITH COUNT INTO count
19
- RETURN count
20
- )`),t.objects.push("rsvpCount:rsvpCount"),t;case"viewCount":return t.queries.push(`LET viewCount = FIRST(
21
- FOR post, r IN INBOUND p._id hasReaction
22
- FILTER r.name == "view" && r.type == "posts"
23
- COLLECT WITH COUNT INTO count
24
- RETURN count
25
- )`),t.objects.push("viewCount:viewCount"),t;default:return t}},{objects:[],queries:[]}),et=async(e,r,t)=>{const o="getPost",{databaseName:i,fields:n,session:{userId:p}}=e,R=D(r),{type:c}=$(t),s=y(i),{objects:a,queries:u}=C(n,p),d=A`FOR p IN posts
26
- FILTER p._key == ${R} && p.type == ${c}
27
- LIMIT 1
28
- RETURN p`;return s.query(d).then(I=>I.next()).then(I=>{const{_id:E,userId:T,groupId:h,privacy:m="default"}=I;let g;return T===p?I:(h&&m==="group"?g=`LET p = DOCUMENT("${E}")
29
- ${u.join(`
30
- `)}
31
- FOR group IN groups
32
- FILTER group._key == p.groupId
33
- FOR u, e IN OUTBOUND group._id hasConnection
34
- FILTER u._key == "${p}"
35
- LIMIT 1
36
- RETURN MERGE(p, {${a.join(", ")}})`:m==="public"&&(g=`LET p = DOCUMENT("${E}")
37
- ${u.join(`
38
- `)}
39
- LIMIT 1
40
- RETURN MERGE(p, {${a.join(", ")}})`),g?s.query(g).then(l=>l.next()).catch(l=>f({action:o,category:O,label:N.DATABASE_ERROR},l,e)):{})}).catch(I=>f({action:o,category:O,label:N.DATABASE_ERROR},I,e))},st=(e,r,t,o)=>{const i="getPostsByArea",{databaseName:n,fields:p,session:{userId:R}}=e,{limit:c,type:s}=$(o),a=L(r),u=L(t),{objects:d,queries:I}=C(p,R);I.push(`LET distance = DISTANCE(
41
- ${a},
42
- ${u},
43
- NOT_NULL(p.latitude, 0),
44
- NOT_NULL(p.longitude, 0))
45
- `),d.push("distance:distance");const E=`FOR p IN posts
46
- ${I.join(`
47
- `)}
48
- FILTER p.type == "${s}" && p.privacy == "public" && p.parentId == null
49
- ${c.aql}
50
- SORT distance, p.added
51
- RETURN DISTINCT MERGE(p, {${d.join(", ")}})`;return y(n).query(E).then(T=>T.all()).catch(T=>(f({action:i,category:O,label:N.DATABASE_ERROR},T,e),[]))},ot=(e,r)=>{const{databaseName:t,fields:o,session:{userId:i}}=e,{limit:n,type:p}=$(r),{objects:R,queries:c}=C(o,i),s=`FOR p IN posts
52
- FILTER p.type == "${p}" && p.privacy == "public" && p.parent == null
53
- ${c.join(`
54
- `)}
55
- ${n.aql}
56
- SORT p.added DESC
57
- RETURN DISTINCT MERGE(p, {${R.join(", ")}})`;return y(t).query(s).then(a=>a.all()).catch(a=>{throw a})},rt=(e,r=[],t)=>{const o="getPostsByReactions",{databaseName:i,fields:n,session:{userId:p}}=e,{latitude:R,limit:c,longitude:s,type:a}=$(t),{objects:u,queries:d}=C(n,p),I=`users/${p}`,E=JSON.stringify(r.map(P=>_(P,32).toLowerCase())),T=[],h=[`p.type == "${a}"`,'p.privacy == "public"'],m=L(R),g=L(s);m&&g&&(d.push(`LET distance = DISTANCE(
58
- ${m},
59
- ${g},
60
- NOT_NULL(p.latitude, 0),
61
- NOT_NULL(p.longitude, 0))
62
- `),u.push("distance:distance"),T.push("distance")),r.length&&(T.push("matchedTags DESC"),d.push(`LET matchedReactions = LENGTH(
63
- FOR mr IN reactions
64
- FILTER mr.matched == true
65
- RETURN mr
66
- )`),u.push("matchedReactions:matchedReactions"),h.push("matchedReactions > 0")),T.push("p.added DESC"),u.push("reactions:reactions");const l=`FOR p, r IN OUTBOUND "${I}" hasReaction
67
- LET reactions = (
68
- FOR reaction, hr IN 1..1 INBOUND p isTagged
69
- LET matched = LENGTH(${E}) > 0 && POSITION(${E}, reaction.name)
70
- SORT reaction.name
71
- RETURN MERGE(reaction, {matched:matched})
72
- )
73
- ${d.join(`
74
- `)}
75
- FILTER ${h.join(" && ")}
76
- ${c.aql}
77
- RETURN DISTINCT MERGE(p, {${u.join(", ")}})`;return y(i).query(l).then(P=>P.all()).catch(P=>(f({action:o,category:O,label:N.DATABASE_ERROR},P,e),[]))},nt=(e,r=[],t)=>{const o="getPostsByTags",{databaseName:i,fields:n,session:{userId:p}}=e,{latitude:R,limit:c,longitude:s,type:a}=$(t),{objects:u,queries:d}=C(n,p),I=JSON.stringify(r.map(l=>_(l,32).toLowerCase())),E=[],T=[`p.type == "${a}"`,'p.privacy == "public"'],h=L(R),m=L(s);h&&m&&(d.push(`LET distance = DISTANCE(
78
- ${h},
79
- ${m},
80
- NOT_NULL(p.latitude, 0),
81
- NOT_NULL(p.longitude, 0))
82
- `),u.push("distance:distance"),E.push("distance")),r.length&&(E.push("matchedTags DESC"),d.push(`LET matchedTags = LENGTH(
83
- FOR t IN tags
84
- FILTER t.matched == true
85
- RETURN t
86
- )`),u.push("matchedTags:matchedTags"),T.push("matchedTags > 0")),E.push("p.added DESC"),u.push("tags:tags");const g=`FOR p IN posts
87
- LET tags = (
88
- FOR tag, it IN 1..1 INBOUND p isTagged
89
- LET matched = LENGTH(${I}) > 0 && POSITION(${I}, tag.name)
90
- SORT tag.name
91
- RETURN MERGE(tag, {matched:matched})
92
- )
93
- ${d.join(`
94
- `)}
95
- FILTER ${T.join(" && ")}
96
- ${c.aql}
97
- SORT ${E.join(", ")}
98
- RETURN DISTINCT MERGE(p, {${u.join(", ")}})`;return y(i).query(g).then(l=>l.all()).catch(l=>(f({action:o,category:O,label:N.DATABASE_ERROR},l,e),[]))},at=(e,r,t)=>{const o="getPostsByUser",{databaseName:i,fields:n,session:{userId:p}}=e,{limit:R,type:c}=$(t),s=D(r),{objects:a,queries:u}=C(n,p),d=`FOR p IN posts
99
- FILTER p.userId == "${s}" && p.type == "${c}" && p.privacy == "public" && p.parent == null
100
- ${u.join(`
101
- `)}
102
- ${R.aql}
103
- SORT p.added
104
- RETURN DISTINCT MERGE(p, {${a.join(", ")}})`;return y(i).query(d).then(I=>I.all()).catch(I=>(f({action:o,category:O,label:N.DATABASE_ERROR},I,e),[]))},it=(e,r,t)=>{const o="getPostComments",{databaseName:i,session:{userId:n}}=e,{limit:p,type:R}=$(t),c=D(r),s=A`FOR p IN posts
105
- FILTER p.type == ${R} && p._key == ${c}
106
- LIMIT 1
107
- RETURN p`;return y(i).query(s).then(a=>a.next()).then(a=>{const{_key:u,groupId:d,privacy:I="default"}=a;let E;return d&&I==="group"?E=`FOR p IN posts
108
- FOR user IN users
109
- FILTER p.parent == "${u}" && user._key == p.userId
110
- LET reactions = (
111
- FOR post, r IN INBOUND p._id reactions
112
- COLLECT reactionName = r.value INTO reactionItems
113
- RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
114
- )
115
- FOR group IN groups
116
- FILTER group._key == p.groupId
117
- FOR u, e IN OUTBOUND group._id hasConnection
118
- FILTER u._key == "${n}"
119
- SORT p.added
120
- ${p.aql}
121
- RETURN MERGE(p, {user: user, reactions: reactions})`:I==="public"&&(E=`FOR p IN posts
122
- FOR user IN users
123
- FILTER p.parent == "${u}" && user._key == p.userId
124
- LET reactions = (
125
- FOR post, r IN INBOUND p._id reactions
126
- COLLECT reactionName = r.value INTO reactionItems
127
- RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
128
- )
129
- SORT p.added
130
- ${p.aql}
131
- RETURN MERGE(p, {user: user, reactions: reactions})`),E?y(i).query(E).then(T=>T.all()).catch(T=>(f({action:o,category:O,label:N.DATABASE_ERROR},T,e),[])):[]}).catch(a=>(f({action:o,category:O,label:N.DATABASE_ERROR},a,e),[]))},pt=async(e,{content:r="",endDate:t,groupId:o="",location:i,latitude:n,longitude:p,name:R="",parentId:c=null,privacy:s="public",tags:a=[],startDate:u,type:d="default"})=>{const I="addPost",{databaseName:E,session:{userId:T}}=e,h=Date.now(),m=B(`post-${T}`),g={_id:`posts/${m}`,_key:m,added:h,content:q(r,W),endDate:t?L(t,13):void 0,groupId:o?D(o):void 0,latitude:n!==void 0?L(n):void 0,location:i?q(i,160):void 0,longitude:p!==void 0?L(p):void 0,modified:h,name:q(R,160),parentId:c?D(c):void 0,privacy:k(s,16),startDate:u?L(u,13):void 0,type:_(d,32),userId:T},l=A`INSERT ${g} IN posts RETURN NEW`;try{const P=await y(E).query(l).then(b=>b.next()).catch(b=>f({action:I,category:O,label:N.DATABASE_ERROR},b,e)),{_id:M}=P,v=await w(g.content);if(a.length||v.length){const b=(await U(e,a.map(({name:F})=>F))).map(F=>({...F,tagBy:T})),x=(await U(e,v)).map(F=>({...F,tagBy:"extract"})),G=await j(e,{itemDocId:M,tags:[...x,...b]});return{...P,tags:G}}return P}catch(P){throw P}},ct=async(e,r)=>{const t="updatePost",{databaseName:o,session:{userId:i}}=e,n=Date.now(),p=H(r),{postId:R,tags:c=[]}=p,s={...p,modified:n};if(!R)return Q({action:t,category:O,value:N.INVALID_ID},{});const a={...s,_key:R,added:n,userId:i},u=A`UPSERT {_key: ${R}, userId: ${i}}
132
- INSERT ${a}
133
- UPDATE ${s}
134
- IN posts RETURN NEW`;try{const d=await y(o).query(u).then(T=>T.next()).catch(T=>f({action:t,category:O,value:N.DATABASE_ERROR},T,{})),{_id:I}=d,E=await w(a.content);if(c?.length||E?.length){const T=c?.length?(await U(e,c.map(({name:g})=>g))).map(g=>({...g,tagBy:i})):[],h=E?.length?(await U(e,E)).map(g=>({...g,tagBy:"extract"})):[],m=await j(e,{itemDocId:I,tags:[...h,...T]});return{...d,tags:m}}return d}catch(d){throw d}},ut=async(e,r)=>{const t="deletePost",{databaseName:o,session:{userId:i}}=e,n=S(r);if(!n)return Q({action:t,category:O,value:N.INVALID_ID},{});const p=A`FOR t IN isTagged
135
- FILTER t._to == ${n}
136
- REMOVE t IN isTagged`;await y(o).query(p).catch(s=>{throw s});const R=A`FOR f IN hasFile
137
- FILTER f._to == ${n}
138
- REMOVE f IN hasFile`;await y(o).query(R).catch(s=>{throw s});const c=A`FOR p IN posts
139
- FILTER p._id == ${n} && p.userId == ${i}
140
- LIMIT 1
141
- REMOVE p IN posts
142
- RETURN OLD`;return y(o).query(c).then(s=>s.next()).catch(s=>{throw s})},dt=(e,r,t,o="isPosted",i={})=>{const n="createPostEdge",{databaseName:p}=e,R=y(p).collection(o),c=S(r),s=S(t);if(!s||!c)return Promise.reject(new Error(N.INVALID_ID));const a=B(`postEdge-${c}-${s}`),u={_from:c,_key:a,_to:s,added:Date.now(),...i};return R.save(u,{returnNew:!0}).catch(d=>f({action:n,category:O,value:N.DATABASE_ERROR},d,{}))};export{pt as addPost,dt as createPostEdge,ut as deletePost,et as getPost,it as getPostComments,C as getPostOptional,st as getPostsByArea,ot as getPostsByLatest,rt as getPostsByReactions,nt as getPostsByTags,at as getPostsByUser,$ as parsePostOptions,ct as updatePost};
143
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1xuICBjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtleHRyYWN0VGFncywgZ2V0VGFnc0J5TmFtZSwgdXBkYXRlVGFnc0luSXRlbX0gZnJvbSAnLi90YWdzJztcbmltcG9ydCB7cGFyc2VQb3N0fSBmcm9tICcuLi9hZGFwdGVycy9wb3N0QWRhcHRlcic7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dCwgQXJhbmdvRGJMaW1pdCwgRmlsZVR5cGUsIFBvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZSwgVGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5cbmNvbnN0IE1BWF9DT05URU5UX0xFTkdUSDogbnVtYmVyID0gMTAwMDAwO1xuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3Bvc3RzJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdE9wdGlvbnMgPSAob3B0aW9uczogUG9zdE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgbGF0aXR1ZGUgPSAwLFxuICAgIGxvbmdpdHVkZSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ3Bvc3QnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGF0aXR1ZGU6IHBhcnNlTnVtKGxhdGl0dWRlLCAzMiksXG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIGxvbmdpdHVkZTogcGFyc2VOdW0obG9uZ2l0dWRlLCAzMiksXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RPcHRpb25hbCA9IChmaWVsZHM6IHN0cmluZ1tdLCBzZXNzaW9uSWQ6IHN0cmluZykgPT5cbiAgKGZpZWxkcyB8fCBbXSkucmVkdWNlKChzZWxlY3RzLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdoYXNSc3ZwJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIGhhc1JzdnAgPSBUT19CT09MKEZJUlNUKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBGSUxURVIgci5uYW1lID09IFwicnN2cFwiICYmIHIudHlwZSA9PSBcInBvc3RzXCIgJiYgci5fZnJvbSA9PSBcInVzZXJzLyR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ2hhc1JzdnA6aGFzUnN2cCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2lzU2F2ZWQnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgaXNTYXZlZCA9IFRPX0JPT0woRklSU1QoXG4gICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCBoYXNSZWFjdGlvblxuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJwaW5cIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiICYmIHIuX2Zyb20gPT0gXCJ1c2Vycy8ke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgICAgUkVUVVJOIGNvdW50XG4gICAgICAgICkpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdpc1NhdmVkOmlzU2F2ZWQnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JzdnBDb3VudCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByc3ZwQ291bnQgPSBGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInJzdnBcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncnN2cENvdW50OnJzdnBDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ZpZXdDb3VudCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB2aWV3Q291bnQgPSBGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInZpZXdcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndmlld0NvdW50OnZpZXdDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKHBvc3RJZCk7XG4gIGNvbnN0IHt0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9ICYmIHAudHlwZSA9PSAke3R5cGV9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9pZDogcG9zdERvY0lkLFxuICAgICAgICB1c2VySWQsXG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIHByaXZhY3kgPSAnZGVmYXVsdCdcbiAgICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgICAgbGV0IHByaXZhY3lBcWxRcnk6IHN0cmluZztcblxuICAgICAgaWYodXNlcklkID09PSBzZXNzaW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIHBvc3Q7XG4gICAgICB9XG5cbiAgICAgIGlmKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgICAgICAgRk9SIGdyb3VwIElOIGdyb3Vwc1xuICAgICAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgICAgIEZPUiB1LCBlIElOIE9VVEJPVU5EIGdyb3VwLl9pZCBoYXNDb25uZWN0aW9uXG4gICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICAgICAgfSBlbHNlIGlmKHByaXZhY3kgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gICAgICB9XG5cbiAgICAgIGlmKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7fTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cblxuLy8gZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuLy8gICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlBcHAnO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbi8vICAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbi8vICAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbi8vICAgICBGSUxURVIgcC50eXBlID09IFwiJHt0eXBlfVwiICYmIHAucHJpdmFjeSA9PSBcInB1YmxpY1wiICYmIHAucGFyZW50ID09IG51bGxcbi8vICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4vLyAgICAgJHtsaW1pdC5hcWx9XG4vLyAgICAgU09SVCBwLmFkZGVkXG4vLyAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbi8vICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbi8vICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlBcmVhID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsYXRpdHVkZTogbnVtYmVyLFxuICBsb25naXR1ZGU6IG51bWJlcixcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeUFyZWEnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRShcbiAgICAke2Zvcm1hdExhdGl0dWRlfSxcbiAgICAke2Zvcm1hdExvbmdpdHVkZX0sXG4gICAgTk9UX05VTEwocC5sYXRpdHVkZSwgMCksXG4gICAgTk9UX05VTEwocC5sb25naXR1ZGUsIDApKVxuICBgKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuXG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnRJZCA9PSBudWxsXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCBkaXN0YW5jZSwgcC5hZGRlZFxuICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlHcm91cCA9IChcbi8vICAgY29udGV4dDogQXBpQ29udGV4dCxcbi8vICAgZ3JvdXBJZDogc3RyaW5nLFxuLy8gICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbi8vICk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuLy8gICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlHcm91cCc7XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4vLyAgIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG5cbi8vICAgLy8gR3JvdXAgaWRcbi8vICAgY29uc3QgZm9ybWF0R3JvdXBJZDogc3RyaW5nID0gcGFyc2VJZChncm91cElkKTtcbi8vICAgY29uc3QgZGIgPSBkYXRhYmFzZTtcbi8vICAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHUsIGcgSU4gSU5CT1VORCAke2Zvcm1hdEdyb3VwSWR9IGhhc0dyb3VwXG4vLyAgICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuLy8gICAgICAgUkVUVVJOIGdgO1xuXG4vLyAgIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4vLyAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuLy8gICAgIC50aGVuKChncm91cHM6IEdyb3VwVHlwZVtdID0gW10pID0+IHtcbi8vICAgICAgIGlmKGdyb3Vwcy5sZW5ndGgpIHtcbi8vICAgICAgICAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4vLyAgICAgICAgIGNvbnN0IHBvc3RBcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgICAgICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5ncm91cElkID09IFwiJHtmb3JtYXRHcm91cElkfVwiICYmIHAucGFyZW50ID09IG51bGxcbi8vICAgICAgICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4vLyAgICAgICAgICAgJHtsaW1pdC5hcWx9XG4vLyAgICAgICAgICAgU09SVCBwLmFkZGVkXG4vLyAgICAgICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbi8vICAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KHBvc3RBcWxRcnkpXG4vLyAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuLy8gICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4vLyAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICAgICAgICB9KTtcbi8vICAgICAgIH1cblxuLy8gICAgICAgcmV0dXJuIFtdO1xuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbi8vICAgICAgIHRocm93IGVycm9yO1xuLy8gICAgIH0pO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RzQnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICBGSUxURVIgcC50eXBlID09IFwiJHt0eXBlfVwiICYmIHAucHJpdmFjeSA9PSBcInB1YmxpY1wiICYmIHAucGFyZW50ID09IG51bGxcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCBwLmFkZGVkIERFU0NcbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3RzQnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmVhY3Rpb25zLm1hcCgocmVhY3Rpb24pID0+IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgJ3AucHJpdmFjeSA9PSBcInB1YmxpY1wiJ107XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcblxuICBpZihmb3JtYXRMYXRpdHVkZSAmJiBmb3JtYXRMb25naXR1ZGUpIHtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBkaXN0YW5jZSA9IERJU1RBTkNFKFxuICAgICAgJHtmb3JtYXRMYXRpdHVkZX0sXG4gICAgICAke2Zvcm1hdExvbmdpdHVkZX0sXG4gICAgICBOT1RfTlVMTChwLmxhdGl0dWRlLCAwKSxcbiAgICAgIE5PVF9OVUxMKHAubG9uZ2l0dWRlLCAwKSlcbiAgICBgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG4gICAgc29ydEJ5LnB1c2goJ2Rpc3RhbmNlJyk7XG4gIH1cblxuICBpZihyZWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBtYXRjaGVkUmVhY3Rpb25zID0gTEVOR1RIKFxuICAgICAgRk9SIG1yIElOIHJlYWN0aW9uc1xuICAgICAgRklMVEVSIG1yLm1hdGNoZWQgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIG1yXG4gICAgKWApO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnbWF0Y2hlZFJlYWN0aW9uczptYXRjaGVkUmVhY3Rpb25zJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zID4gMCcpO1xuICB9XG5cbiAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICBzZWxlY3RPYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwLCByIElOIE9VVEJPVU5EIFwiJHtmb3JtYXRTZXNzaW9uSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgRk9SIHJlYWN0aW9uLCBociBJTiAxLi4xIElOQk9VTkQgcCBpc1RhZ2dlZFxuICAgICAgTEVUIG1hdGNoZWQgPSBMRU5HVEgoJHtmb3JtYXRSZWFjdGlvbnN9KSA+IDAgJiYgUE9TSVRJT04oJHtmb3JtYXRSZWFjdGlvbnN9LCByZWFjdGlvbi5uYW1lKVxuICAgICAgU09SVCByZWFjdGlvbi5uYW1lXG4gICAgICBSRVRVUk4gTUVSR0UocmVhY3Rpb24sIHttYXRjaGVkOm1hdGNoZWR9KVxuICAgIClcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFBvc3RUeXBlW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhZ3M6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3RzQnlUYWdzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBmb3JtYXRUYWdOYW1lczogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGFncy5tYXAoKHRhZykgPT4gcGFyc2VDaGFyKHRhZywgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgJ3AucHJpdmFjeSA9PSBcInB1YmxpY1wiJ107XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcblxuICBpZihmb3JtYXRMYXRpdHVkZSAmJiBmb3JtYXRMb25naXR1ZGUpIHtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYExFVCBkaXN0YW5jZSA9IERJU1RBTkNFKFxuICAgICAgJHtmb3JtYXRMYXRpdHVkZX0sXG4gICAgICAke2Zvcm1hdExvbmdpdHVkZX0sXG4gICAgICBOT1RfTlVMTChwLmxhdGl0dWRlLCAwKSxcbiAgICAgIE5PVF9OVUxMKHAubG9uZ2l0dWRlLCAwKSlcbiAgICBgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG4gICAgc29ydEJ5LnB1c2goJ2Rpc3RhbmNlJyk7XG4gIH1cblxuICBpZih0YWdzLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkVGFncyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgbWF0Y2hlZFRhZ3MgPSBMRU5HVEgoXG4gICAgICBGT1IgdCBJTiB0YWdzXG4gICAgICBGSUxURVIgdC5tYXRjaGVkID09IHRydWVcbiAgICAgIFJFVFVSTiB0XG4gICAgKWApO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnbWF0Y2hlZFRhZ3M6bWF0Y2hlZFRhZ3MnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRUYWdzID4gMCcpO1xuICB9XG5cbiAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICBzZWxlY3RPYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuXG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RzXG4gICAgTEVUIHRhZ3MgPSAoXG4gICAgICBGT1IgdGFnLCBpdCBJTiAxLi4xIElOQk9VTkQgcCBpc1RhZ2dlZFxuICAgICAgTEVUIG1hdGNoZWQgPSBMRU5HVEgoJHtmb3JtYXRUYWdOYW1lc30pID4gMCAmJiBQT1NJVElPTigke2Zvcm1hdFRhZ05hbWVzfSwgdGFnLm5hbWUpXG4gICAgICBTT1JUIHRhZy5uYW1lXG4gICAgICBSRVRVUk4gTUVSR0UodGFnLCB7bWF0Y2hlZDptYXRjaGVkfSlcbiAgICApXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgJHtzb3J0Qnkuam9pbignLCAnKX1cbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3RzQnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICBGSUxURVIgcC51c2VySWQgPT0gXCIke2Zvcm1hdFVzZXJJZH1cIiAmJiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIHAuYWRkZWRcbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0Q29tbWVudHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRQb3N0Q29tbWVudHMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQocG9zdElkKTtcblxuICAvLyBHZXQgdGhlIHBhcmVudCBwb3N0IHRvIGdldCByZXN0cmljdGlvbnNcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiBwb3N0c1xuICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocG9zdDogUG9zdFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2tleSxcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgcHJpdmFjeSA9ICdkZWZhdWx0J1xuICAgICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgICAvLyBRdWVyeSBiYXNlZCBvbiBwcml2YWN5IGxldmVsXG4gICAgICBsZXQgcHJpdmFjeUFxbFFyeTogc3RyaW5nO1xuXG4gICAgICBpZihncm91cElkICYmIHByaXZhY3kgPT09ICdncm91cCcpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgIEZPUiB1c2VyIElOIHVzZXJzXG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiICYmIHVzZXIuX2tleSA9PSBwLnVzZXJJZFxuICAgICAgICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgICApXG4gICAgICAgICAgRk9SIGdyb3VwIElOIGdyb3Vwc1xuICAgICAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgICAgIEZPUiB1LCBlIElOIE9VVEJPVU5EIGdyb3VwLl9pZCBoYXNDb25uZWN0aW9uXG4gICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH0gZWxzZSBpZihwcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCIgJiYgdXNlci5fa2V5ID09IHAudXNlcklkXG4gICAgICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgcmVhY3Rpb25zXG4gICAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICAgIClcbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfVxuXG4gICAgICBpZihwcml2YWN5QXFsUXJ5KSB7XG4gICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdIGFzIFBvc3RUeXBlW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udGVudCA9ICcnLFxuICAgIGVuZERhdGUsXG4gICAgZ3JvdXBJZCA9ICcnLFxuICAgIGxvY2F0aW9uLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvbmdpdHVkZSxcbiAgICBuYW1lID0gJycsXG4gICAgcGFyZW50SWQgPSBudWxsLFxuICAgIHByaXZhY3kgPSAncHVibGljJyxcbiAgICB0YWdzID0gW10sXG4gICAgc3RhcnREYXRlLFxuICAgIHR5cGUgPSAnZGVmYXVsdCdcbiAgfTogUG9zdElucHV0VHlwZVxuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBwb3N0SWQgPSBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBpbnNlcnQ6IFBvc3RUeXBlID0ge1xuICAgIF9pZDogYHBvc3RzLyR7cG9zdElkfWAsXG4gICAgX2tleTogcG9zdElkLFxuICAgIGFkZGVkOiBub3csXG4gICAgY29udGVudDogcGFyc2VTdHJpbmcoY29udGVudCwgTUFYX0NPTlRFTlRfTEVOR1RIKSxcbiAgICBlbmREYXRlOiBlbmREYXRlID8gcGFyc2VOdW0oZW5kRGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICAgIGdyb3VwSWQ6IGdyb3VwSWQgPyBwYXJzZUlkKGdyb3VwSWQpIDogdW5kZWZpbmVkLFxuICAgIGxhdGl0dWRlOiBsYXRpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0obGF0aXR1ZGUpIDogdW5kZWZpbmVkLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvbiA/IHBhcnNlU3RyaW5nKGxvY2F0aW9uLCAxNjApIDogdW5kZWZpbmVkLFxuICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsb25naXR1ZGUpIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogcGFyc2VTdHJpbmcobmFtZSwgMTYwKSxcbiAgICBwYXJlbnRJZDogcGFyZW50SWQgPyBwYXJzZUlkKHBhcmVudElkKSA6IHVuZGVmaW5lZCxcbiAgICBwcml2YWN5OiBwYXJzZVZhckNoYXIocHJpdmFjeSwgMTYpLFxuICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlID8gcGFyc2VOdW0oc3RhcnREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKSxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gcG9zdHMgUkVUVVJOIE5FV2A7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzYXZlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcbiAgICBjb25zdCBjb250ZW50VGFnTmFtZXMgPSBhd2FpdCBleHRyYWN0VGFncyhpbnNlcnQuY29udGVudCk7XG5cbiAgICBpZih0YWdzLmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB1c2VyVGFncyA9IChhd2FpdCBnZXRUYWdzQnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUpKSlcbiAgICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6IHNlc3Npb25JZH0pKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gKGF3YWl0IGdldFRhZ3NCeU5hbWUoY29udGV4dCwgY29udGVudFRhZ05hbWVzKSlcbiAgICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6ICdleHRyYWN0J30pKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzOiBUYWdUeXBlW10gPSBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB7XG4gICAgICAgICAgaXRlbURvY0lkOiBwb3N0RG9jSWQsXG4gICAgICAgICAgdGFnczogWy4uLmNvbnRlbnRUYWdzLCAuLi51c2VyVGFnc11cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2F2ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2F2ZWRQb3N0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3Q6IFBvc3RJbnB1dFR5cGUpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZVBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcGFyc2VkUG9zdCA9IHBhcnNlUG9zdChwb3N0KTtcbiAgY29uc3Qge1xuICAgIHBvc3RJZCxcbiAgICB0YWdzID0gW11cbiAgfSA9IHBhcnNlZFBvc3Q7XG5cbiAgY29uc3QgdXBkYXRlOiBQb3N0VHlwZSA9IHtcbiAgICAuLi5wYXJzZWRQb3N0LFxuICAgIG1vZGlmaWVkOiBub3dcbiAgfTtcblxuICBpZighcG9zdElkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCB7fSk7XG4gIH1cblxuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgLi4udXBkYXRlLFxuICAgIF9rZXk6IHBvc3RJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke3Bvc3RJZH0sIHVzZXJJZDogJHtzZXNzaW9uSWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gcG9zdHMgUkVUVVJOIE5FV2A7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGRhdGVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpXG4gICAgICAucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pKTtcbiAgICBjb25zdCB7X2lkOiB1cGRhdGVkUG9zdElkfSA9IHVwZGF0ZWRQb3N0O1xuICAgIGNvbnN0IGNvbnRlbnRUYWdOYW1lcyA9IGF3YWl0IGV4dHJhY3RUYWdzKGluc2VydC5jb250ZW50KTtcblxuICAgIGlmKHRhZ3M/Lmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdXNlclRhZ3MgPSB0YWdzPy5sZW5ndGggPyAoYXdhaXQgZ2V0VGFnc0J5TmFtZShjb250ZXh0LCB0YWdzLm1hcCgoe25hbWV9KSA9PiBuYW1lKSkpXG4gICAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiBzZXNzaW9uSWR9KSkgOiBbXTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gY29udGVudFRhZ05hbWVzPy5sZW5ndGggPyAoYXdhaXQgZ2V0VGFnc0J5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMpKVxuICAgICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogJ2V4dHJhY3QnfSkpIDogW107XG4gICAgICBjb25zdCB1cGRhdGVkVGFnczogVGFnVHlwZVtdID0gYXdhaXQgdXBkYXRlVGFnc0luSXRlbShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAge1xuICAgICAgICAgIGl0ZW1Eb2NJZDogdXBkYXRlZFBvc3RJZCxcbiAgICAgICAgICB0YWdzOiBbLi4uY29udGVudFRhZ3MsIC4uLnVzZXJUYWdzXVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRQb3N0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRQb3N0SWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcblxuICBpZighZm9ybWF0UG9zdElkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCB7fSk7XG4gIH1cblxuICBjb25zdCBlZGdlQXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdCBJTiBpc1RhZ2dlZFxuICBGSUxURVIgdC5fdG8gPT0gJHtmb3JtYXRQb3N0SWR9XG4gIFJFTU9WRSB0IElOIGlzVGFnZ2VkYDtcblxuICBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGVkZ2VBcWxRcnkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuXG4gIGNvbnN0IGZpbGVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBmIElOIGhhc0ZpbGVcbiAgICBGSUxURVIgZi5fdG8gPT0gJHtmb3JtYXRQb3N0SWR9XG4gICAgUkVNT1ZFIGYgSU4gaGFzRmlsZWA7XG5cbiAgYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShmaWxlQXFsUXJ5KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcblxuICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIHAgSU4gcG9zdHNcbiAgICAgIEZJTFRFUiBwLl9pZCA9PSAke2Zvcm1hdFBvc3RJZH0gJiYgcC51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgcCBJTiBwb3N0c1xuICAgICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvc3RFZGdlID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgaXRlbURvY0lkOiBzdHJpbmcsXG4gIGVkZ2VUeXBlOiBzdHJpbmcgPSAnaXNQb3N0ZWQnLFxuICBwcm9wcyA9IHt9XG4pOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVQb3N0RWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKGVkZ2VUeXBlKTtcbiAgY29uc3QgZm9ybWF0UG9zdElkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG4gIGNvbnN0IGZvcm1hdERvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1Eb2NJZCk7XG5cbiAgaWYoIWZvcm1hdERvY0lkIHx8ICFmb3JtYXRQb3N0SWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9JRCkpO1xuICB9XG5cbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBwb3N0RWRnZS0ke2Zvcm1hdFBvc3RJZH0tJHtmb3JtYXREb2NJZH1gKTtcbiAgY29uc3QgZWRnZSA9IHtcbiAgICBfZnJvbTogZm9ybWF0UG9zdElkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdERvY0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIC4uLnByb3BzXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUNFLGNBQUFBLEVBQVksaUJBQUFDLEVBQWUsYUFBQUMsRUFBVyxXQUFBQyxFQUFTLFlBQUFDLEVBQVUsZUFBQUMsRUFBYSxnQkFBQUMsTUFDakUsZUFDUCxPQUFRLE9BQUFDLE1BQVUsV0FHbEIsT0FBUSxlQUFBQyxFQUFhLGlCQUFBQyxFQUFlLG9CQUFBQyxNQUF1QixTQUMzRCxPQUFRLGFBQUFDLE1BQWdCLDBCQUN4QixPQUFRLGNBQUFDLE1BQWlCLHVCQUN6QixPQUFRLFlBQUFDLEVBQVUsZ0JBQUFDLE1BQW1CLDBCQUNyQyxPQUFRLFlBQUFDLEVBQVUsU0FBQUMsTUFBWSx5QkFLOUIsTUFBTUMsRUFBNkIsSUFDN0JDLEVBQXdCLFFBRWpCQyxFQUFtQixDQUFDQyxFQUF1QixDQUFDLElBQU0sQ0FDN0QsS0FBTSxDQUNKLEtBQUFDLEVBQU8s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QU8sSUFBSSxNQUFNN0UsRUFBVyxVQUFVLENBQUMsRUFHeEQsTUFBTXNGLEVBQWlCbEcsRUFBVyxZQUFZeUYsQ0FBWSxJQUFJUSxDQUFXLEVBQUUsRUFDckVFLEVBQU8sQ0FDWCxNQUFPVixFQUNQLEtBQU1TLEVBQ04sSUFBS0QsRUFDTCxNQUFPLEtBQUssSUFBSSxFQUNoQixHQUFHRixDQUNMLEVBRUEsT0FBT0MsRUFBZSxLQUFLRyxFQUFNLENBQUMsVUFBVyxFQUFJLENBQUMsRUFDL0MsTUFBT25ELEdBQ05uQyxFQUFTLENBQ1AsT0FBQXFCLEVBQ0EsU0FBVWhCLEVBQ1YsTUFBT04sRUFBVyxjQUNwQixFQUFHb0MsRUFBTyxDQUFDLENBQUMsQ0FBQyxDQUNuQiIsCiAgIm5hbWVzIjogWyJjcmVhdGVIYXNoIiwgInBhcnNlQXJhbmdvSWQiLCAicGFyc2VDaGFyIiwgInBhcnNlSWQiLCAicGFyc2VOdW0iLCAicGFyc2VTdHJpbmciLCAicGFyc2VWYXJDaGFyIiwgImFxbCIsICJleHRyYWN0VGFncyIsICJnZXRUYWdzQnlOYW1lIiwgInVwZGF0ZVRhZ3NJbkl0ZW0iLCAicGFyc2VQb3N0IiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAibG9nRXhjZXB0aW9uIiwgImdldExpbWl0IiwgInVzZURiIiwgIk1BWF9DT05URU5UX0xFTkdUSCIsICJldmVudENhdGVnb3J5IiwgInBhcnNlUG9zdE9wdGlvbnMiLCAib3B0aW9ucyIsICJmcm9tIiwgImxhdGl0dWRlIiwgImxvbmdpdHVkZSIsICJ0byIsICJ0eXBlIiwgImdldFBvc3RPcHRpb25hbCIsICJmaWVsZHMiLCAic2Vzc2lvbklkIiwgInNlbGVjdHMiLCAiZmllbGQiLCAiZ2V0UG9zdCIsICJjb250ZXh0IiwgInBvc3RJZCIsICJhY3Rpb24iLCAiZGF0YWJhc2VOYW1lIiwgImZvcm1hdEl0ZW1JZCIsICJkYXRhYmFzZSIsICJzZWxlY3RPYmplY3RzIiwgInNlbGVjdFF1ZXJpZXMiLCAiYXFsUXJ5IiwgImN1cnNvciIsICJwb3N0IiwgInBvc3REb2NJZCIsICJ1c2VySWQiLCAiZ3JvdXBJZCIsICJwcml2YWN5IiwgInByaXZhY3lBcWxRcnkiLCAiZXJyb3IiLCAiZ2V0UG9zdHNCeUFyZWEiLCAibGltaXQiLCAiZm9ybWF0TGF0aXR1ZGUiLCAiZm9ybWF0TG9uZ2l0dWRlIiwgImdldFBvc3RzQnlMYXRlc3QiLCAiZ2V0UG9zdHNCeVJlYWN0aW9ucyIsICJyZWFjdGlvbnMiLCAiZm9ybWF0U2Vzc2lvbklkIiwgImZvcm1hdFJlYWN0aW9ucyIsICJyZWFjdGlvbiIsICJzb3J0QnkiLCAiZmlsdGVycyIsICJnZXRQb3N0c0J5VGFncyIsICJ0YWdzIiwgImZvcm1hdFRhZ05hbWVzIiwgInRhZyIsICJnZXRQb3N0c0J5VXNlciIsICJmb3JtYXRVc2VySWQiLCAiZ2V0UG9zdENvbW1lbnRzIiwgIl9rZXkiLCAiYWRkUG9zdCIsICJjb250ZW50IiwgImVuZERhdGUiLCAibG9jYXRpb24iLCAibmFtZSIsICJwYXJlbnRJZCIsICJzdGFydERhdGUiLCAibm93IiwgImluc2VydCIsICJzYXZlZFBvc3QiLCAiY29udGVudFRhZ05hbWVzIiwgInVzZXJUYWdzIiwgImNvbnRlbnRUYWdzIiwgInVwZGF0ZWRUYWdzIiwgInVwZGF0ZVBvc3QiLCAicGFyc2VkUG9zdCIsICJ1cGRhdGUiLCAidXBkYXRlZFBvc3QiLCAidXBkYXRlZFBvc3RJZCIsICJkZWxldGVQb3N0IiwgImZvcm1hdFBvc3RJZCIsICJlZGdlQXFsUXJ5IiwgImZpbGVBcWxRcnkiLCAiY3JlYXRlUG9zdEVkZ2UiLCAiaXRlbURvY0lkIiwgImVkZ2VUeXBlIiwgInByb3BzIiwgImVkZ2VDb2xsZWN0aW9uIiwgImZvcm1hdERvY0lkIiwgImVkZ2VJZCIsICJlZGdlIl0KfQo=